вторник, 15 ноября 2016 г.

Mysql mass insert

Обычная задача, вставить стопицот миллион записей в mysql.

Так как записи нужно особым образом обрабатывать. то через load data их незагрузишь.

Что приходит в голову первым делом для упрощения вставки, для её ускорения?

Ну prepared statements, окей, делаем:



stmt1, err := db.Prepare("INSERT IGNORE INTO table (a1,a2) VALUES (?,?)")
if err != nil {
  log.Fatalf("mysql: %s", err)
}

for scanner.Scan() {
...
_, err := stmt1.Exec(a1, a2)
if err != nil {
  log.Fatal(err)
}
}
Понятный логичный код. Делал так всю жизнь, привык.

Результат для 64446 записей -  10 минут. Ужас.

Второй вариант, лепим огроменный запросище, клеим его на лету в строку, жрем память, и потом шлем в mysql


sqlStr := "INSERT INTO cats1 (name,url) VALUES "
vals := []interface{}{}
for scanner.Scan() {
..
  sqlStr += "(?,?),"
  vals = append(vals, a1, a2)
}
sqlStr = sqlStr[0 : len(sqlStr)-1]
stmt1, err := db.Prepare(sqlStr)
if err != nil {
  log.Fatalf("mysql: %s ", err)
}
_, err = stmt1.Exec(vals...)
if err != nil {
  log.Fatal(err)
}

Даже выглядит отвратительно, результат для этих же записей - 5 секунд.

Жизнь боль, да.

среда, 2 ноября 2016 г.

golang crossplatform compilation

Я понемногу, когда доходят руки переписываю разные системные утилиты с перлов и питонов на golang.

Конечно ж не специально, то что не сломано я не чиню почти никогда.

Но если работа требует внести изменения в скрипт. то скорее всего я его перепишу на go.

У меня до сих пор довольно много зоопарка в продакшене, включая фряхи всех видов и сортов.

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

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

И конечно ж, теперь работает, причем работает, ну жесть как просто.
env GOOS=freebsd GOARCH=amd64 go build -v
и вперед.
Потестировал уже у себя в разных вариантах и где собирать и для чего собирать.

Просто супер,  еще целую пачку скриптов смогу при желании заменить.


Больше подробностей есть по этой ссылке http://dave.cheney.net/2015/08/22/cross-compilation-with-go-1-5

вторник, 6 сентября 2016 г.

Golang дотянулся и до меня

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

Конечно же, я всё ещё новичок с очень поверхностным взглядом, и с частичным пониманием.

Но разве ж это мне помешает поделиться кое какими впечалениями.

1. Порой компиляция это прекрасно.

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

В этом смысле очень оценил компилятор который хоть немножко для тебя старается.

2. Скорость, тысяча чертей.

И вправду прекрасна. Причем любая. И компиляции и исполнения.

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

А тут переписал на golang, в рамках другого проекта, и черт возьми,  как же прекрасно стал он работать.

3. Вечные стоны про отладчик

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

4. Зависимости и вендоринг.

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

5. Обработка ошибок.

Я понимаю идею, заставить нас их обрабатывать, и даже поддерживаю её.
Но мой код быстро превращается в лестницу из if-ов

