Что нового я узнал, делая задачи или как выходить из рутины на работе
Под таким названием я начал вести заметку в 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 г.
- nodejs benchmark:
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 г.
Установка на чистой машинке:
- sudo apt-get install nodejs npm
- sudo ln -s /usr/bin/nodejs /usr/bin/node
- sudo npm install npm -g
- node update:
- curl -sL https://deb.nodesource.com/setup | sudo bash —
- curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash —
- sudo apt-get install -y nodejs
- для expressjs нужен https://github.com/expressjs/cookie-parser
- а есть ещё body-parser для тела post-запросов
4 декабря 2015 г.
- Установить субмодули гита: git submodule update
initrecursive
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 г.
- API facebook посчитать количество лайков-шеров https://api.facebook.com/method/links.getStats?format=json&urls=http://d3name.ru
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 г.
- TeX
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