LINUXTALKS.CO

Сообщения rezedent12

 

Есть ли готовый рендер карт местности, создающий графические файлы?

Помучал гопатыча, почитал https://habr.com/ru/companies/ruvds/articles/786698/ но так и не нашёл того что искал.

Есть ли готовое решение, например в виде контейнера, которое загружает карту проекта OpenStreetMap и отдаёт графические файлы в указанном разрешении, в ответ на запросы с обозначением координат прямоугольника и требуемого разрешения? Желательно что бы можно было настраивать язык и переключать слои. Формат файлов желателен PNG с прозрачностью.

Нашёл https://github.com/maptiler/tileserver-gl но беглым чтением документации, так и не понял как запрашивать «квадраты».

Насколько верна эта инструкция от гопатыча?

http://your-tileserver-gl-url.org/{z}/{x}/{y}.png?bbox={minX},{minY},{maxX},{maxY}&width={width}&height={height}&lang={language}&style={style}&format={format}

 ,

rezedent12 ()

minimodem. Помогите разобраться в том как оно работает.

Нашёл кажись нужную мне программу http://www.whence.com/minimodem/ читаю http://www.whence.com/minimodem/minimodem.1.html но не понимаю как именно сделать то что мне нужно, как правильно использовать параметр −−file.

Нужно последовательность байт (файл) преобразовать в звуковой файл. А затем принятый звук записанный в файл, преобразовать обратно. Если же можно принимать поток (звуки) и в pipe писать символы, то это ещё круче.

 , ,

rezedent12 ()

Чем живое и не живое пока различаются.

Внутри мягкого робота есть твёрдый чип, внутри животного обладающего скелетом, есть мягкий мозг. Диалектика подсказывает что в будущем эти различия исчезнут.

 

rezedent12 ()

теоретическая возможность создания аппаратной закладки для преодоления воздушного зазора.

Когда то давно читал про модуляцию радиосигнала при помощи обращения к оперативной памяти.

Сегодня размышлял про использование кластеров видеокарт nVidia в самолётах ДРЛО. И подумал. Если производители делают в гражданском оборудовании закладки, для возможности отключить его какой то последовательностью байт. То предполагая это, следует его изолировать от цифровых сетей передачи данных и вносить в обрабатываемые данные аналоговый шум, типа перестановки или усреднения значений не меняющих смысл сигнала. Например микро-зашакаливание вроде конвертации png в jpeg высокого качества и обратно.

Но тогда те кто создают аппаратные закладки могут понимая это пойти дальше. И реализовать скрытные антенны принимающие радио-сигналы. Например сделать какую то линию на типовой плате для сервисного использования с низкой помехозащищённостью и программной коррекцией ошибок. Но микрокод будет накапливать в буфере данные, вернее перезаписывать их по кругу. Контроллер же динамической памяти, по любому много раз в секунду будет регенерируя память считывать последовательности и искать в них сигнатуры. Частота определенных ошибок будет модулировать последовательность битов.

Следовательно направив мощный радио-луч с определённым сигналом в сторону такого оборудования, можно будет вызвать в нём сбои. Например переведя видеокарты в режим в котором они будут совершать ошибки в случайный момент времени каждые 10 часов работы.

Я понимаю что всё это нереалистичная многоходовочка. Но насколько возможна практическая реализация скрытого радиоприёмника цифрового сигнала в чипе и антенны для него на типовой разводке платы?

 , , ,

rezedent12 ()

Потенциометр ставить перед усилителем или после?

Есть купленный когда то усилитель https://aliexpress.ru/item/1005004605000268.html
Есть регуляторы громкости, сдвоенные потенциометры, на 10K и на 50K. Динамики на 8 Ом, 6 ватт скорее всего.

Есть ли разница куда ставить регулятор, до усилителя или после?

Поставил регулятор 10K после и он похоже обрёл бесконечное сопротивление. Возможно просто перегрел его, хорошо что есть ещё несколько.
Блок питания использую 12 вольт 1 ампер.

 , , ,

rezedent12 ()

Идея конденсантора на основе графена.

Поискал на aliexpress, и вроде не нашёл. Так что не знаю насколько идея оригинальна.

Для начала нужна медная коробочка высотой около 2 мм. с предельно тонким металлическим дном, покрытым снаружи слоем изолятора.

Далее, нужно медную пыль рассеивать в камере с атмосферой из инертного газа и парами серебра. Так что бы медные пылинки покрылись тонким слоем серебра. Возможно производить медную пыль стоит в самой камере, что бы избежать окисления кислородом.

Микроскопический слой этой пыли нужно насыпать в коробочку и сверху насыпать слой графена. Затем опять слой этой пыли. Таким образом чередуя слои. Когда коробочка будет наполнена, то опустить в неё лужёный серебряным припоем по краям кусок медной фольги. Этот лист должен накрывать «засыпку» полностью.

Получившуюся заготовку следует поместить в вакуумную камеру и нагреть до температуры плавления серебра.

В процессе произойдёт плавление серебряной оболочки медной пыли, что повысит площадь контакта между пластинами и медными пылинками играющими роль их электрического соединителя. Из за этого произойдёт усадка. Поэтому и нужны «крышка» в виде листа медной фольги которая просядет одновременно с «засыпкой». А так же из за бокового лужения запаяет коробочку сохранив в ней вакуум.

Каждая такая коробочка является электродом конденсатора с высокой внутренней площадью поверхностей и высокой проводимостью. Поэтому их достаточно расположить рядом разделив тонким слоем изолятора, что бы получить конденсатор высокой ёмкости.

