<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Рома Рыбальченко: заметки с тегом python</title>
<link>https://keen.nerevar.com/tags/python/</link>
<description>Аналитик-разработчик в Алисе</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.2 (v4116)</generator>

<itunes:subtitle>Аналитик-разработчик в Алисе</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Радости программиста</title>
<guid isPermaLink="false">24</guid>
<link>https://keen.nerevar.com/all/radosti-programmista/</link>
<pubDate>Mon, 18 Jul 2016 11:30:53 +0300</pubDate>
<author></author>
<comments>https://keen.nerevar.com/all/radosti-programmista/</comments>
<description>
&lt;p&gt;dos, pascal:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;смотри, оно выполняет твой алгоритм, который запрограммировал!&lt;/li&gt;
&lt;li&gt;можно работать с тем что ты ввёл, спрашивать любые числа и решать уравнения (в школе)&lt;/li&gt;
&lt;li&gt;а потом даже игрушку сделать, змейку, тетрис 80x25&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;windows, delphi7:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;смотри, формы, можно сделать свой калькулятор или сапёр, настоящее windows приложение!&lt;/li&gt;
&lt;li&gt;если рисовать картинки-спрайты и их передвигать, то получится наколеночная версия героев 3&lt;/li&gt;
&lt;li&gt;а если подключить tcp/ip и udp, то можно сделать сетевой чатик, или даже Radmin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;web, php:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;смотри, это кроссплатформенно, работает в любом браузере на любой ОС!&lt;/li&gt;
&lt;li&gt;можно верстать полупрозрачности-градиенты, воплотить любой интерфейс, гораздо красивее windows controls&lt;/li&gt;
&lt;li&gt;с помощью кравлеров можно спарсить весь интернет себе&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;web, js:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;смотри, твой код работает на сотне серверов и миллионы пользователей каждый день пользуются твоим UI!&lt;/li&gt;
&lt;li&gt;а js можно писать и на клиенте и на сервере, прикольно. Посмотрим что из этого получится&lt;/li&gt;
&lt;li&gt;ios, android: теперь можно делать приложения, работающие на телефонах и планшетах: свайпы, зумы, доступ к камере, gps&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;mapreduce, python:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;смотри, 15000 машинок обработают десятки терабайт данных за полчаса и выведут тебе результат!&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>

