Ответы пользователя по тегу Программирование
  • ПО на нескольких языках программирования?

    @nirvimel
    Отвесу одним словом: микросервисы.
    Ответ написан
    Комментировать
  • Выбор низкоуровневого языка?

    @nirvimel
    C. Only.

    И нет тут никакого выбора:
    На ассемблере пишут только студенты в порядке изучения архитектуры ПК. И те, кто в качестве хобби (бесконечно) разрабатывают собственную ОС (по какому-то религиозному убеждению истиннаяЪ ОС должна быть написана полностью на ассемблере). Профессиональные разработчики на ассемблере только читают потому, что могут заставить компилятор ЯВУ выдавать совершенно определенный ассемблерный код.

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

    Поэтому остается только один язык. Он используется для этих задач уже более сорока лет (в то время как в других отраслях успело смениться много поколений языков) и за следующие сорок лет его вряд ли кто-то сможет подвинуть с этих позиций.
    Ответ написан
    6 комментариев
  • Как спрятать секретное слово в код картинки?

    @nirvimel
    Rarjpeg же.
    Ответ написан
    Комментировать
  • Есть ли смысл учитывать аппаратное количество потоков в игровом движке?

    @nirvimel
    Пул потоков по умолчанию содержит число потоков, равное количеству ядер аппаратных потоков. У этого пула есть входная очередь (lock-free), куда сабмитятся поступающие таски. Когда CPU недонагружен очередь пустая. Когда все потоки заняты, очередь растет.

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

    Кстати, очередь задач на пуле потоков - это именно то, как многозадачность реализуется внутри ОС. Только тут сами потоки ОС являются тасками, которые ставятся в очередь. Разница в производительности объясняется тем, что переключение тасков в юзерспейсе легче (следовательно быстрей), чем переключение потоков ОС.
    Ответ написан
    2 комментария
  • Как запоминать код, который писал две недели назад?

    @nirvimel
    1. Как писать много кода, оставляя его простым, как в начале?
    2. Также советую прочесть "Совершенный код" С.Макконнелла.
    3. Качественный код не требует того, чтобы его запоминали. Качественный код может быть забыт сразу после того, как он начнет проходить все тесты. Держать в голове нужно только программные интерфейсы, но даже не все, а только, используемые на текущем уровне абстракции.
    Ответ написан
    Комментировать
  • На что нужно заменить string.digits в этой строке для того что бы получить число от 2 до 7?

    @nirvimel
    base32_characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'
    a = ''.join(random.choice(base32_characters) for x in range(32))
    Ответ написан
    Комментировать
  • Почему принято использовать тире для разделения слов?

    @nirvimel
    Почему принято использовать тире для разделения слов?

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

    Почему не используют нижнее подчеркивание?

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

    А зачем вообще в те времена убирали пробелы с названий песен? Замена кириллицы на латиницу еще понятна, но убирание пробелов зачем?

    Пробел не входит в число символов, допустимых в коротких именах файлов в DOS. Если в VFAT задать файлу имя с пробелами, то во всем софте под DOS это имя будет отображаться очень некрасиво (юникод (кириллица, например) там выглядит еще страшнее). А если этот файл под DOS еще раз переименовать, то такое обрезанное имя останется и в VFAT. Поэтому замена на латиницу без убирания пробелов не имеет смысла.
    Ответ написан
    1 комментарий
  • Чем пожертвовать, DRY или самодокументируемым кодом?

    @nirvimel
    Для этого во все времена применялись комментарии. До тех пор, пока однажды кто-то создал секту самодокументаторов, которые поклоняются богу самодокументируемости и приносят ему в жертву все, вплоть до основополагающих принципов программирования (DRY).
    $x = is_array($map) && isset($map[$param]) /* is map have passed param */
    $y = explode('-', $defaults) /* get defaults int range */

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

    @nirvimel
    Смотря какая цель преследуется:
    1. Не дать воспользоваться вашим кодом для создания другого аналогичного продукта.
    2. Скрыть какую-то маленькую "изюминку", которую можно использовать для читерства, если раскопать ее в коде.

    Первое - вполне реально. Стоимость доработки вашего кода без исходников будет намного превышать стоимость создания аналогичного продукта с нуля.
    Второе - нереально в принципе. Не стоит тратить время на это. Потребность в скрытии "изюминок" возникает обычно вследствие ошибочных архитектурных решений (например, проверка на клиенте того, что по-нормальному должно проверяться на сервере) или ошибочных бизнес-моделей.
    Ответ написан
    Комментировать
  • Coroutine, для чего они нужны?

    @nirvimel
    Coroutines реализуют кооперативную многозадачность между green_threads внутри одного процесса (ОС обо всем этом не догадывается, ее потоки не имеют к этому никакого отношения). В момент "вызова" сoroutine происходит переключение "зеленых" задач вместо собственно вызова функции. Задачи, ожидающие завершение ввода/вывода, получают управление, если их ввод/вывод завершен (или таймаут истек).

    Для чего все это нужно? Потоки ОС слишком тяжелые. Они занимают много стека (памяти). Их создание/уничтожение требует времени. Переключение между ними происходит через ядро ОС (слишком медленно). Большое количество, одновременно активных, потоков может подвесить всю систему. В реальных приложениях/серверах количество потоков типично измеряется максимум десятками ("зеленых" потоков могут быть десятки тысяч). Для преодоления проблемы C10K назрела необходимость переходить на асинхронное программирование с "зелеными" потоками вместо потоков ОС. Осталась одна проблема - переключение задач (которое теперь должно осуществляться вручную); кто и в какой момент должен это делать?
    Это переключение может происходить в io_loop (цикле ввода/вывода) специальной библиотеки, которая отвечает за асинхронность всего приложения (например, asyncio в python). А чтобы поток управления из кода возвращался в io_loop, нужно заменить прямые вызовы функций на асинхронные "вызовы" короутин.

    В начале 90-x вытесняющая многозадачность на процессорах 80386 казалась совершенно прорывной технологией. Кто бы мог подумать, что через 20-25 лет мы (в каком-то смысле) вернемся назад к кооперативной многозадачности.
    Ответ написан
    Комментировать
  • Как прочитать указатель из памяти чужого процесса?

    @nirvimel
    ArtMoney недостаточно для написания полноценного runtime-патча. Потребуется полноценный отладчик, чтение и понимание фрагментов кода, которые ответственны за чтение/запись этого значения.
    Могу предсказать проблему, с которой вы столкнетесь, пытаясь выявить (якобы существующую) цепочку указателей - при каждом новом запуске это значение (и все указатели на него) будет появляться по новому адресу.
    spoiler
    Ибо не все так просто.
    Ответ написан
    3 комментария
  • Что значит выражение "выстрелить себе в ногу?" (в виде кода)?

    @nirvimel
    *((int *) 0) = 1;
    Ни в одном другом языке это не осуществляется так просто.
    Ответ написан
    3 комментария
  • В чем разница между возвратом значения и присваиванием?

    @nirvimel
    Столкнувшись с подобными вопросами, создатели одного из языков программирования приняли решение вообще исключить из языка такое понятие, как присваивание значений переменным. Заодно ликвидировав как таковое понятие переменной.
    Язык в результате стал чище и легче. А количество вопросов, возникающих при его изучении, заметно сократилось.
    Ответ написан
    2 комментария
  • Правильно ли я понял как устроена RAM?

    @nirvimel
    Да. Все сказанное верно, если только речь идет об x86 (включая x86-64).
    Но для других архитектур ответ может отличаться.
    Ответ написан
    Комментировать
  • Как сделать круглосуточный сервис для загрузки файлов?

    @nirvimel
    1. Простой скрипт на самом дешевом VPS делает wget или curl этого прайса по cron и складывает под разными именами (с отметкой времени) в отдельный каталог.
    2. Скрипт на локалхосте подключается к VPS по SCP/SFTP, забирает все скопившиеся там прайсы, парсит их по одному и складывает результат в БД.
    Ответ написан
    Комментировать
  • Как парсить текстовый документ на С(Не С++)?

    @nirvimel
    Если это не HTML/XML/JSON или другой формат, для которого существуют специальные парсеры, то остаются только регулярные выражения, например.
    Ответ написан
    2 комментария
  • Почему сейчас открывается так много школ по программированию?

    @nirvimel
    Наверное, мой ответ пойдет в разрез с мнением большинства, кто утверждает: "Хайп там, где БАБЛО". Но я смею заявить противоположное: "Хайп там, где бабла НЕТ".
    Скажите за сколько вы бы продали станок, печатающий настоящие деньги? - Понимаете к чему я это?
    Кто организует эти курсы? Те, кто не сумел найти себе место в этой профессии (или это место не соответствовало их ожиданиям). Если перед этим он сам отдал кому-то немелкую сумму за подобные курсы, то у него не остается других путей компенсировать эти расходы, кроме как организовав собственные курсы (единственный (теперь) известный ему способ рубить бабло с этой темы). Вот так и умножаются в количестве новые МММы.
    Ответ написан
    4 комментария
  • Как быть в курсе всех новостей в сфере технологий и программирования?

    @nirvimel
    Youtube каналы

    Можно вообще ничего не успеть в жизни сделать, если тратить время на такое.
    Ответ написан
    Комментировать
  • Как узнать количество пользователей программы(Python)?

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

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