<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-824928856526666223</id><updated>2025-06-26T09:56:43.089+03:00</updated><category term="python"/><category term="python3"/><category term="asyncio"/><category term="aiohttp"/><category term="import"/><category term="pycon"/><category term="обучение"/><category term="sprint"/><category term="threads"/><category term="kyiv.py"/><category term="aiozmq"/><category term="datetime"/><category term="gui"/><category term="networking"/><category term="benchmark"/><category term="file system"/><category term="float"/><category term="garbage collection"/><category term="gil"/><category term="hiring"/><category term="postgresql"/><category term="string formatting"/><category term="testing"/><category term="time zone"/><category term="tulip"/><category term="unicode"/><category term="web"/><category term="ликбез"/><category term="SQLAlchemy"/><category term="abc"/><category term="aiorest"/><category term="config"/><category term="containers"/><category term="coredev"/><category term="coverage"/><category term="decimal"/><category term="django"/><category term="example"/><category term="exception"/><category term="flask"/><category term="formatting"/><category term="fraction"/><category term="gunicorn"/><category term="highload"/><category term="int"/><category term="learning"/><category term="magic methods"/><category term="memory"/><category term="module"/><category term="mongodb"/><category term="nose"/><category term="pep8"/><category term="pip"/><category term="pytest"/><category term="regression tests"/><category term="report"/><category term="repr"/><category term="signal"/><category term="stack overflow"/><category term="threading"/><category term="time"/><category term="unittest"/><category term="питон"/><category term="юниттесты"/><title type='text'>Андрей Светлов</title><subtitle type='html'>Блог о Python</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>106</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-311345799324288623</id><published>2018-09-03T10:30:00.003+03:00</published><updated>2018-09-03T10:30:58.627+03:00</updated><title type='text'>Горшочек не вари</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Обновление для&amp;nbsp;&lt;a href=&quot;https://asvetlov.blogspot.com/2018/08/python-evo.html&quot; target=&quot;_blank&quot;&gt;Курсы по Python в офисе EVO&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Регистрация на программы&amp;nbsp;&lt;b style=&quot;background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;&quot;&gt;asyncio+aiohttp &lt;/b&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;&quot;&gt;и&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;&quot;&gt;&lt;b&gt;Advanced asyncio ЗАКРЫТА.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;&quot;&gt;Осталось только несколько мест на&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;&quot;&gt;Python optimization.&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;&quot;&gt;Спасибо за понимание&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/311345799324288623/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2018/09/blog-post.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/311345799324288623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/311345799324288623'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2018/09/blog-post.html' title='Горшочек не вари'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-7966136151115321935</id><published>2018-08-27T10:55:00.001+03:00</published><updated>2018-09-03T10:26:53.734+03:00</updated><title type='text'>Курсы по Python в офисе EVO</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Открыта регистрация на новую серию курсов по обучению Python.&lt;br /&gt;
&lt;br /&gt;
Новый формат: каждый курс занимает полные выходные (суббота и воскресенье), состоит из двух занятий по 6 часов.&lt;br /&gt;
Занимаемся 50 минут, 10 минут на перерыв с&amp;nbsp;чаем-кофе, и снова грызть гранит науки. Обед с пиццей прилагается.&lt;br /&gt;
Небольшие группы по 15 слушателей.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;asyncio+aiohttp&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;22-23 сентября, начало в 11.00&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Курс расчитан на &quot;простых программистов&quot;, желающих научиться применять асихронную связку asyncio/aiohttp для решения ежедневных рабочих задач.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Клиент:&lt;/i&gt;&lt;br /&gt;
Учимся делать простого паука для обхода сайтов и вытаскивания из них данных. &lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Минимально необходимый набор &lt;i&gt;asyncio API&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;aiohttp client API:&lt;/i&gt;&amp;nbsp;готовим правильно, не допуская стандартных ошибок.&lt;/li&gt;
&lt;li&gt;Вебсокеты и таймауты&lt;/li&gt;
&lt;li&gt;Одновременное выполнение HTTP запросов&lt;/li&gt;
&lt;/ul&gt;
Закончим примером, который делает какую-нибудь полезную работу.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Сервер:&lt;/i&gt;&lt;br /&gt;
Научимся создавать простые сервера на aiohttp.&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Выдача страниц, шаблонизатор и подключение баз данных.&lt;/li&gt;
&lt;li&gt;Загрузка HTML форм на сервер, работа с большими файлами.&lt;/li&gt;
&lt;li&gt;Авторизация и сессии пользователя.&lt;/li&gt;
&lt;li&gt;Серверные веб-сокеты&lt;/li&gt;
&lt;/ul&gt;
Плюс трюки и советы от автора.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Advanced asyncio&lt;/b&gt;&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;i&gt;29-30 сентября&lt;/i&gt;&lt;i&gt;, начало в 11.00&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Курс для тех, кто хочет понять asyncio до самых мелких деталей.&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Как работает event loop&lt;/li&gt;
&lt;li&gt;В чем сходство и отличие между Task и Future, когда что следует применять&lt;/li&gt;
&lt;li&gt;Что такое транспорт и зачем он нужен&lt;/li&gt;
&lt;li&gt;Как тестировать асинхронный код&lt;/li&gt;
&lt;li&gt;Как писать свои библиотеки на базе asyncio&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
Бонусом идет объяснение того, как должен выглядеть идиоматичный и правильный асинхронный код сегодня. Подход быстро меняется и совершенствуется. То, что выглядело классным и красивым два-три года назад -- сегодня несколько устарело.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Python optimization&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;i&gt;6-7 октября&lt;/i&gt;&lt;i&gt;, начало в 11.00&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Оптимизаровать нужно в первую очередь алгоритмы и запросы к базе данных.&lt;br /&gt;
Если этого мало -- вам сюда.&lt;/div&gt;
&lt;div&gt;
Курс влючает:&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Обзор инструментов для измерения производительности и нахождения узких мест&lt;/li&gt;
&lt;li&gt;Обучение cython как относительно простому языку для создания глубоко оптимизарованных Python модулей.&lt;/li&gt;
&lt;li&gt;Знакомство с Python C API в минимально необходимом объеме.&lt;/li&gt;
&lt;li&gt;Демонстрацию примеров из рабочего кода с улучшением скорости выполнения узких мест в 10 и более раз. С показыванием и рассказыванием: как мерять, что делать и куда смотреть при оптимизации&lt;/li&gt;
&lt;li&gt;Высший пилотаж: обучение созданию Python C Extensions на чистом C.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Стоимость&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
Каждый курс стоит 4500 грн.&lt;br /&gt;
При безналичной оплате скидка 5%.&lt;br /&gt;
При оплате сразу за два курса сразу скидка 5%. Три курса -- 10%.&lt;br /&gt;
Студентам (нужен скан студенческого билета на почту) -- 15%.&lt;br /&gt;
Скидки суммируются, т.е. студент который платит за три курса сразу по безналу получает 5+10+15 = 30%&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Регистрация&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Для регистрации пожалуйста заполните&amp;nbsp;&lt;a href=&quot;https://goo.gl/forms/8ClzJnKbXssHnRuC2&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;форму&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPD&lt;/b&gt;: регистрация на&amp;nbsp;&lt;b&gt;&lt;i&gt;asyncio+aiohttp&lt;/i&gt; и&amp;nbsp;&lt;/b&gt;&lt;b&gt;&lt;i&gt;Advanced asyncio&amp;nbsp;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;u&gt;закрыта&lt;/u&gt;.&lt;br /&gt;Остались места только на&amp;nbsp;&lt;/b&gt;&lt;b&gt;&lt;i&gt;Python optimization&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
В случае вопросов пишите на&amp;nbsp;&lt;a href=&quot;mailto:andrew.svetlov@gmail.com&quot; target=&quot;_blank&quot;&gt;email&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Количество мест ограничено.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Место проведения&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://www.google.com/maps/place/EVO/@50.4049241,30.6744296,15.68z/data=!4m5!3m4!1s0x40d4c4f328925f07:0xa47f647a2cdf1661!8m2!3d50.4049258!4d30.6798472&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Офис Evo&lt;/a&gt;, Харьковское шоссе 201/203 (м. Бориспольская).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwT7viZYHxwNa-3ctVV_Yxc7l7X9L5MgtL75nBz3EzYlhP8KZ13UD1q4Dxs8v_-qsS-NOUDYSwhDiTTitgA_7CJMhDOm81-ruBWWuyqeoNecbrYvtOEQ2W9oDVLaxRGbh0UJtXKhLbhz7N/s1600/Screenshot+from+2018-08-27+10-32-10.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1004&quot; data-original-width=&quot;1600&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwT7viZYHxwNa-3ctVV_Yxc7l7X9L5MgtL75nBz3EzYlhP8KZ13UD1q4Dxs8v_-qsS-NOUDYSwhDiTTitgA_7CJMhDOm81-ruBWWuyqeoNecbrYvtOEQ2W9oDVLaxRGbh0UJtXKhLbhz7N/s640/Screenshot+from+2018-08-27+10-32-10.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Видео-записи и онлайн-вещания нет.&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/7966136151115321935/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2018/08/python-evo.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/7966136151115321935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/7966136151115321935'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2018/08/python-evo.html' title='Курсы по Python в офисе EVO'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwT7viZYHxwNa-3ctVV_Yxc7l7X9L5MgtL75nBz3EzYlhP8KZ13UD1q4Dxs8v_-qsS-NOUDYSwhDiTTitgA_7CJMhDOm81-ruBWWuyqeoNecbrYvtOEQ2W9oDVLaxRGbh0UJtXKhLbhz7N/s72-c/Screenshot+from+2018-08-27+10-32-10.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-6472874707363846428</id><published>2017-09-18T17:17:00.002+03:00</published><updated>2017-09-18T17:17:46.461+03:00</updated><title type='text'>Вакансия программиста в ocean.io</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Компании ocean.io, где я работаю, требуется Senior Software developer.&lt;br /&gt;Киев, full time.&lt;br /&gt;&lt;br /&gt;Плюшки -- код на Python 3.6, asyncio и aiohttp.&lt;br /&gt;&lt;br /&gt;Остальные подробности расскажу при непубличном общении.&lt;br /&gt;&lt;br /&gt;Если кому интересно -- пишите на andrew.svetlov@gmail.com&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/6472874707363846428/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2017/09/oceanio.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/6472874707363846428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/6472874707363846428'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2017/09/oceanio.html' title='Вакансия программиста в ocean.io'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-1032953721821371604</id><published>2017-06-30T02:48:00.000+03:00</published><updated>2017-06-30T02:48:13.976+03:00</updated><title type='text'>Куда поступать будущему программисту?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Прошу совета.&lt;br /&gt;&lt;br /&gt;Мой крестник поступает в институт.&lt;br /&gt;Это почти наверняка КПИ (который Киевский Политех).&lt;br /&gt;&lt;br /&gt;Он хочет стать программистом, что я очень приветствую.&lt;br /&gt;&lt;br /&gt;Вопрос в том какую кафедру и специальность выбрать.&lt;br /&gt;&lt;br /&gt;При этом есть такое наблюдение: программистов сейчас как блох (не в обиду будет всем нам сказано и мне в том числе) а спецы по Data Science становятся всё более востребованными.&lt;br /&gt;&lt;br /&gt;Так куда пойти?&lt;br /&gt;&lt;br /&gt;И может кто посоветут какой контакт в КПИ чтобы я с преподавателями пообщался да порасспрашивал их что и как?&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/1032953721821371604/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2017/06/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/1032953721821371604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/1032953721821371604'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2017/06/blog-post.html' title='Куда поступать будущему программисту?'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-6150950666921796409</id><published>2016-12-13T15:52:00.000+02:00</published><updated>2016-12-13T15:52:53.168+02:00</updated><title type='text'>Пельмени</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Все знают что такое спагетти-код.&lt;br /&gt;&lt;br /&gt;Термин стал очень популярным. &quot;Макароны&quot; -- признак говнокода, да?&lt;br /&gt;&lt;br /&gt;Сегодня Google меня удивил подкинув ссылку на &lt;a href=&quot;https://en.wikipedia.org/wiki/Spaghetti_code#Ravioli_code&quot;&gt;равиоли-код&lt;/a&gt;.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span style=&quot;background-color: white; color: #252525; font-family: sans-serif; font-size: 14px;&quot;&gt;Ravioli code is a type of computer program structure, characterized by a number of very small and (ideally)&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Loose_coupling&quot; style=&quot;background: none rgb(255, 255, 255); color: #0b0080; font-family: sans-serif; font-size: 14px; text-decoration: none;&quot; title=&quot;Loose coupling&quot;&gt;loosely coupled&lt;/a&gt;&lt;span style=&quot;background-color: white; color: #252525; font-family: sans-serif; font-size: 14px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;https://en.wikipedia.org/wiki/Software_component&quot; style=&quot;background: none rgb(255, 255, 255); color: #0b0080; font-family: sans-serif; font-size: 14px; text-decoration: none;&quot; title=&quot;Software component&quot;&gt;software components&lt;/a&gt;&lt;span style=&quot;background-color: white; color: #252525; font-family: sans-serif; font-size: 14px;&quot;&gt;.&lt;/span&gt;&lt;/blockquote&gt;
Очень хорошее определение. Единственная проблема -- название немного не родное.&lt;br /&gt;
&lt;br /&gt;
Равиоли -- это те же крошечные пельмешки, но слово &quot;пельмени&quot; мне ближе.&lt;br /&gt;
&lt;br /&gt;
Предлагаю такую стратегию: &lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Пишем пельмени-код.&lt;/li&gt;
&lt;li&gt;Если получается перейти на уровень равиоли -- у нас всё отлично&lt;/li&gt;
&lt;li&gt;Выходят манты или хинкали -- повод уделить пристальное внимание но в целом тоже ничего&lt;/li&gt;
&lt;li&gt;Если творение невозможно представить в виде пельменных собратьев и оно по внутреннему ощущению больше похоже как минимум на тульский пряник а то и на полноценный каравай -- нужно бить тревогу.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/6150950666921796409/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2016/12/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/6150950666921796409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/6150950666921796409'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2016/12/blog-post.html' title='Пельмени'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-7330719767405002128</id><published>2016-11-30T18:51:00.000+02:00</published><updated>2016-12-01T16:00:17.317+02:00</updated><title type='text'>Цены снизились на семинар по async/aiohttp</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Как вы знаете в декабре я провожу &lt;a href=&quot;http://asvetlov.blogspot.com/2016/11/asyncio-aiohttp-training.html&quot;&gt;семинар по aiohttp/asyncio в Москве:&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Positive Technologies, которая взяла на себя всю организацию меропрития, изыскала возможность несколько снизить накладные расходы. Как следствие цена тоже понизилась.&lt;br /&gt;
&lt;br /&gt;
В итоге сумма составляет:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Регулярный платеж&amp;nbsp;&lt;i&gt;12,000 руб.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;С&lt;/i&gt;туденческий пакет (требуется скан студенческого билета) -- 7&lt;i&gt;,000 руб.&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Те, кто уже зарегистрировался -- не переживайте.&lt;br /&gt;
Скидка распространяется на всех.&lt;br /&gt;
Кому не пришло письмо с подтверждением -- извините.&lt;br /&gt;
До этого объявления с окончательной ценой мероприятия не хотелось переходить к финансовым вопросам.&lt;br /&gt;
&lt;br /&gt;
Как записаться?&lt;br /&gt;
Заполните &lt;a href=&quot;https://docs.google.com/forms/d/e/1FAIpQLSc7yDcdR3EH294JbFphjRKWlVrdjb3d1xtgLN68IFPC7bdUmw/viewform&quot;&gt;форму&lt;/a&gt;.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/7330719767405002128/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2016/11/asyncaiohttp.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/7330719767405002128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/7330719767405002128'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2016/11/asyncaiohttp.html' title='Цены снизились на семинар по async/aiohttp'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-7977385748470115426</id><published>2016-11-18T21:27:00.000+02:00</published><updated>2016-11-30T18:51:46.427+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aiohttp"/><category scheme="http://www.blogger.com/atom/ns#" term="asyncio"/><category scheme="http://www.blogger.com/atom/ns#" term="обучение"/><title type='text'>Семинар по async/aiohttp</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Благодаря неоценимой организаторской помощи компании &lt;a href=&quot;https://www.ptsecurity.com/ww-en/&quot;&gt;Positive Technologies&lt;/a&gt; я проведу семинар по asyncio/aiohttp в Москве 17-18 декабря (суббота-воскресенье).&lt;br /&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Что в составе семинара?&lt;/h4&gt;
&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Базовые знания об asyncio. Из всего огромного набора функций для начала работы нужно знать всего десяток. На них и сосредоточимся.&lt;/li&gt;
&lt;li&gt;Получение данных по протоколу HTTP с помощью aiohttp (client API). Всё, что нужно знать для составления собственного бота-паука.&lt;/li&gt;
&lt;li&gt;Простейший web server на aiohttp. Советы по организации кода, работа с базами данных, шаблонизаторами, сессией пользователя и прочее.&lt;/li&gt;
&lt;li&gt;Продвинутые технологии в aiohttp: сигналы, middlewares, вложенные приложения.&lt;/li&gt;
&lt;li&gt;Возвращаемся к asyncio: Future object и streaming API.&lt;/li&gt;
&lt;li&gt;asyncio транспорт и протокол как низкоуровневые конструкторские блоки.&lt;/li&gt;
&lt;li&gt;Описание работы asyncio loop изнутри.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Об авторе (т.е. обо мне)&lt;/h4&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;В профессии с 1999 года&lt;/li&gt;
&lt;li&gt;Python Core Developer с 2012&lt;/li&gt;
&lt;li&gt;aiohttp maintainer&lt;/li&gt;
&lt;li&gt;asyncio соавтор&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Как это всё выглядит?&lt;/h4&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Два полных выходных дня (суббота и воскресенье), с обедом и парой кофе-брейков в течении каждого дня.&lt;/li&gt;
&lt;li&gt;Небольшая аудитория в несколько дестков человек.&lt;/li&gt;
&lt;li&gt;Строгого расписания и бесконечного потока слайдов нет. Есть примерный план но я смогу легко его поменять на лету ориентирусь на понимание темы слушателями.&lt;/li&gt;
&lt;li&gt;Свободный формат общения. Т.е. я рассказываю и показываю, пользуясь проектором, редактором для кода, браузером, доской с маркерами. В любой момент можно задать вопрос если что-то непонятно -- буду объяснять и показывать пока не станет окончательно ясно.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
На какую аудиторию расчитан семинар?&lt;/h4&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;На энтузиастов, жадных к новым технологиям.&lt;/li&gt;
&lt;li&gt;Знание asyncio не обязательно, но слушатели должны уметь программировать на Python и создавать web сайты с использованием любого framework: Django, Flask, Tornado и т.д.&lt;/li&gt;
&lt;li&gt;Если уже есть опыт работы с asyncio/aiohttp но хочется узнать тему лучше и глубже -- вам тоже будет полезно.&lt;/li&gt;
&lt;li&gt;В конце концов я -- соавтор обоих библиотек. Поверьте, я знаю как они устроены и как их использовать правильно -- и на семинаре буду делиться этими знаниями.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Время и место проведения&lt;/h4&gt;
&lt;div&gt;
Семинар проходит 17-18 декабря. Суббота-воскресенье, два полных дня.&lt;br /&gt;
Обеды и кофе-брейки прилагаются.&lt;br /&gt;
&lt;br /&gt;
Начало в 9.30, окончание -- 17.30&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Место проведения -- офис &lt;a href=&quot;https://www.ptsecurity.com/ww-en/&quot;&gt;Positive Technologies&lt;/a&gt;, Москва, Преображенская площадь дом 8 (станция метро &quot;Преображенская площадь).&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;450&quot; src=&quot;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&quot; style=&quot;border: 0;&quot; width=&quot;600&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Стоимость и оплата&lt;/h4&gt;
&lt;div&gt;
Стоимость &lt;i&gt;12,000 руб, &lt;/i&gt;студентам -- 7&lt;i&gt;,000 руб.&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Для регистрации заполните, пожалуйста, &lt;a href=&quot;https://docs.google.com/forms/d/e/1FAIpQLSc7yDcdR3EH294JbFphjRKWlVrdjb3d1xtgLN68IFPC7bdUmw/viewform&quot;&gt;форму&lt;/a&gt;.&lt;br /&gt;
После регистрации вы получите письмо с детальной информацией об оплате.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/7977385748470115426/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2016/11/asyncio-aiohttp-training.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/7977385748470115426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/7977385748470115426'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2016/11/asyncio-aiohttp-training.html' title='Семинар по async/aiohttp'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-2362065673739383404</id><published>2016-10-11T18:20:00.000+03:00</published><updated>2016-10-12T02:31:06.238+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ликбез"/><category scheme="http://www.blogger.com/atom/ns#" term="обучение"/><title type='text'>Курсы по Python</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
После долгого перерыва я решил возобновить проведение курсов по Python.&lt;br /&gt;
&lt;br /&gt;
Они состоятся в ноябре 2016, каждое воскресенье месяца.&lt;br /&gt;
&lt;br /&gt;
Программ будет три:&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
aiohttp для начинающих&lt;/h3&gt;
&lt;div&gt;
Четыре занятия по два часа.&lt;br /&gt;
&lt;br /&gt;
Мы научимся делать сайты на aiohttp.&lt;/div&gt;
&lt;div&gt;
Простейшие странички, формы, веб-сокеты и проч.&lt;br /&gt;
Подключим базы данных, авторизацию, шаблонизатор.&lt;br /&gt;
Немного коснемся asyncio в том объёме, который предназначен для &quot;простого программиста&quot;.&lt;br /&gt;
В общем всё, что нужно знать чтобы уверенно работать с aiohttp и совместимыми библиотеками.&lt;br /&gt;
&lt;br /&gt;
Плюс советы от знатного собаковода на по правильной организации кода, отладке и разным хитростям.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Ожидаемый уровень знаний слушателей&lt;/i&gt;: умение писать на Python, работа с asyncio не требуется но умение создавать веб-сайты на любом питоновском инструменте (Django, Flask и т.д.) очень пригодится.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Стоимость&lt;/i&gt;: 1200 грн за одно занятие или 3600 при оплате за весь курс сразу. Подробности по оплате -- в конце текста.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;i&gt;Когда&lt;/i&gt;: 6, 13, 20, 27 ноября в 11.00&amp;nbsp;в&amp;nbsp;&lt;a href=&quot;https://www.google.com.ua/url?sa=t&amp;amp;rct=j&amp;amp;url=http%3A%2F%2Fprjctr.com.ua%2F&amp;amp;source=maps&amp;amp;cd=1&amp;amp;usg=AFQjCNGPmXmMwE-usXWpqm-d6l8ZynFk9Q&amp;amp;sig2=Iz6K-NWYPC8kag56t0MoCw&amp;amp;ved=1t%3A3443%2Cp%3A-Kf7V8nfM8KusAHE0aaoDQ&quot;&gt;Прожекторе&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Для регистрации заполните&amp;nbsp;&lt;a href=&quot;https://docs.google.com/forms/d/e/1FAIpQLScyrP1WGW3lBqlyAuveS1QrxAiIovDXnbC5hEkW4rmkVswddA/viewform&quot;&gt;форму&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h3&gt;
asyncio в деталях&lt;/h3&gt;
&lt;div&gt;
Четыре занятия по два часа.&lt;br /&gt;
&lt;br /&gt;
Курс расчитан на тех, кто уже что-то попробовал с asyncio/aiohttp но хочет понять всю внутреннюю кухню:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Что такое event loop и как он работает&lt;/li&gt;
&lt;li&gt;В чем отличие между Task и Future, когда что применять&lt;/li&gt;
&lt;li&gt;Что такое транспорт и зачем он нужен&lt;/li&gt;
&lt;li&gt;Как писать собственные библиотеки на базе aiohttp&lt;/li&gt;
&lt;li&gt;Чем тесты для асинхронного кода отличаются от привычного подхода&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Плюс, как обычно, описание подводных камней и выводы из собственного опыта&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;Ожидаемый уровень знаний слушателей&lt;/i&gt;: умение писать на Python, немного попробовали что-то сделать на asyncio но хочется знать больше.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;i&gt;Стоимость&lt;/i&gt;: 1200 грн за одно занятие или 3600 при оплате за весь курс сразу. Подробности по оплате -- в конце текста.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Когда&lt;/i&gt;:&amp;nbsp;6, 13, 20, 27 ноября в 13.00 в &lt;a href=&quot;https://www.google.com.ua/url?sa=t&amp;amp;rct=j&amp;amp;url=http%3A%2F%2Fprjctr.com.ua%2F&amp;amp;source=maps&amp;amp;cd=1&amp;amp;usg=AFQjCNGPmXmMwE-usXWpqm-d6l8ZynFk9Q&amp;amp;sig2=Iz6K-NWYPC8kag56t0MoCw&amp;amp;ved=1t%3A3443%2Cp%3A-Kf7V8nfM8KusAHE0aaoDQ&quot;&gt;Прожекторе&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Для регистрации заполните&amp;nbsp;&lt;a href=&quot;https://docs.google.com/forms/d/e/1FAIpQLScOKrjNSD3HRDEH4ZKnkH4Iusgz6b_QQ1Dv0x2LyyTbyvtBhg/viewform&quot;&gt;форму&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;a href=&quot;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&quot;&gt;google map&lt;/a&gt;&lt;div&gt;
&lt;h3&gt;
Python: внутреннее устройство и оптимизация&lt;/h3&gt;
&lt;div&gt;
Четыре занятия по два часа.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
95% борьбы за производительность программ сводятся к набору правильных инструментов и алгоритмов. Например, грамотная денормализация базы данных ускорит выдачу гораздо лучше чем даже мгновенная сортировка-фильтрация на стороне питоновского кода. А мгновенного ничего не бывает...&lt;br /&gt;
Тем не менее иногда приходится ускорять уже оптимальный алгоритм.&lt;br /&gt;
&lt;br /&gt;
На занятиях мы:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;рассмотрим основные структуры CPython&lt;/li&gt;
&lt;li&gt;научимся создавать свои функции и классы используя Python C Extesions&lt;/li&gt;
&lt;li&gt;и, наконец, поймём что это утомительное занятие не требуется в 95% случаев благодаря наличию Cython&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Управление памятью, потоки и GIL прилагаются.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;Ожидаемый уровень знаний слушателей&lt;/i&gt;: хороший уровень владения Python (собственно программирования на самом Python практически не будет). Хотя бы остаточные знания C/C++ очень пригодятся.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Когда&lt;/i&gt;:&amp;nbsp;6, 13, 20, 27 ноября в 16.00&amp;nbsp;в&amp;nbsp;&lt;a href=&quot;https://www.google.com.ua/url?sa=t&amp;amp;rct=j&amp;amp;url=http%3A%2F%2Fprjctr.com.ua%2F&amp;amp;source=maps&amp;amp;cd=1&amp;amp;usg=AFQjCNGPmXmMwE-usXWpqm-d6l8ZynFk9Q&amp;amp;sig2=Iz6K-NWYPC8kag56t0MoCw&amp;amp;ved=1t%3A3443%2Cp%3A-Kf7V8nfM8KusAHE0aaoDQ&quot;&gt;Прожекторе&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Стоимость&lt;/i&gt;: 1200 грн за одно занятие или 3600 при оплате за весь курс сразу. Подробности по оплате -- в конце текста.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
Для регистрации заполните&amp;nbsp;&lt;a href=&quot;https://docs.google.com/forms/d/e/1FAIpQLSex84AGT3btpQDyp2DTJn4uGqijLx9o100gu8iXLGJeKsqarg/viewform&quot;&gt;форму&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Где&lt;br /&gt;&lt;/h3&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7BehVg0wM68XthQTRrrvWuvhVjoY4WL6HaySkSis4loFg51Cd9uEcFfsYQiOzy8DpDs5wQn01eSxNdDADrHnakwN_U0hYxRKEN3Q0Rbhzi9v9V3C9kH5uU3V-6XVJtagdM7PnmP0JvIQL/s1600/map.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;536&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7BehVg0wM68XthQTRrrvWuvhVjoY4WL6HaySkSis4loFg51Cd9uEcFfsYQiOzy8DpDs5wQn01eSxNdDADrHnakwN_U0hYxRKEN3Q0Rbhzi9v9V3C9kH5uU3V-6XVJtagdM7PnmP0JvIQL/s640/map.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Киев, Воздвиженская ул. 34А,&amp;nbsp;&lt;a href=&quot;http://prjctr.com.ua/&quot;&gt;Дизайн среда &quot;Projector&quot;&lt;/a&gt;.&lt;br /&gt;Ближайшие станции метро: &quot;Контрактовая площадь&quot;, &quot;Почтовая площадь&quot;.&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Оплата&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
Я убедительно прошу оплачивать посредством банковского перевода на мой счет ФОП. Реквизиты вышлю тем, кто зарегистрируется.&lt;br /&gt;
Сейчас практически все оформлены как частные предприниматели, так что выполнить перевод со своего ноутбука не составит труда.&lt;br /&gt;
В случае полной невозможности так поступить -- готов рассмотреть альтернативы в индивидуальном порядке.&lt;br /&gt;
&lt;br /&gt;
Стоимость одного двухчасового занятия 1200 грн. При оплате сразу за весь курс слушатель платит 3600 экономит 1200 грн.&lt;br /&gt;
&lt;br /&gt;
Студентам скидка в 50% (потребуется выслать скан студенческого билета).&lt;br /&gt;
&lt;br /&gt;
Занятия разнесены во времени, можно посетить сразу все три курса (если выдержите, конечно).&lt;br /&gt;
При оплате за два курса скидка 25%, за три курса сразу скидка 50% (действует только при оплате за весь курс, на вариант оплаты за занятие дисконты на посещение нескольких курсов одновременно не распространяются).&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/2362065673739383404/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2016/10/python-training.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/2362065673739383404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/2362065673739383404'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2016/10/python-training.html' title='Курсы по Python'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7BehVg0wM68XthQTRrrvWuvhVjoY4WL6HaySkSis4loFg51Cd9uEcFfsYQiOzy8DpDs5wQn01eSxNdDADrHnakwN_U0hYxRKEN3Q0Rbhzi9v9V3C9kH5uU3V-6XVJtagdM7PnmP0JvIQL/s72-c/map.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-5358385585578164233</id><published>2016-07-28T13:09:00.001+03:00</published><updated>2016-07-28T13:09:04.953+03:00</updated><title type='text'>PyCon Hong Kong</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Организаторы продлили период Calls For Proposals.&lt;br /&gt;&lt;br /&gt;Никто не хочет поехать с докладом?&lt;br /&gt;&lt;br /&gt;Я там был в прошлом году, очень понравилось.&lt;br /&gt;&lt;br /&gt;К сожалению в этот раз вынужден пропустить -- даты пересекаются с другим мероприятием.&lt;br /&gt;
&lt;br /&gt;
Sammy Fung попросил распространить эту информацию среди коллег.&lt;br /&gt;&lt;br /&gt;Теперь вы, коллеги, в курсе :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div class=&quot;uyb8Gf&quot; jsan=&quot;7.uyb8Gf&quot; jsinstance=&quot;0&quot; jstcache=&quot;3386&quot; style=&quot;background-color: white; color: #212121; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 19.5px;&quot;&gt;
&lt;div class=&quot;F3hlO&quot; jsaction=&quot;jsl._&quot; jsan=&quot;7.F3hlO,22.jsaction&quot; jstcache=&quot;3388&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;unicode-bidi: isolate;&quot;&gt;
Hi all,&lt;br /&gt;&lt;br /&gt;Calls for Proposals (CFP) of PyCon HK 2016 is now extended to 8/14.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;
CFP Form:&lt;br /&gt;&lt;div&gt;
&lt;a data-saferedirecturl=&quot;https://www.google.com/url?q=http://goo.gl/forms/AXpduf24STjdFmrr2&amp;amp;source=gmail&amp;amp;ust=1469785901489000&amp;amp;usg=AFQjCNEHnpkH_9pMZcke9nZWPfStlIwd6A&quot; href=&quot;http://goo.gl/forms/AXpduf24STjdFmrr2&quot; style=&quot;color: #7e57c2; position: relative; z-index: 0;&quot; target=&quot;_blank&quot;&gt;http://goo.gl/forms/&lt;wbr&gt;&lt;/wbr&gt;AXpduf24STjdFmrr2&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
PyCon&amp;nbsp;HK 2016 will be hosted at Hong Kong Cyberport on 29-30 October.&amp;nbsp;PyCon&amp;nbsp;HK is a python community conference hosting in Hong Kong, which looks for overseas and local speakers.&lt;br /&gt;
PyCon&amp;nbsp;HK 2016 provides English track and Cantonese/Mandarin track.&lt;br /&gt;
PyCon&amp;nbsp;HK 2016 ticket sales on eventbrite:&amp;nbsp;&lt;a data-saferedirecturl=&quot;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&amp;amp;source=gmail&amp;amp;ust=1469785901489000&amp;amp;usg=AFQjCNEeZBtCdiuhV26BJqSLqXOEf3h2eQ&quot; href=&quot;https://www.google.com/url?q=http://pyconhk2016.eventbrite.com/?aff%3Dcfp&amp;amp;sa=D&amp;amp;ust=1468812538194000&amp;amp;usg=AFQjCNFm0nbENWtyIXJ3eHKcEpEEylH_0g&quot; style=&quot;color: #7e57c2; position: relative; z-index: 0;&quot; target=&quot;_blank&quot;&gt;http://pyconhk2016.eventbrite.&lt;wbr&gt;&lt;/wbr&gt;com/?aff=cfp&lt;/a&gt;&lt;br /&gt;PyCon&amp;nbsp;HK 2016 website:&amp;nbsp;&lt;a data-saferedirecturl=&quot;https://www.google.com/url?q=https://www.google.com/url?q%3Dhttp://pycon.hk/2016%26sa%3DD%26ust%3D1468812538194000%26usg%3DAFQjCNFtqFm2jp6f6VUOkN9awMMO9NtOKw&amp;amp;source=gmail&amp;amp;ust=1469785901489000&amp;amp;usg=AFQjCNEM3uTAW5xU_FQUejsb6Hb5B5hoqw&quot; href=&quot;https://www.google.com/url?q=http://pycon.hk/2016&amp;amp;sa=D&amp;amp;ust=1468812538194000&amp;amp;usg=AFQjCNFtqFm2jp6f6VUOkN9awMMO9NtOKw&quot; style=&quot;color: #7e57c2; position: relative; z-index: 0;&quot; target=&quot;_blank&quot;&gt;http://pycon.hk/2016&lt;/a&gt;&lt;br clear=&quot;all&quot; /&gt;&lt;div&gt;
&lt;br /&gt;--&lt;br /&gt;&lt;div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;unicode-bidi: isolate;&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;unicode-bidi: isolate;&quot;&gt;
Yours Sincerely,&lt;br /&gt;Sammy Fung&lt;br /&gt;Conference Chair, Hong Kong Open Source Conference.&lt;br /&gt;President, Open Source Hong Kong.&lt;br /&gt;&lt;a data-saferedirecturl=&quot;https://www.google.com/url?q=http://opensource.hk&amp;amp;source=gmail&amp;amp;ust=1469785901489000&amp;amp;usg=AFQjCNFqPfvT2_8Q7ZsS9hQEwBNdxFTgvA&quot; href=&quot;http://opensource.hk/&quot; style=&quot;color: #7e57c2; position: relative; z-index: 0;&quot; target=&quot;_blank&quot;&gt;http://opensource.hk&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/5358385585578164233/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2016/07/pycon-hong-kong.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/5358385585578164233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/5358385585578164233'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2016/07/pycon-hong-kong.html' title='PyCon Hong Kong'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-521112986537832221</id><published>2016-03-05T02:13:00.000+02:00</published><updated>2016-03-05T02:13:19.482+02:00</updated><title type='text'>Нужен совет по выбору платформы для постройки робота</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Я полгода занимался с очень умным мальчиком девяти лет, обучая его программированию.&lt;br /&gt;&lt;br /&gt;Начали с&amp;nbsp;&lt;a href=&quot;https://scratch.mit.edu/&quot;&gt;scratch&lt;/a&gt;, сейчас дитё уверенно выбирает мышкой нужные блоки и может сделать простенькую игру -- лети и настреляй монстров, при этом съешь плюшки чтобы жизнь не закончилась. &lt;br /&gt;&lt;br /&gt;Или платформер вроде Марио -- беги, прыгай и падай, кушай пряники и уворачиваясь от монстров.&lt;br /&gt;&lt;br /&gt;Иногда у него возникают затыки -- в scratch нет debug mode, но с моей помощью находит решение.&lt;br /&gt;&lt;br /&gt;В общем стало скучно, ничему по настоящему новому на scratch научиться уже невозможно. Дошли до scratch blocks если кто понимает -- но они не настоящие функции и предел достигнут.&lt;br /&gt;&lt;br /&gt;Хочу переключиться на железяки -- это мальчика приводит в восторг.&lt;br /&gt;Я управляю роботом -- офигенно круто!&lt;br /&gt;&lt;br /&gt;Теперь собственно вопрос: что выбрать?&lt;br /&gt;&lt;br /&gt;Не хочу брать Лего -- он тупой и дорогой. Цена меня мало волнует но желаю получить вещь, которую можно будет долго развивать и улучшать.&lt;br /&gt;&lt;br /&gt;
Arduino? Может что-то посовременней, на лучшем железе?&lt;br /&gt;&lt;br /&gt;Плата с контактами ребенка впечатлит визуально но что с ней делать?&lt;br /&gt;&lt;br /&gt;
Я хочу получить готовый конструктор, из готорого можно будет сделать что-то ездящее и моргающее сразу. &lt;br /&gt;С датчиками, которые можно будет использовать из коробки.&lt;br /&gt;И эти сенсоры должны быть понятны ребенку: вариант обработки видео посредством opencv не подходит как вы понимаете.&lt;br /&gt;&lt;br /&gt;Управление через android планшет тоже желательно -- это дает&amp;nbsp;+100 к привлекательности.&lt;br /&gt;&lt;br /&gt;Паять я не люблю но умею -- лучше если это будет именно конструктор.&lt;br /&gt;
К которому можно будет докупать детальки и превратить его хоть в вертолёт -- но должно ездить и бибикать из коробки (управляясь смартфоном).&lt;br /&gt;&lt;br /&gt;Программирование.&lt;br /&gt;&lt;br /&gt;Мальчик освоил scratch. Это графический интерфейс, программа создается перетаскиванием блоков мышкой.&lt;br /&gt;&lt;br /&gt;Хотелось бы сохранить эту возможность на первом этапе.&lt;br /&gt;&lt;br /&gt;Потом, понятно, нужно переходить на текстовые файлы.&lt;br /&gt;Если там будет Python -- это плюс. &lt;br /&gt;Какой-то специфический язык -- не беда.&lt;br /&gt;Есть возможность дописывать на С близко к железу -- плюс, я умею:)&lt;br /&gt;&lt;br /&gt;Итог:&lt;br /&gt;&lt;br /&gt;Мне нужно выбрать платформу. &lt;br /&gt;&lt;br /&gt;
Гибкую и расширяемую, достаточно мощную и с перспективой развития (если захочу чтобы робот мигал светодиодом на мою улыбку -- у него дожно хватить ресурса процессора на это).&lt;br /&gt;&lt;br /&gt;Открытую -- чтобы можно было докупать детальки и создавать новые поделки. Как в детском конструкторе с гайками и болтиками, только еще и сенсоры-моторчики. В перспективе компас и GPS. WiFi и всё такое.&lt;br /&gt;&lt;br /&gt;Я хочу купить сразу не только плату с процессором а что-то что может быть интересно мальчику. Коструктор с моторчиками, колесами и датчиками. Если это совместимо -- готов покупать по частям.&lt;br /&gt;&lt;br /&gt;Завершение.&lt;br /&gt;
&lt;br /&gt;Коллеги. Я полный чайник в робототехнике для детей.&lt;br /&gt;
Надеюсь, вы мне подскажите годные варианты.&lt;br /&gt;Цена особой роли не играет -- было бы удобно&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/521112986537832221/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2016/03/robot-for-child.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/521112986537832221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/521112986537832221'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2016/03/robot-for-child.html' title='Нужен совет по выбору платформы для постройки робота'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-9079240549230351736</id><published>2016-03-02T00:28:00.000+02:00</published><updated>2016-03-02T00:28:06.709+02:00</updated><title type='text'>Разница менталитетов и национальных деловых культур</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Увидел интересную статью:&lt;br /&gt;&lt;a href=&quot;http://bulochnikov.livejournal.com/2326301.html&quot;&gt;Разница менталитетов и национальных деловых культур&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Кажется, автор попал в точку.&lt;br /&gt;&lt;br /&gt;По опыту работы могу сказать: да, так и есть. &quot;Наши&quot; заморочки отличаюстся от американских. Это нужно знать и учитывать.&lt;br /&gt;&lt;br /&gt;Читайте и удивляйтесь.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/9079240549230351736/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2016/03/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/9079240549230351736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/9079240549230351736'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2016/03/blog-post.html' title='Разница менталитетов и национальных деловых культур'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-5423996866503025534</id><published>2016-01-16T20:50:00.000+02:00</published><updated>2016-01-16T20:50:01.947+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="kyiv.py"/><category scheme="http://www.blogger.com/atom/ns#" term="pytest"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>Слайды по py.test</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Сегодня был&amp;nbsp;&lt;a href=&quot;http://www.meetup.com/uapycon/events/227209068/&quot;&gt;Kyiv.py #17&lt;/a&gt;, как обычно было круто и интересно.&lt;br /&gt;&lt;br /&gt;С тезисами Алексея Поправки на тему &quot;почему Фласк плохой&quot; согласен.&lt;br /&gt;
&lt;br /&gt;
Он хорош для маленьких поделок, при росте сложности проекта и размера команды вылезает сплошная боль в седалище.&lt;br /&gt;
&lt;br /&gt;
Те, кто с этим несогласен -- просто привыкли :) и научились обходить самые неприятные моменты используя техники, не показанные в flask tutorial.&lt;br /&gt;
&lt;br /&gt;
Я рассказывал о py.test.&lt;br /&gt;
&lt;br /&gt;
Fixtures и разные трюки с pytest hooks.&lt;br /&gt;
&lt;br /&gt;
Презентация --&amp;nbsp;&lt;a href=&quot;http://asvetlov.github.io/pytest-slides/&quot;&gt;http://asvetlov.github.io/pytest-slides/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/5423996866503025534/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2016/01/pytest.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/5423996866503025534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/5423996866503025534'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2016/01/pytest.html' title='Слайды по py.test'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-4647908937934616204</id><published>2015-12-04T16:08:00.000+02:00</published><updated>2015-12-04T16:08:26.870+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="asyncio"/><category scheme="http://www.blogger.com/atom/ns#" term="mongodb"/><category scheme="http://www.blogger.com/atom/ns#" term="python3"/><title type='text'>Motor 0.5</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Мы строили-строили и наконец построили.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://motor.readthedocs.org/en/stable/&quot;&gt;Motor 0.5&lt;/a&gt;&amp;nbsp;(асинхронный драйвер для MongoDB) доехал до релиза.&lt;br /&gt;
&lt;br /&gt;
Новая версия работает с asyncio.&lt;br /&gt;
Всем рекомендую&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/4647908937934616204/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2015/12/motor.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/4647908937934616204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/4647908937934616204'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2015/12/motor.html' title='Motor 0.5'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-7104373271688619077</id><published>2015-11-12T14:26:00.003+02:00</published><updated>2015-11-12T14:26:54.121+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="asyncio"/><category scheme="http://www.blogger.com/atom/ns#" term="python3"/><title type='text'>uvloop -- альтернатива стандартному asyncio loop</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
В последнее время Юра Селиванов (ага, тот самый автор &lt;a href=&quot;https://www.python.org/dev/peps/pep-0492/&quot;&gt;PEP-492&lt;/a&gt; aka async/await и&amp;nbsp;&lt;a href=&quot;http://asvetlov.blogspot.com/2015/10/magicpython.html&quot;&gt;MagicPython&lt;/a&gt;) работал над тем чтобы сделать asyncio побыстрее.&lt;br /&gt;&lt;br /&gt;Он взял&amp;nbsp;&lt;a href=&quot;http://libuv.org/&quot;&gt;libuv&lt;/a&gt;&amp;nbsp;и построил с её помощью&amp;nbsp;&lt;a href=&quot;https://github.com/1st1/uvloop&quot;&gt;uvloop&lt;/a&gt;&amp;nbsp;-- asyncio совместимый event loop.&lt;br /&gt;&lt;br /&gt;Результаты замера производительности&amp;nbsp;&lt;a href=&quot;https://github.com/python/asyncio/issues/282#issuecomment-155957235&quot;&gt;здесь&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Получается, что uvloop в &lt;b&gt;3.5&lt;/b&gt; раза быстрее стандартного и в &lt;b&gt;1.25&lt;/b&gt; раза обгоняет gevent.&lt;br /&gt;Т.е. абсолютный победитель по скорости в мире Python.&lt;br /&gt;&lt;br /&gt;Библиотека пока еще не имеет стабильной версии, скоро всё будет.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/7104373271688619077/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2015/11/uvloop.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/7104373271688619077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/7104373271688619077'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2015/11/uvloop.html' title='uvloop -- альтернатива стандартному asyncio loop'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-1272767585050701804</id><published>2015-11-10T08:51:00.002+02:00</published><updated>2015-11-10T16:20:20.729+02:00</updated><title type='text'>Видео с PyCon RU 2015</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Я, конечно, тормоз и пишу спустя две недели -- но это лучше чем совсем промолчать.&lt;br /&gt;
&lt;br /&gt;
Ссылки на доклады&amp;nbsp;&lt;a href=&quot;http://habrahabr.ru/company/it_people/blog/269223/&quot;&gt;на ХабраХабре&lt;/a&gt;, там и мой есть тоже.&lt;br /&gt;
&lt;br /&gt;
Если интересно -- открываем и смотрим.&lt;br /&gt;
&lt;br /&gt;
P.S. Слайды --&amp;nbsp;&lt;a href=&quot;https://docs.google.com/presentation/d/172YO4cGsQVjiKNbSIPaJXgPz2QNFYuN1pMVJ03JhOMY/edit?usp=sharing&quot;&gt;здесь&lt;/a&gt;.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/1272767585050701804/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2015/11/pycon-ru-2015.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/1272767585050701804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/1272767585050701804'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2015/11/pycon-ru-2015.html' title='Видео с PyCon RU 2015'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-8305114622443377368</id><published>2015-11-01T20:35:00.001+02:00</published><updated>2015-11-01T22:20:22.278+02:00</updated><title type='text'>Англицизмы в нашей речи</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Навеяно вопросом&amp;nbsp;&lt;a href=&quot;http://olt-z-s.livejournal.com/216000.html&quot;&gt;Русские иностранные слова&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Я часто выступаю с лекциями на конференциях.&lt;br /&gt;
&lt;br /&gt;
По моему глубокому убеждению если доклад на русском -- нужно пытаться использовать русские термины (если они не слишком архаичные и понятны аудитории).&lt;br /&gt;
&lt;br /&gt;
Это не всегда возможно. Рабочий язык программиста всё же английский.&lt;br /&gt;
Лично я предпочел бы ограничится родным, которым владею свободно -- но нет.&lt;br /&gt;
&lt;br /&gt;
Тем не менее &quot;&lt;i&gt;конкурентый реквест шарится между тредами&lt;/i&gt;&quot; звучит гораздо хуже чем &quot;&lt;i&gt;параллельный запрос разделяется между потоками&lt;/i&gt;&quot;.&lt;br /&gt;
Все поймут смысл в обоих вариантах, но первый режет слух.&lt;br /&gt;
&lt;br /&gt;
Иногда устоявшегося русского термина не существует (Александр Бельченко при переводе слова &lt;b&gt;&lt;i&gt;commit&lt;/i&gt;&lt;/b&gt;&amp;nbsp;в статьях о &lt;i&gt;bazaar&lt;/i&gt; использовал &lt;b&gt;&lt;i&gt;фиксацию&lt;/i&gt;&lt;/b&gt;&amp;nbsp;что технически правильно но абсолютно непонятно).&lt;br /&gt;
&lt;br /&gt;
В таких случаях лучше оставлять английское слово как есть, &lt;b&gt;&lt;i&gt;commit&lt;/i&gt;&lt;/b&gt;&amp;nbsp;но не &lt;b&gt;&lt;i&gt;коммит/комит&lt;/i&gt;&lt;/b&gt;&amp;nbsp;(опять же вас лучше поймут, вариантов транслитерации много и часто они выглядят ужасно).&lt;br /&gt;
&lt;br /&gt;
Eсли используете английские термины при вербальной коммуникации (а без этого никуда) -- произносите их правильно.&lt;br /&gt;
Т.е. так как оно должно звучать на английском/американском а не на ломаном &lt;i&gt;руссиан пингин инглиш&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Еще один момент: делать слайды на русском или на английском?&lt;br /&gt;
&lt;br /&gt;
Александр Соловьёв&amp;nbsp;&lt;a href=&quot;http://solovyov.net/blog/2013/language-you-use/&quot;&gt;высказался&lt;/a&gt;&amp;nbsp;пару лет назад.&lt;br /&gt;
&lt;br /&gt;
Полностью его поддерживаю.&lt;br /&gt;
&lt;br /&gt;
Если доклад будет на русском -- и слайды должны быть на этом же языке, с минимумом английских слов.&lt;br /&gt;
&lt;br /&gt;
Например, лекцию по &lt;a href=&quot;http://aiohttp.readthedocs.org/&quot;&gt;aiohttp&lt;/a&gt; для &lt;a href=&quot;http://pycon.ru/2015/&quot;&gt;PyCon RU 2015&lt;/a&gt; я читал на русском -- и слайды были &lt;a href=&quot;https://docs.google.com/presentation/d/172YO4cGsQVjiKNbSIPaJXgPz2QNFYuN1pMVJ03JhOMY/edit?usp=sharing&quot;&gt;соответствующие&lt;/a&gt;.&lt;br /&gt;
На следующей неделе буду читать ту же лекцию для &lt;a href=&quot;http://2015.pycon.hk/&quot;&gt;PyCON Hong Kong 2015&lt;/a&gt; -- и там слайды будут уже на &lt;a href=&quot;https://docs.google.com/a/datarobot.com/presentation/d/1Oi9qsCXPA9nQ6A2Gb2RSqVbGzB5Q4K6GN0F4OdSAuvc/edit?usp=sharing&quot;&gt;английском&lt;/a&gt;&amp;nbsp;по очевидной причине: я не владею китайским.&lt;br /&gt;
&lt;br /&gt;
Если нужно, вовсем не трудно перевести ваши слайды на английский, да? &lt;br /&gt;
И наоборот -- англоязычные слайды перевести на язык, понятный аудитории.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/8305114622443377368/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2015/11/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/8305114622443377368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/8305114622443377368'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2015/11/blog-post.html' title='Англицизмы в нашей речи'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-4795942604996911555</id><published>2015-10-25T03:40:00.000+02:00</published><updated>2015-10-25T03:40:47.433+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aiohttp"/><title type='text'>Google group for aiohttp and aio-libs</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;a class=&quot;ot-anchor aaTEdf&quot; dir=&quot;ltr&quot; href=&quot;https://groups.google.com/forum/#!forum/aio-libs&quot; jslog=&quot;10929; track:click&quot; rel=&quot;nofollow&quot; style=&quot;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;&quot; target=&quot;_blank&quot;&gt;https://groups.google.com/forum/#!forum/aio-libs&lt;/a&gt;&lt;br style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;&quot; /&gt;&lt;br style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;&quot;&gt;Сделал гуглогруппу для вопросов по aiohttp и aiolibs (aiopg, aiomysql, aioredis, aiozmq, aiohttp_session, aiohttp_toolbar и еще десятка библиотек).&lt;/span&gt;&lt;br style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;&quot; /&gt;&lt;br style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;&quot;&gt;В общем если вы стеснялись сделать issue в github -- вам сюда.&lt;/span&gt;&lt;br style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;&quot; /&gt;&lt;br style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;&quot;&gt;Если писали мне лично на email -- тоже.&amp;nbsp;&lt;/span&gt;&lt;br style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;&quot; /&gt;&lt;br style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;&quot;&gt;Язык общения -- предпочтительно английский (так больше читателей поймут и смогут ответить).&lt;/span&gt;&lt;br style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;&quot;&gt;Если с основным языком программиста затык -- пишите на русском.&lt;/span&gt;&lt;br style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;&quot;&gt;Только, прошу, не смешивайте -- как и водку с пивом.&lt;/span&gt;&lt;br style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;&quot; /&gt;&lt;span style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 9.1px;&quot;&gt;Если топик англоязычный -- комментарии должны быть на неродном.﻿&lt;/span&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/4795942604996911555/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2015/10/google-group-for-aiohttp-and-aio-libs.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/4795942604996911555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/4795942604996911555'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2015/10/google-group-for-aiohttp-and-aio-libs.html' title='Google group for aiohttp and aio-libs'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-953521016209757619</id><published>2015-10-21T22:09:00.000+03:00</published><updated>2015-10-21T22:09:23.859+03:00</updated><title type='text'>Слайды с hdconf.by</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;a href=&quot;https://docs.google.com/presentation/d/1slEg8dQMgwA1f6WQ6vFL_d5peRKXucWDSp8dOl5Y048/edit?usp=sharing&quot;&gt;ссылка&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Большое спасибо организаторам&amp;nbsp;&lt;a href=&quot;http://hdconf.by/&quot;&gt;hdconf.by&lt;/a&gt;&amp;nbsp;-- конференция получилась замечательной!&lt;br /&gt;&lt;br /&gt;Интересные докладчики и любопытные слушатели -- что может быть лучше?&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/953521016209757619/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2015/10/hdconfby.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/953521016209757619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/953521016209757619'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2015/10/hdconfby.html' title='Слайды с hdconf.by'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-2752658709866768267</id><published>2015-10-21T20:49:00.002+03:00</published><updated>2015-12-15T11:48:22.509+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="python3"/><category scheme="http://www.blogger.com/atom/ns#" term="string formatting"/><title type='text'>MagicPython -- Syntax Highlighter для SublimeText</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Мой приятель Юра Селиванов попросил написать рекламный пост о его новом проекте&amp;nbsp;&lt;a href=&quot;https://github.com/MagicStack/MagicPython&quot;&gt;MagicPython&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Это syntax highlighter для Sublime Text и Atom, который поддерживает все новые языковые конструкции Python 3.5 (&lt;i&gt;async def&lt;/i&gt; и &lt;i&gt;await&lt;/i&gt; например) плюс type annotations, string formatting и регулярные выражения.&lt;br /&gt;
&lt;br /&gt;
Sublime поддерживает Python из коробки, но с Python 3 (а особенно с Python 3.5) у него проблемы. MagicPython понимает всё.&lt;br /&gt;
Разметка шаблонов для форматирования строк и регулярок заслуживает отдельного упоминания -- выглядит прекрасно и заметно облегчает жизнь.&lt;br /&gt;
&lt;br /&gt;
Я сам использую&amp;nbsp;ортодоксальный Emacs&amp;nbsp;и переходить (пока) не собираюсь, но MagicPython работает исключительно хорошо и заслуживает доброго слова.&lt;br /&gt;
&lt;br /&gt;
К слову, Юра (&lt;a href=&quot;https://twitter.com/1st1&quot;&gt;https://twitter.com/1st1&lt;/a&gt;) Python Core Developer и автор &lt;a href=&quot;https://www.python.org/dev/peps/pep-0492/&quot;&gt;PEP 492&lt;/a&gt;&amp;nbsp;aka async/await -- т.е. очень грамотный спец, который знает как делать качественные продукты.&lt;br /&gt;
&lt;br /&gt;
Пользуйтесь с удовольствием.&lt;br /&gt;
&lt;br /&gt;
P.S.&lt;br /&gt;
&lt;br /&gt;
О редакторе &lt;a href=&quot;https://atom.io/&quot;&gt;Atom&lt;/a&gt; узнал только на этой неделе.&lt;br /&gt;
На первый взгляд выглядит как Sublime но при этом Open Source.&lt;br /&gt;
Уважаемые читатели, кто-нибудь его использует? Какие ваши впечатления?&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/2752658709866768267/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2015/10/magicpython.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/2752658709866768267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/2752658709866768267'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2015/10/magicpython.html' title='MagicPython -- Syntax Highlighter для SublimeText'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-2888431850350488876</id><published>2015-05-13T01:01:00.002+03:00</published><updated>2015-05-13T01:01:39.555+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aiohttp"/><category scheme="http://www.blogger.com/atom/ns#" term="django"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="web"/><title type='text'>Почему я не люблю конфигурацию в django-style</title><content type='html'>&lt;h2 id=&quot;_1&quot;&gt;Введение&lt;/h2&gt;
&lt;p&gt;Сегодня работал над добавлением в
&lt;a href=&quot;http://aiohttp.readthedocs.org/en/v0.15.3/web.html&quot;&gt;aiohttp.web&lt;/a&gt;
свойства &lt;code&gt;scheme&lt;/code&gt; для &lt;em&gt;request object&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Идея простая: отвечать что &lt;code&gt;request.scheme&lt;/code&gt; &lt;code&gt;&quot;http&quot;&lt;/code&gt; для HTTP
запросов, иначе &lt;code&gt;&quot;https&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;У меня есть правило: перед началом погляди как другие уже справились с этой задачей.&lt;/p&gt;
&lt;p&gt;У создателей популярных библиотек есть большой опыт по преодолению
неочевидных проблем, учиться у мастеров -- полезно.&lt;/p&gt;
&lt;p&gt;Так вышло что сегодня я смотрел код Django.&lt;/p&gt;
&lt;p&gt;И было в том коде примерно такое:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;@property
def scheme(self):
    if settings.SECURE_PROXY_SSL_HEADER:
        try:
            header, value = settings.SECURE_PROXY_SSL_HEADER
        except ValueError:
            raise ImproperlyConfigured(
                &#39;The SECURE_PROXY_SSL_HEADER setting must be a tuple containing two values.&#39;
            )
        if self.META.get(header, None) == value:
            return &#39;https&#39;
    return &#39;http&#39;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;В целом очень хорошо: Django показала, как работать с &lt;em&gt;HTTP&lt;/em&gt; и что
делать если сервер расположен за &lt;em&gt;HTTPS Reverse Proxy&lt;/em&gt; (Nginx,
например).&lt;/p&gt;
&lt;p&gt;В последнем случае я сконфигурирую Nginx чтобы он добавил несколько
полезных HTTP HEADERS для &lt;em&gt;HTTPS connection&lt;/em&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  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;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;По &lt;code&gt;X-Forwarded-Proto&lt;/code&gt; я пойму что это был &lt;em&gt;HTTPS&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;В целом стандартная и всем (надеюсь) известная процедура.&lt;/p&gt;
&lt;p&gt;У &lt;em&gt;aiohttp&lt;/em&gt; свободы чуть больше: оно может понять что сокет, по
которому подключились напрямую, сам уже &lt;em&gt;SSL&lt;/em&gt; -- но это пригодно
только если мы готовы выставить наш &lt;em&gt;aiohttp сервер&lt;/em&gt; прямо в веб.&lt;/p&gt;
&lt;p&gt;Куда чаще его прячут за &lt;em&gt;Nginx&lt;/em&gt;, &lt;em&gt;HAProxy&lt;/em&gt; или похожим &lt;em&gt;reverse proxy&lt;/em&gt;
и там уже работают с сертификататами, проксируя обычный &lt;em&gt;HTTP connection&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;В общем всё прекрасно: &lt;em&gt;Nginx&lt;/em&gt; выставит &lt;em&gt;X-Forwarded-Proto&lt;/em&gt; &lt;em&gt;HTTP
HEADER&lt;/em&gt; который будет или &lt;code&gt;&quot;http&quot;&lt;/code&gt; или &lt;code&gt;&quot;https&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Django глянет на &lt;code&gt;settings.SECURE_PROXY_SSL_HEADER&lt;/code&gt; и если там
&lt;code&gt;(&quot;X-Forwarded-Proto&quot;, &quot;https&quot;)&lt;/code&gt; то &lt;em&gt;scheme&lt;/em&gt; тоже будет &lt;code&gt;&quot;https&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Очень грамотно сделано, мне нравится.&lt;/p&gt;
&lt;h2 id=&quot;_2&quot;&gt;Проблема&lt;/h2&gt;
&lt;p&gt;Так почему я этот пост написал?&lt;/p&gt;
&lt;p&gt;А потому что &lt;code&gt;settings.SECURE_PROXY_SSL_HEADER&lt;/code&gt; может быть чем угодно
-- строкой, числом или ещё какой непотребной константой.&lt;/p&gt;
&lt;p&gt;Проверка выполняется на момент получения &lt;code&gt;request.scheme&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Нам, питонщикам, плевать на производительность в данном случае -- на
самом деле &lt;em&gt;try/except&lt;/em&gt; обходится дешево и никак не отразится на
работе сайта.&lt;/p&gt;
&lt;p&gt;Беда в другом -- ошибка неправильной конфигурации выявится не на этапе
старта приложения а тогда, когда его выкатят в &lt;em&gt;production&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;У тестов будет свой правильный &lt;code&gt;settings.py&lt;/code&gt;, а на &lt;em&gt;production server&lt;/em&gt;
админ чуть-чуть ошибётся.&lt;/p&gt;
&lt;p&gt;И это тоже не слишком большая проблема -- при ручном тестировании
команда QA, наверное, обнаружит ошибку очень быстро. Или на следующее
утро -- тут уж зависит от того как техроцесс построен.&lt;/p&gt;
&lt;p&gt;А теперь представьте что вы ошиблись в другой настройке. Очень редко
используемой, но при этом важной.&lt;/p&gt;
&lt;h2 id=&quot;_3&quot;&gt;Решение&lt;/h2&gt;
&lt;p&gt;Проблему вроде бы можно выявить рано, перестроив процесс запуска
программы.&lt;/p&gt;
&lt;p&gt;Для начала нужно отказаться от использования общего конфига в API.&lt;/p&gt;
&lt;p&gt;Строить код библиотеки так, чтобы она никогда не лезла в &lt;code&gt;settings.py&lt;/code&gt;
(это и Flask касается если что).&lt;/p&gt;
&lt;p&gt;Пусть все нужные классы принимают конфигурационные параметры явно,
прямо в конструкторах.&lt;/p&gt;
&lt;p&gt;Тогда можно быстро понять, что формат параметра не тот или &lt;em&gt;IP address&lt;/em&gt; недоступен.&lt;/p&gt;
&lt;p&gt;Разделение на этапы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;чтение конфига, анализ его и подготовка приложения к работе&lt;/li&gt;
&lt;li&gt;запуск и работа&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;помогает избежать досадных недоразумений.&lt;/p&gt;
&lt;p&gt;Плюс, к тому же, на &lt;em&gt;явном&lt;/em&gt; этапе подготовки к старту можно позволить
себе довольно дорогостоящие проверки на корректное функционирование
системы (послать &lt;em&gt;PING&lt;/em&gt; чтобы убедится что Redis живой, например).&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/2888431850350488876/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2015/05/global-config.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/2888431850350488876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/2888431850350488876'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2015/05/global-config.html' title='Почему я не люблю конфигурацию в django-style'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-6309911384919254282</id><published>2015-03-24T14:56:00.003+02:00</published><updated>2015-03-24T14:56:46.762+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>Подкаст</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Неделю назад принимал участие в записи подкаста о Питоне вообще и asyncio в частности.&lt;br /&gt;Прослушать результат нечеловеческих усилий можно &lt;a href=&quot;http://sdcast.ksdaemon.ru/2015/03/sdcast-21/&quot;&gt;здесь&lt;/a&gt;.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/6309911384919254282/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2015/03/podcast.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/6309911384919254282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/6309911384919254282'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2015/03/podcast.html' title='Подкаст'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-4341064513817430771</id><published>2015-02-14T21:35:00.001+02:00</published><updated>2015-02-14T21:35:56.608+02:00</updated><title type='text'>vagga</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Паша Коломиец работает над проектом &lt;a href=&quot;https://github.com/tailhook/vagga&quot;&gt;vagga&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Коротко говоря, это система виртуализации на linux контейнерах, предназначенная для &lt;b&gt;разработки&lt;/b&gt; программ.&lt;br /&gt;
&lt;br /&gt;
Выполняет роль, в чем-то похожую на virtualenv, но со своими отличиями и особенностями.&lt;br /&gt;&lt;br /&gt;Рекомендую прочесть свежую Пашину&amp;nbsp;&lt;a href=&quot;https://medium.com/@paulcolomiets/managing-dependencies-with-vagga-79181046db66&quot;&gt;статью&lt;/a&gt;, в которой он даёт обзор возможностей vagga и показывает преимущества над virtualenv.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P.S. &lt;/b&gt;Я лично к проекту никакого отношения не имею, поэтому все вопросы, пожалуйста, задавайте сразу Паше.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/4341064513817430771/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2015/02/vagga.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/4341064513817430771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/4341064513817430771'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2015/02/vagga.html' title='vagga'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-7281381163290845831</id><published>2015-02-09T15:20:00.000+02:00</published><updated>2015-02-09T15:20:14.448+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aiohttp"/><category scheme="http://www.blogger.com/atom/ns#" term="asyncio"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="python3"/><title type='text'>aiohttp с Belarus PyCon 2015 [видео]</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Видео моей лекции о aiohttp с PyCon Belarus 2015:&amp;nbsp;&lt;a href=&quot;http://www.youtube.com/watch?v=F6sa6G0lJCk&quot;&gt;Линк&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/7281381163290845831/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2015/02/aiohttp-belarus-pycon-2015.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/7281381163290845831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/7281381163290845831'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2015/02/aiohttp-belarus-pycon-2015.html' title='aiohttp с Belarus PyCon 2015 [видео]'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-6868900699702980610</id><published>2015-01-31T14:30:00.001+02:00</published><updated>2015-01-31T14:30:44.091+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aiohttp"/><category scheme="http://www.blogger.com/atom/ns#" term="asyncio"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>Слайды с доклада о aiohttp на PyCon Belarus 2015</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;a href=&quot;http://www.slideshare.net/andrew_svetlov/aiohttp&quot;&gt;http://www.slideshare.net/andrew_svetlov/aiohttp&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/6868900699702980610/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2015/01/aiohttp-pycon-belarus-2015.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/6868900699702980610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/6868900699702980610'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2015/01/aiohttp-pycon-belarus-2015.html' title='Слайды с доклада о aiohttp на PyCon Belarus 2015'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824928856526666223.post-6594892935143502601</id><published>2015-01-16T10:09:00.000+02:00</published><updated>2015-01-16T10:09:02.586+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aiohttp"/><category scheme="http://www.blogger.com/atom/ns#" term="asyncio"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>aiohttp 0.14</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Выпустил новую версию библиотеки.&lt;br /&gt;
&lt;br /&gt;
Из вкусного -- Web Sockets для aiohttp.web серверов, оптимизация скорости работы, множество мелких улучшений.&lt;br /&gt;&lt;br /&gt;Полный список изменений --&amp;nbsp;&lt;a href=&quot;https://github.com/KeepSafe/aiohttp/releases/tag/v0.14.1&quot;&gt;здесь&lt;/a&gt;.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://asvetlov.blogspot.com/feeds/6594892935143502601/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://asvetlov.blogspot.com/2015/01/aiohttp-014.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/6594892935143502601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824928856526666223/posts/default/6594892935143502601'/><link rel='alternate' type='text/html' href='http://asvetlov.blogspot.com/2015/01/aiohttp-014.html' title='aiohttp 0.14'/><author><name>Andrew Svetlov</name><uri>http://www.blogger.com/profile/08716418137388253439</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>