• Какие хорошие книги вы знаете по системному мышлению (на русском)?

    @thenno
    Проектирую, разрабатываю, преподаю.
    Самое лучшее, что я видел на русском о мышлении - это книги по ТРИЗ от Альтшуллера. Сами книги легко гуглятся.
    Ответ написан
    Комментировать
  • Как спрогнозировать следующую дату визита клиента?

    @thenno
    Проектирую, разрабатываю, преподаю.
    Как уже писал выше nirvimel - тут нужно или какое-то простое мат моделирование, или методы машинного обучения. Но есть одна загвоздка - вряд ли вы у Вас что-то получится предсказать, основываясь только временных рядах. Если к этому добавить еще набор известных признаков (например, из анкеты клиента) - можно получить какое-то вменяемое качество. Да и то вряд ли, на самом деле - выборки будут небольшие, а внешних факторов, которые вы никак не сможете учесть - очень много (болезни, командировки, выходы новых сериалов). Но я бы попробовал на вашем месте.

    Уже выше писали про Воронцова, но я добавлю - у него есть достаточно хороший курс на Курсере - https://www.coursera.org/learn/vvedenie-mashinnoe-... Я о нем писал подробнее тут. Если лень смотреть курс - можно поразбираться с библиотеками для Python numpy, sklearn и pandas - но без какой-то нормальной вводной будет тяжело. Я бы остановился на курсе, а потом попробовал что-то сделать с имеющимися данными.
    Ответ написан
    6 комментариев
  • Где в коде разместить код обработки данных?

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

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

    Если еще короче - правильнее всего перенести всю бизнес-логику и валидацию в модель.
    Ответ написан
    1 комментарий
  • Для телеграмм бота подойдёт язык Ruby?

    @thenno
    Проектирую, разрабатываю, преподаю.
    По главному вопросу: если Вы не знаете не Python, ни Ruby, просто берите любой, учите и делайте бота.

    По второму: а куда Вам скорость для телеграм бота? Я сейчас могу долго рассказывать про асинхронность в Python и возможности горизонтального масштабирования при правильной архитектуре - но пока просто повторю первый ответ: просто берите любой, учите и делайте бота. Ну а если рассматривать голые языки - ну какую производительность может выдать в неумелых руках интерпретируемый язык с GIL на одной машинке? А Python и Ruby оба интерпретируемые и ограничены глобальным локом. Даже тут можно все решить через межпроцессное взаимодействие и всякую асинхронщину - но человек, которые имел опыт работы с этими подходами вряд ли бы задавал такие вопросы.

    Ну и не могу удержаться: какая разница на синтаксис? Особенно такие мелочи, как отступы пробелами. Какая вообще разница чем ограничивать блоки кода - отступом, через begin-end, просто через end или фигурными скобками? Да хоть через XXX и YYY - это ВООБЩЕ НИЧЕГО НЕ МЕНЯЕТ.

    Если еще короче: возьмите Python, он сейчас модный. Если хочется написать бота для телеграма - вот этот господин groosh-code.tumblr.com написал про это кучу годных статей, да еще и на русском языке.
    Ответ написан
    Комментировать
  • Вопросы на собеседовании программисту Python

    @thenno
    Проектирую, разрабатываю, преподаю.
    Я писал тут основные вопросы для собеседования питонистов: https://thenno.me/blog/python-interview.html
    Ответ написан
    Комментировать
  • Сколько тактов занимает одна операция сложения в python?

    @thenno
    Проектирую, разрабатываю, преподаю.
    Странный вопрос - какие хотя бы типы то собираетесь складывать?

    Если интересует время работы - профилируйте через встроенные в python средства или утилиту time. Если для задачи нужно именно такты считать - тут нужно смотреть на C/ASM или другой системный язык без сборки мусора, но никак не на управляемые скриптовые языки, где вряд ли получится взять и точно узнать, сколько тактов займет та или иная операция, а stop the world для сборки мусора в самый неподходящий момент повесит все приложение.
    Ответ написан
    Комментировать
  • Как правильно форкнуть процесс в flask?

    @thenno
    Проектирую, разрабатываю, преподаю.
    Для начала, в Python есть более вменяемые способы управления процессами - посмотрите модуль multiprocess.

    API, как можно догадаться, должен отвечать моментально.

    Догадаться не получается, на самом деле:) Очень непонятно, зачем нужна такая логика - сначала ответить клиенту 'ok', а только потом закончить выполнять операцию. Это логически неверно и сбивает с толку в 99% случаев. По-хорошему api должно принять запрос, выполнить действие (хоть меньше секунды, хоть все 90 секунд), а затем ответить клиенту с успехом или нет.

    Главное здесь - грамотно настроить nginx (worker_connections и timeout'ы как минимум, возможно, в официальной документации найдется что-то более годное), чтобы в случае множества медленных запросов сервис продолжал нормально работать.
    Ответ написан
    2 комментария
  • Сколько должна занять учёба?

    @thenno
    Проектирую, разрабатываю, преподаю.
    Как же умиляют эти вопросы "за сколько можно выучить N с нуля". При этом, конечно, никто и не подозревает, что за тем же JavaScript'ом стоит не только синтаксис, но и системы сборки, шаблонизаторы, банальный HTML, без знания которого во фронтенде делать нечего (за очень редким исключением).

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

    А если с программированием человек вообще не знаком - то после краткого знакомства с языком ему предстоит открыть для себя чудесный мир алгоритмов и структур данных (и не нужно говорить, что это все не нужно фронтендеру - мне, как бэкендеру, уже доводилось видеть примеры оптимизации фронтендерских поделий путем замены структур данных и правкой алгоритма), работы процессора и памяти, сетевых протоколов (хотя бы HTTP и HTTPS), методологий разработки, принципов проектирования API (чтобы помочь бэкэнду это API создать) и прочих лучших практик. И это помимо освоения систем контроля версий и всего того, без чего современный разработчик может восприниматься окружающими только как древнее необразованное быдло.

    Так что, да, единственный путь - брать и реализовывать что-то своими руками. А потом опять и опять, не забывая развиваться в соседних областях (а на эту тему тоже много всего написано). Общаться с профессионалами, задавать правильные вопросы (а этот вопрос - вообще не вопрос, это нытье) и учиться у них.
    Ответ написан
    Комментировать
  • Стоит ли учить Scala + Akka?

    @thenno
    Проектирую, разрабатываю, преподаю.
    Продакшен успешно пишут, вот например: habrahabr.ru/company/yandex/blog/239823/. Проект в чем-то похожий - клиент отправляет данные, сервер записывает их в Apach Kafka и потом оттуда раздает.
    Для общения по HTTP лучше всего смотреть в сторону Spray, он достаточно простой и удобный.

    А вот на вопросы "стоит ли" и "сложный ли в изучении" в общем случае ответить нельзя. Если есть время и желание - почему бы нет. Scala прекрасна:)
    Ответ написан
    Комментировать
  • Как вы храните свой .emacs?

    @thenno
    Проектирую, разрабатываю, преподаю.
    По-моему GitHub сейчас крайне популярный вариант: тык.

    Свой я, собственно, там же храню.

    А вообще говоря, а к чему этот вопрос?
    Ответ написан
  • Как в питоне задать уровни логгирования для разных модулей?

    @thenno
    Проектирую, разрабатываю, преподаю.
    В общем случае для Питона:

    logging.getLogger(<имя логера>).setLevel(logging.CRITICAL)

    Подробнее я писал тут:thenno.me/blog/disable-logging.html
    Ответ написан
    Комментировать
  • Стоит ли переходить на python3?

    @thenno
    Проектирую, разрабатываю, преподаю.
    Для своих проектов лучше все-таки python 3. С одной стороны я согласен с господином raiboon - во второй ветке приходится городить треш с потоками и процессами, в то время как в третьей есть годная асинхронщина. Плюс - несколько облагородили синтаксис. А вот для продакшена я бы еще подумал - насколько я помню, asyncio еще не вышла из беты и может меняться, а проблем с портированием библиотек хоть и стало меньше, но они еще не исчезли полностью. Но вот проблема с Pypy, которую затронул господин raiboon, в продакшене стоит не то чтобы остро - Pypy в продакшене я еще не видел (но, наверное, где-то он есть).
    Ответ написан
  • Есть ли генератор статического сайта на Django?

    @thenno
    Проектирую, разрабатываю, преподаю.
    А можно узнать, для чего это планируется использовать? Я не очень понимаю, а зачем нужен Django в статическом сайте? По-моему, тут из Django останется только ORM и админка. Для Python есть много разных генераторов статических сайтов, не проще ли взять один из них и на бэкенде генерировать по данным страницы раз в n времени простым скриптом?
    Ответ написан
    Комментировать
  • Какие вы можете порекомендовать библиотеки Python для многопоточности?

    @thenno
    Проектирую, разрабатываю, преподаю.
    В Python 3 есть из коробки годный asyncore и asyncio для всякой асинхронщины. Можно копать в эту сторону.
    Ответ написан
    Комментировать
  • Как спарсить строчку по первым трём символам в питоне?

    @thenno
    Проектирую, разрабатываю, преподаю.
    Лучше без регулярок.

    str = "Строка, которую нужно проверить"
    
    return str.startswith('AA') or str.startswith('\\nAA')
    Ответ написан
  • Проблема с Pyscripter?

    @thenno
    Проектирую, разрабатываю, преподаю.
    Мне что-то подсказывает, что у Вас Windows, и Вы открываете файл, в пути которого есть русские символы, нет? Если это так, попробуйте создать путь без кириллицы (например C:/my_scripts/test.py) и посмотреть, не исчезнет ли вышеуказанная ошибка.
    Ответ написан
    Комментировать
  • Как запустить исполняемый файл ubuntu python3.4?

    @thenno
    Проектирую, разрабатываю, преподаю.
    #! /usr/bin/ python3.4

    А зачем пробелы?
    #!/usr/bin/python3.4
    Ответ написан
  • Почему сохраняется значение переменной в функции?

    @thenno
    Проектирую, разрабатываю, преподаю.
    Проходил мимо, да и вопрос давно уже закрыт вроде как, но удержаться я не мог. Проблема с областями видимости тут играет важную роль, но тут еще и вступает в ход другая проблема - не нужно бездумно давать значениям по умолчанию изменяемый тип (про это как раз ссылка от @Cenness). Значение по-умолчанию инициализируется только при первом вызове функции. Что это значит? При первом вызове раз мы инициализировали локальный bar пустым списком, затем его изменили. Затем, при втором вызове, локальный bar не инициализируется повторно, а сохраняет свое значение из предыдущего вызова. Таким образом от вызова к вызову мы накапливаем в локальной переменной bar единицы.

    Переменная bar в функции будет использована локальная (из строки (def foo(bar=[]):), а не глобальная из строки bar = []. К слову, если запустить код без инициализации глобальной bar:
    In [1]: def foo(bar=[]):
       ...:        bar.append(1)
       ...:        return bar
       ...: 
    
    In [2]: print(foo())
    [1]
    
    In [3]: print(foo())
    [1, 1]
    
    In [4]: print(foo())
    [1, 1, 1]

    результат будет точно такой же, как и у ТС.


    если в функцию не передавать агрумент, то она будет использовать глобальную переменную bar

    А это просто новое слово в Python. Если не передавать в функцию аргумент, у которого определено значение по-умолчанию, то и будет использовано значение по-умолчанию. Пример:
    In [1]: bar = [1,2,3]
    
    In [2]: def foo(bar=[]):
           bar.append(1)
           return bar
       ...: 
    
    In [3]: foo()
    Out[3]: [1]
    
    In [4]: foo()
    Out[4]: [1, 1]
    
    In [5]: foo()
    Out[5]: [1, 1, 1]
    
    In [6]: foo()
    Out[6]: [1, 1, 1, 1]

    При первом вызове не наблюдается [1,2,3,1].
    Ответ написан
    Комментировать
  • COMMON LISP как первый язык программирования. Плюсы и минусы?

    @thenno
    Проектирую, разрабатываю, преподаю.
    COMMON LISP как первый язык - это хардкорно. Нужно понимать, что Лисп - это не совсем обычный язык программирования - он чрезвычайно мощен и выразителен, но новичок вряд ли сможет это оценить и понять. К тому же, именно стандарт CL для изучения не прост, да и я бы не сказал, что начав писать на CL можно сразу найти хорошие библиотеки на все случаи жизни.

    Лучше всего начать в Python - довольно простой язык, огромное сообщество, множество готовых библиотек и фреймворков. Не стоит недооценивать эти три фактора при выборе первого языка - очень неприятно бросить все, потому что-то не понимаешь какие-то идеи, на которых язык основан, при этом нет сообщества, которое готово помочь и ответить на вопросы, а писать свои первые проекты намного приятнее, когда не нужно разрабатывать с нуля нужные, но нетривиальные в реализации вещи (обработку http-запросов, создание GUI и ORM для базы данных).

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

    Потом, если очень хочется работать именно с лиспами - лучше всего начать с SICP и Sheme, а потом уже посмотреть в сторону современного диалекта лиспа - Clojure (Clojure я бы новичку сразу точно не посоветовал, ибо она заточена на разработку многопоточных приложений, что само по себе является достаточно сложной и обширной темой).
    Ответ написан
    5 комментариев
  • Какие вопросы задают на собеседовании на позицию стажера в Яндекс?

    @thenno
    Проектирую, разрабатываю, преподаю.
    Яндекс - компания большая, и все зависит от того, в какую группу разработки попадете. Но скорее всего будет все так же стандартно, как и на собеседованиях на другие языки: узнают, насколько хорошо кандидат знает язык, насколько умеет думать алгоритмически, насколько помнит стандартные алгоритмы и структуры данных (особенно их реализации в языке, на котором он хочет писать), плюс какие-нибудь вопросы из предметной области, с которой предстоит работать (многопоточность, сеть, протокол http и т.д).
    Ответ написан
    Комментировать