Рома Рыбальченко

Разработчик / аналитик. Python / Javascript.
Делаю лучше поиск Яндекса по Картинкам.

Заметки про поездку в Хуньчунь (Китай)

Рядом с Владивостоком проходит граница с Китаем, и в ближайшие города Хуньчунь и Суйфэньхэ ежедневно отправляют автобусами пачки туристов. Мы решили взять тур на 4 дня, включающий в себя дорогу, 3 ночи в китайской гостинице и оформление групповой визы. Благо на farpost.ru полно агентств. Цена тура порядка 5000р за 4-х дневный тур.

В Китай ездят, как мы поняли, чтобы накупить сумки барахла, покушать китайской еды-попить пива, а ещё в оздоровительные туры — в городе много больниц и контор с традиционной китайской медициной.
Есть небольшой набор экскурский, который гиды настойчиво впаривают туристам. Как я понял, во всех «пакетных» турах (Турция, Египет и т. п.) есть гиды, которые имеют бонус от каждой проданной экскурсии или от приведённых туристов в определённый магазин.

Поэтому мы решили исследовать город сами :)

Гугл в Китае заблокирован, даже через VPN ресурсы Гугла не открывались. Поэтому в качестве карт я использовал maps.me, где ставил отметки, а потом их перенёс в Народную карту Яндекса. При этом POI объектов на карте очень мало, тот же автовокзал нашли только благодаря такси.

WhatsApp недавно заблокировали, но, говорят, через Opera VPN под андроид можно пользоваться. Telegram работал. Facebook/Instagram заблокированы тоже. Зато работает Яндекс :)

Город Хуньчунь находится в 30 км от границы с Россией, поэтому его посещают толпы туристов, которые едут туда есть, закупаться и лечиться. И китайцы очень стараются для русских. По крайней мере стараются деньги зарабатывать. В городе на многих вывесках есть перевод на русский. Корявый местами перевод. Много китайцев знают русский (русские слова, цифры), большинство знает как минимум «спасибо», «хорошо». А вот английского как раз не знают. Но стоит отойти от туристических троп, или поехать в соседний город, как приходится играть в крокодила, чтобы донести свою мысль и угадать ответ. Помогало приложение Туристо, платное — в нём для китайского можно закачать популярные фразы для путешествий с озвучкой.

На конец сентября 2017, курс юаня по ЦБ был 8.75₽, во многих магазинах можно обменять рубли на юани. За 1000 рублей давали 110 юаней (9.09₽)

Про еду. Китай — это, конечно же, лапша и рис, со всевозможными добавками:

  • (лапша, рис) × (говядина, свинина, курица, морепродукты)

На удивление, китайцы, любители пива с шашлыком и свиными рёбрышками.
В корейских заведениях можно попробовать суп из собаки. В супермаркетах большое разнообразие всего. Хочешь конфеты со вкусом дурианом или личи — пожалуйста, 20 видов йогуртов и банок кофе и чая с соевыем молоком, которые хранятся несколько месяцев — пожалуйста, ещё удивили сосиски, куриные лапки, куриные ножки, приготовленные и запаянные в плёнку с бесконечным сроком годности — типа перекус.
В ресторанах тоже всё чётко — если обслуживает официант, то он должен внести заказ в свой смартфон, и далее расчёт происходит уже по тому, что было зафиксировано. Чаевые оставлять не принято.

Про магазины. Ощущение, что приехал на оффлайновый Алиэкспресс. Огромный выбор всего, ширпотреба по большей части. Самые низкие цены в крупных супермаркетах/подземке. Везде можно торговаться. Работают примерно с 8:30 до 17:00

Про такси. Очень дешёвое и предсказуемое такси. Поднимаешь руку, голосуешь — останавливается один из многих таксистов, при посадке включает счётчик, который за посадку считает 5 юаней, и дальше считает по километражу. Проехать через весь город — максимум 10 юаней.