<item>
<title>PyCon Russia 2016</title>
<guid isPermaLink="false">21</guid>
<link>https://keen.nerevar.com/all/pycon-russia-2016/</link>
<pubDate>Tue, 05 Jul 2016 22:09:04 +0300</pubDate>
<author></author>
<comments>https://keen.nerevar.com/all/pycon-russia-2016/</comments>
<description>
&lt;p&gt;&lt;img src="https://keen.nerevar.com/pictures/pycon2016_2.jpg" height="300"&gt;&lt;/p&gt;
&lt;p&gt;В начале июля состоялась двухдневная конференция &lt;a href="http://pycon.ru/2016/"&gt;Pycon Russia 2016&lt;/a&gt; в подмосковье. До этого 3 года подряд конференция проходила в Екб.&lt;br /&gt;
Мне очень понравилась как организация конфы, место проведения, так и сами доклады. Как начинающего питониста, меня порадовало разнообразие тем докладов: ядро CPython, тестирование, инфраструктура, machine learning, highload.&lt;/p&gt;
&lt;p&gt;UPD: а вот и доклады &lt;a href="https://www.youtube.com/watch?v=sEciSlAClL8&amp;index=1&amp;list=PLRdS-n5seLRqszBqVDF342RMlCWgOTm6q"&gt;https://www.youtube.com/watch?v=sEciSlAClL8&amp;index=1&amp;list=PLRdS-n5seLRqszBqVDF342RMlCWgOTm6q&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://keen.nerevar.com/pictures/pycon2016_1.jpg" height="500"&gt;&lt;/p&gt;
&lt;p&gt;Краткий конспект самых интересных докладов:&lt;/p&gt;
&lt;h3&gt;Thinking about Concurrency&lt;/h3&gt;
&lt;p&gt;Two first things to learn about multithreading are fear and respect.&lt;br /&gt;
Доклад от разработчика языка python &lt;a href="https://twitter.com/raymondh"&gt;Raymond Hettinger&lt;/a&gt;’а про многопоточность. В нём сравниваются потоки и процессы (threads versus processes).&lt;br /&gt;
У потоков есть общий state, что является и плюсом и минусом одновременно — возникает проблема разграничения доступа потоков к общим данным. Для этого могут использоваться блокировки (locks) и флаги. Но они порождают deadlock’и и race conditions.&lt;br /&gt;
У процессов нет общих данных, они запускаются независимо.&lt;/p&gt;
&lt;pre&gt;
from multiprocessing import Pool
n = 10
pool = Pool(processes=n)
results = pool.map(complex_operation, [x for x in range(n)])
&lt;/pre&gt;
&lt;h3&gt;Theano&lt;/h3&gt;
&lt;p&gt;Екатерина Тузова из Jetbrains рассказывала про применение фреймворка нейронных сетей Theano как переводчик с языка математики в программирование. Постановка задачи такая, что к программистам приходят математики с моделью, которую просят запрограммировать. Тут на помощь приходит Theano, с помощью которого можно вычислять математические выражения, содержащие многомерные массивы. Презентация — &lt;a href="https://speakerdeck.com/ktisha/theano-lets-build-a-net"&gt;https://speakerdeck.com/ktisha/theano-lets-build-a-net&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Tensorflow and deep learning&lt;/h3&gt;
&lt;p&gt;Самый интересный доклад + воркшоп про создание нейросети на TensorFlow от Martin Gorner из Google. Про это отдельный пост — &lt;a href="https://keen.nerevar.com/all/tensorflow-and-deep-learning-from-pycon-2016/"&gt;https://keen.nerevar.com/all/tensorflow-and-deep-learning-from-pycon-2016/&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Docker:&lt;/h3&gt;
&lt;p&gt;От евангелиста докера был обзорный доклад технологии с примерами образа, настройками и конфигами. Как собрать образ с нуля по шагам, как разворачивать, куда его выкладывать. Как известно, любая команда в докере создаёт новый слой, который отдельно кешируется, скачивается, применяется, поэтому имеет смысл объединить похожие по смыслу действия в один слой. Так получаются всего несколько слоём: 1) установка python, окружения 2) установка проектных зависимостей 3) непосредственно запуск проекта.&lt;br /&gt;
Презентация — &lt;a href="https://speakerdeck.com/satyrius/deliver-python-apps-with-docker,"&gt;https://speakerdeck.com/satyrius/deliver-python-apps-with-docker,&lt;/a&gt; демо — &lt;a href="https://github.com/satyrius/paid"&gt;https://github.com/satyrius/paid&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Neo4j graph db&lt;/h3&gt;
&lt;p&gt;Программист-олимпиадник, который очень любит графы, рассказывал про промышленное использование баз данных для хранения графов. Например на тематике фильмов и актёров он получал все фильмы, в которых снимался определённый актёр (рёбра графа) или в социальной сети с разными типами дружбы — по пользователю выборку друзей, друзей друзей, друзей друзей друзей и т.д до 6 уровней рукопожатий. Так вот для простых запросов, где нужно выбрать друзей друзей, MySQL показывает хорошие результаты. Но с увеличением уровня сложности, количества join’ов, время выполнения запросов в мускуле растёт экспоненциально. И тут на помощь приходят graph databases, предназначенные для хранения графов и работы с ними. В таких db найти друзей друзей друзей — это всего лишь найти рёбра к соседним вершинам и выполняется за линейное время. Докладчик сравнил несколько баз данных и выбрал Neo4j, к ней надстройку Cypher Query Language с SQL-подобным синтаксисом и py2neo коннектором для питона.&lt;br /&gt;
Презентация — &lt;a href="https://asoldatenko.com/pyconru2016.pdf"&gt;https://asoldatenko.com/pyconru2016.pdf&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Знай и люби свой CPython&lt;/h3&gt;
&lt;p&gt;Доклад от разработчика из компании хакеров Positive Technologies про то, как устроен интерпретатор Питона и что можно сделать в его кишках. Как в C и ASM’е можно было работать с памятью напрямую, так и в докладе показаны примеры как менять значения переменных в памяти напрямую. В python, как известно, строки неизменяемы, а если писать напрямую в память — то на основе этого можно сделать класс MutableString. Значения любых переменных, свойства встроенных типов данных, действия операндов — всё можно менять. Для изучения как оно работает, поиграться — это интересно и познавательно. Только в production не рекомендуется использовать.&lt;br /&gt;
Презентация — &lt;a href="https://clck.ru/9zuvF"&gt;https://clck.ru/9zuvF&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;User-centered open source projects&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://keen.nerevar.com/pictures/222828002_128301_7824722293351189912.jpg" height="450"&gt;&lt;br /&gt;
Доклад на английском от Jackie Kazil из Capital One про разработку и окружение open-source проекта.&lt;br /&gt;
Разных библиотек на гитхабе много, а хороших — нет. Jackie привела чеклист вещей, которые должны быть в любом хорошем проекте:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Landing page&lt;/li&gt;
&lt;li&gt;«Getting Started»&lt;/li&gt;
&lt;li&gt;Install instructions (в идеале чтобы была одна строчка npm install или pip install)&lt;/li&gt;
&lt;li&gt;Contribution guide&lt;/li&gt;
&lt;li&gt;Responses &lt; 24hrs&lt;/li&gt;
&lt;li&gt;Clear git workflow&lt;/li&gt;
&lt;li&gt;Labeled branches&lt;/li&gt;
&lt;li&gt;License&lt;/li&gt;
&lt;li&gt;Regular commits&lt;/li&gt;
&lt;li&gt;Project status, ownership&lt;/li&gt;
&lt;li&gt;Tests, test coverage and build result&lt;/li&gt;
&lt;li&gt;«Other users»&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Презентация — &lt;a href="http://www.slideshare.net/jackiekazil/usercentered-open-source"&gt;http://www.slideshare.net/jackiekazil/usercentered-open-source&lt;/a&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Tensorflow and deep learning from Pycon 2016</title>
<guid isPermaLink="false">22</guid>
<link>https://keen.nerevar.com/all/tensorflow-and-deep-learning-from-pycon-2016/</link>
<pubDate>Tue, 05 Jul 2016 11:02:51 +0300</pubDate>
<author></author>
<comments>https://keen.nerevar.com/all/tensorflow-and-deep-learning-from-pycon-2016/</comments>
<description>
&lt;p&gt;Самый интересный доклад + воркшоп про создание нейросети на TensorFlow от Martin Gorner из Google с конференции PyCon Russia 2016.&lt;/p&gt;
&lt;p&gt;В качестве предметной области был датасет &lt;a href="http://yann.lecun.com/exdb/mnist/"&gt;mnist&lt;/a&gt; с 50к чёрнобелых изображений цифр от 0 до 9 нарисованных от руки размером 28x28px. На вход нейросетке подаётся пачка картинок из flatten pixel mask размера 28x28=784 значения по каждой картинке, на выходе получаем вероятность класса от 0 до 9, которая сравнивается с реальным значением, функция ошибки — cross entropy.&lt;/p&gt;
&lt;p&gt;Для задач классификации в качестве функции активации хорошо подходит softmax — возвращает число от 0 до 1, которое можно интерпретировать как вероятность класса.&lt;/p&gt;
&lt;pre&gt;Y = softmax(X * W + b)&lt;/pre&gt;
&lt;p&gt;где X — массив картинок, каждая кодируется массивом из 784 значений 1 или 0 по пикселям, W — веса каждого пиксела и b — константа (bias)&lt;br /&gt;
Задача нейронной сети на каждом шаге, на каждой пачке данных, подбирать оптимальные веса для каждого пикселя путём минимизации функции ошибки&lt;/p&gt;
&lt;pre&gt;cross-entropy = -sum( Y_ans_i * log(Yi) )&lt;/pre&gt;
&lt;p&gt;где Yi — предсказанное значение, Y_ans_i — реальное значение.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://keen.nerevar.com/pictures/MNIST_2016-07-04_23-05-12.png" height="600"&gt;&lt;br /&gt;
При работе с нейросетями — формируешь структуру сети, подаёшь на вход много данных и снимаешь результат. А внутри происходит магия — нейросеть сама каким-то образом выделяет закономерности. Ещё добавить к этому сложную математическую модель оптимизации, получается работа с чёрным ящиком. Поэтому разработчикам очень важно наглядно видеть результат работы. Martin написал замечательную визуализацию процесса обучения сети, где показываются графики точности, ошибки, и самих изображений цифр, на которых тестируется модель.&lt;/p&gt;
&lt;p&gt;Базовый вариант одноуровневой нейросети с 10 нейронами выдаёт 92.6% точности. Это очень мало, если учесть, что максимальная точность предсказывания для этой задачи 99.7%. Поэтому нейронку можно и нужно улучшать и оптимизировать. Первое, что можно сделать — это создать глубокую нейросеть — добавить ещё слои. При добавлении слоёв с активацией &lt;a href="http://cs231n.github.io/neural-networks-1/"&gt;ReLU&lt;/a&gt; из 200, 100, 60, 30 нейронов к базовому уровню softmax из 10 нейронов, точность возрастает до 97.2%&lt;/p&gt;
&lt;p&gt;Следующий шаг — это регулирование learning rate decay — порога изменения весов W для нахождения минимума функции ошибки. Чем меньше значение порога — тем точнее будут подбираться веса и тем больше итераций и данных нужно, чтобы выровнялась точность предсказаний. With decaying learning rate from 0.003 to 0.0001 decay_speed 2000, 10K iterations, final test accuracy equals 0.9824.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://keen.nerevar.com/pictures/scaled/Tensorflow_and_deep_learning_-_without_a_PhD_-_Google_Slides_2016-07-04_23-20-05.scaled.png" height="450"&gt;&lt;br /&gt;
Наконец, можно использовать свёрточную (convolutional) нейронную сеть для классификации картинок. В обычной нейросети каждый нейрон связан со всеми нейронами предыдущего слоя, и каждая связь имеет свой вес. В свёрточной нейросети в операции свёртки используется небольшая матрица, «окно», которое двигается по всему слою и формирует сигнал активации для нейрона на следующем уровне с соответствующей позицией. Эта матрица (окно, ядро свёртки) построена таким образом, что графически кодирует какой-либо один признак, например, наличие наклонной линии под определенным углом. Тогда следующий слой, получившийся в результате операции свёртки матрицы весов, показывает наличие данной наклонной линии в обрабатываемом слое и её координаты, формируя карту признаков (feature map)&lt;br /&gt;
Так, добавив 3 свёрточных слоя (6x6str1 5x5str2 4x4str2) к полносвязному слою relu из 200 нейронов и softmax 10, &lt;a href="https://github.com/nerevar/tensorflow-mnist-tutorial/blob/master/mnist_3.0_convolutional.py#L147"&gt;получим точность&lt;/a&gt; 99.2%&lt;/p&gt;
&lt;p&gt;Презентация — &lt;a href="http://goo.gl/pHeXe7,"&gt;http://goo.gl/pHeXe7,&lt;/a&gt; код демки — &lt;a href="https://github.com/martin-gorner/tensorflow-mnist-tutorial"&gt;https://github.com/martin-gorner/tensorflow-mnist-tutorial&lt;/a&gt;&lt;br /&gt;
Интервью на хабре с Мартином &lt;a href="https://habrahabr.ru/company/it_people/blog/303832/"&gt;https://habrahabr.ru/company/it_people/blog/303832/&lt;/a&gt; В нём он рассказывает про &lt;a href="http://tflearn.org/"&gt;TFlearn&lt;/a&gt; — высокоуровневая надстройка над TensorFlow с синтаксическим сахаром для создания моделей, которую планируется внедрить в ядро TF, а пока что можно пользоваться отдельным контрибом.&lt;/p&gt;
</description>
</item>

