<?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>Skyman.pl</title>
	<atom:link href="http://skyman.pl/feed/" rel="self" type="application/rss+xml" />
	<link>http://skyman.pl</link>
	<description>Gentoo, web, android, programowanie...</description>
	<lastBuildDate>Sat, 06 Mar 2010 00:51:32 +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>Autobuser v1.0</title>
		<link>http://skyman.pl/2010/03/06/autobuser-v1-0/</link>
		<comments>http://skyman.pl/2010/03/06/autobuser-v1-0/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 00:51:32 +0000</pubDate>
		<dc:creator>skyman</dc:creator>
				<category><![CDATA[Bez kategorii]]></category>

		<guid isPermaLink="false">http://skyman.pl/?p=175</guid>
		<description><![CDATA[Dzięki nieocenionej pomocy beta-testerów w osobach:  Artur, Krzysiek, Michał, Thomas, b3wolf, bebe, programmer5, Mrówa, WoofeR, glock45, pablo
W Markecie pojawiła się przed chwilą najnowsza wersja, a w niej:

Wyszukiwanie w QuickSearchBox (tylko w Android &#62;= 1.6) przyciskiem wyszukiwania można znaleźć rozkład lub połączenie (zacznij frazę wyszukiwania od &#8220;z&#8221; lub &#8220;do&#8221;)
Lepsza obsługa bazy danych (nie zauważono Foce Close&#8217;ów)
Nowy [...]]]></description>
			<content:encoded><![CDATA[<p>Dzięki nieocenionej pomocy beta-testerów w osobach:  Artur, Krzysiek, Michał, Thomas, b3wolf, bebe, programmer5, Mrówa, WoofeR, glock45, pablo</p>
<p>W Markecie pojawiła się przed chwilą najnowsza wersja, a w niej:</p>
<ul>
<li>Wyszukiwanie w QuickSearchBox (tylko w Android &gt;= 1.6) przyciskiem wyszukiwania można znaleźć rozkład lub połączenie (zacznij frazę wyszukiwania od &#8220;z&#8221; lub &#8220;do&#8221;)</li>
<li>Lepsza obsługa bazy danych (nie zauważono Foce Close&#8217;ów)</li>
<li>Nowy widget</li>
<li>Lekkie przyspieszenie</li>
</ul>
<p>W ostatnim momencie zauważyłem problemy z szybkością synchronizowania listy przystanków i linii. Może ktoś ma pomysł jak szybko można dodać do bazy danych &gt;2000 rekordów (tyle jest zespołów przystanków i linii w Warszawie)?</p>
]]></content:encoded>
			<wfw:commentRss>http://skyman.pl/2010/03/06/autobuser-v1-0/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Wezwanie do testów!</title>
		<link>http://skyman.pl/2010/02/28/wezwanie-do-testow/</link>
		<comments>http://skyman.pl/2010/02/28/wezwanie-do-testow/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 13:40:06 +0000</pubDate>
		<dc:creator>skyman</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[autobuserdlaandroida]]></category>
		<category><![CDATA[autobuser]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://skyman.pl/?p=170</guid>
		<description><![CDATA[Szukam chętnych do testowania Autobusera.
Aktualna wersja ma sporo poprawek, zmienioną obsługę bazy danych, nowy widget (niewygledny, ale pracuję nad tym  , obsługę &#8220;literek&#8221; przy rozkładach, poprawioną obsługę pobierania danych.
Wszystkich którzy są zainteresowani testowaniem, również tych, którzy już testowali Autobusera (mam straszny bałagan w kontaktach) proszę o dodanie komentarza to tego wpisu podając prawidowy email [...]]]></description>
			<content:encoded><![CDATA[<p>Szukam chętnych do testowania Autobusera.</p>
<p>Aktualna wersja ma sporo poprawek, zmienioną obsługę bazy danych, nowy widget (niewygledny, ale pracuję nad tym <img src='http://skyman.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> , obsługę &#8220;literek&#8221; przy rozkładach, poprawioną obsługę pobierania danych.</p>
<p>Wszystkich którzy są zainteresowani testowaniem, również tych, którzy już testowali Autobusera (mam straszny bałagan w kontaktach) proszę o dodanie komentarza to tego wpisu podając prawidowy email (nie zostanie upubliczniony), nickname który mam dopisać w podziękowaniach ;] i model(e) telefonu wraz z wersją systemu na którym odbędą się testy.</p>
<p><strong>Edit 2010/03/05</strong></p>
<p>Dziękuje wszystkim za pomoc!</p>
<p>Zgłosiło się kilkanaście osób (niektórzy uparcie wysyłali mejle <img src='http://skyman.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  i jak na razie mam testerów z prawie wszystkimi modelami telefonów, brakuje mi tylko kogoś z LG albo Acerem (już się pojawił na Allegro). Od tej chwili nie będę już akceptował wpisów &#8220;powtórkowych&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://skyman.pl/2010/02/28/wezwanie-do-testow/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Autobuser v0.9.6-r3</title>
		<link>http://skyman.pl/2009/10/16/autobuser-v0-9-6-r3/</link>
		<comments>http://skyman.pl/2009/10/16/autobuser-v0-9-6-r3/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 18:10:36 +0000</pubDate>
		<dc:creator>skyman</dc:creator>
				<category><![CDATA[Bez kategorii]]></category>

		<guid isPermaLink="false">http://skyman.pl/?p=164</guid>
		<description><![CDATA[Przed chwilą w Markecie pojawiła się najnowsza wersja, która jeśli znów czegoś nie zepsułem będzie prawdopodobnie ostatnią wersją dla Androida 1.6
Poprawiłem kilka drobnych bugów, między innymi &#8220;wywałkę&#8221; w momencie, gdy parametr &#8220;Szybki odjazd za&#8221; miał nieoczekiwaną wartość.
Nie poprawiłem obsługi timeoutów przy pobieraniu informacji z sieci &#8211; wygląda na to, że java.net.HttpURLConnection nieprawidłowo reaguje na ustawianie [...]]]></description>
			<content:encoded><![CDATA[<p>Przed chwilą w Markecie pojawiła się najnowsza wersja, która jeśli znów czegoś nie zepsułem będzie prawdopodobnie ostatnią wersją dla Androida 1.6</p>
<p>Poprawiłem kilka drobnych bugów, między innymi &#8220;wywałkę&#8221; w momencie, gdy parametr &#8220;Szybki odjazd za&#8221; miał nieoczekiwaną wartość.</p>
<p>Nie poprawiłem obsługi timeoutów przy pobieraniu informacji z sieci &#8211; wygląda na to, że java.net.HttpURLConnection nieprawidłowo reaguje na ustawianie timeoutów i wszystko trzeba będzie przepisać na org.apache.http.client.HttpClient.</p>
<p>W następnej wersji poza dobrze działającymi timeoutami należy się spodziewać Autobusera w globalnej wyszukiwarce (GlobalSearch).</p>
<p>Po kliknięciu przycisku wyszukiwania (lupa) będzie można wpisać nazwę zespołu (automatyczne podpowiadanie powinno działać tak samo jak w samym Autobuserze) lub frazę np. &#8220;do Pl.Politechniki&#8221;, &#8220;z Centrum&#8221;, &#8220;centrum do Babcia&#8221; itp.</p>
<p><strong>Do niecierpliwych:</strong> Pojawienie się oprogramowania 1.6 (wgranego ręcznie lub przez OTA) nie oznacza, że przedstawiona funkcja będzie działać <img src='http://skyman.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Musicie mi dać trochę czasu&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://skyman.pl/2009/10/16/autobuser-v0-9-6-r3/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>AsRock ION330, Gentoo i XBMC</title>
		<link>http://skyman.pl/2009/10/10/asrock-ion330-gentoo-i-xbmc/</link>
		<comments>http://skyman.pl/2009/10/10/asrock-ion330-gentoo-i-xbmc/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 13:07:57 +0000</pubDate>
		<dc:creator>skyman</dc:creator>
				<category><![CDATA[Bez kategorii]]></category>

		<guid isPermaLink="false">http://skyman.pl/?p=161</guid>
		<description><![CDATA[Ostatnio sporo czasu spędzałem nad skonfigurowaniem nowo zakupionego boksa do telewizora.
AsRock ION330 to naprawdę niesamowite urządzenie jak na swoją cenę i rozmiary. W prostopadłościanie o objętości ~2.5 litra mieści się napęd DVD RW, 160GB dysk, dwurdzeniowy Atom 330 i wspaniały czipset Nvidia ION z kartą GeForce 9400.
Pudełko znakomicie nadaje się do oglądania Doktorów House&#8217;ów na [...]]]></description>
			<content:encoded><![CDATA[<p>Ostatnio sporo czasu spędzałem nad skonfigurowaniem nowo zakupionego boksa do telewizora.</p>
<p>AsRock ION330 to naprawdę niesamowite urządzenie jak na swoją cenę i rozmiary. W prostopadłościanie o objętości ~2.5 litra mieści się napęd DVD RW, 160GB dysk, dwurdzeniowy Atom 330 i wspaniały czipset Nvidia ION z kartą GeForce 9400.</p>
<p>Pudełko znakomicie nadaje się do oglądania Doktorów House&#8217;ów na telewizorze, filmów, youtube&#8217;ów itp. Jest bardzo ciche (ledwo słyszalne w cichym pokoju, dźwięki odtwaranego wideo skutecznie zagłuszają wszelkie szumy z pudełka).</p>
<p><span id="more-161"></span>Jako fanatyk Gentoo także i tu musiało się ono znaleźć. Instalacja nie była zbyt problematyczna. Skorzystałem z najnowszego Minimal LiveCD dla platformy amd64. Pierwsze co dobrze było zrobić po uruchomieniu to przełączenie w bios&#8217;ie trybu SATA na AHCI (wtedy nie uświadczymy kernel panic przy pierwszym uruchomieniu, bo skorzystamy ze standardowych sterowników &#8220;AHCI SATA support&#8221;) przy okazji powinniśmy zupdejtować bios co pozwoli nam na jeszcze lepsze wyciszenie boksa i wyłączenie diod po uruchomieniu (nikt przecież nie chce podczas oglądania filmu widzieć kątem oka niebieskiego podświetlenia przycisku ON/OFF <img src='http://skyman.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .</p>
<p>W ustawianiach kompilacji jądra nie ma nic szczególnego. Wystarczy wspomniane AHCI SATA, HID, dobrze zaznaczyć USB selective suspend (obsługa wake z pilota ir), sterownik sieci nforce oraz Intel HD audio z &#8220;NVIDIA HDMI HD-audio support&#8221;. Jeśli mamy w telewizorze wejście RS232 to możemy zaopatrzyć się w adapter USB-&gt;RS232, wkompilować sterownik (prawdopodobnie najpopularniejszy &#8211; pl2303) i automatycznie wyłączać TV gdy boks przechodzi w stan uśpienia.</p>
<p>XBMC skompilowałem z ebuilda svn xbmc-9999 i wszystko działa.</p>
<p>Suspend i hibernate działają &#8220;same&#8221; po zainstalowaniu pm-suspend (w /etc/pm/sleep.d możemy wrzucić swój skrypt do obsługi TV przez RS232).</p>
<p>Budzenie z suspend za pomocą pilota wymagało dodania</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;USB0&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>proc<span style="color: #000000; font-weight: bold;">/</span>acpi<span style="color: #000000; font-weight: bold;">/</span>wakeup</pre></div></div>

<p>do /etc/conf.d/local.start</p>
<p>Dźwięk po HDMI działa po wpisaniu w ustawieniach dźwięku w XBMC &#8220;hdmi&#8221; w polach &#8220;Default audio device&#8221; i &#8220;Passthrough audio device&#8221;.</p>
<p>Problem z obcinaniem brzegów ekranu (overscan) najłatwiej załatwić skalibrowaniem ekraniu w ustawieniach XBMC.</p>
<p>Jako pilota użyłem najtańszego na allegro pilota Cyberlink MCE i zamiast bawić się z lirc&#8217;em przemapowałem przyciski na te używane standardowo przez XBMC.</p>
<p>Wszystko działa PIĘKNIE &#8211; nic się nie tnie, nie ma problemów z kodekami i ładnie wygląda <img src='http://skyman.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><span style="color: #888888;">troczę chaotyczne &#8211; spróbuję kiedyś uporządkować</span></p>
]]></content:encoded>
			<wfw:commentRss>http://skyman.pl/2009/10/10/asrock-ion330-gentoo-i-xbmc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SmartVolume</title>
		<link>http://skyman.pl/2009/10/07/smartvolume/</link>
		<comments>http://skyman.pl/2009/10/07/smartvolume/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 13:37:20 +0000</pubDate>
		<dc:creator>skyman</dc:creator>
				<category><![CDATA[Bez kategorii]]></category>
		<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://skyman.pl/?p=157</guid>
		<description><![CDATA[Zwykle jeśli nie mam wyciszonego telefonu (zajęcia) to głośność dzwonka mam ustawioną na maxa. Przy podłączaniu zestawu słuchawkowego (co ostatnio zdarzało mi się dość często) i słuchaniu przezeń muzyki dźwięk dzwonka w słuchawkach jest bliski wbicia bębenków do wnętrza czaszki.
Gdzieś znalazłem informacje, że w wersji Android Eclair problem ma zostać załatwiony przez system, jak na [...]]]></description>
			<content:encoded><![CDATA[<p>Zwykle jeśli nie mam wyciszonego telefonu (zajęcia) to głośność dzwonka mam ustawioną na maxa. Przy podłączaniu zestawu słuchawkowego (co ostatnio zdarzało mi się dość często) i słuchaniu przezeń muzyki dźwięk dzwonka w słuchawkach jest bliski wbicia bębenków do wnętrza czaszki.</p>
<p>Gdzieś znalazłem informacje, że w wersji Android Eclair problem ma zostać załatwiony przez system, jak na razie można użyć np aplikacji &#8220;Volume Control&#8221; o której słuch niestety zaginął (nie ma jej w Markecie).</p>
<p>Nie pozostało mi nic innego jak samemu napisać taką aplikację.</p>
<p>Przed chwilą w Markecie pojawił się &#8220;SmartVolume&#8221;</p>
<div class="wp-caption alignnone" style="width: 110px"><a href="market://search?q=pname:pl.skyman.android.smartvolume"><img title="SmartVolume w Android Market" src="http://chart.apis.google.com/chart?cht=qr&amp;chs=100x100&amp;chl=market://search?q=pname:pl.skyman.android.smartvolume" alt="SmartVolume w Android Market" width="100" height="100" /></a><p class="wp-caption-text">SmartVolume w Android Market</p></div>
<p>Po zainstalowaniu aplikacji trzeba zrestartować telefon (przy starcie uruchamiany jest działający w tle serwis). Przy podłączeniu słuchawek serwis przywróci ustawienia głośności dla mediów, dzwonka, powiadomień, rozmowy z momentu kiedy słuchawki były ostatni raz podłączone. Przy odłączaniu analogicznie.</p>
<p>Muszę się przyznać, że aplikacja nie była zbyt dogłębnie testowana, ale nie ma też wielu miejsc w których mogłyby się pojawiać błędy.</p>
<p>Programik nie jest zbyt skomplikowany (ale za to całkiem pożyteczny), więc wrzucam kompletne źródła na licencji LGPL <a href="http://skyman.pl/wp-content/uploads/2009/10/SmartVolume.zip">SmartVolume.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://skyman.pl/2009/10/07/smartvolume/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dynamic IP, Cron i Google Calendar</title>
		<link>http://skyman.pl/2009/09/13/dynamic-ip-cron-i-google-calendar/</link>
		<comments>http://skyman.pl/2009/09/13/dynamic-ip-cron-i-google-calendar/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 00:34:34 +0000</pubDate>
		<dc:creator>skyman</dc:creator>
				<category><![CDATA[Bez kategorii]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[sieć]]></category>
		<category><![CDATA[sms]]></category>

		<guid isPermaLink="false">http://skyman.pl/?p=145</guid>
		<description><![CDATA[W oczekiwaniu na kilka mejli postanowiłem pochwalić się konfiguracją swojego domowo/biurowego serwera do dostępu z zewnątrz.
Jedyne łącze jakie da się zdobyć w mojej szerokości geograficznej do zwykła Neozdrada/Net24/cośtam, które jak wszyscy wiedzą mają dynamiczne IP. Do serwera chcę mieć dostęp z każdego miejsca na świecie i o każdej porze. Kiedyś zdarzało mi się dzwonić do [...]]]></description>
			<content:encoded><![CDATA[<p>W oczekiwaniu na kilka mejli postanowiłem pochwalić się konfiguracją swojego domowo/biurowego serwera do dostępu z zewnątrz.</p>
<p>Jedyne łącze jakie da się zdobyć w mojej szerokości geograficznej do zwykła Neozdrada/Net24/cośtam, które jak wszyscy wiedzą mają dynamiczne IP. Do serwera chcę mieć dostęp z każdego miejsca na świecie i o każdej porze. Kiedyś zdarzało mi się dzwonić do któregoś z domowników i prosić o sprawdzenie ip na routerze albo jakimś myip.xxx. Niedawno wpadłem na pomysł wysyłania numeru IP sms&#8217;em. Najłatwiejsza darmowa metoda wysyłania sms&#8217;ów to wg. mnie Google Calendar. Napisałem więc kilka skryptów, które sprawdzają czy ip serwera się zmieniło i jeśli tak wysyłają nowe IP do kalendarzy zaufanych osób.<span id="more-145"></span></p>
<p>Po pierwsze serwer musi się dowiedzieć pod jakim IP jest widoczny na zewnątrz. Można korzystać z istniejących stron podających numer IP komputera, ale parsowanie odpowiedzi mogło by nie być takie łatwe, więc wrzuciłem banalny skrypt na zwykły serwer hostingowy.</p>
<p>myip.php:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">print</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REMOTE_ADDR'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Google udostępnia moduły dla Pythona do działania ze swoimi usługami (w tym Kalendarzem), więc najłatwiej było napisać skrypt w Pythonie, który pobrane z internetu IP porówna z poprzednim i wpisze do Kalendarza. Pomógł mi komplet tutoriali w dokumentacji Google Calendar API <a title="http://code.google.com/intl/pl/apis/calendar/docs/1.0/developers_guide_python.html" href="http://code.google.com/intl/pl/apis/calendar/docs/1.0/developers_guide_python.html" onclick="pageTracker._trackPageview('/outgoing/code.google.com/intl/pl/apis/calendar/docs/1.0/developers_guide_python.html?referer=');">http://code.google.com/intl/pl/apis/calendar/docs/1.0/developers_guide_python.html</a></p>
<p>setIp.py:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">httplib</span>
<span style="color: #ff7700;font-weight:bold;">try</span>:
 <span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">xml</span>.<span style="color: black;">etree</span> <span style="color: #ff7700;font-weight:bold;">import</span> ElementTree <span style="color: #808080; font-style: italic;"># for Python 2.5 users</span>
<span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">ImportError</span>:
 <span style="color: #ff7700;font-weight:bold;">from</span> elementtree <span style="color: #ff7700;font-weight:bold;">import</span> ElementTree
<span style="color: #ff7700;font-weight:bold;">import</span> gdata.<span style="color: #dc143c;">calendar</span>.<span style="color: black;">service</span>
<span style="color: #ff7700;font-weight:bold;">import</span> gdata.<span style="color: black;">service</span>
<span style="color: #ff7700;font-weight:bold;">import</span> atom.<span style="color: black;">service</span>
<span style="color: #ff7700;font-weight:bold;">import</span> gdata.<span style="color: #dc143c;">calendar</span>
<span style="color: #ff7700;font-weight:bold;">import</span> atom
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">getopt</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">string</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">time</span>
&nbsp;
conn = <span style="color: #dc143c;">httplib</span>.<span style="color: black;">HTTPConnection</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;mój serwer&quot;</span><span style="color: black;">&#41;</span>
conn.<span style="color: black;">request</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;GET&quot;</span>, <span style="color: #483d8b;">&quot;/myip.php&quot;</span><span style="color: black;">&#41;</span>
myip = conn.<span style="color: black;">getresponse</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
conn.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
oldip = <span style="color: #008000;">file</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'ip'</span>,<span style="color: #483d8b;">'r'</span><span style="color: black;">&#41;</span>.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span> oldip
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> InsertSingleEvent<span style="color: black;">&#40;</span>calendar_service, title=<span style="color: #483d8b;">''</span>,
 content=<span style="color: #483d8b;">'New IP'</span>, where=<span style="color: #483d8b;">'Proliant'</span>,
 start_time=<span style="color: #008000;">None</span>, end_time=<span style="color: #008000;">None</span><span style="color: black;">&#41;</span>:
 event = gdata.<span style="color: #dc143c;">calendar</span>.<span style="color: black;">CalendarEventEntry</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
 event.<span style="color: black;">title</span> = atom.<span style="color: black;">Title</span><span style="color: black;">&#40;</span>text=title<span style="color: black;">&#41;</span>
 event.<span style="color: black;">content</span> = atom.<span style="color: black;">Content</span><span style="color: black;">&#40;</span>text=content<span style="color: black;">&#41;</span>
 event.<span style="color: black;">where</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span>gdata.<span style="color: #dc143c;">calendar</span>.<span style="color: black;">Where</span><span style="color: black;">&#40;</span>value_string=where<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
 <span style="color: #ff7700;font-weight:bold;">if</span> start_time <span style="color: #ff7700;font-weight:bold;">is</span> <span style="color: #008000;">None</span>:
 <span style="color: #808080; font-style: italic;"># Use current time for the start_time and have the event last 1 hour</span>
 start_time = <span style="color: #dc143c;">time</span>.<span style="color: black;">strftime</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'%Y-%m-%dT%H:%M:00+00:00'</span>, <span style="color: #dc143c;">time</span>.<span style="color: black;">gmtime</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">time</span>.<span style="color: #dc143c;">time</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> + <span style="color: #ff4500;">420</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
 end_time = <span style="color: #dc143c;">time</span>.<span style="color: black;">strftime</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'%Y-%m-%dT%H:%M:00+00:00'</span>, <span style="color: #dc143c;">time</span>.<span style="color: black;">gmtime</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">time</span>.<span style="color: #dc143c;">time</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> + <span style="color: #ff4500;">780</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
 reminder = gdata.<span style="color: #dc143c;">calendar</span>.<span style="color: black;">Reminder</span><span style="color: black;">&#40;</span>minutes=<span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>
 reminder._attributes<span style="color: black;">&#91;</span><span style="color: #483d8b;">'method'</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">'method'</span>
 reminder.<span style="color: black;">method</span> = <span style="color: #483d8b;">'sms'</span>
 event.<span style="color: black;">when</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span>gdata.<span style="color: #dc143c;">calendar</span>.<span style="color: black;">When</span><span style="color: black;">&#40;</span>start_time=start_time, end_time=end_time, reminder=reminder<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
 <span style="color: #808080; font-style: italic;">#event.when.reminder.append(gdata.calendar.Reminder(minutes=5))</span>
&nbsp;
 new_event = calendar_service.<span style="color: black;">InsertEvent</span><span style="color: black;">&#40;</span>event, <span style="color: #483d8b;">'/calendar/feeds/default/private/full'</span><span style="color: black;">&#41;</span>
&nbsp;
 <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'New single event inserted: %s'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>new_event.<span style="color: #008000;">id</span>.<span style="color: black;">text</span>,<span style="color: black;">&#41;</span>
 <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\t</span>Event edit URL: %s'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>new_event.<span style="color: black;">GetEditLink</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">href</span>,<span style="color: black;">&#41;</span>
 <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\t</span>Event HTML URL: %s'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>new_event.<span style="color: black;">GetHtmlLink</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">href</span>,<span style="color: black;">&#41;</span>
 <span style="color: #ff7700;font-weight:bold;">return</span> new_event
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> oldip <span style="color: #66cc66;">!</span>= myip:
 calendar_service = gdata.<span style="color: #dc143c;">calendar</span>.<span style="color: black;">service</span>.<span style="color: black;">CalendarService</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
 calendar_service.<span style="color: #dc143c;">email</span> = <span style="color: #483d8b;">'nazwa użytkownika'</span>
 calendar_service.<span style="color: black;">password</span> = <span style="color: #483d8b;">'hasło'</span>
 calendar_service.<span style="color: black;">source</span> = <span style="color: #483d8b;">'Google-Calendar_myip'</span>
 calendar_service.<span style="color: black;">ProgrammaticLogin</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
 event = InsertSingleEvent<span style="color: black;">&#40;</span>calendar_service, myip<span style="color: black;">&#41;</span>
&nbsp;
 <span style="color: #008000;">file</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'/root/ip'</span>,<span style="color: #483d8b;">'w'</span><span style="color: black;">&#41;</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span>myip<span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Nic nie stoi na przeszkodzie, żeby linijki 52-58 powtórzyć kilka razy dla różnych użytkowników <img src='http://skyman.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Dodawane offsety do czasu (linijka 36) wynika z testów &#8211; przy takim offsecie Google zaczął wysyłać do mnie SMS&#8217;y.</p>
<p>Ostatnim elementem jest wpis w crontab.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">crontab <span style="color: #660033;">-e</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #000000;">*/</span><span style="color: #000000; font-weight:bold;">10</span> <span style="color: #000000;">*</span> <span style="color: #000000;">*</span> <span style="color: #000000;">*</span> <span style="color: #000000;">*</span> ipSet<span style="color: #000000;">.</span>py</pre></div></div>

<p>Kwiatkiem w tym komplecie będzie jeszcze prosta aplikacja na Androida, która znajdzie w kalendarzu ostatni wpis w kalendarzu i wyśle Intent do <a href="http://code.google.com/p/connectbot/" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/connectbot/?referer=');">ConnectBot&#8217;a</a> z naszym nowym IP.</p>
<p>Aplikacja nie jest jeszcze gotowa, ale jakby ktoś chciał się pobawić to kluczowym elementem jest to <img src='http://skyman.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">final</span> Intent sshIntent <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Intent<span style="color: #009900;">&#40;</span>android.<span style="color: #006633;">content</span>.<span style="color: #006633;">Intent</span>.<span style="color: #006633;">ACTION_VIEW</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
sshIntent.<span style="color: #006633;">setData</span><span style="color: #009900;">&#40;</span>Uri.<span style="color: #006633;">parse</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;ssh://krzysiek@&quot;</span><span style="color: #339933;">+</span>handler.<span style="color: #006633;">ip</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;:22/#proliant&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
sshIntent.<span style="color: #006633;">setFlags</span><span style="color: #009900;">&#40;</span>Intent.<span style="color: #006633;">FLAG_ACTIVITY_CLEAR_TOP</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
startActivity<span style="color: #009900;">&#40;</span>Intent.<span style="color: #006633;">createChooser</span><span style="color: #009900;">&#40;</span>sshIntent, <span style="color: #0000ff;">&quot;ssh&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
finish<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://skyman.pl/2009/09/13/dynamic-ip-cron-i-google-calendar/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Hello Android &#8211; czyli szkielet aplikacji</title>
		<link>http://skyman.pl/2009/09/12/hello-android-czyli-szkielet-aplikacji/</link>
		<comments>http://skyman.pl/2009/09/12/hello-android-czyli-szkielet-aplikacji/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 13:01:43 +0000</pubDate>
		<dc:creator>skyman</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[tutoriale]]></category>

		<guid isPermaLink="false">http://skyman.pl/?p=121</guid>
		<description><![CDATA[Na prośbę mciek piszę tutorial nie do końca programistyczny&#8230; Większość zadań przy tworzeniu szkieletu aplikacji na platformę Android pomoże nam stworzyć Eclipse.
Podstawy
Nie chcę powtarzać rzeczy które są dobrze i przystępnie napisane w Dev Guide, więc temat instalacji Android Developer Tools i tworzenie nowego projektu w Eclipse pozostawię oryginalnemu artykułowi http://developer.android.com/guide/developing/eclipse-adt.html. Kody &#8220;wyjściowe&#8221; użyte w tym [...]]]></description>
			<content:encoded><![CDATA[<p>Na prośbę mciek piszę tutorial nie do końca programistyczny&#8230; Większość zadań przy tworzeniu szkieletu aplikacji na platformę Android pomoże nam stworzyć Eclipse.<span id="more-121"></span></p>
<h1>Podstawy</h1>
<p>Nie chcę powtarzać rzeczy które są dobrze i przystępnie napisane w Dev Guide, więc temat instalacji Android Developer Tools i tworzenie nowego projektu w Eclipse pozostawię oryginalnemu artykułowi <a href="http://developer.android.com/guide/developing/eclipse-adt.html" onclick="pageTracker._trackPageview('/outgoing/developer.android.com/guide/developing/eclipse-adt.html?referer=');">http://developer.android.com/guide/developing/eclipse-adt.html</a>. Kody &#8220;wyjściowe&#8221; użyte w tym artykule są automatycznie tworzone przez Eclipse przy stworzeniu nowego projektu.</p>
<p>Spróbuje pokrótce omówić podstawowe elementy aplikacji i opisać metody wbudowanych klas które mozna (a często trzeba) przeciążać.</p>
<p>Podstawową &#8220;jednostką&#8221; w aplikacji jest Activity, czyli aktywność z którą użytkownik ma do czynienia, pojedyncza &#8220;strona&#8221; aplikacji. Nazwanie Activity &#8220;podstawową jednostką aplikacji&#8221; może wydawać się nielogiczne &#8211; przecież aplikacja składa się zwykle z więcej niż jednej &#8220;strony&#8221;, czyli musi byc coś bardziej podstawowego &#8211; ale jedne Activities, są uruchamiane z innych i od strony programisty nie jest szczególnie ważne to co jest poniżej (na razie trzeba w to uwierzyć <img src='http://skyman.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Klasa Activity posiada między innymi metodę onCreate, którą musimy przeciażyć, żeby nasze Activity robiło cokolwiek sensownego.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HelloAndroid <span style="color: #000000; font-weight: bold;">extends</span> Activity <span style="color: #009900;">&#123;</span>
  <span style="color: #008000; font-style: italic; font-weight: bold;">/** Called when the activity is first created. */</span>
  @Override
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onCreate<span style="color: #009900;">&#40;</span>Bundle savedInstanceState<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">onCreate</span><span style="color: #009900;">&#40;</span>savedInstanceState<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    setContentView<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">layout</span>.<span style="color: #006633;">main</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Do metody onCreate przekazywany jest stan Activity z poprzedniego uruchomienia (informacje na temat zapisywania stanu być może pojawią się w innym artykule, na razie nie będzie nam to do niczego potrzebne).</p>
<p>Na początku musimy wywołać metodę onCreate klasy Activity po której dziedziczymy (super.onCreate &#8211; żeby pojawiło się chociaż czrne okienko, które będziemy mogli wypełnić)</p>
<p>Kolejnym krokiem jest ustawienie widoku na podstawie pliku XML za pomocą metody setContentView (na początku może się to wydawać strasznie zagmatwane, ale naprawdę dobrze się spisuje &#8211; pozwala na zupełne oddzielenie layoutu od kodu aplikacji).</p>
<p>Tak więc nasz plik res/layout/main.xml:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;utf-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;LinearLayout</span> <span style="color: #000066;">xmlns:android</span>=<span style="color: #ff0000;">&quot;http://schemas.android.com/apk/res/android&quot;</span> <span style="color: #000066;">android:orientation</span>=<span style="color: #ff0000;">&quot;vertical&quot;</span> <span style="color: #000066;">android:layout_width</span>=<span style="color: #ff0000;">&quot;fill_parent&quot;</span> <span style="color: #000066;">android:layout_height</span>=<span style="color: #ff0000;">&quot;fill_parent&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;TextView</span> <span style="color: #000066;">android:layout_width</span>=<span style="color: #ff0000;">&quot;fill_parent&quot;</span> <span style="color: #000066;">android:layout_height</span>=<span style="color: #ff0000;">&quot;wrap_content&quot;</span> <span style="color: #000066;">android:text</span>=<span style="color: #ff0000;">&quot;@string/hello&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/LinearLayout<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Tak więc main.xml opisuje nam wygląd pierwszej strony naszej aplikacji. LinearLayout to kontener na elementy, który automatycznie ustawia je obok siebie w ustalonej orientacji (android:orientation=&#8221;vertical&#8221;/&#8221;horizontal&#8221;), wypadałoby, żeby główny kontener zajmował całą dostępną przestrzeń ekranu, więc mamy android:layout_width=&#8221;fill_parent&#8221; android:layout_height=&#8221;fill_parent&#8221;. TextView to normalny element tekstowy (takij jak JLabel, albo normalny tekst w HTML) jako wartość parametru android:text podajemy otwartym tekstem to co ma nam się &#8220;napisać&#8221; lub referencję do wartości podanej w pliku res/values/strings.xml</p>
<p>strings.xml</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;utf-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;resources<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;app_name&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>Hello Android<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;hello&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>Hello World, HelloAndroid!&gt;/string&gt;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/resources<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Po uruchomieniu aplikacji na emulatorze lub telefonie (<strong>Run</strong>=&gt;<strong>Run configurations&#8230;</strong>-&gt;dwuklik na android application-&gt;<strong>Project</strong>, <strong>Browse</strong>-&gt;Wybieramy nasz projekt-&gt;<strong>Run</strong>) pojawi nam się czarne okienko z jasnym napisem (uwaga! uruchomienie emulatora może potrwać kilka minut, najlepiej spokojnie czekać i nic nie robić z okienkiem emulatora).</p>
<p>Aplikacja nie jest zbyt użyteczna i nie jest do końca jasne jak się zabrać do przerobienia jej na taką&#8230; Ale DO ROBOTY!<!--more--></p>
<h1>Przerabiamy</h1>
<p>Dodamy do istniejącego szkieletu kilka elementów które pozwolą nam na interakcję z użytkownikiem i pokażą jakygląda tworzenie aplikacji na Androida. Aplikacja wyswietli pole TextView,edytowalne pole tekstowe (EditText) i przycisk (Button). Po kliknięciu na przycisk treść EditText zostanie wpisana do TextView.</p>
<h2>1. XML&#8217;e</h2>
<p>W androidzie każdy element widoku do którego chcemy się odwołać z kodu programu musi mieć swoje id (android:id), przerabiamy więc nasz plik main.xml żeby wyglądał następująco:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;utf-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;LinearLayout</span> <span style="color: #000066;">xmlns:android</span>=<span style="color: #ff0000;">&quot;http://schemas.android.com/apk/res/android&quot;</span> <span style="color: #000066;">android:orientation</span>=<span style="color: #ff0000;">&quot;vertical&quot;</span> <span style="color: #000066;">android:layout_width</span>=<span style="color: #ff0000;">&quot;fill_parent&quot;</span> <span style="color: #000066;">android:layout_height</span>=<span style="color: #ff0000;">&quot;fill_parent&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;TextView</span> <span style="color: #000066;">android:id</span>=<span style="color: #ff0000;">&quot;@+id/text&quot;</span> <span style="color: #000066;">android:layout_width</span>=<span style="color: #ff0000;">&quot;fill_parent&quot;</span> <span style="color: #000066;">android:layout_height</span>=<span style="color: #ff0000;">&quot;wrap_content&quot;</span> <span style="color: #000066;">android:text</span>=<span style="color: #ff0000;">&quot;@string/hello&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;EditText</span> <span style="color: #000066;">android:hint</span>=<span style="color: #ff0000;">&quot;@string/typeSomething&quot;</span> <span style="color: #000066;">android:id</span>=<span style="color: #ff0000;">&quot;@+id/field&quot;</span> <span style="color: #000066;">android:layout_width</span>=<span style="color: #ff0000;">&quot;fill_parent&quot;</span> <span style="color: #000066;">android:layout_height</span>=<span style="color: #ff0000;">&quot;wrap_content&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Button</span> <span style="color: #000066;">android:text</span>=<span style="color: #ff0000;">&quot;@string/change&quot;</span> <span style="color: #000066;">android:id</span>=<span style="color: #ff0000;">&quot;@+id/change&quot;</span> <span style="color: #000066;">android:layout_width</span>=<span style="color: #ff0000;">&quot;fill_parent&quot;</span> <span style="color: #000066;">android:layout_height</span>=<span style="color: #ff0000;">&quot;wrap_content&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/LinearLayout<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>i strings.xml</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;utf-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;resources<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;app_name&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>Hello Android<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;hello&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>Witaj, Wpisz coś w pole in naciśnij &quot;Zmień&quot;<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;typeSomething&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>Wpisz coś<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;change&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>Zmień<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/resources<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Mamy więc pole tekstowe (TextView) o id &#8220;text&#8221; w którym wyświetli się napis hello z pliku strings.xml, EditText o id &#8220;field&#8221; i tekstem podpowiedzi (bardzo fajna sprawa w formularzach, tekst jest widoczny tylko wtedy gdy pole jest puste) @strings/typeSomething i przycisk o id &#8220;change&#8221; z napisem @strings/change.</p>
<p>Wszystko wygląda tak jak powinno teraz czas na przeróbki kodu Java.</p>
<h2>2. Java</h2>
<p>setContentView(R.layout.main) spowodowało przypisanie naszemu Activity layoutu z pliku main.xml, teraz na pomocą metody findViewById(int id) możemy dobierać się do poszczególnych elementów layoutu.</p>
<p><span style="color: #888888;">W tym miejscu musi się pojawić krotka dygresja <img src='http://skyman.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Czym jest &#8220;int id&#8221;? Wtyczka ADT do Eclipse przy każdym zapisaniu pliku xml aktualizuje na jego podstawie plik gen/PACKAGENAME/R.java, którego nie powinniśmy w żadnym wypadku edytować ręcznie. w tym pliku edytowane są id wszystkich elementów layoutu, stringów, obrazków itd. (wszystkiego co znajduje się w katalogu res). Nie chcę zagłębiać się w szczegóły, bo mogę powiedzieć coś głupiego, ale twórcy androida zrobili coś takiego w celu ogólnego przyspieszenia działana apikacji (czytanie plików XML byłoby zbyt wolne).</span></p>
<p>Chcemy spowodować, żeby po kliknięciu na przycisk wywoływana była odpowiednia akcja. Filozofia obsługi elementów GUI w Androidzie jest taka sama jak w zwykłej Javie, więc nasz przycisk mus mieć dodany ActionListener, a w naszym przypadku dokładnie OnClickListener.</p>
<p>Dodajemy więc w pliku HelloAndroid.java (za setContentView):</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Button</span><span style="color: #009900;">&#41;</span>findViewById<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">change</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setOnClickListener</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> OnClickListener<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  @Override
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onClick<span style="color: #009900;">&#40;</span><span style="color: #003399;">View</span> arg0<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// Tu musimy przeczytać zawartość pola @id/field i wpisać do @id/hello</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Po kliknięciu na przycisk program wykona to co będzie w przeciążonej metodzie onClick naszego OnCLickListenera.</p>
<p>Weby dostać się do pola EditText i TextView tak samo musimy uzyc findViewById i użyć odpowiednich metod.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">String</span> tekst <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>EditText<span style="color: #009900;">&#41;</span>findViewById<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">field</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>TextView<span style="color: #009900;">&#41;</span>findViewById<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">text</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>tekst<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Kod kompletnego HelloAndroid.java:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">pl.skyman.tutorial.helloandroid</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.app.Activity</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.os.Bundle</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.view.View</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.view.View.OnClickListener</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.widget.Button</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.widget.EditText</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">android.widget.TextView</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HelloAndroid <span style="color: #000000; font-weight: bold;">extends</span> Activity <span style="color: #009900;">&#123;</span>
  <span style="color: #008000; font-style: italic; font-weight: bold;">/** Called when the activity is first created. */</span>
  @Override
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onCreate<span style="color: #009900;">&#40;</span>Bundle savedInstanceState<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">onCreate</span><span style="color: #009900;">&#40;</span>savedInstanceState<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    setContentView<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">layout</span>.<span style="color: #006633;">main</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Button</span><span style="color: #009900;">&#41;</span>findViewById<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">change</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setOnClickListener</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> OnClickListener<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      @Override
      <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onClick<span style="color: #009900;">&#40;</span><span style="color: #003399;">View</span> arg0<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">String</span> tekst <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>EditText<span style="color: #009900;">&#41;</span>findViewById<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">field</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>TextView<span style="color: #009900;">&#41;</span>findViewById<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">text</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>tekst<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><a href="http://skyman.pl/wp-content/uploads/2009/09/HelloAndroid.zip">Źródła kompletnego projektu Eclipse HelloAndroid.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://skyman.pl/2009/09/12/hello-android-czyli-szkielet-aplikacji/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Wasze propozycje artykułów o programowaniu na Androida</title>
		<link>http://skyman.pl/2009/08/07/wasze-propozycje-artykulow-o-programowaniu-na-androida/</link>
		<comments>http://skyman.pl/2009/08/07/wasze-propozycje-artykulow-o-programowaniu-na-androida/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 23:19:44 +0000</pubDate>
		<dc:creator>skyman</dc:creator>
				<category><![CDATA[Bez kategorii]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://skyman.pl/2009/08/07/wasze-propozycje-artykulow-o-programowaniu-na-androida/</guid>
		<description><![CDATA[Wszystkich, którzy szukali tu informacjii &#8220;jak zrobić, żeby &#8230;/(!@#$%^) działało!?&#8221; i ich nie znaleźli proszę o wpisanie w komentarzu proponowanego tematu i ew. pytań &#8220;uściślających&#8221;. W miarę możliwości i wiedzy postaram się coś naskrobać   
]]></description>
			<content:encoded><![CDATA[<p>Wszystkich, którzy szukali tu informacjii &#8220;jak zrobić, żeby &#8230;/(!@#$%^) działało!?&#8221; i ich nie znaleźli proszę o wpisanie w komentarzu proponowanego tematu i ew. pytań &#8220;uściślających&#8221;. W miarę możliwości i wiedzy postaram się coś naskrobać <img src='http://skyman.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  </p>
]]></content:encoded>
			<wfw:commentRss>http://skyman.pl/2009/08/07/wasze-propozycje-artykulow-o-programowaniu-na-androida/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Autobuser przekroczył 1000 pobrań!</title>
		<link>http://skyman.pl/2009/08/01/autobuser-przekroczyl-1000-pobran/</link>
		<comments>http://skyman.pl/2009/08/01/autobuser-przekroczyl-1000-pobran/#comments</comments>
		<pubDate>Sat, 01 Aug 2009 12:21:51 +0000</pubDate>
		<dc:creator>skyman</dc:creator>
				<category><![CDATA[Bez kategorii]]></category>

		<guid isPermaLink="false">http://skyman.pl/?p=115</guid>
		<description><![CDATA[Nie wiem o co chodzi, ale też się cieszę  
]]></description>
			<content:encoded><![CDATA[<p>Nie wiem o co chodzi, ale też się cieszę <img src='http://skyman.pl/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> <img class="aligncenter size-full wp-image-116" title="Autobuser przekroczył 1000 pobrań!" src="http://skyman.pl/wp-content/uploads/2009/08/device.png" alt="Autobuser przekroczył 1000 pobrań!" width="320" height="480" /></p>
]]></content:encoded>
			<wfw:commentRss>http://skyman.pl/2009/08/01/autobuser-przekroczyl-1000-pobran/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Autobuser v0.9.1</title>
		<link>http://skyman.pl/2009/07/29/autobuser-v0-9-1/</link>
		<comments>http://skyman.pl/2009/07/29/autobuser-v0-9-1/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 12:01:42 +0000</pubDate>
		<dc:creator>skyman</dc:creator>
				<category><![CDATA[Bez kategorii]]></category>

		<guid isPermaLink="false">http://skyman.pl/?p=105</guid>
		<description><![CDATA[Do marketu wpadła nowa wersja Autobusera.
Po propozycjach od j i Janka Namedyńskiego v0.9.0 z powodu dużej ilości zmian praktycznie przestała istnieć.
Większość propozycji które dostawałem na mejla została wprowadzona, ale dalej jestem otwarty na uwagi  
Poniżej kilka screenów.
]]></description>
			<content:encoded><![CDATA[<p>Do marketu wpadła nowa wersja Autobusera.</p>
<p>Po <a href="http://skyman.pl/2009/07/26/autobuser-v0-9-0-zapowiedz/">propozycjach od j</a> i Janka Namedyńskiego v0.9.0 z powodu dużej ilości zmian praktycznie przestała istnieć.</p>
<p>Większość propozycji które dostawałem na mejla została wprowadzona, ale dalej jestem otwarty na uwagi <img src='http://skyman.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Poniżej kilka screenów.</p>

<a href='http://skyman.pl/2009/07/29/autobuser-v0-9-1/device1-2/' title='Wyszukiwanie tras'><img width="150" height="150" src="http://skyman.pl/wp-content/uploads/2009/07/device11-150x150.png" class="attachment-thumbnail" alt="" title="Wyszukiwanie tras" /></a>
<a href='http://skyman.pl/2009/07/29/autobuser-v0-9-1/device2-2/' title='Wyświetlanie na mapie'><img width="150" height="150" src="http://skyman.pl/wp-content/uploads/2009/07/device21-150x150.png" class="attachment-thumbnail" alt="" title="Wyświetlanie na mapie" /></a>
<a href='http://skyman.pl/2009/07/29/autobuser-v0-9-1/device3/' title='Wyświetlanie na mapie'><img width="150" height="150" src="http://skyman.pl/wp-content/uploads/2009/07/device3-150x150.png" class="attachment-thumbnail" alt="" title="Wyświetlanie na mapie" /></a>
<a href='http://skyman.pl/2009/07/29/autobuser-v0-9-1/device4/' title='Wyświetlanie na mapie'><img width="150" height="150" src="http://skyman.pl/wp-content/uploads/2009/07/device4-150x150.png" class="attachment-thumbnail" alt="dotknij etykiety, żeby zobaczyć opcje" title="Wyświetlanie na mapie" /></a>
<a href='http://skyman.pl/2009/07/29/autobuser-v0-9-1/device5/' title='Wyświetlanie na mapie'><img width="150" height="150" src="http://skyman.pl/wp-content/uploads/2009/07/device5-150x150.png" class="attachment-thumbnail" alt="" title="Wyświetlanie na mapie" /></a>
<a href='http://skyman.pl/2009/07/29/autobuser-v0-9-1/device6/' title='Ustawienia'><img width="150" height="150" src="http://skyman.pl/wp-content/uploads/2009/07/device6-150x150.png" class="attachment-thumbnail" alt="Szybki odjazd" title="Ustawienia" /></a>
<a href='http://skyman.pl/2009/07/29/autobuser-v0-9-1/device7/' title='Wyszukiwanie tras'><img width="150" height="150" src="http://skyman.pl/wp-content/uploads/2009/07/device7-150x150.png" class="attachment-thumbnail" alt="Przytrzymaj, żeby zobaczyć opcje" title="Wyszukiwanie tras" /></a>

]]></content:encoded>
			<wfw:commentRss>http://skyman.pl/2009/07/29/autobuser-v0-9-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
