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