Принт-сервер из хлама

Foxconn N-270 с доработанной системой охлаждения

Foxconn N-270 с доработанной системой охлаждения

В этой статье я расскажу, как создать принт-сервер из старого неттопа. Зачем нужен принт-сервер? Предположим, у вас есть принтер, который находится в кабинете или квартире, и вам необходимо обеспечить доступ к нему всем пользователям в этом помещении (офисе, квартире). Если принтер имеет Ethernet или Wi-Fi возможности, вы можете подключить его к сети стандартным способом. Однако, если принтер поддерживает только USB или даже LPT порт, в этом случае требуется использовать принт-сервер.

Что нужно для превращения принтера в сетевое устройство?

  1. Неттоп или одноплатный компьютер (В моём случае Foxconn N-270).

  2. Накопитель данных (может быть SSD, HDD или даже флешка).

  3. Блок питания для неттопа.

  4. Принтер.

  5. LPT-адаптер (если принтер имеет только LPT-порт).

  6. Локальная сеть (Ethernet или Wi-Fi)

Установка системы

В моём случае, я выбрал Debian 11, так как она соответствует техническим требованиям моего неттопа. При выборе операционной системы, вам также следует выбрать подходящую для вашего устройства. После выбора системы, вы легко сможете найти руководство по её установке.

У меня есть неттоп Foxconn N-270, у которого вышел из строя вентилятор. Я приобрел этот неттоп на Авито за 450 рублей. Он оснащен процессором Intel Atom N-270, который работает на тактовой частоте 1.6 GHz и имеет одно ядро. Кроме того, в этом неттопе установлена 1-гигабайтная планка оперативной памяти и 60-гигабайтный жесткий диск. Я рекомендую использовать SSD-диск или даже флешку, если неттоп может нормально загружаться с USB-накопителя.

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

Вход в систему

Для входа в систему вам понадобится монитор и клавиатура. Процедура входа в систему выполняется под пользователем root.

Установка принт-сервера CUPS:

Обновите Debian и все дополнительные пакеты до последней версии, используя команду:

(при возникновении ошибки bash: sudo — команда найдена. Просто уберите sudo из каждой команды).  

sudo apt-get update
sudo apt-get upgrade

Установите необходимые пакеты для сервера печати CUPS и связанные компоненты, вводя следующую команду:

sudo apt-get install cups avahi-daemon avahi-discover

Дополнительно установите Foomatic, который облегчит настройку принтеров в Debian и других операционных системах:

sudo apt-get install foomatic-db foomatic-db-engine

Настройка конфигурационного файла CUPS.

Для разрешения доступа к веб-интерфейсу управления CUPS с любого устройства в локальной сети, выполните следующие шаги:

Откройте конфигурационный файл CUPS в текстовом редакторе nano:

sudo nano /etc/cups/cupsd.conf

Найдите строку «Listen localhost:631» и удалите ее или закомментируйте символом «#» в начале строки.

# Only listen for connections from local machine. #Listen localhost:631 Port 631

Для открытия доступа к админ-панели CUPS через локальную сеть, выполните следующие изменения в конфигурационном файле:

# Restrict access to the server...  <Location />      Order allow,deny      Allow @Local /// add  </Location>  # Restrict access to the admin pages...  <Location /admin>      Order allow,deny      Allow @Local /// add  </Location>  # Restrict access to configuration files...  <Location /admin/conf>      AuthType Default      Require user @SYSTEM      Order allow,deny      Allow @Local /// add  </Location>

Сохраните изменения и закройте файл.

Для сохранения в редакторе nano необходимо нажать Ctrl+x.

Перезапустите службу CUPS, чтобы применить настройки:

sudo service cups restart

Если эта команда не сработает попробуйте:

reboot –f

Веб-интерфейс CUPS стал доступен из браузера по адресу http://IP-адрес:631.

(посмотреть адрес неттопа можно в админеке роутера, командой ifconfig

 или ip addr show)

Добавление и настройка принтера в CUPS

В веб-интерфейсе CUPS в разделе «Администрирование» выполните следующие шаги:

  1. Нажмите на кнопку «Добавить принтер», чтобы добавить принтер.

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

Таким образом, вы добавите принтер и разрешите совместный доступ к принтерам, подключенным к системе, в веб-интерфейсе CUPS.

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