Тумень, граница с Северной Кореей. Эта экскурсия у гида стоит 180 юаней. Самому можно туда поехать гораздо дешевле, если попросить загран паспорт на ресепшне гостиницы. От автовокзала ходят автобусы за 17 юаней. Главное только в кассе разобраться с иероглифами и купить нужные билеты:

  • Тумень 图们
  • Хуньчунь 珲春
  • Янцзи 延吉

Обратно в Хуньчунь последний автобус уходит в 18:15. Ух каких трудов стоило это выяснить у китайцев.
В Северную Корею идёт мост через реку Тумаган, по которой проходит граница. В городе много корейцев и корейских заведений. При этом мы не увидели ни одного русского — их видимо привозят на автобусах и через пару часов увозят.

И, напоследок, интересные места и достопримечательности Хуньчуня:

  • Центральный парк. Идти туда, как стемнеет, красивая подсветка.
  • Площадь у восточного рынка. На ней по вечерам в хорошую погоду китайцы выходят массово танцевать.
  • Монастырь Лин Бао, лежачий Будда. Был в процессе реконструкции, но посмотреть стоит. От торговой улицы можно доехать на автобусе №3 за 1ю.
  • Гора Бэйшань. Подняться на гору от монастыря. Хвойный лес, дорожки, лавочки. Очень умиротворяет после суетного города
  • Яблоневый сад. Посещать в конце сентября, есть на Народной карте.
  • 12° percent bar — хороший китайский бар, про который туристы ещё не прознали
1 октября   travel   китай

සිංහල — Сингальский язык на Шри-Ланке

На Шри-Ланке основным языком является Сингальский (Sinhala). На нём говорят примерно 16 миллионов местных жителей и знают основные фразы тысячи путешественников.

Письменный язык представляет из себя смешные круглые закорючки — හෙලෝ මිත්රයා, කොහොමද ඔයාට, а в разговорном языке есть много похожих звуков на английский, например как в слове want — /wɒ/.

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

Разговорник:

  • да — ов
  • нет — нэ
  • я — мама
  • спасибо — сту´ти
  • много — итам
    • большое спасибо — итам стути
  • пожалуйста — каруна´кара
  • как дела — ойо ко´модо
  • друг — я´лува
  • ты — о´йо
  • пока — тэрио
  • цена — ми´ля
    • сколько стоит — ки´а ми´ля
    • дорого — миля вэ´ди
    • уменьшите цену — адугара´на ми´ля
  • дайте — дэ´нна
    • дайте скидку — дэ´нна ва´ттама
    • я дам только 300 рупий — ма´ма дэ´ннама 300 рупий
  • извините — канага´ати
  • хорошо — хёнда´й
  • плохо — на´рака
  • новый, свежий — алют
  • не нужно — эпа´а
  • направо — дагуна
  • налево — wama
  • прямо — кели´
  • с новым годом — су´ба алют аюрда´г вэ´ва

Числительные:

  • 1 — эка
  • 2 — дэка
  • 3 — туна
  • 4 — ха´тара
  • 5 — паха
  • 6 — хайа
  • 7 — хата
  • 8 — ата
  • 9 — нава´йа
  • 10 — даха´йа
  • 11 — эко´лаха
  • 12 — до´лаха
  • 20 — висса
  • 40 — хатали´я
  • 50 — па´наха
  • 100 — эка сия
  • 120 — эка сия висса
  • 150 — эка сия панаха
  • 200 — дэ сия
  • 354 — тун сия панаха хатара
  • 1000 — эка да´аахай

Более подробный словарь — https://vk.com/pages?oid=-65219824&p=singalsko-russkii-slovar

2017   travel

Домашне-походная аптечка

Против аллергии:

  • цетрин в таблетках (зодак, зиртек)
  • авамис спрей для носа
  • фенистил гель от сыпи, раздражений, укусов

