<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-728859591481074805</id><updated>2011-12-10T05:53:27.997-08:00</updated><category term='linux'/><category term='comic'/><category term='android'/><category term='code'/><category term='reaktor'/><category term='web'/><category term='software'/><category term='hardware'/><title type='text'>/dev/blog</title><subtitle type='html'>devblog</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-1106335231740515955</id><published>2011-12-10T05:33:00.001-08:00</published><updated>2011-12-10T05:53:28.001-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Ubuntu 64-bit - adb: Nie ma takiego pliku ani katalogu</title><content type='html'>Ostatnio natrafiłem na dość ciekawy przypadek, jeżeli chodzi o sprawy związane z instalacją Android SDK. Sam proces pobierania pakietów itp. przebiegł bez jakichkolwiek problemów, jednak tuż po uruchomieniu Eclipse dostałem komunikat, że wtyczka ADT nie może odnaleźć &lt;i&gt;adb&lt;/i&gt;. Sprawdzam ścieżkę - zgadza się. Restartuję IDE. Dalej ten sam komunikat. Próbuję odpalić adb z terminala, a tam &lt;blockquote&gt;./adb: Nie ma takiego pliku ani katalogu&lt;/blockquote&gt;.No to sprawdzam co powie &lt;i&gt;file&lt;/i&gt;&lt;blockquote&gt;file ./adb ./adb: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped&lt;/blockquote&gt;Tak więc plik jak najbardziej jest. Uprawnienia też są w porządku. Żeby nie przeciągać, rozwiązaniem problemu okazała się instalacja pakietu &lt;i&gt;ia32-libs&lt;/i&gt;. Ot 64-bitowy Ubuntu ma problemy z uruchomieniem adb kompilowanego pod 32 bity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-1106335231740515955?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/1106335231740515955/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2011/12/ubuntu-64-bit-adb-nie-ma-takiego-pliku.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/1106335231740515955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/1106335231740515955'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2011/12/ubuntu-64-bit-adb-nie-ma-takiego-pliku.html' title='Ubuntu 64-bit - adb: Nie ma takiego pliku ani katalogu'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-4793998988259467401</id><published>2011-03-24T16:27:00.000-07:00</published><updated>2011-03-24T16:33:07.799-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>UTF-8 w PhoneGap XHR</title><content type='html'>&lt;div style="text-align: justify;"&gt;W związku z ostatnimi poczynaniami w pracy miałem okazję zetknąć się z frameworkiem do tworzenia aplikacji dla urządzeń mobilnym. Mowa tutaj o PhoneGapie, który pozwala na budowanie oprogramowania przy wykorzystaniu języków HTML oraz CSS.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Zachwalany jako multiplatformowy produkt okazał się być nie do końca przenośny&lt;a name='more'&gt;&lt;/a&gt;, kiedy tylko przyszedł czas na jego wykorzystanie w środowisku Androida. PhoneGap jako taki teoretycznie zapewnia kompatybilność wsteczną ze starszymi wersjami systemu operacyjnego, jednak przy dołączeniu do projektu SenchaTouch okazało się, że nasza aplikacja nie będzie wspierać Androida w wersji 1.6, który ciągle jest jeszcze dość popularny w Polsce. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;Kolejnym problemem okazały się polskie znaki. Framework nie radzi sobie z kodowaniem UTF-8 w przypadku, kiedy klasa CallbackServer korzysta z XMLHttpRequest. Idąc za wskazówkami, jakie odnalazłem na stronie http://phonegap.lighthouseapp.com/projects/20118/tickets/82-contact-search-unicode-problem podjąłem próbę wymuszenia CallbackServerze korzystania z pollingu zamiast XHR. Efekt był jednak marny. Zaczęły przytrafiać się momenty, w których aplikacja nie reagowała na wysyłane z JavaScript'u eventy, a co za tym idzie straciła na responsywności oraz stabilności działania. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;Kryzys związany z niedostatkami frameworka udało się zażegnać dzięki wypracowanemu rozwiązaniu, które polegało na zakodowaniu danych przekazywanych w requestach.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Całość wygląda następująco:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;CallbackServer.java:230&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class="prettyprint" lang-java=""&gt;response = "HTTP/1.1 200 OK\r\n\r\n";&lt;br /&gt;js = this.getJavascript(); &lt;br /&gt;if (js != null) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response += URLEncoder.encode(js);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Po drugiej zaś stronie, czyli w PhoneGap.js:230&lt;br /&gt;&lt;pre class="prettyprint" lang-java=""&gt;/* &lt;br /&gt;&amp;nbsp;* This two methods are used to avoid encoding problems &lt;br /&gt;&amp;nbsp;* when importing contactc &lt;br /&gt;&amp;nbsp;*/ &lt;br /&gt;PhoneGap.urlDecodeCharacter = function(str, c) { &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return String.fromCharCode(parseInt(c, 16)); &lt;br /&gt;}; &lt;br /&gt;&lt;br /&gt;PhoneGap.urlDecode = function( s ) { &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return decodeURIComponent(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s.replace( /\+/g, '%20' ))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.replace( /\% ([0-9a-f]{2})/g, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PhoneGap.urlDecodeCharacter); &lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;oraz w linii 686&lt;br /&gt;&lt;pre class="prettyprint" lang-java=""&gt;msg = PhoneGap.urlDecode(msg); &lt;br /&gt;&lt;/pre&gt;Taki zabieg w zasadzie całkowicie wyeliminował problem kodowania znaków.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-4793998988259467401?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/4793998988259467401/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2011/03/utf-8-w-phonegap-xhr.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/4793998988259467401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/4793998988259467401'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2011/03/utf-8-w-phonegap-xhr.html' title='UTF-8 w PhoneGap XHR'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-1974562258206438419</id><published>2010-08-10T10:08:00.000-07:00</published><updated>2010-08-14T05:48:57.363-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Mercurial + SSH pod Eclipse</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_j-zroiz0t7E/TGGDiSJcdVI/AAAAAAAAB50/-JTksmNoDOE/s1600/terminal_icon.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_j-zroiz0t7E/TGGDiSJcdVI/AAAAAAAAB50/-JTksmNoDOE/s1600/terminal_icon.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Dziś szybki przepis na połączenie MercurialEclipse z repozytorium przez SSH (przykład na Windows XP). Załóżmy, że na zdalnym serwerze mamy założone konto shellowe przy pomocy którego logujemy się do repozytorium. Dostajemy się do naszego konta przy pomocy polecenia&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;ssh login@servername.domain&lt;br /&gt;Zostaniemy przy tym poproszeni o hasło. Kiedy już jesteśmy zalogowani wklepujemy polecenie&lt;br /&gt;&lt;code class="prettyprint"&gt;ssh-keygen&lt;/code&gt;&lt;br /&gt;i postępujemy zgodnie z zaleceniami wyświetlanymi w terminalu. Wylogowujemy się. Na lokalnej maszynie używamy programu &lt;a href="http://winscp.net/eng/docs/lang:pl"&gt;WinSCP&lt;/a&gt;, aby przy jego pomocy pobrać sobie pliczek ~/.ssh/id_rsa.pub. Szukamy pliku Mercurial.ini (u mnie w katalogu domowym użytkownika, nie chodzi tutaj o katalog "Moje dokumenty" tylko ten piętro wyżej) i wrzucamy w sekcji [ui] taką linijkę&lt;br /&gt;ssh = "ścieżka_do_TortoisePlink.exe" -ssh -2 -i "ścieżka_do_id_rsa.pub"&lt;br /&gt;Zapisujemy plik i powinniśmy mieć możliwość dostania się do repozytorium przy pomocy adresu &lt;code class="prettyprint"&gt;ssh://username@server.domain&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-1974562258206438419?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/1974562258206438419/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2010/08/dzis-szybki-przepis-na-poaczenie.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/1974562258206438419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/1974562258206438419'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2010/08/dzis-szybki-przepis-na-poaczenie.html' title='Mercurial + SSH pod Eclipse'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_j-zroiz0t7E/TGGDiSJcdVI/AAAAAAAAB50/-JTksmNoDOE/s72-c/terminal_icon.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-7590341866096343188</id><published>2010-08-08T05:03:00.000-07:00</published><updated>2010-08-14T04:55:09.872-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Import projektu Androida do Eclipse</title><content type='html'>Od pewnego czasu zajmuję się pisaniem aplikacji dla Androida. Jak zwykle Eclipse plus odpowiednie SDK i jedziemy. No i jechałem do momentu, w którym zaszła potrzeba przeniesienia się na inną maszynę. Na szybko ustawiony serwer SVN, commit, konfiguracja Eclipse na drugiej maszynie, checkout i...&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;błędy.&lt;br /&gt;Myśałem, że krew mnie zaleje. Tyle pracy, wszystko bez błędów, ładnie kompilowane i śmigające lepiej niż nowy rower. Czerwone&lt;br /&gt;&lt;blockquote&gt;Android requires .class compatibility set to 5.0&lt;/blockquote&gt;&lt;span class="fullpost"&gt;świeciło po oczach i, jak by nie patrzeć, denerwowało niemiłosiernie. Trochę szukania po internecie i okazało się, że proste kliknięcie na projekt -&amp;gt; Android Tools -&amp;gt; Fix Project Properties załatwia sprawę.&lt;br /&gt;Niestety tylko pozornie. W kodzie pojawiły się błedy. Automatycznie wygenerowane metody z adnotacjami @Override zaczęły się czerwienić. Ich usunięcie załatwiło wszystkie problemy. Przynajmniej na razie...&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-7590341866096343188?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/7590341866096343188/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2010/08/import-projektu-androida-do-eclipse.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/7590341866096343188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/7590341866096343188'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2010/08/import-projektu-androida-do-eclipse.html' title='Import projektu Androida do Eclipse'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-519897823245571014</id><published>2010-07-26T11:32:00.000-07:00</published><updated>2010-08-14T05:22:18.278-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Rozszerzanie Sikuli</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_j-zroiz0t7E/TE3WGpNsBbI/AAAAAAAAB4g/Cb0lgsGsLLk/s1600/jython.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5498286129720067506" src="http://2.bp.blogspot.com/_j-zroiz0t7E/TE3WGpNsBbI/AAAAAAAAB4g/Cb0lgsGsLLk/s200/jython.png" style="cursor: hand; cursor: pointer; float: left; height: 65px; margin: 0 10px 10px 0; width: 100px;" /&gt;&lt;/a&gt;&lt;br /&gt;Jak pisałem we &lt;a href="http://kmichalak.blogspot.com/2010/07/automatyzacja-obsugi-gui-przy-uzyciu.html"&gt;wcześniejszym poście&lt;/a&gt; Sikuli korzysta z &lt;a href="http://www.jython.org/"&gt;Jythona&lt;/a&gt;. Ostatnio muszę sporo korzystać z tego frameworka, dlatego też jak na złość większość bibliotek pythonowych powstało dla podstawowej implementacji - &lt;a href="http://www.python.org/"&gt;CPythona&lt;/a&gt;. Kiedy przyszło mi zabrać się za skrypty potrafiące skalować obrazy zabrakło mi słów, żeby wyrazić moją niechęć do otoczenia, a pierwsza osoba, której przyszło by mnie zdenerwować prawdopodobnie w ogromnych bólach zeszła by z tego świata. A wszystko to przez brak wsparcia biblioteki &lt;a href="http://www.pythonware.com/products/pil/"&gt;PIL&lt;/a&gt; dla implementacji Pythona napisanej w Javie. Pozostało zatem jedno wyjście.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Rzuciłem okiem do dokumentacji Jythona. Okazało się, że pisanie rozszerzeń jest banalnie proste. Jak taki moduł wygląda? A o tak:&lt;br /&gt;&lt;pre class="prettyprint lang-java"&gt;&lt;br /&gt;/**&lt;br /&gt;* Image.java&lt;br /&gt;* 2010-07-26 10:38:51&lt;br /&gt;*&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;* Imports&lt;br /&gt;*/&lt;br /&gt;import java.awt.Graphics2D;&lt;br /&gt;import java.awt.image.BufferedImage;&lt;br /&gt;import java.awt.image.RenderedImage;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import javax.imageio.ImageIO;&lt;br /&gt;import org.python.core.PyString;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* @author Kamil Michalak&lt;br /&gt;*&lt;br /&gt;*/&lt;br /&gt;public class PNGImage {&lt;br /&gt;    private BufferedImage _img; // our image file&lt;br /&gt;    private int _width = 0;&lt;br /&gt;    private int _height = 0;&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;    * @return the _width&lt;br /&gt;    */&lt;br /&gt;    public int get_width() {&lt;br /&gt;        return _width;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;    * @return the _height&lt;br /&gt;    */&lt;br /&gt;    public int get_height() {&lt;br /&gt;        return _height;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;    * Default constructor&lt;br /&gt;    */&lt;br /&gt;    public PNGImage() {&lt;br /&gt;        // do nothig&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // this constructor is private&lt;br /&gt;    // it used by resize method&lt;br /&gt;    private PNGImage(BufferedImage img) {&lt;br /&gt;        this._img = img;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // doc strings&lt;br /&gt;    public static PyString __doc__open =&lt;br /&gt;        new PyString("Open the image file and load raster data");&lt;br /&gt;    public static PyString __doc__resize =&lt;br /&gt;        new PyString("Resize(width, height) -&amp;gt; integer, integer");&lt;br /&gt;    public static PyString __doc__save =&lt;br /&gt;        new PyString("Save the image to file specified py path string");&lt;br /&gt;    public static PyString __doc__ =&lt;br /&gt;        new PyString("Image resizer");&lt;br /&gt;&lt;br /&gt;    // method implementations&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;    * Opens image specified by path and read image data&lt;br /&gt;    * @param String Path to the image&lt;br /&gt;    */&lt;br /&gt;    public void open(String imagePath) { &lt;br /&gt;        try {&lt;br /&gt;            this._img = ImageIO.read(new File(imagePath));&lt;br /&gt;            this._width = this._img.getWidth();&lt;br /&gt;            this._height = this._img.getHeight();&lt;br /&gt;        } catch (IOException e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;    }// -- end of open(String)-----------------&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;    * Resizes image and return new object of PNGImage class&lt;br /&gt;    * @param width&lt;br /&gt;    * @param height&lt;br /&gt;    * @return PNGImage resized image&lt;br /&gt;    */&lt;br /&gt;    public PNGImage resize(int width, int height) {&lt;br /&gt;        BufferedImage resizedImage = new BufferedImage(width, height,&lt;br /&gt;        BufferedImage.TYPE_INT_ARGB);&lt;br /&gt;        Graphics2D g = resizedImage.createGraphics();&lt;br /&gt;        g.drawImage(this._img, 0, 0, width, height, null);&lt;br /&gt;        g.dispose();&lt;br /&gt;        PNGImage resized = new PNGImage(resizedImage);&lt;br /&gt;        return resized;&lt;br /&gt;    }// -- end of resize(int, int) ------------&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;    * Saves image to file specified by path string&lt;br /&gt;    * @param filePath&lt;br /&gt;    */&lt;br /&gt;    public void save(String filePath) {&lt;br /&gt;        try {&lt;br /&gt;            ImageIO.write((RenderedImage)this._img, "png", new File(filePath));&lt;br /&gt;        } catch (IOException e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;    }// -- end of save ------------------------&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Proste prawa? Jak widać jest to zwykła klasa javowa. No może trochę nietypowy jest kawałek&lt;br /&gt;&lt;code class="prettyprint lang-java"&gt;&lt;br /&gt;    public static PyString __doc__open =&lt;br /&gt;        new PyString("Open the image file and load raster data");&lt;br /&gt;    public static PyString __doc__resize =&lt;br /&gt;        new PyString("Resize(width, height) -&amp;gt; integer, integer");&lt;br /&gt;    public static PyString __doc__save =&lt;br /&gt;        new PyString("Save the image to file specified py path string");&lt;br /&gt;    public static PyString __doc__ =&lt;br /&gt;        new PyString("Image resizer");&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Te cztery linijki to ...dokumentacja klasy. PyStringi wyświetlane przez interpreter Pythona po odwołaniu się do nazw zmiennych.&lt;br /&gt;Z powyższej klasy można skorzystać w prosty sposób. Po kompilacji wrzucamy klasę do katalogu Sikuli (główny katalog programu) i już możemy wpisać w IDE&lt;br /&gt;&lt;code class="prettyprint"&gt;&lt;br /&gt;import PNGImage&lt;br /&gt;&lt;br /&gt;class Script:&lt;br /&gt;    def __init__(self):&lt;br /&gt;        print("Starting script...")&lt;br /&gt;    def run(self):&lt;br /&gt;        png = PNGImage()&lt;br /&gt;        png.open('image.png')&lt;br /&gt;        resized = png.resize(png.get_width()-10, png.get_height()-10)&lt;br /&gt;        resized.save('image_new.png')&lt;br /&gt;&lt;br /&gt;script = Script()&lt;br /&gt;script.run()&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Po napisaniu takiego kawałka kodu byłem już w domu. A najlepsze jest to, że całą resztę można załatwić w podobny sposób podpinając biblioteki dla języka Java poprzez dodatkowe rozszerzenia dla Jythona.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-519897823245571014?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/519897823245571014/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2010/07/rozszerzanie-sikuli.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/519897823245571014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/519897823245571014'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2010/07/rozszerzanie-sikuli.html' title='Rozszerzanie Sikuli'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_j-zroiz0t7E/TE3WGpNsBbI/AAAAAAAAB4g/Cb0lgsGsLLk/s72-c/jython.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-4605306199256758916</id><published>2010-07-25T11:06:00.000-07:00</published><updated>2010-08-14T05:28:07.602-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Plusy i minusy Sikuli</title><content type='html'>W związku z dość intensywnym ostatnio wykorzystywaniem frameworku &lt;a href="http://groups.csail.mit.edu/uid/sikuli/"&gt;Sikuli&lt;/a&gt; do automayzacji testów mechanicznych tworzonego systemu, zaszła potrzeba przybliżenia pewnych cech tego narzędzia. &lt;br /&gt;Po kilku tygodniach używania stworzonego przez ludzi z MIT projektu wyszły na jaw pewne charakterystyczne dla Sikuli cechy.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Framework sam w sobie jest dość dobrze zorganizowany i pomysłowy. Oparte o &lt;a href="http://www.jython.org/"&gt;Jython&lt;/a&gt; (niestety nie jest on całkowicie kompatybilny z Jythonem, pomimo jego integracji z samym Sikuli, np. na chwilę obecną importowanie własnych modułów pythona jest bardzo utrudnione, a import skryptów frameworka potrafi w ogóle nie działać) narzędzie pozwala na tworzenie skryptów umożliwiających na obsługę graficznego interfejsu użytkownika bez nadzoru człowieka. Można by stwierdzić, że spełnia on swoje zadanie jako pomoc w automatyzacji obsługi GUI różnego rodzaju aplikacji. Niestety rzeczywistość pokazuje, że Sikuli działa czasem stanowczo za wolno. Dzieje się tak, ponieważ algorytm zastosowany do przeszukiwania tzw. &lt;a href="http://sikuli.org/trac/wiki/reference-0.10#ClassScreen"&gt;screenów&lt;/a&gt; jest dość prymitywny i w przypadku dużych rozdzielczości ekranu może wymagać dużej liczby operacji &lt;a href="https://answers.launchpad.net/sikuli/+question/117472"&gt;przeszukiwania&lt;/a&gt;. &lt;br /&gt;Częściowym rozwiązaniem tego typu problemów jest stosowanie &lt;a href="http://sikuli.org/trac/wiki/reference-0.10#ClassRegion"&gt;regionów&lt;/a&gt;. Korzystanie z obszarów pracy (zarówno zdefiniowanych na sztywno jak i tworzonych dynamicznie) przyspiesza pracę Sikuli poprzez zawężanie pola na ekranie, które ma zostać objęte wyszukiwaniem. &lt;br /&gt;Określanie regionów pracy dla automatu ma znaczenie w przypadku, gdy mamy do czynienia z kilkoma bardzo podobnymi lub identycznymi elementami GUI, jak na przykład przyciski czy pozycje w menu. Określając region możemy zminimalizować bądź całkowicie wykluczyć ryzyko odnalezienia i wykorzystania przez skrypt niewłaściwego elementu interfejsu graficznego. Dość dobrym pomysłem jest również korzystanie w takich przypadkach ze sposobu pokazanego w tutorialu “&lt;a href="http://sikuli.org/documentation.shtml#/trac/wiki/ParticularCheckBox-0.10"&gt;How to click on a particular check box?&lt;/a&gt;“, który pokazuje jak radzić sobie w trudnej sytuacji korzystając z regionów i punktów charakterystycznych rozmieszczonych w obszarze przeszukiwania. &lt;br /&gt;Nieco innym zagadnieniem jest wyszukiwanie wszystkich elementów pasujących do danego wzorca. Zgodnie z dokumentacją, do tego celu najefektywniej jest korzystać z metody findAll() dostarczanej przez Sikuli. Należy jednak przy tym zwrócić uwagę, że stosowanie tej funckcji tworzy strukturę danych o bardzo dużej objętości, przez co zwiększamy ilość pamięci potrzebnej do działania naszego automatu. W niektórych przypadkach może to prowadzić do przyspieszenia pojawienia się znanego w Sikuli buga (memory leak, który nie został jeszcze załatany). Z tego też powodu nie wskazane jest stosowanie konstrukcji typu:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;for GUIcomponent in findAll(“some_pattern.png”):&lt;br /&gt;    #some instructions&lt;br /&gt;    pass&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Zdecydowanie lepiej jest skorzystać z dodatkowej zmiennej, którą można później zniszczyć:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;elements = findAll(“some_pattern.png”):&lt;br /&gt;for GUIcoponent in elements:&lt;br /&gt;    # some instructions&lt;br /&gt;    pass&lt;br /&gt;    elements.destroy()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Kolejnym czynnikiem wpływającym na trafność rozpoznania screenów przez Sikuli jest osiągnięcie fucusa przez wybrane elementy. W niektórych przypadkach, ustawienie focusu danego elementu może spowodować, że zostanie on rozpoznany jako zupełnie inny komponent, bądź w ogóle nie zostanie uwzględniony w wynikach wyszukiwania. Dzieje się tak najczęściej, jeżeli dany komponent interfejsu graficznego zyskuje dodatkowe obramowanie bądź podświetlenie po uzyskaniu focusa. &lt;br /&gt;Podczas obsługi niektórych komponentów takich, jak np. rozwijane menu ważne jest uwzględnienie czasu animacji danego komponentu. Dla przykładu załóżmy, że mamy przycisk, po którego kliknięciu rozwija się dodatkowe menu. Automat ma za zadanie kliknąć przycisk, a następnie wybrać jedną z pozycji menu. Czasami może się tu pojawić problem w postaci wyjątku &lt;a href="http://sikuli.org/trac/wiki/reference-0.10#ExceptionFindFailed"&gt;FindFailed&lt;/a&gt;. Dzieje się tak dlatego, że skrypt stara się odnaleźć elementy menu od razu po kliknięciu naszego przycisku. Jeżeli menu jest rozwijane z wyświetleniem animacji, konieczne jest uwzględnienie czasu jej trwania. Możemy to zrobić prostym poleceniem &lt;a href="http://sikuli.org/trac/wiki/reference-0.10#wait"&gt;wait()&lt;/a&gt;. Pozwoli nam ono na opóźnienie wykonania kolejnej instrukcji. Złą stroną takiego podejścia jest niestety wydłużenie działania samego skryptu.&lt;br /&gt;Kolejnym pomysłem na ułatwienie sobie życia jest korzystanie z funkcji type(). Pozwala ona na symulację wciśnięcia klawiszy na klawiaturze. Jak łatwo się domyślić można z niej korzystać w najbardziej oczywisty sposób wpisując teksty w różnego rodzaju pola typu text edit. Można również użyć type() do nieco innych zastosowań, a dokładniej obsługi GUI. Korzystając z różnego rodzaju skrótów klawiaturowych możemy wywoływać opcje automatyzowanej aplikacji bez konieczności przeszukiwania ekranu. Czasem może to pomóc nie tylko w przyspieszeniu naszego skryptu, ale także w poprawieniu poprawności jego działania, pozwalając na uniknięcie pomyłek w odnajdywaniu komponentów interfejsu.&lt;br /&gt;Czasem funkcjonalność Sikuli staje się nazbyt ograniczona, bądź niektóre operacje są strasznie powolne. Jeżeli trafiliśmy na właśnie taki przypadek możemy wspomóc się zwykłymi skryptami pythona, które można dołączać do skryptów frameworka.&lt;br /&gt;&lt;br /&gt;Reasumując, podczas korzystania z Sikuli ważne jest dokładne poznanie GUI. Ważne jest, żeby nasze skrypty wykonywały się szybko, jednak zawsze należy pamiętać o tym, że niektóre elementy graficzne wymagają opóźnień w odczycie ich stanu. &lt;br /&gt;Framework posiada bardzo brzydki błąd, który powoduje wyciek pamięci, co może uniemożliwić wykonanie bardzo długich, bądź skomplikowanych skryptów. Wymusza to na użytkowniku stosowanie takich konstrukcji językowych, które pozwolą na minimalizację czasu wyonania i zużycia pamięci.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-4605306199256758916?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/4605306199256758916/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2010/07/plusy-i-minusy-sikuli.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/4605306199256758916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/4605306199256758916'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2010/07/plusy-i-minusy-sikuli.html' title='Plusy i minusy Sikuli'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-5806883154197118881</id><published>2010-07-08T12:02:00.000-07:00</published><updated>2010-08-14T05:39:24.601-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Automatyzacja obsługi GUI przy użyciu Sikuli</title><content type='html'>Coraz większe lenistwo, a czasem zwykły brak czasu sprawiają, że staramy się coraz więcej pracy wykonać przy pomocy jakichś narzędzi automatyzujących różne czynności. Różnego rodzaju skrypty, programy pomagają w wysyłaniu poczty, zarządzaniu plikami, czy obróbce zdjęć. Najczęściej narzędzia te są pewnego rodzaju wtyczkami, czy nakładkami na istniejące już aplikacje. Ostatnio spotkałem się jednak z nieco innym pomysłem na zautomatyzowanie nudnych zadań.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt; Projekt &lt;a href="http://groups.csail.mit.edu/uid/sikuli/"&gt;Sikuli&lt;/a&gt; jest idealnym sposobem na ułatwienie sobie życia.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_j-zroiz0t7E/TDYgEc2qUzI/AAAAAAAAB3Y/SuRRMPmwaGg/s1600/sikuli_tworzenie_botow.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="259" src="http://1.bp.blogspot.com/_j-zroiz0t7E/TDYgEc2qUzI/AAAAAAAAB3Y/SuRRMPmwaGg/s320/sikuli_tworzenie_botow.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Pomysł jest realizowany przez grupę zapaleńców z MIT (Massachusetts Institute of Technology). Prace programistyczne przyniosły w rezultacie dość wygodne IDE oraz ciekawe graficzne API zrealizowane przy pomocy Jythona. Na pierwszy rzut oka brzmi to dość poważnie, jednak z czystym sumieniem pozwolę sobie na stwierdzenie, że proste automaty może konstruować nawet laik. Całość sprowadza się w sumie do zaznaczania fragmentów obrazu wyświetlanego na monitorze komputera, na które ma reagować nasz skrypt i sposób reakcji, a to wszystko dostępne przez proste klikanie i zaznaczanie obszarów na ekranie przy pomocy myszy. Nie trzeba znać ani Pythona, ani żadnego innego języka programowania. Wystarczy trochę pomyśleć :) &lt;br /&gt;Jak wygląda "wyklikany" kod? Tak jak poniżej &lt;br /&gt;&lt;br /&gt;Co można zrobić korzystając z Sikuli? Najlepszym sposobem na zapoznanie się z możliwościami tego projektu, jest obejrzenie kilku krótkich filmików instruktażowych.&lt;br /&gt;Dla zainteresowanych podrzucam jedno ze wspomnianych nagrań&lt;br /&gt;&lt;object height="385" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vGC9AJqJUqA&amp;amp;hl=pl_PL&amp;amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/vGC9AJqJUqA&amp;amp;hl=pl_PL&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Co więcej, jeżeli przyjdzie nam do głowy skorzystać z mechanizmu Sikuli we własnym programie, w przypadku języka Java prawie wprost dostajemy gotowe narzędzie. Przykładową klasę, która działa jako wykonawca skryptów przedstawiłem poniżej.&lt;br /&gt;&lt;pre class="prettyprint" lang-java=""&gt;/**&lt;br /&gt;* SikuliRunner.java&lt;br /&gt;* in pl.com.uhc&lt;br /&gt;* 2010-07-08 12:01:20&lt;br /&gt;* &lt;br /&gt;*     This class creates PythonInterpreter and runs&lt;br /&gt;*     Sikuli-python scripts&lt;br /&gt;* &lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;package pl.com.uhc;&lt;br /&gt;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import edu.mit.csail.uid.ScriptRunner;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* &lt;br /&gt;* @author Kamil Michalak&lt;br /&gt;*&lt;br /&gt;*/&lt;br /&gt;public class SikuliRunner {&lt;br /&gt;    private String scriptPath = null;    // path to the Sikuli script&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;    * Public constructor&lt;br /&gt;    */&lt;br /&gt;        public SikuliRunner() {&lt;br /&gt;        // do nothing&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;    * Public constructor with parameters&lt;br /&gt;    * @param scriptPath the script path&lt;br /&gt;    */&lt;br /&gt;    public SikuliRunner(String scriptPath) {&lt;br /&gt;        this.scriptPath = scriptPath;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /* ******************************************&lt;br /&gt;    * Setters and getters section&lt;br /&gt;    ****************************************** */&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;    * @return the scriptPath&lt;br /&gt;    */&lt;br /&gt;    public String getScriptPath() {&lt;br /&gt;        return scriptPath;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;    * @param scriptPath the scriptPath to set&lt;br /&gt;    */&lt;br /&gt;    public void setScriptPath(String scriptPath) {&lt;br /&gt;        this.scriptPath = scriptPath;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    /* ******************************************&lt;br /&gt;    * Other public methods&lt;br /&gt;    ****************************************** */&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;    * Runs script in internal script interpreter&lt;br /&gt;    * @throws NullPathException &lt;br /&gt;    */&lt;br /&gt;    public void runScript() {        &lt;br /&gt;        /*&lt;br /&gt;         * Script interpreter for Sikuli scripts&lt;br /&gt;         * imported from package &lt;br /&gt;         * edu.mit.csail.uid.ScriptRunner in sikuli-script.jar&lt;br /&gt;         */&lt;br /&gt;        ScriptRunner runner = new ScriptRunner(null);     &lt;br /&gt;        try {            &lt;br /&gt;            runner.runPython(this.scriptPath); // absolute path to script file&lt;br /&gt;        } catch (IOException e) {&lt;br /&gt;            e.printStackTrace();            &lt;br /&gt;        } catch (Exception e) {&lt;br /&gt;            /*&lt;br /&gt;             * This exception will be thrown if method can't find&lt;br /&gt;             * a field to operate at (eg. can not find a button to click)&lt;br /&gt;             */&lt;br /&gt;            System.out.println("Execution aborted!");&lt;br /&gt;            System.out.println("Proces stopped by exception:\n\t");&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Jak widać kod nie jest jakiś straszny. Dodatkowo do naszej zmiennej classpath musimy dołączyć dwa pliki jar: &lt;b&gt;sikuli-script.jar&lt;/b&gt; i &lt;b&gt;jython.jar&lt;/b&gt;. Tak przygotowani możemy już korzystać z gotowych metod&lt;br /&gt;&lt;pre class="prettyprint lang-java"&gt;SikuliRunner sr = new SikuliRunner();&lt;br /&gt;    sr.setScriptPath("skrypt.sikuli");&lt;br /&gt;    sr.runScript();&lt;br /&gt;&lt;/pre&gt;Schematy postępowania można stworzyć przy wykorzystaniu z IDE Sikuli (muszę przyznać, że całkiem dobrze spełnia swoje zadanie). Jedyne co trochę razi w oczy, to nazwy plików PNG z screenami, ale w sumie nie ma chyba lepszego sposobu na ich automatyczne przydzielanie. &lt;br /&gt;Prosty skrypt (może nie do końca taki prosty, ale napisany szybciorem gdzieś w kącie podczas pracy) dla Sikuli przedstawiam poniżej.&lt;br /&gt;&lt;pre class="prettyprint"&gt;##&lt;br /&gt;#    script.sikuli&lt;br /&gt;#    Writen in Sikuli IDE&lt;br /&gt;##&lt;br /&gt;&lt;br /&gt;from random import choice&lt;br /&gt;import string &lt;br /&gt;import random&lt;br /&gt;&lt;br /&gt;# random string generator&lt;br /&gt;def textGen():&lt;br /&gt;    newpasswd = ''&lt;br /&gt;    chars = string.ascii_letters + string.digits&lt;br /&gt;    for i in range(12):&lt;br /&gt;        newpasswd = newpasswd + choice(chars)&lt;br /&gt;    return newpasswd&lt;br /&gt;&lt;br /&gt;# click "Kontynuuj" when error dialog appears&lt;br /&gt;def checkFlashError():&lt;br /&gt;    if exists("1278483208812.png"):&lt;br /&gt;        click("1278483208812.png")&lt;br /&gt;&lt;br /&gt;# click "No" button in dialog&lt;br /&gt;def checkUnsaved():&lt;br /&gt;    if exists("1278486952937.png"):&lt;br /&gt;        click("1278486968281.png")&lt;br /&gt;&lt;br /&gt;#choosing option for "Service category"&lt;br /&gt;def chooseOption():&lt;br /&gt;    opt = random.randint(0, 4)&lt;br /&gt;    if opt==0:&lt;br /&gt;        click("1278491620203.png")&lt;br /&gt;    if opt==1:&lt;br /&gt;        click("1278491658265.png")&lt;br /&gt;    if opt==2:&lt;br /&gt;        click("1278492034656.png")&lt;br /&gt;    if opt==3:&lt;br /&gt;        click("1278492058062.png")&lt;br /&gt;    if opt==4:&lt;br /&gt;        click("1278492086859.png")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def saveOrDiscard():&lt;br /&gt;    opt = random.randint(0, 1)&lt;br /&gt;    if opt==0:&lt;br /&gt;        click("1278416730625.png")&lt;br /&gt;    if opt==1:&lt;br /&gt;        click("1278496136906.png")&lt;br /&gt;&lt;br /&gt;#----------------------------&lt;br /&gt;# main &lt;br /&gt;#----------------------------&lt;br /&gt;def testRun():&lt;br /&gt;    i=0&lt;br /&gt;    checkUnsaved()&lt;br /&gt;    while not exists("1278485774781.png"):&lt;br /&gt;        sleep(1)&lt;br /&gt;        wait("1278411595609.png")&lt;br /&gt;        hover("1278410703906.png")&lt;br /&gt;        wait("1278409800890.png")&lt;br /&gt;        click("1278411311421.png")&lt;br /&gt;        checkFlashError()&lt;br /&gt;        while not exists("1278411542484.png"):&lt;br /&gt;            sleep(1)&lt;br /&gt;&lt;br /&gt;    checkUnsaved()&lt;br /&gt;    while not exists(Pattern("1278411542484.png").similar(0.80)):&lt;br /&gt;        sleep(1)&lt;br /&gt;        i = i+1&lt;br /&gt;        if i&amp;gt;5:&lt;br /&gt;            wait("1278411595609.png")&lt;br /&gt;    hover("1278410703906.png")&lt;br /&gt;    wait("1278409800890.png")&lt;br /&gt;    click("1278411311421.png")&lt;br /&gt;&lt;br /&gt;    hover("1278411542484.png")&lt;br /&gt;    click(Pattern("1278411542484.png").similar(0.75))&lt;br /&gt;    onAppear("1278412139593.png", click("1278486672359.png"))&lt;br /&gt;    checkFlashError()&lt;br /&gt;    checkUnsaved()&lt;br /&gt;    click("1278491803406.png")&lt;br /&gt;    onAppear(Pattern("1278417987296.png").similar(0.86), doubleClick("1278417987296.png"))&lt;br /&gt;    type(" ")&lt;br /&gt;    doubleClick("1278417987296.png")&lt;br /&gt;    type(" ")&lt;br /&gt;    type(textGen()+"\t")&lt;br /&gt;    type(textGen()+"\t")&lt;br /&gt;    type(textGen()+"\t")&lt;br /&gt;    if exists("1278417243156.png"):&lt;br /&gt;        click("1278417243156.png")&lt;br /&gt;    chooseOption()&lt;br /&gt;    #click("1278417376453.png")&lt;br /&gt;    doubleClick("1278417500250.png")&lt;br /&gt;    type(textGen())&lt;br /&gt;    for x in findAll("1278493541484.png"):&lt;br /&gt;        click(x)&lt;br /&gt;    click("1278494028062.png")&lt;br /&gt;    if exists("1278416683453.png"):&lt;br /&gt;        click(getLastMatch())&lt;br /&gt;    #saveOrDiscard()&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;    testRun()&lt;br /&gt;&lt;/pre&gt;W przypadku, kiedy nie podoba nam się tego typu podejście, mamy również możliwość pisania z wykorzystaniem czystej Javy, bez konieczności zaszywania własnego interpretera i podpinania do niego pythonowych skryptów. Sposób pisania takiego kodu został przedstawiony przez programistów na stronie &lt;a href="http://sikuli.org/documentation.shtml#/trac/wiki/How%20to%20use%20Sikuli%20Script%20in%20your%20JAVA%20programs?"&gt;projektu&lt;/a&gt;, na której możemy również znaleźć kompletną &lt;a href="http://sikuli.org/doc/java/"&gt;dokumentację&lt;/a&gt; (oczywiście w formacie JavaDoc). &lt;br /&gt;Uważam, że takie narzędzie jest dość obiecującym pomysłem na realizację nie tyle zabawek dla leniwych użytkowników, co prawdziwych automatów do przeprowadzania testów aplikacji, czy zautomatyzowaniu operacji, które wymagają działań na GUI.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-5806883154197118881?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/5806883154197118881/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2010/07/automatyzacja-obsugi-gui-przy-uzyciu.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/5806883154197118881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/5806883154197118881'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2010/07/automatyzacja-obsugi-gui-przy-uzyciu.html' title='Automatyzacja obsługi GUI przy użyciu Sikuli'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_j-zroiz0t7E/TDYgEc2qUzI/AAAAAAAAB3Y/SuRRMPmwaGg/s72-c/sikuli_tworzenie_botow.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-7164509529755296654</id><published>2009-07-19T08:53:00.000-07:00</published><updated>2010-06-26T05:59:26.757-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Wrzuta.pl - aktualizacja skryptu</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_j-zroiz0t7E/SZHq9vsN7tI/AAAAAAAAAuc/ytm8H3dP8zc/s1600/ico_bash.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 48px; height: 48px;" src="http://3.bp.blogspot.com/_j-zroiz0t7E/SZHq9vsN7tI/AAAAAAAAAuc/ytm8H3dP8zc/s1600/ico_bash.png" border="0" alt="" /&gt;&lt;/a&gt;Dawno już nie zaglądałem na stronę &lt;a href="http://wrzuta.pl"&gt;wrzuta.pl&lt;/a&gt;, nie wiedziałem więc również o zmianach jakie tam zaszły. Niestety zaowocowało to dezaktualizacją mojego skryptu do pobierania plików z wymienionej strony. Pozwoliłem więc sobie na poprawienie kodu i dostosowanie się do nowości w skryptach wrzuty.pl. Gotowy skrypt jest dostępny &lt;a href="http://sites.google.com/site/kmichalakprivate/Home/bash/wrzuta_downloader-2.0.tar.gz?attredirects=0&amp;d=1"&gt;tutaj&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-7164509529755296654?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/7164509529755296654/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2009/07/wrzytapl-aktualizacja-skryptu.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/7164509529755296654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/7164509529755296654'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2009/07/wrzytapl-aktualizacja-skryptu.html' title='Wrzuta.pl - aktualizacja skryptu'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_j-zroiz0t7E/SZHq9vsN7tI/AAAAAAAAAuc/ytm8H3dP8zc/s72-c/ico_bash.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-5693627967546541287</id><published>2009-04-16T15:52:00.000-07:00</published><updated>2009-04-19T09:09:07.840-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reaktor'/><title type='text'>Więc mamy kolejną żałobę narodową?</title><content type='html'>Jakoś tak ostatnimi czasy w naszym kraju panuje pewna moda. Mam tu namyśli częste wprowadzanie żałób narodowych. Wiele osób łączy się w bólu, wspominając tragiczne wydarzenia z ostatnich dni. Tylko ile w tym jest prawdziwego współczucia, a ile jest na pokaz? &lt;br /&gt;Przypadkiem trafiłem w serwisie YouTube na pewien ciekawy film. &lt;span class="fullpost"&gt;Myślę, że warto go obejrzeć i przekonać się ile jest w tym wszystkim zwykłego "marketingu" politycznego...&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/S-fyEW8-mME&amp;hl=pl&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/S-fyEW8-mME&amp;hl=pl&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=S-fyEW8-mME"&gt;http://www.youtube.com/watch?v=S-fyEW8-mME&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-5693627967546541287?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/5693627967546541287/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2009/04/wiec-mamy-kolejna-zaobe-narodowa.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/5693627967546541287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/5693627967546541287'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2009/04/wiec-mamy-kolejna-zaobe-narodowa.html' title='Więc mamy kolejną żałobę narodową?'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-3850503099224597007</id><published>2009-04-07T09:09:00.000-07:00</published><updated>2009-12-08T22:38:52.262-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>Bluetooth + telefon = zdalne sterowanie</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_j-zroiz0t7E/Sdt9cchbCcI/AAAAAAAAAzw/uzTx4yLrnHc/s1600-h/50px-Bluetooth_bw.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 50px; height: 50px;" src="http://2.bp.blogspot.com/_j-zroiz0t7E/Sdt9cchbCcI/AAAAAAAAAzw/uzTx4yLrnHc/s200/50px-Bluetooth_bw.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5321985312314558914" /&gt;&lt;/a&gt;&lt;br /&gt;Długo zwlekałem, ale lenistwo i brak czasu nie pozwalały mi na wcześniejsze zajęcie się tą sprawą. W końcu zabrałem się do roboty i wyniki pracy są całkiem przyjemne. Oto co zrobiłem:&lt;br /&gt;&lt;br /&gt;PÓŁPRODUKTY&lt;br /&gt;- notebook z adapterem Bluetooth w ilości sztuk 1&lt;br /&gt;- telefon komórkowy Sony Ericsson k550 (też z Bluetoothem) - sztuk 1&lt;br /&gt;- łącze internetowe (do pobrania reszty składników)&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Dla uproszczenia całości procesu zakładamy, że mamy poprawnie zainstalowany adapter Bluetooth, a nasz telefon widzi komputer i na odwrót. Bierzemy w ręce klawiaturę i wklepujemy:&lt;br /&gt;&lt;p class="code"&gt;# yum install anyremote&lt;/p&gt;&lt;br /&gt;Instalujemy wymagane zależności.&lt;br /&gt;Ze strony &lt;a href="http://anyremote.sourceforge.net/dload.html"&gt;http://anyremote.sourceforge.net/dload.html&lt;/a&gt; pobieramy jeden z plików JAR z sekcji &lt;span style="font-weight:bold;"&gt;Java client for WAP download&lt;/span&gt;, kopiujemy go do telefonu i przechodzimy do następnego kroku jakim jest czytanie manuala... &lt;br /&gt;&lt;p class="code"&gt;man anyremote&lt;/p&gt;&lt;br /&gt;Ten krok można oczywiście pominąć, bądź wykonać go innym razem w zależności od własnych preferencji i znajomości tematu. &lt;br /&gt;Włączamy nasz adapter. Uruchamiamy połączenia Bluetooth w naszym telefonie (w tym konkretnym modelu Menu główne -&gt; Ustawienia -&gt; Łączność -&gt; Bluetooth -&gt; Włącz   ...ale tego dużo). Uruchamiamy dowolny emulator terminala i całość wypiekamy tak długo, aż się wszystko uda:&lt;br /&gt;&lt;p class="code"&gt;anyremote -f /usr/share/anyremote/cfg-data/[katalog]/[nazwa_pliku].cfg&lt;/p&gt;&lt;br /&gt;np. &lt;p class="code"&gt;anyremote -f /usr/share/anyremote/cfg-data/Server-mode/mpd.cfg&lt;/p&gt;Teraz uruchamiamy program kliencki na telefonie. Możemy już sterować odtwarzaniem mp3 za pomocą telefonu.&lt;br /&gt;&lt;br /&gt;Całość podawać na gorąco bądź z dodatkiem &lt;span style="font-weight:bold;"&gt;ganyremote&lt;/span&gt;&lt;br /&gt;&lt;p class="code"&gt;yum install ganyremote&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_j-zroiz0t7E/SduBXUhhd8I/AAAAAAAAAz4/mILgbn9Kx1c/s1600-h/zrzut_ekranu-gAnyRemote.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 156px;" src="http://4.bp.blogspot.com/_j-zroiz0t7E/SduBXUhhd8I/AAAAAAAAAz4/mILgbn9Kx1c/s200/zrzut_ekranu-gAnyRemote.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5321989622314661826" /&gt;&lt;/a&gt;W menu Programy -&gt; Narzędzia systemowe powinna pojawić się nowa ikonka programy &lt;span style="font-weight:bold;"&gt;ganyremote&lt;/span&gt;. Po uruchomieniu powinno sie pojawić okienko podobne do tego na screenie obok.&lt;br /&gt;Po więcej szczegółów zapraszam na &lt;a href="http://anyremote.sourceforge.net/"&gt;http://anyremote.sourceforge.net/&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-3850503099224597007?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/3850503099224597007/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2009/04/bluetooth-telefon-zdalne-sterowanie.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/3850503099224597007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/3850503099224597007'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2009/04/bluetooth-telefon-zdalne-sterowanie.html' title='Bluetooth + telefon = zdalne sterowanie'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_j-zroiz0t7E/Sdt9cchbCcI/AAAAAAAAAzw/uzTx4yLrnHc/s72-c/50px-Bluetooth_bw.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-1147283305681926885</id><published>2009-03-18T04:01:00.000-07:00</published><updated>2009-03-18T04:22:31.693-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Dwa nowe style Fvwm</title><content type='html'>Ostatnio napisałem o Fvwm. Żeby nie było, że to jakaś zwykła akcja propagandowa podrzucam dwa style dla tego środowiska graficznego: &lt;a href="http://www.box-look.org/content/show.php/ClearBright?content=101160&amp;PHPSESSID=7cbb1c541d20d0839fb41fe346b4be68"&gt;ClearBright&lt;/a&gt;, oraz &lt;a href="http://www.box-look.org/content/show.php/MacFvwm?content=101123&amp;PHPSESSID=7cbb1c541d20d0839fb41fe346b4be68"&gt;MacFvwm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-1147283305681926885?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/1147283305681926885/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2009/03/dwa-nowe-style-fvwm.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/1147283305681926885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/1147283305681926885'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2009/03/dwa-nowe-style-fvwm.html' title='Dwa nowe style Fvwm'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-1197707720706661200</id><published>2009-03-17T12:56:00.000-07:00</published><updated>2009-03-18T04:20:40.926-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Window manager na diecie - FVWM</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_j-zroiz0t7E/ScAVC9ERkzI/AAAAAAAAAwE/uueZR5UrFEg/s1600-h/logo_fvwm_52.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 156px; height: 52px;" src="http://3.bp.blogspot.com/_j-zroiz0t7E/ScAVC9ERkzI/AAAAAAAAAwE/uueZR5UrFEg/s200/logo_fvwm_52.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5314270700793598770" /&gt;&lt;/a&gt;Każdy, kto używał kiedykolwiek Linuksa na pewno miał styczność z takim środowiskiem graficznym jak &lt;a href="http://www.gnome.org/"&gt;GNOME&lt;/a&gt;. Ostatnio dodatkowym obiektem pożądań wielu osób stało się również &lt;a href="http://www.kde.org/"&gt;KDE&lt;/a&gt; (to wielkie bum na czwartą wersję tego środowiska graficznego). No i co? Niby fajnie. Okna całkiem ładnie wyglądają, menu jest przejrzyste, a efekty czasem się przydają, żeby zaszpanować przed kumplami. Sam stawiałem pierwsze kroki na Slackware 9.1 z KDE chyba wtedy jeszcze 3.1. &lt;span class="fullpost"&gt;Później przesiadałem się na kilka innych dystrybucji korzystając na przemian z KDE i GNOME. Jednak ciągły rozrost obydwu lekko mnie denerwował. &lt;br /&gt;Coraz bardziej zacząłem zwracać uwagę na alternatywne menedżery okien dla Linuksa. Trochę czasu minęło, aż trafiłam na coś ciekawego. &lt;a href="http://www.fvwm.org/"&gt;Fvwm&lt;/a&gt;, bo o nim mowa to malutki manager okien bazujący na martwym już TWM'ie. Najnowasza wersja - 2.5.27 - oferuje nam takie bajery, jak obsługę wielu monitorów (z wykorzystaniem Xineramy), obsługa wirtualnych pulpitów, możliwość różnicowania dekoracji okien dla różnych programów, półprzezroczystość, możliwość dodawania rozszerzeń dzięki modułom. Główną jednak zaletą Fvwm jest bardzo małe zużycie pamięci, oraz zasobów procesora, a także możliwość konfiguracji ograniczona prawie wyłącznie naszą wyobraźnią (prawie, bo jeszcze trzeba uwzględnić dodatkowe skille, jak na przykład znajomość perla, basha itp). &lt;br /&gt;Więcej informacji na temat tego cudeńka można znaleźć na &lt;a href="http://pl.wikipedia.org/wiki/FVWM"&gt;Wiki&lt;/a&gt;, &lt;a href="http://www.fvwm.org/"&gt;oficjalnej stronie&lt;/a&gt;, oraz &lt;a href="http://fvwm.lair.be/"&gt;forum&lt;/a&gt; poświęconym Fvwm.&lt;br /&gt;Dla ciekawych wyglądu tego tworu zamieszczam poniżej kilka screenshotów.&lt;br /&gt;&lt;br /&gt;&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.pl/lh/photo/CZlpanoUonqAPWslSJ1v2Q?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_j-zroiz0t7E/SCn6ycvEY5I/AAAAAAAAAHM/NRF7ik1iOkU/s144/fvwm20070510175459.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.pl/lh/photo/sVadOAteHHQd-iTpQwzhkw?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_j-zroiz0t7E/SHcqOto8EEI/AAAAAAAAAPw/DuFhLP7tDwA/s144/fvwm20080628133645.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.pl/lh/photo/0EHhu8oYi7RyXtHjzCne1w?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_j-zroiz0t7E/SCn6x8vEY4I/AAAAAAAAAHE/ALwLkhRcfxw/s144/fvwm.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.pl/lh/photo/Dz4nYhghpQpM9MJBCGgHsQ?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_j-zroiz0t7E/SCn6y8vEY6I/AAAAAAAAAHU/kpysnEIgDJU/s144/snapshot1.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-1197707720706661200?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/1197707720706661200/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2009/03/window-manager-na-diecie-fvwm.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/1197707720706661200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/1197707720706661200'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2009/03/window-manager-na-diecie-fvwm.html' title='Window manager na diecie - FVWM'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_j-zroiz0t7E/ScAVC9ERkzI/AAAAAAAAAwE/uueZR5UrFEg/s72-c/logo_fvwm_52.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-8944061965448607865</id><published>2009-02-11T04:10:00.000-08:00</published><updated>2009-03-18T04:25:06.522-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reaktor'/><title type='text'>Darmowy Internet</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_j-zroiz0t7E/SZLD71i6SuI/AAAAAAAAAus/Yz9VNf8DEI0/s1600-h/images.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 133px; height: 66px;" src="http://2.bp.blogspot.com/_j-zroiz0t7E/SZLD71i6SuI/AAAAAAAAAus/Yz9VNf8DEI0/s200/images.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5301515144121699042" /&gt;&lt;/a&gt;Kilka dni temu na portalu &lt;a href="http://wp.pl"&gt;wp.pl&lt;/a&gt; trafiłem na &lt;a href="http://tech.wp.pl/kat,1009785,title,Siec-bezprzewodowa-dla-wszystkich-Polakow,wid,10829429,wiadomosc.html"&gt;artykuł&lt;/a&gt;, w którym dowiadujemy się o bardzo mądrym rządowym programie mającym na celu pokrycie kraju siecią przekaźników umożliwiających podłączenie się do bezprzewodowego internetu. Wszystko bardzo ładnie, idea miła dla ucha ...jeżeli nie zna się szczegółów, albo żyje się na pustkowiu, gidze w ogóle nie istnieje coś takiego jak internet. Dlaczego? Dlatego, że &lt;span class="fullpost"&gt;doznamy niesamowicie szybkich transferów na poziomie 256kbps, co pół godziny będziemy rozłączani i to wszystko już w 2014 roku! Nie mogę się doczekać, kiedy tylko państwowe przekaźniki zaczną zwiększać zakłócenia w sieciach WiFi. Ciekaw jestem jeszcze jak zabezpieczą taką sieć... Na dodatek to wszystko dziej się w naszym kraju, gdzie policjanci są zmuszani do chodzenia na piesze patrole, bo rządu nie stać na benzynę do radiowozów. No ale po co nam bezpieczeństwo, skoro będziemy mieć superszybki darmowy internet na polu namiotowym :)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-8944061965448607865?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/8944061965448607865/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2009/02/darmowy-internet.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/8944061965448607865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/8944061965448607865'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2009/02/darmowy-internet.html' title='Darmowy Internet'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_j-zroiz0t7E/SZLD71i6SuI/AAAAAAAAAus/Yz9VNf8DEI0/s72-c/images.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-5386511351814348294</id><published>2009-02-10T12:11:00.000-08:00</published><updated>2009-03-18T04:20:28.057-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Przez pisanie do nowego statnu świadomości - NEdit</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_j-zroiz0t7E/SZHn81bV6II/AAAAAAAAAuU/wUv7D2wOmKk/s1600-h/niki.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 102px; height: 124px;" src="http://4.bp.blogspot.com/_j-zroiz0t7E/SZHn81bV6II/AAAAAAAAAuU/wUv7D2wOmKk/s320/niki.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5301273268711712898" /&gt;&lt;/a&gt;Podobno ciekawość jest pierwszym stopniem do piekła. Mnie nie zaprowadziła do "rogacza", lecz rzuciła w moje ręce dość ciekawy edytor tekstowy, jakim jest NEdit. Jest to maleństwo oparte na &lt;a href="http://pl.wikipedia.org/wiki/Motif"&gt;Motifie&lt;/a&gt; (no dobrze, czasem może być to &lt;a href="http://www.lesstif.org/"&gt;LessTif&lt;/a&gt;).Pierwszy raz miałem z nim styczność przy systemie Solaris. Na pierwszy rzut oka nie wydal się porażająco piękny, jednak chwila pracy z tym edytorem nastawiła mnie do niego dość pozytywnie.&lt;br /&gt;Pierwszą jego zaletą okazało się być kolorowanie składni. Ilość rozpoznawanych języków programowania jest tutaj spora: Ada, C\C++, Fortran, Java, JavaScript, LaTeX, Lex, Pascal, Perl, Python i wiele innych.&lt;br /&gt;Na dodatek &lt;span class="fullpost"&gt;standardowo używana przez program czcionka jak dla mnie jest bardzo przyjemna dla oka. Wygląd całości można zobaczyć &lt;a href="http://www.nedit.org/screenshots.php"&gt;tutaj&lt;/a&gt;&lt;br /&gt;Kolejną zaletą NEdita jest posiadanie zakładek. Niewielkie rozmiary programu (co też jest bardzo ważne), oraz niskie zużycie pamięci zabezpiecza przed "zacinaniem" się zakładek przy przełączaniu się pomiędzy nimi.&lt;br /&gt;Nie brakuje tutaj również tego, co tygryski lubią najbardziej, czyli możliwości tworzenia własnych makr, stosowania wyrażeń regularnych, czy autouzupełniania.&lt;br /&gt;Wszystko pięknie, miło i bezboleśnie. Jednak, co się okazało z czasem, program nie obsługuje Unikodu... W takich sytuacjach przypomina mi się tylko jedno powiedzenie kumpla, że życie jest jak Miriam, takie piękne a tu... piwo się skończyło... Cóż, jak na razie trzeba zostać przy Vi i czekać na rozwój NEdita&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-5386511351814348294?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/5386511351814348294/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2009/02/przez-pisanie-do-nowego-statnu.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/5386511351814348294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/5386511351814348294'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2009/02/przez-pisanie-do-nowego-statnu.html' title='Przez pisanie do nowego statnu świadomości - NEdit'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_j-zroiz0t7E/SZHn81bV6II/AAAAAAAAAuU/wUv7D2wOmKk/s72-c/niki.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-2551436924238996821</id><published>2009-02-09T12:50:00.000-08:00</published><updated>2009-03-18T04:20:17.973-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Nowa strona (Google sites)</title><content type='html'>Od jakiegoś czasu prowadzę tego bloga, jednak nie wszystko można w nim opublikować (mam na myśli, że nie wszystko się daje). Dlatego też skorzystałem z jednej z usług Google - Google Sites (pol. Witryny Google). Dzięki temu tworowi, niskim nakładem pracy i w bardzo krótkim czasie udało mi się stworzyć małą &lt;a href="http://sites.google.com/site/kmichalakprivate/"&gt;stronkę&lt;/a&gt;, na której można znaleźć trochę śmieci z mojego komputera.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-2551436924238996821?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/2551436924238996821/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2009/02/nowa-strone-google-sites.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/2551436924238996821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/2551436924238996821'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2009/02/nowa-strone-google-sites.html' title='Nowa strona (Google sites)'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-5078700818236607341</id><published>2009-01-02T00:23:00.000-08:00</published><updated>2009-03-18T04:20:05.366-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Skrypt basha, czyli terminal też człowiek</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_j-zroiz0t7E/SZHq9vsN7tI/AAAAAAAAAuc/ytm8H3dP8zc/s1600-h/ico_bash.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 48px; height: 48px;" src="http://3.bp.blogspot.com/_j-zroiz0t7E/SZHq9vsN7tI/AAAAAAAAAuc/ytm8H3dP8zc/s200/ico_bash.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5301276582886633170" /&gt;&lt;/a&gt;Portal &lt;a href="http://wrzuta.pl"&gt;wrzuta.pl&lt;/a&gt; jest znany zapewne dużej liczbie internautów. Nie wielu jednak wie, że istnieje możliwość pobierania plików z tego serwisu. Przeglądarka internetowa Firefox posiada mnóstwo różnego rodzaju wtyczek umożliwiających pobieranie plików multimedialnych nawet z przestrzeni kosmicznej. Ja tam jednak wolę stary dobry terminal. Dlatego też przy pomocy młotka i przecinaka powstał mały skrypt w bashu, który pozwala na pobierania mp3 i wideo z wrzuty. Można go pobrać &lt;a href="http://sites.google.com/site/kmichalakprivate/Home/bash/wrzuta.pl.tar.gz?attredirects=0"&gt;tutaj&lt;/a&gt;. Do poprawnego działania wymaga jedynie wget i seda.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-5078700818236607341?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/5078700818236607341/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2009/01/skrypt-basha-czyli-terminal-te-czowiek.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/5078700818236607341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/5078700818236607341'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2009/01/skrypt-basha-czyli-terminal-te-czowiek.html' title='Skrypt basha, czyli terminal też człowiek'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_j-zroiz0t7E/SZHq9vsN7tI/AAAAAAAAAuc/ytm8H3dP8zc/s72-c/ico_bash.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-5861080474435168289</id><published>2008-12-10T12:54:00.000-08:00</published><updated>2010-07-08T12:13:39.229-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Scrobbler Last.fm dla mpd</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_j-zroiz0t7E/SZHrc_IflsI/AAAAAAAAAuk/SJBXxEryZhc/s1600-h/images.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 116px; height: 99px;" src="http://2.bp.blogspot.com/_j-zroiz0t7E/SZHrc_IflsI/AAAAAAAAAuk/SJBXxEryZhc/s200/images.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5301277119607707330" /&gt;&lt;/a&gt;Last.fm jest portalem chyba dosyć dobrze znanym w sieci. Wielu jego użytkowników korzysta udostępnionej przez portal aplikacji Last.fm. Jest ona dostępna zarówno dla systemu Windows jak i dla Linuksa, jednak na tym drugim nie posiada pełnej funkcjonalności znanej z wersji 'okienkowej'. Największą bolączką tego programu jest problem z integracją z odtwarzaczami multimedialnymi. &lt;br /&gt;Osobiście korzystam z malutkiego i lekkiego demonka MPD, który nie potrafi niestety bezpośrednio scrobblować piosenek. Aplikacja Last.fm też nie jest w stanie współpracować z MPD. &lt;br /&gt;Dobrym wyjściem jest więc użycie specjalnie do tego celu stworzonego scrobblera, jakim jest SCMPC.&lt;br /&gt;Instalacja programu nie jest strasznie skomplikowana. &lt;span class="fullpost"&gt;Jeżeli chodzi o wymagania samego programu, to konieczna jest obecność paczek: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;libcurl (&gt;=7.10)&lt;/li&gt;&lt;li&gt;argtable&lt;/li&gt;&lt;li&gt;confuse&lt;/li&gt;&lt;li&gt;libdaemon&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Jeżeli są one zainstalowane w systemie możemy zabrać się za instalację samego SCMPC.&lt;br /&gt;Na początku pobierzmy i rozpakujmy archiwum z programem.&lt;br /&gt;&lt;p class="code"&gt;$ wget -dc http://download.berlios.de/scmpc/scmpc-0.2.2.tar.bz2&lt;br /&gt;$ tar -jxvf ./scmpc-0.2.2.tar.bz2&lt;br /&gt;$ cd scmpc-0.2.2&lt;br /&gt;$ ./configure&lt;br /&gt;$ make&lt;br /&gt;$ su -c "make install"&lt;/p&gt;&lt;br /&gt;I mamy już nasz scrobbler. Zostaje jeszcze odpowiednio go skonfigurować, co robimy przez edycję pliku konfiguracyjnego &lt;span style="font-weight:bold;"&gt;.scmpcrc&lt;/span&gt;. Na początek, póki jeszcze jesteśmy w katalogu ze źródłami SCMPC wpisujemy w terminalu&lt;br /&gt;&lt;code class="prettyprint"&gt;$ cp ./examples/scmpc.conf ~/.scmpcrc&lt;br /&gt;$ cd ~&lt;br /&gt;$ vim ./.scmpcrc&lt;/code&gt;&lt;br /&gt;Mój konfig, wraz z opisem można znaleźć &lt;a href="http://sites.google.com/site/kmichalakprivate/Home/configs/scmpcrc.tar.gz?attredirects=0"&gt;tutaj&lt;/a&gt;. Wystarczy mała edycja i całość powinna ruszyć.&lt;br /&gt;&lt;br /&gt;Jedyny napotkany przeze mnie problem przy instalacji scrobblera to problem z plikiem libargtable2.so.0, którego program nie potrafił odnaleźć. W moim systemie plik ten znajdował się w katalogu &lt;span style="font-weight:bold;"&gt;/usr/local/lib/libargtable2.so.0&lt;/span&gt;. Koniecznym okazało się jednak utworzenie dodatkowego dowiązania &lt;br /&gt;&lt;code class="prettyprint"&gt;$ su -c "ln -s /usr/local/lib/libargtable2.so.0 /usr/lib/"&lt;/code&gt;&lt;br /&gt;To załatwiło sprawę.&lt;br /&gt;&lt;br /&gt;***&lt;br /&gt;&lt;br /&gt;W odpowiedzi na komentarz Gucman's Journal podrzucam kilka pomysłów na to jak uruchamiać scmpc przy starcie systemu. &lt;br /&gt;Pierwszy z nich jest bardzo prosty. Jedyne, co musimy zrobić to wyedytować sobie plik &lt;span style="font-weight:bold;"&gt;~/.bashrc&lt;/span&gt;. Dopisanie do niego linijki &lt;br /&gt;&lt;code class="prettyprint"&gt;scmpc&lt;/code&gt; spowoduje uruchomienie programu zaraz po zalogowaniu użytkownika. &lt;br /&gt;Drugi polega na utworzeniu aliasu do polecenia uruchamiającego klienta mpd, a dokładnie na utworzeniu aliasu łączącego wywołanie scrobblera i nakłądki na mpd. Załóżmy, że naszym klientem mpd jest ncmpc. Taki alias będzie wyglądał wówczas tak&lt;br /&gt;&lt;code class="prettyprint"&gt;$ alias='scmpc &amp;&amp; ncmpc'&lt;/code&gt;&lt;br /&gt;Specjalnie dałem tutaj &lt;span style="font-weight:bold;"&gt;&amp;&amp;&lt;/span&gt;, ponieważ daje to drobne zabezpieczenie, że ncmpc nie uruchomi się, jeżeli start scmpc nie zakończy się pomyślnie. &lt;br /&gt;Ostatnią metodą na uruchomienie naszego scrobblera, jest skrypt startowy. Na początek należy zalogować się jako użytkownik root&lt;br /&gt;&lt;code class="prettyprint"&gt;$ su -&lt;/code&gt; &lt;br /&gt;Po wklepaniu hasła przechodzimy do następnego kroku. Tworzymy plik o nazwie &lt;span style="font-weight:bold;"&gt;scmpc&lt;/span&gt; w katalogu &lt;span style="font-weight:bold;"&gt;/etc/init.d/&lt;/span&gt; i otwieramy go dowolnym edytorem tekstowym.&lt;br /&gt;&lt;code class="prettyprint"&gt;# touch /etc/init.d/scmpc&lt;br /&gt;# vim /etc/init.d/scmpc&lt;/code&gt;&lt;br /&gt;Do pliku wrzucamy linie:&lt;br /&gt;&lt;code class="prettyprint"&gt;#!/bin/sh&lt;br /&gt;# chkconfig:   - 20 80&lt;br /&gt;# description: scmpc - a client for MPD which submits your tracks to Audioscrobbler&lt;br /&gt;# processname: scmpc&lt;br /&gt;# config:      /etc/scmpc.conf&lt;br /&gt;# config:      /usr/local/etc/scmpc.conf&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Source function library.&lt;br /&gt;. /etc/rc.d/init.d/functions&lt;br /&gt;&lt;br /&gt;# This path can change in different distributions and configurations&lt;br /&gt;exec="/usr/local/bin/scmpc"&lt;br /&gt;prog=$(basename $exec)&lt;br /&gt;&lt;br /&gt;[ -e /etc/sysconfig/$prog ] &amp;&amp; . /etc/sysconfig/$prog&lt;br /&gt;&lt;br /&gt;lockfile=/var/lock/subsys/$prog&lt;br /&gt;&lt;br /&gt;##-START FUNCTION----------------------------------&lt;br /&gt;start() {&lt;br /&gt; echo -n $"Starting $prog: " &lt;br /&gt; daemon $exec   &lt;br /&gt;     retval=$?&lt;br /&gt;     echo&lt;br /&gt;     [ $retval -eq 0 ] &amp;&amp; touch $lockfile&lt;br /&gt;     return $retval&lt;br /&gt;}&lt;br /&gt;## end of start function --------------------------&lt;br /&gt;&lt;br /&gt;##-STOP FUNCITON-----------------------------------&lt;br /&gt;stop() {&lt;br /&gt;     echo -n $"Stopping $prog: "&lt;br /&gt;     # stop it here, often "killproc $prog"&lt;br /&gt; killproc $prog&lt;br /&gt;     retval=$?&lt;br /&gt;     echo&lt;br /&gt;     [ $retval -eq 0 ] &amp;&amp; rm -f $lockfile&lt;br /&gt;     return $retval&lt;br /&gt;}&lt;br /&gt;## end of stop function----------------------------&lt;br /&gt;&lt;br /&gt;## RESTART FUNCTION--------------------------------&lt;br /&gt;restart() {&lt;br /&gt;     stop&lt;br /&gt; start&lt;br /&gt;}&lt;br /&gt;## end of restart function-------------------------&lt;br /&gt;&lt;br /&gt;case "$1" in&lt;br /&gt; start|stop|restart)&lt;br /&gt;  $1&lt;br /&gt;         ;;&lt;br /&gt;     force-reload)&lt;br /&gt;         restart&lt;br /&gt;         ;;&lt;br /&gt;     status)&lt;br /&gt;         status $prog&lt;br /&gt;         ;;&lt;br /&gt; try-restart|condrestart)&lt;br /&gt;         if status $prog &gt;/dev/null ; then&lt;br /&gt;          restart&lt;br /&gt;         fi&lt;br /&gt;  ;;&lt;br /&gt; reload)&lt;br /&gt;         status $prog &gt;/dev/null || exit 7&lt;br /&gt;         action $"Service $prog does not support the reload action: " /bin/false&lt;br /&gt;         exit 3&lt;br /&gt;         ;;&lt;br /&gt;     *)&lt;br /&gt;         echo $"Usage: $0 {start|stop|status|restart|try-restart|force-reload}"&lt;br /&gt;         exit 2&lt;br /&gt;esac&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Niektóre linijki mogą wymagać naszej interwencji (wszystkie znajdziemy prawie na samym początku pliku), np. ścieżka dostępu do scmpc, czy do plików konfiguracyjnych. &lt;br /&gt;Następnie zapisujemy plik, nadajemy mu uprawnienia do wykonania i pomagamy sobie poleceniem &lt;span style="font-weight:bold;"&gt;chkconfig&lt;/span&gt;.&lt;br /&gt;&lt;code class="prettyprint"&gt;# chmod +x /etc/init.d/scmpc&lt;br /&gt;# chkconfig --add scmpc&lt;/code&gt;&lt;br /&gt;Jeżeli wszystko zostało poprawnie wpisane, program zakończy swoje działanie, w przeciwnym wypadku zwymiotuje na nas jakiś komunikat :P&lt;br /&gt;Tak oto dotarliśmy niemal do celu. Można jeszcze sprawdzić czy nasz nowy demonek uruchomi się przy starcie systemu.&lt;br /&gt;&lt;code class="prettyprint"&gt;# ntsysv&lt;/code&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_j-zroiz0t7E/Sa7-pfv-gQI/AAAAAAAAAvM/4uknHrpYSQs/s1600-h/ntsysv.png"&gt;&lt;img style="float:center; margin:0px 0px 10px 10px; cursor:pointer; cursor:hand;width: 200px; height: 129px;" src="http://4.bp.blogspot.com/_j-zroiz0t7E/Sa7-pfv-gQI/AAAAAAAAAvM/4uknHrpYSQs/s200/ntsysv.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5309460999567212802" /&gt;&lt;/a&gt;&lt;br /&gt;Powinno pojawić się małe okienko. Upewnijmy się tylko, że przy opcji &lt;span style="font-weight:bold;"&gt;scmpc&lt;/span&gt; mamy znak "*". Jeżeli tam jest, to wszystko w porządku. Jeżeli nie, to zaznaczamy tę opcję kursorem (taki czerowny prostokącik) i wciskamy spację (jeżeli ktoś lubi może też uderzyć klawisz spacji głową, dużym palcem u nogi, czy w jakiś inny wymyślny sposób). Jeszcze OK i jesteśmy w domu. Jeżeli ktoś ma ochotę może zajrzeć na &lt;a href="http://sites.google.com/site/kmichalakprivate/Home/configs"&gt;tę&lt;/a&gt; stronę. Znajduje się tutaj mój przykładowy &lt;a href="http://sites.google.com/site/kmichalakprivate/Home/configs/scmpc_init_script.tar.gz?attredirects=0"&gt;plik konfiguracyjny&lt;/a&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-5861080474435168289?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/5861080474435168289/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2008/12/scrobbler-lastfm-dla-mpd.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/5861080474435168289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/5861080474435168289'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2008/12/scrobbler-lastfm-dla-mpd.html' title='Scrobbler Last.fm dla mpd'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_j-zroiz0t7E/SZHrc_IflsI/AAAAAAAAAuk/SJBXxEryZhc/s72-c/images.jpeg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-5749301562887676587</id><published>2008-12-08T16:58:00.000-08:00</published><updated>2009-12-08T14:08:15.363-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>...spokojnie, to tylko demon</title><content type='html'>Nie wiem sam jak to nazwać, czy to zboczenie, czy też po prostu dosyć specyficzny gust, ale lubię konsolę. Wyszło na to, że nawet odtwarzacz audio musi być mały lekki i najlepiej odpalany w terminalu :P Jak zwykle moje oczy zatrzymały się na MPD. Popatrzyłem chwilkę, uśmiech wykrzywił mi twarz i po kilku klepnięciach w klawiaturę miałem już swojego demona razem z pseudograficzną nakładką.&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;p class="code"&gt;# yum install mpd ncmpc&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;Jak zawsze mały pliczek z konfiguracją...&lt;br /&gt;&lt;p class="code"&gt;$ touch ~/.mpdconf &amp;&amp; vim ~/.mpdconf&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;A teraz zamykamy oczy i jedziemy!&lt;br /&gt;&lt;p class="code"&gt;## REQUIRED PATHS #####################&lt;br /&gt;music_directory                 "/home/kamil/Media/Muzyka/Audio"&lt;br /&gt;playlist_directory              "~/.mpd/playlists"&lt;br /&gt;db_file                         "~/.mpd/mpd.db"&lt;br /&gt;log_file                        "~/.mpd/mpd.log"&lt;br /&gt;error_file                      "~/.mpd/mpd.error"&lt;br /&gt;#######################################&lt;br /&gt;&lt;br /&gt;pid_file                        "~/.mpd/mpd.pid"&lt;br /&gt;state_file                      "/var/lib/mpd/mpdstate"&lt;br /&gt;user                            "kamil"&lt;br /&gt;&lt;br /&gt;## AUDIO OUTPUT #####################&lt;br /&gt;audio_output {&lt;br /&gt;        type                    "alsa"&lt;br /&gt;        name                    "My ALSA Device"&lt;br /&gt;        device                  "hw:0,0"     # optional&lt;br /&gt;        format  &lt;br /&gt;&lt;br /&gt;### MIXER #########################&lt;br /&gt;mixer_type                      "alsa"&lt;br /&gt;mixer_device                    "default"&lt;br /&gt;mixer_control                   "PCM&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;Więcej mi się nie chce ustawiać, z resztą nie mam nawet takiej potrzeby.&lt;br /&gt;jeszcze tylko mała poprawka kosmetyczna&lt;br /&gt;&lt;p class="code"&gt;$ mkdir ~/.mpd &amp;&amp; mkdir ~/.mpd/playlists&lt;br /&gt;$ mpd &amp;&amp; ncmpc&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;W efekcie dostajemy małe okienko terminala wypełnione odtwarzaczem audio.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_j-zroiz0t7E/ST3GRnfKLbI/AAAAAAAAAsU/r-lseSpUGrI/s1600-h/screen.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 211px;" src="http://4.bp.blogspot.com/_j-zroiz0t7E/ST3GRnfKLbI/AAAAAAAAAsU/r-lseSpUGrI/s320/screen.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5277592344307838386" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-5749301562887676587?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/5749301562887676587/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2008/12/spokojnie-to-tylko-demon-sobie-gra-na.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/5749301562887676587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/5749301562887676587'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2008/12/spokojnie-to-tylko-demon-sobie-gra-na.html' title='...spokojnie, to tylko demon'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_j-zroiz0t7E/ST3GRnfKLbI/AAAAAAAAAsU/r-lseSpUGrI/s72-c/screen.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-6940784413055752412</id><published>2008-12-07T15:28:00.000-08:00</published><updated>2009-03-18T04:19:12.232-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Short message about errors</title><content type='html'>Jak w tytule, krótka notka...&lt;br /&gt;Jak pisałem w poprzednim poście miałem drobne probelmy po aktualizacji systemu do F10. Co się okazało wszystkiemu był winien SELinux, który nie wiedzieć czemu olał wcześniejsze ustawienia i zaczął blokować wszystko jak leciało... -__-`&lt;br /&gt;Jako, że leniwy jestem, po prostu zadźgałem gada i chwilowo mam spokój. Wezmę się za jego konfigurację w wolnym czasie (czyli pewnie w święta dopiero).&lt;br /&gt;Dziękuję za uwagę. Dzisiejszy post sponsorowały literki Ą, Ę oraz liczba 8.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-6940784413055752412?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/6940784413055752412/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2008/12/short-message-about-errors.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/6940784413055752412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/6940784413055752412'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2008/12/short-message-about-errors.html' title='Short message about errors'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-3799442422555735320</id><published>2008-12-05T18:02:00.000-08:00</published><updated>2009-03-18T04:18:59.758-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Freshmeat czyli Fedora Core po aktualizacji</title><content type='html'>Nowy dzień przyniósł ze sobą aktualizacje systemu. Co prawda Fedora Core 10 została wydana już 24 listopada tego roku, jednak tak jakoś wyszło, że nie było kiedy zasiąść do komputera. &lt;br /&gt;System zawsze miał w miarę aktualne pakiety, jednak dzisiaj chyba trochę się zniechęciłem do instalowania najnowszych poprawek i aktualizacji.&lt;br /&gt;Pierwsze co rzuciło mi się w oczy, to błędy przy samej instalacji pakietów Cóż zdarza się czasem, więc nie przejąłem się za bardzo (i to był błąd...).&lt;span class="fullpost"&gt; Uruchomienie jakiegokolwiek położenia z menu "Miejsca" środowiska Gnome dawało mało ciekawe rezultaty. Za każdym razem pojawiał się taki oto komunikat&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_j-zroiz0t7E/STniPIpaP3I/AAAAAAAAAsI/DP5G4tlIHSc/s1600-h/zrzut_ekranu-B%C5%82%C4%85d.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 103px;" src="http://2.bp.blogspot.com/_j-zroiz0t7E/STniPIpaP3I/AAAAAAAAAsI/DP5G4tlIHSc/s320/zrzut_ekranu-B%C5%82%C4%85d.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5276497188088332146" /&gt;&lt;/a&gt;&lt;br /&gt;Niech będzie, nie zawracałem sobie tym chwilowo głowy. Postanowiłem sprawdzić nowy kernel. Przeładowanie systemu przyniosło korzyści chyba tylko &lt;a href="http://kerneloops.org/"&gt;kerneloops&lt;/a&gt;. Nowiutkie jajko 2.6.28-0.106.rc6.git4.fc11.i686 nie nadawało się do pracy. Musiałem niestety wrócić do poprzedniej wersji. Do tego jeszcze poprawić problem z otwieraniem katalogów przez Nautilusa. Szukałem, czytałem ...i niczego sensownego nie znalazłem. Okazało się, że jedynym działającym lekarstwem na nautilusową bolączkę jest całkowite wyrzucenie ustawień gnome i nautilusa (nie chciało mi się już bawić w sprawdzanie pojedynczych plików). Po tym udało się postawić system na nogi. &lt;br /&gt;Teraz znów możemy spokojnie biegać i grać w piłkę...&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-3799442422555735320?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/3799442422555735320/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2008/12/freshmeat-czyli-fedora-core-po.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/3799442422555735320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/3799442422555735320'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2008/12/freshmeat-czyli-fedora-core-po.html' title='Freshmeat czyli Fedora Core po aktualizacji'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_j-zroiz0t7E/STniPIpaP3I/AAAAAAAAAsI/DP5G4tlIHSc/s72-c/zrzut_ekranu-B%C5%82%C4%85d.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-1204928547734583160</id><published>2008-11-23T15:38:00.000-08:00</published><updated>2010-07-08T12:15:51.030-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Lekki monitor systemu Conky</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_j-zroiz0t7E/SSxkcsaacVI/AAAAAAAAAo4/q-D_obhYx-c/s1600-h/zrzut_ekranu.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 75px; height: 130px;" src="http://3.bp.blogspot.com/_j-zroiz0t7E/SSxkcsaacVI/AAAAAAAAAo4/q-D_obhYx-c/s400/zrzut_ekranu.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5272699707865067858" /&gt;&lt;/a&gt;Miałem się już nie bawić tymi wszystkimi "głupotkami", jednak chyba nie potrafię bez tego wytrzymać. Strasznie mnie korci wrzucić sobie Fvwm (ewentualnie Fvwm Cristal), czy Fluxbox. MPD (Music Player Daemon) siedzi sobie i podrzuca mi co jakiś czas jakieś piosenki. &lt;br /&gt;Tylko łapy mnie świerzbią, żeby sobie coś ładnie skompilować, niestety jajko nie wchodzi nawet w grę. Od kilku dni mam jeszcze całkiem nowe 2.6.27.5-17... &lt;br /&gt;Jedyne co mi przychodzi do głowy, to stare dobre conky. &lt;span class="fullpost"&gt;Zassałem więc sobie maleństwo prosto z SVN&lt;br /&gt;&lt;br /&gt;&lt;code class="prettyprint"&gt;$ svn co https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky2 ~/svn/conky&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Potem jak zawsze szybko i elegancko &lt;br /&gt;&lt;code class="prettyprint"&gt;$ cd ./svn/conky&lt;br /&gt;$ ./configure &lt;br /&gt;$ make&lt;br /&gt;$ su -c "make install"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Wklepane po drodze hasełko i już po instalacji. Jeszcze chwilka konfiguracji &lt;br /&gt;&lt;code class="prettyprint"&gt;$ touch ~/.conkyrc &amp;&amp; vi ~/.conkyrc&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;i jedziemy&lt;br /&gt;&lt;code class="prettyprint"&gt;&lt;br /&gt;#####################################################&lt;br /&gt;## MY CONKY CONFIGURATION&lt;br /&gt;## KAMIL MICHALAK 24.11.2008&lt;br /&gt;#####################################################&lt;br /&gt;&lt;br /&gt;background no&lt;br /&gt;use_xft yes&lt;br /&gt;&lt;br /&gt;mpd_host 127.0.0.1&lt;br /&gt;mpd_port 6600&lt;br /&gt;&lt;br /&gt;xftfont Bitstream Vera Sans:size=7&lt;br /&gt;xftalpha 0.8&lt;br /&gt;update_interval 1.0&lt;br /&gt;total_run_times 0&lt;br /&gt;own_window yes&lt;br /&gt;own_window_transparent yes&lt;br /&gt;own_window_hints undecorated,below,skip_taskbar&lt;br /&gt;own_window_type override&lt;br /&gt;double_buffer yes&lt;br /&gt;minimum_size 100 5&lt;br /&gt;maximum_width 150&lt;br /&gt;&lt;br /&gt;draw_shades no&lt;br /&gt;&lt;br /&gt;draw_outline no&lt;br /&gt;draw_borders no&lt;br /&gt;stippled_borders 8&lt;br /&gt;border_margin 4&lt;br /&gt;border_width 1&lt;br /&gt;default_color white&lt;br /&gt;default_shade_color grey&lt;br /&gt;default_outline_color grey&lt;br /&gt;alignment top_right&lt;br /&gt;gap_x 10&lt;br /&gt;gap_y 50&lt;br /&gt;no_buffers yes&lt;br /&gt;uppercase no&lt;br /&gt;cpu_avg_samples 8&lt;br /&gt;net_avg_samples 8${mpd_status} ${mpd_artist} ${mpd_title}&lt;br /&gt;override_utf8_locale yes&lt;br /&gt;use_spacer right&lt;br /&gt;TEXT&lt;br /&gt;$alignc${color }Fedora $kernel&lt;br /&gt;&lt;br /&gt;${color}${color slate grey}&lt;br /&gt;CPU: $color${color #ddaa00}$cpu%$alignr$color$running_processes/ $processes&lt;br /&gt;${color #88aadd}${cpugraph 25,150 88aadd ffffff}&lt;br /&gt;${font :size=7}&lt;br /&gt;${color lightgrey}ram: $color$memperc% ${alignr}$mem&lt;br /&gt;${color lightgrey}swap: $color$swapperc% ${alignr}$swap&lt;br /&gt;${font :size=7}&lt;br /&gt;${color lightgrey} /:${alignr}${color }${fs_free /} / ${fs_size /}&lt;br /&gt;${fs_bar 5,150 /}&lt;br /&gt;${color lightgrey} /home:${alignr}${color }${fs_free /home} / ${fs_size /home}&lt;br /&gt;${fs_bar 5,150 /home}&lt;br /&gt;${color grey}net:&lt;br /&gt;${color}down: ${color white}${downspeedf wlan0}KiB ${color}up: ${color white}${upspeedf wlan0}KiB&lt;br /&gt;${color slate grey}${downspeedgraph wlan0 25,70 000000 00ff00} ${color slate grey}${alignr}${upspeedgraph wlan0 25,70 000000 0000ff}&lt;br /&gt;${font Dungeon:style=Bold:pixelsize=9}${color #88aadd}MPD: $mpd_status&lt;br /&gt;${alignc} ${mpd_artist} - ${mpd_title}&lt;br /&gt;${mpd_bar 5,150}${color #88aadd}${alignc}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;zapisujemy wszystko ([Esc], :x, [Enter]) i mamy conky.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-1204928547734583160?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/1204928547734583160/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2008/11/lekki-monitor-systemu-conky.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/1204928547734583160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/1204928547734583160'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2008/11/lekki-monitor-systemu-conky.html' title='Lekki monitor systemu Conky'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_j-zroiz0t7E/SSxkcsaacVI/AAAAAAAAAo4/q-D_obhYx-c/s72-c/zrzut_ekranu.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-4556178954907895066</id><published>2008-11-09T05:17:00.000-08:00</published><updated>2009-03-18T04:18:35.609-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comic'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Przedstawiam, Pan Paweł "Submarine" Piskorsk</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://su8.pl/amen/"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 114px; height: 114px;" src="http://su8.pl/menu/amen.jpg" border="0" alt="" /&gt;&lt;/a&gt;I znów przemierzając bezkresne internetowe morze informacji natrafiłem na coś ciekawego. Mianowicie jakoś tak przypadkiem wdepnęło mi się na stronę &lt;a href="http://su8.pl/"&gt;su8.pl&lt;/a&gt;. A stamtąd jak po sznureczku do pięknego wręcz komiksu o jakże wdzięcznym tytule "Amen". Całość została opracowana (oczywiście z pomocą kilku innych osób) przez niejakiego Pawła Piskorskiego znanego jako "Submarine". Komiks opowiada o swoistej krucjacie czterech irlandzkich księży, którzy muszą stawić czoła snującemu demoniczne plany... papieżowi. Na prawdę sympatyczny klimat i niewybredne (co nie znaczy, że mało oryginalne) poczucie humoru nadaje całości naprawdę ciekawy charakter. Z resztą co się będę wysilał z wciskaniem ludziom własnych opinii. Najlepiej sami sprawdźcie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-4556178954907895066?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/4556178954907895066/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2008/11/przedstawiam-pan-pawe-submarine.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/4556178954907895066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/4556178954907895066'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2008/11/przedstawiam-pan-pawe-submarine.html' title='Przedstawiam, Pan Paweł &quot;Submarine&quot; Piskorsk'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-2109238828759169711</id><published>2008-10-27T17:08:00.000-07:00</published><updated>2009-03-18T10:50:41.465-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Pablo ...Picasa</title><content type='html'>Lubię sobie czasem obejrzeć jakieś ciekawe zdjęcie. Screen z pulpitu też czasem może przykuć uwagę i doprowadzić do białej gorączki zazdrosnych posiadaczy zwykłych szarych pulpitów. &lt;br /&gt;A gdzie można w ogóle obejrzeć pracę czyichś rąk (głów, nóg, klawiatur, myszek, ekranów, ołówków itp., itp...) jeżeli chodzi o różnego rodzaju zdjęcia? Oczywiście na &lt;a href="http://picasa.google.pl/"&gt;http://picasa.google.pl&lt;/a&gt;.&lt;br /&gt;Osobiście jestem użytkownikiem tego serwisu prawie od jego "narodzin". &lt;span class="fullpost"&gt;&lt;br /&gt;Obecny stan moich galerii mozna zobaczyć poniżej.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Moje galerie na Google'ach.&lt;br /&gt;&lt;a href="http://picasaweb.google.pl/kmichalak8/MakeASmile"&gt;&lt;img src="http://lh5.ggpht.com/kmichalak8/SK_xdzADb9E/AAAAAAAAATQ/oWaKtilauek/s160-c/MakeASmile.jpg" width="160" height="160" style="margin:1px 0 0 4px;" alt="Make a smile" /&gt;&lt;/a&gt;&lt;a href="http://picasaweb.google.pl/kmichalak8/ElBietW"&gt;&lt;img src="http://lh3.ggpht.com/kmichalak8/SEFYM5kH4cE/AAAAAAAAAOY/JKgeqj5XzWM/s160-c/ElBietW.jpg" width="160" height="160" style="margin:1px 0 0 4px;" alt="Elżbietów" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.pl/kmichalak8/Drawings"&gt;&lt;img src="http://lh3.ggpht.com/kmichalak8/SCvd_MvEZKE/AAAAAAAAAT4/bPwjV6EZNgM/s160-c/Drawings.jpg" width="160" height="160" style="margin:1px 0 0 4px;" alt="Drawings" /&gt;&lt;/a&gt;&lt;a href="http://picasaweb.google.pl/kmichalak8/Animals#"&gt;&lt;img src="http://lh4.ggpht.com/kmichalak8/SN5bW8_vpiE/AAAAAAAAAZ8/fcbkzfs4SIQ/s160-c/Animals.jpg" width="160" height="160" style="margin:1px 0 0 4px;" alt="Animals" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.pl/kmichalak8/GnomeScreenshots#"&gt;&lt;img src="http://lh6.ggpht.com/kmichalak8/SCoE9MvEY7E/AAAAAAAAAJ8/oF9vneyK8dI/s160-c/GnomeScreenshots.jpg" width="160" height="160" style="margin:1px 0 0 4px;" alt="Gnome Screenshots" /&gt;&lt;/a&gt;&lt;a href="http://picasaweb.google.pl/kmichalak8/MyFVWMScreens#"&gt;&lt;img src="http://lh5.ggpht.com/kmichalak8/SCn6wMvEY2E/AAAAAAAAARE/A-yb06iuv0k/s160-c/MyFVWMScreens.jpg" width="160" height="160" style="margin:1px 0 0 4px;" alt="FVWM Screenshots" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Posiadanie konta na Picasie równoważne jest z posiadaniem konta na gmailu, a przy okazji również we wszystkich innych usługach oferowanych przez google.&lt;br /&gt;Jedyną wagą (choć sam nie wiem czy taką straszną i nie do przeżycia) jest ograniczone miejsce na umieszczane w serwisie pliki. Ich łaczna waga nie może przekroczyć 1GB. Moim zdaniem rekompensuje to jednak dosyć dobra i szpanerska przeglądarka graficzna o nazwie... Picasa. A jakże by inaczej &lt;img style="cursor:pointer; cursor:hand;width: 24px; height: 24px;" src="http://3.bp.blogspot.com/_j-zroiz0t7E/SQZd9BduTJI/AAAAAAAAAjg/RG887BxuCBU/s320/tongue.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5261996517575511186" /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-2109238828759169711?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/2109238828759169711/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2008/10/pablo-picasa.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/2109238828759169711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/2109238828759169711'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2008/10/pablo-picasa.html' title='Pablo ...Picasa'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/kmichalak8/SK_xdzADb9E/AAAAAAAAATQ/oWaKtilauek/s72-c/MakeASmile.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-9028786734613030234</id><published>2008-10-26T10:43:00.000-07:00</published><updated>2010-08-14T04:37:59.130-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Fedora i Samba w jednym stali domu...</title><content type='html'>Jest niedziela, siedzę w mieszkaniu i czekam na współlokatorów. Czas w końcu podłączyć drukarkę i udostępnić ją w sieci. Tylko, że ja nie mam w lapku portu lpt a drukarka jest dosyć stara... &lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5261528168426096882" src="http://4.bp.blogspot.com/_j-zroiz0t7E/SQSz_g6_yPI/AAAAAAAAAi8/chHU69ENj5g/s320/confused.png" /&gt; Trzeba będzie podpiąc ją do komputera w pokoju obok. &lt;br /&gt;Drukareczka działai nawet nie drukuje źle (prawie rok bez używania i nic się nie zepsuło &lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5261529820531304306" src="http://1.bp.blogspot.com/_j-zroiz0t7E/SQS1frfkp3I/AAAAAAAAAjY/pPbpbBSK0HQ/s320/smile-big.png" /&gt;). Dobra, tylko teraz udostępnić w sieci i... &lt;span class="fullpost"&gt;zainstalować sambę. &lt;br /&gt;Sama instalacja poszła bez problemu:&lt;/span&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;div class="code"&gt;# yum install samba samba-client&lt;/div&gt;&lt;br /&gt;Teraz trochę konfiguracji.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;# vim /etc/samba/smb.conf&lt;/div&gt;&lt;br /&gt;i mamy konfig&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;[global]&lt;br /&gt;workgroup = MSHOME&lt;br /&gt;server string = %h server (Samba %v)&lt;br /&gt;obey pam restrictions = Yes&lt;br /&gt;passdb backend = tdbsam&lt;br /&gt;passwd program = /usr/bin/passwd %u&lt;br /&gt;passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n *password\supdated\ssuccessfully* .&lt;br /&gt;username map = /etc/samba/smbusers&lt;br /&gt;syslog = 0&lt;br /&gt;log file = /var/log/samba/log.%m&lt;br /&gt;max log size = 1000&lt;br /&gt;dns proxy = No&lt;br /&gt;message command = /bin/sh -c '/usr/bin/linpopup "%f" "%m" %s; rm %s' &amp;amp;&lt;br /&gt;panic action = /usr/share/samba/panic-action %d&lt;br /&gt;invalid users = root&lt;br /&gt;&lt;br /&gt;[public]&lt;br /&gt;comment = Public directory&lt;br /&gt;path = /home/kamil/Publiczny&lt;br /&gt;force user = nobody&lt;br /&gt;force group = nogroup&lt;br /&gt;create mask = 0777&lt;br /&gt;directory mask = 0777&lt;br /&gt;guest ok = Yes&lt;br /&gt;&lt;br /&gt;[printers]&lt;br /&gt;comment = All Printers&lt;br /&gt;path = /var/spool/samba&lt;br /&gt;create mask = 0700&lt;br /&gt;printable = Yes&lt;br /&gt;browseable = No&lt;br /&gt;&lt;br /&gt;[print$]&lt;br /&gt;comment = Printer Drivers&lt;br /&gt;path = /var/lib/samba/printers&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Po tym wszystkim restart samby. Niestety okazało się, że komputery z Windowsem XP nie potrafią podłączyć się do udostępnionych zasobów. &lt;br /&gt;Zajrzyjmy do firewalla&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;# system-config-firewall&lt;/div&gt;&lt;br /&gt;Tutaj wszystko w porządku. Jeszcze SELinux&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;# system-config-selinux&lt;/div&gt;&lt;/span&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Tutaj też nic. Po kilku podejściach z różnymi konfiguracjami i zabaw z wyłączaniem firewalla i SELinux w końcu się udało. Jak zwykle diabeł tkwił w szczegółach, a dokładnie to w uprawnieniach katalogów. Okazało się, że wszystkie katalogi ścieżki dostępu do udostępnionego zasobu muszą być "&lt;span style="font-weight: bold;"&gt;do odczytu&lt;/span&gt;" dla wszystkich... &lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5261528866117068722" src="http://2.bp.blogspot.com/_j-zroiz0t7E/SQS0oIBfJ7I/AAAAAAAAAjM/PUPfpjd3z4Q/s320/bulgy-eyes.png" /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-9028786734613030234?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/9028786734613030234/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2008/10/fedora-i-samba-w-jednym-stali-domu.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/9028786734613030234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/9028786734613030234'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2008/10/fedora-i-samba-w-jednym-stali-domu.html' title='Fedora i Samba w jednym stali domu...'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_j-zroiz0t7E/SQSz_g6_yPI/AAAAAAAAAi8/chHU69ENj5g/s72-c/confused.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-728859591481074805.post-6441024100873870111</id><published>2008-10-23T15:45:00.000-07:00</published><updated>2009-03-17T14:23:19.849-07:00</updated><title type='text'>Mamo, mamo spójrz, to ja!</title><content type='html'>Witam wszystkich czytających ten blog! (jeżeli są tacy...)&lt;br /&gt;&lt;br /&gt;Pełzałem po stronach i co? Okazuje się, że taki &lt;a href="http://korwin-mikke.blog.onet.pl/"&gt;Januszek&lt;/a&gt; ma bloga, &lt;a href="http://dorn.blog.onet.pl/"&gt;Ludwiczek&lt;/a&gt; ma bloga, nawet &lt;a href="http://waldemarpawlak.blog.onet.pl/"&gt;Waldek&lt;/a&gt; ma! Ja jestem gorszy jakiś? Przecież mamy wolność słowa, wolny rynek, wolne media i wolny internet...&lt;br /&gt;&lt;br /&gt;Mam bloga! O czym będę w nim pisał? Dobre pytanie i to nie dlatego, że nie znam na nie odpowiedzi. Znam ją i to dobrze. Będzie to mój dziennik, trochę linków i przemyśleń.&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;A tak w ogóle, to mam na imię Kamil.&lt;br /&gt;Kim jestem? Studentem. Swoje męczarnie przeżywam na Politechnice Lubelskiej na wydziale Elektrotechniki i Informatyki (teraz już Bogu dzięki 2 rok).&lt;br /&gt;Liczę sobie dwadzieścia wiosen, a rok po moich narodzinach upadł system zwany &lt;a href="http://pl.wikipedia.org/wiki/Komunizm"&gt;komunizmem&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/728859591481074805-6441024100873870111?l=kmichalak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kmichalak.blogspot.com/feeds/6441024100873870111/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kmichalak.blogspot.com/2008/10/mamo-mamo-spjrz-to-ja.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/6441024100873870111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/728859591481074805/posts/default/6441024100873870111'/><link rel='alternate' type='text/html' href='http://kmichalak.blogspot.com/2008/10/mamo-mamo-spjrz-to-ja.html' title='Mamo, mamo spójrz, to ja!'/><author><name>Kamil</name><uri>http://www.blogger.com/profile/12409867873821230447</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_j-zroiz0t7E/ShsKDCUxHiI/AAAAAAAABDs/x3KVO3HhSJ0/S220/img_0042.jpg'/></author><thr:total>0</thr:total></entry></feed>
