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

Yuriy Nazarov

Люблю machine learning

Макетная плата для AT90USB647. Первые шаги.

Макетная плата для AT90USB647. Описание.
Макетная плата для AT90USB647. Первые шаги.

Классический «Hello world» для микроконтроллеров — мигание светодиодом.


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

Склеиваем картинки при помощи Perl и GD

Все наверное уже видели этот шэдевральный комикс от xkcd. А тем кто не видел — очень рекомендую посмотреть.
Ну так вот. Интересно мне было посмотреть как он выглядит целиком. И вот если бы я сначала подумал, а не сразу принялся бы код, то понял бы, что это бессмысленно. т.к. общий размер изображения 13+ ГИГАПИКСЕЛЕЙ. А моим вьювером, как выяснилось больше 0.6 ГП не открывается. Да и библиотека с изображениями, размер которых по одному из измерений больше 33 КП, работает нестабильно. Но зато я хоть немножко познакомился с GD.
Склеить получилось(нормально склеилось и нормально смотрелось) участок вот такого размера:

Полная же картинка выглядит так:

Второе изображение отсюда.
upd. На хабре узнал про скрол версию.
Для склейки изображений я набрасал простенький скрипт, код которого приведён далее.
Читать далее »

Free Wi-Fi. Вопросы безопасности


Предупреждение: статья не для гуру компьютерной безопасности, а для тех, кто не до конца понимает, как работает авторизация на различных сайтах и какие дополнительные моменты появляются при работе в wifi сетях. Попытаюсь объяснить «на пальцах».
Начнём с мат части.
Как обычно происходит авторизация на различных вёб ресурсах? Точнее как это происходит чаще всего.
Вы вводите логин и пароль в форме логина, нажимаете кнопку и данные отправляется по каналу с безопасностью A, после чего сервер присылает ответ с сеансовым ключом, и этот сеансовый ключ в дальнейшем используется для обмена сообщениями по каналу с безопасностью B.
И если:

  • A и B — оба https. В этом случае всё хорошо, ну или почти всё. Практически спокойно можно пользоваться сервисом в любой сети. Хотя некоторые ограничения остаются, которые не будет рассматриваться сейчас.
  • A и B — https и http. Самое интересное.
  • A и B — обычный http. Очень грустно. Можно надеятся только на недоступность сети другим. Не интересно.

Так когда и в каком случае ваша личная информация может стать доступной ещё кому-либо? Об этом читайте далее. Читать далее »

Резервное копирование удалённого SVN репозитория

Создадим локальный репозиторий с именем «my_local_repo».

Разрешим делать с локальным репозиторием что угодно. В директории

Инициализируем локальную копию. Возможно придётся ввести логин и пароль.

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

Напишем скрипт для cron’а.
backup_svn_script.sh:

Он будет создавать файлы вида «svn_2012_09_07_01_34_01.tar.gz» в вашей директории с бэкапами.

Для добавления скрипта в крон, нужно запустить:

и, например для сохранения бэкапа в 4:00 каждый день, добавить следующую строчку:

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

Источники:
using svnsync
installing subversion server in ubuntu

Калькулятор, который всегда под рукой

— Так у тебя уже трое детей? И сколько им лет?
— Если перемножить их возраст, то получится 36. А если сложить, то получим номер автобуса, на котором мы с тобой едем.
— Но я не могу на основании этого определить их возраст!
— А, забыл сказать — старший такой же рыжий как и я!
— Ну тогда ясно!

А Вам ясно? Сразу? Серьёзно? Хорошо Вам! Тем, кто так быстро не считает, может помочь калькулятор, который всегда под рукой(у линуксоидов):

Под катом код не однострочником Читать далее »

Настраиваем apcupsd

На всякий случай были написаны скрипты для автоматического старта и корректного завершения работы виртуальных машин(в случае потери питания, выполняется демоном apcupsd)
Из интересных(по крайней мере для меня) моментов я бы хотел отметить способ запуска команды от имени определённого пользователя, даже если скрипт запущен от root’а. Это необходимо потому, что VirtualBox привязывает виртуалки к пользователю, и если запустить от root’а vboxmanage list runningvms при запущенных виртуалках, он ничего о них не скажет. По этому был на коленке быстренько написан следующий код:
startvm.sh

stopvm.sh

А заключения не будет. Могу только сказать, что при добавлении /home/firefish/stopvm.sh в /etc/apcupsd/onbattery, оно таки заработало:

Интервал ONBATTERYDELAY увеличен до 30 секунд для игнорирования отключений электричества на короткое время. Хотя первый проваленный этой логикой тэсткейз — несколько подряд отключений на 29 секунд. Будем надеятся, что фикс будет написан раньше, чем это случится.

AMD IOMMU

Any problems?

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

Тесты производительности нескольких отдельно взятых процессоров

Собрал ядрышко линукса на 2х своих машинках(и ещё на одной товарища artamonov). Конфигурация — которая генерируется при запуске и выходе make menuconfig. Это около 2500 модулей и ещё много всего ненужного.
Читал как-то что потоков нужно больше чем ядер, т.к. что-то полезное они начинают делать не сразу. Оказывается это не особо то и нужно, и даже, скорее, вредно. Ниже есть тесты с разным количеством потоков.
Intel(R) Core(TM) i5 CPU 760:

AMD FX(tm)-8120 Eight-Core Processor:

AMD FX(tm)-8120 Eight-Core Processor:

Intel(R) Core(TM) i7 CPU 2600K:

Intel(R) Core(TM) i7 CPU 2600K:

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

Первый взгляд на «bonding»

Говорят что сетевые интерфейсы можно пачками объединять для повышения пропускной способности или отказоустоичивости. Попробуем объединить интегрированную(на rtl8111) и TG-3468(на rtl8168).
HOWTO для gentoo
На дебине/убунте всё то же самое:

вывод последней команды

хорошо. теперь то же самое с другой стороны(ну ip и интерфейсы по вкусу)

Где мои 0,4 Gbps?! ;-)

На NAT’е/файлопомойке загрузка процессора упёрлась в 100% на оба ядра… Видимо на большее расчитывать не стоит.
Да. Пока нечем утилизировать такой канал. SAMBA видимо тоже в процессор упирается да и в диск — 60МБ/с — одного линка вполне бы хватило.

Эксперименты с TRIM

Вступление.
Дабы не искать перемещённые блоки по всему диску запишем на бОльшую его часть что-нибудь бесполезное, но с узнаваемым паттерном.
Хотя если контроллер умеет делать перестановки:
«после trim» <- «редко записываемые данные» <- «часто записываемые данные»
или
«редко записываемые данные» <-> «часто записываемые данные»
то мы не сможем это увидеть или это будет довольно трудно.
Ладно. Будем надеяться и верить. Читать далее »