if err ! ... {
  ...
  bla, err : = my...
  if err ! ... {
Наверняка как то это решено в мире go, но я не дошел до понимания, киньте статьей чтоль.

6. vim-go

vim-go как тулинг меня вполне устроил, форматирования, подсказки, окно ошибок, всё ок.
Очень приятное впечатление, и особенно приятно что можно начать немедленно, на фоне последней мой неудачи со Scala.

7. Freebsd

Фрях у меня ещё полно в хозяйстве, а кросс-компиляцию в фряху я чего то не освоил сходу. Это меня довольно сильно ограничвает в возможностях внедрять новые скрипты.
Есть советы?


Вот, пока совсем немножко. Но зато я теперь более чем уверен, что всякие мелкие штуки которые раньше на перле и питоне писал, буду время от времени на golang писать.

воскресенье, 4 сентября 2016 г.

Scala, исповедь неудачника и немного про тулинг (от слова tool)


В очередной раз я делаю неудачный заход на курс Мартина Одерски по Scala.
Не то что б я планировал на скале писать, но его очень хвалят, и поэтому хочется объять для расширения кругозора и гибкости ума.

И вот опять. видимо этой самой гибкости мне не хватает.

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

Вся эта их инсталяция тулинга скалы похоже на дурную шутку.
Там видео, в котором паузы убраны длится 22 минуты.

Они ставят sbt, intellij idea, и какой то  плагин к идее.
Я повторяю всё это за ними. Повторял трижды!
Там есть видео, есть текстовая версия, ошибиться вроде бы негде.

Продравшись через всю эту чертову инсталяцию и запуск идеи.

А, я теперь понимаю почему оно спрашивает "Точно хотите закрыть идею", да. Перезапуск конкретно крадёт у вас от рабочего дня.

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

Пройдя всё это, я получаю отличный от авторов курса результат.

Ну вот анекдот, они могут на исполнение запускать программу, а я нет.
Компилировать могу, и во время компиляции хелло ворд вполне можно перерыв для тениса делать, а вот запускать никак.

Никакие самостоятельные копания в настройках этого ада мне не помогли.

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

Эмм, это просто изумительный результат.

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

Первый из гугловых результатов по "vim scala"
http://vimawesome.com/plugin/vim-scala указывает  на 502 Bad Gateway, что видимо должно намекнуть.

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

Такое вот нытьё. Куда ж его как не в персональный бложек то? Самое место!

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

Он что, у них такой же? Закрыл IDE, и всё, смело иди в поликлинику очередь занимай, а компиляция проекта повод для отпуска?

Я то не сталкиваюсь почти никогда, прямо слушал и верил, тулинг там, все дела, лучший в мире.

А теперь вот и поверить сложно.



среда, 10 августа 2016 г.

Ввод диакритических символов без установки раскладок клавиатуры.

Немного тут балуюсь с испанским, и довольно часто приходися вводить их символы который в латинском и кириллическом алфавите отстуствуют.

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

Две раскладки уже автоматически, а третья ломает всю работу.

Да и мучаться ради нескольких символов которые изредка нужны целыми днями не хочется.

На помощь как всегда приходит compose!

setxkbmap -layout 'us,ru(winkeys)' -option 'grp_led:scroll,altwin:super_win,grp:menu_toggle,compose:ralt'

Решает проблему легко и изящно.

Теперь нажимаем правый alt, апостроф и e и получаем é
Или правый alt, тильду и n и получаем ñ.

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

Пользуясь случаем рекомендую свой бложек где я теперь буду пытаться на испанском писать:  http://unrusosalvaje.blogspot.ru/
 

четверг, 7 июля 2016 г.

Немного магии: git --assume-unchanged

Git, как и vim можно использовать десятилетиями и вдруг заметить новую полезную команду.

Со мной это довольно регулярно происходит.

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

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

И оказалось есть путь получше:

Игнорировать изменения файла:
git update-index --assume-unchanged my/super/file

Вернуть его в строй:
git update-index --no-assume-unchanged

Просмотреть список таких:
git ls-files -v | grep "^[[:lower:]]"


Сплошное удовольствие.

четверг, 10 марта 2016 г.

Курс на Stepic: Hadoop. Система для обработки больших объемов данных

Закончил  курс по hadoop на stepic.

Интересно, и для меня ново.

До этого хадупить не приходилось, но хотелось.

Курс хорош: и теория, и практика, и обзор сопутствующих технологий, spark, hbase, cassandra и т.д.

Опять таки понял, что курс с дедлайнами и штрафами за позднее выполнение - то что мне нужно. Дисциплина и дисциплина.

В итоге я даже оценку в 100% получил.

У stepic тем временем появилось мобильное приложение. Тесты на нём пока ещё не порешаешь, но для лекций уже очень ок.

Горю теперь желанием обработку логов организовать на spark.

А, да, ещё особенно надо похвалить автора курса за его участие в комментариях.

Прямо ощущение присутствия, любой вопрос отвечен, да ещё как отвечен.

Из мелких минусов - stepic не потянул организовать кластер hadoop для приема заданий, поэтому сдавали на муляже.

Ну это легко можно пережить.

Lack of disposable infrustructure

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

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

И в этом смысле Digital Ocean довольно не плохой союзник.
Годами дроплеты работают без выключения.



Как вдруг мониторинг фиксирует пропадание одного сервера, я иду посмотреть чего там и вижу.
Что power off события нет, но он таки выключен.


Снимок с vnc экрана.

Ну включил, проверил почту, почитал даже папки со спамом, тишь да гладь. Предупреждений нет.

Буду считать намекнули мне.

среда, 9 марта 2016 г.

Прыгнуть с обрыва: Firefox && Group Tabs.

Говорят, что функцией panorama, или группами вкладок пользовалось очень мало юзеров.

Для меня же, она была единственной killer feature что привела на firefox, и удерживала на нём.

Возможность легко, по хоткею, сменить набор из двадцати одних вкладок на пятьдесят других с нулевым временем ожидания, и иметь десяток таких наборов - просто бесценна.

И вот, её выпилили.

Я целое утро пытаюсь придумать, для чего, хотя бы теоретически теперь нужен firefox, и не могу.

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

Но был смысл потерпеть.

А теперь?


Подскажите, что вы такого в firefox видите, чего нет например в chrome.

вторник, 8 марта 2016 г.

Лучше поздно чем никогда (apt/pkg)

Неужели я дождался!

Apt теперь сам удаляет загруженные deb пакеты после их удачной установки.

Осталось дождаться автоматического запуска autoremove после purge/remove, и мы сможем назвать apt зрелым и удобным инструментом.

Конечно же шучу. Apt прекрасен.

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

Возьмём например новый, переписанный с учетом вех ошибок фряшный pkg, и посмотрим на такое художество:

 
Для установки vim предлагается удалить puppet.
Действительно, почему бы и нет.

Но все равно все там будем.
Pkg немножко навязывают:

Хотя, плюсы у него действительно есть,
- он чертовски быстр, я просто никогда не ожидаю такой быстроты как он работает.
- система команд понятна
- встроенный аудит

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


Ansible 2.0 - зря переживали

После продажи ansible я многократно встречал в сети посты в духе "всё пропало", или похоронят или испортят.

И вот пришёл тот момент когда я обновился на новую версию, и вижу что всё наоборот.

Не испортили а улучшили.

Мне очень понравились новые "советы" которые ansible-playbook выдает при выполнении:



Понравились новый стратегии выполнения. Уже приносят кучу радости.

Ну и определенно нужно будет попереписывать роли под новые блоки и инклуды.

четверг, 4 февраля 2016 г.

Не все переводы одинаково полезны


Обнаружил тут в выводе git шедевры.

Я прям не знаю, стоило ли трудится?
Вопрос даже не в кривом переводе, а вообще в локализации такого.

Это ж не офисная прога, аудитория специфическая.

Другой пример, когда я страдал от локализации -  аptitude.
В какой то момент, она принимала отвеы и по английски и по русски.
Ну т.е. Y= yes. Н = нет.
А вы знали что латинская буква Y и русская Н на одной клавише?
Случайность, но очень вкусная.

понедельник, 18 января 2016 г.

Курс на edx HTML5 Part 2: Advanced Techniques for Designing HTML5 Apps

Прошёл вторую часть курса по html5 от w3c на edx.

Начиналось, довольно вяло, первую часть копались в каких то низкоуровневых деталях audio api - буферах, дискретизации и прочем шлаке.

Я за двадцать последних лет таких задач не имел, и вероятнее всего в следующие 20 тоже не буду иметь, поэтому не смог себя заставить и даже провалил опрос.

Зато потом пошла самая настоящая мякотка.

Html5 templating, web components и прочее, что немедленно хочется взять и попробовать.

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

Для меня было удивлением что даже обычный template уже без js не сможешь использовать. Что то в этом мне таки не нравится.

Конечно ж, мой заваленый опрос про multimedia api лишил меня сертификата (хнык-хнык 2% не хватило, одного правильного ответа).



Но зато я получил несколько отличных идей для верстки.

Обязательно переверстаю пару своих проектов на веб компоненты.

Курс однозначно рекомендую.

среда, 9 декабря 2015 г.

Курс: React от А до Я

В рамках импортозамещения в mooc, прошел курс React от А до Я от украинского сервиса smartme.university.

Я до этого с react уже был очень шапочно знаком.

Буквально несколько статей прочёл общего плана.

Надо сказать, что после окончания курса я способность уверено писать на react не получил.

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

В целом я бы курс оценил неплохо, сказажем на 4 из 5.

Некоторые темы мне показались "без начала и конца".



Из забавного (как всегда в мире javascript) вчерашняя документация уже depricated.

Мне такое непривычно.

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

То что платформа украинская никак мне не помешало, хотя языком я и не владею.

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

Главный результат, это то, что захотелось написать на react какой-нибудь проект, и  я обязательно попробую.

вторник, 8 декабря 2015 г.

Курс на edx: HTML5 Coding Essentials and Best Practices

Закончил очередной курс на edx.org
Первая часть про html5.

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

Борюсь с этим как могу.

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

Курс довольно легкий, что там может быть сложного в html то, но я рад что в одном месте всё упомянуто и перечислено.


Из интересного:

Всё таки темп жизни теперь и в html как в javascript, ну типа "двенадцать лучших новых фреймворков уходящей недели".

Тоже самое и здесь. Например курс менее чем месячной давности учит как делать cache manifest и ссылается на доку.

А в в доке написано, не используйте это,  оно устарело:

Но я таки решил попробовать всё равно, и жутко на этом обжегся.

Бог с ним что устарело, авторы слегка забыли упомянуть важную штуку:


Поэтому добавив manifest в общий шаблон - будете как и я страдать и удивляться, как так страницы закешировались которые не должны бы.

И побороть кстати, не так уж просто.

Это происшествие прямо смазало всё впечатление.

В общем с html5 и современными браузерами, прямо тоска.

По поводу каждой мелочи нужно ходить и проверять на caniuse, и подключать, подключать полифилы.

В целом даже рад что я не верстальщик.

четверг, 19 ноября 2015 г.

Dockerhub построение образов docker автоматически и проблема с обработкой ошибок построения


Строить образы docker через docker build однажды надоедает.

Это и медленно, и ресурсо-ёмко, и попросту раздражает.

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

Можно автоматизировать эту задачу через dockerhub.

Для этого держим Dockerfile в github, привязываем его как automated build, и теперь при git push в github, образ будет перестроен автоматически.

Так же там есть webhooks и зависимые образы, что позволяет перестраивать зависимые образы, всё отлично.

Минус, что порой, по самым странным причинам постройка образа не удалась:
Сбой сети например как на скриншоте, или убежавший вперед внешний репозиторий:
Или неудачная фаза луны.

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

Автоматического повтора сборки не будет уже никогда. 

Или глазами просматривать страницу с деталями сборки, или вылезет уже при docker pull, но это надо ещё заметить.

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

Жду теперь обработку ошибок.