Проводящая пыль должна быть насыпана достаточно редко что бы частицы не сплавлялись между собой и не уменьшали площади поверхностей. Но так что бы каждая графеновая пластинка соединялась с пластинками другого слоя, только через эти медные перемычки. Сами пылинки должны быть очень мелкими, так что бы можно было сделать как можно больше слоёв графена.

Что скажите насчёт такой идеи? Оригинальна?

Если у кого то есть доступ к лаборатории имеющей должное оснащение, проверьте пожалуйста.

 , , ,

rezedent12 ()

Как понять есть ли видеоускорение?

В в хромоноге такая фигня https://ibb.co/JxPjt9G и по субъективным ощущениям, тормоза случаются. ОС debian 12.

01:00.0 VGA compatible controller: NVIDIA Corporation GM107 [GeForce GTX 750] (rev a2)

glxinfo -B

name of display: :0.0
display: :0  screen: 0
direct rendering: Yes
Memory info (GL_NVX_gpu_memory_info):
    Dedicated video memory: 2048 MB
    Total available memory: 2048 MB
    Currently available dedicated video memory: 1887 MB
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: NVIDIA GeForce GTX 750/PCIe/SSE2
OpenGL core profile version string: 4.6.0 NVIDIA 525.147.05
OpenGL core profile shading language version string: 4.60 NVIDIA
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile

OpenGL version string: 4.6.0 NVIDIA 525.147.05
OpenGL shading language version string: 4.60 NVIDIA
OpenGL context flags: (none)
OpenGL profile mask: (none)

OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 525.147.05
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20

nvidia-smi

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.147.05   Driver Version: 525.147.05   CUDA Version: 12.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  On   | 00000000:01:00.0  On |                  N/A |
| 33%   34C    P8     1W /  38W |    109MiB /  2048MiB |      1%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A       868      G   /usr/lib/xorg/Xorg                 52MiB |
|    0   N/A  N/A      2166      G   ...on=20240202-130115.425000       52MiB |
+-----------------------------------------------------------------------------+

cat /var/log/Xorg.0.log | grep glx

[    12.179] (II) LoadModule: "glx"
[    12.198] (II) Loading /usr/lib/xorg/modules/extensions/libglx.so
[    12.261] (II) Module glx: vendor="X.Org Foundation"
[    12.607] (II) Loading sub module "glxserver_nvidia"
[    12.607] (II) LoadModule: "glxserver_nvidia"
[    12.608] (II) Loading /usr/lib/xorg/modules/extensions/libglxserver_nvidia.so
[    12.889] (II) Module glxserver_nvidia: vendor="NVIDIA Corporation"

Может на wailand перейти? Другой драйвер поставить? Или у меня всё на само деле нормально и это хромоног выпендривается? Подскажите бенчмарк, что бы проверить. А может это nvidia - суки, замедляющие старые видеокарты в новых драйверах?

 , , ,

rezedent12 ()

Frostpunk. О игре.

Ссылки:
https://ru.wikipedia.org/wiki/Frostpunk
https://store.steampowered.com/app/323190/Frostpunk/

Ожидая вторую часть, я решил перепройти первую. Ранее я проходил ее на простом и среднем уровнях сложности, но в этот раз решил пройти на трудном. Поскольку я уже проходил сценарий «новый дом» несколько раз, я пришел к выводу, что «испытание» игры заключается в том, насколько далеко игрок зайдет по пути «порядка» или «веры», чтобы победить оппозицию. Те, кто узнав о гибели другого ближайшего поселения, захотят вернуться в Лондон. Если построить центр пропаганды, то возможно полностью предотвратить исход лондонцев. И для моего мировоззрения это подходит.

Вот иллюстрация законов пути «порядка» https://steam-helper.ru/wp-content/uploads/2018/04/9.jpg

Работа центра пропаганды приводит к игровым событиям, показывающим, что его работники могут перегибать, склонны к вранью или замалчиванию проблем, а также к травле оппонентов

Посмотрев, я задумался: зачем нужно устраивать эту пропаганду, когда каждое утро проводится общее собрание? (если принять соответствующий закон). Чем занимаются работники центра пропаганды, что нельзя сделать или сказать на общем собрании?

В итоге я пришел к выводу, что в игре существует условный «идеальный путь». Это тот, в котором поселение идет по пути «порядка», но не дальше боковой ветки. То есть, без органа насилия.

Иллюстрация законов адаптации https://files.vgtimes.ru/posts/2018-12/1543689667_004.jpg

В законах адаптации, идеальный путь - это:

  1. Поддержание жизни, то есть без переполнения больниц и без экспериментального лечения в санитарных пунктах.
  2. Дети в детских убежищах, то есть за ними присматривают пока взрослые работают.
  3. Кладбище, а не яма для трупов.
  4. Дома опеки, что бы тяжело больные не умирали не дождавшись лечения в лазаретах.
  5. Отказ от ухудшения качества еды. Никаких опилок и пустого супа.
  6. Отказ от сортировки больных.

