Посты с тэгом programming


Представляем Tartiflette: реализацию GraphQL с открытым исходным кодом для Python 3.6+

Друзья, в преддверии майских праздников мы решили не заваливать вас сложными техническими статьями, поэтому нашли довольно интересный, а главное, легкий в прочтении материал, переводом которого с радостью делимся с вами. Данный материал мы хотим приурочить к запуску курса «Web-разработчик на Python».

С оригиналом можно ознакомиться тут.



Приобретение Vivendi dailymotion три года назад оказалось поворотным моментов для нашей организации. Это позволило переосмыслить вектор нашей работы, переосмыслить саму нашу работу от начала до конца. Мы использовали представившуюся возможность для оценки dailymotion в целом, переосмысления нашей инфраструктуры и, что более важно, архитектуры наших п



[Перевод] Модифицируем Python за 6 минут

Всем доброго и неумолимо наступающего!

Этот крайне насыщенный год подходит к своему завершению и у нас остался последний курс, который мы запускаем в этом году — "Разработчик full-stack на Python", чему, собственно, и посвящаем заметку, которая хоть и проскочила мимо основной программы, но показалась небезынтересной в целом.

Поехали

На этой неделе я сделал мой первый pull-request в основной проект CPython. Его отклонили :-( Но чтобы не тратить полностью свое время, я поделюсь своими выводами о том, как работает CPython и покажу вам как легко изменить синтаксис Python.

Я собираюсь показать вам как добавить новую фичу в синтаксис Python. Эта фича — оператор инкремента/декремента, стандартный оператор для большинства языков. Чтобы убедиться — откройте REPL и попробуйте:



Когда стоит использовать Go?

Понятное дело, что это мой личный блог, и потому этот дисклеймер в теории писать нет смысла, но на практике я всë равно напомню – всë, что я тут пишу, это мои личные мысли, если не указано обратное (что это факты или мысли кого-то другого, скажем).

Так вот, когда? TL;DR: никогда.

Длинный вариант: если вам прямо сейчас нужно что-то скомпилированное и ждать Rust 1.0 нет сил, а OCaml выучить нет времени, то ок, конечно же, right tool for the job и всë такое (впрочем, мне кажется, что вы себя обманываете).

Во всех остальных случаях – уже можно взять Rust, они перестали менять весь язык полностью, и он уже рабочий, либо возьмите уже OCaml, не настолько он отличается. Единственный плюс Go перед этими языками – что в нëм может разобраться Python-программист за один вечер.

Горутины с каналами? В Rust есть green и std::comm, в Ocaml’е есть Lwt и Async. Типизация? Посмешище в Go типизацие



Когда стоит использовать Go?

Понятное дело, что это мой личный блог, и потому этот дисклеймер в теории писать нет смысла, но на практике я всë равно напомню - всë, что я тут пишу, это мои личные мысли, если не указано обратное (что это факты или мысли кого-то другого, скажем).

Так вот, когда? TL;DR: никогда.

Длинный вариант: если вам прямо сейчас нужно что-то скомпилированное и ждать Rust 1.0 нет сил, а OCaml выучить нет времени, то ок, конечно же, right tool for the job и всë такое (впрочем, мне кажется, что вы себя обманываете).

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

Горутины с каналами? В Rust есть green и std::comm, в Ocaml’е есть Lwt и Async. Типизация? Посмешище в Go типизацие



webhooker

Когда ты хостишь репозитории сам, то можешь сделать какие угодно хуки и по push’у в свой репозиторий делать что угодно – например, рендерить свой сайт. Но когда ты перемещаешь эти репозитории на GitHub, приходится пушить изменения и туда, и себе на сервер, чтоб они там отрендерились. Хостить сайт на гитхабе мне не хочется, да и это, опять же, лишняя работа – надо будет рендерить его в ветке gh-pages, никакого фана.

В какой-то момент мне надоело (на эту фразу уже можно прямо макрос себе завести, “сделать новый пост с ‘мне надоело’” :)), и я написал вебшлюху – такую маленькую, на 250 строк, программу на Go, которая слушает себе определëнный порт, и когда ей приходит вебхук от гитхаба, исполняет заданную команду. Написал я еë потому, что в инете такой не нашëл (нашëл нерабочую на питоне с кошмарным кодом) – что довольно



