November 24th, 2009
Забелязъл съм нещо интересно, което може да се прави в csh, но работи по друг начин в bash.
Да речем че съм написал някакъв дълъг път:
/mnt/storage/mp3/Manowar
... и се сетя че всъщност не съм имал предвид "Manowar" като последна директория, а "rammstein". Единия начин да оправя това е като набия 7 backspace-а и да изтрия всяка буква поотделно, докато стигна до наклонената черта. Ами ако се сетя че "rammstein" не е в "mp3", а в "/mnt/storage/Music"? Тогава чаткането по backspace става още повече.
В csh това става елементарно с CTRL-W - комбинацията изтрива всичко от командния ред до предната наклонена черта.
Така
/mnt/storage/mp3/Manowar
става
/mnt/storage/mp3/
с един CTRL-W. Следващия CTRL-W ще махне "mp3/", следващия ще махне "storage/" и т.н.
Гугъл върна един резултат на това търсене - тук в Shallow Thoughts.
На кракто решението е следното:
Това отива в ~/.inputrc:
set bind-tty-special-chars Off
А това отива в ~/.bash_profile:
bind '\C-w:backward-kill-word'
Шела се рестартира (logout -> login) и трябва да работи.
Обяснение на дълго защо се случва това - в горния линк.
Tags: bsd, линукс, пинизи
Posted in linux | 4 Comments »
November 22nd, 2009
Тези две новини от два различни сайта пристигнаха в RSS четеца ми една след друга:
GIMP няма да е в Ubuntu 10.04 по подразбиране
50% от завършващите гимназия са неграмотни
Мисля че новините идеално се допълват в контекста на една друга.
GIMP заемала прекалено много място. Инсталаторът е цели 14МВ, докато Photoshop архивите в дата-та са към 300-400MB.
Интерфейсът на GIMP бил прекалено сложен. Има-няма 20 инструмента.
GIMP била алтернатива на Photoshop, а Photoshop не била включена по default в Windows, за това GIMP не трябва да е в Ubuntu. О... Боже... Мой...
Tags: gimp, новини
Posted in news | No Comments »
November 19th, 2009
Предполагам че на всеки, който пише код рано или късно му се налага да парсва низове. В случай че низът не е нещо кратко, точно и ясно, се налага използването на regex. В различните езици регулярни изрази се ползват по различен начин. Общото е че върху изследвания низ се налага шаблон и според това дали низът попада в шаблона (match-ва) се предприемат някакви действия или части от низа се прехвърлят в други променливи. В Perl това става лесно - има си езикова конструкция:
-
-
$string = "The lazy dog jumped over the quick brown fox.";
-
if ($string =~ /(\w{3}\./){
-
$match = $1;
-
do_something_on($match);
-
}
-
Кракто и ясно - ако низът попада в /шаблон/ - да се направи еди какво си. Няма да се спирам точно върху синтаксиса на шаблоните, понеже самия факт че четете това тук предполага че сте на ясно 
Все пак ако не сте на ясно, ето ви един плашещ шаблон, за да се откажете още тук:
/^([\d\.]+?)\skill\s+(\d+)\s+([\w\s]+?)(\d+?)\s+([\w\s]+?)\w+$/
Това използвам за парсване на тези редове от логовете на Unreal Tournament:
175.48 kill 1 Sniper Rifle 5 Sniper Rifle Decapitated
В PHP няма езикова конструкция, но има доста функции за Perl Compatible Regular Expressions, които работят на същия принцип.
Сега да видим как е положението в С.
От много време търсех как мога да ползвам регулярни изрази, но все удрях на камък. Когато ми се е налагало да парсвам низове съм ползвал sscanf или разбиване на символи, броене, чакане Х-тия символ да е точно 'А', Y-тия да е точно 'B' и т.н. Неприятна работа включваща жонглиране с цикли, if-ове, strcmp и двадесет нива индентация на кода.
Днес открих че в С има поддръжка на PCRE и ми се дощя да се самоубия 
Ако работите на нормална операционна система, то може да видите много информация с man pcre и man pcreapi. Ако сте наистина щастливци, някъде из дистрибуцията ще имате файл pcredemo.c, който нагледно показва как се работи с PCRE функциите.
Ако не сте от тези щастливци можете да си намерите файла от тук.
Използват се две основни функции: pcre_compile и pcre_exec. Първата поема съставения шаблон от потребителски низов вид и го превръща във вътрешното представяне, което компилатора използва. Втората функция налага шаблона върху тествания низ и връща съвпаденията във вид на масив от вектори, сочещи началните позиции на съвпаденията. Можете да прочетете за функциите в съответните man страници. И най-добре вижте pcredemo.c
Tags: сорс
Posted in code | No Comments »
November 19th, 2009
Поради настъпващото глобално затопляне (вземайки предвид географското местонахождение на текущия сървър), ще местя блога към по-високи места - на blog.ivanatora.info. Който има някакъв интерес насам - да си ъпдейтне връзките 
И някои готини нововъведения - версията на WordPress е обновена до последната налична и е инсталирана добавка, която форматира код. Това последното много ми липсваше до сега.
Posted in meta | No Comments »
November 1st, 2009
Този бърз хак работи само в езици, които поддържат коментари от вида "//" за коментиране на ред и такива от вида "/* ... */" за коментиране на блок.
Да вземем този блок:
Да го закоментираме целия:
-
-
/*
-
blqk();
-
puf();
-
paf();
-
*/
-
И да закоментираме затварящия коментар
-
-
/*
-
blqk();
-
puf();
-
paf();
-
//*/
-
В този момент целия блок е закоментиран. Ако сега добавим единична "/" пред отварящия коментар, коментарите ще отпаднат и блокът ще се разкоментира:
-
-
//*
-
blqk();
-
puf();
-
paf();
-
//*/
-
Изпробвано е и работи в С и РНР. Ако имате пуснато оцветяване на кода в редактора, който ползвате (и оцветяването работи добре в реално време), ще видите интерсна гледка при добавяне и премахване на магическата "/"
Tags: пинизи, сорс
Posted in code | 1 Comment »