Сначала я хотел пройти на трудном уровне сложности по идеальному пути. И дважды понимал что совершил ошибку, что проблемы кумулятивно копятся и идеальный вариант не получается. Я задумался. От чего в идеальном варианте можно отказаться. И я пришёл к выводу что основной проблемой была перегрузка медицинских учреждений. И решил пойти на уплотнение размещения пациентов. Но так же осмыслив другие ошибки прохождения игры. Понял что часто допускал паузы в развитии, по причине нехватки древесины. Что бы строить медицину, нужно много дерева. Но когда появляется место в медицинском учреждении, рабочий с лесопилки уходит на больничный. Поэтому решил сделать ставку на стеновой бур. В результате у меня образовался устойчивый избыток древесины и я что бы его освоить, построил все важные здания раньше чем игровые события давали задания их строить. То есть мастерская (место исследования технологий) начала работать раньше чем обычно. Наверно всего на день или два, казалось бы немного. Однако это полностью изменило типичную последовательность событий с которой я сталкивался в прохождениях ранее. Раньше исследовалось улучшение охотничьего снаряжения. Раньше была построена угольная шахта. Смещение графика строительства в самом начале, кумулятивно привело к большей промышленной мощи поселения. Больше угля позволило отапливать город лучше. Больше материалов позволило раньше перейти от палаток к домам. Больше медпунктов позволили уменьшить очередь на лечение. В результате меньше тяжело больных лежали в домах опеки. А самое главное, удалось быстро выйти на инженерные улучшения автоматонов, что позволило ускорить научные исследования круглосуточной работой двух мастерских помимо обычной работы трёх мастерских с людьми.

В итоге, игра стала на трудном уровне легче. Интересно, стоит ли проходить игру на уровне сложности «экстрим»? Мне кажется что разница будет только в числе погибших без лечения или обмороженных. Поскольку в моей стратегии прохождения, палатки не перестраиваются в дома, пока не будет исследована оптимизация уменьшающая материалоёмкость жилищ.

🚀 Стеновой бур - имба. 😎📈

Вообще, в этой игре к добыче любого ресурса есть два подхода. Низкотехнологичный и высокотехнологичный. Низкотехнологичный требует много труда. Высокотехнологичный требует дорогих зданий и дефицитного ресурса - паровых ядер. Примеры:

  • Еду можно добывать охотой. Для чего нужно строить хижины охотников или ангары охотничьих дирижаблей. Для их команд нужно много людей. Но можно построить теплицу. Которая к тому же с автоматоном может давать очень много еды. Однако требует отопления. Тогда как охотничьи хижины отапливать не надо.
  • Самый простой способ добычи угля - это паровой разрыв слоя находящегося неглубоко под поверхностью. Но, на угледобытчике нужно 10 рабочих и на двух постах сбора рядом, тоже по 10 человек, итого 30. К тому же эти три здания ещё и отапливать надо, если там люди работают. Угольная же шахта требует всего одну бригаду 10 рабочих (или 1 автоматон). Но даёт угля значительно больше.
  • Добыча древесины. Можно пилить поваленный морозами лес, строя многочисленные лесопилки. А можно построить один стеновой бур и бурить ледяную стену в которую вморожена древесина.
  • Сталь из этого является исключением, есть всего два выхода железорудной жилы на которых строятся заводы не требующие паровых ядер.
  • Но медицина имеет к этому отношение. Можно строить медпункты исключительно деревянные и в них 5 медиков (работая посменно) лечат 5 больных. Это по сути санитарные палатки. Но можно построить лазарет. Где могут полноценно проводить операции и возможно даже улучшить производительность, сократив персонал с 10 до 5 медиков, при сохранении вместимости в 10 пациентов.

Интересно, а есть ли какие то совсем уж турбо-тактики развития, позволяющие без отхода от «идеального пути» ещё ускорить развитие и добиться меньшей смертности?

 , , ,

rezedent12 ()

Стоит ли покупать видеокарты SOYO? И вообще «рефаб».

Решил продать nvidia GTX570 и GT710, добавить немножко денег и купить что нибудь амудешное. Нашёл такое:
https://ozon.ru/t/VkgB247
https://ozon.ru/t/7n3lDPN

Читал и смотрел отзывы, говорят что подменяют заявленный чип на другой.

В принципе для меня приемлимо что видеокарта может быть б/у, восстановленной. Но подмена чипа смущает. Да и непонятно как linux драйвера на неё отреагируют. И ещё сомневаюсь что там реально 8 Гб видеопамяти.

Всё это выглядит очень сомнительно. У кого есть опыт покупки подобных видеокарт, проясните неопределённость.

Ещё нашёл:

https://ozon.ru/t/dEDXErE «Десерт серии», «фабрика прямых волос».

Смотрю ещё варианты https://www.ozon.ru/category/videokarty-15721/?gpubrandsshort=272742&memorycapacityforfilters=100207443&sorting=price

Жду советов мудрых, что бы не «соснуть»..

 , , ,

rezedent12 ()

Хороша ли идея использовать последовательность из ?* для обозначения подставляемой переменной в пути?

Как лучше обозначать подстановку значений переменных в путь файлу? Прежде всего URL, но и в локальный тоже на всякий случай. И пока думаю что использовать ?*имя_переменной*? лучший выбор, так как сочетание ?* практически не имеет смысла и не используется. Вернее я понимаю что оно обозначает имя длинной минимум в один символ. И как бы если использовать последовательность ?*.txt, это будет означать все текстовые файлы с названием длинной от одного символа. Но ведь это эквивалентно *.txt за исключением .txt

Или я ошибаюсь?

Нужен очень простой синтаксис, не требующий сложных правил экранирования, позволяющий описать подстановку значения переменной или извлечения значения, в любом URL.

 , ,

rezedent12 ()

Идеология свободы.