При травмах:

  • йод маркер
  • хлоргексидин (мирамистин, перекись водорода)
  • спасатель гель при ссадинах, ожогах, повреждениях кожи
  • вольтарен диклофенак при травмах, ушибах, синяках
  • лейкопластырь, бинт, эластичный бинт

Для пищеварения:

  • панкреатин (мезим, фестал)
  • лоперамид (имодиум, стопдиар, фуразолидон)
  • гастал от изжоги
  • смекта
  • маалокс при болях в желудке
  • энтерофурил
  • активированный уголь

Обезболивающее:

  • ибупрофен (нурофен)
  • анальгин
  • дротаверин (но-шпа)
  • алкозельцер

Жаропонижающее:

  • риниколд
  • нимесил

При давлении:

  • авиа-море от укачивания
  • андипал
  • валидол
2016   travel

Радости программиста

dos, pascal:

  • смотри, оно выполняет твой алгоритм, который запрограммировал!
  • можно работать с тем что ты ввёл, спрашивать любые числа и решать уравнения (в школе)
  • а потом даже игрушку сделать, змейку, тетрис 80x25

windows, delphi7:

  • смотри, формы, можно сделать свой калькулятор или сапёр, настоящее windows приложение!
  • если рисовать картинки-спрайты и их передвигать, то получится наколеночная версия героев 3
  • а если подключить tcp/ip и udp, то можно сделать сетевой чатик, или даже Radmin

web, php:

  • смотри, это кроссплатформенно, работает в любом браузере на любой ОС!
  • можно верстать полупрозрачности-градиенты, воплотить любой интерфейс, гораздо красивее windows controls
  • с помощью кравлеров можно спарсить весь интернет себе

web, js:

  • смотри, твой код работает на сотне серверов и миллионы пользователей каждый день пользуются твоим UI!
  • а js можно писать и на клиенте и на сервере, прикольно. Посмотрим что из этого получится
  • ios, android: теперь можно делать приложения, работающие на телефонах и планшетах: свайпы, зумы, доступ к камере, gps

mapreduce, python:

  • смотри, 15000 машинок обработают десятки терабайт данных за полчаса и выведут тебе результат!

PyCon Russia 2016

В начале июля состоялась двухдневная конференция Pycon Russia 2016 в подмосковье. До этого 3 года подряд конференция проходила в Екб.
Мне очень понравилась как организация конфы, место проведения, так и сами доклады. Как начинающего питониста, меня порадовало разнообразие тем докладов: ядро CPython, тестирование, инфраструктура, machine learning, highload.

UPD: а вот и доклады https://www.youtube.com/watch?v=sEciSlAClL8&index=1&list=PLRdS-n5seLRqszBqVDF342RMlCWgOTm6q

Краткий конспект самых интересных докладов:

Thinking about Concurrency

Two first things to learn about multithreading are fear and respect.
Доклад от разработчика языка python Raymond Hettinger’а про многопоточность. В нём сравниваются потоки и процессы (threads versus processes).
У потоков есть общий state, что является и плюсом и минусом одновременно — возникает проблема разграничения доступа потоков к общим данным. Для этого могут использоваться блокировки (locks) и флаги. Но они порождают deadlock’и и race conditions.
У процессов нет общих данных, они запускаются независимо.

from multiprocessing import Pool
n = 10
pool = Pool(processes=n)
results = pool.map(complex_operation, [x for x in range(n)])

Theano

Екатерина Тузова из Jetbrains рассказывала про применение фреймворка нейронных сетей Theano как переводчик с языка математики в программирование. Постановка задачи такая, что к программистам приходят математики с моделью, которую просят запрограммировать. Тут на помощь приходит Theano, с помощью которого можно вычислять математические выражения, содержащие многомерные массивы. Презентация — https://speakerdeck.com/ktisha/theano-lets-build-a-net

Tensorflow and deep learning