<item>
<title>Что нового я узнал, делая задачи или как выходить из рутины на работе</title>
<guid isPermaLink="false">15</guid>
<link>https://keen.nerevar.com/all/chto-novogo-ya-uznal-delaya-zadachi/</link>
<pubDate>Sat, 04 Jun 2016 15:28:20 +0300</pubDate>
<author></author>
<comments>https://keen.nerevar.com/all/chto-novogo-ya-uznal-delaya-zadachi/</comments>
<description>
&lt;p&gt;Под таким названием я начал вести заметку в Evernote, которой хочу поделиться в бложеке.&lt;/p&gt;
&lt;p&gt;Как-то взяв очередную задачу из трекера в работу, я вдруг заметил, что знаю как делать эту задачу. Знаю какие блоки создам. Знаю какой код будет формировать html на сервере. Знаю, какой блок за основу на клиенте, в котором есть все методы, которые мне нужны. Знаю, какие тесты буду писать на блоки. Когда код попадёт на ревью, когда вольётся в основную ветку, выкатится в прод. В задаче не осталось неизвестностей: я ясно и чётко представлял все свои действия на автомате мог это сделать не задумываясь.&lt;br /&gt;
И когда таких задач — подавляющее количество, то пропадает интерес к ним.&lt;/p&gt;
&lt;p&gt;Чтобы двигаться вперёд и развиваться, я решил фиксировать новый приобретённый опыт в заметке в Evernote. Одновременно с этим пробовать новые инструменты для работы, технологии, интересные находки в сети.&lt;/p&gt;
&lt;p&gt;Сразу скажу, что мне это не сильно помогло, но получилось очень интересно.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;23 ноября 2015 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;git ll —merges — показывает только мёрдж коммиты в ветке. Полезно для dev, чтобы не видеть миллион коммитов в фиче-бранчах&lt;/li&gt;
&lt;li&gt;grd — git rebase origin/dev, предварительно нужно сделать git fetch&lt;/li&gt;
&lt;li&gt;vh, vw, vmin, vmax — css vertical height в процентах, т. е. 100vh — 100% по высоте экрана&lt;/li&gt;
&lt;li&gt;sublime multiple selection, cursors:
&lt;ul&gt;
  &lt;li&gt;выделить что-то&lt;/li&gt;
  &lt;li&gt;нажать Cmd+D чтобы выделить следующее&lt;/li&gt;
  &lt;li&gt;нажать вправо-влево, чтобы работать с курсором&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;awk:
