Ответы пользователя по тегу Программирование
  • Почему умножение работает быстрее деления?

    @nirvimel
    Во-первых, это касается только компилируемых ЯП в которых целые и действительные числа представлены нативными типами данных аппаратной платформы. То есть 8/16/32/64-целые и 32/64/80-битные действительные. Все это никаким образом не касается динамических скриптов, а также языков, в которых числа по-умолчанию с длинной арифметикой или пределы значений не указаны в спецификации языка (обычно это означает использование длинной арифметики) - во всех этих случаях вычисления будут идти в десятки/сотни/тысячи раз медленнее чем на голом железе и разницы между умножением и делением (а также другими операциями) не будет заметно вообще.
    Во-вторых, даже на компилируемых языках с нативными типами данных, иногда встречаются дополнительные проверки (на переполнение, например) и особые правила применения математических действий, что влияет на производительность гораздо сильнее, чем разница между делением и умножением. Хороший пример - удивительный случай на cython.
    Ответ написан
    Комментировать
  • Триангуляция поверхности и её сглаживание. Как грамотно реализовать?

    @nirvimel
    Для начала попробуйте на время забыть про физический смысл ваших данных, про все высоты и про 3D вообще. Дальше у вас имеется просто некая функция z = f(x, y) от двух аргументов, заданная таблицей значений в некоторых точках (ваши высоты). Вам нужно получить значения этой функции в других точках с меньшим шагом, то есть с большим разрешением по x и y. Это классическая задача 2D-интерполяции. Методов решения масса. Классикой считаются Бикубическая интерполяция и Фильтр Ланцоша.

    Что касается готовых решений, то, например, в scipy есть соответствующие инструменты.
    Ответ написан
    1 комментарий
  • Как лучше брать оплату за работу (фикс за объем / фикс за время / почасовая)?

    @nirvimel
    Разумеется, это личное дело каждого, и каждый делает выбор для себя исходя из своего характера, индивидуальных черт и (немного) из стремления обхитрить работодателя (для работодателя естественно стремление сократить расходы, т.е. обхитрить работника).

    Но лично я заметил в людях одну особенность:
    • Сдельный вариант оплаты (в качестве работника и в качестве работодателя) выбирает люди, которые являются капиталистами в душе, потому что склоны мерить ценность человеческого труда в стоимости продуктов этого труда (в т.ч. услуг).
    • Повременный вариант оплаты (в качестве работника и в качестве работодателя) выбирает люди, которые являются социалистами в душе, потому что склоны мерить ценность человеческого труда в объемах затраченного работником времени.


    Все это, разумеется, не больше чем мои личные выводы, их истинность обсуждаема.
    Ответ написан
    3 комментария
  • Есть ли freeware (или с символической оплатой) Online web-ресурс по построению графиков и поверхностей?

    @nirvimel
    • Очевидный Wolframalpha (пункты 1, 2, 3 в платной версии).
    • Из простых 2D графиков я использую fooplot.com (пример с семейством функций на одном графике). Что характерно - в URL всегда актуальная ссылка на текущий документ (обновляется при любом изменении), сам документ не хранится на сервере, а полностью определен в самой ссылке.
    Ответ написан
    1 комментарий
  • Как и как Вы следите за новостями с сфере Ваших интересов и новостями в IT в целом?

    @nirvimel
    Серфинг? Сервисы? Закладки? RSS ? Соц. сети?

    Сойдет все, кроме соц.сетей, которые давно оккупированы маркетологами и распиаренными дебилами.
    Соц.сети способны только понижать уровень интеллекта пропорционально проведенному в них времени.
    Ответ написан
    2 комментария
  • В чем плюс ассинхронного программирования?

    @nirvimel
    Реактивное программирование - еще один buzzword, под которым обычно понимается Модель акторов, еще один подход к параллельным вычислением, альтернативный классическим потокам (потоки, разумеется, используются внутри под капотом, но отсутствие необходимости в ручном использовании блокировок избавляет от многих потенциальных ошибок и тяжелых последствий в виде race conditions и deadlocks).

    Все это имеет мало общего с асинхронностью в однопоточном (!) Javascript, которая не дает никакого распараллеливания вычислений.
    Ответ написан
    Комментировать
  • Чем открыть/посмотреть .exe?

    @nirvimel
    Как поступать с подозрительными исполнимыми файлами:
    • Правильный вариант - запустить под виртуальной машиной, не подключенной к сети, после чего откатить виртуалку к снапшоту, сделанному до запуска.
    • Приемлемый вариант - создать нового юзера системы, переключить файрволл в режим полного блокирования, залогиниться под новым юзером, запустить подозрительный файл, разлогиниться, вернуть режим файрволла, удалить созданного юзера.
    • Неправильный вариант - пойти спросить на форуме, после чего запустить под администратором.
    Ответ написан
    1 комментарий
  • Что необходимо знать о Python для того, чтобы получить свой первый проект?

    @nirvimel
    Желание учиться это хорошо, но само по себе оно ни к чему не приведет. Нужно ставить перед собой конкретные практические задачи и обучение произойдет в процессе их решения. Конкретная задача порождает конкретные вопросы, на которые дает ответы Гугл (или иначе Тостер). Кроме того, без конкретной задачи сложно поддерживать мотивацию к обучению в течении времени, достаточного для обучения.
    Ответ написан
    2 комментария
  • Какие обязанности клиентской и серверной части?

    @nirvimel
    Если все, чем вы занимаетесь в web, сводится к CRUD, тогда роль бекенда в вашей работе может сводиться к:
    1. Аутентификация юзера.
    2. Проверка прав доступа.
    3. Валидация данных от юзера.

    Когда вы столкнетесь с более тяжелыми приложениями с некоторой бизнес логикой (даже!), тогда вы поймете, что фронэнд занимает такую долю в проекте, какую долю занимает кнопка "Пуск" во всей ОС Windows.
    Ответ написан
    Комментировать
  • Как в СССР писали свои операционные системы/языки?

    @nirvimel
    Начать можно с этого:

    .
    1. Было ли влияние и связь с Западом(если да, то как и какое?)

    Влияние было огромное. Обратите внимание, все наиболее успешные разработки - клоны созданы под сильным впечатлением известных западных аналогов.
    Серия ЕС (самый знаменитый советский мейнфрейм) -> IBM System/360 (самый знаменитый несоветский мейнфрейм).
    Серия "Электроника" -> PDP-11 (самая знаменитая Мини-ЭВМ до прихода персоналок).
    В 80-х пошла куча клонов ZX Spectrum, Apple, IBM PC. В основном, неплохие клоны.
    А вот полностью оригинальные ни с чем не совместимые разработки (много было их) как-то не оставили значительного следа в истории.

    2. Технические подробности, как дебажили, как писали и всё такое.

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

    @nirvimel
    Ваш roboto-icons.rp - это ZIP-архив. Распакуйте его, разберитесь со структурой каталогов, найдите ваши стили, подредактируйте, запакуйте все обратно и верните архиву расширение .rp.
    Ответ написан
    7 комментариев
  • Используются ли все зависимые библиотеки при импорте в Python?

    @nirvimel
    В Python импорт полностью динамический и происходит в runtime. Можно написать:
    if moon_phase == 42:
          import sqlalchemy

    Тогда ImportError будет вылетать при определенной фазе луны.
    Зависимости пакетов в setuptools к этому отношения не имеют.

    Что касается best practice, то абстракция от ORM или любого другого уровня часто реализуется так:
    • Общий функционал, не зависящий от реализации, выносится в ядро, которое оформляется отдельным пакетом mylibrary_core.
    • Связи с конкретной реализацией оформляются в виде плагинов в отдельных пакетах (mylibrary_django, например).
    • Каждый такой плагин имеет зависимость к ядру и к конкретной реализации (django, например).
    • Конечный юзер начинает установку сразу с mylibrary_django, который автоматом подтягивает mylibrary_core, о котором юзеру беспокоится не приходится.
    Ответ написан
    4 комментария
  • Какой язык выбрать для "системного" программирования?

    @nirvimel
    Для системного программирования под Linux язык не выбирают, тут существует в основном один язык - Си.
    Порог вхождения у самого языка не очень высокий. Гораздо выше порог вхождения в системное программирование как специальность.
    Ответ написан
    Комментировать
  • Книги по java для начинающих?

    @nirvimel
    Не буду оригинален, просто напомню про классику:
    9788131705575.jpg
    (кликабельно)
    Ответ написан
    2 комментария
  • Как выполнить поиск изображений на компьютере по преобладающему цвету?

    @nirvimel
    Я писал нечто подобное на Python (не для поиска картинок на диске, а в качестве детали другой более комплексной задачи). Находить конкретный доминирующий цвет (один из более 16 миллионов) бессмысленно, так как на почти идентичном изображении может вообще не быть ни одного пиксела этого конкретного цвета. Возможно, в этом и состоит проблема Color Search.
    Я шел другим путем. У меня был примерно такой алгоритм:
    1. Построение трехмерной (в пространстве RGB) гистограммы.
    2. Аппроксимация этого распределения некоторой функцией (я брал гауссово распределение).
    3. При сравнении двух изображений сравниваются не цвета пикселов, а параметры, аппроксимирующей гистограмму, функции (для гауссова распределения - (мю, сигма) * 3 измерения == 6 параметров; для мю и сигма разные весовые коэффициенты при сравнении). Декартово расстояние в трехмерном пространстве RGB между значениями параметров для двух изображений и есть мера различия их цветовых гамм.
    Ответ написан
    Комментировать
  • Как на Ассемблере наиболее простым методом вывести хоть что-то в консоль?

    @nirvimel
    Для начала вам надо определиться под какую архитектуру процессора и под какую ОС вы пишите. 16-битный код для DOS (похоже вы это имели в виду в своем примере) будет собираться и работать под Windows, но это не будет Windows-приложением.

    Тут представлены примеры хеллоу-вордов под разные ОС. Несмотря на то, что транслятор другой, несложно переписать под tasm.
    Ответ написан
    4 комментария
  • Можно ли писать server-side на нескольких языках одновременно?

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

    Для этого используются комбинации: Python+Cython, Python+C/C++.
    Про Python+Go в продакшн я пока не слышал, но из того что я знаю о Go, если от способен компилироваться и работать на скоростях Си, то такая комбинация имеет смысл.

    Если да, то объясните, как это будет выглядеть и что для этого нужно.

    Со стороны Go - экспорт библиотечных функций в формате, позволяющем вызывать их из Си-кода (не знаю как это практически делается на Go или у него все экспортируемые функции имеют нативный формат вызова).
    Со стороны Python - написание биндинга через cffi. Только отладка такого самописного биндинга - большое приключение. При малейшей ошибке в описании интерфейса начнутся очень странные падения с segfault, ИЧХ иногда не в момент вызова а в произвольный момент после завершения вызова. Поэтому интерфейс надо стараться делать максимально компактным и прозрачным.
    Ответ написан
    Комментировать
  • Какие потоки вводы/вывода использовать в клиент-серверном приложении (TCP)?

    @nirvimel
    Вам нужны Protobuf, BSON, JSON или Thrift.
    И забудьте о ObjectInputStream.

    UPD: Сравнительный бенчмарк.
    Ответ написан
    7 комментариев
  • Если алгоритм зависит от порядка вызова функций в блоке, это не есть хорошо?

    @nirvimel
    Это называется Side Effect.
    В императивном программировании при работе с mutable структурами/объектами ничто не гарантирует от side effect, то есть порядок вызовов всегда может иметь значение (по крайней мере всегда стоит ожидать этого от чужого кода).
    Противоположностью являются "чистые" вычисления, гарантирующие отсутствие side effect. Это достигается:
    - в императивном программировании: переходом к использованию только immutable структур/объектов.
    - в декларативном программировании: многие языки "чистые" из коробки, это их неотъемлемое свойство.
    Ответ написан
    Комментировать
  • Удаленная БД, как лучше реализовать?

    @nirvimel
    Это называется репликация.
    Ответ написан
    Комментировать