Самый интересный доклад + воркшоп про создание нейросети на TensorFlow от Martin Gorner из Google. Про это отдельный пост — https://keen.nerevar.com/all/tensorflow-and-deep-learning-from-pycon-2016/

Docker:

От евангелиста докера был обзорный доклад технологии с примерами образа, настройками и конфигами. Как собрать образ с нуля по шагам, как разворачивать, куда его выкладывать. Как известно, любая команда в докере создаёт новый слой, который отдельно кешируется, скачивается, применяется, поэтому имеет смысл объединить похожие по смыслу действия в один слой. Так получаются всего несколько слоём: 1) установка python, окружения 2) установка проектных зависимостей 3) непосредственно запуск проекта.
Презентация — https://speakerdeck.com/satyrius/deliver-python-apps-with-docker, демо — https://github.com/satyrius/paid

Neo4j graph db

Программист-олимпиадник, который очень любит графы, рассказывал про промышленное использование баз данных для хранения графов. Например на тематике фильмов и актёров он получал все фильмы, в которых снимался определённый актёр (рёбра графа) или в социальной сети с разными типами дружбы — по пользователю выборку друзей, друзей друзей, друзей друзей друзей и т.д до 6 уровней рукопожатий. Так вот для простых запросов, где нужно выбрать друзей друзей, MySQL показывает хорошие результаты. Но с увеличением уровня сложности, количества join’ов, время выполнения запросов в мускуле растёт экспоненциально. И тут на помощь приходят graph databases, предназначенные для хранения графов и работы с ними. В таких db найти друзей друзей друзей — это всего лишь найти рёбра к соседним вершинам и выполняется за линейное время. Докладчик сравнил несколько баз данных и выбрал Neo4j, к ней надстройку Cypher Query Language с SQL-подобным синтаксисом и py2neo коннектором для питона.
Презентация — https://asoldatenko.com/pyconru2016.pdf

Знай и люби свой CPython

Доклад от разработчика из компании хакеров Positive Technologies про то, как устроен интерпретатор Питона и что можно сделать в его кишках. Как в C и ASM’е можно было работать с памятью напрямую, так и в докладе показаны примеры как менять значения переменных в памяти напрямую. В python, как известно, строки неизменяемы, а если писать напрямую в память — то на основе этого можно сделать класс MutableString. Значения любых переменных, свойства встроенных типов данных, действия операндов — всё можно менять. Для изучения как оно работает, поиграться — это интересно и познавательно. Только в production не рекомендуется использовать.
Презентация — https://clck.ru/9zuvF

User-centered open source projects


Доклад на английском от Jackie Kazil из Capital One про разработку и окружение open-source проекта.
Разных библиотек на гитхабе много, а хороших — нет. Jackie привела чеклист вещей, которые должны быть в любом хорошем проекте:

  • Landing page
  • «Getting Started»
  • Install instructions (в идеале чтобы была одна строчка npm install или pip install)
  • Contribution guide
  • Responses < 24hrs
  • Clear git workflow
  • Labeled branches
  • License
  • Regular commits
  • Project status, ownership
  • Tests, test coverage and build result
  • «Other users»

Презентация — http://www.slideshare.net/jackiekazil/usercentered-open-source

2016   pycon   python

Tensorflow and deep learning from Pycon 2016

Самый интересный доклад + воркшоп про создание нейросети на TensorFlow от Martin Gorner из Google с конференции PyCon Russia 2016.

В качестве предметной области был датасет mnist с 50к чёрнобелых изображений цифр от 0 до 9 нарисованных от руки размером 28x28px. На вход нейросетке подаётся пачка картинок из flatten pixel mask размера 28x28=784 значения по каждой картинке, на выходе получаем вероятность класса от 0 до 9, которая сравнивается с реальным значением, функция ошибки — cross entropy.

Для задач классификации в качестве функции активации хорошо подходит softmax — возвращает число от 0 до 1, которое можно интерпретировать как вероятность класса.

