<?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>butcher.art.pl</title>
	<atom:link href="http://www.butcher.art.pl/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.butcher.art.pl</link>
	<description>strony www, programowanie, film, grafika</description>
	<lastBuildDate>Mon, 09 Jan 2012 21:21:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>pl</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Zaopiekuj się mną</title>
		<link>http://www.butcher.art.pl/2011/09/projekty/flash/zaopiekuj-sie-mna/</link>
		<comments>http://www.butcher.art.pl/2011/09/projekty/flash/zaopiekuj-sie-mna/#comments</comments>
		<pubDate>Fri, 30 Sep 2011 21:32:43 +0000</pubDate>
		<dc:creator>Kiniu</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Strony WWW]]></category>
		<category><![CDATA[facebook]]></category>

		<guid isPermaLink="false">http://www.butcher.art.pl/?p=411</guid>
		<description><![CDATA[Serwis społecznościowy dla dzieci, które lubią zwierzaki. Całość oparta o serię książek dla dzieci autorstwa Holly Webb wydawnictwa Zielona Sowa. Dzieci mogą opiekować się interaktywnym zwierzaczkiem z serii i zdobywać punkty.
Dodatkowo aplikacja Facebook, dzięki której można wygrać książki, rabaty oraz maskotkę głównego bohatera serii.
serwis www &#124; gra flash &#124; aplikacja Facebook
]]></description>
			<content:encoded><![CDATA[<p>Serwis społecznościowy dla dzieci, które lubią zwierzaki. Całość oparta o serię książek dla dzieci autorstwa Holly Webb wydawnictwa Zielona Sowa. Dzieci mogą opiekować się interaktywnym zwierzaczkiem z serii i zdobywać punkty.<br />
Dodatkowo aplikacja Facebook, dzięki której można wygrać książki, rabaty oraz maskotkę głównego bohatera serii.</p>
<p><a href="http://www.zaopiekujsiemna.com.pl/start" target="_blank">serwis www</a> | <a href="http://www.zaopiekujsiemna.com.pl/gra" target="_blank">gra flash</a> | <a href="http://www.facebook.com/#!/ZaopiekujSieMna?sk=app_156693737757856" target="_blank">aplikacja Facebook</a></p>

<a href='http://www.butcher.art.pl/2011/09/projekty/flash/zaopiekuj-sie-mna/attachment/zaopiekuj-sie-mna/' title='zaopiekuj-sie-mna'><img width="150" height="99" src="http://www.butcher.art.pl/files/2011/11/zaopiekuj-sie-mna-150x99.jpg" class="attachment-thumbnail colorbox-411" alt="" title="zaopiekuj-sie-mna" /></a>
<a href='http://www.butcher.art.pl/2011/09/projekty/flash/zaopiekuj-sie-mna/attachment/gra-flash/' title='gra-flash'><img width="150" height="116" src="http://www.butcher.art.pl/files/2011/11/gra-flash-150x116.jpg" class="attachment-thumbnail colorbox-411" alt="" title="gra-flash" /></a>
<a href='http://www.butcher.art.pl/2011/09/projekty/flash/zaopiekuj-sie-mna/attachment/zsm-facebook/' title='zsm-facebook'><img width="145" height="150" src="http://www.butcher.art.pl/files/2011/11/zsm-facebook-145x150.jpg" class="attachment-thumbnail colorbox-411" alt="" title="zsm-facebook" /></a>

]]></content:encoded>
			<wfw:commentRss>http://www.butcher.art.pl/2011/09/projekty/flash/zaopiekuj-sie-mna/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wyprawa autostopem do Barcelony</title>
		<link>http://www.butcher.art.pl/2011/08/w-czasie-wolnym/wyprawa-autostopem-do-barcelony/</link>
		<comments>http://www.butcher.art.pl/2011/08/w-czasie-wolnym/wyprawa-autostopem-do-barcelony/#comments</comments>
		<pubDate>Tue, 30 Aug 2011 21:13:52 +0000</pubDate>
		<dc:creator>Kiniu</dc:creator>
				<category><![CDATA[W czasie wolnym]]></category>

		<guid isPermaLink="false">http://www.butcher.art.pl/?p=407</guid>
		<description><![CDATA[
Gdzie by tu pojechać na wakacje? A może by tak zwiedzić całą Europę  autostopem? Zawsze nam się marzył Amsterdam, Paryż, Barcelona&#8230; W sumie  nic nie stoi na przeszkodzie. No to w drogę!
Ślad, zdjęcia i opis wyprawy można znaleźć na stronie trasygps.com
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.trasygps.com/trasy/pokaz/1142/Do_Barcelony_Autostopem/" target="_blank"><img class="size-full wp-image-408 alignleft colorbox-407" style="margin:0 10px 10px 0" title="Barcelona" src="http://www.butcher.art.pl/files/2011/11/barcelona.jpg" alt="" width="329" height="287" /></a></p>
<p>Gdzie by tu pojechać na wakacje? A może by tak zwiedzić całą Europę  autostopem? Zawsze nam się marzył Amsterdam, Paryż, Barcelona&#8230; W sumie  nic nie stoi na przeszkodzie. No to w drogę!</p>
<p>Ślad, zdjęcia i opis wyprawy można znaleźć na stronie <a href="http://www.trasygps.com/trasy/pokaz/1142/Do_Barcelony_Autostopem/" target="_blank">trasygps.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.butcher.art.pl/2011/08/w-czasie-wolnym/wyprawa-autostopem-do-barcelony/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jak zdać na prawko na motocykl w Krakowie?</title>
		<link>http://www.butcher.art.pl/2011/07/tutoriale/jak-zdac-na-prawko-na-motocyk-w-krakowie/</link>
		<comments>http://www.butcher.art.pl/2011/07/tutoriale/jak-zdac-na-prawko-na-motocyk-w-krakowie/#comments</comments>
		<pubDate>Fri, 29 Jul 2011 09:49:00 +0000</pubDate>
		<dc:creator>Kiniu</dc:creator>
				<category><![CDATA[Porady]]></category>

		<guid isPermaLink="false">http://www.butcher.art.pl/?p=393</guid>
		<description><![CDATA[Przede wszystkim nauczyć się dobrze jeździć :) Ale jak wiadomo, nie jest to takie proste. Na egzaminie ważne jest z jakiego pasa jedziemy, w którym miejscu trzeba się zatrzymać, na co zwrócić szczególną uwagę. Na szczęście w Krakowie mamy tylko jedną trasę, którą jeżdżą wszyscy. No i dzięki zdobyczom techniki mamy takie bajery jak zdjęcia [...]]]></description>
			<content:encoded><![CDATA[<p>Przede wszystkim nauczyć się dobrze jeździć :) Ale jak wiadomo, nie jest to takie proste. Na egzaminie ważne jest z jakiego pasa jedziemy, w którym miejscu trzeba się zatrzymać, na co zwrócić szczególną uwagę. Na szczęście w Krakowie mamy tylko jedną trasę, którą jeżdżą wszyscy. No i dzięki zdobyczom techniki mamy takie bajery jak zdjęcia satelitarne, Google Maps i Traseo&#8230;</p>
<p>Dzięki temu narysowałem dokładną trasę (zgodną z pasem ruchu, którym trzeba jechać) i zaznaczyłem na niej cenne uwagi od instruktora. Trasę można pobrać na swój telefon do aplikacji Traseo i przejechać ją kilka razy na spokojnie dzień wcześniej samochodem.</p>
<p>Tym sposobem zdałem za 1 razem :) Enjoy!</p>
<p><iframe width="640" height="480" src="http://traseo.pl/mapa/prawo-jazdy-krakow-kategoria-a-trasa-egzaminacyjna/m/5/mc/1/h/1/i/1/c/1/g/1/w/1/ch/1" frameborder=0 style="border:1px solid #000;"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.butcher.art.pl/2011/07/tutoriale/jak-zdac-na-prawko-na-motocyk-w-krakowie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Księgarnia internetowa Dragon</title>
		<link>http://www.butcher.art.pl/2011/07/strony-www/ksiegarnia-internetowa-dragon/</link>
		<comments>http://www.butcher.art.pl/2011/07/strony-www/ksiegarnia-internetowa-dragon/#comments</comments>
		<pubDate>Mon, 25 Jul 2011 21:01:29 +0000</pubDate>
		<dc:creator>Kiniu</dc:creator>
				<category><![CDATA[Strony WWW]]></category>

		<guid isPermaLink="false">http://www.butcher.art.pl/?p=402</guid>
		<description><![CDATA[Księgarnia internetowa Dragon. Jeden z pierwszych projektów opartych o framework Yii. Pełna obsługa zakupów on-line + wiele fajnych i praktycznych bajerów, jak np. podgląd książek w 3d, wyszukiwarka z podpowiedziami, slider, podobne tytuły itp&#8230;
Technologie: PHP, Yii Framework, MySQL, jQuery, Flash
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.wydawnictwo-dragon.pl/" target="_blank"><img class="alignleft size-medium wp-image-399 colorbox-402" style="margin: 0 10px 10px 0;" title="Księgarnia Dragon" src="http://www.butcher.art.pl/files/2011/11/dragon-300x284.jpg" alt="" width="300" height="284" /></a>Księgarnia internetowa Dragon. Jeden z pierwszych projektów opartych o framework Yii. Pełna obsługa zakupów on-line + wiele fajnych i praktycznych bajerów, jak np. podgląd książek w 3d, wyszukiwarka z podpowiedziami, slider, podobne tytuły itp&#8230;</p>
<p><strong>Technologie:</strong> PHP, Yii Framework, MySQL, jQuery, Flash</p>
]]></content:encoded>
			<wfw:commentRss>http://www.butcher.art.pl/2011/07/strony-www/ksiegarnia-internetowa-dragon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Życzenia w formie aplikacji Facebook :)</title>
		<link>http://www.butcher.art.pl/2010/12/aktualnosci/zyczenia-w-formie-aplikacji-facebook/</link>
		<comments>http://www.butcher.art.pl/2010/12/aktualnosci/zyczenia-w-formie-aplikacji-facebook/#comments</comments>
		<pubDate>Sat, 25 Dec 2010 11:53:22 +0000</pubDate>
		<dc:creator>Kiniu</dc:creator>
				<category><![CDATA[Aktualności]]></category>

		<guid isPermaLink="false">http://www.butcher.art.pl/?p=384</guid>
		<description><![CDATA[ Chciałem złożyć wszystkim życzenia świateczne. Dobra, tak naprawdę, to był tylko pretekst do napisania pierwszej aplikacji na Facebook :) Może nie jest jakaś powalajaca, ale od czegoś trzeba zaczac!
Zapraszam do obejrzenia: życzenia świateczne na Facebook :)

]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-386 colorbox-384" style="margin: 0pt 0pt 2px 10px;" title="Facebook" src="http://www.butcher.art.pl/files/2010/12/facebook.jpg" alt="" width="80" height="80" /> Chciałem złożyć wszystkim życzenia świateczne. Dobra, tak naprawdę, to był tylko pretekst do napisania pierwszej aplikacji na Facebook :) Może nie jest jakaś powalajaca, ale od czegoś trzeba zaczac!</p>
<p>Zapraszam do obejrzenia: <a href="http://apps.facebook.com/zyczenia-od-kinia/" target="_blank">życzenia świateczne na Facebook</a> :)</p>
<div style="clear:both;"></div>
]]></content:encoded>
			<wfw:commentRss>http://www.butcher.art.pl/2010/12/aktualnosci/zyczenia-w-formie-aplikacji-facebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jak przyspieszyć MySQL ORDER BY RAND()</title>
		<link>http://www.butcher.art.pl/2010/12/tutoriale/jak-przyspieszyc-mysql-order-by-rand/</link>
		<comments>http://www.butcher.art.pl/2010/12/tutoriale/jak-przyspieszyc-mysql-order-by-rand/#comments</comments>
		<pubDate>Fri, 10 Dec 2010 13:59:10 +0000</pubDate>
		<dc:creator>Kiniu</dc:creator>
				<category><![CDATA[Porady]]></category>

		<guid isPermaLink="false">http://www.butcher.art.pl/?p=381</guid>
		<description><![CDATA[Bardzo często zdarza się potrzeba pobrania z bazy danych kilku losowych wierszy &#8211; np. losowe zdjęcia na głównej stronie. MySQL dostarcza bardzo przydatną funkcję matematyczną RAND(). Zwraca ona wartość z przedziału &#60;0, 1&#62;. Dzięki temu możemy sobie wykonać takie zapytanie:

SELECT id, title, file FROM photo ORDER BY RAND&#40;&#41; LIMIT 5

W odpowiedzi otrzymamy 5 zdjęć wybranych [...]]]></description>
			<content:encoded><![CDATA[<p>Bardzo często zdarza się potrzeba pobrania z bazy danych kilku losowych wierszy &#8211; np. losowe zdjęcia na głównej stronie. MySQL dostarcza bardzo przydatną funkcję matematyczną RAND(). Zwraca ona wartość z przedziału &lt;0, 1&gt;. Dzięki temu możemy sobie wykonać takie zapytanie:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> id<span style="color: #66cc66;">,</span> title<span style="color: #66cc66;">,</span> file <span style="color: #993333; font-weight: bold;">FROM</span> photo <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> RAND<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">LIMIT</span> <span style="color: #cc66cc;">5</span></pre></div></div>

<p>W odpowiedzi otrzymamy 5 zdjęć wybranych losowo. Jak to działa w praktyce? Silnik MySQL dla każdego wiersza z tabeli photo pobierze wartości id, title, file oraz wygeneruje losową wartość z przedziału &lt;0, 1&gt;. Następnie posortuje je w kolejności od najmniejszej do największej i zwróci 5 pierwszych wartości.</p>
<p><span id="more-381"></span></p>
<p>Jak działa RAND()? Troszkę inaczej niż u człowieka. Wymyśl sobie liczbę z przedziału 0 do 1000. Łatwe? Komputer tego nie potrafi! Nie jest spontaniczny, potrafi tylko liczyć. Dlatego podanie liczby losowej wbrew pozorom nie jest takie proste. Są różne algorytmy do liczenia takich liczb. Często opierają się na aktualnym czasie w mikrosekundach do tego wykonując jakieś skomplikowane obliczenia, aby liczba była za każdym razem inna. Fachowo nawet nie nazywa się to liczba losowa, tylko <strong>pseudolosowa</strong> :)</p>
<p>Po co o tym piszę? Trzeba sobie uświadomić, że jest to stosunkowo pracochłonny proces. W przypadku tabeli która ma kilka tysięcy rekordów nie stanowi to problemu. Jednak kiedy mamy kilkadziesiąt tysięcy rekordów, obliczenie dla każdego liczby losowej już trochę trwa.</p>
<p>Ale to jeszcze nic!</p>
<p>Najbardziej czasochłonne jest sortowanie! W przypadku sortowania po dowolnej kolumnie MySQL tworzy sobie indeksy. Tzn. nie sprawdza wszystkich rekordów, tylko od razu wie gdzie znajdzie rekordy o odpowiednich wartościach. Taki jakby katalog w bibliotece. Jak chcesz wypożyczyć książkę w bibliotece (co zdarza się coraz rzadziej) to pani sprawdza sobie w indeksie gdzie książka się znajduje i idzie do odpowiedniej półki, a nie sprawdza po kolei każdą książkę, czy przypadkiem to nie ta, której szuka :)</p>
<p>Skoro już wiadomo z jakiego powodu to zapytanie jest wolne dla dużej ilości danych, można przejść do usprawnienia tego procesu. Najpierw pobierzemy minimalną i maksymalną wartość kolumny id.</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: #000088;">$v</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_object</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SELECT MIN(id) min, MAX(id) max FROM photo'</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>Wybierzmy teraz losowy wiersz z tabeli photo:</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: #000088;">$randId</span> <span style="color: #339933;">=</span> <span style="color: #990000;">rand</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$v</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">min</span><span style="color: #339933;">,</span> <span style="color: #000088;">$v</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">max</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$randomRow</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_object</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT id, title, file FROM photo WHERE id &gt;= <span style="color: #006699; font-weight: bold;">$randId</span>  LIMIT 1&quot;</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>Losujemy liczbę pomiędzy minimalną wartością id, a maksymalną (w PHP funkcja rand() działa trochę inaczej), a następnie szukamy wiersza, który ma wartość większą lub równą tej liczbie. Dlaczego większą? Bo może się zdarzyć, że nie ma wiersza o takim id, wtedy będziemy szukać następnego.</p>
<p>No dobra, ale jak wybrać 5 rekordów? Wykonać 5 zapytań? Nie ma innego wyjścia, ale można to zrobić trochę sprytniej. Oto całość funkcji:</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: #000000; font-weight: bold;">function</span> getRandomPhotos<span style="color: #009900;">&#40;</span><span style="color: #000088;">$count</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$v</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_object</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SELECT MIN(id) min, MAX(id) max FROM photo'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$results</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">&gt;</span><span style="color: #000088;">$count</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$randId</span> <span style="color: #339933;">=</span> <span style="color: #990000;">rand</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$v</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">min</span><span style="color: #339933;">,</span> <span style="color: #000088;">$v</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">max</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$results</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;(SELECT id, title, file FROM photo WHERE id &gt;= <span style="color: #006699; font-weight: bold;">$randId</span> LIMIT 1)&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #990000;">mysql_fetch_object</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">' UNION '</span><span style="color: #339933;">,</span> <span style="color: #000088;">$results</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Tym sposobem, za pomocą 2 zapytań i trochę kodu PHP mamy bardzo szybki algorytm do wybierania losowych rekordów. Nie jest on oczywiście wolny od wad. Po pierwsze trzeba użyć kodu PHP do zapytania, czego się powinno unikać jeśli to możliwe. Można by napisać skrypt w MySQL (jeśli jest ktoś chętny to proszę :) ). Po drugie może się zdarzyć, że wybierzemy 2 razy ten sam wiersz. Żeby tego uniknąć trzeba by dopisać dodatkowe warunki. Ale tak jak już wspomniałem, jest sens bawić się w to rozwiązanie kiedy jest ogromna ilość rekordów. A wtedy prawdopodobieństwo wylosowania takiego rekordu jest bliskie 0.0000000001 :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.butcher.art.pl/2010/12/tutoriale/jak-przyspieszyc-mysql-order-by-rand/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Odliczanie do daty w JavaScript</title>
		<link>http://www.butcher.art.pl/2010/12/tutoriale/odliczanie-do-daty-w-javascript/</link>
		<comments>http://www.butcher.art.pl/2010/12/tutoriale/odliczanie-do-daty-w-javascript/#comments</comments>
		<pubDate>Fri, 03 Dec 2010 12:20:21 +0000</pubDate>
		<dc:creator>Kiniu</dc:creator>
				<category><![CDATA[Porady]]></category>

		<guid isPermaLink="false">http://www.butcher.art.pl/?p=376</guid>
		<description><![CDATA[Potrzebowałem dziś odliczania w do daty w JS. Ponieważ ostatnio otwieram się na gotowce postanowiłem poszukać w Google. Znalazłem kilka skryptów, ale żaden mi nie odpowiadał. W końcu znalazł się jeden jako-taki. Zacząłem go przerabiać, aż w końcu nie została z oryginału ani jedna linia kodu :) Dlatego kod uważam za swój i chętnie się [...]]]></description>
			<content:encoded><![CDATA[<p>Potrzebowałem dziś odliczania w do daty w JS. Ponieważ ostatnio otwieram się na gotowce postanowiłem poszukać w Google. Znalazłem kilka skryptów, ale żaden mi nie odpowiadał. W końcu znalazł się jeden jako-taki. Zacząłem go przerabiać, aż w końcu nie została z oryginału ani jedna linia kodu :) Dlatego kod uważam za swój i chętnie się nim dzielę.</p>
<p><span id="more-376"></span>Najpierw funkcja, która zwraca wartość tekstową z odliczaniem do pozostałej daty. Uznałem, że jeśli ilość dni czy godzin wynosi zero, to lepiej jej w ogóle nie pokazywać.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> countDown<span style="color: #009900;">&#40;</span>y<span style="color: #339933;">,</span> m<span style="color: #339933;">,</span> d<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> today <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #003366; font-weight: bold;">var</span> future <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span>y<span style="color: #339933;">,</span> m <span style="color: #339933;">-</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">,</span> d<span style="color: #009900;">&#41;</span>
	seconds <span style="color: #339933;">=</span> Math.<span style="color: #660066;">floor</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>future <span style="color: #339933;">-</span> today<span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> <span style="color: #CC0000;">1000</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>seconds <span style="color: #339933;">&lt;=</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span>
		<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #3366CC;">'Zakończono!'</span>
	minutes <span style="color: #339933;">=</span> Math.<span style="color: #660066;">floor</span><span style="color: #009900;">&#40;</span>seconds <span style="color: #339933;">/</span> <span style="color: #CC0000;">60</span><span style="color: #009900;">&#41;</span>
	hours <span style="color: #339933;">=</span> Math.<span style="color: #660066;">floor</span><span style="color: #009900;">&#40;</span>minutes <span style="color: #339933;">/</span> <span style="color: #CC0000;">60</span><span style="color: #009900;">&#41;</span>
	days <span style="color: #339933;">=</span> Math.<span style="color: #660066;">floor</span><span style="color: #009900;">&#40;</span>hours <span style="color: #339933;">/</span> <span style="color: #CC0000;">24</span><span style="color: #009900;">&#41;</span>
&nbsp;
	<span style="color: #003366; font-weight: bold;">var</span> output <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>seconds <span style="color: #339933;">%</span> <span style="color: #CC0000;">60</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot; &lt;span&gt;sek&lt;/span&gt; &quot;</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>seconds <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">60</span><span style="color: #009900;">&#41;</span>
		<span style="color: #000066; font-weight: bold;">return</span> output
	output <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>minutes <span style="color: #339933;">%</span> <span style="color: #CC0000;">60</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot; &lt;span&gt;min&lt;/span&gt; &quot;</span> <span style="color: #339933;">+</span> output
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>minutes <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">60</span><span style="color: #009900;">&#41;</span>
		<span style="color: #000066; font-weight: bold;">return</span> output
	output <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>hours <span style="color: #339933;">%</span> <span style="color: #CC0000;">24</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot; &lt;span&gt;godz&lt;/span&gt; &quot;</span> <span style="color: #339933;">+</span> output
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>hours <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">24</span><span style="color: #009900;">&#41;</span>
		<span style="color: #000066; font-weight: bold;">return</span> output
	<span style="color: #000066; font-weight: bold;">return</span> days <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot; &lt;span&gt;dni&lt;/span&gt; &quot;</span> <span style="color: #339933;">+</span> output
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Dni, godziny itd zostały objęte tagiem span, aby można było je ostylować w CSS&#8217;ie.<br />
Do tego oczywiście dochodzi wywołanie:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">setInterval<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#idElementu'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Do końca świata pozostało '</span> <span style="color: #339933;">+</span> countDown<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">2012</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">12</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">21</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Tutaj użyłem jQuery do przypisania tekstu do elementu HTML. Oczywiście można się bez tego obejść :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.butcher.art.pl/2010/12/tutoriale/odliczanie-do-daty-w-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symulator ruchu drogowego z bus-pasem</title>
		<link>http://www.butcher.art.pl/2010/11/projekty/flash/symulator-ruchu-z-bus-pasem/</link>
		<comments>http://www.butcher.art.pl/2010/11/projekty/flash/symulator-ruchu-z-bus-pasem/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 01:41:03 +0000</pubDate>
		<dc:creator>Kiniu</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.butcher.art.pl/?p=365</guid>
		<description><![CDATA[
Od pewnego czasu trwa spór o to czy bus-pasy są opłacalne&#8230; W zasadzie dość łatwo jest to obliczyć&#8230; ale po co? Skoro można to zrobić ciekawiej :)
Przy okazji wreszcie postanowiłem się przerzucić na AS3, dlatego podjąłem się tego ćwiczonka :)
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.butcher.art.pl/rozne/symulator.html" target="_blank"><img class="size-full wp-image-366 alignleft colorbox-365" title="Symulator" src="http://www.butcher.art.pl/files/2010/11/symulator.jpg" alt="" width="279" height="276" /></a></p>
<p>Od pewnego czasu trwa spór o to czy bus-pasy są opłacalne&#8230; W zasadzie dość łatwo jest to obliczyć&#8230; ale po co? Skoro można to zrobić ciekawiej :)</p>
<p>Przy okazji wreszcie postanowiłem się przerzucić na AS3, dlatego podjąłem się tego ćwiczonka :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.butcher.art.pl/2010/11/projekty/flash/symulator-ruchu-z-bus-pasem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parser wyciągów bankowych Millenium (format mt940)</title>
		<link>http://www.butcher.art.pl/2010/09/tutoriale/parser-php-mt940-format-wyciagow-bankowych/</link>
		<comments>http://www.butcher.art.pl/2010/09/tutoriale/parser-php-mt940-format-wyciagow-bankowych/#comments</comments>
		<pubDate>Wed, 22 Sep 2010 15:31:01 +0000</pubDate>
		<dc:creator>Kiniu</dc:creator>
				<category><![CDATA[Porady]]></category>

		<guid isPermaLink="false">http://www.butcher.art.pl/?p=348</guid>
		<description><![CDATA[Do projektu nad którym obecnie pracuję potrzebny jest parser wyciągów bankowych. Ponieważ, nie znalazłem interesującego rozwiązania napisałem własne. Niestety format ten nie jest do końca uniwersalny, ponieważ każdy bank ma swoją wersję tego formatu. Niniejszy parser obsługuje format banku Milenium (ten od Huberta : ).
Przy okazji postanowiłem napisać z tego krótki tutorial.
Zakładam, że format mt940 [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-352 alignright colorbox-348" style="margin: 0 0 10px 10px;" src="http://www.butcher.art.pl/files/2010/09/444pBank-milenium-logo.jpg" alt="" width="100" height="100" />Do projektu nad którym obecnie pracuję potrzebny jest parser wyciągów bankowych. Ponieważ, nie znalazłem interesującego rozwiązania napisałem własne. Niestety format ten nie jest do końca uniwersalny, ponieważ każdy bank ma swoją wersję tego formatu. Niniejszy parser obsługuje format banku Milenium (ten od Huberta : ).</p>
<p>Przy okazji postanowiłem napisać z tego krótki tutorial.</p>
<p><span id="more-348"></span>Zakładam, że format mt940 jest Czytelnikowi znany. Ale na wszelki wypadek krótkie wyjaśnienie. Plik tego formatu jest podzielony na wiersze. Każdy wiersz zaczyna się od tagu oraz danych:</p>
<pre style="background: #eee;">:TAG:DANE</pre>
<p>Tag może składać się ze znaków alfanumerycznych. Dodatkowo istnieją, pod-tagi, jeśli treść zawiera więcej niż jedną linię. Niestety tutaj nie ma standardu, co do tego od jakiego znaku zaczyna się pod-tag. W Milenium jest to &lt;, natomiast np. w Fortiis już ^. Wymyśliłem sposób, żeby parser był w miarę uniwersalny, ale o tym za chwilę. Przyjrzyjmy się fragmentowi pliku:</p>
<pre style="background: #eee;">:20:1720446
:25: PL30116022020000001111111111
:28C:143
:NS:22FIRMA 1 Właściciel rachunku
:NS:23Rachunek bieżący - KORPORACJE
:60F:C050619PLN1000,01
:61:0506200620CN100,00NTRFNONREF//
PRZELEW PRZYCHODZĄCY
:86:010&lt;00PRZELEW PRZYCHODZĄCY
&lt;100517100001
&lt;20PRZELEW PRZYCHODZĄCY
&lt;21Z R-ku:78101111110000000088888888
&lt;22ZAPŁATA ZA FAK.FV 1/6/2005
&lt;23Kontynuacja tytułu operacji</pre>
<p>Najpierw należy podzielić plik według tagów. Ponieważ, dane z jednego tagu mogą zajmować więcej niż jedną linię należy zrobić pewną sztuczkę. Może ona wyglądać np. tak:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> prepareFile<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$tab</span> <span style="color: #339933;">=</span> <span style="color: #990000;">file</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_fileName<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// otwieramy plik i dzielimy na linie</span>
	<span style="color: #000088;">$tags</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	   <span style="color: #666666; font-style: italic;">// tworzymy pustą tablicę dla tagów</span>
	<span style="color: #000088;">$tmp</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>    <span style="color: #666666; font-style: italic;">// tworzymy pusty bufor tagów</span>
	<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tab</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$line</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>	<span style="color: #666666; font-style: italic;">// dla każdej linii pliku</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$line</span><span style="color: #009900;">&#123;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">':'</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$tmp</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>    <span style="color: #666666; font-style: italic;">// sprawdzamy czy rozpoczyna tag</span>
			<span style="color: #000088;">$tags</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$tmp</span><span style="color: #339933;">;</span>    <span style="color: #666666; font-style: italic;">// jeśli jest to nowy tag i bufor nie jest pusty</span>
			<span style="color: #000088;">$tmp</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>            <span style="color: #666666; font-style: italic;">// to dodajemy bufor jako nowy tag</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000088;">$tmp</span> <span style="color: #339933;">.=</span> <span style="color: #000088;">$line</span><span style="color: #339933;">;</span>    <span style="color: #666666; font-style: italic;">// jeśli nie jest to nowy tag, to dodajemy do bufora</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000088;">$tags</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$tmp</span><span style="color: #339933;">;</span>    <span style="color: #666666; font-style: italic;">// dodajemy ostatni tag</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$tags</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Po tej operacji mamy otrzymujemy tablicę, która zawiera tagi oraz dane &#8211; również te wielowierszowe. W następnej kolejności parsujemy kolejno każdy element. Najpierw wydobywamy tag i dane:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$tag</span> <span style="color: #339933;">=</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$line</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$line</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">':'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$value</span> <span style="color: #339933;">=</span> <span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$line</span><span style="color: #339933;">,</span> <span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$line</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">':'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Następnie tworzymy prostego swtich&#8217;a, i w zależności od tagu wykonujemy odpowiednią operację.</p>
<p>W przypadku prostych wartości przypisujemy je do odpowiednich atrybutów klasy, natomiast wartości złożone przekazujemy do odpowiednich metod.</p>
<p>Dane dotyczące transakcji (tag :86:) składają się z wielu wierszy. Jednak zawsze na początku jest 3-znakowy typ trasnakcji, a zaraz potem pierwszy pod-tag. Dzięki temu możemy za pomocą tego kodu</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$delimiter</span> <span style="color: #339933;">=</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$value</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$tab</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$delimiter</span><span style="color: #339933;">,</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$value</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>rozbić dane dotyczące transakcji na poszczególne wiersze, niezależnie od tego jaki znak został użyty do oddzielenia wierszy.<br />
Banalne prawda?</p>
<p>Gotowy plik do ściągnięcia: <a href="http://www.butcher.art.pl/files/2010/09/parser-mt940.zip">Parser PHP mt940</a>.<br />
<strong>UWAGA!</strong> Nie ponoszę odpowiedzialności za działanie tego skryptu! :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.butcher.art.pl/2010/09/tutoriale/parser-php-mt940-format-wyciagow-bankowych/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nowa odsłona Notatnik Online</title>
		<link>http://www.butcher.art.pl/2010/09/aktualnosci/nowa-odslona-notatnik-online/</link>
		<comments>http://www.butcher.art.pl/2010/09/aktualnosci/nowa-odslona-notatnik-online/#comments</comments>
		<pubDate>Sun, 19 Sep 2010 10:21:25 +0000</pubDate>
		<dc:creator>Kiniu</dc:creator>
				<category><![CDATA[Aktualności]]></category>

		<guid isPermaLink="false">http://www.butcher.art.pl/?p=329</guid>
		<description><![CDATA[Całkowicie zmieniony wygląd serwisu Notatnik Online, który stworzyłem razem z kolegą, o czym pisałem tutaj.
Mojego autorstwa jest desgin i funkcjonalność, natomiast Lutek napisał silnik XML RPC.
Jako bazę do okienek użyłem świetnego pluginu do jQuery o nazwie AeroWindow. Na moje potrzeby został znacznie zmodyfikowany, a nawet podsunąłem Autorowi pomysł jak usunąć pewnego bug&#8217;a :)
]]></description>
			<content:encoded><![CDATA[<div id="attachment_328" class="wp-caption alignleft" style="width: 310px"><a href="http://www.butcher.art.pl/files/2010/09/notatnikonline.jpg"><img class="size-medium wp-image-328 colorbox-329" title="notatnikonline" src="http://www.butcher.art.pl/files/2010/09/notatnikonline-300x215.jpg" alt="" width="300" height="215" /></a><p class="wp-caption-text">Notatnik online</p></div>
<p>Całkowicie zmieniony wygląd serwisu <a href="http://notatnikonline.pl" target="_blank">Notatnik Online</a>, który stworzyłem razem z kolegą, o czym pisałem <a href="http://www.butcher.art.pl/2009/07/projekty/php/notatnik-online/">tutaj</a>.</p>
<p>Mojego autorstwa jest desgin i funkcjonalność, natomiast <a href="http://krawczyk.czest.pl">Lutek </a>napisał silnik XML RPC.</p>
<p>Jako bazę do okienek użyłem świetnego pluginu do jQuery o nazwie AeroWindow. Na moje potrzeby został znacznie zmodyfikowany, a nawet podsunąłem Autorowi pomysł jak usunąć pewnego bug&#8217;a :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.butcher.art.pl/2010/09/aktualnosci/nowa-odslona-notatnik-online/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

