<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>FLLOG</title>
	<atom:link href="http://www.michalklich.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.michalklich.com</link>
	<description>Fedora Linux Blog</description>
	<lastBuildDate>Fri, 19 Feb 2010 09:46:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Konfiguracja repo dla F12 &#8211; RPMFusion, Adobe, PlayOnLinux, Compiz Fusion</title>
		<link>http://www.michalklich.com/2010/02/18/konfiguracja-repo-dla-f12-rpmfusion-adobe-playonlinux-compiz-fusion/</link>
		<comments>http://www.michalklich.com/2010/02/18/konfiguracja-repo-dla-f12-rpmfusion-adobe-playonlinux-compiz-fusion/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 07:26:49 +0000</pubDate>
		<dc:creator>Klich Michał</dc:creator>
				<category><![CDATA[fedora]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[compiz fusion]]></category>
		<category><![CDATA[fedora 12]]></category>
		<category><![CDATA[konfiguracja]]></category>
		<category><![CDATA[playonlinux]]></category>
		<category><![CDATA[repo]]></category>
		<category><![CDATA[repozytorium]]></category>
		<category><![CDATA[rpmfusion]]></category>

		<guid isPermaLink="false">http://www.michalklich.com/?p=694</guid>
		<description><![CDATA[Konfiguracja podstatowych repozytorium z pakietami, które są instalowane wraz z systemem oraz dodatkowych które można dodać w zalezności od własnego upodobania. Dodatkowymi repozytorium są Rpmfusion, Adobe, PlayOnLinux, Compiz Fusion.

Podstawowa konfiguracja
Podstawowa konfiguracja repozytorium z oprogramowaniem to fedora, fedora-updates, fedora-updates-testing, fedora-rawhide. Poniżej opis repozytorium.

fedora – tutaj są wszystkie główne pakiety, bez poprawek. Domyślnie włączone.
fedora-updates – to repo [...]]]></description>
			<content:encoded><![CDATA[<p>Konfiguracja podstatowych repozytorium z pakietami, które są instalowane wraz z systemem oraz dodatkowych które można dodać w zalezności od własnego upodobania. Dodatkowymi repozytorium są Rpmfusion, Adobe, PlayOnLinux, Compiz Fusion.<br />
<img title="More..." src="http://www.michalklich.com/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" /></p>
<h2>Podstawowa konfiguracja</h2>
<p>Podstawowa konfiguracja repozytorium z oprogramowaniem to fedora, fedora-updates, fedora-updates-testing, fedora-rawhide. Poniżej opis repozytorium.</p>
<ul>
<li>fedora – tutaj są wszystkie główne pakiety, bez poprawek. Domyślnie włączone.</li>
<li>fedora-updates – to repo zawiera wszelkie uaktualnienia, które się ukazują. Domyślnie włączone.</li>
<li>fedora-updates-testing – to repo zawiera uaktualnienia, które są testowane (jak nazwa wskazuje). Domyślnie wyłączone ponieważ pakiety testowane mogą wpłynąć na stabilność systemu. Jeśli jednak posiadasz włączone warto zainteresować się <a href="https://admin.fedoraproject.org/updates/">https://admin.fedoraproject.org/updates/</a>, miejscem gdzie możesz dać znać czy poprawka rozwiązuje zgłoszone problemy.</li>
<li>fedora-rawhide – repozytorium zawierające pakiety wchodzące w skład nowszej, rozwijanej wersji Fedory (w tej chwili jest to F13). Wyłączone domyślnie z powodu tego, że nie osiąga nigdy statusu wersji stabilnej. W momencie osiągniecia pojawia sie kolejne wydanie a rawhide staje się nowym wydaniem.</li>
</ul>
<p>Repozytorium można włączać poprzez edycję plików z katalogu /etc/yum.repos.d/. Pokażę na przykładzie fedora-updates-tesing.repo</p>
<ol>
<li>sudo nano /etc/yum.repos.d/fedora-updates-testing.repo</li>
<li>Linijkę enabled=0 należy zamienić na enabled=1.</li>
</ol>
<p>Jeśli używasz yumex`a to należy przejść od opcji Repository Selection View (taka kula ziemska lub planeta) i zaznaczyć te które są interesujące, następnie Profiles i Save. Ostatnia rzecz to Refresh i dostaniemy listę dostępnych poprawek.</p>
<h2>Dodatkowe repozytorium</h2>
<h3>RPMFusion</h3>
<p>Instalacja graficzna wyglada następująco. Wybierz i kliknij link do twojej dystrybucji <a href="http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm">Fedora 10, 11 i 12</a>; <a href="http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-rawhide.noarch.rpm">Fedora Alpha, Beta, Rawhide, RC, Snapshot lub Preview</a>; <a href="http://download1.rpmfusion.org/free/el/updates/testing/5/i386/rpmfusion-free-release-5-0.1.noarch.rpm">RHEL5 lub inna kompatybilna z CentOS</a>. Potem należy zainstalować używając domyslnego wyboru Fedory (zostanie odpalony PackageKit) lub zapisać a potem zainstalować (sudo rpm -ihv nazwa_paczki). W ten sposób instalujemy wersję free, do repozytorum nonfree służą te linki: <a href="http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm">Fedora 10, 11 i 12</a>; <a href="http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-rawhide.noarch.rpm">Fedora Alpha, Beta, Rawhide, RC, Snapshot lub Preview</a>; <a href="http://download1.rpmfusion.org/nonfree/el/updates/testing/5/i386/rpmfusion-nonfree-release-5-0.1.noarch.rpm">RHEL5 lub inna kompatybilna z CentOS</a>.</p>
<p>Instalacja tesktowa wygląda w taki sposób.</p>
<ul>
<li>Fedora 10, 11 i 12<br />
<code>su -c 'rpm -Uvh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm'</code></li>
<li>Fedora Alpha, Beta, Rawhide, RC, Snapshot lub Preview<br />
<code>su -c 'rpm -Uvh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-rawhide.noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-rawhide.noarch.rpm'</code></li>
<li>RHEL5 lub inna kompatybilna z CentOS<br />
<code>su -c 'rpm -Uvh http://download1.rpmfusion.org/free/el/updates/testing/5/i386/rpmfusion-free-release-5-0.1.noarch.rpm http://download1.rpmfusion.org/nonfree/el/updates/testing/5/i386/rpmfusion-nonfree-release-5-0.1.noarch.rpm'</code></li>
</ul>
<h3>Adobe</h3>
<p>Repo zawiera paczki z flashem, jeśli nie chcesz używać gnash`a (wolna wersja flasha), zainstaluj to repo. Instalacja graficzna polega na kliknięciu linka do <a href="http://linuxdownload.adobe.com/adobe-release/adobe-release-i386-1.0-1.noarch.rpm">paczki</a> i pozwolenie na instalację za pomocą PackageKit.</p>
<p>Instalacja tekstowa<br />
<code>sudo rpm -ivh http://linuxdownload.adobe.com/adobe-release/adobe-release-i386-1.0-1.noarch.rpm</code></p>
<h3>PlayOnLinux</h3>
<p><a href="http://www.playonlinux.com/">PlayOnLinux</a> to projekt wspomagający isntalację gier i programów na wine. Posiada sporą bazę skryptów konfigurujących wine pod odpowiednie tytuły. Instalacja graficzna to po prostu kliknięcie i zainstalowanie tego <a href="http://mulx.playonlinux.com/rpm/playonlinux-yum-3-3.noarch.rpm">pakietu</a>.</p>
<p>Instalacja tekstowa</p>
<p><code>sudo rpm -ihv http://mulx.playonlinux.com/rpm/playonlinux-yum-3-3.noarch.rpm</code></p>
<h3>Compiz Fusion</h3>
<p>Wszyscy wiedzą co to jest Compiz Fusion a jeśli nie to zapraszam do przeczytania krótkiej <a href="http://pl.wikipedia.org/wiki/Compiz_Fusion">notki</a> w Wikipedii. To repozytorium zawiera paczki compiz-fusion dla F9, F10, F11 i F12. Instalacja graficzna polega na kliknięciu w ten <a href="http://leigh123linux.fedorapeople.org/compiz-fusion-release-1-8.noarch.rpm">link</a> i zainstalowaniu pakietu.</p>
<p>Instalacja tekstowa</p>
<p><code>sudo <span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">rpm -ivh http://leigh123linux.fedorapeople.org/compiz-fusion-release-1-8.noarch.rpm</span></code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.michalklich.com/2010/02/18/konfiguracja-repo-dla-f12-rpmfusion-adobe-playonlinux-compiz-fusion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Poprawiamy google app engine helper for Django.</title>
		<link>http://www.michalklich.com/2010/02/17/poprawiamy-google-app-engine-helper-for-django/</link>
		<comments>http://www.michalklich.com/2010/02/17/poprawiamy-google-app-engine-helper-for-django/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 09:38:50 +0000</pubDate>
		<dc:creator>Klich Michał</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[google app engine]]></category>
		<category><![CDATA[google app engine helper for django]]></category>

		<guid isPermaLink="false">http://www.michalklich.com/?p=687</guid>
		<description><![CDATA[Pojawiła się nowa wersja Google App Engine SDK, wersja 1.3.1 &#8211; 2010-02-10. W wypadku używania Google App Engine Helper for Django w wersji r100 i wyżej wymienionego SDK pojawia się błąd podczas startu serwera.

import ipaddr
ImportError: No module named ipaddr

Rozwiązanie tego problemu jest proste, należy poprawić plik __init__.py w katalogu z kodem helpera. Znajdujemy fragment


EXTRA_PATHS = [...]]]></description>
			<content:encoded><![CDATA[<p>Pojawiła się nowa wersja Google App Engine SDK, wersja <a href="http://googleappengine.googlecode.com/files/google_appengine_1.3.1.zip">1.3.1 &#8211; 2010-02-10</a>. W wypadku używania Google App Engine Helper for Django w wersji <a href="http://google-app-engine-django.googlecode.com/files/appengine_helper_for_django-r100.zip">r100</a> i wyżej wymienionego SDK pojawia się błąd podczas startu serwera.</p>
<blockquote>
<div id="_mcePaste">import ipaddr</div>
<div id="_mcePaste">ImportError: No module named ipaddr</div>
</blockquote>
<div>Rozwiązanie tego problemu jest proste, należy poprawić plik __init__.py w katalogu z kodem helpera. Znajdujemy fragment</div>
<div>
<blockquote>
<div>EXTRA_PATHS = [</div>
<div>SDK_PATH,</div>
<div>os.path.join(SDK_PATH, 'lib', 'antlr3'),</div>
<div>os.path.join(SDK_PATH, 'lib', 'django'),</div>
<div>os.path.join(SDK_PATH, 'lib', 'webob'),</div>
<div>os.path.join(SDK_PATH, 'lib', 'yaml', 'lib'),</div>
<div>]</div>
</blockquote>
<div>Po czym dodajemy linijkę aby wyglądał tak</div>
<div>
<blockquote>
<div>EXTRA_PATHS = [</div>
<div>SDK_PATH,</div>
<div>os.path.join(SDK_PATH, 'lib', 'antlr3'),</div>
<div>os.path.join(SDK_PATH, 'lib', 'django'),</div>
<div><span style="white-space: pre;"> </span>os.path.join(SDK_PATH, 'lib', 'ipaddr'),</div>
<div>os.path.join(SDK_PATH, 'lib', 'webob'),</div>
<div>os.path.join(SDK_PATH, 'lib', 'yaml', 'lib'),</div>
<div>]</div>
</blockquote>
<div>Ma to być poprawione w nowej wersji helpera r102 ale ja jej jeszcze nie znalazłem a z svn nie chciałem pobierać. Chętnych zapraszam</div>
<blockquote><p>s<span style="font-family: monospace; line-height: normal;">vn checkout http://google-app-engine-django.googlecode.com/svn/trunk/ google-app-engine-django-read-only<span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px;"> </span></span></p></blockquote>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.michalklich.com/2010/02/17/poprawiamy-google-app-engine-helper-for-django/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jak dołączyć %changelog, %post_install i %post_uninstall do pliku spec używając distutils i setup.py</title>
		<link>http://www.michalklich.com/2010/02/17/jak-dolaczyc-changelog-post_install-i-post_uninstall-do-pliku-spec-uzywajac-distutils-i-setup-py/</link>
		<comments>http://www.michalklich.com/2010/02/17/jak-dolaczyc-changelog-post_install-i-post_uninstall-do-pliku-spec-uzywajac-distutils-i-setup-py/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 07:00:38 +0000</pubDate>
		<dc:creator>Klich Michał</dc:creator>
				<category><![CDATA[fedora]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[distutils]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[rpm]]></category>
		<category><![CDATA[setup.py]]></category>

		<guid isPermaLink="false">http://www.michalklich.com/?p=672</guid>
		<description><![CDATA[Ostatnimi czasy moją głowę zaprzątał problem stworzenia paczki rpm dla mojego programu SynapticsConfig. Długo walczyłem z jednego powodu, chciałem użyć distutils a nie ręcznie tworzyć plik spec. Poniżej przytoczę problemy z którymi się borykałem oraz rozwiązania tych problemów. Wg. mnie dokumentacja distutils i pythona dotycząca zagadnień które poruszam jest dosyć skromna i wszelkie próby znalezienia [...]]]></description>
			<content:encoded><![CDATA[<p>Ostatnimi czasy moją głowę zaprzątał problem stworzenia paczki rpm dla mojego programu SynapticsConfig. Długo walczyłem z jednego powodu, chciałem użyć distutils a nie ręcznie tworzyć plik spec. Poniżej przytoczę problemy z którymi się borykałem oraz rozwiązania tych problemów. Wg. mnie dokumentacja distutils i pythona dotycząca zagadnień które poruszam jest dosyć skromna i wszelkie próby znalezienia rozwiązania dawały mierne wyniki. Całe szczęście mamy listy dyskusyjne oraz od źródłowy (fuck you propietary software!).</p>
<p><span id="more-672"></span></p>
<ol>
<li>Dołączanie %changelog</li>
<p>Część pliku spec odpowiedzialna za changelog jest wymagana, tak przynajmniej uważa rpmlint oraz tak stoi w dokumentacji Fedory. W <a href="http://docs.python.org/distutils/setupscript.html">dokumentacji distutils</a> nie ma zbyt wielu informacji na ten temat. Jednak naprowadziła mnie ona na proste rozwiązanie a mianowicie</p>
<pre>python setup.py bdist_rpm --help</pre>
<p>Komenda wyświetla dokładnie to czego potrzeba czyli</p>
<pre>--changelog          RPM changelog</pre>
<p>To mogłoby załatwić sprawę gdyby nie brak informacji w jakiej postaci ma być changelog. Wszystko wskazuje, że to powinien być plik jednak <a href="http://fedoraproject.org/wiki/Packaging:Guidelines#Changelogs">domyślne formatowanie</a> nie spełniało wymagań i ładnie wypluwało komunikat, że wiersz musi zaczynać się od &#8220;*&#8221;. Postanowiłem zerknąć do pliku odpowiedzialnego za generowanie paczek rpm /usr/lib64/python2.6/distutils/command/bdist_rpm.py. Na początku pliku wśród listy opcji pojawia się taki tekst</p>
<blockquote><p># More meta-data: too RPM-specific to put in the setup script,<br />
# but needs to go in the .spec file &#8212; so we make these options<br />
# to &#8220;bdist_rpm&#8221;.  The idea is that packagers would put this<br />
# info in setup.cfg, although they are of course free to<br />
# supply it on the command line.</p></blockquote>
<p>No ładnie ale ja z lini poleceń nie mogłem dołączyć changelog więc z pomocą przyszedł plik <a href="http://docs.python.org/distutils/configfile.html">setup.cfg</a>. Do pustego pliku dodałem linijkę</p>
<blockquote><p>[bdist_rpm]<br />
changelog = #tutaj tekst changelog oczywiście zaczynający się od *</p></blockquote>
<p>Należy pamiętać o gwiazdce ropoczynającej każdą wersję oraz o poprawnym formacie daty. Rpm jest bardzo wymagający w tym temacie. Tak przygotowany changelog powinen przejść proces budowania paczki.</p>
<li>Dodawanie %post_install i %post_uninstall</li>
<p>Kolejne rzeczy, które musiałem skonfigurować to sekcje kodu uruchamiane po zainstalowaniu paczki i jej odinstalowaniu. Wspomniany wcześniej bdist_rpm &#8211;help tak opisuje to</p>
<blockquote>
<div id="_mcePaste">&#8211;post-install       Specify a script for the post-INSTALL phase of RPM</div>
<div id="_mcePaste">building</div>
<div id="_mcePaste">&#8211;post-uninstall     Specify a script for the post-UNINSTALL phase of RPM</div>
<div id="_mcePaste">building</div>
</blockquote>
<p>W tym wypadku jednak nie używałem linii poleceń ani pliku setup.cfg. Te dwie opcje pozwoliły sie zgrabnie dołączyć do pliku setup.py jako argument funkcji setup</p>
<pre>options={'bdist_rpm' : {'post_install'  : 'ścieżka_do_pliku', 'post_uninstall'  : 'ścieżka_do_pliku'}}</pre>
<p>Bardzo możliwe, że zamiast podawania ścieżek do istniejących plików można wsadzić komendy. W wypadku skryptów mających parę linijek może pojawić się problem, ale nie testowałem.</ol>
<div>Mam nadzieję, że przybliżyło to co niektórych do stworzenia własnej paczki rpm przy użyciu distutils. To dlaczego wybrałem %post_install i %post_uninstall zostało podyktowane sposobem uruchamiania mojego programu i niemożliwością (spodowoaną może brakiem wystarczającej wiedzy) dodania linka do pliku w paczce rpm. Z wielką chęcią przyjmę wszelkie uwagi lub sugestie.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.michalklich.com/2010/02/17/jak-dolaczyc-changelog-post_install-i-post_uninstall-do-pliku-spec-uzywajac-distutils-i-setup-py/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>W jednym domu stali Emacs, xdebug, httpd i SElinux</title>
		<link>http://www.michalklich.com/2010/01/17/w-jednym-domu-stali-emacs-xdebug-httpd-i-selinux/</link>
		<comments>http://www.michalklich.com/2010/01/17/w-jednym-domu-stali-emacs-xdebug-httpd-i-selinux/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 15:44:49 +0000</pubDate>
		<dc:creator>Klich Michał</dc:creator>
				<category><![CDATA[open source]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[httpd]]></category>
		<category><![CDATA[selinux]]></category>
		<category><![CDATA[xdebug]]></category>

		<guid isPermaLink="false">http://www.michalklich.com/?p=657</guid>
		<description><![CDATA[Tak się dziwnie złożyło, że w pracy złożono mi propozycję grzebania w php. Jako zapalony użytkownik emacsa wiedziałem, że jest możliwość zaprzęgnięcia do pracy emacsa. Nawet wiedziałem, że da się debugować kod php w przyjemniejszy sposób niż var_dump().
Z pomocą przychodzi xdebug, który został mi polecony przez Matlasa. Instalację xdebuga pominę bo jest prosta jak drut [...]]]></description>
			<content:encoded><![CDATA[<p>Tak się dziwnie złożyło, że w pracy złożono mi propozycję grzebania w php. Jako zapalony użytkownik emacsa wiedziałem, że jest możliwość zaprzęgnięcia do pracy emacsa. Nawet wiedziałem, że da się debugować kod php w przyjemniejszy sposób niż var_dump().</p>
<p>Z pomocą przychodzi xdebug, który został mi polecony przez <a href="http://matlas.obsysa.net/">Matlasa</a>. Instalację xdebuga pominę bo jest prosta jak drut i można ją znaleźć w <a href="http://xdebug.org/docs/install">dokumentacji</a>. Najważniejsza i najtrudniejsza rzecz to konfiguracja emacsa (jak zawsze zresztą).</p>
<p>A więc zaczynamy od instalacji <a href="http://code.google.com/p/geben-on-emacs/">GEBEN`a</a>, następnie instalujemy <a href="http://cedet.sourceforge.net/">CEDET</a>, otwieramy port 9000 na firewallu. Tak wyposażeni możemy zacząć debugowanie. Ale szczerze mówiąc nie piszę tego posta aby opisać jak skonfigurować emacsa do tego (chyba, że ktoś sobie zażyczy). Powodem dla którego piszę ten post jest SElinux, który blokuje port 9000 dla apache, oczywiście tylko jeśli mamy serwer lokalnie na komputerze.  Poniżej wybrane informacje z raportu SELinux.</p>
<blockquote><p>Summary:</p>
<p>SELinux is preventing /usr/sbin/httpd from connecting to port 9000.</p>
<p>Allowing Access:</p>
<p>If you want to allow httpd to connect to 9000, you can execute<br />
semanage port -a -t PORT_TYPE -p tcp 9000<br />
where PORT_TYPE is one of the following: http_port_t, ldap_port_t, dns_port_t,<br />
mysqld_port_t, ocsp_port_t, postgresql_port_t, kerberos_port_t.</p></blockquote>
<p>Rozwiązanie jest proste a mianowicie</p>
<blockquote><p>semanage port -a -t http_port_t -p tcp 9000</p></blockquote>
<p>Restart apache`a. Koniec.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michalklich.com/2010/01/17/w-jednym-domu-stali-emacs-xdebug-httpd-i-selinux/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Jak odpalić komputer bez monitora.</title>
		<link>http://www.michalklich.com/2010/01/10/jak-odpalic-komputer-bez-monitora/</link>
		<comments>http://www.michalklich.com/2010/01/10/jak-odpalic-komputer-bez-monitora/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 14:21:34 +0000</pubDate>
		<dc:creator>Klich Michał</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[humor]]></category>
		<category><![CDATA[hardware]]></category>

		<guid isPermaLink="false">http://www.michalklich.com/?p=649</guid>
		<description><![CDATA[Od pewnego czasu miałem w domu stary komputer, który dostałem w spadku. Wiadomo, że linux wejdzie wszędzie i tak się stało. Jednak pojawił się problem z biosem, który jest mądrzejszy ode mnie i nie pozwalał uruchamiać komputera bez monitora.
Po krótkim poszukiwaniu w internecie jak to zrobić trafiłem na dobry przepis.
http://www.monowall.procad.sk/boot_without_monitor.php
Wziąłem od brata trzy oporniki 68 [...]]]></description>
			<content:encoded><![CDATA[<p>Od pewnego czasu miałem w domu stary komputer, który dostałem w spadku. Wiadomo, że linux wejdzie wszędzie i tak się stało. Jednak pojawił się problem z biosem, który jest mądrzejszy ode mnie i nie pozwalał uruchamiać komputera bez monitora.<br />
Po krótkim poszukiwaniu w internecie jak to zrobić trafiłem na dobry przepis.<br />
<a href="http://www.monowall.procad.sk/boot_without_monitor.php">http://www.monowall.procad.sk/boot_without_monitor.php</a><br />
Wziąłem od brata trzy oporniki 68 ohm i razem wpakowaliśmy je w odpowiednie wejścia w porcie d-sub karty graficznej.<br />
Komputer po  wciśnięciu przycisku zasliania powitał nas miłym piknięciem.<br />
A potem ssh i żyli długo i szczęśliwie.</p>
<p><a href="http://www.michalklich.com/wp-content/uploads/2010/01/IMG_9343.jpg"><img src="http://www.michalklich.com/wp-content/uploads/2010/01/IMG_9343-300x225.jpg" alt="" title="Hack" width="300" height="225" class="aligncenter size-medium wp-image-653" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.michalklich.com/2010/01/10/jak-odpalic-komputer-bez-monitora/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Nowy firmware dla b43</title>
		<link>http://www.michalklich.com/2009/12/27/nowy-firmware-dla-b43/</link>
		<comments>http://www.michalklich.com/2009/12/27/nowy-firmware-dla-b43/#comments</comments>
		<pubDate>Sun, 27 Dec 2009 12:50:25 +0000</pubDate>
		<dc:creator>Klich Michał</dc:creator>
				<category><![CDATA[fedora]]></category>
		<category><![CDATA[laptop]]></category>
		<category><![CDATA[b43]]></category>
		<category><![CDATA[b43-fwcutter]]></category>
		<category><![CDATA[wifi]]></category>

		<guid isPermaLink="false">http://www.michalklich.com/?p=645</guid>
		<description><![CDATA[Od dłuższego czasu, zakładam tak ponieważ rzadko zerkam do komunikatów dmesg, jest dostępny nowy firmware dla kart używający modułu b43. Odkryłem to całkowicie przypadkowo kiedy odpaliłem wymieniony wcześniej dmesg ponieważ zacząłem miewać problemy z połączeniem wifi.
Zobaczyłem taki komunikat.

b43-phy0: Loading firmware version 351.126 (2006-07-29 05:54:02)
b43-phy0 warning: You are using an old firmware image. Support for old [...]]]></description>
			<content:encoded><![CDATA[<p>Od dłuższego czasu, zakładam tak ponieważ rzadko zerkam do komunikatów dmesg, jest dostępny nowy firmware dla kart używający modułu b43. Odkryłem to całkowicie przypadkowo kiedy odpaliłem wymieniony wcześniej dmesg ponieważ zacząłem miewać problemy z połączeniem wifi.</p>
<p>Zobaczyłem taki komunikat.</p>
<blockquote>
<div id="_mcePaste">b43-phy0: Loading firmware version 351.126 (2006-07-29 05:54:02)</div>
<div id="_mcePaste">b43-phy0 warning: You are using an old firmware image. Support for old firmware will be removed soon (official deadline was July 2008).</div>
<div id="_mcePaste">b43-phy0 warning: You must go to http://wireless.kernel.org/en/users/Drivers/b43#devicefirmware and download the correct firmware for this driver version. Please carefully read all instructions on this website.</div>
</blockquote>
<div>Nie zastanawiając się zbyt długo, przyznaję się do potrzeby posiadania najnowszych wersji wszystkiego, otworzyłem wskazaną stronę <a href="http://wireless.kernel.org/en/users/Drivers/b43#devicefirmware">http://wireless.kernel.org/en/users/Drivers/b43#devicefirmware</a> i postąpiłem jak tam napisano. A dokładniej to</div>
<blockquote>
<pre style="background-color: #f3f5f7; font-family: courier, monospace; white-space: pre-wrap; word-wrap: break-word; padding: 5pt; border: 1pt solid #aebdcc;">git clone http://git.bu3sch.de/git/b43-tools.git
cd b43-tools/fwcutter
make
cd ..</pre>
</blockquote>
<div>A potem:</div>
<blockquote>
<pre style="background-color: #f3f5f7; font-family: courier, monospace; white-space: pre-wrap; word-wrap: break-word; padding: 5pt; border: 1pt solid #aebdcc;">export FIRMWARE_INSTALL_DIR="/lib/firmware"
wget http://downloads.openwrt.org/sources/broadcom-wl-4.178.10.4.tar.bz2
tar xjf broadcom-wl-4.178.10.4.tar.bz2
cd broadcom-wl-4.178.10.4/linux
sudo ../../fwcutter/b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" wl_apsta.o</pre>
</blockquote>
<p>Po tej operacji dmesg pokazuje komunikat który mnie się bardzo podoba.</p>
<blockquote><p>Broadcom 43xx driver loaded [ Features: PML, Firmware-ID: FW13 ]<br />
b43 ssb0:0: firmware: requesting b43/ucode13.fw<br />
b43 ssb0:0: firmware: requesting b43/b0g0initvals13.fw<br />
b43-phy1: Loading firmware version 478.104 (2008-07-01 00:50:23)</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.michalklich.com/2009/12/27/nowy-firmware-dla-b43/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>F12 i padający preupgrade</title>
		<link>http://www.michalklich.com/2009/11/20/f12-i-padajacy-preupgrade/</link>
		<comments>http://www.michalklich.com/2009/11/20/f12-i-padajacy-preupgrade/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 11:22:24 +0000</pubDate>
		<dc:creator>Klich Michał</dc:creator>
				<category><![CDATA[fedora]]></category>
		<category><![CDATA[f12]]></category>
		<category><![CDATA[preupgrade]]></category>
		<category><![CDATA[upgrade]]></category>

		<guid isPermaLink="false">http://www.michalklich.com/?p=639</guid>
		<description><![CDATA[

Z pewnością wielu z nas ( leni używających preupgrade) boryka się w tej chwili z problemem
AttributeError: &#8216;NoneType&#8217; object has no attribute &#8216;opts&#8217;
Problemem tutaj jest brak miejsca na partycji boot i zwiększenie wolnego miejsca jest podawane jako rozwiązanie problemu. Śmieszne jest to, że podobno sam Red Hat zalecał tworzenie małej partycji /boot. Nieważne. Przechodzimy do rozwiązania.
Najpierw [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: 'Times New Roman'; line-height: normal; font-size: small;"></p>
<div style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font: normal normal normal 13px/19px Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; background-position: initial initial; background-repeat: initial initial; padding: 0.6em; margin: 0px;">
<p>Z pewnością wielu z nas ( leni używających preupgrade) boryka się w tej chwili z problemem</p>
<blockquote><p>AttributeError: &#8216;NoneType&#8217; object has no attribute &#8216;opts&#8217;</p></blockquote>
<p>Problemem tutaj jest brak miejsca na partycji boot i zwiększenie wolnego miejsca jest podawane jako rozwiązanie problemu. Śmieszne jest to, że podobno sam Red Hat zalecał tworzenie małej partycji /boot. Nieważne. Przechodzimy do rozwiązania.</p>
<p><span id="more-639"></span>Najpierw należy się upewnić o ilości wolnego miejsca na partycji /boot, wg. moich doświadczeń winno go być ok.28mb.</p>
<blockquote><p>df -h /boot</p></blockquote>
<p>Przed wszelkimi próbami naprawy  zalecamy usunięcie wszystkim plików meta pobranych przez preupgrade poleceniem</p>
<p><span style="font-family: 'DejaVu Sans', 'Liberation Sans', sans-serif; line-height: normal; font-size: small; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "> </span></p>
<blockquote><p>rm -rf /var/cache/yum/preupgrade*</p></blockquote>
<p>Są dwie metody rozwiązania problemu, pierwsza to powiększenie partycji /boot o sektory zarezerwowane na wypadek gdyby zabrakło systemowi miejsca i uniemożliwiało to odpalenie, druga metoda to zmuszenie instalatora do pobrania pakietów w czasie instalacji (wymagane do tego jest połączenie kablowe).</p>
<h4>Pierwsza metoda</h4>
<p>Ja spróbowałem najpierw pierwszej po czym okazało się, że brakuje mi 1mb(!). Cóż za ironia bo na /home leży odłogiem 100gb. Ale przejdźmy do rzeczy. Upewniamy się adres partycji.</p>
<blockquote><p>mount | grep &#8220;/boot&#8221;</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 262px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">/dev/sda1 on /boot type ext3 (rw)/dev/sda1 on /boot type ext3 (rw)</div>
<div>
<div>/dev/sda1 on /boot type ext3 (rw)</div>
</div>
</blockquote>
<div>Następnie odpalamy polecenie tune2fs, oczywiście jako root.</div>
<blockquote>
<div>tune2fs -r 0 /dev/sda1</div>
</blockquote>
<div>Po czym próbujemy jeszcze raz preupgrade i podczas rebootowania do instalatora trzymamy kciuki aby starczyło miejsca.</div>
<h4>Druga metoda</h4>
<p>Zmuszamy preupgrade do pobrania instalatora podczas upgrade, robimy to tworząc plik o dosyć dużym rozmiarze. Tutaj jest to plik o rozmiarze 60mb. Można to zmienić bawiąc się parametrem <em>count</em>.</p>
<blockquote><p>dd if=/dev/zero of=/boot/preupgrade_filler bs=1024 count=61440</p></blockquote>
<p>Następnie odpalamy preupgrade i klikamy continue przy pytaniu o kontynuowanie instalacji ze zbyt małą ilością miejsca. Kolejny krok to usunięcie pliku /boot/preupgrade_filler po zakończeniu pobierania pakietów tuż przed rebootem. Voila!</p></div>
<p></span></p>
<p>Więcej informacji: <a href="https://bugzilla.redhat.com/show_bug.cgi?id=538118">https://bugzilla.redhat.com/show_bug.cgi?id=538118</a>, <a href="http://fedoraproject.org/wiki/PreUpgrade#Not_enough_space_in_.2Fboot">http://fedoraproject.org/wiki/PreUpgrade#Not_enough_space_in_.2Fboot</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michalklich.com/2009/11/20/f12-i-padajacy-preupgrade/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Fedora 12</title>
		<link>http://www.michalklich.com/2009/11/17/fedora-12/</link>
		<comments>http://www.michalklich.com/2009/11/17/fedora-12/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 21:16:41 +0000</pubDate>
		<dc:creator>Klich Michał</dc:creator>
				<category><![CDATA[fedora]]></category>
		<category><![CDATA[fedora 12]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://www.michalklich.com/?p=637</guid>
		<description><![CDATA[Jest nowa Fedora, oczekiwana, wypieszczona.
Jak zawsze można ją pobrać ze strony http://fedoraproject.org/pl/get-fedora
Ja niestety nie mam dzisiaj czasu aby aktualizować ale na pewno zrobię to w ten weekend.
Polecam wszystkim.
]]></description>
			<content:encoded><![CDATA[<p>Jest nowa Fedora, oczekiwana, wypieszczona.<br />
Jak zawsze można ją pobrać ze strony <a href="http://fedoraproject.org/pl/get-fedora">http://fedoraproject.org/pl/get-fedora</a><br />
Ja niestety nie mam dzisiaj czasu aby aktualizować ale na pewno zrobię to w ten weekend.</p>
<p>Polecam wszystkim.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michalklich.com/2009/11/17/fedora-12/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Odpicuj backintime</title>
		<link>http://www.michalklich.com/2009/08/17/odpicuj-backintime/</link>
		<comments>http://www.michalklich.com/2009/08/17/odpicuj-backintime/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 10:00:54 +0000</pubDate>
		<dc:creator>Klich Michał</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.michalklich.com/?p=630</guid>
		<description><![CDATA[Jak wiadomo istnieją dwie grupy użytkowników, pierwsza robi kopie zapasowe a druga zacznie je robić. Ja przeszedłem do pierwszej i po dosyć długich poszukiwaniach znalazłem ciekawy program back-in-time, który załatwia za mnie tworzenie kopii zapasowych. Prosty i łatwy w obsłudze, idealnie nadaje się na desktopy. Jego jedyną wadą wg. mnie jest brak pakowania tworzonych katalogów [...]]]></description>
			<content:encoded><![CDATA[<p>Jak wiadomo istnieją dwie grupy użytkowników, pierwsza robi kopie zapasowe a druga zacznie je robić. Ja przeszedłem do pierwszej i po dosyć długich poszukiwaniach znalazłem ciekawy program <a href="http://backintime.le-web.org/">back-in-time</a>, który załatwia za mnie tworzenie kopii zapasowych. Prosty i łatwy w obsłudze, idealnie nadaje się na desktopy. Jego jedyną wadą wg. mnie jest brak pakowania tworzonych katalogów z kopiami dlatego napisałem mały skrypt w pythonie, który załatwia to za mnie.</p>
<p>Jako argument bierze ścieżkę do katalogu w którym foldery musi spakować i po kolei pakuje do plików tar.bz2. Polecam dodanie do crontaba użytkownika root tak jak back-in-time.</p>
<p><a href="http://www.michalklich.com/wp-content/uploads/2009/08/backintime-helper.py">Kod do pobrania</a>, oczywiście dostępny na licencji GPLv3.</p>
<div class="jLanguage">
<ul>
<li><a href="?lan=english"><img alt="english" src="http://www.michalklich.com/wp-content/plugins/jLanguage/icons/en.png" /></a></li>
<li><a href="?lan=polish"><img alt="polish" src="http://www.michalklich.com/wp-content/plugins/jLanguage/icons/pl.png" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.michalklich.com/2009/08/17/odpicuj-backintime/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Jak tłumaczyć łatwo w PyQt4 aplikacje</title>
		<link>http://www.michalklich.com/2009/08/09/jak-tlumaczyc-latwo-w-pyqt4-aplikacje/</link>
		<comments>http://www.michalklich.com/2009/08/09/jak-tlumaczyc-latwo-w-pyqt4-aplikacje/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 20:29:06 +0000</pubDate>
		<dc:creator>Klich Michał</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[PyQt4]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tłumaczenie]]></category>

		<guid isPermaLink="false">http://www.michalklich.com/?p=586</guid>
		<description><![CDATA[Interesuję się od pewnego czasu pythonem a od niedawna PyQt4. Dokumentacja jest naprawdę dobre zrobiona, co prawda nie jest to msdn ale jest dobrze. Postanowiłem się zabrać za tłumaczenie aplikacji przy użyciu właśnie PyQt4, może lepiej napisać Qt4. Nie potrafiłem znaleźć nic pomocnego w internecie więc zabrałem sie za czytanie książek i teraz wiem i [...]]]></description>
			<content:encoded><![CDATA[<p>Interesuję się od pewnego czasu pythonem a od niedawna PyQt4. Dokumentacja jest naprawdę dobre zrobiona, co prawda nie jest to msdn ale jest dobrze. Postanowiłem się zabrać za tłumaczenie aplikacji przy użyciu właśnie PyQt4, może lepiej napisać Qt4. Nie potrafiłem znaleźć nic pomocnego w internecie więc zabrałem sie za czytanie książek i teraz wiem i mam zamiar się podzielić z ludźmi którzy mają taki sam problem jaki miałem ja: brak przykładów i jasnych instrukcji jak użyć funkcji <em>tr()</em> i <em>translate()</em>.</p>
<p><span id="more-586"></span></p>
<p>Załóżmy, że posiadasz mały formularz stworzony w QtDesigner i dopisałeś do tego trochę swojego kodu.</p>
<pre>from PyQt4 import QtCore, QtGui
import sys
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(365, 222)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtGui.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(110, 70, 114, 27))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "Click", None, QtGui.QApplication.UnicodeUTF8))
class MyForm(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = MyForm()
    myapp.show()
    sys.exit(app.exec_())</pre>
<p>Powyższy kod powstał już po edycji pliku z QTDesignera, do pliku wynikowego przetworzonego w pyuic4 dorzuciłem dwa dodatkowe bloki kodu. Inicjalizację formatki oraz klasę MyForm. Teraz ten plik zawiera całość kodu, który otwiera mini formatkę z jednym przyciskiem nad czym będziemy pracować. Pozwolę sobie omijać fragmenty kodu i podawać tylko istotne zmiany. Wiem, że w wypadku częstych zmian formatki lepiej jest ją trzymać w osobnym pliku i importować ale na potrzeby tego tutoriala jest to jeden plik.</p>
<p>Do pliku dodajemy kod podpinający sygnał <em>clicked()</em> do naszego przycisku i wykonujący stworzoną przez nas akcję. Dodajemy to do klasy MyForm.</p>
<pre>QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"), self.MessageBox)</pre>
<p>Następnie piszemy funkcję MessageBox która wyświetli okienko potwierdzające, że akcja została wykonana.</p>
<pre>def MessageBox(self):
    box = QtGui.QMessageBox(self)
    box.setWindowTitle(self.tr("information"))
    box.setText(self.tr("You have clicked button"))
    box.setStandardButtons(QtGui.QMessageBox.Ok)
    box.exec_()</pre>
<p>Ten plik po uruchomieniu wyświetli okno z jednym przyciskiem po kliknięciu którego wyświetli się messagebox. Teraz zabierzemy się za tłumaczenie programu. Przechodzimy do sedna.</p>
<p>Wymienione przeze mnie funkcje odpowiadają za tworzenie plików .ts do tłumaczeń. Konwencja używania funkcji jest następująca, <em>translate()</em> używane jest dla tekstów będących poza klasami (<em>QTDesigner</em> wszystko wsadza do funkcji <em>translate()</em>, funkcja wymaga podnia kontekstu w jakim znajduje sie łańcuch), funkcja <em>tr()</em> jest dla wszelkich łańcuchów będących w środku klas a <em>trUtf8()</em> dla łańcuchów UTF8. Proste jak drut a przykłady użycia są w kodzie.</p>
<p>Następnym krokiem jest zmodyfikowanie aplikacji aby ładowała tłumaczenie automatycznie na podstawie zmiennej &amp;LANG. Dodajemy kod do funkcji inicjalizującej (jako, że nie jestem pewny o czym piszę to mam na myśli <em>if __name__ == &#8220;__main__&#8221;:</em>)</p>
<pre>locale = QtCore.QLocale.system().name()
appTranslator = QtCore.QTranslator()
if appTranslator.load("okno_ui_" + locale):
    app.installTranslator(appTranslator)</pre>
<p>Dzięki temu program będzie uruchamiał odpowiednie tłumaczenie, jeśli plik z tłumaczeniem nie zostanie odnaleziony zostanie załadowany domyślny język(w tym wypadku angielski gdyż taki został użyty w kodzie). Dla języka polskiego program będzie próbował załadować tłumaczenie z pliku okno_ui_pl_PL.qm. Nie jest konieczne dodawanie rozszerzenia .qm. Takich plików jeszcze nie mamy, najpierw należy stworzyć plik .pro zawierający wszelkie pliki .ui, .py, .pyw oraz .ts (co ładnie rozwija się w <em>translation source</em>). Ja zazwyczaj nie dodaję plików .ui z powodu tego, że formularze przerabiam potem troszkę na własną rękę poprawiając kod i później mam zamieszanie w pliku .ts. Trudno mi powiedzieć czy jest to dobra czy zła praktyka, mam zbyt małe doświadczenie. <span style="text-decoration: underline;">Drobne uaktualnienie odnośnie dodawania plików .ui, w tej chwili jednak wolę trzymać formularz stworzony w QtDesigner w osobnym pliku, przyspiesza to dokonywanie zmian. Jednak dla potrzeb tego poradnika jest to wsadzone do jednego pliku, mniej plików = mniejsze zamieszanie.</span> Oto plik .pro.</p>
<pre>SOURCES = okno_ui.py
TRANSLATIONS = okno_ui_pl_PL.ts</pre>
<p>W wypadku dodawania plików .ui potrzebna jest linijka FORMS =. Następnie wykonujemy polecenie <em>pylupdate4</em> a jako argument podajemy stworzony plik .pro i otrzymujemy gotowy plik .ts który mozna przetłumaczyć. Tłumaczenia robimy w programie QtLinguist, a gotowe pliki .ts przetwarzamy programem <em>lrelease-qt4</em> który tworzy nam pliki .qm. Koniec pracy. Jeśli w katalogu aplikacji znajdzie się plik .qm dla odpowiedniego języka systemowego to tłumaczenie zostanie załadowane w innym wypadku program otworzy się  w języku angielskim.</p>
<p>W wypadku jeśli chcemy dołożyć tłumaczenie nalęzy po prostu dodać odpowiedni plik .ts do posiadanego pliku .pro i ponownie uruchomić <em>pylupdate4, </em>QtDesigner<em>, lrelease-qt4</em> i tak w koło Macieju.</p>
<p>Dziękuję za uwagę.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michalklich.com/2009/08/09/jak-tlumaczyc-latwo-w-pyqt4-aplikacje/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