Y = softmax(X * W + b)

где X — массив картинок, каждая кодируется массивом из 784 значений 1 или 0 по пикселям, W — веса каждого пиксела и b — константа (bias)
Задача нейронной сети на каждом шаге, на каждой пачке данных, подбирать оптимальные веса для каждого пикселя путём минимизации функции ошибки

cross-entropy = -sum( Y_ans_i * log(Yi) )

где Yi — предсказанное значение, Y_ans_i — реальное значение.


При работе с нейросетями — формируешь структуру сети, подаёшь на вход много данных и снимаешь результат. А внутри происходит магия — нейросеть сама каким-то образом выделяет закономерности. Ещё добавить к этому сложную математическую модель оптимизации, получается работа с чёрным ящиком. Поэтому разработчикам очень важно наглядно видеть результат работы. Martin написал замечательную визуализацию процесса обучения сети, где показываются графики точности, ошибки, и самих изображений цифр, на которых тестируется модель.

Базовый вариант одноуровневой нейросети с 10 нейронами выдаёт 92.6% точности. Это очень мало, если учесть, что максимальная точность предсказывания для этой задачи 99.7%. Поэтому нейронку можно и нужно улучшать и оптимизировать. Первое, что можно сделать — это создать глубокую нейросеть — добавить ещё слои. При добавлении слоёв с активацией ReLU из 200, 100, 60, 30 нейронов к базовому уровню softmax из 10 нейронов, точность возрастает до 97.2%

Следующий шаг — это регулирование 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.


Наконец, можно использовать свёрточную (convolutional) нейронную сеть для классификации картинок. В обычной нейросети каждый нейрон связан со всеми нейронами предыдущего слоя, и каждая связь имеет свой вес. В свёрточной нейросети в операции свёртки используется небольшая матрица, «окно», которое двигается по всему слою и формирует сигнал активации для нейрона на следующем уровне с соответствующей позицией. Эта матрица (окно, ядро свёртки) построена таким образом, что графически кодирует какой-либо один признак, например, наличие наклонной линии под определенным углом. Тогда следующий слой, получившийся в результате операции свёртки матрицы весов, показывает наличие данной наклонной линии в обрабатываемом слое и её координаты, формируя карту признаков (feature map)
Так, добавив 3 свёрточных слоя (6x6str1 5x5str2 4x4str2) к полносвязному слою relu из 200 нейронов и softmax 10, получим точность 99.2%

Презентация — http://goo.gl/pHeXe7, код демки — https://github.com/martin-gorner/tensorflow-mnist-tutorial
Интервью на хабре с Мартином https://habrahabr.ru/company/it_people/blog/303832/ В нём он рассказывает про TFlearn — высокоуровневая надстройка над TensorFlow с синтаксическим сахаром для создания моделей, которую планируется внедрить в ядро TF, а пока что можно пользоваться отдельным контрибом.

2016   machine learning   ml   pycon   python

3 урока ПДД, выученные за последние пару дней

До пешеходного перехода можно парковаться за 5 метров. После — хоть сразу за ним

На перекрёстке тоже лучше парковаться за 5 метров от пересечения дорог или закругления

Если на узкой дороге сплошная разделительная линия, то при парковке до сплошной должно оставаться 3м (примерно ширина одной полосы), чтобы машину можно было объехать

2016  

Книга «Кирпичи 2.0»

Ещё в институте я был в восторге от рассказа «Кирпичи». Это история о Сергее Резвее — обыкновенном человеке с обыкновенной офисной работой. У него не было интересов и целей в жизни, друзей, девушки, уважения коллег и казалось, что жизнь не удалась. И вот в один прекрасный момент он смотрит на себя со стороны (ему показывают на это), находит силы изменить себя, и действительно меняет. История повествует о том, как главный герой строит свою жизнь, кирпичик за кирпичиком, со взлётами и падениями. В итоге получилась увлекательная и мотивирующая история из серии «смотри, чего можно достичь, если отдерешь пятую точку от дивана и перестанешь быть лодырем».

