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

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

Под таким названием я начал вести заметку в 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
Отправить
Поделиться