&lt;ul&gt;
  &lt;li&gt;вырезать вторую колонку: awk ’{print $1 $3 substr($0, index($0,$4))}’;&lt;/li&gt;
  &lt;li&gt;разделитель = ’много пробелов’: awk -vOFS=’    ’ ’{print $1,$2,$3}’;&lt;/li&gt;
  &lt;li&gt;format printf: awk ’{ printf «%-15s %-20s %s\n», $1, $3, substr($0, index($0,$4)) }’&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;написал команду, которая показывала когда кто последний раз заходил на бету — lastloguser
&lt;ul&gt;
  &lt;li&gt;for u in nerevar root needed_user; do lastloguser $u; done&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;end&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;25 ноября 2015 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;nodejs benchmark:
&lt;ul&gt;
  &lt;li&gt;&lt;a href="https://github.com/sbmaxx/bem-priv#benchmarks-results"&gt;https://github.com/sbmaxx/bem-priv#benchmarks-results&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="https://www.npmjs.com/package/benchmark"&gt;https://www.npmjs.com/package/benchmark&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="https://www.npmjs.com/package/benchtable"&gt;https://www.npmjs.com/package/benchtable&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;end&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;26 ноября 2015 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;mocha: describe.only — прогоняет тесты только из этого describe&lt;/li&gt;
