103.5
Karma
0.4
Rating
Вадим Великодный @masai

Пользователь

Делать хорошо, делая плохо: написание «злого» кода с помощью Go, часть 1

0

А, вижу. Извините за оффтопик. Не сразу заметил, что это перевод. :) «Easy to follow» кроме дословного перевода ещё имеет значение «лёгкий в использовании», «практичный». Наверное, можно было как-то так перевести.

Делать хорошо, делая плохо: написание «злого» кода с помощью Go, часть 1

0
Работать с Go — здорово, прежде всего потому, что за кодом очень легко следовать.

Что значит «следовать за кодом»?

Модуль dis в Python и свертка констант

+1

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

Признаки настоящих программистов-сеньоров и методы их выслеживания в дикой природе

0
Для того чтоб придумать более эффективный QuickSort нужен большой талант на грани с гениальностью.

Или знание принципа «разделяй и властвуй». Правда, есть риск придумать сортировку слиянием.

Правильная типизация: недооцененный аспект чистого кода

0
Даже Англия ушла от футов и фунтов.

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

В Россию приезжает отец Free Software, Ричард Столлман. Ищем того, кто готов на пару дней его приютить

+9

Владелец квартиры, полностью соответствующей требованиям, с большой вероятностью будет близок РМС по духу. :)

Признаки настоящих программистов-сеньоров и методы их выслеживания в дикой природе

В Россию приезжает отец Free Software, Ричард Столлман. Ищем того, кто готов на пару дней его приютить

+2

Не, ну про Бутово какие-то слухи ходят. А то, что Edgware Road — место, где надо бояться ходить, я не слышал раньше. На полицейской карте в основном кражи велосипедов (обычное дело для лондонских велопарковок) да антисоциальное поведение. Может, то, что это преимущественно арабский райончик, смутило авторов?

Признаки настоящих программистов-сеньоров и методы их выслеживания в дикой природе

Признаки настоящих программистов-сеньоров и методы их выслеживания в дикой природе

+6

Побуду адвокатом немного.


Согласно словарю Ожегова, сеньор — господин в Испании, а синьор — господин в Италии. Так что оба варианта верны, пока речь о господах. :)


А если не о них, то senior вообще надо переводить как «старший [разработчик]». В транскрипции английского слова тоже звук «И», кстати.

Нейросети и глубокое обучение, глава 3, ч.2: почему регуляризация помогает уменьшать переобучение?

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

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


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


А если мы применим теорему Байеса и учтём наши априорные знания, то получится оценка апостериорного максимума. Если расписать функцию потерь в этом случае, то как раз и появится регуляризационное слагаемое.


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


Скажем, L2 — это не просто из головы взяли, что надо в квадрат возводить. Этот регуляризационный член появляется из априорного предположения о нормальности распределения шума. Так что это очень даже каноничная математика.


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

В Россию приезжает отец Free Software, Ричард Столлман. Ищем того, кто готов на пару дней его приютить

+1
не боится гулять по ночам вдоль Edgware Road

А что не так с Edgware Road? Ходил там ночью, вроде ничего такого. Обычно когда какой-то не очень благополучный район называют, упоминают Брикстон какой-нибудь.


Или именно со Столлманом там какая-то история приключилась?

Глубокое обучение (Deep Learning): обзор

+3
«Базовой линии».

Я помню, в русском издании «Сжатия данных, изображений и звука» Сэломона слово «baseline» вообще перевели как «базелина».

Что такое вероятность и как ее посчитать

0
Не подскажете, в каком учебнике есть об этих двух подходах?

Можно просто про байесовский подход почитать. Например, можно начать с наглядного объяснения теоремы Байеса


Ок, а как проверить достоверность в случае байесовской вероятности? Событие-то одно будет.

А как проверить фреквентистскую вероятность? Ведь вероятность равна частоте при большом числе испытаний только с некоторой вероятностью. То есть, мы определяем вероятность через вероятность. О чём-то подобном писал Литтлвуд в «Дилемме теории вероятностей».

Что такое вероятность и как ее посчитать

+3

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

Вижу, значит существую: обзор Deep Learning в Computer Vision (часть 2)

0

На картинке с object detection / instance segmentation два котейки обведены одинаковым цветом, так что это больше похоже на semantic segmentation.

Вижу, значит существую: обзор Deep Learning в Computer Vision (часть 2)

0
теоретически можно обучить сеть распознавать вообще любые объекты на фото, а не только из ограниченного списка классов (хотя и непонятно, в каком виде задавать выходы сети для этого).

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

Привет от программистов 80-х

0
Да — более интересны не электромеханические АВМ, а пневматические,

Если не ошибаюсь, ещё в Фау-1 был пневматический вычислитель, так что идея давняя. Но сейчас, наверное, в большинстве случаев проще, дешевле и надёжнее поставить контроллер.

Привет от программистов 80-х

Удивительные возможности нейросетей 2019 года

Категории вместо директорий, или Семантическая файловая система для Linux

0

Можно угадывать тег по содержимому. Лучше, чем ничего.

Исправляя мелкий баг в calc.exe

0
Выше уже обсудили

Ага, вижу. Я просто задал вопрос, когда обсуждения ещё не было.


как правило, 31 января + 1 месяц = 28/29 февраля, в зависимости от года.
Куда интереснее, чему должно быть равно (31 января + 1 месяц) + 1 месяц. Нужно ли помнить предысторию получения текущего значения даты.

К этому я и вёл. :) То, что прибавить 2 месяца и два раза прибавить месяц — это разные вещи, может привести к трудноуловимым багам. Если уж делать так, то не называть операцию сложением.

Исправляя мелкий баг в calc.exe

+1
Поэтому угождать надо человеку и 5 мая + месяц должно быть 5 июня…

