Архив автора: Yuriy Nazarov

Yuriy Nazarov

Люблю machine learning

Погружение в machine learning

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

Курсы

coursera.org/learn/vvedenie-mashinnoe-obuchenie — курс по ML, который отлично «вправляет мозги»

Модели

rusvectores.org/ru/ — word2vec модели для русского языка

Библиотеки

tensorflow.org/tutorials/ — туториалы к библиотеке по ML, которые объясняют почему модели работают. Например отличный разбор word2vec.
scikit-learn.org — swish army knife дата саентиста. Для тех, кто хочет чтобы «просто работало». До меня медленно доходило, что применение нового инструмента часто приносит больше пользы, чем мучительное допиливание старого. Т.е. для проверки гипотез рекомендовал бы именно эту библиотеку вместо более низкоуровневых и дающих больше контроля вроде tensorflow.
Читать далее »

Аппаратный эмулятор нажатий клавиш для Windows

Возможно вы просто искали способ эмуляции нажатия клавиши в приложении, и хотели найти SendMessage(WM_KEYDOWN)+SendMessage(WM_KEYUP) или SendInput(), но если вы уже столкнулись с тем, что этот способ вам не подходит, как, например, в играх, которые специально защищаются от подобных методов для усложнения жизни ботописателям, добро пожаловать под кат.

Читать далее »

Компактное хранение исходного кода

kernel-zip-src

При реализации проекта DistTest возникла необходимость собирать ядро linux из разных версий исходников. И первым решением было загружать готовые архивы исходников с kernel.org для каждой отдельной версии. Но вскоре стало понятно, что данный подход требует значительного дискового пространства: 0.5-1ГБ на каждую версию, которых в данный момент порядка 1000. А также данные подход позволяет собирать только именованные версии, но не версии соответствующие отдельным коммитам.

Для решения проблемы дискового пространства можно хранить несколько базовых версий и приводить их к необходимому виду с помощью патчей, но это приводит к значительному объёму I/O со случайным доступом, что выполняется медленно на HDD и приводит к износу SSD. Тот факт, что исходники необходимой версии требуются лишь временно, подсказывает использовать tmpfs. Но есть более эффективный подход в плане использования оперативной памяти — хранить в tmpfs только отличающиеся от уже имеющихся файлов, что позволяет сделать aufs.

Читать далее »

Очередные часы медитации

20160117_032235

 

Читать далее »

Запуск дистрибутива linux как приложения

Запуск виртуальной машины с последовательным портом в качесте консоли и перенаправлением его в stdio процесса qemu:

Для примера работы эмулятора будем использовать дистрибутив tinycore linux:

Пересборка initrd образа:

Пример вывода(перенаправление консоли ядра отключено для наглядности):

glibc’s memory allocator

malloc_never_fails_tshirt-r8bdfeac6456e4703803a0d7bb91679da_va6lr_512
Когда приложение интенсивно создаёт и удаляет различные объекты при этом не производя над ними каких-либо ресурсоёмких вычислений, производительность приложения ограничивается в основном подсистемой управления памятью. И для более аккуратной разработки приложения необходимо воспринимать эту подсистему уже не как «чёрный ящик», а уже учитывать некоторые его особенности. Рассмотрим аллокатор из библиотеки glibc на платформе linux x86_64.

Какое же API предоставляет аллокатор из glibc? Как он работает? Какие неожиданности в себе таит? Читать далее »

Не нравится язык? Напиши его себе сам.

Во время поиска документации по незнакомым функциям стандартной библиотеки, наткнулся на удивительную фичу Perl’а — source filters. Она позволяет выполнять препроцессинг исходного кода перед выполнением. Обработка может производится как кодом на C, так и кодом на самом Perl’е, что является наиболее переносимым вариантом.
Так чего же он нам позволяет добиться?
Многого! Например можно добавить возможность использовать прототипы функций с именованными аргументами, которые появятся только в Perl6.

Или изменить синтаксис чуть сильнее:

Читать далее »

Заблуждения о файлах

Если удалить файл, свободное место увеличится на размер файла.

Ну, во-первых, файл очень часто занимает отличное от своего размера место

Если удалить файл, свободное место увеличится.

В большинстве файловых систем Linux место не освободится пока файл не закроют все процессы, работающие с ним.

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

Вот в hfsplus в Linux 2.6.32-2.6.36 не так. В 2.6.37 это таки пофиксили.

Ну оно хотя бы не уменьшится при удалении?!

Много чудных файловых систем можно встретить. Вот например nilfs

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

Файловые системы со сжатием могут сжать новый файл лучше.

Одному имени файла всегда соответствует один и тот же файл.

Файлы кто-то может переименовать (c)ваш К.О. Даже в самый неожиданный момент (c)всё тот же К.О. Читать далее »

Лексер для Perl

Меня всегда интересовал вопрос: «В чём основная сложность разработки плагинов для IDE для динамических языков?». Посмотрев код плагина поддержки Perl для Eclipse и почитав форумы, я обнаружил что порой программа может быть правильно разобрана на лексемы только самим интерпретатором, например в случае, когда порядок разбора зависит от уже произведённых действий при разборе. Наглядный пример:

В котором последняя строка может содержать как регэксп так и деление в зависимости от прототипа загруженной функции. Читать далее »

Жуткий матан на javascript

Не отпускает меня эта[1][2] вычислительная задачка. Нафигачил её теперь на js. С блэкджеком и шлюхами Web workers. В итоге получилось около 40 секунд(в Chrome) — быстрее чем нативный код (сгенерированный gcc-4.4 с -O3) в один поток! Выложена на GitHub Pages. Файл с исходными данными.
Screenshot-nazarov-yuriy.github.io-Poincare-web- - Google Chrome Читать далее »