&lt;li&gt;sinon stub: правильно делать так:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;methodStub = sinon.stub(window, 'method', function(params) {
    return params;
});&lt;/code&gt;&lt;/pre&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;в текущем es6 Map polyfill для nodejs не работает keys(), values(), entries()&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;3 декабря 2015 г.&lt;/b&gt;&lt;br /&gt;
Установка на чистой машинке:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;sudo apt-get install nodejs npm&lt;/li&gt;
&lt;li&gt;sudo ln -s /usr/bin/nodejs /usr/bin/node&lt;/li&gt;
&lt;li&gt;sudo npm install npm -g&lt;/li&gt;
&lt;li&gt;node update:
&lt;ul&gt;
  &lt;li&gt;curl -sL &lt;a href="https://deb.nodesource.com/setup"&gt;https://deb.nodesource.com/setup&lt;/a&gt; | sudo bash —&lt;/li&gt;
  &lt;li&gt;curl -sL &lt;a href="https://deb.nodesource.com/setup_4.x"&gt;https://deb.nodesource.com/setup_4.x&lt;/a&gt; | sudo -E bash —&lt;/li&gt;
  &lt;li&gt;sudo apt-get install -y nodejs&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;для expressjs нужен &lt;a href="https://github.com/expressjs/cookie-parser"&gt;https://github.com/expressjs/cookie-parser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;а есть ещё body-parser для тела post-запросов&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;4 декабря 2015 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Установить субмодули гита: git submodule update &lt;s&gt;init &lt;/s&gt;recursive&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;5 декабря 2015 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Есть разные версии JDK. Их можно установить все и переключать в dotfiles через JAVA_HOME: &lt;a href="http://stackoverflow.com/a/6588410/3186155"&gt;http://stackoverflow.com/a/6588410/3186155&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;iTerm2 переход по словам Alt+left, Alt+right &lt;a href="https://coderwall.com/p/h6yfda/use-and-to-jump-forwards-backwards-words-in-iterm-2-on-os-x"&gt;https://coderwall.com/p/h6yfda/use-and-to-jump-forwards-backwards-words-in-iterm-2-on-os-x&lt;/a&gt;
