пятница, 11 ноября 2011 г.

SMP 8642. Dhrystone 2



В процессе обсуждения с Padavan строки оптимизации при компиляции программ для Sigma 8642 очень захотелось сравнить мощность этого процессора с более "понятными" нам моделями.

Я скомпилировал программу dhry2 из пакета byte-unixbench.

  • SMP8642, FPU emulated скомпилирована со строкой оптимизации:
    -march=74kc -fPIC

  • SMP8642, FPU скомпилирована со строкой оптимизации:
    -mips32r2 -Wa,-mips32r2 -mtune=74kf2_1 -mdspr2 -pipe

  • Via C3/800 - на этом процессоре собрана машинка с установленным debian 5.0 для выполнения всяких рутинных работ
То есть, если бы производитель дал бы возможность нарастить память, то можно было бы сделать вполне себе разумный компьютер.

вторник, 11 октября 2011 г.

Linux. How to compare images?

Linux в самом деле удивительная операционная система.
В процессе разбора картинок wallpapers появилась задача убрать дубликаты.
Нетривиальная задача. Правда?

Но оказалось не все так сложно. Сейчас объясню.
Вот две картинки:



На вид они абсолютно одинаковы, имеют одинаковый размер.
Но, если посчитать хеш, то он будет разный, а утилита для сравнения картинок покажет, что они значительно отличаются:
$ perceptualdiff img-l-1.tif img-l-2.tif FAIL: Images are visibly different 5456 pixels are different $ echo $? 0 $

Как говорит старая мудрость: "Черт прячется в деталях". Так и здесь, видимо одна картинка получена из другой с помощью отличных друг от друга преобразований. Чтобы убрать лишние детали нужно увеличить размер пикселя, или, что тоже самое отмасштабировать картинки в маленький размер.
Что при этом произойдет?
Программа масштабирования, чтобы сохранить картинку картинкой при объединении пикселей возьмет средние значения цветов, яркости и контрастности. Во время этой операции шум внесенный в картинку будет с высокой вероятностью удален.
$ convert -resize 30 img-l-1.tif img-s-1.tif $ convert -resize 30 img-l-2.tif img-s-2.tif $
Я отмасштабировал картинки до ширины в 30 пикселей, а в блоге увеличил, чтобы показать, что из этого получается:


Теперь сравним их опять:
$ perceptualdiff img-s-1.tif img-s-2.tif PASS: Images are perceptually indistinguishable $ echo $? 1 $

Вуаля! А не какая не виола.
Теперь, вооружившись этими знаниями не составляет труда написать простенький скрипт по удалению дубликатов изображений.


Очень важно:
  • Очень важно правильно выбрать количество пикселей в картинках, которые будут сравниваться. Если, как я указал в примере, ужимать до 30 пикселей в ширину, то вероятность ложных срабатываний достаточно велика. Опытным путем установлено, что 100 пикселей в ширину - оптимальный размер для выявления дубликатов.
  • Скрипт, который я написал относится к категории brute force, На ноутбуке Thinkpad x220 с процессором i7 2620 на обработку 1600 картинок требуется около 15 часов.


Полезные ссылки:

пятница, 7 октября 2011 г.

Hack Dropbox

Увеличение размера диска Dropbox до 10 GB


Dropbox при создании диска и увеличении его размера запоминает MAC адрес сетевой карты и адрес почтового ящика.
Идея состоит в том, что мы регестрируем новый диск dropbox по референсной ссылке используя каждый раз другой почтовый адрес и MAC адрес.

Каждую регистрацию делаем с новым почтовым ящиком и новым MAC адресом сетевого адаптера, что добавит нам каждый раз 250 MB. Таким образом можно прокачать 8 GB, так, что общий объем ящика увеличится до 10 GB

Нам потребуется временный почтовый ящик, например http://www.thismail.ru/ и достаточное количество времени времени.
На один цикл уходит до 4-х минут. Всего нам нужно зарегестрировать 32 ящика dropbox

1. отключить сетевой интерфейс

2. Назначить сетевой карте новый MAC адрес (в следующий раз мы на единицу увеличим MAC)
$ sudo ifconfig wlan0 hw ether 00:31:b6:21:3a:01 и включить сетевой интерфейс (как в п.1)
3. Сгенерировать новый почтовый ящик