После нажатия кнопки «Добавить принтер» в веб-интерфейсе CUPS, возможно будет выведено предупреждение о том, что сайт не использует защищенное соединение HTTPS. В этом случае, следуйте инструкции ниже:

  1. Нажмите на опцию «Всё равно перейти» или «Продолжить» (зависит от браузера), чтобы продолжить доступ к веб-интерфейсу CUPS.

  2. На открывшейся странице будет запрошен ввод пароля. В поле «Пользователь» введите «root», а в поле «Пароль» введите пароль, который вы указывали при установке системы для пользователя root.

  3. Нажмите на кнопку «Войти» или «ОК», чтобы подтвердить введенные данные.

После успешной аутентификации вы сможете продолжить процесс добавления принтера в систему через веб-интерфейс CUPS.

Выберите ваш принтер.

Затем, можно изменить Название и Описание принтера, не забывая установить флажок для Разрешения совместного доступа к данному принтеру.

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

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

Для установки сетевого принтера в Windows 10, выполните следующие шаги:

  1. Нажмите на кнопку «Пуск» в левом нижнем углу экрана Windows.

  2. В появившемся меню выберите «Настройки» (значок шестеренки) или щелкните на значке «Настройки» в панели задач.

  3. В окне «Настройки» выберите раздел «Устройства».

  4. В меню слева выберите «Принтеры и сканеры».

  5. Нажмите на кнопку «Добавить принтер или сканер».

  6. Windows начнет поиск доступных принтеров в сети. Подождите, пока процесс завершится.

  7. Когда сетевой принтер будет обнаружен, он отобразится в списке доступных устройств. Выберите нужный принтер из списка.

  8. Нажмите на кнопку «Далее» и следуйте инструкциям на экране для завершения установки принтера.

После завершения этих шагов сетевой принтер будет добавлен в систему Windows 10 и будет доступен для печати.

Если вам необходимо использовать принтер на более ранних версиях Windows например win7 то вам понадобится адрес принтера его можно найти в адресной строке в разделе принтеры.

В моём случае Canon_MP230_series это название принтера.

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

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


ссылка на оригинал статьи https://habr.com/ru/articles/737946/

Как превратить страх потери работы из-за ChatGPT в суперсилу продуктового аналитика

Привет! Меня зовут Владимир, я продуктовый аналитик в международной компании сервиса такси. Сейчас я использую 20+ чатов с ChatGPT, в которых общаюсь с нейросетью по работе и иногда за жизнь. Хочу поделиться опытом, чем она может помочь каждому аналитику и как облегчит жизнь. 

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

Бонусом в конце статьи поделюсь дополнительными источниками информации по теме.

ChatGPT — концепция инструмента на стероидах

Первые чаты с ChatGPT-3.5 я сделал в марте 2023 года. Сначала баловался с разными запросами не по работе, а потом стал думать, как применять нейросеть к задачам продуктовой аналитики. 

Я понимал, что нейросеть не сразу ответит на все мои запросы правильно. Идеальная ситуация — это когда я пишу вопрос ChatGPT и хотя бы на 50% знаю ответ. Тогда могу сразу провалидировать его и понять, а не придумала ли это нейросеть. Другой вариант валидации её ответов — знания в других источниках (интернет, эксперты и так далее). 

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

И мы получим следующую формулу Х + Y = Y потраченного вами времени, где Х — умею и делегирую, а Y — новые творческие для вас задачи. Всем известное «20% усилий и 80% результата» тоже пригодится — применяем формулу с каждым новым инструментом.

Я воспринимаю ChatGPT как новый инструмент. Например, как тот же Excel, который в своё время ускорил работу с расчётами табличных данных, но не заменил ни одну из профессий. 


ChatGPT – концепция бадди-партнёра

Помимо концепции инструмента-помощника, ChatGPT можно воспринимать как бадди для брейншторма, когда вы находитесь на равных друг с другом. Ключевой момент — как она помогает тебе, так и ты помогаешь ей, задавая правильный запрос (промт), и дискутируя друг с другом.

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

Вот промт, который улучшает сам себя и расширяет моё понимание задачи через итерации вопросов и ответов (копируй и пробуй):

“I want you to become my Prompt Creator. Your goal is to help me craft the best possible prompt for my needs. The prompt will be used by you, ChatGPT. You will follow the following process: 

1. Your first response will be to ask me what the prompt should be about. I will provide my answer, but we will need to improve it through continual iterations by going through the next steps. 