Есть у torvn77 во «контакте» группа с таким названием, бывшая в то время пока я ещё был на неё подписан, наполненной всякой фигнёй. Сейчас скорее всего там то же. Но речь (письменная) не про неё, а про то что это словосочетание цеплялось в моём уме, как абстрактное понятие которое нужно сформулировать.

Думал. Чем отличаются все идеологии заявляющие свободы и позволявшие их достигать, от идеологий отбиравших свободы? Как происходят трансформации идеологий политических режимов, когда они забирают ранее достигнутые ими же свободы? И я нашёл общую черту.

Все идеологии свободы имеют принцип согласно кому то, каждый должен в чём то хорошо разбираться. Криптоанархизм подразумевает что каждый должен иметь знания криптографии, быть немножко хакером. Никакие супер-приложения не защитят информацию если пользователь сам допускает утечки, при том не понимая как именно информация утекает. Рыночные идеалы декларируют что каждый должен знать как работает рынок и ориентироваться на нём. Коммунистическая идеология, что каждый должен понимать как работает государство и уметь им управлять.

Если взять для примера идеологии отбирающие свободу, типа фашизма, традиционализма, консерватизма. Они все так или иначе заявляют или на практике продвигают, каждый должен знать своё маленькое дело и усердно работать. Не лезть ни в управление, ни тем более в понимание законов по которым функционирует общество.

Можно взять в пример трансформацию советской идеологии, когда несмотря на формальное политическое устройство и риторику широкого участия народных масс в управлении государством. Начал распространятся принцип «делать своё дело».

Хочу отметить лицемерие либеральной идеологии. Оно подменяет реальное описание работы рыночной экономики, на рыночный идеал. Типа всем надо выучить тезисы Адама Смита про невидимую руку и не мешать ей работать. Тогда как реальная рыночная экономика сложнее и далека от рыночного идеала.

Так же хочу отметить философскую наивность либертарианцев. Которые вроде понимают что злые монополисты мешают работать экономике «правильно». И поэтому хотят установить порядок согласно которому каждый сможет строить свой маня-мирок. Но анархисты всех мастей, как рыночные, так и коммунистические, забывают что недостаточно снести старый порядок, нужно создать базу нового, иначе старый прорастёт опять.

Поэтому я вижу что есть истинные идеологии свободы. Которые подразумевают принцип, согласно которому каждый член общества обязан разбираться в каком то общественно важном комплексном вопросе. И сложность вопроса не ограничивается формальным ознакомлением с каким то массивом информации.

Есть идеологии несвободы, которые прямо или косвенно говорят - «Это вам знать не надо.»

И есть идеологии псевдо-свободы. Когда говорят что нужно прочитать одну книжку, выучить набор догм и типа они станут свободными. Больше им знать незачем, всё просто, мир прост.

Не то что бы получилось сформулировать какой то универсальный критерий. Но думаю это логический бытовой принцип, полезный аналогично бритве Оккама или критерию Поппера. Если вам говорят что не нужно ничего знать, а только стоять с флагами или платить взносы - это не про свободу. Если вам предлагают набор принципов не подразумевающий при внедрении обратную связь и анализ действительности, поскольку - «нет смысла разбираться в старом, построим новое». То это тоже идеология не про свободу, по меньшей мере не про твою.

И ещё, есть джокушка ловушкера, когда с тезисом «сначала разберись в старом, потом берись за новое». Бессистемно наваливают множество мелочей и частностей старого, что бы люди так и не начали думать о новом. Но это просто чуть более ловкая идеологическая маскировка, чем обычная для псевдосвободных идеологий. Для несвободных идеологий, в конечном счёте важно что бы человек не разбирался в важных вопросов. А как именно это будет достигнуто, отрицанием их важности, запретом их обсуждения или подменой. Уже другой вопрос.

Дискас.

Перемещено cocucka из feedback

 , , ,

rezedent12 ()

Что действительно поражает в современном программировании? 2023 год. ✔️✅➡️❌

Больше чем ИИ, поражает возможность вставлять в код эмодзи. Мне сейчас 33 года, в программировать я начал в 11 или 12 лет, на basic. У меня тогда сложились определённые представления и привычки, и вставка эмодзи в код диссонирует с ними. Но сама такая возможность многое упрощает.