Неожиданно нашёл у Манн-Иванов-Фербер вторую версию кирпичей.
В книге описываются те же события, та же история, только подробнее и длиннее. Видно, что изменился автор за больше чем 10 лет, и в книге встречается много вставок и моралей жизни из заурядных книг по мотивации о картине мира, о том как нужно жить, как ставить себе цели. Помимо личностного роста, новых друзей и личной жизни, главный герой обзаводится джентльменским набором: бросил пить, курить, стал ходить в тренажёрный зал, на рукопашный бой, выучил английский язык, получил права.
Но книга очень увлекает и читается на «одном» дыхании: я её читал в метро по дороге на работу и с нетерпением ждал вечера, чтобы снова вернуться к рассказу.

Цитаты

Жизнь — череда маленьких и больших стимулов, между которыми путь. Путь к цели. Есть цель. Есть стимул добиться её. Если стимул перевешивает лень и неохоту, то мы движемся к цели.

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

— Собираюсь записаться на курсы ораторского искусства. Буду ходить после работы, три раза в неделю.
— А это еще зачем?
— Чтобы говорить красиво.
— Цицерон, блин, — улыбнулся Леха. — Меня бы попросил, я бы тебе эти месячные курсы в два занятия уложил. На «стрелке» был когда-нибудь?
— Слава богу, не приходилось.
— Вот там ораторское мастерство оттачивается ускоренными темпами, а излишнее красноречие, по сути пустословие и болтовня, заменяется логикой и уверенностью. Ты знаешь, есть такие мужики: влегкую докажут тебе, что черное — это красное. И ты согласишься.

Если вы читали первую часть, то вторую можно не читать. А если нет — то тогда начать со второй книге, тем более она есть в интернетах и даже на Самиздате

2016   books

Подборка докладов и видеолекций про БЭМ и фронтенд в Яндексе

В Яндексе есть огромное количество докладов про технологии, инструментов и фреймворков фронтенда. Большая часть из которых содержит NDA информацию и доступна только сотрудникам. Но много людей выступают на открытых конференциях и рассказывают про внутренние технологии.

Этот список докладов и выступлений, доступных извне, я подбирал для новых разработчиков интерфейсов в Яндекс.Картинках, чтобы у них появилось представление о том, как всё внутри устроено. Он не претендует на полноту, но затрагивает большие ключевые аспекты работы разработчика интерфейсов.

Про БЭМ:

Прикладное, про разработку:

Общее:

Доклады с Школы Разработки Интерфейсов
Ну и главное, официальный сайт БЭМ: http://ru.bem.info/

Что нового я узнал, делая задачи или как выходить из рутины на работе

Под таким названием я начал вести заметку в Evernote, которой хочу поделиться в бложеке.

Как-то взяв очередную задачу из трекера в работу, я вдруг заметил, что знаю как делать эту задачу. Знаю какие блоки создам. Знаю какой код будет формировать html на сервере. Знаю, какой блок за основу на клиенте, в котором есть все методы, которые мне нужны. Знаю, какие тесты буду писать на блоки. Когда код попадёт на ревью, когда вольётся в основную ветку, выкатится в прод. В задаче не осталось неизвестностей: я ясно и чётко представлял все свои действия на автомате мог это сделать не задумываясь.
И когда таких задач — подавляющее количество, то пропадает интерес к ним.

Чтобы двигаться вперёд и развиваться, я решил фиксировать новый приобретённый опыт в заметке в Evernote. Одновременно с этим пробовать новые инструменты для работы, технологии, интересные находки в сети.

Сразу скажу, что мне это не сильно помогло, но получилось очень интересно.