2. Based on my input, you will generate 3 sections. 

a) Revised prompt (provide your rewritten prompt. it should be clear, concise, and easily understood by you), 

b) Suggestions (provide suggestions on what details to include in the prompt to improve it), and 

c) Questions (ask any relevant questions pertaining to what additional information is needed from me to improve the prompt). 

3. We will continue this iterative process with me providing additional information to you and you updating the prompt in the Revised prompt section until it’s complete.”

Это пример того, как продукт сразу идёт в комплекте с поддержкой внутри. А поддержка ещё и может научить, как ею пользоваться 🙂


Кто заменит людей: человек с ChatGPT или только ИИ?

Мне нравится тезис о том, что не искусственный интеллект (ИИ) заменит людей, а люди, которые умеют пользоваться ИИ, заменят других. Люди с ChatGPT в роли бадди-партнёра будут быстрее выполнять задачи и будут более эффективны. 

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

В исследовании от OpenAI (компании-создателя ChatGPT) говорится, что ChatGPT на 23-25% может решать задачи программистов. Это значит, что оно не заменило людей точно, а только упростило нам жизнь. Но это на сегодняшний день. Возможно, на момент выхода статьи ИИ заменил меня как аналитика, но это неточно. 

Слышу вокруг, что ChatGPT не заменил людей, а даже наоборот создал новые профессии. Например, видел вакансию «Python Developer по работе с ChatGPT». Я, кстати, уже выполняю часть функционала промт-инженера, когда общаюсь с чатом и улучшаю его с помощью моих запросы (лайфхак выше). Возможно, через 2-3 года увижу требование в вакансиях: «уверенно владею ChatGPT» 🙂

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

Рассмотрим задачи, которые усложняются от стажёра к синьору: на пути роста они переходят от «простого гугления» к открытию чего-то нового, что не нагуглишь. И с самой верхней точкой ChatGPT пока не справится. 

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

Давайте плавно перейдём к особенностям ChatGPT.


Особенности работы 

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

Простой пример

Простой пример
Пример со сценарием

Пример со сценарием

Представим конкретную аналитическую задачу — написать SQL-запрос для конверсии из захода на сайт в клик на баннер. 

Из ответа ChatGPT можно сразу выделить моменты, которые надо поправить в запросе: 

1. Нужна структура БД, которую она сама придумала.

2. Важно учесть последовательность событий. 

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

Спустя месяц опытов с нейросетью я начал использовать её вместо поисковой строки Google. Почему? Потому что ChatGPT даёт более развёрнутый ответ — вы сами видите выше с примером SQL. В Google это обычно сухой ответ, а для подробностей надо тщательней поискать информацию.

Ещё одна важная особенность ChatGPT — актуальность данных. Нейросеть училась на данных, доступных до сентября 2021 года. И если библиотека новая, то она может сказать: «Я не могу найти эту библиотеку, возможно, вы имели в виду другую». 

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

Ещё одна особенность интерфейса ChatGPT: контекст для неё задается в рамках одного чата (около 4к токенов: 3-4к на английском и 1к на русском, поэтому лучше писать на английском). То есть она дообучается и получает больше контекста от вас в рамках одного чата!

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


ChatGPT-3.5 vs ChatGPT-4

В середине апреля я перешёл с версии 3.5 на 4, то есть с бесплатной на платную. Причина — моих запросов становилось всё больше, и когда я активно пользовался нейросетью, она стала долго думать и выдавать ошибки.

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

Что я заметил после перехода: 

1. Скорость ответа быстрее в версии GPT-3.5, чем в GPT-4.  

2. Но качество ответов отличается: в GPT-4 версии более развернутые + нейросеть сама подсказывает, что для лучших ответов нужно больше контекста. 

3. Также в платной версии GPT-4 есть плагины для увеличения возможностей его использования:

4. Если дать контекст GPT-4, ответы получаются действительно грамотными и применимыми в работе. Нейросеть сгенерировала мне кучу классных вариантов для A/B-теста разных CTA на важную кнопку. Причём сразу же предсказала победителя и смогла объяснить, почему. Наконец, все предложенные ChatGPT варианты показали аплифт в конверсии. 


В чём суперсила ChatGPT для продуктового аналитика?

Для начала спросим напрямую у ChatGPT:

