• Интересные блоги/источники информации по архитектурам Web приложений?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    общепринятых паттернов нет.

    Почитайте Мартина Фаулера, Боба Мартина, Крэйга Лармана, Кента Бэка, банду четырех, Эрика Эванса и других людей и возможно в этом вопросе у вас поменяется мнение. Скажем SoA и гексагональная архитектура, CQRS и т.д. хорошо вписываются в концепцию распределенных систем.

    Как вы комбинируете все идеи которые нагенерили за последние лет 20, это уже другое дело. А высокие нагрузки (реально высокие) когда нужно вкладывать кастыли - эта задача появляется далеко не сразу. И если архитектура изначально позволяет масштабировать приложение - проблем будет явно меньше. Преждевременная оптимизация - корень всех зол (почти).

    По поводу технологий, что где и когда - никто не даст вам такого ответа. Проще всего, раз уж речь идет о распределенной системе, проектировать систему таким образом, что бы узкое место можно было легко заменить. Скажем если у вас весь проект написан на Python и один его компонент подвержен особенно большим нагрузкам, можно переписать его на Go или C++ а всю остальную систему оставить без изменений. Если у вас узким местом стала база - вводить кэши или уровни кешей. Если узким местом стала шина данных между различными компонентами системы - думаем как оптимизировать это звено (какие-нибудь protobuf для обмена данными, zeromq или свой бинарный протокол)
    Ответ написан
    Комментировать
  • Как вы боретесь с наследием кода в больших проектах?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Никакие размеры кода не должны пугать, если на это выделяется бюджет.
    Если не выделяется - значит рефакторинг ради рефакторинга не нужен.

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

    Kademn
    @Kademn
    Злой
    Подозреваю, что вам необходимо использовать requests.Session()
    url = 'https://...'
    login = 'login'
    password = 'password'
    s = requests.Session()
    r = s.get(url, auth=(login, password))


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

    Еще, зачастую, чтение чужого кода помогает понять как правильно (или неочень) пользоваться тем или иным инструментом. Скрипт авторизующийся в вконтакте и качающий музыку пишет, пожалуй, каждый начинающий питонщик. Найти несложно.
    Немало также статей по парсингу сайтов с помощью python. В них непременно будет urllib или requests. Например тут.
    Вообщем, ищите и обрящете =)
    Вот и в результате послал в гугл, мда. =)

    upd. Раз вы самообучаетесь для себя, попробуйте порешать задачи тут: checkio.org. Полезнее всего будет не просто решать задачи, а смотреть как ту же задачу решили другие, много нового для себя откроете и цели в виде решения очередной задачи всегда будут иметься (ачивки, если вы искушенный задрот, тоже самоцель). В примерах оставленными другими есть как хорошо документированные, так и безумные решения завернутые в одну строку.
    Ответ написан
    3 комментария
  • Существуют ли заочные курсы или стажировка по анализу данных на русском языке?

    @lPolar
    data scientist
    ИМХО, тут есть несколько аспектов:
    1. Как написал brainick , математический бэкграунд и английский в data science практически обязателен.
    Причин этому несколько: отсутствие хорошей литературы на русском языке (как по теории, так и по программированию), обилие английских терминов (lift/top/cross-validation и прочие), значение которых в переводной литературе порой объяснятся весьма туманно.
    2. Если говорить о конкретной литературе, которую стоит почитать, я бы выделил несколько уровней:
    Уровень 0
    1. Бизнес-аналитика - Паклин, Орешков (самое базовое и обзорное введение)
    2. Статистика/Тервер ( по мне, хороши книги Айвазяна/Мхитаряна)
    3. SQL - в обязательном порядке. Мне в свое время помогла книга "SQL для простых смертных"
    4. Изучаем Python - М. Лутц (наиболее полная книга по языку, все что нужно для data science здесь точно есть)
    5. Программируем коллективный разум (к слову сказать, вот в этой книге отличный перевод)
    Уровень 1
    1. Математические основы машинного обучения и прогнозирования - Вьюгин (книга сложная, без подготовки по учебникам НМУ на тему анализа и линейной алгебры лучше не подходить)
    2. Python for Data Analysis (pandas во всей красе, тут нечего добавить)
    3. Примеры и статьи по построению моделей в sklearn - на хабре в последнее время часто мелькают статьи на эту тему, там все достаточно хорошо расписано.
    Уровень 2
    1. Hadoop и иже с ним ("Hadoop в действии", "Programming Pig")
    2. Apache Spark - достаточно почитать описание Python API.
    Тут есть еще один момент - не стоит слишком привязываться к одному языку и фреймворку.
    Одна из неприятных проблем python+pandas+sklearn заключается в том, что эта связка слабо масштабируется - при 2-3-4 гб данных становится сложно разместить их в оперативной памяти. Я знаю про chunk-reading+partial_fit, но точность таких моделей оставляет желать лучшего.
    С другой стороны, если обрабатывать эти данные в pyspark, то теряется все удобство pandas.DataFrame и так далее. Отрасль data science быстро развивается и обрастает новыми технологиями, так что нужно все время держать руку на пульсе.
    UPD: в spark 1.3 появились DataFrame.
    Ответ написан
    4 комментария
  • Чем вы разворачиваете и деплоите django-проекты на локальной машине и на сервер?

    MintTea
    @MintTea
    Vagrant и Ansible. Один раз пишете плейбуки, затем новая машина для разработчика разворачивается командой vagrant up, новый сервер - ansible-playbook production.yml
    Ответ написан
    5 комментариев
  • Какой стек приложений под высоконагруженный сервис выбрать?

    @hsc
    full stack python back-end developer
    Для сбора статистики очень логично использовать append only databases, производительность которых на запись часто играет решающую роль в выборе. Скорее всего вы, как и многие другие, не будете выдавать отчеты на лету, а будете генерировать их по запросу некоторое время, и на опережение генерировать несколько самых основных/популярных и для вас время выборки будет не самым важным критерием.

    Дисковое пространство сегодня стоит относительно не много, и overhead даже в 20% для проекта с такими нагрузками является допустимым. Тут все зависит от формата сообщений, которые вы хотите принимать и от того, как вы решите их хранить.

    В качестве БД можно смотреть на RiakLevelDB в качестве бекенда) или еще один интересный append only key-value storage по типу тарантула: sophia.
    Но на самом деле, решающим фактором тут является не столько сама БД, сколько то, как в нее попадает информация и на каких нодах она должна быть доступна. Как по мне, даже вариант с обычными файлами ОС и fsync() тоже отбрасывать не стоит.

    По поводу веб.сервера: без балансировки, скорее всего, не удасться обработать такое кол-во запросов, хотя это очень сильно зависит от сущности самих запросов. Интересно что Вы тестировали, что nginx показал вам такие цифры на одной ноде, скорее всего отдачу одной (пары) страниц, каждая из которых попала в файловый cache ОС из-за частого обращения и, соответственно, отдавалась с памяти. Вот вам и намек: чтение и запись в память происходят с приблизительно одинаковой скоростью, а nginx позволяет обрабатывать запросы c помощью Lua. А тут уже много вариантов: redis pub/sub, pipes, shared memory и т.д., может вы даже захотите написать модуль для nginx на С.

    Скорее всего вы будете принимать json самых разных вариаций, и тут возможны 2 варианта: или писать сообщения сразу на диск и потом пост-обработка, или парсить данные и потом писать результаты. Тут посоветовать не могу, вам должно быть виднее что на данном этапе логичнее. Но имейте ввиду, что каждая операция на этапе обработки запроса от клиента уменьшает ваш rps.

    Еще важный момент здесь учитывать, что 12krps с одного хоста != 12krps с 12k хостов. Каждый из коннектов nginx будет должен мультриплексировать на что тоже будет расходоваться время.
    Ответ написан
  • Какой стек приложений под высоконагруженный сервис выбрать?

    DigitalSmile
    @DigitalSmile
    http://brainstorage.me/digitalsmile
    Если проект с серьезным бюджетом, то кусочек дата-центра, балансировщик нагрузки в виде железки от f5 (https://f5.com/products/platforms/appliances). В программной части nginx - проверенное решение (если распределить его на 20 нодах с балансировкой, то нагрузка вытекает 12000 * 20). Что будет за фронтендом полностью зависит от архитектуры Вашего приложения (там может быть шардинг, еще один балансировщик и т.п.).
    Если бюджет не позволяет, можете забыть о 10000rps (Вам в любом случае надо либо нанимать очень крутых программистов-спецов по высокой нагрузке, либо см. вариант выше). Берете любой облачный сервис (Amazon, Jelastic, etc) и разворачиваете виртуальную структуру там. Тамошняя производительность будет целиком зависеть от облака и вашего кода.

    По поводу БД, не торопитесь, выбрасывать реляционные базы. Ознакомьтесь с опытом, например здесь www.sarahmei.com/blog/2013/11/11/why-you-should-ne... Не для каждой архитектуры подходят NoSQL.
    Ответ написан
    7 комментариев
  • Фриланс с нуля?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    MongoDB

    Выбросте эту мысль из головы. Возьмите PostgreSQL или на худой конец MySQL. Монгу можно как дополнительный инструмент но ни в коем случае не как основной. Это резко сужает возможности разработчика и для большинства задач увеличивает сложность.

    В целом самая большая ваша проблема будет с получением первых проектов. Придется подождать. А пока ждете - пробуйте, делайте что-то для себя и желательно выкладывайте на github и все такое.

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

    NetBear
    @NetBear
    По-хорошему, на ваш вопрос нужно ответить так: "Пайтон-програмисту нужно знать Пайтон и программирование."
    Нужно понимать, что на том же Пайтоне можно реализовать от print "Hello word!" до Дропбокса с Инстаграмом.
    Мой совет, поучаствуйте в каком-нибудь open source проекте. Там Вы на практике освоите различные грани языка, програмирования и технологий командной разработки и ещё массу всего.
    Ответ написан
    2 комментария
  • Что почитать про нормализацию БД?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    В принципе учебник для этого не нужен, нормализация - минимизация избыточности данных, имеет 5 форм. Первые три формы нацелены на связанность данных, две последних на улучшение структуры. Очень хорошо описано здесь - citforum.ru/database/dblearn/index.shtml (главы 6 и 7)
    Кратко здесь - support.microsoft.com/kb/283878/ru

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

    А вот и видео неплохое - www.youtube.com/watch?v=1GWx5CZdSCg
    Ответ написан
    Комментировать
  • А как вы создаете временные переменные?

    xSkyFoXx
    @xSkyFoXx
    Ответ написан
    Комментировать
  • Какая подробная план-стратегия обучения программированию на Python?

    SilenceOfWinter
    @SilenceOfWinter
    та еще зажигалка...
    Да вроде все очевидно: прочесть популярный учебник для чайников (можно определить например по числу отзывов) -> попрактиковаться -> изучить смежные темы (html\xml\json, СУБД) -> попрактиковаться -> прочитать продвинутый учебник\официальный мануал -> попрактиковаться -> изучить смежные темы (шаблоны проектирования, тестирование, кеширование) -> попрактиковаться -> освоить популярный фреймворк на данном языке -> попрактиковаться
    Ответ написан
    Комментировать
  • WebIndex (бот который следит за вами)?

    Комментировать
  • Есть ли смысл использовать BSON вместо JSON при общении по WebSocket?

    Tiendil
    @Tiendil
    Разработчик ПО.
    А Вам хоть один из перечисленных плюсов критичен? То есть вы действительно в него упираетесь?

    Если да, используйте, если нет — не надо.

    KISS
    Ответ написан
    2 комментария
  • Выбор функционального языка программирования?

    Tyranron
    @Tyranron
    Если под "функциональным" подразумевается функциональная парадигма, то Go тут явно аутсайдер. Советую Haskell для ознакомления с парадигмой фактически в "чистом" виде. После него - Scala и/или Rust, как удачные смешения функциональной парадигмы с другими парадигмами/направлениями. И не забудьте повертеть Erlang.

    Если же под "функциональным" подразумевается удобный инструмент с многими возможностями из коробки, то тут однозначно Go, так как и порог вхождения мал, и прививает хорошие практики. После него Scala + FRP + TypesafeStack тоже должны показаться интересными, но там порог вхождения повыше будет.
    Ответ написан
    Комментировать
  • Как развить мышление для программирования?

    garex
    @garex
    Мышление для программирования никак нельзя развить, также как и тело для балета — оно или есть или его нет.

    Ваш «ёж» — в другой области. Быть «лисой» в программировании — это плодить говнокод или что-то делать, но не получать от этого удовольствия. Попробуйте другую область.
    Ответ написан
    8 комментариев
  • Ruby or Python?

    yokotoka
    @yokotoka
    Python guru
    Я стоял перед тем же выбором лет 6 назад и выбрал Python. Не пожалел. Он достаточно универсален, чтобы писать на нём не только сайты. Ruby, к сожалению, больше RoR-язык, чем язык общего назначения. Очень мало софта вне RoR у него и назначение очень узкое, хотя сам язык прикольный. Python же используется очень много где вне веба - начиная от микроконтроллеров, заканчивая сложными научными расчётами.

    И ещё, немного личного. Я ненавижу Django. Это один из самых худших веб-фреймворков, по странному стечению обстоятельств, оказавшийся в тренде. Он, заточенный под газетные сайтики и бложики, с тяжёлым синдромом велосипедостроения и Not Invented Here, лепится всюду, куда стоит и, особенно, куда не стоит. И это нелепо смотрится (особенно в нём убог ORM в сравнении с той же SQLAlchemy). Есть много более удачные примеры для многих применений (Flask, Pyramid). Если возьмётесь делать веб-приложение, а не сайт-визитку/блог (который лучше вообще делать на php и Wordpress), присмотритесь к ним повнимательнее.

    UPD: А вообще, создаётся ощущение, что сейчас лучше всего учить JS, хотя он плох почти всем, что в нём есть. :) Go, Rust интересны, но пока слишком незрелые. Тут ещё C#/.NET со своими open source движениями начинают смотреться неплохо. Ну и всегда есть Java для любителей винтажа и максимальной кроссплатформенности (с матюками). В общем, сложное сейчас время. :)
    Ответ написан
    5 комментариев
  • Как лучше хранить данные для последующей обработки?

    @Gabriel_vs
    I'm a Scientist in Data Analysis / programmar.
    Хранение данных в BigData порой граничит с искусством. В целом, тут как и везде -- всё зависит от задачи, которая ставится. В любом случае, работа/анализ с текстовыми данными неминуемо приведет вас к Инвертируемому индексу (причем к нескольким).

    Если пока вкратце, то вам надо проиндексировать содержимое "сырых данных" (файлы, веб, БД, etc). Пока проиндексировать как есть, без изменения самих данных. Если это реально BigData, то надо подумать о распределенном индексе, понимать стоит ли (а если да, то как) реплицировать индекс (но это уже вопрос производительности).

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

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

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

    Немого ссылок:
    1. По информационному поиску / анализу данных читайте вот это:
    Введение в информационный поиск, Маннинг
    Обработка неструктурированных текстов. Поиск, орга...
    2. Импорт / фреймворки / библиотеки индексирования и поиска:
    Apach Solr
    Apach Tika
    3. Инвертированный индекс

    PS: всё же хотелось бы узнать о конкретной задачи, тогда было бы больше конкретики.

    UPD: в ряде случаев в BigData надо манипулировать графовой структурой данных. Соответственно, посмотрите в сторону соответствующих СУБД, например neo4j. Главное требования к СУБД в BigData -- минимализм функционала, иначе на больших данных работать будет всё крайне медленно.
    Ответ написан
    1 комментарий
  • Какие самые реальные и действенные проекты\работы\фриланс для python-программиста?

    voidnugget
    @voidnugget
    Программист-прагматик
    Пишу на питоне ещё с 15 лет (2.4+)... ненавижу его runtime и архитектуру. Язык хороший - реализация никакущая. Ну да его синтаксис достаточно упрощён, но и за синтаксический сахар приходится платить сложностями отладки и поддержки.

    Сейчас же почти все известные мне конторы не используют питон в продакшенах с более-менее высокой нагрузкой. Яндекс тому пример. Чаще питон используется для решения прикладных задач администрирования, так как это делается, к примеру, в SaltStack. Все дружно слезают с питона, РНР и рельсов на Golang, Java/Scala, и иногда даже Groovy - производительность выше в десятки раз, и managed runtime на много стабильнее. Правда в случае с JVM очень сильно раздувается куча в виду избыточности объектной модели (оператву жрёт как дурное, а я байтики считать привык). Сейчас это должно лечится с помощью Project Graal и Truffle, правда пока до этого дошёл только jRuby, который тоже в пару десятков раз быстрее Ruby. По идее и Groovy тоже должен переползти как-то ... Вот про jyton ничего не знаю.

    Много моих знакомых слезло на Golang с Ruby и Питона.
    Стоит попробовать - он достаточно простой и идиоматичный, вот рефлексию стоит обходить стороной - она очень медленная, впрочем как и везде. Работу может и не найдёте сразу, но после реализации пары простых проектов будет проще предлагать в качестве целевой платформы.

    Фрилансить с питоном начать можно, но очень желательно опробовать ещё хотя бы пару окружений и фреймворков типа Groovy Grails, или Typesafe Stack. Сейчас требования рынка возросли в пару раз за последние два года - нужны ассинхронности/многопоточности, push-нотификации в мобильные приложения и по вэбсокетам/комету. И это всё с богатыми js-фронтендами на всяких там Angular'ах и React'ах. Естественно можно крутить костыли типа Celery / Gearmand / Beanstalk / RabidMQ, но накладные расходы на коммуникацию слишком большие :( Компилируемые языки со своими Managed Runtime'ами позволяют строить монолитные приложения в которых подобные решения избыточны в рамках одной и той же машины, а если это куча нод в кластере то нужно мерить/думать.

    Django сейчас сложно поддерживать так как он достаточно сильно развился за последние 3 года, и я очень сомневаюсь что сохранится совместимость новых версий со старыми.

    А вот с pyramid (pylons) и SQLAlchemy можно строить достаточно хорошие приложения. У них есть enterprise поддержка и соответствующие гарантии.

    Типовые задачи на питоне:
    - написать какой-то мелкий скрипт с Gui на PyQT / Pyside для какой-то аналитики и отрисовки графиков, иногда попадаются задачки с gstreamer'ом
    - написать какое-то простое RESTful CRUD приложение, в стиле "одна табличка БД - один контролеер", это конечно же тонна копипасты и мне больше нравятся DataMapper'ы по типу TastyPie. Иногда люди хотят чистого Tornado или Flask'a, так как им не нравится overhead в джанге и pylons.
    - написать скрипты для деплоя чего-то, обычно люди не знают про SaltStack.

    В плане архитектуры питонистам чужды различные SOA с CQRS-ES'ом, потому что сам компилятор не располагает. Хотя её достаточно просто поддерживать.

    Проблема всех проектов на Node.js / Python / Ruby это отсутствие долгосрочной поддержки библиотек и фреймворков - часто ломается обратная совместимость, и нужно постоянно следить за состоянием всех зависимостей. Опять же нужен TDD/BDD для того что это всё хорошо контролировать. Тестируешь руками - себя не уважаешь.

    Ну и вроде всё ...
    p.s. я опубликую на хабре статью сегодня-завтра "Freelance - you're doing it wrong" там поделюсь опытом работы и основными организационными проблемами в рамках удалённой работы и фриланса, покажу разницу между ними.
    Ответ написан
    6 комментариев