<?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>Code42 &#187; HTML + CSS</title>
	<atom:link href="http://code42.pl/kategoria/html-css/feed/" rel="self" type="application/rss+xml" />
	<link>http://code42.pl</link>
	<description>Wielkie Pytanie o Życie, Kod i całą resztę</description>
	<lastBuildDate>Wed, 25 Jan 2012 14:16:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Moje prezentacje z DevMeetings i MeetJS</title>
		<link>http://code42.pl/2011/10/09/moje-prezentacje-z-devmeetings-i-meetjs/</link>
		<comments>http://code42.pl/2011/10/09/moje-prezentacje-z-devmeetings-i-meetjs/#comments</comments>
		<pubDate>Sun, 09 Oct 2011 13:59:58 +0000</pubDate>
		<dc:creator>Piotrek Reinmar Koszuliński</dc:creator>
				<category><![CDATA[HTML + CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[async]]></category>
		<category><![CDATA[deferred]]></category>
		<category><![CDATA[devmeetings]]></category>
		<category><![CDATA[middle-end]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[promise]]></category>

		<guid isPermaLink="false">http://code42.pl/?p=1255</guid>
		<description><![CDATA[Trzy tygodnie temu zapraszałem Was na warsztaty DevMeetings z middle-endu, które prowadziłem. Dodatkowo, czego jeszcze wtedy nie wiedziałem, zostałem zaproszony jako speaker na MeetJS do Krakowa, gdzie zdecydowałem się opowiedzieć o jednym wątku z DevMeetingu &#8211; asynchronicznej pułapce. Poniżej zamieszczam linki do tych prezentacji. Podobne wpisy:Moja prezentacja o Node.JS z Meet.JS i GTUG Wrocław Darmowe [...]


Podobne wpisy:<ol><li><a href='http://code42.pl/2012/01/25/moja-prezentacja-o-node-js-z-meet-js-i-gtug-wroclaw/' rel='bookmark' title='Moja prezentacja o Node.JS z Meet.JS i GTUG Wrocław'>Moja prezentacja o Node.JS z Meet.JS i GTUG Wrocław</a></li>
<li><a href='http://code42.pl/2010/12/31/darmowe-szkolenie-z-programowania-gier-w-javascript-by-devmeetings/' rel='bookmark' title='Darmowe szkolenie z programowania gier w JavaScript by DevMeetings'>Darmowe szkolenie z programowania gier w JavaScript by DevMeetings</a></li>
<li><a href='http://code42.pl/2011/09/20/zapraszam-na-darmowe-szkolenie-devmeeting-middle-end-w-oparciu-o-nodejs/' rel='bookmark' title='Zapraszam na darmowe szkolenie DevMeeting &ndash; middle-end w oparciu o NodeJS'>Zapraszam na darmowe szkolenie DevMeeting &ndash; middle-end w oparciu o NodeJS</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Trzy tygodnie temu <a href="http://code42.pl/2011/09/20/zapraszam-na-darmowe-szkolenie-devmeeting-middle-end-w-oparciu-o-nodejs/">zapraszałem Was</a> na <a href="http://devmeetings.pl/trainings/middle-end-w-oparciu-o-serverside-js">warsztaty DevMeetings z middle-endu</a>, które prowadziłem. Dodatkowo, czego jeszcze wtedy nie wiedziałem, zostałem zaproszony jako speaker na <a href="http://meetjs.pl">MeetJS</a> do Krakowa, gdzie zdecydowałem się opowiedzieć o jednym wątku z DevMeetingu &ndash; asynchronicznej pułapce. Poniżej zamieszczam linki do tych prezentacji.</p>
<p><a href="http://reinmar.github.com/dm-middle-end/pres/"><img src="http://code42.pl/wp-content/uploads/middleend.png" alt="Middle-end w oparciu o NodeJS @ DevMeetings by Piotrek Koszuliński"></p>
<p><a href="http://reinmar.github.com/meetjs-async/"><img src="http://code42.pl/wp-content/uploads/asynchroniczna_pulapka.png" alt="Asynchroniczna pułapka @ MeetJS by Piotrek Koszuliński"></p>


<p>Podobne wpisy:<ol><li><a href='http://code42.pl/2012/01/25/moja-prezentacja-o-node-js-z-meet-js-i-gtug-wroclaw/' rel='bookmark' title='Moja prezentacja o Node.JS z Meet.JS i GTUG Wrocław'>Moja prezentacja o Node.JS z Meet.JS i GTUG Wrocław</a></li>
<li><a href='http://code42.pl/2010/12/31/darmowe-szkolenie-z-programowania-gier-w-javascript-by-devmeetings/' rel='bookmark' title='Darmowe szkolenie z programowania gier w JavaScript by DevMeetings'>Darmowe szkolenie z programowania gier w JavaScript by DevMeetings</a></li>
<li><a href='http://code42.pl/2011/09/20/zapraszam-na-darmowe-szkolenie-devmeeting-middle-end-w-oparciu-o-nodejs/' rel='bookmark' title='Zapraszam na darmowe szkolenie DevMeeting &ndash; middle-end w oparciu o NodeJS'>Zapraszam na darmowe szkolenie DevMeeting &ndash; middle-end w oparciu o NodeJS</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://code42.pl/2011/10/09/moje-prezentacje-z-devmeetings-i-meetjs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript na jesień 2011</title>
		<link>http://code42.pl/2011/08/29/javascript-na-jesien-2011/</link>
		<comments>http://code42.pl/2011/08/29/javascript-na-jesien-2011/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 14:59:52 +0000</pubDate>
		<dc:creator>Piotrek Reinmar Koszuliński</dc:creator>
				<category><![CDATA[HTML + CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[chouchdb]]></category>
		<category><![CDATA[devmeetings]]></category>
		<category><![CDATA[frontend]]></category>
		<category><![CDATA[konferencja]]></category>
		<category><![CDATA[middle-end]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[redis]]></category>
		<category><![CDATA[ssjs]]></category>
		<category><![CDATA[wydajność]]></category>

		<guid isPermaLink="false">http://code42.pl/?p=1168</guid>
		<description><![CDATA[Nieubłaganie zbliżamy się do końca lata, a na pewno letniej pogody. Warto więc zaplanować sobie kilka indoorowych imprez. Oto moje propozycje: DevMeetings &#8211; hot topics Na początku lata ekipa z DevMeetings zorganizowała trzydniowy DevCamp, na którym wykrystalizowały się trzy ciekawe backendowe tematy. Teraz nadszedł czas, aby przyjrzeć im się dokładniej. I tak odbędą się po [...]


Podobne wpisy:<ol><li><a href='http://code42.pl/2011/05/08/falsy-values-2011-prawdziwy-javascriptowy-event/' rel='bookmark' title='Falsy Values 2011 &#8211; prawdziwy JavaScriptowy event'>Falsy Values 2011 &#8211; prawdziwy JavaScriptowy event</a></li>
<li><a href='http://code42.pl/2011/02/08/meet-js-javascriptowe-spotkanie-w-realu/' rel='bookmark' title='meet.js &#8211; JavaScriptowe spotkanie w realu'>meet.js &#8211; JavaScriptowe spotkanie w realu</a></li>
<li><a href='http://code42.pl/2010/12/31/darmowe-szkolenie-z-programowania-gier-w-javascript-by-devmeetings/' rel='bookmark' title='Darmowe szkolenie z programowania gier w JavaScript by DevMeetings'>Darmowe szkolenie z programowania gier w JavaScript by DevMeetings</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Nieubłaganie zbliżamy się do końca lata, a na pewno letniej pogody. Warto więc zaplanować sobie kilka indoorowych imprez. Oto moje propozycje:</p>
<h2><a href="http://devmeetings.pl">DevMeetings &ndash; hot topics</a></h2>
<p><img alt="DevMeetings - hot topics" src="http://code42.pl/wp-content/uploads/dm_logos.png" width="536" height="124"/></p>
<p>Na początku lata ekipa z DevMeetings zorganizowała trzydniowy <a href="http://devcamps.pl">DevCamp</a>, na którym wykrystalizowały się trzy ciekawe backendowe tematy. Teraz nadszedł czas, aby przyjrzeć im się dokładniej. I tak odbędą się po kolei:</p>
<p><span id="more-1168"></span></p>
<ul>
<li><strong><a href="http://devmeetings.pl/trainings/wydajno%C5%9B%C4%87-nodejs-kontra-reszta-%C5%9Bwiata">Wydajność Node.JS kontra reszta świata</a></strong> (3 września, Poznań) &ndash; kontrowersyjny temat &ndash; ile prawdy jest we wszystkich stwierdzeniach o super wydajności Node&#8217;a? Trochę na ten temat dowiedzieliśmy się już na <a href="http://devcamps.pl/">DevCampie</a> (polecam zajrzeć do materiałów z naszych badań), jednak wiele osób krytykowało zastosowane podejście jako zbyt oderwane od rzeczywistości. Dlatego tym razem postaramy przygotować się prawdziwą aplikację i na tej podstawie wyciągnąć wnioski. Rozpoczęła się już <a href="http://devmeetings.pl/trainings/wydajno%C5%9B%C4%87-nodejs-kontra-reszta-%C5%9Bwiata#forum">dyskusja</a>, o tym jak podejść do tematu. <strong>Ja oczywiście będę</strong>, a Ty wciąż możesz się <strong><a href="http://devmeetings.pl/trainings/wydajno%C5%9B%C4%87-nodejs-kontra-reszta-%C5%9Bwiata#registration_form">zarejestrować</a></strong>.</li>
<li><strong><a href="http://devmeetings.pl/trainings/bazy-nosqlowe-naturalny-storage-aplikacji-jsowych">Bazy noSQL-owe &ndash; naturalny storage aplikacji JSON-owych</a></strong> (10 września, Warszawa) &ndash; drugi temat na czasie, czyli bazy noSQL-owe (np. CouchDB, MongoDB, Redis). Meeting powinien być interesujący dla zwolenników, jak i przeciwników tego typu rozwiązań, w końcu nie ma nic lepszego niż potężny flame :). Jedni i drudzy dodatkowo dowiedzą się jak radzić sobie w nowym środowisku, które wymaga nowego podejścia (żegnaj <code>SELECT</code>, witaj <code>map-reduce</code>). Tym razem mnie nie będzie, bo do Warszawy mi zbyt daleko, ale i tak polecam :). Również można się jeszcze <strong><a href="http://devmeetings.pl/trainings/bazy-nosqlowe-naturalny-storage-aplikacji-jsowych#registration_form">zarejestrować</a></strong>.</li>
<li><strong><a href="http://devmeetings.pl/trainings/middle-end-w-oparciu-o-serverside-js">Middle-end w oparciu o serverside JavaScript</a></strong> (24 września, Kraków) &ndash; to temat, na który czekam z niecierpliwością. Z jednej strony bowiem wiem co to middle-end, o którym nawet <a href="http://code42.pl/2011/07/19/node-js-i-middle-end-przenosny-kod-i-emulacja-przegladarki/">pisałem</a>, a na <a href="http://devcamps.pl/topics/int_middle_end">DevCampie</a> bawiliśmy się w jego implementacje, z drugiej, faktyczna architektura całego przekroju zastosowań (nie tylko DOM po stronie serwera, ale też np. walidatory) jest dla mnie pewną zagadką. Polecam ten temat wszystkim, którzy zastanawiali się kiedyś tym, czy da się współdzielić kod pomiędzy serwerem i przeglądarką i jak do tego podejść. <strong>Ja oczywiście będę</strong> i zachęcam do <strong><a href="http://devmeetings.pl/trainings/middle-end-w-oparciu-o-serverside-js#registration_form">rejestrowania się</a></strong>.</li>
</ul>
<h2><a href="http://ongamestart.com/">onGameStart &ndash; first HTML5 conference</a></h2>
<p><img alt="onGameStart" src="http://code42.pl/wp-content/uploads/ogs.png" width="200" height="131" class="alignleft"/></p>
<p>Konferencja organizowana przez <a href="http://michalbe.blogspot.com/">Michała Budzyńskiego</a> odbędzie się <strong>22-23 września w Warszawie</strong>. Michałowi udało się ściągnąć wielu ciekawych prelegentów, więc na pewno warto posłuchać co mają do powiedzenia. W szczególności, że temat gier budowanych przy użyciu pakietu HTML5+CSS3+JS, jest ostatnimi czasy bardzo na topie i dużo w tej kwestii się dzieje. Mnie niestety nie będzie, mimo że <a href="http://ferrante.pl/frontend/javascript/ostateczna-lista-zwyciezcow-konkursu-na-najkrotszy-skrypt/">wygrałem bilet</a>, ale polecam zainteresowanym. Bilety po 79 i 89 euro są jeszcze <a href="http://www.amiando.com/onGameStart2011.html">do kupienia</a>. Można też spróbować <strong>wygrać bilet</strong> u <a href="http://blog.ily.li/2011/08/porcine-css3html5-contest/">Lidii Wilczyńskiej</a>.</p>
<h2><a href="http://frontrowconf.com/">Front Row Conference</a></h2>
<p><img alt="Front Row Conference" src="http://code42.pl/wp-content/uploads/fr.png" width="100" height="128" class="alignleft"/></p>
<p>Konferencja poświęcona frontendowi, która odbędzie się <strong>20-21 października w Krakowie</strong>. Póki co nie ogłoszono zbyt wielu prelegentów, ale dwóch może być Wam znanych. To wspomniany przeze mnie przed chwilą <a href="http://twitter.com/michalbe">Michał Budzyński</a> oraz znany uczestnikom DevMeetingów <a href="http://twitter.com/m4r00p">Marek Pawłowski</a>. Bilety <a href="http://frontrowconf.com/registration/">do kupienia</a> po 123 euro. Na razie, przyznam szczerze, odnoszę wrażenie, że organizatorom idzie topornie z organizacją, ale kibicuję im, bo im więcej tego typu imprez w Polsce, tym lepiej.</p>
<p><strong>Do zobaczenia we wrześniu i październiku!</strong></p>


<p>Podobne wpisy:<ol><li><a href='http://code42.pl/2011/05/08/falsy-values-2011-prawdziwy-javascriptowy-event/' rel='bookmark' title='Falsy Values 2011 &#8211; prawdziwy JavaScriptowy event'>Falsy Values 2011 &#8211; prawdziwy JavaScriptowy event</a></li>
<li><a href='http://code42.pl/2011/02/08/meet-js-javascriptowe-spotkanie-w-realu/' rel='bookmark' title='meet.js &#8211; JavaScriptowe spotkanie w realu'>meet.js &#8211; JavaScriptowe spotkanie w realu</a></li>
<li><a href='http://code42.pl/2010/12/31/darmowe-szkolenie-z-programowania-gier-w-javascript-by-devmeetings/' rel='bookmark' title='Darmowe szkolenie z programowania gier w JavaScript by DevMeetings'>Darmowe szkolenie z programowania gier w JavaScript by DevMeetings</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://code42.pl/2011/08/29/javascript-na-jesien-2011/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Opóźnione zwijanie drop-down menu przy pomocy CSS transitions</title>
		<link>http://code42.pl/2011/07/15/opoznione-zwijanie-drop-down-menu-przy-pomocy-css-transitions/</link>
		<comments>http://code42.pl/2011/07/15/opoznione-zwijanie-drop-down-menu-przy-pomocy-css-transitions/#comments</comments>
		<pubDate>Fri, 15 Jul 2011 22:02:10 +0000</pubDate>
		<dc:creator>Piotrek Reinmar Koszuliński</dc:creator>
				<category><![CDATA[HTML + CSS]]></category>
		<category><![CDATA[css-transitions]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[drop-down]]></category>

		<guid isPermaLink="false">http://code42.pl/?p=958</guid>
		<description><![CDATA[Rozwiązałem dzisiaj zupełnym przypadkiem dwa problemy związane z niedorozwinięciem CSS-a na jakie trafiam co jakiś czas. Istnieje pewne prawdopodobieństwo, że komuś przyda się moje rozwiązanie, więc o to i ono. Miałem dzisiaj za zadanie stworzyć typowe drop-down menu rozwijające się po najechaniu. Typowa sytuacja. Ze względów estetycznych otwieranie pozycji powinno się animować, a ze względów [...]


Podobne wpisy:<ol><li><a href='http://code42.pl/2010/04/04/dwukolumnowa-lista-definicji-edit-w-html5-lista-opisow/' rel='bookmark' title='Dwukolumnowa lista definicji (edit: w HTML5 lista opisów (?))'>Dwukolumnowa lista definicji (edit: w HTML5 lista opisów (?))</a></li>
<li><a href='http://code42.pl/2009/11/23/zen-coding-snippety-do-kosza/' rel='bookmark' title='Zen Coding &#8211; snippety do kosza'>Zen Coding &#8211; snippety do kosza</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://pacman.mulabs.org/ts/delayed_menu.html" title="Działający przykład"><img src="http://code42.pl/wp-content/uploads/deleyed.png" alt="Rozwijane menu" width="536" height="140"/></a></p>
<p>Rozwiązałem dzisiaj zupełnym przypadkiem dwa problemy związane z niedorozwinięciem CSS-a na jakie trafiam co jakiś czas. Istnieje pewne prawdopodobieństwo, że komuś przyda się moje rozwiązanie, więc o to i ono.</p>
<p>Miałem dzisiaj za zadanie stworzyć typowe drop-down menu rozwijające się po najechaniu. Typowa sytuacja. Ze względów estetycznych otwieranie pozycji powinno się animować, a ze względów UX nie powinno zwijać się od razu po zjechaniu myszką, bo przecież nikt tego nie lubi. Z lenistwa też, niechęci do scriptaculousa i możliwości wymuszenia przeglądarki postanowiłem wszystko zrobić za pomocą CSS transitions. Załóżmy, że stworzyłem sobie taki kod HTML:</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;ul</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;menu&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;li<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;span<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Kaczka<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/span<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;ul<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;li<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>dzióbek<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/li<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			(...)
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/ul<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/li<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;li<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;span<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Donald<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/span<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;ul<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			(...)
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/ul<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/li<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	(...)
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/ul<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p><span id="more-958"></span></p>
<p>Pierwszy problem na który trafiłem to niemożliwość tworzenia przejść do <code>height: auto</code>, a nie znam wysokości listy opcji. Googiel pomógł podpowiadając, że mogę zrobić przejście dla <code>max-height</code>. Np. tak:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#menu</span> ul <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">max-height</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">overflow</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">hidden</span><span style="color: #00AA00;">;</span>
	transition<span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">max-height</span> 0.5s ease-in-out<span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#menu</span> <span style="color: #3333ff;">:hover </span>ul <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">max-height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1000px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Gdzie <code>1000px</code> to jakaś wartość, którą możemy przyjąć za bezpieczny szacunek maksymalnej wysokości listy opcji. W wielu przypadkach jednak to rozwiązanie ma spory minus &#8211; wizualnie submenu zaczyna nam się zwijać po bliżej nieokreślonym czasie. Ale zaraz&#8230; Przecież tego właśnie chciałem &ndash; żeby menu zwijało mi się dopiero po chwili od opuszczenia jego obszaru.</p>
<p>I tak właśnie powstał <a href="http://pacman.mulabs.org/ts/delayed_menu.html"> Chocapic (działający przykład)</a>.</p>
<p>Rozwiązanie oczywiście idealne nie jest (wspomniany nieokreślony czas na zwinięcie i gubienie hovera od razu po zjechaniu, jeszcze przed zwinięciem) i tam gdzie jakość rozwiązania jest najważniejsza bym go nie polecał. Mi jednak w pełni wystarczyło i spodobała mi się jego prostota.</p>
<p>Przewidując nadchodzące pytania &ndash; tak mamy opcję delay dla transition, ale jej użycie spowodowałoby również opóźnienie na starcie (przy rozwijaniu), czego byśmy nie chcieli.</p>
<p>Czy mamy jakiś wpływ na opóźnienie zwijania? Tak. Im większy <code>max-height</code> wybierzemy, tym później menu zacznie nam się zwijać. Skutkiem ubocznym będzie też przyszypszenie&trade; samej animacji, co jest kolejną niedogodnością.</p>


<p>Podobne wpisy:<ol><li><a href='http://code42.pl/2010/04/04/dwukolumnowa-lista-definicji-edit-w-html5-lista-opisow/' rel='bookmark' title='Dwukolumnowa lista definicji (edit: w HTML5 lista opisów (?))'>Dwukolumnowa lista definicji (edit: w HTML5 lista opisów (?))</a></li>
<li><a href='http://code42.pl/2009/11/23/zen-coding-snippety-do-kosza/' rel='bookmark' title='Zen Coding &#8211; snippety do kosza'>Zen Coding &#8211; snippety do kosza</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://code42.pl/2011/07/15/opoznione-zwijanie-drop-down-menu-przy-pomocy-css-transitions/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Falsy Values 2011 &#8211; prawdziwy JavaScriptowy event</title>
		<link>http://code42.pl/2011/05/08/falsy-values-2011-prawdziwy-javascriptowy-event/</link>
		<comments>http://code42.pl/2011/05/08/falsy-values-2011-prawdziwy-javascriptowy-event/#comments</comments>
		<pubDate>Sun, 08 May 2011 21:14:04 +0000</pubDate>
		<dc:creator>Piotrek Reinmar Koszuliński</dc:creator>
				<category><![CDATA[HTML + CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Różne]]></category>
		<category><![CDATA[ecmascript]]></category>
		<category><![CDATA[falsy values]]></category>
		<category><![CDATA[konferencja]]></category>
		<category><![CDATA[node.js]]></category>

		<guid isPermaLink="false">http://code42.pl/?p=937</guid>
		<description><![CDATA[Kto nie był w zeszłym roku na konferencji Front Trends ten, czytając świetne recenzje jakie dostała, na pewno tego żałował. Sam byłem w Warszawie i wiem, że dobrze zainwestowałem swój czas i pieniądze, bo to jedyne tego typu wydarzenie w Polsce, jakie pamiętam. Wystarczy spojrzeć na listę prelegentów, którzy wzięli udział w konferencji. Douglas Crockford, [...]


Podobne wpisy:<ol><li><a href='http://code42.pl/2011/08/29/javascript-na-jesien-2011/' rel='bookmark' title='JavaScript na jesień 2011'>JavaScript na jesień 2011</a></li>
<li><a href='http://code42.pl/2010/12/31/darmowe-szkolenie-z-programowania-gier-w-javascript-by-devmeetings/' rel='bookmark' title='Darmowe szkolenie z programowania gier w JavaScript by DevMeetings'>Darmowe szkolenie z programowania gier w JavaScript by DevMeetings</a></li>
<li><a href='http://code42.pl/2010/12/19/obiektowy-javascript-i-wlasciwosci-chronione-w-poszukiwaniu-swietego-graala/' rel='bookmark' title='Obiektowy JavaScript i właściwości chronione &#8211; w poszukiwaniu Świętego Graala'>Obiektowy JavaScript i właściwości chronione &#8211; w poszukiwaniu Świętego Graala</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://falsyvalues.com/" title="Falsy Values 2011 - A True JavaScript Event"><img src="http://code42.pl/wp-content/uploads/falsy_values.png" width="536" height="140" alt="Falsy Values 2011 - A True JavaScript Event"/></a></p>
<p>Kto nie był w zeszłym roku na konferencji <a href="http://front-trends.com/">Front Trends</a> ten, czytając świetne recenzje jakie dostała, na pewno tego żałował. Sam byłem w Warszawie i wiem, że dobrze zainwestowałem swój czas i pieniądze, bo to jedyne tego typu wydarzenie w Polsce, jakie pamiętam. Wystarczy spojrzeć na <a href="http://front-trends.com/speakers">listę prelegentów</a>, którzy wzięli udział w konferencji. <a href="http://crockford.com">Douglas Crockford</a>, <a href="http://tantek.com">Tantek Çelik</a>, <a href="http://www.quirksmode.org/">Peter-Paul Koch</a> to bez wątpienia gwiazdy, których przedstawiać nie trzeba. Jednak bardzo dobre wrażenie zrobili na mnie również mniej znani prelegenci, jak <a href="http://cjohansen.no">Christian Johansen</a>, <a href="http://mozilla.org">Zbigniew Braniecki</a> (jako moderator panelu dyskusyjnego), czy <a href="http://webreflection.blogspot.com">Andrea Giammarchi</a>.</p>
<p>Jedyny zarzut (poza drobnymi problemami organizacyjnymi i kilkoma odstającymi poziomem prelegentami), jaki słyszałem w stosunku do zeszłorocznej konferencji to zbyt małe nastawienie na JavaScript. W tym roku <a href="http://varjs.com">Damian Wielgosik</a> i <a href="http://czerski.info/">Paweł Czerski</a>, twórcy Front Trends, postanowili wyjść na przeciw krytykom i już za 2 tygodnie, w dniach <strong>18-20 maja w Warszawie</strong> odbędzie się <strong>konferencja i 2 dni warsztatów pod nazwą <a href="http://falsyvalues.com/">Falsy Values</a></strong>. Tym razem, z pewnością, będzie to &#8222;True JavaScript Event&#8221;. W dodatku obsada zapowiada się jeszcze ciekawiej i równiej. Nie dość, że gościć będą wszyscy wielcy z Front Trends (poza PPK-em), to spotkać będzie można również kilku nowych, dobrze znanych, developerów, m.in. <a href="http://dmitrysoshnikov.com">Dmitry&#8217;a Soshnikova</a>, <a href="http://perfectionkills.com">Juriy&#8217;a &#8222;kangax&#8221; Zaytseva</a> oraz <a href="http://pornel.net">Kornela &#8222;porneL&#8221; Lesińskiego</a>.</p>
<p><span id="more-937"></span></p>
<p><a href="http://falsyvalues.com/speakers.html" title="Prelegenci"><img src="http://code42.pl/wp-content/uploads/falsy_values_speakers.png" width="536" height="230" alt="Prelegenci: m.in. Douglas Crockford i Tantek Çelik"/></a></p>
<p>W chwili obecnej <strong>zakupić można jeszcze <a href="http://falsyvalues.com/registration.html">bilety wstępu</a></strong> (upoważniające również do udziału w konferencji) na wszystkie warsztaty poza jednymi prowadzonymi przez Tanteka Çelika. Do wyboru mamy więc node.js, wstęp do JavaScriptu, gry, ECMAScript 5, Test Driven Development i aplikacje desktopowe. Można zakupić też bilet jedynie na piątkową konferencję. Ceny wahają się w zależności od tematu warsztatów i długości (są jedno i dwudniowe) i wydaje mi się, że nie są wygórowane, w szczególności kiedy porównamy je z dotyczącymi podobnych eventów organizowanych za naszą zachodnią granicą.</p>
<p>Jeśli o mnie chodzi, to ze względu na studia pojawię się tylko w piątek na konferencji (dziękuję tutaj Damianowi za zaproszenie). Zapowiada się wspaniały dzień, ponieważ plan prelekcji jest wyśmienity. Wiem, że ani nie będę mógł się spóźnić (Douglas Crockford na początek), ani wcześniej wyjść (Tantek Çelik na koniec), ani nawet przysnąć w środku (Dmitry Soshnikov). W szczególności nie mogę doczekać się występu tego trzeciego, ponieważ będzie mówił o ECMAScript 6, a kto <a href="http://code42.pl/2010/12/19/obiektowy-javascript-i-wlasciwosci-chronione-w-poszukiwaniu-swietego-graala/">czytał mnie wcześniej</a>, wie, że interesuje mnie rozwój tego standardu.</p>
<p>Tak więc, <strong>do zobaczenia w Warszawie!</strong></p>


<p>Podobne wpisy:<ol><li><a href='http://code42.pl/2011/08/29/javascript-na-jesien-2011/' rel='bookmark' title='JavaScript na jesień 2011'>JavaScript na jesień 2011</a></li>
<li><a href='http://code42.pl/2010/12/31/darmowe-szkolenie-z-programowania-gier-w-javascript-by-devmeetings/' rel='bookmark' title='Darmowe szkolenie z programowania gier w JavaScript by DevMeetings'>Darmowe szkolenie z programowania gier w JavaScript by DevMeetings</a></li>
<li><a href='http://code42.pl/2010/12/19/obiektowy-javascript-i-wlasciwosci-chronione-w-poszukiwaniu-swietego-graala/' rel='bookmark' title='Obiektowy JavaScript i właściwości chronione &#8211; w poszukiwaniu Świętego Graala'>Obiektowy JavaScript i właściwości chronione &#8211; w poszukiwaniu Świętego Graala</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://code42.pl/2011/05/08/falsy-values-2011-prawdziwy-javascriptowy-event/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Darmowe szkolenie z programowania gier w JavaScript by DevMeetings</title>
		<link>http://code42.pl/2010/12/31/darmowe-szkolenie-z-programowania-gier-w-javascript-by-devmeetings/</link>
		<comments>http://code42.pl/2010/12/31/darmowe-szkolenie-z-programowania-gier-w-javascript-by-devmeetings/#comments</comments>
		<pubDate>Fri, 31 Dec 2010 15:34:17 +0000</pubDate>
		<dc:creator>Piotrek Reinmar Koszuliński</dc:creator>
				<category><![CDATA[HTML + CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programowanie gier]]></category>
		<category><![CDATA[szkolenie]]></category>

		<guid isPermaLink="false">http://code42.pl/?p=813</guid>
		<description><![CDATA[Dzisiaj nie będę pisał bezpośrednio JavaScriptcie. Tym razem produkować będzie się ktoś inny. I to nie byle ktoś i nie na byle jaki temat. Otóż DevMeetings zaprasza na cykl (Wrocław, Warszawa, Poznań, Kraków, Gdańsk) dwudniowych, darmowych szkoleń pt. Programowanie gier w JavaScript. Pierwsze szkolenie już 8-9 stycznia we Wrocławiu. Zapisy na stronie. Ilość miejsc ograniczona [...]


Podobne wpisy:<ol><li><a href='http://code42.pl/2011/09/20/zapraszam-na-darmowe-szkolenie-devmeeting-middle-end-w-oparciu-o-nodejs/' rel='bookmark' title='Zapraszam na darmowe szkolenie DevMeeting &ndash; middle-end w oparciu o NodeJS'>Zapraszam na darmowe szkolenie DevMeeting &ndash; middle-end w oparciu o NodeJS</a></li>
<li><a href='http://code42.pl/2011/10/09/moje-prezentacje-z-devmeetings-i-meetjs/' rel='bookmark' title='Moje prezentacje z DevMeetings i MeetJS'>Moje prezentacje z DevMeetings i MeetJS</a></li>
<li><a href='http://code42.pl/2011/08/29/javascript-na-jesien-2011/' rel='bookmark' title='JavaScript na jesień 2011'>JavaScript na jesień 2011</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img src="http://code42.pl/wp-content/uploads/szkolenie_js_gry.jpg" alt="Szkolenie z programowania gier w JavaScript" height="183"/></p>
<p>Dzisiaj nie będę pisał bezpośrednio JavaScriptcie. Tym razem produkować będzie się ktoś inny. I to nie byle ktoś i nie na byle jaki temat. Otóż <a href="http://devmeetings.pl/">DevMeetings</a> zaprasza na cykl (<strong>Wrocław, Warszawa, Poznań, Kraków, Gdańsk</strong>) dwudniowych, <strong>darmowych</strong> szkoleń pt. <strong>Programowanie gier w JavaScript</strong>. Pierwsze szkolenie już 8-9 stycznia we Wrocławiu. Zapisy na <a href="http://devmeetings.pl/">stronie</a>. Ilość miejsc ograniczona do 10, tak więc będzie dość kameralnie.</p>
<p><span id="more-813"></span></p>
<h2>Kto to taki</h2>
<p><a href="http://devmeetings.pl/">DevMeetings</a> oficjalnie istnieje od niedawna (dokładnie, to przed świętami strona jeszcze nie istniała :) jednak już rok temu skorzystałem z jednego z ich szkoleń. Za całą inicjatywą od strony organizacyjnej i finansowej stoi przede wszystkim Piotr Zwoliński (m.in. <a href="http://frontendforce.com/">Frontend Force</a> i <a href="http://devjobs.pl/">DevJobs</a>), którego pewnie sporo osób miało już przyjemność poznać podczas szkoleń, na których się pojawił oraz konferencji <a href="http://front-trends.com/">Front-Trends 2010</a>, której jeśli się nie mylę był współorganizatorem. Piotrek jest niezwykle aktywny i ma dużo ciekawych pomysłów na pobudzenie naszej <a href="http://blog.koszulinski.pl/2010/12/26/gdzie-ta-spolecznosc-polskich-frontendowcow/">skamieniałej społeczności</a>, więc mocno mu kibicuję :). Dodatkowo pomagali mu (nie wiem jak teraz) David de Rosier oraz <a href="http://ferrante.pl">Damian Ferrante Wielgosik</a>, którzy byli też prowadzącymi.</p>
<p>Jak już wspomniałem rok temu odbyło się, kilka cyklów darmowych szkoleń &ndash; między innymi cztery z <a href="http://ferrante.pl/2010/01/21/darmowe-szkolenie-javascript/">Zaawansowanego JavaScriptu</a> poprowadzone przez Damiana, z których na jednym sam byłem (<a href="http://ferrante.pl/2010/05/29/szkolenia-dla-firm/">linki do relacji</a>, <a href="http://www.rekrutacyjny.pl/szkolenia.php">stare informacje o szkoleniach</a>).</p>
<p>Jak oceniam szkolenie? Bardzo pozytywnie. Damian jest ekspertem od JavaScriptu (polecam lekturę starszych wpisów na jego blogu). W dodatku świetnie poradził sobie z prowadzeniem szkolenia, które oparł na swojej prezentacji (<a href="http://varjs.com/">w wersji angielskiej</a>) oraz programowaniu na żywo. Szkolenie we Wrocławiu, na którym byłem, było pierwsze w kolejności i z tego co wiem później Damian wprowadził sporo ulepszeń do programu i w następnych miastach całość ewoluowała trochę bardziej w kierunku warsztatów.</p>
<p>Szkolenie trwało dwa dni i pomogło mi w krótkim czasie zrobić duży krok w znajomości języka. Oczywiście samo w sobie było bardzo intensywne i później wszystko musiałem sobie na spokojnie poukładać w głowie. Jednak po prawie roku mogę powiedzieć, że te 16h spędzonych z Damianem to jak miesiąc czytania książek.</p>
<p>Szkolenie z programowania gier w JavaScripcie poprowadzi Marek Pawłowski, którego nie znam, ale mogę zapewnić, że również będzie wiedział o czym mówi :) Więcej informacji o nim na <a href="http://devmeetings.pl/">stronie szkolenia</a>.</p>
<h2>Dlaczego będę</h2>
<p>Na szkolenie już się zapisałem i, o ile nie odrzucą mojej kandydatury, powinniśmy spotkać się we <del>Wrocławiu</del> <ins>Krakowie (zmieniłem plany ze względu na uczelnię)</ins> :). Co ważne &ndash; jeśli zgłosi się dużo osób liczyć nie będzie się czas zgłoszenia, a doświadczenie i przydatność znajomości jego tematyki, nam developerom, w karierze zawodowej. W dodatku, jako że informacja o szkoleniu we Wrocławiu pojawiła się bardzo niedawno, możliwe, że zgłosi się do tego miasta mało osób. Polecam więc próbować nawet jeśli nie macie pewności co do tego, że &#8222;nadajecie się&#8221;.</p>
<p>Tematyka gier, a w szczególności przeglądarkowych, nie za bardzo mnie kręci. Sam gram mało i do tego tylko w symulatory wyścigowe. Jednak to nie gry mnie zainteresowały, tylko technologie, które zostaną omówione.</p>
<p>Szkolenie na którym byłem rok temu było typowym szkoleniem z JavaScriptu jako samego języka. Scope, obiekty, prototypy, tablice, funkcje, dobre praktyki, itd. Szkolenie z programowania gier musi objąć inny podzbiór JavaScriptu, a mianowicie toolkit przydatny przy pisaniu gier i zaawansowane praktyki tworzenia UI. Pojawi się więc responsywność aplikacji, optymalizacja kodu na poziomie języka, optymalizacja operacji na DOM i Canvasie, informacje o engine&#8217;ach przeglądarek, komunikacja z serwerem (REST, JSONP, long polling, WebSockety. Dodatkowo mam nadzieję dowiedzieć się więcej o tworzeniu i architekturze dużych aplikacji w JavaScriptcie, ponieważ w programie są informacje o MVC, systemach złożonych z widgetów oraz TDD.</p>
<h2>PS</h2>
<p>Z informacji od organizatorów szkolenia wiem, że o ile się uda będzie sporo wspólnego programowania. Nigdy nie brałem udziału w takich warsztatach i trochę się boję. Tak więc liczę, że nie będę tam najsłabszy :).</p>
<p>Właśnie przeczytałem swój wpis i stwierdzam, że nie pojawiło się ani jedno krytyczne słowo w stosunku do tych szkoleń :). Ale żeby zachować równowagę, to powiem, że nie dali kawy, a 8ma rano to za wcześnie (rok temu się spóźniłem). Cóż &ndash; mimo tych poważnych minusów polecam i sam nie mogę się doczekać.</p>
<p class="image_credits">Zdjęcie autorstwa: <a href="http://www.flickr.com/photos/tangst/">Stephen</a>.</p>


<p>Podobne wpisy:<ol><li><a href='http://code42.pl/2011/09/20/zapraszam-na-darmowe-szkolenie-devmeeting-middle-end-w-oparciu-o-nodejs/' rel='bookmark' title='Zapraszam na darmowe szkolenie DevMeeting &ndash; middle-end w oparciu o NodeJS'>Zapraszam na darmowe szkolenie DevMeeting &ndash; middle-end w oparciu o NodeJS</a></li>
<li><a href='http://code42.pl/2011/10/09/moje-prezentacje-z-devmeetings-i-meetjs/' rel='bookmark' title='Moje prezentacje z DevMeetings i MeetJS'>Moje prezentacje z DevMeetings i MeetJS</a></li>
<li><a href='http://code42.pl/2011/08/29/javascript-na-jesien-2011/' rel='bookmark' title='JavaScript na jesień 2011'>JavaScript na jesień 2011</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://code42.pl/2010/12/31/darmowe-szkolenie-z-programowania-gier-w-javascript-by-devmeetings/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dwukolumnowa lista definicji (edit: w HTML5 lista opisów (?))</title>
		<link>http://code42.pl/2010/04/04/dwukolumnowa-lista-definicji-edit-w-html5-lista-opisow/</link>
		<comments>http://code42.pl/2010/04/04/dwukolumnowa-lista-definicji-edit-w-html5-lista-opisow/#comments</comments>
		<pubDate>Sun, 04 Apr 2010 19:27:55 +0000</pubDate>
		<dc:creator>Piotrek Reinmar Koszuliński</dc:creator>
				<category><![CDATA[HTML + CSS]]></category>

		<guid isPermaLink="false">http://code42.pl/?p=577</guid>
		<description><![CDATA[Będzie krótko, bo jutro święto jakieś :) Od bardzo dawna przy wielu stronach natrafiałem na problem w jaki sposób ostylować listę definicji opisów (patrz komentarze) dl, tak aby elementy dt wyświetlały się na lewo od elementów dd. Przy czym kod musiał spełniać warunki: lista musiała się nie rozsypywać w przypadku różnej wysokości elementów dt i [...]


Podobne wpisy:<ol><li><a href='http://code42.pl/2009/04/17/jak-przycinac-i-skalowac-obrazki/' rel='bookmark' title='Jak przycinać i skalować obrazki?'>Jak przycinać i skalować obrazki?</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://pacman.mulabs.org/ts/dlls3.html"><img src="http://pacman.mulabs.org/ts/dwukolumnowa-lista.png" alt="Zajawka dwukolumnowej list"/></a></p>
<p>Będzie krótko, bo jutro święto jakieś :)</p>
<p>Od bardzo dawna przy wielu stronach natrafiałem na problem w jaki sposób ostylować listę <del>definicji</del> <ins>opisów (<a href="#oryginalne-komentarze">patrz komentarze</a>)</ins> <code>dl</code>, tak aby elementy <code>dt</code> wyświetlały się na lewo od elementów <code>dd</code>. Przy czym kod musiał spełniać warunki:</p>
<ul>
<li>lista musiała się nie rozsypywać w przypadku różnej wysokości elementów <code>dt</code> i <code>dd</code>,</li>
<li>szerokość listy mogła być zmienna,</li>
<li>ustaloną szerokość miały elementy <code>dt</code>. Elementy <code>dd</code> miały się rozszerzać do maksymalnej dostępnej szerokości.</li>
</ul>
<p><span id="more-577"></span></p>
<p>Nigdy nie miałem ochoty się w ten problem zagłębiać i jeśli już stałem pod ścianą to każdy &#8222;wiersz&#8221; takiej listy pakowałem do osobnego elementu <code>dl</code>, co rozwiązywało najtrudniejszy problem, czyli odpowiedniego ułożenia elementów w pionie. W sumie, to z tego niezbyt pięknego rozwiązania korzystałem często, bo w ten sposób używam listy definicji do tworzenia formularzy.</p>
<p>Ostatnio postanowiłem jednak rozwiązać swój odwieczny problem i po wielu próbach &mdash; między innymi z różnymi kombinacjami <code>float</code>ów, <code>display:inline-block</code> i wieloma dziwactwami &mdash; udało mi się znaleźć kilka rozwiązań, które działały, ale np. do momentu kiedy nie rozszerzyło się całej listy do sporej szerokości, albo nie nastąpił jakiś przypadek stosunków szerokości. Wpadłem jednak przed chwilą na rozwiązanie, które działa w każdym interesującym mnie przypadku i aż chcę się pochwalić :).</p>
<p>Skrócony kod HTML:</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;dl<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dt<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Widelec<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dt<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dd<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Jest biały i leży na moim biurku.<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dd<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dt<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Widelec<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dt<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dd<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Jest biały i leży na moim biurku.<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dd<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
...
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dl<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>I skrócony kod CSS:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">dl <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">70%</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">min-width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">40em</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">overflow</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">hidden</span><span style="color: #00AA00;">;</span>
	...
<span style="color: #00AA00;">&#125;</span>
dt <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">float</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">left</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">15em</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">clear</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">both</span><span style="color: #00AA00;">;</span>
	...
<span style="color: #00AA00;">&#125;</span>
dd<span style="color: #3333ff;">:after </span><span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">content</span><span style="color: #00AA00;">:</span> <span style="color: #ff0000;">'<span style="color: #000099; font-weight: bold;">\0</span>0a0'</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">block</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">clear</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">left</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">float</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">right</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
dd <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">0</span> <span style="color: #933;">0.5em</span> <span style="color: #933;">18em</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">clear</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">right</span><span style="color: #00AA00;">;</span>
	...
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p><a href="http://pacman.mulabs.org/ts/dlls3.html">Działający przykład</a>.</p>
<p>Cała magia zawiera się w regule dla <code>dd:after</code>. To ona powoduje, że jeśli element <code>dt</code> jest wyższy od następującej po nim definicji, to następna definicja jest wyświetlana w odpowiednim miejscu (nie przeskakuje ponad swój temat).</p>
<p id="oryginalne-komentarze">Wpis ukazał się początkowo na moim blogu prywatnym, gdzie znajdują się komentarze: <a href="http://blog.koszulinski.pl/2010/04/04/dwukolumnowa-lista-definicji/">Dwukolumnowa lista definicji</a>.</p>


<p>Podobne wpisy:<ol><li><a href='http://code42.pl/2009/04/17/jak-przycinac-i-skalowac-obrazki/' rel='bookmark' title='Jak przycinać i skalować obrazki?'>Jak przycinać i skalować obrazki?</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://code42.pl/2010/04/04/dwukolumnowa-lista-definicji-edit-w-html5-lista-opisow/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dlaczego frameworki CSS ssą?</title>
		<link>http://code42.pl/2010/01/29/dlaczego-frameworki-css-ssa/</link>
		<comments>http://code42.pl/2010/01/29/dlaczego-frameworki-css-ssa/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 13:07:16 +0000</pubDate>
		<dc:creator>Piotrek Reinmar Koszuliński</dc:creator>
				<category><![CDATA[HTML + CSS]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[framework]]></category>

		<guid isPermaLink="false">http://code42.pl/?p=453</guid>
		<description><![CDATA[Sesja się już dla mnie skończyła, można więc coś napisać. Dzisiaj będzie jednak krótko, bo i temat prosty. Cóż to takiego framework CSS? No właśnie. Każdy wie co to są frameworki programistyczne, ale CSSowy? Według wiki: A CSS framework, also known as a web design framework is a pre-prepared library that is meant to allow [...]


Podobne wpisy:<ol><li><a href='http://code42.pl/2009/11/23/zen-coding-snippety-do-kosza/' rel='bookmark' title='Zen Coding &#8211; snippety do kosza'>Zen Coding &#8211; snippety do kosza</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Sesja się już dla mnie skończyła, można więc coś napisać. Dzisiaj będzie jednak krótko, bo i temat prosty.</p>
<h2>Cóż to takiego framework CSS?</h2>
<p>No właśnie. Każdy wie co to są frameworki programistyczne, ale CSSowy? Według <a href="http://en.wikipedia.org/wiki/CSS_framework">wiki</a>:</p>
<blockquote><p>A CSS framework, also known as a web design framework is a pre-prepared library that is meant to allow for easier, more standards-compliant styling of a webpage using the Cascading Style Sheets language. Just like programming and scripting language libraries, CSS frameworks (usually packaged as external .css sheets inserted into the header) package a number of ready-made options for designing and outlaying a webpage.</p>
</blockquote>
<p>Czyli, tak jak w językach programowania, framework jest biblioteką (w tym wypadku grupą reguł CSS) która ułatwia implementowanie jakichś standardowych, często powtarzających się funkcjonalności (w tym wypadku pewnych schematów w layoutcie).</p>
<p><span id="more-453"></span></p>
<p>Co, według mnie, frameworkiem CSS nie jest? Pisałem w listopadzie o <a href="http://blog.koszulinski.pl/2009/11/26/write-less-do-more-czyli-pimp-my-css/">parserze/kompilatorze/procesorze CSS &#8211; LESS</a>, który rozszerza składnię CSS o kilka świetnych rzeczy. Między innymi &#8211; zmienne, zagnieżdżone reguły, obliczenia, wielokrotne wykorzystywanie reguł. Jakby nie było &#8211; nie podchodzi to pod definicję z <a href="http://en.wikipedia.org/wiki/CSS_framework">Wikipedii</a>, ale niestety znajduje się w linkach do przykładowych frameworków. Dla ustalenia uwagi &#8211; <a href="http://lesscss.org/">LESS</a> nie jest frameworkiem.</p>
<h2>Czemuż ssie?</h2>
<p>Pod mą lupę wziąłem pierwsze linki zwrócone przez Google. Przyjrzałem się chwilkę frameworkom: <a href="http://www.blueprintcss.org/">Blueprint</a>, <a href="http://elasticss.com/">Elastic CSS</a>, <a href="http://developer.yahoo.com/yui/grids/">YUI 2 Grids</a>. Prawdopodobnie są lepsze rozwiązania od tych i z chęcią się im przyjrzę jeśli linki pojawią się w komciach :).</p>
<h3>Słówko o nieudanym porodzie</h3>
<p>Wypada jeszcze wtrącić, dla niezorientowanych, co to za poroniony pomysł ten <a href="http://960.gs/">Grid system</a>. Otóż wpadł ktoś na pomysł, że wygodnie będzie wszystkim (grafikom, programistom) jak ustalimy sobie, że strona składa się z X kolumn po Ypx szerokości każda, między którymi są marginesy po Zpx. Przyznam, że obaj z grafikiem byliśmy zachwyceni, aż do&#8230; pierwszego projektu. Życzę np. sporo zabawy z cieniami wychodzącymi poza granice kolumn, w przypadku kiedy nie możemy użyć <code>box-shadow</code>. Szlag trafia wszystkie piękne, okrągłe wartości.</p>
<h3>Koniec wtrącenia</h3>
<p>Najpierw kawałek kodu z <a href="http://developer.yahoo.com/yui/examples/grids/grids-gg.html">YUI 2 Grids</a>:</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;div</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;yui-main&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;yui-b&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;yui-g&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;yui-g first&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;yui-u first&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;yui-u&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;yui-g&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;yui-u first&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;yui-u&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Tyle się kiedyś mówiło o semantyce kodu i oddzieleniu wyglądu od treści. Ponad pięć lat temu, kiedy zaczynałem naukę HTMLa i CSSa, trwała walka o to aby programiści zaczęli pisać porządny kod. Wydawało mi się, że teraz już nie powinno być z tym problemów, a tu zonk. Patrzę na ten przykład i co widzę?</p>
<ul>
<li>Prezentacja zbita razem z HTMLem &#8211; żeby zmienić układ strony zmieniamy HTMLa, a nie CSS,</li>
<li>Kompletnie bezznaczeniowe nazwy klas i identyfikatorów &#8211;  jedno wielkie semantyczne szambo. Wybrałem akurat framework od YUI, bo jest w tym najgorszy (choć Blueprint mu nie ustępuje). Elastic CSS wygląda trochę lepiej,</li>
<li>Divitis. W przypadku YUI można chyba akurat dowolnie zmieniać użyte tagi, bo framework resetuje marginesy i paddingi dla wszystkich elementów (co też, tak na marginesie, uważam za kiepską praktykę). Kiedy jednak używając Blueprinta postanowimy zawrzeć którąś kolumnę w listę, to wszystko szlag trafia, bo uwaga&#8230; niektóre selektory zawierają nazwę tagu :O</li>
<li>Narzucona struktura i kolejność elementów w kodzie HTML. Ja akurat poświęcam sporo uwagi temu aby każdy element nawigacyjny był w sensownym miejscu, aby nie używać niepotrzebnych tagów, a wykorzystując framework nie mam tej elastyczności,</li>
<li>I wreszcie &#8211; przecież to wszystko co oferuje framework można w czasie, który jest bez znaczenia w stosunku do całego projektu, napisać ręcznie. To jest kilka reguł, które doświadczona osoba pisze na raz i to od razu z ewentualnym hackiem dla IE6. Tak, wiem, że nie wszyscy mają taką wiedzę, ale wykorzystując framework nigdy jej nie pogłębią.</li>
</ul>
<p>Tak więc w żadnym wypadku nie widzę sensu w używaniu frameworków do budowy układu strony. Żeby jednak nie było, że w ogóle nie umiem wykorzystywać zewnętrznego kodu &#8211; uważam, że przydatne są frameworki poprawiające typografię, bądź też pod niektórymi względami formularze. Muszą jednak bazować na selektorach używających tagów, a nie klas, czy nie daj Boże identyfikatorów.</p>


<p>Podobne wpisy:<ol><li><a href='http://code42.pl/2009/11/23/zen-coding-snippety-do-kosza/' rel='bookmark' title='Zen Coding &#8211; snippety do kosza'>Zen Coding &#8211; snippety do kosza</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://code42.pl/2010/01/29/dlaczego-frameworki-css-ssa/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Zen Coding &#8211; snippety do kosza</title>
		<link>http://code42.pl/2009/11/23/zen-coding-snippety-do-kosza/</link>
		<comments>http://code42.pl/2009/11/23/zen-coding-snippety-do-kosza/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 08:15:57 +0000</pubDate>
		<dc:creator>Piotrek Reinmar Koszuliński</dc:creator>
				<category><![CDATA[HTML + CSS]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[snippets]]></category>
		<category><![CDATA[zen]]></category>

		<guid isPermaLink="false">http://code42.pl/?p=430</guid>
		<description><![CDATA[Snippety do htmla? Nieeee. Zobaczcie Zen Coding. W skrócie działa to tak. Wpisuję w edytorze CSSową składnią: div#content&#38;gt;h1+p Wciskam jakąś kombinację klawiszy i dostaję: &#60;div id=&#34;content&#34;&#62; &#60;h1&#62;&#60;/h1&#62; &#60;p&#62;&#60;/p&#62; &#60;/div&#62; Sprytne, nie? :) Ale to jeszcze mało. Spróbujcie tego: div#top&#62;h1&#62;a&#91;title=Do strony głównej&#93;&#123;Moja strona&#125;&#60;ul#menu&#62;li.pos$*3&#62;a &#60;div id=&#34;top&#34;&#62; &#60;h1&#62; &#60;a href=&#34;&#34; title=&#34;Do strony głównej&#34;&#62;Moja strona&#60;/a&#62; &#60;/h1&#62; &#160; &#60;ul id=&#34;menu&#34;&#62; [...]


Podobne wpisy:<ol><li><a href='http://code42.pl/2010/01/29/dlaczego-frameworki-css-ssa/' rel='bookmark' title='Dlaczego frameworki CSS ssą?'>Dlaczego frameworki CSS ssą?</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Snippety do htmla? Nieeee. Zobaczcie <a href="http://www.smashingmagazine.com/2009/11/21/zen-coding-a-new-way-to-write-html-code/">Zen Coding</a>. W skrócie działa to tak. Wpisuję w edytorze CSSową składnią:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">div<span style="color: #cc00cc;">#content</span>&amp;gt<span style="color: #00AA00;">;</span>h1<span style="color: #00AA00;">+</span>p</pre></div></div>

<p>Wciskam jakąś kombinację klawiszy i dostaję:</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;div</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;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;h1<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;/h1<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;p<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;/p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Sprytne, nie? :) Ale to jeszcze mało. Spróbujcie tego:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">div<span style="color: #cc00cc;">#top</span><span style="color: #00AA00;">&gt;</span>h1<span style="color: #00AA00;">&gt;</span>a<span style="color: #00AA00;">&#91;</span>title<span style="color: #00AA00;">=</span>Do strony głównej<span style="color: #00AA00;">&#93;</span><span style="color: #00AA00;">&#123;</span>Moja strona<span style="color: #00AA00;">&#125;</span>&lt;ul<span style="color: #cc00cc;">#menu</span><span style="color: #00AA00;">&gt;</span>li.pos$<span style="color: #00AA00;">*</span><span style="color: #cc66cc;">3</span><span style="color: #00AA00;">&gt;</span>a</pre></div></div>


<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;div</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;top&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;h1<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;a</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #000066;">title</span>=<span style="color: #ff0000;">&quot;Do strony głównej&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>Moja strona<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/a<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/h1<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;ul</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;menu&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;li</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;pos1&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;a</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/a<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/li<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;li</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;pos2&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;a</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/a<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/li<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;li</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;pos3&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;a</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/a<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/li<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/ul<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Chyba nie muszę mówić jak bardzo taka pomoc przyspiesza pracę. Napisanie z palca kodu z drugiego przykładu zajęłoby mi przypuszczalnie więcej niż 2 minuty. Gdybym użył snippetów (do których przy HTMLu nie mogę się przyzwyczaić) może skróciłbym ten czas dwukrotnie. Zaś używając wynalazku Zen Coding całość naklepałem w 20s (i to nie mając wprawy). Tak więc gorąco polecam.</p>
<p>Gdyby ktoś szukał wtyczki do VIMa, to powstał <a href="http://github.com/rstacruz/sparkup" title="VIM zen coding plugin">plugin</a>, którego twórca zainspirował się Zen Codingiem.</p>
<p>Wpis ten opublikowałem też na <a href="http://reinmar.jogger.pl" title="Zapiski na koszulce - html, css, usability i nowe technologie">swoim prywatnym blogu</a>.</p>


<p>Podobne wpisy:<ol><li><a href='http://code42.pl/2010/01/29/dlaczego-frameworki-css-ssa/' rel='bookmark' title='Dlaczego frameworki CSS ssą?'>Dlaczego frameworki CSS ssą?</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://code42.pl/2009/11/23/zen-coding-snippety-do-kosza/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Adobe AIR podstaw podstawy</title>
		<link>http://code42.pl/2009/04/25/adobe-air-podstaw-podstawy/</link>
		<comments>http://code42.pl/2009/04/25/adobe-air-podstaw-podstawy/#comments</comments>
		<pubDate>Sat, 25 Apr 2009 21:51:22 +0000</pubDate>
		<dc:creator>Piotrek Reinmar Koszuliński</dc:creator>
				<category><![CDATA[HTML + CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[adobe air]]></category>
		<category><![CDATA[air]]></category>

		<guid isPermaLink="false">http://code42.pl/?p=369</guid>
		<description><![CDATA[Generalnie, jako bardziej linuksowe wydanie geeka, nie patrzyłem na newsy związane z Adobe AIR zbyt przychylnym okiem. Jakieś zamknięte rozwiązanie, pewnie trzeba mieć adobowskie środowisko za 1k$ od stanowiska i na bank zrobią obsługę na Linuksie za dwa lata, jak zacznie im się tam nudzić. Tak więc skłaniałem się bardziej ku rozwiązaniom pokroju Mozilli Prism, [...]


Podobne wpisy:<ol><li><a href='http://code42.pl/2010/02/12/podstawy-osadzanie-kodu-php-w-pliku/' rel='bookmark' title='Podstawy: osadzanie kodu PHP w pliku'>Podstawy: osadzanie kodu PHP w pliku</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Generalnie, jako bardziej linuksowe wydanie geeka, nie patrzyłem na newsy związane z Adobe AIR zbyt przychylnym okiem. Jakieś zamknięte rozwiązanie, pewnie trzeba mieć adobowskie środowisko za 1k$ od stanowiska i na bank zrobią obsługę na Linuksie za dwa lata, jak zacznie im się tam nudzić. Tak więc skłaniałem się bardziej ku rozwiązaniom pokroju Mozilli Prism, czy Google Gears. Byłem jednak przez Darka Juszczuka namiętnie atakowany linkami o AIRze i kiedyś jeden otworzyłem. Na stronie znalazłem przycisk &#8222;install&#8221;, po kliknięciu którego, jak zrozumiałem, miała zainstalować mi się jakaś aplikacja.Z uśmiechem politowania na twarzy, bo w końcu nie mam AIRa na swoim Linuksie, więc się musi wysypać, kliknąłem w ów przycisk. No i zonk. Z poziomu wtyczki Flash zainstalował mi się Adobe AIR, po czym zaczął się instalować program, którego stronę przed chwilą oglądałem. Z pewną dozą nieufności podałem swoje hasło &#8222;administratora&#8221; (jedyny minus &#8211; nie wystarczą uprawnienia szarego usera do instalacji softu &#8211; na szczęście sam instalator jest zaufany) i gotowe. Aplikacja się odpala, śmiga jak marzenie, ładnie wygląda i w ogóle jakbym się na Windowsa przeniósł. No cóż. To skoro panowie z Adobe się tak postarali pora dać im szansę :).</p>
<h2>AIR &#8211; was ist das?</h2>
<p>Za <a href="http://pl.wikipedia.org/wiki/Adobe_Integrated_Runtime" title="Adobe Itegreted Runtime">wikipedią</a>:</p>
<blockquote><p>Adobe Integrated Runtime, w skrócie AIR (nazwa kodowa Apollo) – wieloplatformowe środowisko wykonawcze dla RIA (ang. Rich Internet Application) zbudowanych za pomocą Flash, Flex, lub HTML i AJAX.</p>
<p>Programy AIR mogą być aplikacjami pulpitu.</p>
</blockquote>
<p>Czyli? Środowisko dla efektownych i bogatych aplikacji internetowych. Aplikacje te mogą być odpalane jak normalne desktopowe programy. A co to w praktyce? Jeszcze nie do końca wiem, bo w zasadzie, to na bieżąco się uczę pisząc ten artykuł (dla tego proszę o poprawianie jak bym jakoś naginał czasoprzestrzeń), ale na pewno integracja z systemem plików, lokalna baza danych, kontrolki jakie oferuje <a href="http://pl.wikipedia.org/wiki/Adobe_Flex">Flex</a> (o nim pewnie w przyszłości), itd.</p>
<p><strong>Co ważne</strong> dla geeków ortodoksów. AIR != Flash. Aplikacje Flashowe mogą używać AIRa by powiększać swe możliwości. Ale Flasha w aplikacji AIRowej może w ogóle nie być. Zamiast niego można z powodzeniem użyć XHTMLa+JS, czy Fleksa+Actionscripta (który to kompiluje się już do obiektu SWF, ale za to ma wolne <a href="http://www.adobe.com/devnet/flex/" title="Flex">SDK</a> i nie potrzeba do niego żadnych płatnych narzędzi).</p>
<p>Co trochę znamienne dla strony Adobe &#8211; miałem przed chwilą spory problem z podlinkowaniem SDK Fleksa. Niestety nie potrafię się poruszać płynnie po ich stronie i w ogóle nie znalazłem podstrony samego SDK. Ale spokojnie &#8211; może trochę dziwnie i niespójnie połączone, ale na stronie(nach) znajduje się cała potrzebna dokumentacja, którą do tej pory oceniam raczej dobrze.</p>
<p>Aha &#8211; <a href="http://opensource.adobe.com/wiki/display/flexsdk/Flex+SDK">Flex, jeśli dobrze rozumiem, jest open source&#8217;owy</a> :O</p>
<h2>Moja pierwsza aplikacja AIR oparta o HTML</h2>
<p>Czego potrzebujemy? Na pewno przyda nam się <a href="http://www.adobe.com/go/getairsdk">AIR SDK</a>. Co prawda można skorzystać także z darmowej <a href="http://www.aptana.com/air/">Aptany</a>, albo płatnego <a href="http://www.adobe.com/go/devcenter_dw_try">Adobe Dreamweaver CS3/CS4</a> z <a href="http://www.adobe.com/go/getair_dreamweaver">Adobe AIR Extension for Dreamweaver</a>, ale my skupimy się na najniższym poziomowo rozwiązaniu, czyli AIR SDK (który rzecz jasna należy pobrać). Do tego na pewno będzie nam potrzebna zainstalowana <a href="http://www.adobe.com/go/getair">biblioteka uruchomieniowa (czyt. plugin) Adobe AIR</a>. No i na koniec zwykły edytor tekstu (najlepiej gvim :).</p>
<p>Mało odkrywczo zaczniemy od przywitania się ze światem. Nie pokazuje to ani trochę możliwości AIRa, ale w tym wpisie już nic więcej nie zmieszczę &#8211; za długi się robi :). Stwórzmy więc sobie katalog <code>HelloWorld</code>, w którym będziemy potrzebowali kilku plików.</p>
<dl>
<dt>HelloWorld.html</dt>
<dd>plik obowiązkowy &#8211; główna strona naszej aplikacji,</dd>
<dt>HelloWorld-app.xml</dt>
<dd>również obowiązkowy &#8211; konfiguracja aplikacji (z ang. descriptor) w którym między innymi można ustawić ścieżkę instalacji, nazwę, ikony, ustawienia okna, czy ścieżkę do głównego pliku HTML,</dd>
<dt>AIRAliases.js</dt>
<dd>plik przydatny &#8211; tworzy proste aliasy do JSowych obiektów dostępnych dzięki AIR. Np. zamiast <code>window.runtime.flash.filesystem.File</code> otrzymujemy <code>air.File</code>. Plik ten przekopiowujemy z <code>sciezka_do_AdobeAIRSDK/frameworks/libs/air/</code>.</dd>
</dl>
<p>Na początek HelloWorld.html. Zakładam, że składnię HTMLa znasz i nie muszę nic tłumaczyć. Jakby ktoś chciał więcej szczegółów odnośnie zawartości plików, to odsyłam do <a href="http://help.adobe.com/en_US/AIR/1.5/devappshtml/WS5b3ccc516d4fbf351e63e3d118666ade46-7ecc.html" title="Creating your first HTML-based AIR application with the AIR SDK">źródła skąd cały ten przykład zaczerpnąłem</a>.</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;html<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;head<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;title<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Hello World<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/title<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;script</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;AIRAliases.js&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/script<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;script</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/javascript&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        function appLoad(){
            air.trace(&quot;Hello World&quot;);
        }
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/script<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/head<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;body</span> <span style="color: #000066;">onLoad</span>=<span style="color: #ff0000;">&quot;appLoad()&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;h1<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Hello World<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/h1<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/body<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/html<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Jak widać &#8211; żadnych rewolucji. Pora na HelloWorld-app.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> 
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;application</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://ns.adobe.com/air/application/1.5&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>examples.html.HelloWorld<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>0.1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;filename<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>HelloWorld<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/filename<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;initialWindow<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;content<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>HelloWorld.html<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/content<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;visible<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/visible<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;width<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>400<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/width<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;height<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>200<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/height<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/initialWindow<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/application<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Wydaje mi się, że wszystko powinno być jasne. Jedynie wartość elementu <code>&lt;filename&gt;</code> była dla mnie niejasna, więc tłumaczę &#8211; jest to nazwa aplikacji w systemie (czyli po zainstalowaniu). Wchodzi w to: katalog instalacyjny, plik wykonywalny oraz nazwa w menu systemowym (każdą z tych rzeczy można jeszcze ustawić osobno).</p>
<h2>Testowanie aplikacji</h2>
<p>Do testowego uruchamiania (i debugowania) stworzonej aplikacji służy odpalany z wiersza poleceń AIR Debug Launcher (ADL). Znajduje się on w <code>sciezka_do_AdobeAIRSDK/bin/</code>. Włączamy więc konsolę, przechodzimy do katalogu HelloWorld i startujemy:</p>
<pre>p@d:/air/HelloWorld$ <kbd>/air/AdobeAIRSDK/bin/adl HelloWorld-app.xml</kbd>
<samp>Jakis trace</samp>
p@d:/air/HelloWorld$</pre>
<p>Powinniśmy obejrzeć takie o to, piękne okienko:</p>
<p><img src="http://protazy.lo3.wroc.pl/~d04/jogger_files/air1/air1.png" alt="Wynik działania programu HelloWorld" /></p>
<p>Jak widać program wydrukował nam też na konsoli &#8222;<samp>Jakis trace</samp>&#8221; co jest wynikiem działania <code>air.trace("Jakis trace")</code>.</p>
<h2>Tworzenie pliku instalacyjnego .air</h2>
<p>Pora teraz spakować do jednego pliku instalacyjnego (paczka zip) naszą aplikację dzięki której zapanujemy nad światem. Służy do tego narzędzie ADT.</p>
<p>Pierwsze co trzeba wiedzieć, to że wszystkie AIRowskie aplikacje są cyfrowo podpisane. Temat ten jest mi kompletnie obcy i za pierwszym razem męczyłem się 3h żeby wygenerować jakiś swój klucz. Otóż poszedłem w stronę javowego keytoola, co było dla mnie ślepą uliczką ;). Co prawda nauczyłem się generować wszystkie typy kluczy, ale żaden nie działał :D. Na szczęście jest o wiele prostsza (i przede wszystkim działająca) ścieżka, którą przegapiłem. O niej za chwilę, a teraz cytat ze <a href="http://help.adobe.com/en_US/AIR/1.5/devappshtml/WS5b3ccc516d4fbf351e63e3d118666ade46-7ecc.html">strony Adobe</a> o bezpieczeństwie:</p>
<blockquote><p>To ensure application security, all AIR installation files must be digitally signed. For development purposes, <em>you can generate a basic, self-signed certificate with ADT</em> or another certificate generation tool. You can also buy a commercial code-signing certificate from a commercial certificate authority such as VeriSign or Thawte. When users install a self-signed AIR file, the publisher is displayed as “unknown” during the installation process. This is because a self-signed certificate only guarantees that the AIR file has not been changed since it was created. There is nothing to prevent someone from self-signing a masquerade AIR file and presenting it as your application. For publicly released AIR files, a verifiable, commercial certificate is strongly recommended. For an overview of AIR security issues, see AIR security. </p>
</blockquote>
<p>Oczywiście przegapiłem zaznaczony fragment i cały akapit poniżej :) A w zasadzie to mam wrażenie, że go tam wcześniej nie było. Ale koniec płaczu nad straconym czasem. Generujemy własny klucz:</p>
<pre>p@d:/air/HelloWorld$ <kbd>/air/AdobeAIRSDK/bin/adt -certificate -cn <var>AIRBegginer</var> 1024-RSA <var>my_key_file</var> <var>dupa.8</var></kbd></pre>
<p>W ten o to sposób wygenerowaliśmy klucz na nazwę podmiotu (company name) <var>AIRBegginer</var>, zabezpieczony hasłem <var>dupa.8</var>, który został zapisany do pliku <var>my_key_file</var>. Można go podejrzeć javowym narzędziem <code>keytool</code>:</p>
<pre>p@d:/air/HelloWorld$ keytool -list -v -keystore my_key_file -storetype pkcs12
Enter keystore password:  

Keystore type: PKCS12
Keystore provider: SunJSSE

Your keystore contains 1 entry

Alias name: 1
Creation date: 2009-04-25
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=AIRBegginer
Issuer: CN=AIRBegginer
Serial number: 36373061626165333a31323064646264383133663a2d38303030
Valid from: Sat Apr 25 16:46:05 CEST 2009 until: Fri Apr 25 16:46:05 CEST 2014
(...)</pre>
<p>Tak utworzonym kluczem możemy teraz podpisać naszą aplikację:</p>
<pre>p@d:/air/HelloWorld$ <kbd>/air/AdobeAIRSDK/bin/adt -package -storetype pkcs12 -keystore my_key_file HelloWorld.air HelloWorld-app.xml HelloWorld.html AIRAliases.js</kbd></pre>
<p>Zostaniemy poproszeni o hasło i jeśli nic nie skopaliśmy, to ADT stworzy nam plik HelloWorld.air, który jest naszą pierwszą spakowaną i gotową do instalacji aplikacją AIR.</p>
<h2>Instalacja</h2>
<p>Najprostszy sposób jeśli mamy w systemie zmapowane rozszerzenie .air z instalatorem Adobe AIR (ja standardowo tak miałem) to instalacja jak na Windowsie &#8211; przez podwójnego klika w HelloWorld.air. Jeśli nie to wpisujemy:</p>
<pre>p@d:/air/HelloWorld$ /opt/Adobe AIR/Versions/1.0/airappinstaller ./HelloWorld.air
unexpected error: ArgumentError: Error #2004
p@d:/air/HelloWorld$ /opt/Adobe AIR/Versions/1.0/airappinstaller /air/HelloWorld/HelloWorld.air</pre>
<p>Jak widać skrypt jest zbyt &#8222;głupi&#8221; żeby sobie poradzić ze ścieżką względną i trzeba podać absolutną. Chwila czekania i zium:</p>
<p><img src="http://protazy.lo3.wroc.pl/~d04/jogger_files/air1/air2.png" alt="Instalowanie aplikacji AIR" /></p>
<p>Znów hasło roota i wszystko działa.</p>
<h2>Zarządzanie zainstalowanymi aplikacjami na Linuksie</h2>
<p>Programy niestety na moim Ubuntu pojawiają się w menu systemowym w sekcji &#8222;Akcesoria&#8221;. Zainstalowałem już kilka na próbę i zaczął mi się tam robić bałagan. Ustawienie w pliku konfiguracyjnym aplikacji pola <code>&lt;programMenuFolder&gt;</code> zdaje się działać tylko na Windowsach.</p>
<p>Przed chwilą znalazłem także informację o tym jak można zarządzać już zainstalowanymi programami. Otóż są one instalowane jak paczki odpowiednio deb albo rpm. Dzięki temu np. w moim Ubuntu mogłem odinstalować programy z poziomu Synaptica. Nazwa programu składa się z z pola applicationId (np. examples.html.helloworld) oraz publisherID.</p>
<p><img src="http://protazy.lo3.wroc.pl/~d04/jogger_files/air1/air3.png" alt="Program AIR w Synapticu" /></p>
<p><strong>Uwaga</strong> dla każdego, kto nie znalazł swojej aplikacji &#8211; ja musiałem zrestartować system żeby Synaptic się odświeżył.</p>
<h2>Koniec</h2>
<p>To by było na tyle. Miałem jeszcze w tym artykule (ależ to ładnie brzmi ;P) pokazać jakiś ciekawszy przykład aplikacji, ale wydaje mi się, że byłby to już zbyt długi wpis. Postaram się więc dość szybko zmajstrować następną notkę. I będzie ona albo przedstawiała możliwości jakie daje AIR, albo skrobnę coś o Fleksie. A najpewniej i jedno, i drugie w krótkim czasie :).</p>
<p>Jeśli chodzi o ten wpis, to wszelkie sugestie, uwagi, czy pytania mile widziane. Jak zaznaczyłem gdzieś po drodze &#8211; moja wiedza na temat Adobe AIR jest nikła i mogłem popełnić sporo błędów.</p>
<h2>Źródło i inne przydatne linki</h2>
<ul>
<li><a href="http://help.adobe.com/en_US/AIR/1.5/devappshtml/WS5b3ccc516d4fbf351e63e3d118666ade46-7ecc.html">Źródło, którego ten tekst jest w zasadzie bardzo luźnym tłumaczeniem</a>,</li>
<li><a href="http://www.adobe.com/support/documentation/pl/air/1_5/AIR_1_5_linux_release_notes.pdf">Więcej informacji o Adobe AIR na Linuksie</a>,</li>
<li><a href="http://www.adobe.com/devnet/air/">AIR Developer Center</a> &#8211; sam czubek góry lodowej. Stąd chyba dobrze zaczynać poszukiwania czegokolwiek,</li>
<li><a href="http://help.adobe.com/en_US/AIR/1.5/devappshtml/">Dokumentacja Adobe AIR</a>.</li>
</ul>
<p>Artykuł ten ukazał się równolegle na moim <a href="http://reinmar.jogger.pl/2009/04/25/adobe-air-podstaw-podstawy/">prywatnym blogu</a>.</p>


<p>Podobne wpisy:<ol><li><a href='http://code42.pl/2010/02/12/podstawy-osadzanie-kodu-php-w-pliku/' rel='bookmark' title='Podstawy: osadzanie kodu PHP w pliku'>Podstawy: osadzanie kodu PHP w pliku</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://code42.pl/2009/04/25/adobe-air-podstaw-podstawy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Konsola Firebuga &#8211; &#8222;echowanie&#8221; Javascriptu</title>
		<link>http://code42.pl/2009/03/18/konsola-firebuga-echowanie-javascriptu/</link>
		<comments>http://code42.pl/2009/03/18/konsola-firebuga-echowanie-javascriptu/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 09:12:41 +0000</pubDate>
		<dc:creator>Piotrek Reinmar Koszuliński</dc:creator>
				<category><![CDATA[HTML + CSS]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://code42.pl/?p=285</guid>
		<description><![CDATA[&#8222;Echowanie&#8221; jest zapewne znane wszystkim koderom PHP :) Pomaga w prostym debugowaniu skryptów. Javascript podobnie jak PHP żadnego sensownego debuggera nie posiada, a dodatkowo nie ma żadnego wyjścia. Korzystanie z metody alert() jest o tyle niewygodne, że zatrzymuje wykonywanie skryptu. Z ratunkiem przychodzi Konsola Firebuga. Udostępnia ona kilka ciekawych funkcjonalności. Pierwszą z nich jest console.log(), [...]


Brak podobnych wposów.]]></description>
			<content:encoded><![CDATA[<p>&#8222;Echowanie&#8221; jest zapewne znane wszystkim koderom PHP :) Pomaga w prostym debugowaniu skryptów. Javascript podobnie jak PHP żadnego sensownego debuggera nie posiada, a dodatkowo nie ma żadnego wyjścia. Korzystanie z metody <code>alert()</code> jest o tyle niewygodne, że zatrzymuje wykonywanie skryptu. Z ratunkiem przychodzi <a href="http://getfirebug.com/console.html">Konsola Firebuga</a>. Udostępnia ona kilka ciekawych funkcjonalności. Pierwszą z nich jest <code>console.log()</code>, która pozwala formatować wyjście na kilka sposobów:</p>
<pre>console.log("Ten kod powinien się wykonać");

var foo = "bar", x = 12.34, i = 122;

console.log("foo: %s, (int) i: %d, (float) x: %f", foo, i, x);

function Kopytko() {
	this.palec1 = 11.12;
	this.palec2 = "qń";
};
kopyto = new Kopytko();
console.log(kopyto);
console.log(kopyto.brak);</pre>
<p><img src="http://protazy.lo3.wroc.pl/~d04/jogger_files/scr1.png" alt="Przykład działania console.log w Firebugu" width="642" height="195" /></p>
<p>Jednak to nie wszystko. Możemy także pokolorować i nadać znaczenia naszej radosnej twórczości. I tak mamy dostępne metody <code>console.debug()</code>, <code>console.info()</code>, <code>console.warn()</code>, <code>console.error()</code>.</p>
<p><img src="http://protazy.lo3.wroc.pl/~d04/jogger_files/scr2.png" alt="Przykład formatowania informacji na konsoli Firebuga" width="642" height="195" /></p>
<p>Dodatkowo, przydatne (np. przy pracy z Ajaksem, czy manipulacjach w drzewie DOM) może się okazać również drukowanie HTMLa oraz XMLa. Służy do tego metoda <code>console.dirxml(DOMElement)</code>. Wyświetla ona drzewo znane nam z zakładki &#8222;HTML&#8221; Firebuga.</p>
<p><img src="http://protazy.lo3.wroc.pl/~d04/jogger_files/scr3.png" alt="Przykład działania console.dirxml() w Firebugu" width="642" height="395" /></p>
<p>To chyba na tyle o &#8222;echowaniu&#8221; na konsolę Firebuga. Więcej informacji możecie znaleźć w <a href="http://getfirebug.com/console.html">Console API</a> oraz <a href="http://getfirebug.com/logging.html">Rejestrowaniu Javascriptu</a> (damn &#8211; nie mogę lepszego tłumaczenia znaleźć :). I tak z poziomu kodu można mierzyć czas wykonania bloku instrukcji <code>console.time("name"); {..} console.timeEnd("name");</code>, czy tworzyć asercje (a jak to się tłumaczy?).</p>
<p>Artykuł ten ukazał się też w zbliżonej formie na <a href="http://reinmar.jogger.pl">moim osobistym blogasku</a>.</p>


<p>Brak podobnych wposów.</p>]]></content:encoded>
			<wfw:commentRss>http://code42.pl/2009/03/18/konsola-firebuga-echowanie-javascriptu/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