В первую очередь, ChatGPT поможет в генерации идей для гипотез, выводов исследований, метрик для A/B-тестов. Например, я могу дать ей контекст по гипотезе и продукту, а после спросить: «Какая ключевая метрика для данного A/B-теста?» И почти всегда нейросеть даёт применимые к реальности советы. 

Как я писал выше, ChatGPT для меня — полноценная замена Google и многим современным онлайн-курсам. Но разграничивать эти понятия нельзя. Например, мой коллега пользуется браузером Bing, поскольку туда встроен искусственный интеллект. То есть это уже микс стандартной поисковой строки и ИИ. 

Насчёт онлайн-курсов тоже интересная ситуация. Попробовал проверить гипотезу: может ли ChatGPT сам справиться с задачами, которые дают на курсе. В итоге получил ответ в 2 раза меньше правильного, так как ChatGPT-3.5 использовала старую функцию в Python для преобразования даты. В общем, взял и уменьшил выручку в два раза. Без моей валидации ошибку в реальности могли и не заметить — снова про проблему валидации данных, результатов ChatGPT.


Кейс вместо итогов

Сейчас мы прорабатываем историю развития продукта и его влияние на бизнес-метрики. Вот такие отличные предложения сгенерировал искусственный интеллект: 

«Чтобы решить проблему низкой активности набранных водителей, я бы предложил следующие шаги:

1.  Провести опрос. Проведите опрос среди набранных водителей, чтобы выяснить их пользовательский опыт в приложении. Это поможет выявить все болевые точки и области для улучшения.

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

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

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

5. Поощряйте активное использование. Предлагайте стимулы для водителей, которые совершают определенное количество поездок или имеют высокий рейтинг. Это может мотивировать водителей чаще пользоваться приложением и повысить их вовлеченность.

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

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

Статья получилась не маленькая, поэтому вот коротко основные моменты статьи:

  1. ChatGPT как инструмент: я начал использовать ChatGPT в марте 2023 года и считаю его полезным инструментом для аналитиков. Важно воспринимать нейросеть как источник информации, который нужно валидировать и критически оценивать.

  2. ChatGPT как бадди-партнер: предлагаю воспринимать ChatGPT как партнера для брейншторминга. И также дал лайфхак, как ИИ сам может улучшить ваш промт.

  3. Замена людей на ChatGPT: рассуждал возможность замены людей на ChatGPT, но пришел к выводу, что пока люди нужны для валидации результатов ИИ — ChatGPT нас не заменит. Что круто — это ChatGPT может создать новые профессии, например, «Python Developer по работе с ChatGPT».

  4. Особенности работы с ChatGPT: как работать с ChatGPT, включая предоставление контекста для запросов и использование ChatGPT вместо поисковой строки Google. Также отмечаю, что ChatGPT может «дообучиться», если ей дать ссылку на статью или код на GitHub.

  5. ChatGPT-3.5 vs ChatGPT-4: перешел с версии 3.5 на 4 из-за увеличения количества своих запросов. Версия 4 дает более развернутые ответы, но также стоит денег.

Спасибо за то, что дочитали статью до конца. Давайте попробуем ChatGPT в проверке аналитических скиллов — делитесь в комментариях своими примерам использования ИИ. Также активно делюсь своим опытом изучения новых практик применения ChatGPT в своем канале Data New Gold – подписывайтесь!

Бонус с дополнительными источниками информации

  1. AI: внедрять нельзя игнорировать — дискуссия про использование новых возможностей ИИ. 

  2. «Он сделал мой трёхлетний проект за 30 минут»: как айтишники используют ChatGPT в работе и дома

  3. Курс промт-инженера Chat GPT от создателей ИИ. Курс всего на 1,5 часа, в котором вы узнаете фишки написания запросов + код на Python — сам сейчас в процессе прохождения. 

  4. Я попробовал 84 плагина на ChatGPT. Вот лучшие из них! — статья про плагины. Сам использую Video Insights — он позволяет нам взаимодействовать с онлайн-видеоплатформами, такими как YouTube. 

  5. Телеграм-канал Димы Мацкевича — основателя Dbrain, активно делится своими кейсами использования ChatGPT.


ссылка на оригинал статьи https://habr.com/ru/articles/737922/

Переосмысление SOLID: почему традиционные принципы проектирования не работают при разработке игр