&lt;ul&gt;
  &lt;li&gt;Esc + b → слово назад&lt;/li&gt;
  &lt;li&gt;Esc + f → слово вперёд&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Evernote bullet hotkey Cmd+Shift+U&lt;/li&gt;
&lt;li&gt;Плагины для cordova, связывающие нативную функциональность и js: &lt;a href="https://cordova.apache.org/docs/en/latest/guide/hybrid/plugins/index.html"&gt;https://cordova.apache.org/docs/en/latest/guide/hybrid/plugins/index.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Консоль js на android: adb shell «logcat | grep ’Web Console’»&lt;/li&gt;
&lt;li&gt;ionic запустить на android девайсе: ionic run android —target=AU5LCINNAQLV4L6T&lt;/li&gt;
&lt;li&gt;ionic запустить на android эмуляторе: ionic run android —target=192.168.56.101:5555&lt;br /&gt;
8 декабря 2015 г.&lt;/li&gt;
&lt;li&gt;Проверить media query: window.matchMedia( ’@media screen and (max-width: 786px)’ ).matches&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;11 декабря 2015 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;google spreadsheets: полосатая заливка =ISEVEN(ROW())&lt;/li&gt;
&lt;li&gt;terminal zsh: Ctrl+Z —&gt; свернуть, развернуть&lt;/li&gt;
&lt;li&gt;Yandex Maps Print &lt;a href="https://github.com/nerevar/yamaprint"&gt;https://github.com/nerevar/yamaprint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Q.all, Q.defer — промисы, многопоточность&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;21 декабря 2015 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;shelljs не работает под самой последней нодой&lt;/li&gt;
&lt;li&gt;для gzip лучше не использовать параметр -c, а запускать просто без параметра output’а, чтобы gzip сам создал архив с нужным именем&lt;/li&gt;
&lt;li&gt;если selenium-grip не запускает окно браузера — то возможно запускает, просто его нет в Cmd+Tab и нужно посмотреть все открытые окна 4fingers-swipe-down&lt;/li&gt;
&lt;li&gt;vim toggle fold block — za&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;22 декабря 2015 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Метрика Первый названный бренд (Top-of-mind) — потребитель без подсказки называет определенный бренд первым&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;25 декабря 2015 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;window.URL.createObjectURL() — создаёт картинку из файла. Формат blob:&lt;hash&gt;, типа base64&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;30 декабря 2015 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;R studio:
&lt;ul&gt;
  &lt;li&gt;считать файл metroflow &lt;- read.table('metroflow.txt')&lt;/li&gt;
  &lt;li&gt;построить boxplot: boxplot(metroflow, las=1)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;end&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;2 января 2016 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;в js альтернативой php preg_match_all является str.replace(/…/g, callback)&lt;/li&gt;