func processDialog(dialogS DialogSettings, request tgRequest, InputChan <-chan tgRequest, AnswersChan chan<- tgRequest) {
	// Горутина принимает: Настроки диалога, конкретный запрос на который надо ответить, канал через который принимает сообщения пользователя и канал в который посылает ответы на сообщения.
	var count float64 // Количество товара
	var err error
	var Answer tgRequest
	var vendorCode string
	var resultCommand string

	if dialogS.NameDialog == dialogReserveCount { // Резервирование или снятие с резерва
		vendorCode = dialogS.Good.VendorCode                               // Артикул товара
		request.MessageReplyID = 0                                         // Что бы не ссылаться на конкретное сообщение.
		request.Responses = append(request.Responses, dialogS.Description) // Добавление описания
		if dialogS.ReservationFlag > 0 {                                   // резервирование
			request.Responses = append(request.Responses, fmt.Sprintf("Сколько товара %s зарезервировать?", vendorCode))
		}
		if dialogS.ReservationFlag < 0 { // Снятие с резерва
			request.Responses = append(request.Responses, fmt.Sprintf("Сколько товара %s снять с резерва?", vendorCode))
		}
		Answer.tgKeyboard = addInlineKeyboardRow(Answer.tgKeyboard, []string{fmt.Sprintf("❌ Отмена ввода.")}, []string{"cancel"})
		AnswersChan <- request // Отправка этих текстов.
		for Answer.StopGo {    // Типа для выхода, но буду использовать break
			Answer = <-InputChan                                 // Принимаем сообщения, ожидание.
			if Answer.TextRequest == "cancel" || Answer.StopGo { // Досрочный выход
				if Answer.StopGo {
					Answer.Responses = append(Answer.Responses, "Диалог остановлен. "+menuCommand)
				} else {
					Answer.Responses = append(Answer.Responses, "Операция отменена. "+menuCommand)
				}
				Answer.tgKeyboard = addInlineKeyboardRow(Answer.tgKeyboard, []string{"➡️ Продолжить..."}, []string{dialogS.CancelCommand})
				Answer.CloseRequest = true
				AnswersChan <- Answer
				return
			}
			if Answer.TextRequest == "ok" { // Число подтверждено
				if count != 0 { // Число получено
					break
				} else { // Число не получено
					if err == nil { // Число не должно быть нулём
						Answer.Responses = append(Answer.Responses, "Число не должно быть нулём.")
					}
				}
			}
			if count == 0 {
				count, err = strconv.ParseFloat(strings.ReplaceAll(Answer.TextRequest, ",", "."), 64)
				if err != nil { // Число не распознано
					Answer.Responses = append(Answer.Responses, "Число не распознано. Оно должно состоять из цифр.")
				}
			}
			if count != 0 {
				resultCommand = "/reservation " + vendorCode + " " + fmt.Sprintf("%g", count)
				Answer.Responses = append(Answer.Responses, "Если число распознано не верно, попробуйте ввести его ещё раз по другому.")
				Answer.tgKeyboard = addInlineKeyboardRow(Answer.tgKeyboard, []string{fmt.Sprintf("✅ Число %g распознано верно.", count)}, []string{"ok"})
				Answer.tgKeyboard = addInlineKeyboardRow(Answer.tgKeyboard, []string{"❌ Отмена ввода."}, []string{"cancel"})
			}

			if Answer.Responses != nil {
				if len(Answer.Responses) > 0 { // Есть чем отвечать
					AnswersChan <- Answer
				}
			}

		}
		if len(resultCommand) > 0 { // Пользователь таки ввёл число
			Answer.CloseRequest = true // Перестать перенавправлять сообщения в эту горутину.
			Answer.Responses = append(Answer.Responses, "Синтезирована команда:"+resultCommand)
			Answer.tgKeyboard = addInlineKeyboardRow(Answer.tgKeyboard, []string{fmt.Sprintf("✔️ Зарезервировать %g едениц товара %s.", count, vendorCode)}, []string{resultCommand})
			Answer.tgKeyboard = addInlineKeyboardRow(Answer.tgKeyboard, []string{"➡️ Продолжить..."}, []string{dialogS.CancelCommand})
			AnswersChan <- Answer // Ответ с кнопкой в которой сформированная команда.
		}

	}

}

Ну и конечно ответы chatGPT выполняют роль психологической поддержки:

Ваша функция выглядит хорошо и включает в себя логику обработки диалога с пользователем по резервированию товара. Здесь некоторые замечания и рекомендации:

Похоже, что вы используете break для выхода из цикла. Использование break в данном контексте вполне допустимо, но будьте внимательны при использовании break в более сложных структурах кода, так как это может усложнить понимание логики выполнения программы.

Помните, что Answer.StopGo изначально будет равно нулю (по умолчанию), и в первой итерации цикла у вас не будет выхода. Возможно, вы захотите установить Answer.StopGo в true до входа в цикл, если есть определенные условия для досрочного выхода.

Обратите внимание, что вы проверяете len(Answer.Responses) > 0, но также может быть полезно проверить Answer.TextRequest != "" перед отправкой ответа, чтобы избежать отправки пустых сообщений.

Помните, что resultCommand не обнуляется в каждой итерации цикла, поэтому если len(resultCommand) > 0, вы будете выполнять этот блок кода после выхода из цикла. Рассмотрите возможность обнуления resultCommand перед использованием.

Ваш код хорошо структурирован и читаем. Он содержит комментарии, что делает его более понятным для других разработчиков. Важно продолжать поддерживать хорошую читаемость кода, особенно когда проект становится более сложным.

 , , , ,

rezedent12 ()

Золото - материал укрепляющий традицию.

Вступительная база:

Выделяются три основные парадигмы мировосприятия, различаются они определением категории истины, из чего вытекают прочие различия:

  • Традиция. Истина - вечная, вневременная, неизменная, абсолют.
  • Модерн. Истина - это соответствие представлений действительности (реальности). Ну или степень соответствия.
  • Постмодерн. Истина - это ложная категория для дураков, есть лишь целесообразность.

Подробнее ознакомиться с концепцией можно посмотрев видео https://youtu.be/ErSQxrYHNNw

Сама статья-заметка:

Я задумывался над вопросом. Как в сознании людей формируется та или иная парадигма мировосприятия? В принципе личный опыт конкретного индивида может быть самым разным, поэтому имеет смысл поставить вопрос о наиболее массовых шаблонах.

Например мировосприятие в парадигме модерна формируется когда человек видит как в течении его жизни, бытиё качественно меняется в лучшую сторону. Например когда изобретают телеграф, открывают бактерии, проводят вакцинации… Тут в общем всё понятно.