Принципы SOLID (Single Responsibility, Open-Closed, Liskov Substitution, Interface Segregation, and Dependency Inversion) — это общепризнанные рекомендации, разработанные для улучшения сопровождаемости и читаемости исходного кода программного обеспечения. Однако их применение в сфере разработки игр часто оказывается сложным из-за уникальных особенностей этой области. Чтобы полностью оценить контекст, мы погрузимся в эти сложности и изучим альтернативные парадигмы проектирования, которые лучше подходят для динамичной природы разработки игр.

Проблемы, связанные с принципами SOLID при разработке игр

Принцип единой ответственности (SRP)

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

Рассмотрим персонажа ролевой игры (RPG). Он может обладать такими возможностями, как перемещение, атака, взаимодействие с окружающей средой и отображение анимации. Придерживаясь SRP, можно было бы разделить эти функциональные возможности на отдельные классы, такие как CharacterMovement, CharacterCombat, CharacterInteraction и CharacterAnimation. Такой подход, хотя и является чистым с точки зрения SRP, может привести к обилию классов. Поведение персонажа становится разбросанным по всей кодовой базе, что усложняет понимание, поддержку и отладку.

Принцип открытости-закрытости (OCP)

Согласно OCP, программные объекты должны быть открыты для расширения, но закрыты для модификации. Этот принцип оказывается сложным в контексте разработки игр — области, характеризующейся итеративной и динамичной природой.

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

Принцип замещения Лискова (LSP)

LSP — это еще один принцип, который часто противоречит реалиям разработки игр. Этот принцип утверждает, что объекты суперкласса должны иметь возможность быть заменены объектами подкласса без ущерба для корректности программы.

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

Принцип разделения интерфейсов (ISP)

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

Игровой объект, например, персонаж игрока, может взаимодействовать с предметами, врагами, игровым окружением и пользовательским интерфейсом игры. Если для каждого типа взаимодействия требуется свой интерфейс, как предполагает ISP, код может быстро стать разрозненным, запутанным и сложным в управлении.

Принцип инверсии зависимостей (DIP)

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

Например, в гоночной игре объекту автомобиля может потребоваться прямое управление его графическим представлением или прямой доступ к его физическим атрибутам для обнаружения столкновений. Строгое следование DIP может привнести ненужную сложность, накладные расходы на производительность и затруднить отладку, что противоречит практическим потребностям разработки игр.

Учитывая эти проблемы с принципами SOLID, становится очевидным, что разработка игр требует альтернативных парадигм проектирования. Со временем появилось несколько таких парадигм, предлагающих более гибкие и эффективные подходы к созданию игр.

Альтернативные парадигмы в разработке игр

Архитектура на основе компонент

Архитектура на основе компонентов предлагает альтернативу строгой иерархии классов, предложенной SOLID. Эта парадигма фокусируется на создании небольших, многократно используемых компонентов, каждый из которых инкапсулирует определенное поведение или атрибут, например, движение или обнаружение столкновений.

Например, в платформере персонаж игрока может быть композицией MoveComponent, JumpComponent и CollisionComponent. Это уменьшает необходимость в больших монолитных классах, упрощает сложные объекты и предлагает гибкий ответ на вызовы, поставленные SRP и LSP.

Entity-Component-System (ECS)

Парадигма Entity-Component-System (ECS) является дальнейшим развитием архитектуры на основе компонентов. Здесь каждый игровой объект — это сущность (идентификатор или контейнер компонентов), компоненты хранят данные, а системы обеспечивают поведение, оперируя сущностями с определенными комбинациями компонентов.

В космическом шутере вражеский корабль может представлять собой объект с компонентами PositionComponent, MovementComponent и AttackComponent. Затем отдельные системы обрабатывают движение, атаку и рендеринг на основе этих компонентов. Такой подход повышает производительность, развязывает данные и поведение и предлагает решения проблем, связанных с OCP, LSP и ISP.

Дизайн, основанный на данных

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

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

Техники AI

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

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

Паттерны проектирования

Несмотря на проблемы с принципами SOLID, другие паттерны проектирования хорошо подходят для разработки игр. Например, паттерн Observer используется для обработки событий, паттерн Prototype — для порождения объектов, а паттерн Flyweight — для эффективного управления ресурсами.

Заключение

Хотя принципы SOLID трудно строго соблюдать при разработке игр из-за их уникальных требований, проблемы, которые они представляют, проложили путь для альтернативных парадигм. Такие подходы, как архитектура на основе компонентов, ECS, проектирование на основе данных, методы искусственного интеллекта и конкретные паттерны проектирования, обеспечивают надежные решения возникающих проблем, предлагая эффективные и гибкие способы решения захватывающих задач разработки игр. Целью, как всегда, остается создание запоминающихся, увлекательных игровых впечатлений.


