<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><title>elwis@jid.pl</title><link>http://elwis.jogger.pl/</link><description>Wpisy z dziennika internetowego Jogger, wspomaganego przez Jabbera</description><lastBuildDate>Thu, 17 May 2012 18:30:52 +0200</lastBuildDate><generator>JoggerPL</generator><item><title>Moje zdanie na temat ACTA, PIPA i tym podobnym.</title><link>http://elwis.jogger.pl/2012/01/20/moje-zdanie-na-temat-acta-pipa-i-tym-podobnym/</link><description>&lt;p&gt;TOR do kurwy nędzy! Dziękuję za uwagę.&lt;/p&gt;
</description><pubDate>Fri, 20 Jan 2012 22:31:02 +0100</pubDate><guid>http://elwis.jogger.pl/2012/01/20/moje-zdanie-na-temat-acta-pipa-i-tym-podobnym/</guid><category>Ogólne</category></item><item><title>[brydż] Szalone dopchnięcie.</title><link>http://elwis.jogger.pl/2011/09/16/brydz-szalone-dopchniecie/</link><description>&lt;p&gt;Ostatnio na BBO trafila mi się następująca ręka (S):&lt;/p&gt;
&lt;pre&gt;
P 986
C AK102
K AK3
T K43
&lt;/pre&gt;
&lt;p&gt;Impy, WE po partii.&lt;br&gt;
Licytacja:&lt;/p&gt;
&lt;pre&gt;
 W   N   E   S
        1T* 1BA
 Pas 2C Pas 3P
 Pas 4P Pas...
&lt;/pre&gt;
&lt;p&gt;(*) 1T = lepszy młodszy, 12-22HCP&lt;/p&gt;
&lt;p&gt;1BA oczywiście 15-17HCP na równym, pozwoliłem sobie zainwitować ze względu na urodę swojej karty (w ręku mam 5,25 lewy + 2 blotkowe w atu = 7,25; 2,25 dodatkowej lewki to chyba nie tak dużo?). Partner bez problemu może mieć kartę z ktorą idzie końcówka, a ewentualna wpadka raczej nie zaboli w porównaniu do zysku z wygrania dogranej. Partner dopchnął. Wist T9, wyjechał stolik:&lt;/p&gt;
&lt;pre&gt;
P Q107543
C QJ
K 1072
T 87
    N

    S
P 986
C AK102
K AK3
T K43
&lt;/pre&gt;
&lt;p&gt;Nie powiem, nieco zmartwiła mnie jakość koloru atutowego w stole i ogólny kształt karty. Partner wylogował się, a ja zacząłem rzeźbić w gównie. Do wistu treflowego dołożylem blotkę ze stołu, E zasiadł asem. Powtarza damą trefl, którą przejmuję królem na ręku. Sytuacja nie była rózowa, bo pozostałe 2 lewe raczej oddam na figury pikowe, a jeszcze Walet pikowy był gotowy wziąć lewę. Co miałem biedny zrobić? Gram P9 z ręki. W dokłada waleta, stołowa dama utrzymuje się. E dołozył P2. To teraz sprawa była prosta. Oddałem na AK w pikach, wziąłem na waleta kier, damę przebiłem asem, na króla wyrzuciłem karo i gotowe. Pięć impów dla mnie. Całe rozdanie wyglądało tak.&lt;/p&gt;
&lt;pre&gt;
            P Q107543
            C QJ
            K 1072
            T 87
P AKJ        N      P 2
C 9875              C 643
K J954    W     E   K Q86
T 92                T AQJ1065
             S
            P 986
            C AK102
            K AK3
            T K43
&lt;/pre&gt;
&lt;p&gt;Co ciekawe, nie byłem jedynym, który grał ten niezbyt trudny do rozegrania kontrakt. Bardziej dziwi mnie, że kilka par brało tylko 9 lew (ktoś wziął nawet 8 lew). No i to 4Tx-3 na drugiej lini... BBO. :)&lt;/p&gt;
</description><pubDate>Fri, 16 Sep 2011 13:56:13 +0200</pubDate><guid>http://elwis.jogger.pl/2011/09/16/brydz-szalone-dopchniecie/</guid><category>Brydż</category><category>Ogólne</category></item><item><title>Ciekawy bug...</title><link>http://elwis.jogger.pl/2011/01/27/ciekawy-bug/</link><description>&lt;p&gt;Z mana programu evilwm:&lt;/p&gt;
&lt;pre&gt;
BUGS
       The author's idea of friendly may differ to that of many other people.