23 ноября 2015 г.

  • git ll —merges — показывает только мёрдж коммиты в ветке. Полезно для dev, чтобы не видеть миллион коммитов в фиче-бранчах
  • grd — git rebase origin/dev, предварительно нужно сделать git fetch
  • vh, vw, vmin, vmax — css vertical height в процентах, т. е. 100vh — 100% по высоте экрана
  • sublime multiple selection, cursors:
    • выделить что-то
    • нажать Cmd+D чтобы выделить следующее
    • нажать вправо-влево, чтобы работать с курсором
  • awk:
    • вырезать вторую колонку: awk ’{print $1 $3 substr($0, index($0,$4))}’;
    • разделитель = ’много пробелов’: awk -vOFS=’ ’ ’{print $1,$2,$3}’;
    • format printf: awk ’{ printf «%-15s %-20s %s\n», $1, $3, substr($0, index($0,$4)) }’
  • написал команду, которая показывала когда кто последний раз заходил на бету — lastloguser
    • for u in nerevar root needed_user; do lastloguser $u; done

25 ноября 2015 г.

26 ноября 2015 г.

  • mocha: describe.only — прогоняет тесты только из этого describe
  • sinon stub: правильно делать так:
methodStub = sinon.stub(window, 'method', function(params) {
    return params;
});
  • в текущем es6 Map polyfill для nodejs не работает keys(), values(), entries()

3 декабря 2015 г.
Установка на чистой машинке:

4 декабря 2015 г.

  • Установить субмодули гита: git submodule update init recursive

5 декабря 2015 г.

  • Есть разные версии JDK. Их можно установить все и переключать в dotfiles через JAVA_HOME: http://stackoverflow.com/a/6588410/3186155
  • iTerm2 переход по словам Alt+left, Alt+right https://coderwall.com/p/h6yfda/use-and-to-jump-forwards-backwards-words-in-iterm-2-on-os-x
    • Esc + b → слово назад
    • Esc + f → слово вперёд
  • Evernote bullet hotkey Cmd+Shift+U
  • Плагины для cordova, связывающие нативную функциональность и js: https://cordova.apache.org/docs/en/latest/guide/hybrid/plugins/index.html
  • Консоль js на android: adb shell «logcat | grep ’Web Console’»
  • ionic запустить на android девайсе: ionic run android —target=AU5LCINNAQLV4L6T
  • ionic запустить на android эмуляторе: ionic run android —target=192.168.56.101:5555
    8 декабря 2015 г.
  • Проверить media query: window.matchMedia( ’@media screen and (max-width: 786px)’ ).matches

11 декабря 2015 г.

  • google spreadsheets: полосатая заливка =ISEVEN(ROW())
  • terminal zsh: Ctrl+Z —> свернуть, развернуть
  • Yandex Maps Print https://github.com/nerevar/yamaprint
  • Q.all, Q.defer — промисы, многопоточность

21 декабря 2015 г.

  • shelljs не работает под самой последней нодой
  • для gzip лучше не использовать параметр -c, а запускать просто без параметра output’а, чтобы gzip сам создал архив с нужным именем
  • если selenium-grip не запускает окно браузера — то возможно запускает, просто его нет в Cmd+Tab и нужно посмотреть все открытые окна 4fingers-swipe-down
  • vim toggle fold block — za

22 декабря 2015 г.

  • Метрика Первый названный бренд (Top-of-mind) — потребитель без подсказки называет определенный бренд первым

25 декабря 2015 г.

  • window.URL.createObjectURL() — создаёт картинку из файла. Формат blob:, типа base64

30 декабря 2015 г.

  • R studio:
    • считать файл metroflow <- read.table('metroflow.txt')
    • построить boxplot: boxplot(metroflow, las=1)

2 января 2016 г.

  • в js альтернативой php preg_match_all является str.replace(/…/g, callback)
  • sketch векторный, нет даже eraser brush
  • seashore basic image editor ничего так