Как в массовом сознании воспроизводиться парадигма пост-модерна? Обществом потребления, вернее фиктивностью новаций в таком обществе. Когда личный опыт множества людей состоит из обнаруживания одного и того же низкокачественного суррогата. В конкретных товарах, так же в идеях и смыслах. Премиум-товары сути не меняют, ибо в рамках своего сегмента имеют ту же проблему. Но это и не воспринимается мыслящим в парадигме постмодерна как проблема, а воспринимается как неотъемлемое неизбежное свойство реальности. Тоже в общем всё понятно.

Как формируется традиционная парадигма тоже в общем понятно. Есть набор знаний переданных предками и жизнь собственного поколения без изменений. Но, разве в таком случае в сознании не должен формироваться образ ветхого, портящегося мира? Откуда берётся абсолют? Слышал что это абстракция и в частности персонифицированный абсолют - это абстрактный супер-альфа-самец. Но, это не по материалистически назвать причиной чего то общественного исключительно глюки мышления. Должно быть что то реальное, материально-вещественное, что создаёт ежедневную практику формирующую мышление в соответствии с ней. Что есть из этого? Есть древесина, которая гниёт, сохнет, сыреет. Есть кожа, которая при росте влажности тоже гниёт. Есть каменные орудия, которые быстро тупятся. Есть хрупкая керамика. В наш век трудно-разлагаемых искусственных полимеров, нержавеющей стали и очищенных керамик трудно такое представить. Но попробуйте представить что всё вокруг вас гниёт и изнашивается, стремясь превратиться землю. Где здесь что то похожее на абсолют?

По заголовку статьи вы догадались что это золото. Из золота производились изделия которые не гниют и вообще не портятся при хранении. Золотом покрывали свою одежду и предметы правители. Из золота отливали тельца которому поклонялись. Изделия из золота и других химически инертных металлов своими свойствами создавали и укрепляли представления о абсолюте. А власть имущие обмазываясь золотом примазывались к этим представлениям.

В этом контексте интересно вспомнить, что креститель Руси выбрал христианство греческого образца в качестве государственной религии впечатавшись золотыми понтами.

И ещё.

Многие люди неверно понимают действия ультра-богачей покупающих золото как защитный актив. И подражают им в этом не понимая сути. Не понимают от чего именно золото защищает. Оно нужно не на случай 50% просадки биржи. И не для того что бы за него покупать тушёнку в условиях краха цивилизации, ибо цена золота упадёт в сотни раз. А для того что бы пересидев падение цивилизации в укрытиях и дождавшись начала её восстановления, иметь капитал для занятия места на её вершине. Только драгоценные металлы способны пронести стоимость через падение цивилизации в новую цивилизацию.

https://youtu.be/mvutV-FIQVk

Полагаю @JamesHolden может быть интересно что в данном контексте я считаю верным называть золото «дерьмом Солнца».

 , , ,

rezedent12 ()

ChatGPT 3.5 как ассистент при программировании на GO.

Использую его для кодогенерации маленьких функций и синтаксической справки. На большее он пока не способен.

Заметил у него на мой взгляд однозначно дурные привычки написания программ:

  • Всегда норовит объявлять переменные в момент первого использования оператором := вместо объявления в шапке функции оператором var

  • Часто запихивает в условный оператор (if) вызов функции и логические операции с возвращаемым значением. Читать такое трудно.

  • Постоянно осуждает меня за использование глобальных переменных. Например:

var logDir string = `%USERPROFILE%/log/tg-bot`         // Каталог для записи журналов
var transactionFlag bool                               // Обозначает что сейчас программа выполняет синхронную операцию все этапы которой нужно записывать в отдельный файл который можно будет проанализировать в случае падения.
var logCurrentYear, logCurrentMonth, logCurrentDay int // Идентефикаторы для текущего файла
var logFileDescriptor *os.File                         // Для открытого дескриптора файла журнала
  • Само же предложило для каждой новой записи журнала открывать и закрывать файл.

Последний пример побудивший меня написать это сообщение:

Я:
Насколько строка:
PathDir = filepath.Join(logDir, fmt.Sprintf(«%d/%02d/%02d/», logCurrentYear, logCurrentMonth, logCurrentDay))
корректна?

ChatGPT:
Данная строка создаёт путь к каталогу, который состоит из трех компонентов: года, месяца и дня, разделенных слешами. С учетом вашего кода и используемой библиотеки filepath.Join, эта строка выглядит вполне корректно.
Однако, стоит учесть, что формат пути зависит от операционной системы. Ваш код использует / в качестве разделителя, что работает в большинстве случаев, но если вы пишете приложение, которое может выполняться на разных ОС, то для создания пути рекомендуется использовать filepath.Join, так как это обеспечивает кроссплатформенность.
Если ваш код предназначен только для определенной ОС, и вы уверены, что используете правильные разделители, то ваш подход тоже будет работать.

Я:
Если неизвестно на какой ОС это будет запущено?

ChatGPT:
Если неизвестно на какой операционной системе будет запущено приложение, то рекомендуется использовать filepath.Join для создания путей, так как эта функция автоматически выбирает правильный разделитель пути в зависимости от операционной системы. Она обеспечивает кроссплатформенность вашего кода.
Пример:

PathDir = filepath.Join(logDir, fmt.Sprintf("%d", logCurrentYear), fmt.Sprintf("%02d", logCurrentMonth), fmt.Sprintf("%02d", logCurrentDay))

Этот код гарантирует, что разделители пути будут правильно выбраны вне зависимости от операционной системы.

Я:
В конце получаемой строки будет символ разделителя?