&lt;/pre&gt;
&lt;p&gt;Przepiękne. :)&lt;/p&gt;
</description><pubDate>Thu, 27 Jan 2011 21:55:49 +0100</pubDate><guid>http://elwis.jogger.pl/2011/01/27/ciekawy-bug/</guid><category>Ogólne</category></item><item><title>HP 550 - Wcale niezły notebook w niskiej cenie.</title><link>http://elwis.jogger.pl/2010/06/21/hp-550-wcale-niezly-notebook-w-niskiej-cenie/</link><description>&lt;p&gt;Ostatnio przyszło mi zaopatrzyć się w nowy komputer. Jako, że nie śpię na pieniądzach, moje wymagania nie są wysokie, a przydałoby się zabrać kompa tu i tam, wybór padł na notebooka HP 550. Jest to chyba najtańszy notebook HP jaki udało mi się wypatrzyć, a już na pewno najtańszym notebookiem z tak dobrym procesorem (Core 2 Duo), bo kosztował tylko 1500zł z torbą gratis.&lt;/p&gt;
&lt;p&gt;Notebook ten ma procesor Intel Core 2 Duo 1,8GHz, 1GB RAM (można dołożyć jeszcze 3GB), dysk 160GB i zintegrowaną kartę graficzną Intela. W najnowsze gry nie pogram, ale do programowania, przeglądania netu (tego najwięcej) i grania w ulubione gry starczy.&lt;/p&gt;
&lt;p&gt;Takie parametry wystarczają, żeby płynnie chodził Windows 7 x86 (nie zdecydowałem się na wersję x64 ze względu na małą ilość RAMu). Nawet nie ścina Visual Studio 2008 -- zamula dopiero przy większym obciążeniu, takim jak Firefox z kilkunastoma kartami i flashem na połowie z nich (zdarzyło mi się raz).&lt;/p&gt;
&lt;p&gt;Jeśli chodzi o Linuksa, problemów z wydajnością oczywiście nie ma (chyba, że zainstaluje się KDE 4). Szczęśliwie sprzęt też nie sprawia zbytnich problemów. Karta bezprzewodowa działa bez żadnego kombinowania. Suspend to ram działa dobrze. Hibernacja natomiast (przez /proc/apci/power/state) nie działa, aczkolwiek nie próbowałem nic z tym robić, więc jest to raczej sprawa otwarta. Poza tym nie działa większość kombinacji fn+Fx (poza regulacją jasności, która działa źle ;p), ale mi tam to nie robi. Poza tym, żeby uśpić kompa muszę wpisać (nikt nie mówi, że z palca) mem do /proc/acpi/power/state, a nie zamknąć komputer, jak na windzie, ale to akurat lubie. Na Linie, wtedy wyłącza się tylko monitor.&lt;/p&gt;
&lt;p&gt;Pod względem baterii, nie narzekam. Na Windowsie bateria, przy włączonym WI-FIu pociągnie niestety tylko 2 godziny (przy włączonej muzyce i małym obciążeniu). Ściemnienie matrycy (bardziej niż standardowe ustawienia przy odłączonym zasilaczu) pokowanie skoczyło mi do prawie 3 godzin, a po dodatkowym wyłączeniu WI-FI prognozował aż 3 i pół godziny.&lt;/p&gt;
&lt;p&gt;Oczywiście, pod Linuksem jest znacznie lepiej (może nie tylko dla tego, że mam na nim Slacka z Ratpoisonem, a nie Aero): 2 i pół godziny przy matrycy na pełną jasność, 3 godziny przy ściemnionej matrycy, a po wyłączeniu WIFI nawet 5 godzin. oO Oszczędzania energii na procku jeszcze nie próbowałem. :D&lt;/p&gt;
&lt;p&gt;Na sam koniec trochę o pozostałych rzeczach. Wizualnie, bez szaleństwa, ale mi tam się podoba taki minimalistyczny wygląd. Jedynym mankamentem tutaj jest fakt, że porty USB są po lewej stronie, ale nie narzekam, bo nie jest to wcale takie irytujące... Ogólnie rzecz biorąc, podoba mi się i polecam.&lt;/p&gt;
&lt;p&gt;&lt;a target='_blank' title='ImageShack - Image And Video Hosting' href='http://img72.imageshack.us/i/dsc00001fu.jpg/'&gt;&lt;img src='http://img72.imageshack.us/img72/8039/dsc00001fu.jpg' border='0'&gt;&lt;/a&gt; &lt;a target='_blank' title='ImageShack - Image And Video Hosting' href='http://img85.imageshack.us/i/dsc00002uy.jpg/'&gt;&lt;img src='http://img85.imageshack.us/img85/1658/dsc00002uy.jpg' border='0'&gt;&lt;/a&gt;&lt;/p&gt;
</description><pubDate>Mon, 21 Jun 2010 21:41:38 +0200</pubDate><guid>http://elwis.jogger.pl/2010/06/21/hp-550-wcale-niezly-notebook-w-niskiej-cenie/</guid><category>Ogólne</category><category>hp 550 notebook linux windows 7</category></item><item><title>Fisz</title><link>http://elwis.jogger.pl/2010/05/17/fisz/</link><description>&lt;p&gt;Nie wiem jak to się stało, że tak długo jest fanatykiem wszelkiej muzyki (ostatnio w jeszcze większym stopniu, rapem), a Fisza jeszcze nie znałem. Coś mi się obiło o uszy, ale w zasadzie nigdy nie słyszałem ani nie słuchałem. Ostatnio, zupełnie przypadkowo natrafiłem na jego koncert no i cóż. Pozamiatał. :D Przekozak. Szczególnie nie daje mi spokoju: &lt;a href=&quot;http://w469.wrzuta.pl/audio/1dXLbpEQVFN/fisz_jestescie_gotowi&quot;&gt;http://w469.wrzuta.pl/audio/1dXLbpEQVFN/fisz_jestescie_gotowi&lt;/a&gt;&lt;/p&gt;
</description><pubDate>Mon, 17 May 2010 22:36:43 +0200</pubDate><guid>http://elwis.jogger.pl/2010/05/17/fisz/</guid><category>Ogólne</category></item><item><title>Liebe ist für alle da!</title><link>http://elwis.jogger.pl/2009/10/24/liebe-ist-fur-alle-da-rammstein/</link><description>&lt;p&gt;Niedawno, po czterech latach czekania, ukazał się kolejny album grupy Rammstein pod tytułem &quot;Liebe ist für alle da&quot;. Jako, że należę do tych, którym &quot;Rosenrot&quot; i &quot;Reise, Reise&quot; podobały się, kupiłem i ten album (kupiłbym nawet gdyby kosztowała, jak poprzednie, 50zł zamiast 30-paru). Na necie można znaleźć dużo niepochlebnych opinii na temat tej płyty, a jako, że mi przypadła do gustu postanowiłem się podzielić moimi odczuciami.&lt;/p&gt;
&lt;p&gt;Z jednej strony nie dziwię się, że jakaś część fanów nie lubi tej płyty, bo trzeba przyznać, że nie ma w tym wiele Rammsteina sprzed &quot;Reise, Reise&quot;, z drugiej strony ta muzyka jest bardzo fajna, tak jakby wreszcie znaleźli to czego zaczęli szukać na &quot;Reise, Reise&quot; i ostro kontynuowali na &quot;Rosenrocie&quot;. Jak się dobrze zastanowić, nie ma na tej płycie utworu, który by mi się ewidentnie nie podobał, jak na przykład &quot;Stirb nicht vor mir&quot;, większość natomiast jest fajna, a o sześciu powiedziałbym, że są zajebiste.&lt;/p&gt;
&lt;p&gt;Płyta rozpoczyna się od bardzo fajnego kawałka pod tytułem &quot;Rammlied&quot;. Można ją interpretować jako podziękowanie za oczekiwanie. Tekst ma niezły, a muzycznie jest bardzo przyjemny dla ucha.&lt;/p&gt;
&lt;p&gt;Następny jest utwór pod tytułem &quot;Ich tu dir weh&quot;. Ma interesujący tekst, muzycznie jest przyjemny dla ucha. Nie porywa jakoś szczegółnie, ale można posłuchać.&lt;/p&gt;
&lt;p&gt;Trzeci z kolei jest kawałek, który bardzo mi przypadł do gustu, &quot;Waidmanns Heil&quot;. Ma całkiem zabawny tekst (jakimś cudem udało mi się go przetłumaczyć samemu ;p); bardzo chwytliwy refren i muzycznie bardzo przyjemna piosenka.&lt;/p&gt;
&lt;p&gt;Czwarty z kolei jest &quot;Haifisch&quot;. Kawałek zajebisty muzycznie, z przezajebistym tekstem, po prostu miód. Chyba najlepszy z całej płyty.&lt;/p&gt;
&lt;p&gt;Następny jest przez niektórych uważany za najsłabszy kawałek pod tytułem &quot;B********&quot; (&quot;Bückstabü&quot;). Nie jest może jakiś bardzo ambitny, ale mi się podoba. Całkiem fajnie brzmi ten growl w wykonaniu Tilla.&lt;/p&gt;
&lt;p&gt;Kolejny jest &quot;Frühling in Paris&quot;. Kawałek, choć nie porywa, jest całkiem fajny. Jedyny mankament to to, że Till nie umie śpiewać po francusku. ;p&lt;/p&gt;
&lt;p&gt;Siódmy z kolei jest &quot;Winter Blut&quot;, moim zdaniem bardzo przyjemny kawałek z fajnym refrenem.&lt;/p&gt;
&lt;p&gt;Ósmy z kolei jest utwór pod tytułem &quot;Pussy&quot;, który osobiście bardzo lubię. I za tekst i za muzykę.&lt;/p&gt;
&lt;p&gt;Następnie tytułowe &quot;Liebe ist für alle da&quot;. Przyjemne, fajnie się słucha. Kawałek z jajem.&lt;/p&gt;
&lt;p&gt;Dziesiąty jest kawałek pod tytułem &quot;Mehr&quot;. Bardzo go lubię, bo ma dobry tekst, jest żywa, dobrze się słucha.&lt;/p&gt;
&lt;p&gt;Na sam koniec (jak zwykle jedenasty) utwór pod tytułem &quot;Roter Sand&quot;. Bardzo mi się podoba. Całkiem ciekawą sprawą, że umieścili na sam koniec taki &quot;ludzki&quot; kawałek, taki mówiący, że pełno jest chujstwa (o czym mówią poprzednie utwory), ale jednak jest też trochę piękna na świecie. Ma fajny tekst, i podoba mi się mimo, że jest najwolniejszy.&lt;/p&gt;
&lt;p&gt;Reasumując muzyka z tej płyty jest zupełnie inna niż ta do której Rammstein przyzwyczaił na pierwszych płytach, jak dla mnie mogłoby być jednak więcej klawiszy (bo niestety mało ich tam słyszałem) i może już mniej podchodzi pod miano tanz metalu. Z drugiej strony, choć też bym chętnie posłychał na niej czegoś w stylu &quot;Wollt Ihr das Bett in Flammen sehen&quot; albo &quot;Eifersucht&quot;, ale z drugiej strony chyba lepiej, żeby szukali czegoś nowego, nie koniecznie takiego jak to co było najfajniejszego w Rammsteinie; aniżeli mięliby tworzyć na siłę coś &quot;Rammsteinowego&quot;, ale już bez takiego jaja jak dawniej, albo miałoby stać się kiczowate.&lt;/p&gt;
</description><pubDate>Sat, 24 Oct 2009 18:14:19 +0200</pubDate><guid>http://elwis.jogger.pl/2009/10/24/liebe-ist-fur-alle-da-rammstein/</guid><category>Ogólne</category><category>Recenzje</category></item><item><title>Jak dostosować *nixowy terminal do swoich potrzeb.</title><link>http://elwis.jogger.pl/2009/10/19/jak-dostosowac-terminal-do-swoich-potrzeb/</link><description>&lt;p&gt;Terminal to jedno z ważniejszych narzędzi wielu użytkowników *nixów. Gdy używa się go często i czerpie się garściami z jego walorów, warto jest go dopasować tak, żeby wziąć maksimum. Wymaga to odrobiny pracy, ale myślę, że warto.&lt;/p&gt;
&lt;p&gt;Podstawą podstaw jest czytelność. Jeśli nie mamy dobrze dobranej czcionki, dobrze dobranych kolorów, dużo tracimy. W przypadku terminala, sprawa jest dość prosta, bo czcionką zwykle zajmuje się system operacyjny, ale pozostają jeszcze kolory, które bardzo ułatwiają pracę. Pomijając fakt, że warto ustawić w ustawieniach programu powłoki aliasy, które będą uruchamiać programy (na przykład ls) tak, żeby używały kolorów; warto się zająć też samymi kolorami. Nie zawsze są one dobrze dobrane. Na przykład niebieski jest za ciemny, żółty wygląda brzydko, biały za jasny i takie tam. Na szczęście możemy je przedefiniować w bardzo prosty sposób. Jak zapewne wielu osobom wiadomo, terminal używa 8 kolorów, które nazywają się 0=black, 1=red, 2=green, 3=yellow, 4=blue, 5=magneta, 6=cyan, 7=white. Do zmieniania ich definicji używamy sekwencji ze znakiem &quot;escape&quot;. Składnia jest bardzo prosta: ^[]Pxrrggbb, gdzie ^[ jest znakiem escape (można go uzyskać na wiele sposobów, na przykład wywołując cat z przekierowaniem do pliku i wciskając ESC), x jest numerem koloru, a rrggbb jest definicją koloru w rgb, szesnastkowo. Ja na przykład mam następującą definicję:&lt;/p&gt;
&lt;pre&gt;
echo &quot;^[]P0000000 ^[]P1ff0000 ^[]P200ff00 ^[]P3ffff00 ^[]P43030ff ^[]P5ff00ff ^[]P600ffff ^[]P7909090&quot;
&lt;/pre&gt;
&lt;p&gt;Oczywiście nie samym terminalem żyje człowiek. Żyjemy w XXI wieku, mamy X11 i używamy wirtualnych terminali. Mamy tu wiele różnych opcji: Konsole, Terminal, klasyczny xterm czy mój faworyt, urxvt. Oczywiście sam wybór odpowiedniego emulatora terminala to no nie wszystko. Trzeba go jeszcze dobrze skonfigurować. W przypadku tych łatwych programów nie jest to trudne, jednak nie każdemu muszą one pasować. Ja na przykład lubię urxvt i pokażę jak go szybko i sprawnie skonfigurować.&lt;/p&gt;
&lt;p&gt;Podstawową konfigurację można przeprowadzić za pomocą linii poleceń (opcja dla mało wymagających), używając takich przełączników jak -bg (kolor tła), -fg (kolor tekstu) i -fn (czcionka). Moim zdaniem jednak to za mało, żeby mieć ładny emulator terminala (poza tym ta metoda jest dobra tylko do wywoływania z menu). Dlatego też polecam grzecznie przejrzeć manuala i zabrać się do pracy (lub skorzystać ze ściągawki poniżej :D).&lt;/p&gt;
&lt;p&gt;W przypadku (u)rxvt, konfiguracja odbywa się poprzez wpisanie odpowiednich wartości (tzw. resources, wszystkie można znaleźć w manie) do ~/.Xdefaults (choć może to być jeden z kilku innych, też do wyszperania w manie). U mnie wygląda to tak:&lt;/p&gt;
&lt;pre&gt;
URxvt.background: black
URxvt.foreground: white
URxvt.color0: #dddddd
URxvt.color1: #ff0000
URxvt.color2: #00ff00
URxvt.color3: #ffff00
URxvt.color4: #5050ff
URxvt.color5: #ff00ff
URxvt.color6: #00ffff
URxvt.color7: #ffffff
URxvt.cursorColor: #00ff80
URxvt.cursorColor2: #000000
URxvt.font: -*-courier-medium-r-*-*-25-*-*-*-*-*-*-2
URxvt.mfont: -*-dejavu sans-medium-r-*-*-17-*-*-*-*-*-*-u
URxvt.title: Terminal
URxvt.virtualBell: True
URxvt.loginShell: True
URxvt.scrollBar: False
URxvt.termName: xterm
&lt;/pre&gt;
&lt;p&gt;Sprawa jest dość prosta. Jak widać wszystkie wpisy zaczynają się od URxvt. Wpisy colorn (gdzie 0&amp;gt;=n &amp;gt;=7) definiują kolory (numery analogiczne do tych przestawionych poprzednio); cursorColor definiuje kolor kursora; cursorColor2 to kolor tekstu podświetlonego kursorem; font deklaruje standardowy font; mfont -- font dla znaków unikodu; title definiuje nazwę terminala (skrypty mojego systemu nie rozpoznają rxvt-unicode i produkują nieprzyjemny komunikat przy logowaniu); virtualBell emuluje brzęczyk systemowy; loginShell na true sprawia, że terminal standardowo jest login shellem, a scrollBar włącza pasek przewijania.&lt;/p&gt;
&lt;p&gt;Ładny wygląd terminala to ciągle nie wszystko. Może nawet mniej ważna część. Bardzo istotną sprawą jest program powłoki, bo pozwala bardzo przyspieszyć pracę (a nie tylko nie spowalniać, jak w przypadku terminala). Oprócz popularnego w świecie Linuksów Basha mamy do dyspozycji jeszcze kilka godnych uwagi programów powłoki. Od siebie polecę zsh (ze względu na bardzo duże możliwości -- taki fvwm wśród shelli ;p) i tcsh którego konfigurację opiszę.&lt;/p&gt;
&lt;p&gt;Na początek jednak krótkie wyjaśnienie czemu tcsh. Mianowicie zsh jest jak dla mnie zbyt rozległy, różnorodność wszelakich opcji trochę mnie przytłaczała. Natomiast bash zdaje się być mało wyrafinowany, mało informacji ma w manie i w necie nigdzie nie znalazłem żadnych ciekawych konfiguracji. Za to tcsh ma całkiem spore możliwości i dobrą dokumentację (całą konfigurację udało mi się zrobić na podstawie mana).&lt;/p&gt;
&lt;p&gt;Konfiguracja tcsh to przede wszystkim plik .cshrc (ze względu ma to, że jest tylko rozszerzoną wersją csh). Taką konfigurację można podzielić na trzy części. Zanim zacznę jednak, myślę, że należy zaznaczyć, że ciąg znaków ^[ reprezentuje jeden znak &quot;escape&quot;. W przypadku bindkey, wersja dwuznakowa powinna działać, w przypadku echo już nie koniecznie. Pierwszą częścią są zmienne konfigurujące program, ustawiane poleceniem set:&lt;/p&gt;
&lt;pre&gt;
set savehist = 100
set addsuffix
set complete = &quot;enhance&quot;
set echo_style = &quot;both&quot;
set path = ( &quot;/bin/&quot; &quot;/usr/local/bin/&quot; &quot;/usr/bin&quot; &quot;.&quot; )
set printexitvalue
set prompt = &quot;%{\033[33m%}%c%{\033[31m%}%%%{\033[37m%} &quot;
set rprompt = &quot;[%T][%j]&quot;
set prompt2 = &quot;&amp;gt;&quot;
set rmstar
&lt;/pre&gt;
&lt;p&gt;Zmienna savehist określa ile kolejnych komend powinno być zapisywanych na dysku (jeśli nie ustawione, pamięta tylko komendy z obecnej sesji). Zmienna addsuffix sprawia, że przy dopasowaniu (tab completion) nazwy katalogu, pojawi się za nią znak / zamiast spacji. Ustawienie zmiennej complete na enhance sprawia, że przy dopasowywaniu nie są rozróżniane wielkie i małe litery, a także kropka, podkreślenie i myślnik nie są rozróżniane. Ustawienie zmiennej echo_style na both sprawi, że polecenie echo będzie rozróżniać opcję -n (brak znaku nowej linii na końcu) i będzie rozpoznawać sekwencje ze znakiem &quot;\&quot;. Path chyba jest dość oczywisty, poza składnią typową dla csh. Jak ładnie widać, oprócz standardowych &quot;binów&quot; dodałem sobie bierzący katalog. Zmienna printexitvalue sprawia, że jeśli program zwóci wartość niezerową, csh to zakomunikuje. Zmienna rmstar natomiast sprawia, że zostaniemy poproszeni o potwierdzenie w przypadku wywołania magicznego &quot;rm *&quot;. Niestety nie dotyczy to np &quot;rm katalog/*&quot;.&lt;/p&gt;
&lt;p&gt;Zostały nam jeszcze trzy ważne zmienne ustalające prompt. Jest to jedna z kluczowych rzeczy jeśli chodzi o wygodę pracy z powłoką. Podstawowy prompt składa się z dwóch części, podobnie jak w zsh, wyrównanej do prawej i do lewej. Użyte przeze mnie symbole to: %c (nazwa bieżącego katalogu), %% (czyli procent ;)), %T (czyli godzina w systemie 24-godzinnym) i %j (ilość zadań uruchomionych w tle). Warto również zwrócić uwagę na trochę nietypowy sposób ustawiania kolorów (choć w gruncie rzeczy, dużej różnicy w stosunku do np Basha nie ma). Dla nie wtajemniczonych dopowiem, że % jest używany jako znak zachęty dla nie-roota w csh (tak jak $ w bashu). Na koniec zostaje zmienna prompt2, która definiuje znak zachęty podczas definiowania kolejnych linii pętli foreach i while.&lt;/p&gt;
&lt;p&gt;Następną część stanowią definicje skrótów klawiszowych.&lt;/p&gt;
&lt;pre&gt;
bindkey &quot;\t&quot; complete-word-fwd
bindkey &quot;^[[Z&quot; complete-word-back
bindkey &quot;^[[3~&quot; delete-char
bindkey &quot;^A&quot; expand-glob
bindkey &quot;^[[6~&quot; i-search-back
bindkey &quot;^[[5~&quot; i-search-fwd
&lt;/pre&gt;
&lt;p&gt;Nie jest tego dużo, ale potrafi sporo. Po pierwsze, na tab mam tab-completion z tą właściwością, że od razu dopasowuje pierwszą możliwość w przypadku gdy jest ich wiele. Na shift+tab (^[[Z) mam działanie odwrotne do taba (tj. wybiera poprzednie dopasowanie). Działanie delete (^[[3~) chyba jest oczywiste. :) Na ctrl+A (^A) mam rozwinięcie globu do pełnej postaci (wypisze wszystkie elementy pasujące). Na page up (^[[5~) i page down (^[[6~]) natomiast mam ustawione przeszukiwanie historii odpowiednio do przodu i do tyłu. Jest to bardzo przydatne, bo w trakcie pisania, powłoka podsuwa odpowiedzi, którą można zatwierdzić escapem lub enterem lub odrzucić w razie niepowodzenia -- CTRL+G.&lt;/p&gt;
&lt;p&gt;Trzecią i ostatnią grupą są aliasy, równie przydatne. Wyjaśnię bardzo pobieżnie, bo prawdopodobnie większość będzie oczywista dla większości użytkowników konsoli.&lt;/p&gt;
&lt;pre&gt;
alias df        &quot;df -h&quot;
alias du        &quot;/bin/du -h --max-depth=0&quot;
alias duv       &quot;/bin/du -h --max-depth=1&quot;
alias duvv      &quot;/bin/du -h&quot;
alias for       &quot;foreach&quot;
alias ls        &quot;ls --color -FbxhC&quot;
alias la        &quot;ls -a&quot;
alias ll        &quot;ls -l&quot;
alias lll       &quot;ls -la&quot;
alias mntc0     &quot;sudo mount /dev/hdc /mnt/cd0 -o uid=bartek&quot;
alias mntc1     &quot;sudo mount /dev/hdd /mnt/cd1 -o uid=bartek&quot;
alias mntf      &quot;sudo mount /dev/sda /mnt/flash -o uid=bartek&quot;
alias mntf1     &quot;sudo mount /dev/sda1 /mnt/flash -o uid=bartek&quot;
alias umntc0    &quot;sudo umount /mnt/cd0&quot;
alias umntc1    &quot;sudo umount /mnt/cd1&quot;
alias umntf     &quot;sudo umount /mnt/flash&quot;
&lt;/pre&gt;
&lt;p&gt;Alias df, dość oczywisty; z opcją, która każe wyświetlać wielkości w potęgach kilobajta. Aliasy du, duv i duvv to du z analogiczną opcją do df i w różnych poziomach &quot;wylewności&quot; (ang. verbose :)). W tym przypadku wywołuję du pełną ścieżką, gdyż samo du jest rozpoznawane jako alias. for jest aliasem dla foreach, który jest odpowiednikiem bashowego for w csh. ls, la, ll, lll to chyba dość typowe aliasy dla różnych wariacji na temat ls. Na koniec aliasy do montowania płyt cd i pamięci flash. Ot tak, żeby sobie oszczędzić czasu, bo trochę pisania jest. Podobnie z aliasami do odmonowywania powyższych.&lt;/p&gt;
&lt;p&gt;W prawdzie jest jeszcze wiele rzeczy ułatwiających pracę z konsolą, takich jak nauczenie się języka powłoki, seda, awka, perla i całej reszty na fest; aczkolwiek myślę, że TO już daje możliwość uzyskania już dosyć silnego narzędzia. Zwłaszcza że wybrane przeze mnie opcje to nie wszystko co proponują zaprezentowane narzędzia (odsyłam oczywiście do mana).&lt;/p&gt;
</description><pubDate>Mon, 19 Oct 2009 20:09:37 +0200</pubDate><guid>http://elwis.jogger.pl/2009/10/19/jak-dostosowac-terminal-do-swoich-potrzeb/</guid><category>Ogólne</category><category>Techblog</category><category>unix</category><category>urxvt</category><category>csh</category><category>linux</category><category>konsola</category><category>terminal</category><category>konfiguracja</category></item><item><title>Stare, ale niestety wciąż prawdziwe.</title><link>http://elwis.jogger.pl/2009/10/06/stare-ale-niestety-wciaz-prawdziwe/</link><description>&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=dfhFGA_7ZWs&quot;&gt;http://www.youtube.com/watch?v=dfhFGA_7ZWs&lt;/a&gt;&lt;br&gt;
Ostatnio nie mogę przestać słuchać tej piosenki. Najsmutniejsze w niej jest to, że choć ma 25 lat (jak nie lepiej) to wciąż jest w większości (jak nie we wszystkim) wciąż aktualna...&lt;/p&gt;
</description><pubDate>Tue, 06 Oct 2009 22:12:52 +0200</pubDate><guid>http://elwis.jogger.pl/2009/10/06/stare-ale-niestety-wciaz-prawdziwe/</guid><category>Ogólne</category><category>życie</category><category>T.Love Wychowanie</category></item><item><title>Pussy - Nowy singiel Rammsteina.</title><link>http://elwis.jogger.pl/2009/09/30/pussy-nowy-singiel-rammsteina/</link><description>&lt;p&gt;Parę dni temu, po paru latach czekania, Rammstein wypuścił pierwszy singiel promujący ich nowy album. Singiel nazywa się &quot;Pussy&quot;, a album ma się nazywać &quot;Liebe ist für alle da&quot; i wyjść pod koniec października bierzącego roku. Wraz z singlem wyszedł również teledysk, który wzbudził dość spore kontrowersje (których osobiście nie rozumiem, ale o tym trochę później), ze względu na to, że jest wulgarny, zawiera sceny pornograficzne i takie tam. Co więcej, nie są to takie pojedyncze ujęcia jak w przypadku teledysu do &quot;Mann gegen Mann&quot;, te sceny zajmują bardzo znaczą część teledysku. Teledysk w wersji nieocenzurowanej można obejrzeć tutaj: &lt;a href=&quot;http://visit-x.net/rammstein/&quot;&gt;http://visit-x.net/rammstein/&lt;/a&gt;. Tylko dla widzów dorosłych, nie odpowiadam za jego treść, itp.&lt;/p&gt;
&lt;p&gt;Zarówno teledysk jak i sama piosenka bardzo mi się podobają, choć mogłyby wydawać się idiotyczne i nie na poziomie (uważam, że jest inaczej). Uważam również, że oburzenie jest zupełnie nie na miejscu. Myślę, że każdy szanujący się fan wie jakie są ich teksty (dajmy na to &lt;a href=&quot;http://www.tekstowo.pl/piosenka,rammstein,rein_raus.html&quot;&gt;&quot;Rein raus&quot;&lt;/a&gt; czy &lt;a href=&quot;http://www.tekstowo.pl/index.php/tlumaczenie/Rammstein/Te_Quiero_Puta&quot;&gt;&quot;Te Quiero Puta!&quot;&lt;/a&gt;) i co się dzieje na ich koncertach (dajmy na to &lt;a href=&quot;http://www.youtube.com/watch?v=bW03c4Vmr0k&quot;&gt;jedno z wykonań &quot;Bück Dich&quot;&lt;/a&gt;). Moim zdaniem teledysk i piosenka są zwyczajnie Rammsteinowe, a skalę zjawiska bym raczej traktował jako prezent dla długo oczekujących fanów, w niepewności co dalej będzie z zespołem.&lt;/p&gt;
&lt;p&gt;Pomijając to wszystko, jest jeszcze jedno o czym warto wspomnieć. Daje jako takie pojęcie o tym co się znajdzie na nowej płycie, zwłaszcza, że zmiany jakie zaszły w albumach &quot;Reise Reise&quot; i &quot;Rosenrot&quot; zostały przyjęte bardzo różnie. Jeśli o mnie chodzi, bardzo lubię te dwa albumy i jestem dobrej myśli jeśli chodzi o &quot;Liebe ist für alle da&quot;&lt;/p&gt;
</description><pubDate>Wed, 30 Sep 2009 16:36:25 +0200</pubDate><guid>http://elwis.jogger.pl/2009/09/30/pussy-nowy-singiel-rammsteina/</guid><category>Ogólne</category><category>Recenzje</category><category>Rammstein</category><category>Pussy</category><category>teledysk</category></item><item><title>Podstawy używania GNU Debugera.</title><link>http://elwis.jogger.pl/2009/09/29/podstawy-uzywania-gnu-debugera/</link><description>&lt;p&gt;GDB jest jednym z ważniejszych narzędzi programisty w świecie *nixów. Zwłaszcza jeśli doliczy się jego frontendy. Tak czy inaczej, choć mogłoby się wydawać inaczej (ze względu na to, że jest w 100% CLI), jest bardzo potężnym i dość wygodnym narzędziem. Wystarczy poznać kilka podstawowych poleceń, żeby skutecznie odpluskwiać programy. Niestety nie znalazłem w polskim internecie, żadnych tutoriali o GDB, toteż postanowiłem się podzielić listą najczęściej używanych przeze mnie poleceń.&lt;/p&gt;
&lt;p&gt;Na początek parę uwag technicznych. GDB, jak wspomniałem, uruchamiamy pod konsolą. Zwyle podajemy w linii polceń nazwę pliku z programem, który chcemy debugować (jeśli tego nie zrobimy, należy wydać polecenie &quot;file &amp;lt;nazwa programu&amp;gt;&quot;). Aby GDB miał dostęp do symbloli takich jak nazwy zmiennych, funkcji, itp, program musi być odpowiednio skompilowany (np. w przypadku gcc i nasma trzeba użyć przełącznika &quot;-g&quot;). Jeśli zamiast polecenia wpisze się pustą linię (&quot;\n&quot;), zostanie wykonanie poprzedniej operacji. Wpisanie w linii poleceń samych białych znaków nie spowoduje żadnego działania.&lt;/p&gt;
&lt;p&gt;Gdy mamy załadowany program, z reguły robię jedną z dwóch rzeczy. Pierwszy przypadek to wystąpienie błędu takiego jak sygnały SIGSEGV i SIGABRT. Jest to szybka sprawa. Zaczynamy od razu od wpisania polecenia &quot;run &amp;lt;linia poleceń&amp;gt;&quot;. Jeśli program jest interaktywny, działamy tak, żeby wywołać błąd. W momencie jego wystąpienia, GDB o tym poinformuje. Wówczas można użyć kilka razy polecenia &quot;up&quot;, które poda miejsce, w którym została wywołana obecna funkcja. Zwykle pierwszych parę wywołań tego polecenia poda parę miejsc poza twoim programem (np. glibc). Przykładowo może wyglądać to tak:&lt;/p&gt;
&lt;pre&gt;
bash-3.1$ gdb a.out
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type &quot;show copying&quot;
and &quot;show warranty&quot; for details.
This GDB was configured as &quot;i486-slackware-linux&quot;...
(gdb) run
Starting program: /tmp/a.out 
*** glibc detected *** /tmp/a.out: free(): invalid pointer: 0x0804a009 ***
======= Backtrace: =========
/lib/libc.so.6[0xb7de98c4]
/lib/libc.so.6(cfree+0x90)[0xb7ded370]
/tmp/a.out[0x80483b2]
/lib/libc.so.6(__libc_start_main+0xe0)[0xb7d94390]
/tmp/a.out[0x8048321]
======= Memory map: ========
08048000-08049000 r-xp 00000000 03:06 575488     /tmp/a.out
08049000-0804a000 rw-p 00000000 03:06 575488     /tmp/a.out
0804a000-0806b000 rw-p 0804a000 00:00 0          [heap]
b7c00000-b7c21000 rw-p b7c00000 00:00 0 
b7c21000-b7d00000 ---p b7c21000 00:00 0 
b7d72000-b7d7c000 r-xp 00000000 03:06 187042     /usr/lib/libgcc_s.so.1
b7d7c000-b7d7d000 rw-p 00009000 03:06 187042     /usr/lib/libgcc_s.so.1
b7d7d000-b7d7e000 rw-p b7d7d000 00:00 0 
b7d7e000-b7ec4000 r-xp 00000000 03:06 601542     /lib/libc-2.7.so
b7ec4000-b7ec5000 r--p 00146000 03:06 601542     /lib/libc-2.7.so
b7ec5000-b7ec7000 rw-p 00147000 03:06 601542     /lib/libc-2.7.so
b7ec7000-b7ecb000 rw-p b7ec7000 00:00 0 
b7ee9000-b7f05000 r-xp 00000000 03:06 601584     /lib/ld-2.7.so
b7f05000-b7f07000 rw-p 0001b000 03:06 601584     /lib/ld-2.7.so
bf8de000-bf8f3000 rw-p bffeb000 00:00 0          [stack]
ffffe000-fffff000 r-xp 00000000 00:00 0          [vdso]

Program received signal SIGABRT, Aborted.
0xb7da8c66 in raise () from /lib/libc.so.6
(gdb) up
#1  0xb7daa571 in abort () from /lib/libc.so.6
(gdb) 
#2  0xb7de196b in __libc_message () from /lib/libc.so.6
(gdb) 
#3  0xb7de98c4 in _int_free () from /lib/libc.so.6
(gdb) 
#4  0xb7ded370 in free () from /lib/libc.so.6
(gdb) 
#5  0x080483b2 in main () at x.c:5
5               free (x+1);
(gdb) 
&lt;/pre&gt;
&lt;p&gt;Drugi, właściwy przypadek jest taki, że coś nie działa tak jak powinno. Wówczas trzeba już znać kilka poleceń i GDB może pokazać więcej mocy. Podstawą w takim wypadku jest ustawienie breakpointa w miejscu w którym zaczniemy analizować program. Używamy do tego polecenia &quot;break &amp;lt;gdzie przerwać&amp;gt;&quot; gdzie parametrem może być nazwa funkcji (np. main) lub numer linijki. W przypadku programów wieloplikowych, numer linii można podać w postaci plik_zrodlowy:numer. Jeśli nie ma nazwy pliku, przyjmowany jest plik z którego pochodzą obecnie analizowane instrukcje (przed uruchomieniem przyjmowany jest plik z punktem startowym - w przypadku c/c++ plik z funkcją main). Jest również możliwość podania adresu.&lt;/p&gt;
&lt;p&gt;Gdy jesteśmy w odpowiednim miejscu, czas na przemieszczanie się w programie. Służą do tego, między innymi, polecenia:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;continue -- program jest kontynuowany. Zatrzyma się w przypadku zakończenia programu bądź natrafienia na breakpoint. Należy zaznaczyć, że linijka wypisana po natrafieniu na breakpoint nie zostaje już wykonana.&lt;/li&gt;
&lt;li&gt;next -- zostaje wykonana kolejna linijka (ta ostatnio wypisana) po czym wypisywana jest kolejna i program zostaje zatrzymany.&lt;/li&gt;
&lt;li&gt;step -- działa podobnie do next, z tym, że jeśli wywoływana jest w linii funkcja, której kod jest dostępny (tj. został skompilowany z odpowiednią flagą), gdb przejdzie do tej funkcji i będzie można ją przeanalizować.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Polecenia stepi i nexti działają analogicznie z tym, że wykonują tylko jedną instrukcję procesora.&lt;/p&gt;
&lt;p&gt;Czasami uciążliwe jest to, że gdb wypisuje tylko jedną linijkę. Jeśli zachodzi potrzeba zobaczyć ją w szerszym konekście (nie mówiąc o przypadku, gdy w linii jest znak nowej linii) można użyć polecenia &quot;list&quot;. Wówczas zostanie wypisana linia która zostanie wykonana jako następna, a także kilka poprzednich i kilka następnych. Jeśli tych kilka linijek to za mało, wpisać jeszcze raz, wówczas wypisanych zostanie jeszcze kilka następnych linii. Do polecenia list można dodać jeszcze numer linii (w takiej formie jak w break, może być również nazwa funkcji, itp). Wówczas zamiast obecnej linii, jako środkową będzie wzięta ta podana. W tym przypadku ponowne wpisanie polecenia zrobi to samo, a wciśnięcie entera wypisze kilka następnych&quot;.&lt;/p&gt;
&lt;p&gt;Oczywiście można również podglądać wartości zmiennych. Służy do tego funkcja &quot;print &amp;lt;wyrazenie&amp;gt;&quot;, gdzie wyrażenie może być praktycznie wszystkim. Może to być nazwa zmiennej, może to być wynik działania (na przykład dereferencji); może być to również rejestr procesora (wówczas należy przedzić go dolarem, np. &quot;$eax&quot;). Jest również możliwość wypisywania takiej informacji za każdym razem, gdy program zostaje zatrzymany. Wówczas używamy funkcji display. Tak wypisywane wartości są ponumerowane. Aby gdb przestał wypisywać tę wartość należy użyć funkcji &quot;undisplay &amp;lt;numer&amp;gt;&quot;. Jeśli numer zostanie pominięty, usunięte zostaną wszystkie. W przypadku rejestrów jest również dodatkowa możliwość, funkcja &quot;info registers&quot;, w skrócie &quot;i r&quot;, która wypisuje stan wszystkich dostępnych rejestrów. Wygląda to mniej więcej tak:&lt;/p&gt;
&lt;pre&gt;
(gdb) i r
eax            0xa      10
ecx            0x804a048        134520904
edx            0x804a020        134520864
ebx            0xb7fb8ff4       -1208250380
esp            0xbfce0d20       0xbfce0d20
ebp            0xbfce0d48       0xbfce0d48
esi            0xb7ff8ce0       -1207989024
edi            0x0      0
eip            0x804858e        0x804858e 
eflags         0x200346 [ PF ZF TF IF ID ]
cs             0x73     115
ss             0x7b     123
ds             0x7b     123
es             0x7b     123
fs             0x0      0
gs             0x33     51
&lt;/pre&gt;
&lt;p&gt;Jest to trochę więcej niż w przypadku print, więc można dodać jeszcze nazwę rejestru. Wówczas wypisany zostanie tylko ten rejestr. Na przykład &quot;i r eflags&quot;&lt;/p&gt;
&lt;p&gt;Czasami wypisywanie pojedynczych zmiennych to zdecydowanie za mało. Wówczas można użyć polecenia examine do wypisania zawartości pamięci z danego adresu. Ma ona postać &quot;x/[ile][podstawa][typ] wskaźnik&quot;. Szczęgóły w &quot;help x&quot;. Na przykład, aby wypisać 12 słów 16 bitowych, w systemie szesnastkowym, spod adresu zapisanego w rejestrze ebp:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
(gdb) x/12xh $ebp
0xbfb76bd8:     0x6c48  0xbfb7  0xe390  0xb7e1  0xfce0  0xb7f8  0x8d00  0x0804
0xbfb76be8:     0x6c48  0xbfb7  0xe390  0xb7e1
&lt;/pre&gt;
&lt;p&gt;To już wszystko. Tych poleceń używam najczęściej i one wystarczają do całkiem sprawnego debugowania, choć oczywiście jest to zaledwie mała cząstka możliwości tego programu, wystarczy poczytać pomoc (polecenie &quot;help&quot;) do czego zachęcam.&lt;/p&gt;
</description><pubDate>Tue, 29 Sep 2009 18:59:20 +0200</pubDate><guid>http://elwis.jogger.pl/2009/09/29/podstawy-uzywania-gnu-debugera/</guid><category>Ogólne</category><category>Techblog</category><category>GDB</category><category>debugowanie</category><category>turorial</category><category>linux</category><category>unix</category></item><item><title>Dwa pozytywne kawałki.</title><link>http://elwis.jogger.pl/2009/08/12/dwa-pozytywne-kawalki/</link><description>&lt;p&gt;Dawno nic nie pisałem. Lipiec upłynął miło, bo z dala od zwykłego świata, do dziś sierpień mijał pod znakiem nudy. Dziś postanowiłem wyjebać Archa (zaczynał się sypać) i zainstalować Slackwarea. Od razu znalazło się zajęcie i jest fajnie. Do tego słucham właściwie dwóch kawałków na okrągło, którymi chciałbym się podzielić.&lt;/p&gt;
&lt;p&gt;Pierwszym z nich jest utwór Dub Fxa (który urzekł mnie swoim występem na Przystanku Woodstock) pod tytułem &quot;Time Will Tell&quot;. Nie jest to ta euforia co na Woodstocku (o którym, mimo, że był moim pierwszym i był świetny, nie chciało mi się napisać ;p), ale i tak jest nadzwyczajny (nie oszukujmy się, nie wiele rzeczy dorównują takiemu koncertowi). Można posłuchać na: http://dubfx.bandcamp.com/ . Tak na marginesie cała płyta jest warta przesłuchania, a nawet kupienia (choć 14 euro to trochę sporo). Warto również zaznaczyć, że wszystko oprócz wokalu i saksofonu na tej płycie to beatbox (oprócz saksofonu) posklejany cyfrowo w pętle i zmiksowany. Koleś zdołał to robić na żywo przed paroma setkami tysięcu ludu.&lt;/p&gt;
&lt;p&gt;Drugi kawałek jest jednym z tych które mają świetny rerfren, który przesłania całą resztę. Właściwie jeszcze nie zdąrzyłem się wsłuchać w resztę utworu, ale cóż, takie życie. Utwór pochodzi z albumu pod tytułem &quot;Propaganja - Diss na rząd&quot; nosi tytuł &quot;A ty nie!&quot; i nie pozwala mi nie zacieszać słysząc go. Płytę można znaleźć do ściągnięcia za darmo, a posłuchać na Youtube : http://www.youtube.com/watch?v=0gkxkf_KXu4 . Warto zauważyć, że płyta, choć trochę nazbytyt hip-hopowa jak na mój gust (poprzednia była bardziej reggae), jest godna uwagi.&lt;/p&gt;
</description><pubDate>Wed, 12 Aug 2009 23:01:19 +0200</pubDate><guid>http://elwis.jogger.pl/2009/08/12/dwa-pozytywne-kawalki/</guid><category>Ogólne</category><category>życie</category></item><item><title>Szybki program do modyfikacji plików z napisami.</title><link>http://elwis.jogger.pl/2009/06/10/szybki-program-do-modyfikacji-plikow-z-napisami/</link><description>&lt;p&gt;Czasami (może nawet trochę częściej) jeśli ściąga się filmy i napisy osobno występuje problem synchronizacją. Strasznie upierdliwa sprawa. Oczywiście zwykle jest to proste przesunięcie, w całym filmie, lub na przykład po każdej przerwie na reklamy, więc wystarczy trzymać paluchy na z i x (oczywiście, o ile używa się mplayera). Jest to oczywiście półśrodek, zwłaszcza jeśli owe filmy archiwizujemy i/lub dzielimy się nimi z innymi. Dlatego też napisałem prosty plugin dla vima, który pozwala bardzo łatwo i przyjemnie (najlepiej w połączeniu z mplayerem, w którym można łatwo kontrolować numer odtwarzanej w danym momencie klatki) poradzić sobie z problemem napisów pojawiających się za wcześnie lub za późno.&lt;/p&gt;
&lt;p&gt;{geshi}&quot; Submaker -- video subtitle editor ver 20090611 - early one &quot; (c) by Bartosz Pastudzki 2009 &quot; I wrote this file. As long as you retain this notice you can do whatever you &quot; want with this stuff. If we meet some day, and you think this stuff is worth &quot; it, you can buy me a beer in return. &quot; Split subtitle line into list of content : [start,end,text] function SplitLine (line) let cline = getline (a:line) let start = match (cline, &quot;{&quot;) if (start == -1) throw &quot;start1&quot; endif let end = match (cline, &quot;}&quot;, start) if (end == -1) throw &quot;end1&quot; endif let subStart = str2nr (cline[start+1 : end-1]) if (start == -1) throw &quot;start2&quot; endif let start = match (cline, &quot;{&quot;, end) let end = match (cline, &quot;}&quot;, start) if (end == -1) throw &quot;end2&quot; endif let subEnd = str2nr (cline[start+1 : end-1]) let content = match (cline, '\S', end+1) return [subStart, subEnd, cline[content :] ] endfunction &quot; Function opposite to SplitLine -- create valid subtitle line from content list function JoinContent (content) return &quot;{&quot;. a:content[0] . &quot;}{&quot; . a:content[1] . &quot;}&quot; . a:content[2] endfunction &quot; Function to find out if subtitle file is valid function Validate () for lineNum in range (1,line (&quot;$&quot;)) try call SplitLine (lineNum) catch /.+/ return lineNum endtry endfor return -1 endfunction &quot; Low level version of Delay. It takes numbers of lines too. It's not intended &quot; to be called directly by user. function DelayLL (delay, start, end) for line in range (a:start,a:end) let content = SplitLine (line) let content[0] += a:delay let content[1] += a:delay let nline = JoinContent (content) call setline (line, nline) endfor endfunction &quot; Delay selected part of text function DelayS (delay) call DelayLL (a:delay, a:firstline, a:lastline) endfunction &quot; Standard delay, from current line to the end function Delay (delay) call DelayLL (a:delay, line (&quot;.&quot;), line (&quot;$&quot;)) endfunction function GoToFrame (frame) let linenum = 0 while 1 let linenum += 1 let last = SplitLine (linenum) if (last[1] &amp;gt;= a:frame) break elseif (linenum == line (&quot;$&quot;)) break endif endwhile call setpos (&quot;.&quot;, [0,linenum,1]) endfunction {/geshi}&lt;/p&gt;
&lt;p&gt;Aby móc używać go w dowolnym momencie, należy zapisać go na dysku, w odzielnym pliku i do pliku .vimrc dodać linijkę &quot;source &quot;. Funkcjami, które służą do używania z zewnątrz są Delay, DelayS i GoToFrame.&lt;/p&gt;
&lt;p&gt;Funkcja Delay opóźnia wszystkie napisy od linii w której znajduje się kursor do końca. Na przykład wywołanie &quot;:call Delay (-5)&quot; przesunie je o 5 klatek w tył.&lt;/p&gt;
&lt;p&gt;Funkcja DelayS działa tak samo jak Delay, z tą różnicą przesuwa tylko te zaznaczone.&lt;/p&gt;
&lt;p&gt;Funkcja GoToFrame przesuwa kursor do linijki, w której znajduje się napis, który się wyświetli się w klatce podanej w parametrze bądź następnego, jeśli w tej klatce nie ma żadnego napisu.&lt;/p&gt;
&lt;p&gt;Należy zaznaczyć, że program działa tylko dla napisów w formacie &quot;{start}{koniec} napis&quot; i nie zadziała poprawnie jeśli liczba klatek przekroczy zakres 32-bitowej liczby ze znakiem (2&lt;sup&gt;31&lt;/sup&gt;).&lt;/p&gt;
&lt;p&gt;Mam nadzieję, że komuś się przyda, będę wdzięczny za wszelkie uwagi i sugestie, ewentualnie łatki.&lt;/p&gt;
</description><pubDate>Wed, 10 Jun 2009 22:16:46 +0200</pubDate><guid>http://elwis.jogger.pl/2009/06/10/szybki-program-do-modyfikacji-plikow-z-napisami/</guid><category>Ogólne</category><category>Programowanie</category><category>Techblog</category><category>vim</category><category>subtitles</category><category>editor</category></item><item><title>Bardzo skrótowa prezentacja GNU R.</title><link>http://elwis.jogger.pl/2009/03/24/bardzo-skrotowa-prezentacja-gnu-r/</link><description>&lt;p&gt;Już od dłuższego czasu używam &lt;a href=&quot;http://pl.wikipedia.org/wiki/LaTeX&quot;&gt;LaTeXa&lt;/a&gt; i bardzo sobie go chwalę. W sumie, myślę, że chyba nikogo kto miał przyjemność z tego narzędzia korzystać, nie trzeba przekonywać o jego licznych zaletach. W tym semestrze jeszcze częściej go używam, ze względu na sprawozdania z laboratoriów z miernictwa. Nie dbam o to jak to robią inni, ale ja sobie cenię estetykę dokumentów (trzeba się naprawdę postarać, żeby LaTeX coś złożył brzydko) i bardzo wygodne składanie wzorów matematycznych, tudzież wcale niezły system referencji. Jest jednak luka w funkcjonalności (oczywiście nie uważam, że to źle, przeciwnie) LaTeXa jaką odczułem przy okazji pisania wspomnianych sprawozdań, nie daje dobrego sposobu na generowanie wykresów. W tym miejscu z pomocą przychodzi &lt;a href=&quot;http://pl.wikipedia.org/wiki/GNU_R&quot;&gt;GNU R&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;GNU R stanowi bardzo dobre uzupełnienie dla LaTeXa, głównie dlatego, że i ten opiera się o napisanie paru linijek kodu na podstawie którego można wygenerować żądany wykres w jednym z kilku dostępnych formatów (między innymi svg, png). Można też po prostu wyświetlić ten wykres na ekranie. Jak dla mnie to świetna sprawa.&lt;/p&gt;
&lt;p&gt;Prosty wykres to kwestia paru linijek, na przykład:&lt;/p&gt;
&lt;pre&gt;
png(file=&quot;test.png&quot;, width=400, height=400)
ib &amp;lt;- seq(50,300, by=50)
delta &amp;lt;- c(5.7, 5.3, 3.68, 3.24, 3.30, 1.93)
plot(ib, delta, xlab=&quot;Ib[mA]&quot;, ylab=&quot;Bład względny[%]&quot;)
abline(6.45, -0.015)
&lt;/pre&gt;
&lt;p&gt;W sumie wszystko właściwie widać. Określamy output (plik.png). Tworzymy dwie listy (ib i delta) które wykorzystamy jako współrzędne dla naniesionych punktów. W pierwszym przypadku użyta została funkcja seq(x,y, by=z), która zwraca tablicę elementów od x do y co z. W przypadku delta użyłem funkcji c(e1, e2, e3, ..., en), która po prostu tworzy tablicę z danych argumentów. W następnej linijce jest funkcja plot, która rysuje wykres z naniesionymi punktami, których kolejne współrzędne x są wzięte z ib, a współrzędne y z delta. Dalej znajdują się jeszcze opcjonalne wartości xlab i ylab zawierające opisy osi. Pominięto też parametr, którym można ustawić, by punkty były połączone łamaną. Na sam koniec rysuję prostą przy pomocy funkcji abline, która jest nieco nieintuicyjna ze względu na to, że przyjmuje wartość y dla x = 0 i współczynnik kierunkowy, niezależne od skali i przedziałów jakie będą przyjęte dla poszczególnych osi, ale w sumie to dobrze, że tak jest.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;W wyniku przetworzenia takiego kodu otrzymamy coś takiego:&lt;br&gt;
&lt;a href=&quot;http://img11.imageshack.us/my.php?image=testsze.png&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://img11.imageshack.us/img11/2407/testsze.th.png&quot; border=&quot;0&quot; alt=&quot;Free Image Hosting at www.ImageShack.us&quot;&gt;&lt;/a&gt;&lt;br&gt;
Jest to oczywiście kwestia gustu, ale jak dla mnie jest to rozwiązanie szybsze, wygodniejsze i łatwiejsze w modyfikacji od konkurencji, dajmy na to Microsoft Excel.&lt;/p&gt;
&lt;p&gt;Oczywiście jest to bardzo mała cząstka możliwości tego narzędzia (szczerze mówiąc sam ledwo je poznałem ;)), można wygenerować całą masę fajnych wykresów (tu odsyłam do polecenia demo(graphics) w interpreterze GNU R, który pokaże kilka wykresów – takich już pro, nie to co ja wam zaserwowałem ;p – wraz z kodami źródłowymi). To by było na tyle, ale jednak tekst ten powstał jedynie po to by zasygnalizować, że taka zabawka istnieje i nie jest zbyt popularna, a przecież bywa dość przydatna.&lt;/p&gt;
</description><pubDate>Tue, 24 Mar 2009 22:07:26 +0100</pubDate><guid>http://elwis.jogger.pl/2009/03/24/bardzo-skrotowa-prezentacja-gnu-r/</guid><category>non-GUI</category><category>Ogólne</category><category>Programowanie</category><category>Techblog</category><category>unix</category><category>GNU R</category><category>wykresy</category><category>LaTeX</category><category>WYSIWYM</category></item><item><title>O wydajności MS Windows.</title><link>http://elwis.jogger.pl/2009/03/21/o-wydajnosci-ms-windows/</link><description>&lt;p&gt;O tym, że Windows nie grzeszy wydajnością wiadomo od dawna. Widać to zwłaszcza na moim nieco starym sprzęcie, na którym nawet Windows XP z SP2 i antywirusem nie chodzi zbyt płynnie, na którym Linux pozwala oszczędzić bluzgania na sprzęt. Kolejną rzeczą która dostarczyła mi danych na temat wydajności obu systemów jest fajny FPS pod tytułem Nexuiz - Jak kiedyś próbowałem na Windowsie, niezależnie od ustawień grafiki, gra chodziła płynnie tylko do momentu w którym się pojawiał jakiś przeciwnik (czyli tak trochę kicha). Na każdym unix-like'u na którym próbowałem tej gry da się grać właściwie bez ścinania.&lt;/p&gt;
&lt;p&gt;Dziś natomiast w newsletterze z gram.pl zauważyłem, że za 18 złotych można kupić World of Goo (swoją drogą, nie rozumiem ludzi, którzy kradną fajną taką grę mimo niskiej ceny). Patrzę na wymagania sprzętowe. Trochę kiepsko, bo one przewyższają mój sprzęt prawie dwukrotnie, na zalecane Pentium 4, 2GHz z 1GB RAM i kartą graficzną 128MB, AMD XP 1700+ (1GHz), 512 MB RAM i GeForce 2 to jednak trochę mało. Pomyślałem sobie, że i tak ściągnięcie demka nic mnie nie kosztuje. Tak też zrobiłem i się załamałem, bo gra chodzi wcale płynnie.&lt;/p&gt;
&lt;p&gt;No nic, wracam do gry, bo zaczyna mnie wciągać. :)&lt;/p&gt;
</description><pubDate>Sat, 21 Mar 2009 11:43:56 +0100</pubDate><guid>http://elwis.jogger.pl/2009/03/21/o-wydajnosci-ms-windows/</guid><category>Ogólne</category><category>OSowe wojny</category><category>życie</category></item><item><title>Przeczytane : Jewgienij Łukin – Strefa Sprawiedliwości.</title><link>http://elwis.jogger.pl/2009/02/22/przeczytane-jewgienij-lukin-strefa-sprawiedliwosci/</link><description>&lt;p&gt;Ostatnio, szwendając się po kolporterze, natrafiłem na kilka pozycji tego autora, obok Serii Patroli Siergieja Łukianienki, która przypadła mi do gustu, toteż postanowiłem spróbować i zakupiłem książkę pt. &quot;Strefa Sprawiedliwości&quot; (&quot;Зона справедливости&quot;) i przeczytałem. Tekst ten piszę ze względu na to, że w polskim internecie w zasadzie nie widziałem żadnych opinii na temat książek tego autora.&lt;/p&gt;
&lt;p&gt;Strefa sprawiedliwości jest książką, której najbliżej jest do fantastyki, aczkolwiek jednocześnie bardzo ciężko zaliczyć ją do tego gatunku, gdyż jedynym elementem fantastycznym są niewyjaśnione wydarzenia, które są właściwie tłem dla opisywanych wydarzeń. Odnoszę wrażenie, że są one tylko pretekstem do pokazania pewnych cech narodu rosyjskiego.&lt;/p&gt;
&lt;p&gt;Powieść opisuje wydarzenia związane z tajemniczą siła która bije każdego kto się znajdzie w owej strefie, zgodnie z tym ile w życiu nagrzeszył. Kilku tylko pieściło, innych porządnie pobiło, innych zmasakrowało. Te niewyjaśnione wydarzenia zaowocowały licznymi teoriami spiskowymi, większym popytem na usługi wszelkiej maści wróżek, licznymi nawróceniami i świetnym tematem dla prasy.&lt;/p&gt;
&lt;p&gt;Głównym bohaterem i jednocześnie narratorem jest 45-letni, dość wykształcony Rosjanin, jeden z mieszkańców feralnego domu. Człowiek do bólu uczciwy, nieco zagubiony w ówczesnym społeczeństwie, nie omieszka nas poczęstować licznymi opisami niezbyt chlubnych zjawisk, jakie obserwuje w owym społeczeństwie.&lt;/p&gt;
&lt;p&gt;Książka, choć być może bez bardzo wyszukanej fabuły, jest dość ciekawie napisana, miejscami zabawna, bardzo szybko się czyta. Pozycja jak najbardziej godna polecenia.&lt;/p&gt;
</description><pubDate>Sun, 22 Feb 2009 15:23:20 +0100</pubDate><guid>http://elwis.jogger.pl/2009/02/22/przeczytane-jewgienij-lukin-strefa-sprawiedliwosci/</guid><category>Ogólne</category><category>Recenzje</category><category>Jewgienij Łukin</category><category>Strefa Sprawidliwości</category></item><item><title>Kochana piła...</title><link>http://elwis.jogger.pl/2009/02/17/kochana-pila/</link><description>&lt;p&gt;W przerwach od przygotowywania się do egzaminu z fizyki (a może odwrotnie? :)) gram sobie w DooMa II. Żeby było ciekawiej, gram na &quot;High Violence&quot; (najwyższy poza ździebko niegrywalnym nightmare ;p) i do tego bez mouselooka (tak jest ciekawiej). Ten poziom trudności ma to do siebie, że tak po 7 poziomach jest spory kłopot z amunicją. Pełno jest impów, demonów i co gorsza wszelkiego innego ustrojstwa które nie zostawia amunicji, a mało chaingunierów, a jeszcze mniej kolesi ze śrututówkami. Dlatego tak bardzo doceniłem zdolność dobrego operowania piłą. Jest to chyba najlepszy sposób oszczędzania amunicji (przede wszystkim od shotguna, który jednak jest najczęściej stosowaną przeze mnie bronią), zaraz po wykorzystywaniu agresji potworów (jako zagorzały pacyfista, jeśli mogę, lubię napuścić stwory na siebie, żeby sobie powalczyły między sobą ;p) i zaraz przed BFG9000 (o taak :)) i wyrzutnią rakiet, które jednak mają ten feler, że też wymagają amunicji. ;p&lt;/p&gt;
&lt;p&gt;Co ciekawe, przy odrobinie wprawy można zdziałać naprawdę dużo zdziałać samą piłą. Nawet pomijając te najsłabsze potwory, które od razu się rozlatują. Gdy bawimy się z demonami (tymi różowymi i niewidzialnymi), a w około nie ma strzelców, zwykle można sobie poradzić samą piłą. Zwłaszcza przy jednoosobowym korytarzu (wówczas jest to właściwie kopanie leżącego), ale i na otwartych przestrzeniach można tak się zakręcić, żeby po kolei delikwentów wyrżnąć. Kłopot jest tylko jak cię przyprą do ściany, wtedy lepiej użyć BFG. :)&lt;/p&gt;
&lt;p&gt;Jednakże zabijanie demonów piłą jest niezbyt wielkim wyzwaniem. Dużo ciekawiej wygląda walka z trochę silniejszymi przeciwnikami. Na ataki obłąkanego drwala są narażone przede wszystkim &quot;głowy&quot;. Te czerwone z bazooką w gardle są chyba najłatwiejsze. Wystarczy się wbić. Problem się zaczyna gdy jest ich więcej, ale na szczęście dalsze etapy są bardzo przestronne i można je wybijać po kolei. Trochę cięższe są te co miotają małymi głowami, o których za chwilę. W tym przypadku trzeba dodatkowo zadbać o to, żeby nie zdążyła za dużo tych &quot;łebków&quot; naprodukować. Wbrew pozorom najbardziej upierdliwe są te małe łebki, bo tu nie wystarczy na chama wciskać &quot;spust&quot;. Zwykle należy się uchylić i wbić się w potylicę. Biorąc pod uwagę, że pojawiają się one często hurtem, wolę już zmarnować trochę obrotówki, albo shotguna.&lt;/p&gt;
&lt;p&gt;Co ciekawe piłą można nawet załatwić szkieletory (te wysokie z bazooką). W tym przypadku niemal konieczne jest zajście od tyłu lub od boku (chyba że się ma god mode), ale jak już się nauczysz czaić za rogiem będą twoje. Trzeba tylko uważać, bo czasami mogą uderzyć (nie wiem kiedy ale już udaje mi się temu zapobiegać) co jest trochę bolesne.&lt;/p&gt;
&lt;p&gt;Jako ciekawostkę dodam, że da się też zaciukać piłą (parę razy mi się udało, ale jeszcze nie znam przepisu na sukces) te opasłe pokemony z z dwoma wyrzutniami rakiet zamiast dłoni i powtarzają coś na kształt &quot;onimaru&quot;. tu oczywiście też trzeba się zaczaić, ale to niestety nie wystarcza. Boję się, że udawało mi się tylko dzięki jakiemuś ciekawemu bugowi.&lt;/p&gt;
&lt;p&gt;W sumie taka gra w DooMa z ciągłym brakiem amunicji wymaga nie lada zdolności strategicznych. To spotkać dwie grupy potworów ze sobą. To się zaczaić, to ominąć. Bardzo fajna sprawa. :)&lt;/p&gt;
&lt;p&gt;Nie mogę uwierzyć, że tak się rozpisałem i w końcu wyszedł tutoriial na temat oszczędzania amunicji w DooMie. Może następnym razem przejdę obie części samą piłą? :)&lt;/p&gt;
</description><pubDate>Tue, 17 Feb 2009 21:27:04 +0100</pubDate><guid>http://elwis.jogger.pl/2009/02/17/kochana-pila/</guid><category>Ogólne</category><category>DooM</category><category>piła</category><category>chainsaw</category></item><item><title>Trochę wspomnień.</title><link>http://elwis.jogger.pl/2009/02/12/troche-wspomnien/</link><description>&lt;p&gt;&lt;a href=&quot;http://www.doomworld.com/classicdoom/info/music.php?wad=doom2.wad&quot;&gt;http://www.doomworld.com/classicdoom/info/music.php?wad=doom2.wad&lt;/a&gt; . Wspaniała sprawa. Trochę upierdliwy format, więc trzeba spędzić chwilkę na konwersję i otagowanie, ale myślę, że warto. :)&lt;/p&gt;
</description><pubDate>Thu, 12 Feb 2009 23:38:39 +0100</pubDate><guid>http://elwis.jogger.pl/2009/02/12/troche-wspomnien/</guid><category>Ogólne</category><category>doom soundtrack free download</category></item><item><title>Generator menu dla fluxboksa.</title><link>http://elwis.jogger.pl/2008/12/28/generator-menu-dla-fluxboksa/</link><description>&lt;p&gt;Jakiś czas temu zaprezentowałem mój pierwszy skrypt PHP, przygoda z tym językiem szybko się zakończyła. Przyszedł czas na perla – aż wstyd się przyznać, że dopiero teraz. Tak czy inaczej, po dość oględnym przestudiowaniu języka przyszedł czas na chrzest bojowy - napisanie skryptu, który generowałby menu na podstawie /usr/share/applications/. Być może jest już coś takiego, ale jak wszystkim dobrze wiadomo, jestem bardzo leniwy. Zadanie może nie wydające się być trudnym (choć pisanie w tego C to niezbyt kusząca perspektywa), aczkolwiek dobrze zweryfikowało to co zrozumiałem z kursu.&lt;/p&gt;
&lt;p&gt;Zacznijmy od tego, jak ten skrypt działa. Mianowicie, parsuje on plik z szablonem (~/.fluxbox/menu.templ) i pliki *.desktop z /usr/share/applications/ i na podstawie informacji w nich zawartych buduje menu. Skrypt nie jest jeszcze doskonały i będzie wymagał dość radykalnego przerobienia, tak by elementy mogły być sortowane alfabetycznie i obsługiwały lokalizacje. Niemniej jednak działa i dość dobrze i szybko (w moim przypadku 0,03s) wypełnia swoje zadanie.&lt;/p&gt;
&lt;p&gt;Pliki szablonowe mają bardzo prostą budowę – są to zwyczajne pliki menu fluxboksa, wzbogacone o wtrącenia w nawiasach ostrych (muszą być w oddzielnych linijkach), informujących program, jak interpretować /usr/share/applications/. Mój plik szablonu wygląda następująco i wyczerpuje opcje, które można póki co wtrącić:&lt;/p&gt;
&lt;p&gt;{geshi}[begin] (Fluxbox) [encoding] {UTF-8} [exec] (uruchom) {fbrun} [exec] (WWW) {seamonkey} [exec] (e-mail) {seamonkey --mail} [exec] (vim) {gvim} [exec] (uaktualnij menu) {/home/bartek/fluxmenugen.pl} [restart] [exit]{/geshi}&lt;/p&gt;
&lt;p&gt;jak widać, nie jest tego dużo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Na samym początku polecenie setterm, ustawiające polecenie terminala, dla opcji addterm i do otwierania pozycji terminalowych (ewentualność jeszcze nie przetestowana, ale nie widzę powodu, dla którego miałaby nie działać ;p).&lt;/li&gt;
&lt;li&gt;Potem rzecz najważniejsza - show-groups – wybiera, które grupy pokazać – za dużo tych grup się definiuje w plikach *.desktop, żeby je wszystkie wrzucić do menu. Póki co nie może być odstępu między nazwą, a przecinkiem.&lt;/li&gt;
&lt;li&gt;Wspomniany już addterm, który wstawia polecenie terminala o opisie wpisanym dalej (w tym przypadku, &quot;terminal&quot;).&lt;/li&gt;
&lt;li&gt;insert-here w którego miejscu pojawią wygenerowane pozycje. Należy zwrócić uwagę na fakt, że można umieścić je w kilku miejscach, dla różnych konfiguracji show-groups. Należy również zaznaczyć, że grupy pojawią się w takiej samej kolejności jak podano w tej opcji.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Na sam koniec natomiast gotowy skrypt, który udostępniam do dowlonego użytku.&lt;/p&gt;
&lt;p&gt;{geshi}#! /usr/bin/perl -w $sdir = &quot;/usr/share/applications&quot;; $sext = &quot;.desktop&quot;; $favterm = &quot;urxvt&quot;; $destdir = $ENV{'HOME'}.&quot;/.fluxbox/&quot;; open (TEMPLATE, $destdir.&quot;menu.templ&quot;) || die &quot;Failed to open template file.&quot;; if(open (DESTINATION, $destdir.&quot;menu&quot;)) { open (BACKUP, &quot;&amp;gt;&quot;.$destdir.&quot;menu~&quot;); while ( ) { print BACKUP; } close (BACKUP); } close ( DESTINATION ); open (DESTINATION, &quot;&amp;gt;&quot;.$destdir.&quot;menu&quot;); opendir ( SHORTCUTS, $sdir ) || die (&quot;failed to open $sdir.&quot;); @shortcuts = grep { m/$sext$/ } readdir ( SHORTCUTS ); closedir ( SHORTCUTS ); %groups = (); $ungrupped = &quot;&quot;; foreach $shortcut ( @shortcuts ) { open ( SHORTCUT, $sdir.&quot;/&quot;.$shortcut); while ( ) { if ( m/^Name=(.+)(\s*)$/ ) { $name = $1; } elsif ( m/^Exec=(.+)(\s*)$/ ) { $cmd = $1; } elsif ( m/^Terminal=(.+)(\s*)$/ ) { $term = $1; } elsif ( m/^Categories=(.+)(\s*)$/ ) { @cats = split ( /;/, $1 ); } } if ( !defined ( $name ) || !defined ( $cmd ) ) { print &quot;Failed to find essentional values for $shortcut\n&quot;; } else { if ( defined ( $term ) &amp;amp;&amp;amp; $term eq &quot;true&quot; ) { $cmd = $favterm.&quot; -e \&quot;&quot;.$cmd.&quot;\&quot;&quot;; } $stext = &quot;[exec] ($name) {$cmd}\n&quot;; if ( !defined ( @cats ) ) { $ungrupped .= $stext; } else { foreach $cat ( @cats ) { $groups{$cat} .= $stext; } } } } while ( ) { if ( @tags = m/&amp;lt;(.+)&amp;gt;/g ) { foreach $tag (@tags) { if ( $tag eq &quot;insert-here&quot; ) { if ( defined ( @tagWhitelist ) ) { foreach $group ( @tagWhitelist ) { print DESTINATION &quot;[submenu] ($group)\n&quot;; print DESTINATION $groups{$group}; print DESTINATION &quot;[end]\n&quot; } } else { foreach $group ( keys %groups ) { print DESTINATION &quot;[submenu] ($group)\n&quot;; print DESTINATION $groups{$group}; print DESTINATION &quot;[end]\n&quot; } } print DESTINATION $ungrupped; } elsif ( $tag =~ /^setterm (.+)/ ) { $favterm = $1; } elsif ( $tag =~ /^addterm (.+)/ ) { print DESTINATION &quot;[exec] ($1) {$favterm}\n&quot;; } elsif ( $tag =~ /^show-groups (.+)$/ ) { if ( defined ( @tagWhitelist ) ) { push ( @tagWhitelist, split ( /,/, $1 ) ); } else { @tagWhitelist = split ( /,/, $1 ); } } elsif ( $tag =~ /^show-all/ ) { undef ( @tagWhitelist ); } } } else { print DESTINATION; } }{/geshi}&lt;/p&gt;
&lt;p&gt;i efekt:&lt;br&gt;
&lt;a href=&quot;http://img243.imageshack.us/my.php?image=screenpf2.png&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://img243.imageshack.us/img243/1828/screenpf2.th.png&quot; border=&quot;0&quot; alt=&quot;Free Image Hosting at www.ImageShack.us&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</description><pubDate>Sun, 28 Dec 2008 00:04:39 +0100</pubDate><guid>http://elwis.jogger.pl/2008/12/28/generator-menu-dla-fluxboksa/</guid><category>Ogólne</category><category>Programowanie</category><category>Techblog</category><category>unix</category><category>życie</category><category>fluxbox</category><category>generator</category><category>menu</category></item><item><title>Ameryka...</title><link>http://elwis.jogger.pl/2008/12/27/ameryka/</link><description>&lt;p&gt;Absolutnie zdaję sobie sprawę, że w Stanach Zjednoczonych wszystko podpina się pod Zen, ale to już jest przegięcie:&lt;br&gt;
&lt;a href=&quot;http://img213.imageshack.us/my.php?image=zenekbr1.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://img213.imageshack.us/img213/1677/zenekbr1.th.jpg&quot; border=&quot;0&quot; alt=&quot;Free Image Hosting at www.ImageShack.us&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</description><pubDate>Sat, 27 Dec 2008 14:27:10 +0100</pubDate><guid>http://elwis.jogger.pl/2008/12/27/ameryka/</guid><category>narzekanie</category><category>Ogólne</category><category>życie</category><category>palmolive</category><category>zen</category><category>ameryka</category><category>usa</category><category>głupota</category></item><item><title>Every sperm is sacred!</title><link>http://elwis.jogger.pl/2008/11/25/every-sperm-is-sacred/</link><description>&lt;p&gt;Filmik mnie po prostu rozwalił. Zapewne, dla wielu nic nowego, bo filmik jest dość popularny na youtube, ale i tak zamieszczam: &lt;a href=&quot;http://www.youtube.com/watch?v=U0kJHQpvgB8&quot;&gt;http://www.youtube.com/watch?v=U0kJHQpvgB8&lt;/a&gt;.&lt;/p&gt;
</description><pubDate>Tue, 25 Nov 2008 21:01:52 +0100</pubDate><guid>http://elwis.jogger.pl/2008/11/25/every-sperm-is-sacred/</guid><category>Ogólne</category></item></channel></rss>