&lt;li&gt;sketch векторный, нет даже eraser brush&lt;/li&gt;
&lt;li&gt;seashore basic image editor ничего так&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;7 января 2016 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;esprima, AST дерево, esprima-walk&lt;/li&gt;
&lt;li&gt;Сортировка по убыванию _.sortByOrder(array, ’rank’, ’desc’)&lt;/li&gt;
&lt;li&gt;npm i omit-deep для удаления свойств глубоко в объекте&lt;/li&gt;
&lt;li&gt;require(’glob’).sync(’images/blocks-*/**/*.js’) — возвращает массив файлов по маске&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;10 января 2016 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;gitter.im&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;12 января 2016 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;sinon fakeServer, fakeXMLHttpRequest, stub(jQuery, ’ajax’)&lt;/li&gt;
&lt;li&gt;sinon spy &amp; stub&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;14 января 2016 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;sinon.assert.calledOnce(callbackStub);&lt;/li&gt;
&lt;li&gt;AssertionError может триггерить как chai, так и sinon, а mocha ловит их&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;22 января 2016 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;npm 3 устанавливает все зависимости плоско в node_modules. Если разные версии — то в локальные node_modules&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;23 января 2016 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;чтобы добавить закоммиченный файл в .gitignore, нужно его сначала удалить git rm -rf —cached &lt;file&gt;&lt;/li&gt;
&lt;li&gt;windows bat file: переменные объявляются через SET release=jmc%1, используются через 7z.exe %release%.zip&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;25 января 2016 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;API facebook посчитать количество лайков-шеров &lt;a href="https://api.facebook.com/method/links.getStats?format=json&amp;urls=http://d3name.ru"&gt;https://api.facebook.com/method/links.getStats?format=json&amp;urls=http://d3name.ru&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;26 января 2016 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;установить npm 2: sudo npm i -g npm@2&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;29 января 2016 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;python NumPy — для работы с массивами и матрицами, статистические функции
&lt;ul&gt;
  &lt;li&gt;np.nanmedian — медиана без nan&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;python matplotlib — для построения графиков&lt;/li&gt;
&lt;li&gt;python scipy.stats — для статистических функций распределения случайных величин&lt;/li&gt;
&lt;li&gt;python pandas — DataFrame, read/write from popular formats
&lt;ul&gt;
  &lt;li&gt;понять, чо там: data.describe()&lt;/li&gt;
  &lt;li&gt;итератор: for index, row in data.iterrows():&lt;/li&gt;
  &lt;li&gt;pandas DataFrame to array: data[’Age’].tolist()&lt;/li&gt;
  &lt;li&gt;удалить NaN: data1[5:10][np.isfinite(data1[5:10][’Age’])]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;модифицировать data frame в цикле:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;for index, row in data1.iterrows():
    data1.set_value(index, 'Sex', 1 if row['Sex'] == 'male' else 0)&lt;/code&gt;&lt;/pre&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Возвратить массив фич, прогнав текст по массиву регулярок:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;def feature_vector(text):
    return map(lambda x: 1 if x.search(text) else 0, reg_arr)&lt;/code&gt;&lt;/pre&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;end&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;30 января 2016 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Сделать pycharm output шире: pandas.set_option(’display.width’, 150)&lt;/li&gt;