Go Replace!

Как-то раз два с лишним года назад я решил посмотреть на Go, поизучать, как это – писать на нëм программы, и насколько хороший выходит результат. Идея для первой программы родилась легко – так как мой любимый Python тормозит на запуске, я решил переписать sr, который я постоянно юзал, на Go.

Так родился Go Replace (надо было рассказать про него еще два года назад, впрочем). Очевидно, поиск по файлам – давно решëнная проблема, find + grep, или grep сам по себе, или ack, или, вот, the_silver_searcher, но никто из них не умеет заменять. Замена – это всегда раздражающее переписывание командной строки на find + sed или xargs + sed. А gr (короткое название, которое я выбрал для того, чтоб не сильно много писать) умеет, и в



RequireJS & AMD

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

Конечно, эту проблему решают разными способами и давно, но всерьëз я рассматриваю только один – AMD, Asynchronous Module Definition. Почему только его – потому что другие обычно либо являются кальками модулей с сервера (которые поголовно все синхронные), либо требуют танцев и прогибания под их проблемы.

Конечно, при каких-то условиях можно себе позволить кальку с CommonJS, например Stitch, если не беспокоит то, что и при разработке, и при деплое придëтся все модули собирать в один файл. Меня это не устраивает, я хочу разные файлы – чтобы при разработке было проще понимать, где проблемы и чтобы окончательное пр



[Перевод] PHP: фрактал плохого дизайна

Хабы: Программирование, Python, PHP

Предисловие


Я капризный. Я жалуюсь о многих вещах. Многое в мире технологий мне не нравится и это предсказуемо: программирование — шумная молодая дисциплина, и никто из нас не имеет ни малейшего представления, что он делает. Учитывая закон Старджона, у нас достаточно вещей для постижения на всю жизнь.

Тут другое дело. PHP не просто неудобен в использовании, плохо мне подходит, субоптимален или не соответствует моим религиозным убеждениям. Я могу рассказать вам много хороших вещей о языках, которых я стараюсь избегать, и много плохих вещей о языках, которые мне нравятся. Вперёд, спрашивайте! Получаются интересные обсуждения.

PHP — единственное исключение. Фактически каждая деталь PHP в какой-то мере поломана. Язык, структура, экосистема: всё плохо. И даже


SQLAlchemy: как втянуться

SQLAlchemy сейчас - очевидный лидер ORM в питоне, но у неë есть один довольно неприятный недостаток: чтобы начать пользоваться, приходится прочитать немало документации. Поэтому я решил написать (очень) короткий пост-введение в алхимию.

Уровень 1: SQL руками

Первым делом нам нужно соединение к базе, с которым можно что-то делать:

>>> from sqlalchemy import create_engine
>>> e = create_engine('mysql://user:pass@host/db')
>>> for r in e.execute('select * from table where id < %s', 2):
...     print dict(r)


SQLAlchemy: как втянуться

SQLAlchemy сейчас – очевидный лидер ORM в питоне, но у неë есть один довольно неприятный недостаток: чтобы начать пользоваться, приходится прочитать немало документации. Поэтому я решил написать (очень) короткий пост-введение в алхимию.

Уровень 1: SQL руками

Первым делом нам нужно соединение к базе, с которым можно что-то делать:

Если хочется именованных параметров, можно использовать text():

Из объектов, которые получаются итерацией результата – RowProxy - данные можно вытаскивать и индексом, и ключом, и атрибутом:

Нужна транзакция?

Это уже что-то и так можно жить, тем более что оно экранирует параметры автоматически.

Уровень 2: SQL-выражения в питоне

Можно получить объект таблицы из базы (с автоопределением колонок) и работать с ним, если так будет удобнее:

Т.е. абсолютно идентичный запрос, но уже в питоне.

Уровень 3: ORM

Ну и если приятнее с объектами работать,