5 заметок с тегом

яндекс

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

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 машинок обработают десятки терабайт данных за полчаса и выведут тебе результат!
2016   frontend   js   programming   python   яндекс

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

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

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

Про БЭМ:

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

Общее:

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

2016   bem   frontend   js   о работе   яндекс

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

Под таким названием я начал вести заметку в 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
2016   js   python   о работе   яндекс

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2015   о работе   яндекс

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

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

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

2015   о работе   Работа   яндекс