&lt;li&gt;Деление float без округления: c = a / float(b)&lt;/li&gt;
&lt;li&gt;Считать list из файла:
&lt;ul&gt;
  &lt;li&gt;samples = (line.decode(’utf-8’).split() for line in open(’names.txt’))&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Тернарный оператор:
&lt;ul&gt;
  &lt;li&gt;1 if row[’Sex’] == ’male’ else 0&lt;/li&gt;
  &lt;li&gt;(0, 1)[row[’Sex’] == ’male’]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Проверка подстроки в строке: if ’Mrs.’ in full_name:&lt;/li&gt;
&lt;li&gt;boxplot &lt;a href="http://blog.bharatbhole.com/creating-boxplots-with-matplotlib/"&gt;http://blog.bharatbhole.com/creating-boxplots-with-matplotlib/&lt;/a&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href="https://gist.github.com/nerevar/7ef3a840844d22ba2be5"&gt;https://gist.github.com/nerevar/7ef3a840844d22ba2be5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Сортировка в массиве по количеству вхождений элементов:
&lt;ul&gt;
  &lt;li&gt;from collections import Counter&lt;/li&gt;
  &lt;li&gt;print Counter(names).most_common()&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;end&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;7 февраля 2016 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;np.linspace — сгенерировать массив чисел по оси OX: x = np.linspace(0,4,100)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;10 февраля 2016 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;python Counter: print({k: v/100.0 for k, v in c.items()})&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;5 марта 2016 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TeX
&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://www.personal.ceu.hu/tex/cookbook.html"&gt;http://www.personal.ceu.hu/tex/cookbook.html&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="ftp://ftp.ams.org/pub/tex/doc/amsmath/short-math-guide.pdf"&gt;ftp://ftp.ams.org/pub/tex/doc/amsmath/short-math-guide.pdf&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.andy-roberts.net/writing/latex/mathematics_1"&gt;http://www.andy-roberts.net/writing/latex/mathematics_1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;end&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;14 марта 2016 г.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;nvm: добавить exports в dotfiles; nvm install 4.3.0&lt;/li&gt;
&lt;li&gt;bem-xjst online demo &lt;a href="https://clck.ru/9wcz4"&gt;https://clck.ru/9wcz4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;6 May 2016&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Python read file to string&lt;br /&gt;
return open(’static/paintings/stub.txt’, ’r’).read()&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;24 May 2016&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Python print json utf-8:&lt;/li&gt;
&lt;li&gt;json_dumps(data, ensure_ascii=False)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;25 May 2016&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Python Virtualenv:
&lt;ul&gt;
  &lt;li&gt;virtualenv mstand_venv — создать&lt;/li&gt;
  &lt;li&gt;source mstand_venv/bin/activate — активировать&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;end&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;$ virtualenv develop              # Create virtual environment
$ source develop/bin/activate     # Change default python to virtual one
(develop)$ pip install -U bottle  # Install bottle to virtual environment&lt;/code&gt;&lt;/pre&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;27 May 2016&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;replace:
&lt;ul&gt;
  &lt;li&gt;trim_dash_regex = re.compile(r’^-’, re.IGNORECASE)&lt;/li&gt;
  &lt;li&gt;trim_dash_regex.sub(’’, ‘mystring’)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;end&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;29 May 2016&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;nginx убить процесс на 80 порту:
&lt;ul&gt;
  &lt;li&gt;sudo fuser -k 80/tcp&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;end&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>


</channel>
</rss>