Аналитик-разработчик в Алисе

Позднее Ctrl + ↑

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, а пока что можно пользоваться отдельным контрибом.

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

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

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

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

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

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

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

Цитаты

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

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

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

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

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

В Яндексе есть огромное количество докладов про технологии, инструментов и фреймворков фронтенда. Большая часть из которых содержит 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 сертификат для своего сайта

Теперь есть новая-кленовая штука для получения и обновления сертификатов — https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx


Вообщем-то хорошо написано в этой статье 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

Does facebook know you better than you know yourself?

С таким провокационным заголовком я нашел интересный проект You Me We, который получает открытые данные с фэйсбука и представляет их в виде опросника о себе и своих френдах.

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

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

При этом видимая часть сетевой деятельности, будь то таймлайн на фейсбуке, стена вконтакте, холивар в комментариях на хабре или фотографии из инстаграма — это лишь верхушка айсберга. Интерфейс заточен под основную задачу сервиса, будь то создание или потребление контента. А за этим скрываются поразительные social graphs; на основе лайков можно понять интересы человека; по количеству и качеству связей с друзьями увидеть сообщества и связи в них; с помощью predictive analys увидеть поведение человека; и не говоря уже о рекламных возможностях, которые предлагают действительно то, что нужно и актуально.

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

Facebook и VK дают инструменты и возможности для исследований и проверки гипотез, которые раньше было невозможно (или не нужно) получить. Например исследователи из Стендфорда создали алгоритм предсказания интересов и поведения человека на основе его лайков на фейсбуке:

In the end, the researchers found that with information on just ten Facebook “Likes,” the algorithm was more accurate than the average person’s colleague. With 150 “Likes,” it could outsmart people’s families, and with 300 “Likes,” it could best a person’s spouse.

Теперь про сам сервис-приложенько.

К сожалению, в новой версии API Facebook убрал доступ к друзьям и их данным, что являлось основой этого проекта. Меня эта идея заинтересовала, и, разобравшись с Вконтактовским Open API сделаю свою версию YouMeWe у себя, где можно авторизоваться через ВК и поиграться с приложением увидеть срез своих друзей.

Facebook API очень ограничен — из того, что можно сделать легко — это вход на сайт через FB. Шаг вправо, шаг влево — нужно проходить модерацию приложение, запрашивать конкретные права для приложения. Вконтакте API отличается своей щедростью: есть доступ практически ко всему: контент на стене, записи, фото, видео, аудио, друзья, группу, места, да что всё угодно.

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

RTFM. Как создать сервисную IT-компанию

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

При работе с проектами с высокой неопределенностью, да и вообще любыми, наверное, проектами:

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

Не браться за много дел одновременно

Надкусывание задач — самый страшный грех производства. Задачу начали делать, потом пришла следующая, начали делать ее. Не успели закончить, звонит пользователь, у него что-то еще более срочное — все бросили, стали помогать ему. Потом еще что-то случилось. Отложенные раньше задачи так и остаются недоделанными — трудились много, а результат нулевой.

Перед руководителем здесь стоят три задачи: максимизировать количество завершенных дел, минимизировать объем незавершенки, и потратить на это минимум своих собственных усилий. В данном случае для этого нужно, всего лишь, не тратить силы попусту, то есть не создавать эту самую незавершенку. Делать не то дело, которое только что появилось, свеженькое, требующее внимания, а то, которое больше других продвинулось к стадии готовности. Выбирать то дело, у которого максимальный «процент выполнения», и делать его.

Стартап versus энтерпрайз

Можно и нужно выработать баланс между пунктуальностью и аккуратностью с одной стороны и самостоятельностью и результативностью с другой. Одно без другого не очень работает — без аккуратности не получишь нужного результата, а без результативности — зачем аккуратность?

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

Важно, чтобы мы были разными и дополняли друг друга. Один дает аккуратность, точность и пунктуальность, другой — творчество, самостоятельность и результативность. При этом, у первого тоже есть и творчество и самостоятельность — просто специализируется он больше на аккуратности, так же как и второй специализируется на результативности, но способен и на проявления аккуратности. А вместе мы способны и на то и на другое.

Рост и развитие.

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

Потом рост заканчивается, вы выходите на плато. Все ваше время и силы теперь уходят не на развитие, а на рутину, текущие задачи, в решении которых вы уникальны. Развитие останавливается, начинается стагнация.

Но плато — это не так уж и плохо. Плато — это тот момент, когда нужно закрепить результаты роста. В первую очередь, выйдя на плато нужно систематизировать накопленные знания и навыки. Пока идет быстрый рост, знания и навыки набираются наобум, формируется огромная помойка из информации, опыта, умений. Вы многое можете сделать, но не можете объяснить, как вы это делаете. Систематизация знаний позволяет начать учить других тому, чему вы сами уже научились. В результате, люди рядом тоже начинают бурный рост:

По мере того, как люди рядом растут, можно начинать передавать им свои дела. Это высвобождает силы и время для нового этапа развития, позволяет вам снова начать бурный рост уже в новой области:

Март 2015

Что же было, что появилось:

  • Аштанга-виньяса с Катей, в Яндексе
  • Йога: семинары Открытый мир, йога Прана здоровье
  • Сансара
  • Encounter-встречи
  • Книга «Теряя невинность» Бренсона
  • Тренинг про силу воли
  • Страдания про «не нахожу себе место на работе»
  • Танго, милонга
  • Мануальный терапевт, массаж
  • Просыпаться рано

Просыпаться по-раньше это...

☺ когда появляется свободное время вечером.
☺ когда есть немного времени утром: на зарядку, йогу, завтрак
☺ заряд бодрости и энергии в первой половине дня
☺ вкусный завтрак в столовой Яндекса
☺ полупустой офис, никто не отвлекает, можно попрограммировать
☺ можно сконцентрироваться на программировании
☺ плюсик к силе воли — у меня и сегодня получилось рано встать!

☹ заставить себя встать с кровати в 7:30, когда раньше это было 10:00
☹ толпы людей в метро
☹ когда к вечеру уже сонный

Ранее Ctrl + ↓