4. В другой вкладке firefox ввести референс ссылку и заполнить поля и сохранить установочный пакет dropbox.
5. Установить dropbox
$ sudo dpkg -i nautilus-dropbox_0.6.9_i386.deb
6. Выйти из dropbox

7. Удалить dropbox с компьютера
$ sudo apt-get remove nautilus-dropbox; rm -rvf ~/.dropbox ~/.dropbox-dist и перейти к п.1.


Несколько аккаунтов Dropbox на одном компьютере


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

Свое состояние dropbox хранит в каталоге $HOME/.dropbox, а в каталоге $HOME/.dropbox-dist находятся исполняемые файлы dropbox-а.



Начиная релиза 1.2.48 в dropbox введены проверки на подмену каталогов. Я обнаружил это проинсталлировав Ubuntu 11.10.
Для восстановления работоспособности нужно воспользоваться версией dropbox 1.1.45, скачав их с сайта dropbox, или по ссылкам ниже:
dropbox-lnx.x86-1.1.45.tar.gz
dropbox-lnx.x86_64-1.1.45.tar.gz

Кроме того, естественно, при инсталляции dropbox-ов нужно указывать разные каталоги для хранения файлов. Я создал 3 аккаунта dropbox и привязал к ним три разных каталога для хранения wallpapers.

Прежде всего нужно зарегестрировать где нибудь почтовые ящики, к которым привяжутся аккаунты dropbox.

Далее инсталлируется клиент dropbox. Указываем разместить файлы в $HOME/Dropbox01. После его установки закрываем dropbox и сохраняем установки:
mv $HOME/.dropbox $HOME/.dropbox-wp1
Затем удаляем dropbox, устанавливаем его по новой, размещяем $HOME/Dropbox02 и опять сохраняем установки: $ sudo apt-get remove nautilus-dropbox; rm -rvf ~/.dropbox ~/.dropbox-dist $ sudo dpkg -i nautilus-dropbox_0.6.9_i386.deb $ mv $HOME/.dropbox $HOME/.dropbox-wp2
Вот собственно и все.

Для запуска я использую следующий скрипт, размещенный в %HOME/bin, которому в командной строке передаю название каталога с сохраненными настройками:
#!/bin/bash

#################################################
# Filename: dropbox_select.sh
VERSION=0.2
# Description: select dropbox account and start 

if [ -d ${HOME}/.dropbox ]; then 
  rm -r ${HOME}/.dropbox
fi

if [ -d ${HOME}/.$1.tmp ]; then 
  rm -r ${HOME}/.$1.tmp
fi

if [ ! -e ${HOME}/.$1 ]; then
  echo "Account $1 not exist"
  exit 192
fi

cp -r ${HOME}/.$1 ${HOME}/.dropbox
${HOME}/.dropbox-dist/dropbox start -i
mv ${HOME}/.dropbox ${HOME}/.$1.tmp
rm -r ${HOME}/.$1
mv ${HOME}/.$1.tmp ${HOME}/.$1
Для запуска из панели Unity в каталоге ${HOME}/.local/share/application я разместил вот такой файл mydropbox.desktop
[Desktop Entry]
Name=Start DropBox
Comment=
Exec=
Icon=/home/axa/.icons/dropbox/db-wp.svg
Terminal=true
Type=Application
StartupNotify=true
X-Ayatana-Desktop-Shortcuts=Wallpapers01;Wallpapers02;Wallpapers03

[Wallpapers01 Shortcut Group]
Exec=${HOME}/bin/dropbox_select.sh dropbox-wp01
Name=Start DropBox WallPapers 1

[Wallpapers02 Shortcut Group]
Exec=${HOME}/bin/dropbox_select.sh dropbox-wp02
Name=Start DropBox WallPapers 2

[Wallpapers03 Shortcut Group]
Exec=${HOME}/bin/dropbox_select.sh dropbox-wp03
Name=Start DropBox WallPapers 3


10/10/2011. Убрал команды опускания и подъема сетевого интерфейса при регистрации dropbox.
15/10/2011. Изменил скрипт выбора dropbox-а для исключения ошибки потери текущего snapshot в случае, когда компьютер зависал или перегружался с работающим dropbox,
01/11/2011. Изменил расположение mydropbox.desktop из /usr на ${HOME}/.local