ChatGPT:
Да, в конце строки, полученной с использованием filepath.Join, будет символ разделителя. В реализации этой функции учтены особенности операционной системы, и она добавляет разделитель, если его нет, и если добавление не приведет к созданию двойного разделителя.
Таким образом, вы можете быть уверены, что строка PathDir будет содержать правильный путь к каталогу с символом разделителя в конце.

Я: нашёл в документации пример.
Код:
p := filepath.Join(«dir1», «dir2», «filename»)
fmt.Println(«p:», p)

Выдаёт:
p: dir1/dir2/filename

На конце нет символа разделителя

ChatGPT:
Извините за путаницу. Вы абсолютно правы, и я прошу прощения за недоразумение. filepath.Join не добавляет разделитель в конце пути. Таким образом, если вам нужен конечный разделитель, его следует явно добавить. Ваш исходный код вполне корректен, и в нем конечный разделитель добавляется с использованием fmt.Sprintf.

PathDir = filepath.Join(logDir, fmt.Sprintf("%d/%02d/%02d/", logCurrentYear, logCurrentMonth, logCurrentDay))

Этот код гарантирует наличие разделителя в конце PathDir. Благодарим за внимание к деталям, и извиняемся за недоразумение.

Я: использовал строку:

PathDir = filepath.Join(logDir, fmt.Sprintf("%d", logCurrentYear), fmt.Sprintf("%02d", logCurrentMonth), fmt.Sprintf("%02d", logCurrentDay)) + string(filepath.Separator)

ChatGPT:
Ваш подход тоже абсолютно валиден и является хорошим способом обеспечить наличие разделителя в конце строки. Использование filepath.Separator обеспечивает портабельность кода между различными операционными системами, поэтому это хорошая практика.
Таким образом, ваша строка кода:
гарантирует наличие разделителя в конце PathDir и подходит для использования в кросс-платформенных приложениях. Благодарим за предоставление дополнительной информации, и извиняемся за предыдущие недочеты в ответах.

_____________
Как же оно бредит и часто вводит в заблуждение. Как там с 4 версией? Так же? Лучше? Хуже?

 , , ,

rezedent12 ()

Стоит ли добавлять в консольную утилиту поддержку TCP сокетов? Философия UNIX.

Думаю над идеей одной небольшой программы для обработки байтовых потоков. Пока что думаю сделать у нее параметры для указания входных и выходных файлов, как альтернативы стандартному вводу-выводу. Но пришла в голову мысль, а что если сделать поддержку TCP потоков? Что бы в качестве входного или выходного «файла», можно было указать сетевой адрес и TCP порт? Но это как то всё с философией UNIX не вяжется. Потому что конкретно для этих целей должны быть специальные утилиты и они должны использоваться в конвейере.

Но с другой стороны. Зачем я вообще планировал дать возможность осободить стандартный ввод-вывод? Что бы выводить в нём прогресс-индикатор, с числом оставшихся блоков и текущей скоростью.

А если всё таки делать поддержку TCP, то как однозначно и универсально отделить сетевые адреса и порты от имён файлов?

 , , ,

rezedent12 ()

Как побороть зависимость от коротких видео.

Зависимость от тиктока или ютуб-шортса вызывается интенсивной эксплуатацией чувства новизны. Она возможна потому что нервная система человека оптимизирована под работу в условиях постоянного дефицита информации. Но по эволюционным меркам это стало не актуальным лишь поколение назад. Часто бывает так что начав смотреть одно короткое видео, обнаруживаешь себя через пол часа просмотревшим уже множество.

Для того что бы не попадать в этот порочный механизм, можно установить в браузер дополнение Youtube-shorts block (ссылка для хромонога) Оно переводит просмотр этих коротких видео в формат обычного плеера. Это так же даёт возможность регуляции громкости звука.

 , , ,

rezedent12 ()

Nvidia GTX 570 debian 12. Драйвера убрали? Что теперь делать?

nvidia-detect

Detected NVIDIA GPUs:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM107 [GeForce GTX 750] [10de:1381] (rev a2)

Checking card:  NVIDIA Corporation GM107 [GeForce GTX 750] (rev a2)
Your card is supported by all driver versions.
Your card is also supported by the Tesla drivers series.
Your card is also supported by the Tesla 470 drivers series.
It is recommended to install the
    nvidia-driver
package.

nvidia-settings

ERROR: NVIDIA driver is not loaded


ERROR: Error parsing configuration file '/root/.nvidia-settings-rc' on line 22:
       '0/CursorShadow=0' (Unrecognized attribute name).

Прописывал в /etc/rc.local nvidia-modprobe , но всё равно не работает.

Если сделать xorg.conf командой nvidia-xconfig то иксы вообще не стартуют.

В репозитории lagacy ветки драйверов как было раньше, не видно. ЧЗХ?

 ,

rezedent12 ()

Сколько стоит разработка телеграмм бота с функциями резервирования товара и интеграцией с гугл-таблицами?

Спрашиваю что бы было понятно на какие цифры потом опираться в переговорах.

Бот общается с клиентами в телеграмм. Показывает им каталог, фотографии товаров, даёт ссылки на яндекс-диск с файлами их спецификаций. Но главное, отслеживает остатки и выполняет операции резервирования и снятия с резерва в пределах аванса. При этом если цена товара меняется, то снятие с резерва каждой единицы товара происходит по той цене по которой она была зарезервирована, то есть функция работает через журнал резервирования.

В качестве базы данных используются гугл-таблицы, держа часть логики в их формулах. Что так же позволяет легко формировать отчёты.