7 января 2016 г.

  • esprima, AST дерево, esprima-walk
  • Сортировка по убыванию _.sortByOrder(array, ’rank’, ’desc’)
  • npm i omit-deep для удаления свойств глубоко в объекте
  • require(’glob’).sync(’images/blocks-*/**/*.js’) — возвращает массив файлов по маске

10 января 2016 г.

  • gitter.im

12 января 2016 г.

  • sinon fakeServer, fakeXMLHttpRequest, stub(jQuery, ’ajax’)
  • sinon spy & stub

14 января 2016 г.

  • sinon.assert.calledOnce(callbackStub);
  • AssertionError может триггерить как chai, так и sinon, а mocha ловит их

22 января 2016 г.

  • npm 3 устанавливает все зависимости плоско в node_modules. Если разные версии — то в локальные node_modules

23 января 2016 г.

  • чтобы добавить закоммиченный файл в .gitignore, нужно его сначала удалить git rm -rf —cached
  • windows bat file: переменные объявляются через SET release=jmc%1, используются через 7z.exe %release%.zip

25 января 2016 г.

26 января 2016 г.

  • установить npm 2: sudo npm i -g npm@2

29 января 2016 г.

  • python NumPy — для работы с массивами и матрицами, статистические функции
    • np.nanmedian — медиана без nan
  • python matplotlib — для построения графиков
  • python scipy.stats — для статистических функций распределения случайных величин
  • python pandas — DataFrame, read/write from popular formats
    • понять, чо там: data.describe()
    • итератор: for index, row in data.iterrows():
    • pandas DataFrame to array: data[’Age’].tolist()
    • удалить NaN: data1[5:10][np.isfinite(data1[5:10][’Age’])]
  • модифицировать data frame в цикле:
for index, row in data1.iterrows():
    data1.set_value(index, 'Sex', 1 if row['Sex'] == 'male' else 0)
  • Возвратить массив фич, прогнав текст по массиву регулярок:
def feature_vector(text):
    return map(lambda x: 1 if x.search(text) else 0, reg_arr)

30 января 2016 г.

  • Сделать pycharm output шире: pandas.set_option(’display.width’, 150)
  • Деление float без округления: c = a / float(b)
  • Считать list из файла:
    • samples = (line.decode(’utf-8’).split() for line in open(’names.txt’))
  • Тернарный оператор:
    • 1 if row[’Sex’] == ’male’ else 0
    • (0, 1)[row[’Sex’] == ’male’]
  • Проверка подстроки в строке: if ’Mrs.’ in full_name:
  • boxplot http://blog.bharatbhole.com/creating-boxplots-with-matplotlib/
  • Сортировка в массиве по количеству вхождений элементов:
    • from collections import Counter
    • print Counter(names).most_common()

7 февраля 2016 г.

  • np.linspace — сгенерировать массив чисел по оси OX: x = np.linspace(0,4,100)

10 февраля 2016 г.

  • python Counter: print({k: v/100.0 for k, v in c.items()})

5 марта 2016 г.

14 марта 2016 г.

  • nvm: добавить exports в dotfiles; nvm install 4.3.0
  • bem-xjst online demo https://clck.ru/9wcz4

6 May 2016

  • Python read file to string
    return open(’static/paintings/stub.txt’, ’r’).read()

24 May 2016

  • Python print json utf-8:
  • json_dumps(data, ensure_ascii=False)

25 May 2016

  • Python Virtualenv:
    • virtualenv mstand_venv — создать
    • source mstand_venv/bin/activate — активировать
$ 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

27 May 2016

  • replace:
    • trim_dash_regex = re.compile(r’^-’, re.IGNORECASE)
    • trim_dash_regex.sub(’’, ‘mystring’)

29 May 2016

  • nginx убить процесс на 80 порту:
    • sudo fuser -k 80/tcp
Ctrl + ↓ Ранее