ссылка на оригинал статьи https://habr.com/ru/articles/737940/

Что делать, если подчиненный делает не то, что нужно

Эта статья выросла из опроса, который я проводил у себя в канале. Тут хочу разобрать варианты ответов.

Прежде чем читать дальше, выберите свой вариант. Готовы? Тогда поехали.


Деликатно указать на ошибки, сказать, как правильно.

А как так получилось, что твой сотрудник занимается задачей некоторое время и не видит ошибку, а ты, просто проходя мимо, сходу заметил? Твоя квалификация как специалиста  выше, но тогда почему не показал, не научил? Решил, пусть сам учится в бою. Ок, так можно. Но тогда зачем лезешь? Допустим, это срочная, важная задача, но тогда зачем дал ее неопытному сотруднику. Когда даете кому-то задачу, нужно заранее понять, для чего вы это делаете: хотите, чтобы задача была решена или чтобы сотрудник приобрел знания/умения, которые позволят ему такие задачи решать в будущем. Этот выбор предопределяет ваши дальнейшие взаимоотношения с ним: вы руководитель и профессиональный подчиненный или вы наставник и стажер.

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

В случае общения с еще не профессиональным сотрудником, а со стажером сама концепция делегирования полномочий неприменима, хотя можно использовать все элементы полноценной работы: планерки, задачи, точки контроля, отчеты — все “как у взрослых”, с той лишь разницей, что это все только антураж для процесса обучения, и стажер не отвечает за результат задач, которые делает. В большинстве случаев он вообще не знает, можно ли задачу, которую ему поручили, успешно завершить. Хороший стажер хочет учиться, хочет перестать быть стажером и поэтому берется за любую работу, которую ему предлагают, в отличие от профессионала, который четко разделяет то, за что готов отвечать, от того, за что не готов нести ответственность.

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

Ничего не делать, позволить совершить ошибку.

Большинство участвовавших в опросе поняли, что это оптимальный вариант. Действительно, промежуточный результат работы, особенно в чужих руках, часто может казаться странным. Но это не значит, что он неправильный, стоит подождать намеченной точки контроля, когда сотрудник подготовится и сам расскажет о достигнутых результатах. Мне могут возразить, мол, а если цена ошибки большая и я не могу допустить шанс провала, что делать? Тогда не давай такую большую задачу, думай заранее, дроби задачу на подзадачи, ошибка в которых будет не такой высокой, и не мешай человеку работать. 

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

Дать совет как лучше, как бы ты делал сам.

Строго говоря, дача советов не предусмотрена во взаимоотношениях “руководитель и подчиненный”. Совет может дать только один коллега другому коллеге. И вообще некую мудрую мысль, высказанную одним человеком другому, можно считать советом, только если выполняются 3 условия:

  1. Одариваемый мудростью может эту мудрость не слушать.

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

  3. И одариваемый, и даритель хорошо осведомлены о пунктах 1 и 2 и полностью с ними согласны.

В российской культуре, к сожалению, не принято спрашивать разрешение дать совет и от одаривания, как правило, невозможно отказаться, особенно если даритель выше по статусу. Если вы начальник, то никто, скорее всего, не помешает вам сказать то, что вы хотите сказать, даже если вы отвлекаете и мешаете. Но если  пункт 1 еще можно пропустить, то пункты 2 и 3 обязательны в любом случае. Поэтому, прежде чем давать совет, убедитесь, что сотрудник понимает, что сейчас вы говорите с ним не как начальник, а как коллега, который уже делал подобную задачу ранее. Ваши отношения с сотрудником должны быть таковы, чтобы сотрудник понимал то, что вы говорите, можно проигнорировать, и вы не обидитесь и не расстроитесь, а просто примите его решение. В любом случае я не стал бы без явной просьбы давать советы вчерашним стажерам и сотрудникам, которые делают новые или сложные для себя задачи, чтобы не провоцировать на неявное скидывание с себя ответственности. Если не уверен, что сотрудник справится, хочешь уменьшить риски для себя и неопределенность для него, — декомпозируй, сделай задачу проще. 

Остановить работу сотрудника и доделать задачу самому.

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

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