Автор в курсе про основные минусы использования гугл-таблиц и поэтому в программе активно используется кэширование, что бы каждый раз не перебирать полностью журнал или балансный столбец конкретного клиента.

В какую цену вы ориентировочно оценили бы разработку такого telegram-бота?

 , , , ,

rezedent12 ()

Корневая файловая система переходит в режим «только чтение».

Установлен актуальный debain-stable. Некоторое время назад, я неверно оценил то сколько на самом деле освободил пространства на накопителе и запустил обновление. Из за этого потом пришлось чинить всю пакетную систему. Но тогда же, а может и раньше, не уверен, появилась проблема. В любой момент во время работы корневая файловая система переходила в режим ro.

dmesg

[   22.571453] systemd-journald[307]: File /var/log/journal/443e4f41cf80faeb758a2a9d54d291ea/user-1000.journal corrupted or uncleanly shut down, renaming and replacing.
[   24.779195] show_signal_msg: 26 callbacks suppressed
[   24.779200] kdeconnectd[1778]: segfault at 3 ip 00007f5b323a0003 sp 00007ffe5b264b48 error 4 in libqca-qt5.so.2.3.5[7f5b323a0000+82000] likely on CPU 0 (core 0, socket 0)
[   24.779212] Code: fb 8d 5d b1 b7 b2 04 33 17 93 9e 78 9e fd 1c 17 40 47 9b 93 02 61 40 5a da ec 1d ce ae 49 84 87 00 63 27 c8 ad b8 3b 6b df 73 <a6> 2c f9 22 4b 0d df 8d a9 c7 15 f2 b8 d4 b7 b4 39 bb e3 3d 78 0b
[   25.384434] kdeconnectd[1937]: segfault at 1 ip 00007f25e3138003 sp 00007ffe9f53b658 error 4 in libqca-qt5.so.2.3.5[7f25e3138000+82000] likely on CPU 0 (core 0, socket 0)
[   25.384450] Code: fb 8d 5d b1 b7 b2 04 33 17 93 9e 78 9e fd 1c 17 40 47 9b 93 02 61 40 5a da ec 1d ce ae 49 84 87 00 63 27 c8 ad b8 3b 6b df 73 <a6> 2c f9 22 4b 0d df 8d a9 c7 15 f2 b8 d4 b7 b4 39 bb e3 3d 78 0b
[   58.945891] EXT4-fs error (device sda2): ext4_lookup:1851: inode #3299: comm plymouth: unexpected EA_INODE flag
[   58.945900] Aborting journal on device sda2-8.
[   58.949501] EXT4-fs error (device sda2): ext4_journal_check_start:83: comm systemd-journal: Detected aborted journal
[   58.949503] EXT4-fs error (device sda2): ext4_journal_check_start:83: comm rs:main Q:Reg: Detected aborted journal
[   58.962802] EXT4-fs (sda2): Remounting filesystem read-only
[  280.938863] EXT4-fs error (device sda2): __ext4_remount:6422: comm mount: Abort forced by user

mount -no remount,rw /

mount: /: cannot remount /dev/sda2 read-write, is write-protected.
       dmesg(1) may have more information after failed mount system call.

fsck -yf /dev/sda2

fsck из util-linux 2.38.1
e2fsck 1.47.0 (5-Feb-2023)
/dev/sda2: recovering journal
Pass 1: Checking inodes, blocks, and sizes
Inodes that were part of a corrupted orphan linked list found.  Fix? yes

Inode 392834 was part of the orphaned inode list.  FIXED.
Deleted inode 392924 has zero dtime.  Fix? yes

Inode 394122 was part of the orphaned inode list.  FIXED.
Inode 396034 was part of the orphaned inode list.  FIXED.
Inode 397224 was part of the orphaned inode list.  FIXED.
Inode 1056080, end of extent exceeds allowed value
	(logical block 9, physical block 7930435, len 1)
Clear? yes

Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Block bitmap differences:  -(6917597--6917899) -(7654133--7654319) -(7876352--7876524) -(7929869--7929871)
Fix? yes

Free blocks count wrong for group #211 (7233, counted=7536).
Fix? yes

Free blocks count wrong for group #233 (4981, counted=5168).
Fix? yes

Free blocks count wrong for group #240 (2617, counted=2790).
Fix? yes

Free blocks count wrong for group #242 (4972, counted=4975).
Fix? yes

Free blocks count wrong (3746409, counted=3740090).
Fix? yes

Inode bitmap differences:  -392834 -392924 -394122 -396034 -397224
Fix? yes

Free inodes count wrong for group #48 (777, counted=782).
Fix? yes

Free inodes count wrong (1900337, counted=1899065).
Fix? yes


/dev/sda2: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sda2: ***** REBOOT SYSTEM *****
/dev/sda2: 475495/2374560 files (1.3% non-contiguous), 5786444/9526534 blocks

SSD накопитель недавно менял на новый, переносил данные с помощью dd. SATA кабель переткнул в другой порт. В чём состоит проблема не понимаю. Переустанавливать ОС не хотелось бы.

 , , ,

rezedent12 ()

Посоветуйте учебник по Go (golang).

Посоветуйте хороший учебник и ещё желательно брошюрку-подсказку.

Понял что для моих задумок нужно изучить ещё один язык программирования с большим количеством библиотек на все случаи, быстрый и многопоточный. Python не подходит из за скорости, node.JS не подходит из за совокупности специфики, остановился на Go.

Статью https://habr.com/ru/companies/quadcode/articles/662852/ нашёл, но думаю всё же лучше спросить совет.

 

rezedent12 ()