А чему в таком случае будет равно «31 января + 1 месяц»?

10 распространенных ошибок в письменном английском и как с ними бороться

Анализ сишного Hello World

Анализ сишного Hello World

+7

А в конце выпишем гамильтониан всего этого дела и решим уравнение Шрёдингера, чтоб узнать результат. :)

Используйте __main__.py

0

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


Насчёт дряни — это к мейнтейнеру. Скрипты deb-пакетов тоже могут дел натворить. Или вы плавно ведёте к экзотике вроде Nix/Guix?

Используйте __main__.py

0
Не будь смысла, опакечивание Python модулей не было бы распространено повсеместно:

Я, возможно, потерял нить разговора, но речь шла о собственных проектах. Не берусь судить о всех, но лично мне проще устанавливать пакеты через pip прямо из репозитория git, чем поддерживать пакеты и держать репозитории для разных операционных систем. Чтоб не компилировать каждый раз бинарные модули, можно держать один репозиторий с wheel-файлами. Это удобнее, если, например, разработка ведётся под MacOS, на серверах Ubuntu, а в докере вообще какой-нибудь Alpine.


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

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


У меня же сложилось такое мнение (не обязательно верное). Если пакет зависит от каких-то нативных библиотек, то ничто не мешает проверять наличие этих библиотек при компиляции и установке. Или вовсе помещать их в wheel-файл. Пакеты под линукс следует собирать не на коленке, а в официальном докере manylinux1, что даст какую-то уверенность в работоспособности. Мне кажется, что перечисленные проблемы — это не проблема способа дистрибуции, а проблема мейнтейнера. Вот, тот же numpy. Отлично ставится через pip, хотя насквозь бинарный.


С другой стороны, если пользоваться установленными в систему пакетами, то как работать с виртуальными окружениями? Да, на сервере это нечасто нужно, чтоб стояло несколько окружений. Но на машине разработчика — очень даже.


В общем, всё средства хороши на своём месте.

Используйте __main__.py

0

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


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

Используйте __main__.py

0
И, да, в половине случаев, если не больше — Вы увидите враппер (может не на Шелл, но на питоне).

Вы ведь в курсе, что никто врапперы для питоновских модулей вручную не пишет, а они генерируются автоматически по записи в entry_points?

Используйте __main__.py

+2
Никогда не использовали python -m http.server и python -m compileall .?

Использовал, конечно. А вы никогда не использовали jupyter notebook? По-моему, удобнее, чем python -m jupyter notebook.

Используйте __main__.py

+1

Это плохой подход. Вот причины:


  • нужно знать путь к модулю (а мало ли в какое окружение он будет установлен),
  • нужно прописать shebang,
  • это не работает в Windows, например.

Регистрация точек входа в setup.py и __main__.py лишены этих недостатков.

Используйте __main__.py

+1

Официальная документация рекомендует использовать setuptools для модулей, а те — регистрировать точки входа в setup.py. Инфы не мало, просто она неочевидным образом распределена. Если только начинаете разбираться, то посмотрите на официальный пример модуля. Там много комментариев, и охвачены разные аспекты: от пакетирования до тестирования.


__main__.py имеет смысл использовать, если мы не делаем полноценный модуль, который будем устанавливать, а просто сделали модуль в виде папочки или zip-архива и так и запускаем.

Используйте __main__.py

0
Стараемся использовать шебанг в service_name.py или иное указываем в README.md.

Просто зарегистрируйте точку входа в setup.pyи скрипт запуска с шебангом будет создан автоматически. А для Windows и вовсе exe-файл, если вдруг вам Windows нужен.

Используйте __main__.py

+1

О какой логике речь? Мне кажется, вы не совсем поняли, что я имею в виду. Нужно лишь дописать в setup.py что-то вроде:


setuptools.setup(
    ...
    entry_points={
        'console_scripts': [
            'my_script=my_module:main',
        ],
    },
    ...

И после установки через pip у вас появится общесистемная команда my_script. И точка входа main может находиться где угодно в соответствии с логикой кода, не обязательно в __main__.py.


Если нужно установить один модуль в несколько интерпретаторов, то это значит, что у вас несколько виртуальных окружений. Соответственно, какое окружение активно, такой скрипт и будет вызван.


И это не порочная практика, а повсеместная и рекомендованная Python Packaging Authority. Посмотрите в bin/ своего виртуального окружения. И взгляните на официальный пример проекта от PyPA.

Используйте __main__.py

+6
init.py делает папку модулем, который можно импортировать для других проектов.

Начиная с Python 3.3 __init__.py для этого не нужен.


Допустим, вы хотите этот модуль не только импортировать, но и при случае использовать из командной строки как-нибудь так:

Нужно каждый раз писать python -m, неудобно же. Удобнее и проще регистрировать скрипты.


Я думаю, так мало людей использует __main__.py как раз из-за того, что setup.py представляет более удобный функционал.

Используйте __main__.py

+6

Гораздо удобнее прописать в setup.py все точки входа. И тогда не нужно запускать интерпретатор с ключом -m, так как все точки входа будут обычными консольными командами. if __name__ == '__main__' в этом случае тоже не нужен.

Новый алгоритм, созданный учеными, позволяет создавать почти идеальные «говорящие головы» с реальными людьми

+1
Правда, это актуально лишь для англоязычных видео, поскольку в английском языке всего 44 фонемы, так что нейросеть гораздо проще обучить на примере английского языка, чем русского или японского.

А откуда такая информация? В статье в таблице 1, например, приведены 70 фонем.

Электронное государство будущего

0
С каждым годом технологии информационной безопасности становятся все лучше

Как и технологии их взлома.

Крепостные в эпоху искусственного интеллекта

1 There