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

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

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

На Шри-Ланке основным языком является Сингальский (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

Let’s Encrypt: как получить и настроить бесплатный SSL сертификат для своего сайта

Вообщем-то хорошо написано в этой статье http://blog.amet13.name/2015/11/letsencryptorg.html
Но я продублирую свой опыт.

Итак, Let’s Encrypt https://letsencrypt.org/ — это некоммерческий проект, стартовавший в 2014, и поставивший своей целью обеспечить всех желающих владельцев доменов бесплатными SSL-сертификатами. На данный момент сертификат на свой сайт может установить любой желающий.

Для этого на linux сервере нужно выполнить ряд команд:

  • Скачать скрипт установки letsencrypt
$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt

  • Запустить его с параметрами:
$ ./letsencrypt-auto --agree-dev-preview --server \https://acme-v01.api.letsencrypt.org/directory -a manual auth
  • После проверки, что вы владелец сайта, сгенерируются сертификаты:
- Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/nerevar.com/fullchain.pem. Your cert will
   expire on 2016-11-01. To obtain a new or tweaked version of this
   certificate in the future, simply run letsencrypt-auto again. To
   non-interactively renew *all* of your certificates, run
   "letsencrypt-auto renew"
  • Выглядят они так:
root@z0mg:/etc/letsencrypt/live/nerevar.com# ls -l
total 0
lrwxrwxrwx 1 root root 35 мая    7 07:44 cert.pem
lrwxrwxrwx 1 root root 36 мая    7 07:44 chain.pem
lrwxrwxrwx 1 root root 40 мая    7 07:44 fullchain.pem
lrwxrwxrwx 1 root root 38 мая    7 07:44 privkey.pem

  • И теперь нужно в конфиге nginx включить поддержку ssl:
server {
    server_name nerevar.com;
    root /home/nerevar/www/nerevar.com;

    listen 443 ssl;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/nerevar.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/nerevar.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!MD5;
}

  • Обновление сертификатов:
./letsencrypt-auto --server \https://acme-v01.api.letsencrypt.org/directory renew
sudo service nginx reload
2016   domains   https   server   ssl
Ctrl + ↓ Ранее