Поступив таким образом, вы ставите подчиненного в очень неловкую ситуацию. А если он не считает, что ему нужна помощь, а если он не согласен с тем, что предлагает другой сотрудник, что ему делать? Кто теперь вообще несет ответственность за результат: он, вы или другой сотрудник? Предложить помощь вы можете, да. Но принимать решение о том, кого подключать, а кого нет, может только сотрудник, который несет ответственность за задачу.

Сесть рядом, сделать задачу вместе.

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


Мой телеграм‑канал Токсичный манагер


ссылка на оригинал статьи https://habr.com/ru/articles/737942/

Принцип «Web of Trust» или как работает PGP

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

Но что это вообще такое? Википедия дает следующее определение:

PGP (англ. Pretty Good Privacy) — компьютерная программа, также библиотека функций, позволяющая выполнять операции шифрования и цифровой подписи сообщений, файлов и другой информации.

На словах ясно, но давайте посмотрим, что у него под капотом.

Концепт

Представим, что у нас есть пользователь А и пользователь Б.

Им необходимо начать общение, но так, чтобы никто не мог узнать о содержимом их переписки. Вот тут к ним на помощь приходит шифрование.

В современных системах используют алгоритмы Rjindael (на данный момент — AES), DES, RC4 и некоторые другие.

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

И вот он ответ, не так ли? Пусть пользователь А передаст свой ключ пользователю Б. Тогда можно будет шифровать свою переписку с двух сторон, и никто не узнает что они друг другу пишут.

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

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

Электронная подпись

Раз передать свой личный ключ от того-же AES — всё равно, что скомпрометировать свою безопасность, то встает вопрос — как пользователь А может безопасно передать свой ключ пользователю Б?

Решение проблемы — подписывать ключи и письма другим ключом! Но только этот второй ключ будет уже от асимметричного алгоритма шифрования. Суть та же, что и у симметричных, только теперь нет единого ключа от замка — их два. Один «публичный», им данные можно только зашифровать, а второй — «приватный», он способен расшифровать данные, обработанные публичным ключом из его пары.

Такое устройство позволяет беспрепятственно опубликовать свой публичный ключ без вреда для своей безопасности.

На этом основывается принцип действия «Электронных подписей».

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

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

Получатель расшифровывает публичным ключом подпись, сравнивает ее с хэшем полученных данных, и если они совпадают, то отправитель — подлинный юзер, а не мошенник.

Web of Trust

ОК, мы разобрались, как совершить рукопожатие (handshake — процесс образования безопасного канала связи).

А теперь представьте, что между пользователем А и Б сидит еще один — пользователь С.

«С» — злоумышленник, которому нужно знать о подробностях общения А и Б.

Он создает две пары ключей для подписи и еще два ключа для шифрования данных.

Пользователю А он представляется пользователем Б, а пользователю Бпользователем А. Реальность такова, что в реалиях интернета нельзя быть на 100% уверенным, что полученная электронная подпись и ключ — подлинные.

Выходит, что если такой сценарий действительно возможен, то безопасности нашим А и Б не видать?

Спасение есть! Вот мы и дошли до основной темы — «сеть доверия», по англ. «Web of trust».

Эта сеть заключается в том, что все пользователи знают публичные ключи электронных подписей друг друга, и у каждого из участника сети можно спросить: «А точно ли вот этот ключ, который мне прислал пользователь Б, принадлежит ему, а не какому-нибудь злоумышленнику?»

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

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

Обобщение

Теперь давайте соединим все эти концепты в одну простую схему.

Пользователь А и пользователь Б оба находятся в одной сети доверия и хотят начать безопасное общение.

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

Все сообщения в этой схеме также подписываются электронными подписями.

При таком взаимодействии вмешательство со стороны невозможно, и наши пользователи, наконец, могут приступить к переписке.

Использовать эту схему вручную нет смысла — она уже встроена во все возможные интернет протоколы связи вашими браузерами и приложениями.

Итог

Ни одна система не бывает идеальной. MITM (Man in the middle, в нашем случае — способ подделки сертификатов, путем верификации поддельных ключей теми подписями, которым доверяет браузер пользователей-жертв) атаки осуществляются и по сей день.

Но если возле адресной строки вашего браузера красуется тот самый «зеленый замочек» — ваши данные в надежных руках алгоритма PGP.


ссылка на оригинал статьи https://habr.com/ru/articles/737944/