tag:blogger.com,1999:blog-8249288565266662232024-03-06T10:01:26.141+02:00Андрей СветловБлог о PythonAndrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.comBlogger106125tag:blogger.com,1999:blog-824928856526666223.post-3113457993242886232018-09-03T10:30:00.003+03:002018-09-03T10:30:58.627+03:00Горшочек не вари<div dir="ltr" style="text-align: left;" trbidi="on">
Обновление для <a href="https://asvetlov.blogspot.com/2018/08/python-evo.html" target="_blank">Курсы по Python в офисе EVO</a><br /><br />Регистрация на программы <b style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;">asyncio+aiohttp </b><span style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;">и </span><span style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><b>Advanced asyncio ЗАКРЫТА.</b></span><br />
<div style="text-align: left;">
<span style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;">Осталось только несколько мест на </span><b style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;">Python optimization.</b></div>
<div style="text-align: left;">
<span style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><b><br /></b></span><span style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;">Спасибо за понимание</span></div>
<br />
</div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com4tag:blogger.com,1999:blog-824928856526666223.post-79661361511153219352018-08-27T10:55:00.001+03:002018-09-03T10:26:53.734+03:00Курсы по Python в офисе EVO<div dir="ltr" style="text-align: left;" trbidi="on">
Открыта регистрация на новую серию курсов по обучению Python.<br />
<br />
Новый формат: каждый курс занимает полные выходные (суббота и воскресенье), состоит из двух занятий по 6 часов.<br />
Занимаемся 50 минут, 10 минут на перерыв с чаем-кофе, и снова грызть гранит науки. Обед с пиццей прилагается.<br />
Небольшие группы по 15 слушателей.<br />
<br />
<b>asyncio+aiohttp</b><br />
<br />
<i>22-23 сентября, начало в 11.00</i><br />
<br />
Курс расчитан на "простых программистов", желающих научиться применять асихронную связку asyncio/aiohttp для решения ежедневных рабочих задач.<br />
<br />
<i>Клиент:</i><br />
Учимся делать простого паука для обхода сайтов и вытаскивания из них данных. <br />
<ul style="text-align: left;">
<li>Минимально необходимый набор <i>asyncio API</i>.</li>
<li><i>aiohttp client API:</i> готовим правильно, не допуская стандартных ошибок.</li>
<li>Вебсокеты и таймауты</li>
<li>Одновременное выполнение HTTP запросов</li>
</ul>
Закончим примером, который делает какую-нибудь полезную работу.<br />
<br />
<i>Сервер:</i><br />
Научимся создавать простые сервера на aiohttp.<br />
<ul style="text-align: left;">
<li>Выдача страниц, шаблонизатор и подключение баз данных.</li>
<li>Загрузка HTML форм на сервер, работа с большими файлами.</li>
<li>Авторизация и сессии пользователя.</li>
<li>Серверные веб-сокеты</li>
</ul>
Плюс трюки и советы от автора.<br />
<br />
<b>Advanced asyncio</b><br />
<ul style="text-align: left;">
</ul>
<div>
<i>29-30 сентября</i><i>, начало в 11.00</i><br />
<br />
Курс для тех, кто хочет понять asyncio до самых мелких деталей.<br />
<ul style="text-align: left;">
<li>Как работает event loop</li>
<li>В чем сходство и отличие между Task и Future, когда что следует применять</li>
<li>Что такое транспорт и зачем он нужен</li>
<li>Как тестировать асинхронный код</li>
<li>Как писать свои библиотеки на базе asyncio</li>
</ul>
</div>
<div>
Бонусом идет объяснение того, как должен выглядеть идиоматичный и правильный асинхронный код сегодня. Подход быстро меняется и совершенствуется. То, что выглядело классным и красивым два-три года назад -- сегодня несколько устарело.<br />
<br />
<b>Python optimization</b></div>
<div>
<br />
<i>6-7 октября</i><i>, начало в 11.00</i><br />
<br /></div>
<div>
Оптимизаровать нужно в первую очередь алгоритмы и запросы к базе данных.<br />
Если этого мало -- вам сюда.</div>
<div>
Курс влючает:</div>
<div>
<ul style="text-align: left;">
<li>Обзор инструментов для измерения производительности и нахождения узких мест</li>
<li>Обучение cython как относительно простому языку для создания глубоко оптимизарованных Python модулей.</li>
<li>Знакомство с Python C API в минимально необходимом объеме.</li>
<li>Демонстрацию примеров из рабочего кода с улучшением скорости выполнения узких мест в 10 и более раз. С показыванием и рассказыванием: как мерять, что делать и куда смотреть при оптимизации</li>
<li>Высший пилотаж: обучение созданию Python C Extensions на чистом C.</li>
</ul>
<div>
<br /></div>
</div>
<div>
<b>Стоимость</b></div>
<div>
<b><br /></b></div>
<div>
Каждый курс стоит 4500 грн.<br />
При безналичной оплате скидка 5%.<br />
При оплате сразу за два курса сразу скидка 5%. Три курса -- 10%.<br />
Студентам (нужен скан студенческого билета на почту) -- 15%.<br />
Скидки суммируются, т.е. студент который платит за три курса сразу по безналу получает 5+10+15 = 30%<br />
<br />
<b>Регистрация</b><br />
<br />
Для регистрации пожалуйста заполните <a href="https://goo.gl/forms/8ClzJnKbXssHnRuC2" rel="nofollow" target="_blank">форму</a><br /><br /><b>UPD</b>: регистрация на <b><i>asyncio+aiohttp</i> и </b><b><i>Advanced asyncio </i></b><b><u>закрыта</u>.<br />Остались места только на </b><b><i>Python optimization</i></b><br />
<br />
В случае вопросов пишите на <a href="mailto:andrew.svetlov@gmail.com" target="_blank">email</a><br />
<br />
Количество мест ограничено.<br />
<br />
<b>Место проведения</b><br />
<br />
<a href="https://www.google.com/maps/place/EVO/@50.4049241,30.6744296,15.68z/data=!4m5!3m4!1s0x40d4c4f328925f07:0xa47f647a2cdf1661!8m2!3d50.4049258!4d30.6798472" rel="nofollow" target="_blank">Офис Evo</a>, Харьковское шоссе 201/203 (м. Бориспольская).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwT7viZYHxwNa-3ctVV_Yxc7l7X9L5MgtL75nBz3EzYlhP8KZ13UD1q4Dxs8v_-qsS-NOUDYSwhDiTTitgA_7CJMhDOm81-ruBWWuyqeoNecbrYvtOEQ2W9oDVLaxRGbh0UJtXKhLbhz7N/s1600/Screenshot+from+2018-08-27+10-32-10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1004" data-original-width="1600" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwT7viZYHxwNa-3ctVV_Yxc7l7X9L5MgtL75nBz3EzYlhP8KZ13UD1q4Dxs8v_-qsS-NOUDYSwhDiTTitgA_7CJMhDOm81-ruBWWuyqeoNecbrYvtOEQ2W9oDVLaxRGbh0UJtXKhLbhz7N/s640/Screenshot+from+2018-08-27+10-32-10.png" width="640" /></a></div>
<br />
<br />
<br />
<br />
<i><b>Видео-записи и онлайн-вещания нет.</b></i></div>
<div>
<br /></div>
</div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-64728747073638464282017-09-18T17:17:00.002+03:002017-09-18T17:17:46.461+03:00Вакансия программиста в ocean.io<div dir="ltr" style="text-align: left;" trbidi="on">
Компании ocean.io, где я работаю, требуется Senior Software developer.<br />Киев, full time.<br /><br />Плюшки -- код на Python 3.6, asyncio и aiohttp.<br /><br />Остальные подробности расскажу при непубличном общении.<br /><br />Если кому интересно -- пишите на andrew.svetlov@gmail.com</div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-10329537218213716042017-06-30T02:48:00.000+03:002017-06-30T02:48:13.976+03:00Куда поступать будущему программисту?<div dir="ltr" style="text-align: left;" trbidi="on">
Прошу совета.<br /><br />Мой крестник поступает в институт.<br />Это почти наверняка КПИ (который Киевский Политех).<br /><br />Он хочет стать программистом, что я очень приветствую.<br /><br />Вопрос в том какую кафедру и специальность выбрать.<br /><br />При этом есть такое наблюдение: программистов сейчас как блох (не в обиду будет всем нам сказано и мне в том числе) а спецы по Data Science становятся всё более востребованными.<br /><br />Так куда пойти?<br /><br />И может кто посоветут какой контакт в КПИ чтобы я с преподавателями пообщался да порасспрашивал их что и как?<br /><br /></div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-61509506669217964092016-12-13T15:52:00.000+02:002016-12-13T15:52:53.168+02:00Пельмени<div dir="ltr" style="text-align: left;" trbidi="on">
Все знают что такое спагетти-код.<br /><br />Термин стал очень популярным. "Макароны" -- признак говнокода, да?<br /><br />Сегодня Google меня удивил подкинув ссылку на <a href="https://en.wikipedia.org/wiki/Spaghetti_code#Ravioli_code">равиоли-код</a>.<br />
<blockquote class="tr_bq">
<span style="background-color: white; color: #252525; font-family: sans-serif; font-size: 14px;">Ravioli code is a type of computer program structure, characterized by a number of very small and (ideally) </span><a href="https://en.wikipedia.org/wiki/Loose_coupling" style="background: none rgb(255, 255, 255); color: #0b0080; font-family: sans-serif; font-size: 14px; text-decoration: none;" title="Loose coupling">loosely coupled</a><span style="background-color: white; color: #252525; font-family: sans-serif; font-size: 14px;"> </span><a class="mw-redirect" href="https://en.wikipedia.org/wiki/Software_component" style="background: none rgb(255, 255, 255); color: #0b0080; font-family: sans-serif; font-size: 14px; text-decoration: none;" title="Software component">software components</a><span style="background-color: white; color: #252525; font-family: sans-serif; font-size: 14px;">.</span></blockquote>
Очень хорошее определение. Единственная проблема -- название немного не родное.<br />
<br />
Равиоли -- это те же крошечные пельмешки, но слово "пельмени" мне ближе.<br />
<br />
Предлагаю такую стратегию: <br />
<ol style="text-align: left;">
<li>Пишем пельмени-код.</li>
<li>Если получается перейти на уровень равиоли -- у нас всё отлично</li>
<li>Выходят манты или хинкали -- повод уделить пристальное внимание но в целом тоже ничего</li>
<li>Если творение невозможно представить в виде пельменных собратьев и оно по внутреннему ощущению больше похоже как минимум на тульский пряник а то и на полноценный каравай -- нужно бить тревогу.</li>
</ol>
</div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-73307197674050021282016-11-30T18:51:00.000+02:002016-12-01T16:00:17.317+02:00Цены снизились на семинар по async/aiohttp<div dir="ltr" style="text-align: left;" trbidi="on">
Как вы знаете в декабре я провожу <a href="http://asvetlov.blogspot.com/2016/11/asyncio-aiohttp-training.html">семинар по aiohttp/asyncio в Москве:</a><br />
<br />
Positive Technologies, которая взяла на себя всю организацию меропрития, изыскала возможность несколько снизить накладные расходы. Как следствие цена тоже понизилась.<br />
<br />
В итоге сумма составляет:<br />
<br />
<ul style="text-align: left;">
<li>Регулярный платеж <i>12,000 руб.</i></li>
<li><i>С</i>туденческий пакет (требуется скан студенческого билета) -- 7<i>,000 руб.</i></li>
</ul>
<br />
Те, кто уже зарегистрировался -- не переживайте.<br />
Скидка распространяется на всех.<br />
Кому не пришло письмо с подтверждением -- извините.<br />
До этого объявления с окончательной ценой мероприятия не хотелось переходить к финансовым вопросам.<br />
<br />
Как записаться?<br />
Заполните <a href="https://docs.google.com/forms/d/e/1FAIpQLSc7yDcdR3EH294JbFphjRKWlVrdjb3d1xtgLN68IFPC7bdUmw/viewform">форму</a>.</div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-79773857484701154262016-11-18T21:27:00.000+02:002016-11-30T18:51:46.427+02:00Семинар по async/aiohttp<div dir="ltr" style="text-align: left;" trbidi="on">
Благодаря неоценимой организаторской помощи компании <a href="https://www.ptsecurity.com/ww-en/">Positive Technologies</a> я проведу семинар по asyncio/aiohttp в Москве 17-18 декабря (суббота-воскресенье).<br />
<br />
<h4 style="text-align: left;">
Что в составе семинара?</h4>
<br />
<ol style="text-align: left;">
<li>Базовые знания об asyncio. Из всего огромного набора функций для начала работы нужно знать всего десяток. На них и сосредоточимся.</li>
<li>Получение данных по протоколу HTTP с помощью aiohttp (client API). Всё, что нужно знать для составления собственного бота-паука.</li>
<li>Простейший web server на aiohttp. Советы по организации кода, работа с базами данных, шаблонизаторами, сессией пользователя и прочее.</li>
<li>Продвинутые технологии в aiohttp: сигналы, middlewares, вложенные приложения.</li>
<li>Возвращаемся к asyncio: Future object и streaming API.</li>
<li>asyncio транспорт и протокол как низкоуровневые конструкторские блоки.</li>
<li>Описание работы asyncio loop изнутри.</li>
</ol>
<h4 style="text-align: left;">
Об авторе (т.е. обо мне)</h4>
<div>
<ul style="text-align: left;">
<li>В профессии с 1999 года</li>
<li>Python Core Developer с 2012</li>
<li>aiohttp maintainer</li>
<li>asyncio соавтор</li>
</ul>
</div>
<br />
<h4 style="text-align: left;">
Как это всё выглядит?</h4>
<br />
<ul style="text-align: left;">
<li>Два полных выходных дня (суббота и воскресенье), с обедом и парой кофе-брейков в течении каждого дня.</li>
<li>Небольшая аудитория в несколько дестков человек.</li>
<li>Строгого расписания и бесконечного потока слайдов нет. Есть примерный план но я смогу легко его поменять на лету ориентирусь на понимание темы слушателями.</li>
<li>Свободный формат общения. Т.е. я рассказываю и показываю, пользуясь проектором, редактором для кода, браузером, доской с маркерами. В любой момент можно задать вопрос если что-то непонятно -- буду объяснять и показывать пока не станет окончательно ясно.</li>
</ul>
<h4 style="text-align: left;">
На какую аудиторию расчитан семинар?</h4>
<br />
<ul style="text-align: left;">
<li>На энтузиастов, жадных к новым технологиям.</li>
<li>Знание asyncio не обязательно, но слушатели должны уметь программировать на Python и создавать web сайты с использованием любого framework: Django, Flask, Tornado и т.д.</li>
<li>Если уже есть опыт работы с asyncio/aiohttp но хочется узнать тему лучше и глубже -- вам тоже будет полезно.</li>
<li>В конце концов я -- соавтор обоих библиотек. Поверьте, я знаю как они устроены и как их использовать правильно -- и на семинаре буду делиться этими знаниями.</li>
</ul>
<br />
<h4 style="text-align: left;">
Время и место проведения</h4>
<div>
Семинар проходит 17-18 декабря. Суббота-воскресенье, два полных дня.<br />
Обеды и кофе-брейки прилагаются.<br />
<br />
Начало в 9.30, окончание -- 17.30</div>
<div>
<br />
Место проведения -- офис <a href="https://www.ptsecurity.com/ww-en/">Positive Technologies</a>, Москва, Преображенская площадь дом 8 (станция метро "Преображенская площадь).<br />
<br /></div>
<div>
<iframe allowfullscreen="" frameborder="0" height="450" src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2242.905317486052!2d37.71063136641921!3d55.794881980848686!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x46b535093ad7d72b%3A0x15c200dbca057794!2sPreobrazhenskaya+ul.%2C+8%2C+Moskva%2C+Russia%2C+107061!5e0!3m2!1sen!2sua!4v1479470621394" style="border: 0;" width="600"></iframe><br /></div>
<div>
<br /></div>
<div>
<br /></div>
<h4 style="text-align: left;">
Стоимость и оплата</h4>
<div>
Стоимость <i>12,000 руб, </i>студентам -- 7<i>,000 руб.</i></div>
<div>
<br /></div>
<div>
Для регистрации заполните, пожалуйста, <a href="https://docs.google.com/forms/d/e/1FAIpQLSc7yDcdR3EH294JbFphjRKWlVrdjb3d1xtgLN68IFPC7bdUmw/viewform">форму</a>.<br />
После регистрации вы получите письмо с детальной информацией об оплате.<br />
<br /></div>
</div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-23620656737393834042016-10-11T18:20:00.000+03:002016-10-12T02:31:06.238+03:00Курсы по Python<div dir="ltr" style="text-align: left;" trbidi="on">
После долгого перерыва я решил возобновить проведение курсов по Python.<br />
<br />
Они состоятся в ноябре 2016, каждое воскресенье месяца.<br />
<br />
Программ будет три:<br />
<br />
<h3 style="text-align: left;">
aiohttp для начинающих</h3>
<div>
Четыре занятия по два часа.<br />
<br />
Мы научимся делать сайты на aiohttp.</div>
<div>
Простейшие странички, формы, веб-сокеты и проч.<br />
Подключим базы данных, авторизацию, шаблонизатор.<br />
Немного коснемся asyncio в том объёме, который предназначен для "простого программиста".<br />
В общем всё, что нужно знать чтобы уверенно работать с aiohttp и совместимыми библиотеками.<br />
<br />
Плюс советы от знатного собаковода на по правильной организации кода, отладке и разным хитростям.<br />
<br />
<i>Ожидаемый уровень знаний слушателей</i>: умение писать на Python, работа с asyncio не требуется но умение создавать веб-сайты на любом питоновском инструменте (Django, Flask и т.д.) очень пригодится.<br />
<br />
<i>Стоимость</i>: 1200 грн за одно занятие или 3600 при оплате за весь курс сразу. Подробности по оплате -- в конце текста.<br />
<div>
<br /></div>
<i>Когда</i>: 6, 13, 20, 27 ноября в 11.00 в <a href="https://www.google.com.ua/url?sa=t&rct=j&url=http%3A%2F%2Fprjctr.com.ua%2F&source=maps&cd=1&usg=AFQjCNGPmXmMwE-usXWpqm-d6l8ZynFk9Q&sig2=Iz6K-NWYPC8kag56t0MoCw&ved=1t%3A3443%2Cp%3A-Kf7V8nfM8KusAHE0aaoDQ">Прожекторе</a>.<br />
<br />
Для регистрации заполните <a href="https://docs.google.com/forms/d/e/1FAIpQLScyrP1WGW3lBqlyAuveS1QrxAiIovDXnbC5hEkW4rmkVswddA/viewform">форму</a>.</div>
<div>
<br /></div>
<div>
<h3>
asyncio в деталях</h3>
<div>
Четыре занятия по два часа.<br />
<br />
Курс расчитан на тех, кто уже что-то попробовал с asyncio/aiohttp но хочет понять всю внутреннюю кухню:<br />
<ul style="text-align: left;">
<li>Что такое event loop и как он работает</li>
<li>В чем отличие между Task и Future, когда что применять</li>
<li>Что такое транспорт и зачем он нужен</li>
<li>Как писать собственные библиотеки на базе aiohttp</li>
<li>Чем тесты для асинхронного кода отличаются от привычного подхода</li>
</ul>
<div>
Плюс, как обычно, описание подводных камней и выводы из собственного опыта</div>
</div>
<div>
<br /></div>
<div>
<i>Ожидаемый уровень знаний слушателей</i>: умение писать на Python, немного попробовали что-то сделать на asyncio но хочется знать больше.</div>
<div>
<br />
<i>Стоимость</i>: 1200 грн за одно занятие или 3600 при оплате за весь курс сразу. Подробности по оплате -- в конце текста.<br />
<br />
<i>Когда</i>: 6, 13, 20, 27 ноября в 13.00 в <a href="https://www.google.com.ua/url?sa=t&rct=j&url=http%3A%2F%2Fprjctr.com.ua%2F&source=maps&cd=1&usg=AFQjCNGPmXmMwE-usXWpqm-d6l8ZynFk9Q&sig2=Iz6K-NWYPC8kag56t0MoCw&ved=1t%3A3443%2Cp%3A-Kf7V8nfM8KusAHE0aaoDQ">Прожекторе</a>.<br />
<br />
Для регистрации заполните <a href="https://docs.google.com/forms/d/e/1FAIpQLScOKrjNSD3HRDEH4ZKnkH4Iusgz6b_QQ1Dv0x2LyyTbyvtBhg/viewform">форму</a>.</div>
</div>
<div>
<br /></div>
<a href="https://www.google.com.ua/maps/place/%D0%B4%D0%B8%D0%B7%D0%B0%D0%B9%D0%BD+%D1%81%D1%80%D0%B5%D0%B4%D0%B0+Projector/@50.4593175,30.5042645,14z/data=!4m13!1m7!3m6!1s0x40d4ce6b0318275d:0xce3a76d86e7838a2!2z0LTQuNC30LDQudC9INGB0YDQtdC00LAgUHJvamVjdG9y!3b1!8m2!3d50.4596756!4d30.5113981!3m4!1s0x40d4ce6b0318275d:0xce3a76d86e7838a2!8m2!3d50.4596756!4d30.5113981?hl=en">google map</a><div>
<h3>
Python: внутреннее устройство и оптимизация</h3>
<div>
Четыре занятия по два часа.</div>
<div>
<br />
95% борьбы за производительность программ сводятся к набору правильных инструментов и алгоритмов. Например, грамотная денормализация базы данных ускорит выдачу гораздо лучше чем даже мгновенная сортировка-фильтрация на стороне питоновского кода. А мгновенного ничего не бывает...<br />
Тем не менее иногда приходится ускорять уже оптимальный алгоритм.<br />
<br />
На занятиях мы:<br />
<br />
<ul style="text-align: left;">
<li>рассмотрим основные структуры CPython</li>
<li>научимся создавать свои функции и классы используя Python C Extesions</li>
<li>и, наконец, поймём что это утомительное занятие не требуется в 95% случаев благодаря наличию Cython</li>
</ul>
<div>
Управление памятью, потоки и GIL прилагаются.</div>
</div>
<div>
<br /></div>
<div>
<i>Ожидаемый уровень знаний слушателей</i>: хороший уровень владения Python (собственно программирования на самом Python практически не будет). Хотя бы остаточные знания C/C++ очень пригодятся.<br />
<br />
<i>Когда</i>: 6, 13, 20, 27 ноября в 16.00 в <a href="https://www.google.com.ua/url?sa=t&rct=j&url=http%3A%2F%2Fprjctr.com.ua%2F&source=maps&cd=1&usg=AFQjCNGPmXmMwE-usXWpqm-d6l8ZynFk9Q&sig2=Iz6K-NWYPC8kag56t0MoCw&ved=1t%3A3443%2Cp%3A-Kf7V8nfM8KusAHE0aaoDQ">Прожекторе</a>.<br />
<br />
<i>Стоимость</i>: 1200 грн за одно занятие или 3600 при оплате за весь курс сразу. Подробности по оплате -- в конце текста.<br />
<div>
<br /></div>
Для регистрации заполните <a href="https://docs.google.com/forms/d/e/1FAIpQLSex84AGT3btpQDyp2DTJn4uGqijLx9o100gu8iXLGJeKsqarg/viewform">форму</a>.<br />
<br />
<h3 style="text-align: left;">
Где<br /></h3>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7BehVg0wM68XthQTRrrvWuvhVjoY4WL6HaySkSis4loFg51Cd9uEcFfsYQiOzy8DpDs5wQn01eSxNdDADrHnakwN_U0hYxRKEN3Q0Rbhzi9v9V3C9kH5uU3V-6XVJtagdM7PnmP0JvIQL/s1600/map.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="536" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7BehVg0wM68XthQTRrrvWuvhVjoY4WL6HaySkSis4loFg51Cd9uEcFfsYQiOzy8DpDs5wQn01eSxNdDADrHnakwN_U0hYxRKEN3Q0Rbhzi9v9V3C9kH5uU3V-6XVJtagdM7PnmP0JvIQL/s640/map.png" width="640" /></a></div>
<div>
<br /></div>
<div>
Киев, Воздвиженская ул. 34А, <a href="http://prjctr.com.ua/">Дизайн среда "Projector"</a>.<br />Ближайшие станции метро: "Контрактовая площадь", "Почтовая площадь".<br /></div>
<div>
<br /></div>
<br />
<h3 style="text-align: left;">
Оплата</h3>
</div>
</div>
<div>
Я убедительно прошу оплачивать посредством банковского перевода на мой счет ФОП. Реквизиты вышлю тем, кто зарегистрируется.<br />
Сейчас практически все оформлены как частные предприниматели, так что выполнить перевод со своего ноутбука не составит труда.<br />
В случае полной невозможности так поступить -- готов рассмотреть альтернативы в индивидуальном порядке.<br />
<br />
Стоимость одного двухчасового занятия 1200 грн. При оплате сразу за весь курс слушатель платит 3600 экономит 1200 грн.<br />
<br />
Студентам скидка в 50% (потребуется выслать скан студенческого билета).<br />
<br />
Занятия разнесены во времени, можно посетить сразу все три курса (если выдержите, конечно).<br />
При оплате за два курса скидка 25%, за три курса сразу скидка 50% (действует только при оплате за весь курс, на вариант оплаты за занятие дисконты на посещение нескольких курсов одновременно не распространяются).</div>
</div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-53583855855781642332016-07-28T13:09:00.001+03:002016-07-28T13:09:04.953+03:00PyCon Hong Kong<div dir="ltr" style="text-align: left;" trbidi="on">
Организаторы продлили период Calls For Proposals.<br /><br />Никто не хочет поехать с докладом?<br /><br />Я там был в прошлом году, очень понравилось.<br /><br />К сожалению в этот раз вынужден пропустить -- даты пересекаются с другим мероприятием.<br />
<br />
Sammy Fung попросил распространить эту информацию среди коллег.<br /><br />Теперь вы, коллеги, в курсе :)<br /><br /><br />
<div class="uyb8Gf" jsan="7.uyb8Gf" jsinstance="0" jstcache="3386" style="background-color: white; color: #212121; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 13px; line-height: 19.5px;">
<div class="F3hlO" jsaction="jsl._" jsan="7.F3hlO,22.jsaction" jstcache="3388">
<div dir="ltr" style="unicode-bidi: isolate;">
Hi all,<br /><br />Calls for Proposals (CFP) of PyCon HK 2016 is now extended to 8/14.<br /><br /><div>
CFP Form:<br /><div>
<a data-saferedirecturl="https://www.google.com/url?q=http://goo.gl/forms/AXpduf24STjdFmrr2&source=gmail&ust=1469785901489000&usg=AFQjCNEHnpkH_9pMZcke9nZWPfStlIwd6A" href="http://goo.gl/forms/AXpduf24STjdFmrr2" style="color: #7e57c2; position: relative; z-index: 0;" target="_blank">http://goo.gl/forms/<wbr></wbr>AXpduf24STjdFmrr2</a></div>
</div>
PyCon HK 2016 will be hosted at Hong Kong Cyberport on 29-30 October. PyCon HK is a python community conference hosting in Hong Kong, which looks for overseas and local speakers.<br />
PyCon HK 2016 provides English track and Cantonese/Mandarin track.<br />
PyCon HK 2016 ticket sales on eventbrite: <a data-saferedirecturl="https://www.google.com/url?q=https://www.google.com/url?q%3Dhttp://pyconhk2016.eventbrite.com/?aff%253Dcfp%26sa%3DD%26ust%3D1468812538194000%26usg%3DAFQjCNFm0nbENWtyIXJ3eHKcEpEEylH_0g&source=gmail&ust=1469785901489000&usg=AFQjCNEeZBtCdiuhV26BJqSLqXOEf3h2eQ" href="https://www.google.com/url?q=http://pyconhk2016.eventbrite.com/?aff%3Dcfp&sa=D&ust=1468812538194000&usg=AFQjCNFm0nbENWtyIXJ3eHKcEpEEylH_0g" style="color: #7e57c2; position: relative; z-index: 0;" target="_blank">http://pyconhk2016.eventbrite.<wbr></wbr>com/?aff=cfp</a><br />PyCon HK 2016 website: <a data-saferedirecturl="https://www.google.com/url?q=https://www.google.com/url?q%3Dhttp://pycon.hk/2016%26sa%3DD%26ust%3D1468812538194000%26usg%3DAFQjCNFtqFm2jp6f6VUOkN9awMMO9NtOKw&source=gmail&ust=1469785901489000&usg=AFQjCNEM3uTAW5xU_FQUejsb6Hb5B5hoqw" href="https://www.google.com/url?q=http://pycon.hk/2016&sa=D&ust=1468812538194000&usg=AFQjCNFtqFm2jp6f6VUOkN9awMMO9NtOKw" style="color: #7e57c2; position: relative; z-index: 0;" target="_blank">http://pycon.hk/2016</a><br clear="all" /><div>
<br />--<br /><div>
<div dir="ltr" style="unicode-bidi: isolate;">
<div dir="ltr" style="unicode-bidi: isolate;">
Yours Sincerely,<br />Sammy Fung<br />Conference Chair, Hong Kong Open Source Conference.<br />President, Open Source Hong Kong.<br /><a data-saferedirecturl="https://www.google.com/url?q=http://opensource.hk&source=gmail&ust=1469785901489000&usg=AFQjCNFqPfvT2_8Q7ZsS9hQEwBNdxFTgvA" href="http://opensource.hk/" style="color: #7e57c2; position: relative; z-index: 0;" target="_blank">http://opensource.hk</a></div>
<div>
<br /></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-5211129865378322212016-03-05T02:13:00.000+02:002016-03-05T02:13:19.482+02:00Нужен совет по выбору платформы для постройки робота<div dir="ltr" style="text-align: left;" trbidi="on">
Я полгода занимался с очень умным мальчиком девяти лет, обучая его программированию.<br /><br />Начали с <a href="https://scratch.mit.edu/">scratch</a>, сейчас дитё уверенно выбирает мышкой нужные блоки и может сделать простенькую игру -- лети и настреляй монстров, при этом съешь плюшки чтобы жизнь не закончилась. <br /><br />Или платформер вроде Марио -- беги, прыгай и падай, кушай пряники и уворачиваясь от монстров.<br /><br />Иногда у него возникают затыки -- в scratch нет debug mode, но с моей помощью находит решение.<br /><br />В общем стало скучно, ничему по настоящему новому на scratch научиться уже невозможно. Дошли до scratch blocks если кто понимает -- но они не настоящие функции и предел достигнут.<br /><br />Хочу переключиться на железяки -- это мальчика приводит в восторг.<br />Я управляю роботом -- офигенно круто!<br /><br />Теперь собственно вопрос: что выбрать?<br /><br />Не хочу брать Лего -- он тупой и дорогой. Цена меня мало волнует но желаю получить вещь, которую можно будет долго развивать и улучшать.<br /><br />
Arduino? Может что-то посовременней, на лучшем железе?<br /><br />Плата с контактами ребенка впечатлит визуально но что с ней делать?<br /><br />
Я хочу получить готовый конструктор, из готорого можно будет сделать что-то ездящее и моргающее сразу. <br />С датчиками, которые можно будет использовать из коробки.<br />И эти сенсоры должны быть понятны ребенку: вариант обработки видео посредством opencv не подходит как вы понимаете.<br /><br />Управление через android планшет тоже желательно -- это дает +100 к привлекательности.<br /><br />Паять я не люблю но умею -- лучше если это будет именно конструктор.<br />
К которому можно будет докупать детальки и превратить его хоть в вертолёт -- но должно ездить и бибикать из коробки (управляясь смартфоном).<br /><br />Программирование.<br /><br />Мальчик освоил scratch. Это графический интерфейс, программа создается перетаскиванием блоков мышкой.<br /><br />Хотелось бы сохранить эту возможность на первом этапе.<br /><br />Потом, понятно, нужно переходить на текстовые файлы.<br />Если там будет Python -- это плюс. <br />Какой-то специфический язык -- не беда.<br />Есть возможность дописывать на С близко к железу -- плюс, я умею:)<br /><br />Итог:<br /><br />Мне нужно выбрать платформу. <br /><br />
Гибкую и расширяемую, достаточно мощную и с перспективой развития (если захочу чтобы робот мигал светодиодом на мою улыбку -- у него дожно хватить ресурса процессора на это).<br /><br />Открытую -- чтобы можно было докупать детальки и создавать новые поделки. Как в детском конструкторе с гайками и болтиками, только еще и сенсоры-моторчики. В перспективе компас и GPS. WiFi и всё такое.<br /><br />Я хочу купить сразу не только плату с процессором а что-то что может быть интересно мальчику. Коструктор с моторчиками, колесами и датчиками. Если это совместимо -- готов покупать по частям.<br /><br />Завершение.<br />
<br />Коллеги. Я полный чайник в робототехнике для детей.<br />
Надеюсь, вы мне подскажите годные варианты.<br />Цена особой роли не играет -- было бы удобно</div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-90792405492303517362016-03-02T00:28:00.000+02:002016-03-02T00:28:06.709+02:00Разница менталитетов и национальных деловых культур<div dir="ltr" style="text-align: left;" trbidi="on">
Увидел интересную статью:<br /><a href="http://bulochnikov.livejournal.com/2326301.html">Разница менталитетов и национальных деловых культур</a><br /><br />Кажется, автор попал в точку.<br /><br />По опыту работы могу сказать: да, так и есть. "Наши" заморочки отличаюстся от американских. Это нужно знать и учитывать.<br /><br />Читайте и удивляйтесь.</div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-54239968665030255342016-01-16T20:50:00.000+02:002016-01-16T20:50:01.947+02:00Слайды по py.test<div dir="ltr" style="text-align: left;" trbidi="on">
Сегодня был <a href="http://www.meetup.com/uapycon/events/227209068/">Kyiv.py #17</a>, как обычно было круто и интересно.<br /><br />С тезисами Алексея Поправки на тему "почему Фласк плохой" согласен.<br />
<br />
Он хорош для маленьких поделок, при росте сложности проекта и размера команды вылезает сплошная боль в седалище.<br />
<br />
Те, кто с этим несогласен -- просто привыкли :) и научились обходить самые неприятные моменты используя техники, не показанные в flask tutorial.<br />
<br />
Я рассказывал о py.test.<br />
<br />
Fixtures и разные трюки с pytest hooks.<br />
<br />
Презентация -- <a href="http://asvetlov.github.io/pytest-slides/">http://asvetlov.github.io/pytest-slides/</a><br />
<br /></div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-46479089379346162042015-12-04T16:08:00.000+02:002015-12-04T16:08:26.870+02:00Motor 0.5<div dir="ltr" style="text-align: left;" trbidi="on">
Мы строили-строили и наконец построили.<br />
<br />
<a href="http://motor.readthedocs.org/en/stable/">Motor 0.5</a> (асинхронный драйвер для MongoDB) доехал до релиза.<br />
<br />
Новая версия работает с asyncio.<br />
Всем рекомендую</div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-71043732716886190772015-11-12T14:26:00.003+02:002015-11-12T14:26:54.121+02:00uvloop -- альтернатива стандартному asyncio loop<div dir="ltr" style="text-align: left;" trbidi="on">
В последнее время Юра Селиванов (ага, тот самый автор <a href="https://www.python.org/dev/peps/pep-0492/">PEP-492</a> aka async/await и <a href="http://asvetlov.blogspot.com/2015/10/magicpython.html">MagicPython</a>) работал над тем чтобы сделать asyncio побыстрее.<br /><br />Он взял <a href="http://libuv.org/">libuv</a> и построил с её помощью <a href="https://github.com/1st1/uvloop">uvloop</a> -- asyncio совместимый event loop.<br /><br />Результаты замера производительности <a href="https://github.com/python/asyncio/issues/282#issuecomment-155957235">здесь</a>.<br /><br />Получается, что uvloop в <b>3.5</b> раза быстрее стандартного и в <b>1.25</b> раза обгоняет gevent.<br />Т.е. абсолютный победитель по скорости в мире Python.<br /><br />Библиотека пока еще не имеет стабильной версии, скоро всё будет.</div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-12727675850507018042015-11-10T08:51:00.002+02:002015-11-10T16:20:20.729+02:00Видео с PyCon RU 2015<div dir="ltr" style="text-align: left;" trbidi="on">
Я, конечно, тормоз и пишу спустя две недели -- но это лучше чем совсем промолчать.<br />
<br />
Ссылки на доклады <a href="http://habrahabr.ru/company/it_people/blog/269223/">на ХабраХабре</a>, там и мой есть тоже.<br />
<br />
Если интересно -- открываем и смотрим.<br />
<br />
P.S. Слайды -- <a href="https://docs.google.com/presentation/d/172YO4cGsQVjiKNbSIPaJXgPz2QNFYuN1pMVJ03JhOMY/edit?usp=sharing">здесь</a>.</div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-83051146224433773682015-11-01T20:35:00.001+02:002015-11-01T22:20:22.278+02:00Англицизмы в нашей речи<div dir="ltr" style="text-align: left;" trbidi="on">
Навеяно вопросом <a href="http://olt-z-s.livejournal.com/216000.html">Русские иностранные слова</a><br />
<br />
Я часто выступаю с лекциями на конференциях.<br />
<br />
По моему глубокому убеждению если доклад на русском -- нужно пытаться использовать русские термины (если они не слишком архаичные и понятны аудитории).<br />
<br />
Это не всегда возможно. Рабочий язык программиста всё же английский.<br />
Лично я предпочел бы ограничится родным, которым владею свободно -- но нет.<br />
<br />
Тем не менее "<i>конкурентый реквест шарится между тредами</i>" звучит гораздо хуже чем "<i>параллельный запрос разделяется между потоками</i>".<br />
Все поймут смысл в обоих вариантах, но первый режет слух.<br />
<br />
Иногда устоявшегося русского термина не существует (Александр Бельченко при переводе слова <b><i>commit</i></b> в статьях о <i>bazaar</i> использовал <b><i>фиксацию</i></b> что технически правильно но абсолютно непонятно).<br />
<br />
В таких случаях лучше оставлять английское слово как есть, <b><i>commit</i></b> но не <b><i>коммит/комит</i></b> (опять же вас лучше поймут, вариантов транслитерации много и часто они выглядят ужасно).<br />
<br />
Eсли используете английские термины при вербальной коммуникации (а без этого никуда) -- произносите их правильно.<br />
Т.е. так как оно должно звучать на английском/американском а не на ломаном <i>руссиан пингин инглиш</i>.<br />
<br />
Еще один момент: делать слайды на русском или на английском?<br />
<br />
Александр Соловьёв <a href="http://solovyov.net/blog/2013/language-you-use/">высказался</a> пару лет назад.<br />
<br />
Полностью его поддерживаю.<br />
<br />
Если доклад будет на русском -- и слайды должны быть на этом же языке, с минимумом английских слов.<br />
<br />
Например, лекцию по <a href="http://aiohttp.readthedocs.org/">aiohttp</a> для <a href="http://pycon.ru/2015/">PyCon RU 2015</a> я читал на русском -- и слайды были <a href="https://docs.google.com/presentation/d/172YO4cGsQVjiKNbSIPaJXgPz2QNFYuN1pMVJ03JhOMY/edit?usp=sharing">соответствующие</a>.<br />
На следующей неделе буду читать ту же лекцию для <a href="http://2015.pycon.hk/">PyCON Hong Kong 2015</a> -- и там слайды будут уже на <a href="https://docs.google.com/a/datarobot.com/presentation/d/1Oi9qsCXPA9nQ6A2Gb2RSqVbGzB5Q4K6GN0F4OdSAuvc/edit?usp=sharing">английском</a> по очевидной причине: я не владею китайским.<br />
<br />
Если нужно, вовсем не трудно перевести ваши слайды на английский, да? <br />
И наоборот -- англоязычные слайды перевести на язык, понятный аудитории.<br />
<br />
<br />
<br />
</div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-47959426049969115552015-10-25T03:40:00.000+02:002015-10-25T03:40:47.433+02:00Google group for aiohttp and aio-libs<div dir="ltr" style="text-align: left;" trbidi="on">
<a class="ot-anchor aaTEdf" dir="ltr" href="https://groups.google.com/forum/#!forum/aio-libs" jslog="10929; track:click" rel="nofollow" style="background-color: white; color: #427fed; cursor: pointer; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px; text-decoration: none; transition: color 0.218s;" target="_blank">https://groups.google.com/forum/#!forum/aio-libs</a><br style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;" /><br style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;" /><span style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;">Сделал гуглогруппу для вопросов по aiohttp и aiolibs (aiopg, aiomysql, aioredis, aiozmq, aiohttp_session, aiohttp_toolbar и еще десятка библиотек).</span><br style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;" /><br style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;" /><span style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;">В общем если вы стеснялись сделать issue в github -- вам сюда.</span><br style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;" /><br style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;" /><span style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;">Если писали мне лично на email -- тоже. </span><br style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;" /><br style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;" /><span style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;">Язык общения -- предпочтительно английский (так больше читателей поймут и смогут ответить).</span><br style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;" /><span style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;">Если с основным языком программиста затык -- пишите на русском.</span><br style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;" /><span style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;">Только, прошу, не смешивайте -- как и водку с пивом.</span><br style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;" /><span style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;">Если топик англоязычный -- комментарии должны быть на неродном.</span></div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-9535210162097576192015-10-21T22:09:00.000+03:002015-10-21T22:09:23.859+03:00Слайды с hdconf.by<div dir="ltr" style="text-align: left;" trbidi="on">
<a href="https://docs.google.com/presentation/d/1slEg8dQMgwA1f6WQ6vFL_d5peRKXucWDSp8dOl5Y048/edit?usp=sharing">ссылка</a><br />
<br />
Большое спасибо организаторам <a href="http://hdconf.by/">hdconf.by</a> -- конференция получилась замечательной!<br /><br />Интересные докладчики и любопытные слушатели -- что может быть лучше?</div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-27526587098667682672015-10-21T20:49:00.002+03:002015-12-15T11:48:22.509+02:00MagicPython -- Syntax Highlighter для SublimeText<div dir="ltr" style="text-align: left;" trbidi="on">
Мой приятель Юра Селиванов попросил написать рекламный пост о его новом проекте <a href="https://github.com/MagicStack/MagicPython">MagicPython</a>.<br />
<br />
Это syntax highlighter для Sublime Text и Atom, который поддерживает все новые языковые конструкции Python 3.5 (<i>async def</i> и <i>await</i> например) плюс type annotations, string formatting и регулярные выражения.<br />
<br />
Sublime поддерживает Python из коробки, но с Python 3 (а особенно с Python 3.5) у него проблемы. MagicPython понимает всё.<br />
Разметка шаблонов для форматирования строк и регулярок заслуживает отдельного упоминания -- выглядит прекрасно и заметно облегчает жизнь.<br />
<br />
Я сам использую ортодоксальный Emacs и переходить (пока) не собираюсь, но MagicPython работает исключительно хорошо и заслуживает доброго слова.<br />
<br />
К слову, Юра (<a href="https://twitter.com/1st1">https://twitter.com/1st1</a>) Python Core Developer и автор <a href="https://www.python.org/dev/peps/pep-0492/">PEP 492</a> aka async/await -- т.е. очень грамотный спец, который знает как делать качественные продукты.<br />
<br />
Пользуйтесь с удовольствием.<br />
<br />
P.S.<br />
<br />
О редакторе <a href="https://atom.io/">Atom</a> узнал только на этой неделе.<br />
На первый взгляд выглядит как Sublime но при этом Open Source.<br />
Уважаемые читатели, кто-нибудь его использует? Какие ваши впечатления?</div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-28884318503504888762015-05-13T01:01:00.002+03:002015-05-13T01:01:39.555+03:00Почему я не люблю конфигурацию в django-style<h2 id="_1">Введение</h2>
<p>Сегодня работал над добавлением в
<a href="http://aiohttp.readthedocs.org/en/v0.15.3/web.html">aiohttp.web</a>
свойства <code>scheme</code> для <em>request object</em>.</p>
<p>Идея простая: отвечать что <code>request.scheme</code> <code>"http"</code> для HTTP
запросов, иначе <code>"https"</code>.</p>
<p>У меня есть правило: перед началом погляди как другие уже справились с этой задачей.</p>
<p>У создателей популярных библиотек есть большой опыт по преодолению
неочевидных проблем, учиться у мастеров -- полезно.</p>
<p>Так вышло что сегодня я смотрел код Django.</p>
<p>И было в том коде примерно такое:</p>
<pre><code>@property
def scheme(self):
if settings.SECURE_PROXY_SSL_HEADER:
try:
header, value = settings.SECURE_PROXY_SSL_HEADER
except ValueError:
raise ImproperlyConfigured(
'The SECURE_PROXY_SSL_HEADER setting must be a tuple containing two values.'
)
if self.META.get(header, None) == value:
return 'https'
return 'http'
</code></pre>
<p>В целом очень хорошо: Django показала, как работать с <em>HTTP</em> и что
делать если сервер расположен за <em>HTTPS Reverse Proxy</em> (Nginx,
например).</p>
<p>В последнем случае я сконфигурирую Nginx чтобы он добавил несколько
полезных HTTP HEADERS для <em>HTTPS connection</em>:</p>
<pre><code> proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
</code></pre>
<p>По <code>X-Forwarded-Proto</code> я пойму что это был <em>HTTPS</em>.</p>
<p>В целом стандартная и всем (надеюсь) известная процедура.</p>
<p>У <em>aiohttp</em> свободы чуть больше: оно может понять что сокет, по
которому подключились напрямую, сам уже <em>SSL</em> -- но это пригодно
только если мы готовы выставить наш <em>aiohttp сервер</em> прямо в веб.</p>
<p>Куда чаще его прячут за <em>Nginx</em>, <em>HAProxy</em> или похожим <em>reverse proxy</em>
и там уже работают с сертификататами, проксируя обычный <em>HTTP connection</em>.</p>
<p>В общем всё прекрасно: <em>Nginx</em> выставит <em>X-Forwarded-Proto</em> <em>HTTP
HEADER</em> который будет или <code>"http"</code> или <code>"https"</code>.</p>
<p>Django глянет на <code>settings.SECURE_PROXY_SSL_HEADER</code> и если там
<code>("X-Forwarded-Proto", "https")</code> то <em>scheme</em> тоже будет <code>"https"</code>.</p>
<p>Очень грамотно сделано, мне нравится.</p>
<h2 id="_2">Проблема</h2>
<p>Так почему я этот пост написал?</p>
<p>А потому что <code>settings.SECURE_PROXY_SSL_HEADER</code> может быть чем угодно
-- строкой, числом или ещё какой непотребной константой.</p>
<p>Проверка выполняется на момент получения <code>request.scheme</code>.</p>
<p>Нам, питонщикам, плевать на производительность в данном случае -- на
самом деле <em>try/except</em> обходится дешево и никак не отразится на
работе сайта.</p>
<p>Беда в другом -- ошибка неправильной конфигурации выявится не на этапе
старта приложения а тогда, когда его выкатят в <em>production</em>.</p>
<p>У тестов будет свой правильный <code>settings.py</code>, а на <em>production server</em>
админ чуть-чуть ошибётся.</p>
<p>И это тоже не слишком большая проблема -- при ручном тестировании
команда QA, наверное, обнаружит ошибку очень быстро. Или на следующее
утро -- тут уж зависит от того как техроцесс построен.</p>
<p>А теперь представьте что вы ошиблись в другой настройке. Очень редко
используемой, но при этом важной.</p>
<h2 id="_3">Решение</h2>
<p>Проблему вроде бы можно выявить рано, перестроив процесс запуска
программы.</p>
<p>Для начала нужно отказаться от использования общего конфига в API.</p>
<p>Строить код библиотеки так, чтобы она никогда не лезла в <code>settings.py</code>
(это и Flask касается если что).</p>
<p>Пусть все нужные классы принимают конфигурационные параметры явно,
прямо в конструкторах.</p>
<p>Тогда можно быстро понять, что формат параметра не тот или <em>IP address</em> недоступен.</p>
<p>Разделение на этапы:</p>
<ul>
<li>чтение конфига, анализ его и подготовка приложения к работе</li>
<li>запуск и работа</li>
</ul>
<p>помогает избежать досадных недоразумений.</p>
<p>Плюс, к тому же, на <em>явном</em> этапе подготовки к старту можно позволить
себе довольно дорогостоящие проверки на корректное функционирование
системы (послать <em>PING</em> чтобы убедится что Redis живой, например).</p>Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-63099113849192542822015-03-24T14:56:00.003+02:002015-03-24T14:56:46.762+02:00Подкаст<div dir="ltr" style="text-align: left;" trbidi="on">
Неделю назад принимал участие в записи подкаста о Питоне вообще и asyncio в частности.<br />Прослушать результат нечеловеческих усилий можно <a href="http://sdcast.ksdaemon.ru/2015/03/sdcast-21/">здесь</a>.</div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-43410645138174307712015-02-14T21:35:00.001+02:002015-02-14T21:35:56.608+02:00vagga<div dir="ltr" style="text-align: left;" trbidi="on">
Паша Коломиец работает над проектом <a href="https://github.com/tailhook/vagga">vagga</a>.<br /><br />Коротко говоря, это система виртуализации на linux контейнерах, предназначенная для <b>разработки</b> программ.<br />
<br />
Выполняет роль, в чем-то похожую на virtualenv, но со своими отличиями и особенностями.<br /><br />Рекомендую прочесть свежую Пашину <a href="https://medium.com/@paulcolomiets/managing-dependencies-with-vagga-79181046db66">статью</a>, в которой он даёт обзор возможностей vagga и показывает преимущества над virtualenv.<br /><br /><b>P.S. </b>Я лично к проекту никакого отношения не имею, поэтому все вопросы, пожалуйста, задавайте сразу Паше.<br />
<br />
<br /></div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-72813811632908458312015-02-09T15:20:00.000+02:002015-02-09T15:20:14.448+02:00aiohttp с Belarus PyCon 2015 [видео]<div dir="ltr" style="text-align: left;" trbidi="on">
Видео моей лекции о aiohttp с PyCon Belarus 2015: <a href="http://www.youtube.com/watch?v=F6sa6G0lJCk">Линк</a></div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-68689006997029806102015-01-31T14:30:00.001+02:002015-01-31T14:30:44.091+02:00Слайды с доклада о aiohttp на PyCon Belarus 2015<div dir="ltr" style="text-align: left;" trbidi="on">
<a href="http://www.slideshare.net/andrew_svetlov/aiohttp">http://www.slideshare.net/andrew_svetlov/aiohttp</a></div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0tag:blogger.com,1999:blog-824928856526666223.post-65948929351435026012015-01-16T10:09:00.000+02:002015-01-16T10:09:02.586+02:00aiohttp 0.14<div dir="ltr" style="text-align: left;" trbidi="on">
Выпустил новую версию библиотеки.<br />
<br />
Из вкусного -- Web Sockets для aiohttp.web серверов, оптимизация скорости работы, множество мелких улучшений.<br /><br />Полный список изменений -- <a href="https://github.com/KeepSafe/aiohttp/releases/tag/v0.14.1">здесь</a>.</div>
Andrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.com0