четверг, 31 декабря 2009 г.

Rotatable Eve













This is Eve from "Octopus Pie" comics
codes

среда, 23 декабря 2009 г.

Контора


Двор

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











Кабинет












Комната с кофейным автоматом












Код код код код

Изображения рубить можно так:
vg@AnD /cygdrive/d
$ convert yard1.jpg -crop 480x480 +repage y%d.jpg

воскресенье, 6 декабря 2009 г.

среда, 23 сентября 2009 г.

понедельник, 31 августа 2009 г.

пятница, 31 июля 2009 г.

untitled

001D6E9BC60F

пятница, 17 июля 2009 г.

Default button type in IE vs Firefox

If you just write <button>, what type will it be: input, reset or submit?










Firefox

IE

Well, the specs (http://www.w3.org/TR/html401/interact/forms.html#h-17.5) are clear on that one, so that's pretty much no surprise. It's submit.

What's less obvious is when you put a button inside a form, pushing it does reload a page, unless you return false from onclick handler.

Here the default value is button. It's sort of convenient for JavaScript apps actually.


Also:

вторник, 14 июля 2009 г.

how do i cp dot files


$ cp orig/.??* target/


That's how.

подготовка космонавтов



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

суббота, 4 июля 2009 г.

Ональд Крили, профессиональный призрак


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

четверг, 2 июля 2009 г.

How do I kill lineups in emacs

По умолчанию emacs в cc-mode (это режим редактирования текстов на си, джаве и подобных вещах) выстраивает аргументы к функциям в вертикальную линию, вот так




Это плохо тем, что

  • занимает много места по горизонтали

  • неправильно выглядит в редакторе, использующем другую длину tab



Настроить отступы наподобие Visual Studio можно так:


(add-hook 'c-mode-common-hook
'(lambda ()
(c-set-offset 'arglist-intro '+)
(c-set-offset 'arglist-cont-nonempty '+)
(c-set-offset 'arglist-close 0)
))


Получается где-то так:



Чтобы узнать, какое правило emacs применяет для расчета отступа конкретной строки, можно навести курсор на эту строку и нажать C-c C-o.

Также, перекрасить окно редактирования в цвет терминала оказалось очень просто:

(set-background-color "black")
(set-foreground-color "white")

cc-mode сам подбирает подходящие цвета для синтаксических элементов. Осталось сделать выделение жирным шрифтом и курсивом.

долбаный космос



Еще я думаю что это пародия на 42

воскресенье, 8 марта 2009 г.

how does alsa load plugins

Как же ALSA загружает плагины? Это просто.

Скажем.

~/.asoundrc

pcm.wrong {
type mayonaise
}



/home/vg $ aplay -Dwrong sound.wav
ALSA lib pcm.c:2156:(snd_pcm_open_conf) Cannot open shared library /usr/lib/alsa-lib/libasound_module_pcm_mayonaise.so
aplay: main:583: audio open error: No such file or directory

суббота, 7 марта 2009 г.

how do i listen to jbl reference 610


/home/vg $ hcitool scan
Scanning ...
00:19:50:00:C5:EC JBL REF 610
3C:C2:E0:70:D1:00 Philips Xenium 9@9q


Сегодняшние мои опыты с вышеназванными bluetooth-наушниками рассказали мне следующее.

Для начала в них нужно залогиниться. Пока я научился делать это так:

/home/vg $ sudo hciconfig hci0 auth
/home/vg $ sudo hcitool cc 00:19:50:00:C5:EC

Если ты еще не залогинен, тут появляется диалог и в него можно ввести пароль.

Дальше по получившемуся соединению сможет работать alsa plugin из bluez. Вызвать его можно, скажем, через ~/.asoundrc


pcm.jbl_raw {
type bluetooth
device 00:19:50:00:C5:EC
profile hifi
}

pcm.jbl {
type plug
slave {
pcm jbl_raw
}
}


Также, тогда как типичная команда проверки pcm выглядит так

/home/vg $ aplay -Djbl /usr/share/sounds/purple/logout.wav


куда веселее сделать так

vg@bishop:~$ mplayer -ao alsa:device=jbl funstuff/m/radiohead\ --PARLOPHONE\ mostly/\(2001\)\ amnesiac\ --PARLOPHONE/*

суббота, 7 февраля 2009 г.

how do i haskell in javascript

Если бы хэскелл был джаваскриптом а джаваскрипт бы был хэскеллом, то там были бы такие операторы!


var plus = function(left) {
return function(right) {
return left + right;
};
};

var sum = plus(121)(232);

var ternary = function(left) {
return left ?
function(middle) {
return function() {
return middle;
}
} :
function() {
return function(right) {
return right;
}
};
};

var oddity = ternary(sum % 2)('odd')('even');

// теперь как бы сделать чтобы по true запускалась одна ветка а по false другая

пятница, 6 февраля 2009 г.

how do i force windows script to run in console

Если нам надо выводить большие простыни текста, скрипт надо гонять в консоли. Но по умолчанию *.js запускается в wscript, а не в cscript.

Тут можно сделать так:



if(WScript.FullName.match(new RegExp('wscript', 'i'))) {
// мы запускаемся не в консоли
var sh = new ActiveXObject('WScript.Shell');
// скопируем коммандную строку, добавим установку ждать
// нажатия клавиши после работы, чтобы окно не сразу
// закрывалось
var cmdLine = 'cscript /nologo ' + WScript.ScriptFullName + ' /pause';
sh.Run(cmdLine);
return;
}




Факты, которых я не знал:
- out.Write('\x1b[2J') очищает экран терминала, но только если гонять cscript в rxvt или каком-нибудь другом ANSI-enabled терминале;
- консоль Windows 2000/XP не понимает ANSI escape sequences;

среда, 4 февраля 2009 г.

full optimisation

вот полная оптимизация в msvs 2003
это cl /Ox


{
pos += 1;
00680717 add eax,1
0068071A mov dword ptr [esi],eax
len = 1;
0068071C mov dword ptr [edi],1
// сосчитаем символы до закрывающей кавычки или конца строки
//while (!strchr("\"",string[pos+len] )&&(string[pos+len]!= '\0'))
// while(!memchr("\"\0", string[pos + len], 2) // интересно, как быстрее?
while(string[pos + len] && (string[pos + len] != '"'))
00680722 mov eax,dword ptr [ebx]
00680724 mov ecx,dword ptr [esi]
00680726 cmp byte ptr [ecx+eax+1],0
0068072B je $L92588+36h (68074Dh)
0068072D lea ecx,[ecx]
00680730 mov ecx,dword ptr [edi]
00680732 mov edx,dword ptr [esi]
00680734 add edx,ecx
00680736 cmp byte ptr [edx+eax],22h < --------o
0068073A je $L92588+36h (68074Dh) \
len++; \
0068073C add ecx,1 \
0068073F mov dword ptr [edi],ecx один и тот же адрес
00680741 mov ecx,dword ptr [esi] /
00680743 add ecx,dword ptr [edi] /
00680745 mov eax,dword ptr [ebx] ; eax не менялся /
00680747 cmp byte ptr [ecx+eax],0 < -------- o
0068074B jne $L92588+19h (680730h)
0068074D pop edi
0068074E pop esi
return TOKEN_WORD;
0068074F xor eax,eax
00680751 pop ebx
}
};//End case
}
00680752 ret 8



Она очень умная но не складывать string[pos + len] второй раз не додумалась.

Также, что такое lea ecx, [ecx] o_O
EDIT Я понял! Это выравнивание.

среда, 21 января 2009 г.

python



upd
с жж это не хотлинкуется т. е. реферер чек
такие дела

суббота, 17 января 2009 г.

how do i use virtual midi keyboard in pd

Можно передавать MIDI-события через ALSA-MIDI. Набор клиентов ALSA-MIDI склаывается динамически, т. е. каждая программа, подключающаяся к ALSA-MIDI, получает номер. Посмотреть номера можно вот так


vg@bishop:~/src/vmpk-0.2.3$ aconnect -io
client 0: 'System' [type=kernel]
0 'Timer '
1 'Announce '
client 14: 'Midi Through' [type=kernel]
0 'Midi Through Port-0'
client 16: 'M Audio Audiophile 24/96' [type=kernel]
0 'M Audio Audiophile 24/96 MIDI'
client 128: 'VMPK Output' [type=user]
0 'VMPK Output '
client 129: 'VMPK Input' [type=user]
0 'VMPK Input '
client 130: 'Pure Data' [type=user]
0 'Pure Data Midi-In 1'
1 'Pure Data Midi-In 2'
2 'Pure Data Midi-Out 1'
3 'Pure Data Midi-Out 2'


Направить выход как бы клавиатуры на вход pd можно так:


vg@bishop:~/src/vmpk-0.2.3$ aconnect 128:0 130:0

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

make jack

Как собрать jack в kubuntu.

Во первых, возможность поддержки ALSA определяется с помощью pkg-config и файла /usr/lib/pkgconfig/alsa.pc. Поэтому предварительно:


vg@bishop:~/src/jack-audio-connection-kit-0.116.1$ sudo apt-get install pkg-config libasound2-dev


И


vg@bishop:~/src/jack-audio-connection-kit-0.116.1$ ./configure --disable-oss --enable-debug


И в убунте сейчас есть уже версия 0.109.2-3ubuntu1, так что вобщем-то и не надо делать этого.

четверг, 1 января 2009 г.

Fuck NetworkManager

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

Как убить NetworkManager.


/etc/network # update-rc.d -f NetworkManager remove
Removing any system startup links for /etc/init.d/NetworkManager ...
/etc/rc2.d/S28NetworkManager
/etc/rc3.d/S28NetworkManager
/etc/rc4.d/S28NetworkManager
/etc/rc5.d/S28NetworkManager
/etc/network # /etc/init.d/NetworkManager stop
[199G[ OK ]


Тут самое время записать настройки сети в /etc/networking/interfaces. Например, вот так:


auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 10.1.1.10
netmask 255.255.255.0
gateway 10.1.1.1


Записи auto определяют, какие интерфейсы следует поднимать по ifup -a.
/etc/init.d/networking start вызывает ifup -a (а /etc/init.d/networking stop соответственно ifdown -a ).

Еще нужно записать в /etc/resolv.conf свой любимый сервер DNS, как-то вот так:


nameserver 10.1.1.1


И, введя все это:


/etc/network # /etc/init.d/networking restart
* Reconfiguring network interfaces...  RTNETLINK answers: No such process
SIOCDELRT: No such process
[199G[ OK ]

art of mount: current status

Немного о том, как монтировать разделы vfat. Особенно под Kubuntu 8.10 . Особенно полные файлов с русскими названиями.

1. -o remount ни черта не работает.


vg@bishop:/media$ grep sda7 /proc/mounts
/dev/sda7 /media/disk-2 vfat rw,nosuid,nodev,uid=1000,fmask=0022,dmask=0022,codepage=cp437,iocharset=iso8859-1 0 0
vg@bishop:/media$ sudo mount -v -t vfat -o codepage=cp866,iocharset=utf8,remount /dev/sda7 disk-2/
/dev/sda7 on /media/disk-2 type vfat (rw,codepage=cp866,iocharset=utf8)
vg@bishop:/media$ grep sda7 /proc/mounts
/dev/sda7 /media/disk-2 vfat rw,uid=1000,fmask=0022,dmask=0022,codepage=cp437,iocharset=iso8859-1 0 0


Как можно видеть, ничего не изменилось. Система даже не сказала "мне плевать". Она просто промолчала. Это плохо.

2. mount / mount -l ни черта не работает.


vg@bishop:/media$ mount |grep sda7
/dev/sda7 on /media/disk-2 type vfat (rw,codepage=cp866,iocharset=utf8)
vg@bishop:/media$ sudo mount -v -t vfat -o codepage=qwerqwerqwerqw,iocharset=utf8qwerqwer,asdfasd=xcvzxcv,remount /dev/sda7 disk-2/
/dev/sda7 on /media/disk-2 type vfat (rw,codepage=qwerqwerqwerqw,iocharset=utf8qwerqwer,asdfasd=xcvzxcv)
vg@bishop:/media$ mount |grep sda7
/dev/sda7 on /media/disk-2 type vfat (rw,codepage=qwerqwerqwerqw,iocharset=utf8qwerqwer,asdfasd=xcvzxcv)


Т.е. она печатает все, что мы ей дали в -o, даже не пытаясь осмыслить. Тоже плохо.
Таким образом, если нужно посмотреть состояние смонтированных ФС, лучше смотреть в /proc/mounts .

3. Как справиться.


vg@bishop:/media$ sudo umount disk-2
vg@bishop:/media$ sudo mount -t vfat -o rw,nodev,nosuid,noexec,fmask=0111,dmask=0,codepage=866,iocharset=utf8 /dev/sda7 dos/
vg@bishop:/media$ ls dos/ru/
(2005) сатана [promotional version] Drugly Cats алёша пальцев Кровосток Михей и Джуманджи МОРАБЛИ паперный --Ш2 ульи шлюз


Если не размонтировать автоматически созданный "диск-2", то раздел снова смонтируется с уже использованными до этого параметрами. А они неправильные.

Также, значения fmask и dmask инвертируются. Отсюда, когда мы говорим fmask=0111, получается, что все файлы в разделе будут доступны на чтение и запись. А dmask=0 значит, что каталоги должны быть доступны на ВСЕ.