<?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>Ferrante.pl - simplicity of web programming &#187; ferrante.pl</title>
	<atom:link href="http://ferrante.pl/category/life/ferrantepl/feed/" rel="self" type="application/rss+xml" />
	<link>http://ferrante.pl</link>
	<description>Technologie internetowe, PHP5, Python, Javascript. Publicystyka i kursy w najlepszym wydaniu.</description>
	<lastBuildDate>Thu, 02 Feb 2012 11:27:36 +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>Rok 2011 rokiem społeczności front-end</title>
		<link>http://ferrante.pl/frontend/javascript/rok-2011-rokiem-spolecznosci-front-end/</link>
		<comments>http://ferrante.pl/frontend/javascript/rok-2011-rokiem-spolecznosci-front-end/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 21:56:45 +0000</pubDate>
		<dc:creator>ferrante</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[ferrante.pl]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[W sieci...]]></category>

		<guid isPermaLink="false">http://ferrante.pl/?p=1794</guid>
		<description><![CDATA[Nie zastanawiałem się długo, jak podsumować rok 2011, jeśli chodzi o mojego bloga i wszystko to, co się wokół mnie działo. Rok 2011 był zdecydowanie rokiem społeczności front-end! Zapewne zauważyliście, że ubiegłe 12 miesięcy było pełne artykułów o community i pochodnych. Przywołując na chwilę nomenklaturę serialową &#8211; byliście świadkami sezonu o społeczności front-end. Mimo że [...]]]></description>
			<content:encoded><![CDATA[<p>Nie zastanawiałem się długo, jak podsumować rok 2011, jeśli chodzi o mojego bloga i wszystko to, co się wokół mnie działo. Rok 2011 był zdecydowanie rokiem społeczności front-end!<span id="more-1794"></span></p>
<p>Zapewne zauważyliście, że ubiegłe 12 miesięcy było pełne artykułów o community i pochodnych. Przywołując na chwilę nomenklaturę serialową &#8211; byliście świadkami sezonu o społeczności front-end. Mimo że tekstów technicznych pojawiło się niewiele, to nie żałuję tego. Udało się wywołać kilka bardzo pozytywnych przemian i ruchów oraz scementować to, co zaczęło się w 2010 w postaci darmowych szkoleń i konferencji <a href="http://front-trends.com">Front-Trends</a>.</p>
<p>W 2011 zapoczątkowałem spotkania <a href="http://meetjs.pl">meet.js</a>, z czego jestem najbardziej dumny. Dziś idea darmowych meetupów front-endowych działa prężnie w 4 miastach (Poznań, Warszawa, Kraków, Wrocław), a w kolejce czekają następne dwa i tylko kwestią czasu jest, kiedy od nieśmiałego flirtu przejdziemy do czegoś poważniejszego. Wisienką na torcie był <a href="http://summit.meetjs.pl">meet.js Summit</a> &#8211; pierwsza darmowa konferencja o front-endzie, która pokazała, że warto przychodzić na konferencje, ale i też być ich aktywnym uczestnikiem. Wielu jej prelegentów jeszcze niedawno drżało na myśl o pierwszym występie przed większą publicznością. Dziś wręcz palą się do kolejnych prelekcji. Z nadzieją będę wypatrywał ich na zagranicznych scenach. Już dzisiaj pojawiają się na nich (lub dopiero pojawią): <a href="http://twitter.com/maciejmalecki">Maciej Małecki</a>, <a href="http://twitter.com/michalbe">Michał Budzyński</a> czy <a href="http://twitter.com/KamilTrebunia">Kamil Trebunia</a>. </p>
<p>Na Summicie pokazaliśmy również sponsorom, że na takie wydarzenia przychodzi mnóstwo osób &#8211; i to nieprzypadkowych. Konferencje to doskonałe miejsce, by spotkać utalentowanych ludzi, którzy stale chcą się rozwijać i poszukują najświeższej wiedzy. Dzięki wsparciu firm takich jak <a href="http://Mozilla.org">Mozilla</a>, <a href="http://allegro.pl">Allegro</a> czy <a href="http://cognifide.com">Cognifide</a>, odczuwam satysfakcję, że za tę cenę (a w zasadzie jej brak) zbliżyliśmy się do poziomu niektórych komercyjnych eventów tego typu.</p>
<p>Gdyby spytać mnie o mój prywatny ranking, to chyba najciekawszym wydarzeniem lokalnych meet.js była prezentacja <a href="http://twitter.com/bartaz">Bartosza Szopki</a> o CSS 3D i <a href="http://bartaz.github.com/impress.js/">impress.js</a>, który bije rekordy popularności. Tak, ten event powstał właśnie po to, by tacy magicy jak Bartosz mogli pokazać jak świetną robotę odwalają. Również <a href="http://twitter.com/szafranek">Krzysztof Szafranek</a> na Summicie pokazał się z dobrej strony i czekam na więcej na innych konferencjach.</p>
<p>W 2011 z <a href="http://czerski.info">Pawłem Czerskim</a> zrobiliśmy również <a href="http://falsyvalues.com">pierwszą edycję Falsy Values &#8211; warsztatów i konferencji o JavaScript</a>. Wydaje nam się, że w tej części Europy potrzebne są dobre warsztaty tematyczne i będziemy kontynuować to wydarzenie, choć być może dopiero za rok. Przy okazji czapki z głów dla Pawła &#8211; podejście do detali i kreatywność jakie prezentuje, przyczyniła się w dużej mierze do sukcesu eventu. Sama nazwa była moim zdaniem strzałem w dziesiątkę. Cieszę się, że mogę współpracować z takimi utalentowanymi ludźmi.</p>
<p>Właśnie, o ludziach było tutaj mnóstwo. Poczułem się w obowiązku przeznaczyć im skromne łamy mojego bloga, bo miałem mocne przekonanie, że wielu zdolnych front-endowców w naszym kraju po prostu w tej branży nie widać. Powstała więc seria o <a href="http://ferrante.pl/frontend/javascript/ludzie-frontendu/">Ludziach Front-endu</a> z <a href="http://ferrante.pl/life/ludzie-front-endu/ludzie-front-endu-kornel-pornel-lesinski/">PorneLem</a>, <a href="http://ferrante.pl/frontend/javascript/ludzie-front-endu-marek-marcoos-stepien/">Marcoosem</a>, <a href="http://ferrante.pl/frontend/css/ludzie-front-endu-kacper-tworca-css3-pl/">Kacprem</a>, <a href="http://ferrante.pl/life/ludzie-front-endu/ludzie-front-endu-piotr-zalewa/">Piotrem Zalewą</a> oraz <a href="http://ferrante.pl/life/ludzie-front-endu/ludzie-front-endu-akai/">AKAI</a> i kilka wpisów zachęcających do wzięcia się za front-end na poważnie.</p>
<p>Jeśli chodzi o teksty, to chyba najbardziej dumny jestem z artykułu <a href="http://ferrante.pl/frontend/javascript/w-dobie-html5-stan-spolecznosci-frontend-w-polsce/ ">&#8222;Stan społeczności front-end w Polsce w dobie HTML5&#8243;</a>. Dużo pracy, ale i wielka satysfakcja z tego, że udało się przedstawić to, czym żyje obecnie polski front-end. A było tego sporo.</p>
<p>Bo tak naprawdę mamy wielu interesujących ludzi w tej naszej branży. Poznałem ich w 2011 dziesiątki, a może setki. Wielu z nich jestem wdzięczny za ciepłe słowa w stosunku do pracy, jaką wykonuje &#8211; nawet nie wiecie, jak fajnie jest usłyszeć na jakimś evencie o tym, że ktoś nauczył się JavaScriptu z moich materiałów.</p>
<p>Dziś mogę powiedzieć, że mam wielu znajomych ze sceny front-end. Chyba najlepsze, biorąc pod uwagę towarzyską część konferencji, było <a href="http://frontrowconf.com">Front Row</a> &#8211; tam pierwszy raz udało się zamienić słowo z wieloma postaciami z Krakowa, który jest dla mnie swoistą stolicą polskiego fornt-endu (choć o to miano walczy też dzielnie Poznań). Wcześniej, na konferencjach, które organizowałem jakoś nie było do tego sposobności.</p>
<p>Tutaj pojawia się też wątek <a href="http://jsnews.pl">JSNews.pl</a>. Uruchomiliśmy ten portal z założeniem przekazywania ciekawych informacji o front-endzie i JavaScript. Niestety polegliśmy, jeśli chodzi o wolny czas dla tego projektu. Nie ma jednak tego złego, co by na dobre nie wyszło. JSNews przeistoczyło się <a href="http://www.facebook.com/groups/217169631654737/">w grupę na Facebooku</a>, gdzie obecnie zapisanych jest prawie 400 developerów. Codziennie toczymy zażarte, ale i dowcipne dyskusje o JavaScripcie i podobnych. Momentem przełomowym związanym z tą grupą było spotkanie meet.js Weekend w Poznaniu &#8211; przyjechało na nie kilkanaście osób, poznaliśmy się dobrze, a historie z nim związane będą pamiętane jeszcze bardzo długo.</p>
<p>Na blogu pojawiły się również konkursy. Brawa dla <a href="http://autentika.pl">Autentiki</a>, która przetarła szlak i zorganizowała dla Was pierwszy taki <a href="http://ferrante.pl/frontend/javascript/wygraj-ksiazki-o-javascript-i-html5/">konkurs z nagrodami</a>.</p>
<p>Z ciekawych faktów związanych z poprzednim rokiem, kupiłem <a href="http://javascript.pl">JavaScript.pl</a> z zamiarem oczyszczenia tej domeny z niezwiązanej z tematyką treści. Jeśli chodzi o prywatne sprawy, jestem bardzo zadowolony, że mogłem pomóc kilku osobom &#8211; przede wszystkim wielu z nich znalazło pracę po moim poleceniu. Odczuwam z tego powodu dużą satysfakcję. Fajnie też, że pojawił się ze mną <a href="http://mamstartup.pl/wywiady/1227/damian-wielgosik-ludzie-front-endu-to-ogromnie-ciekawa-kasta">wywiad na mamstartup.pl</a>.</p>
<p>Co do spraw technicznych &#8211; w roku 2012 mam zamiar przypomnieć się ludziom, że potrafię jeszcze tworzyć interesujące projekty &#8211; choć <a href="https://github.com/ferrante/Voice-Debugger">głosowy Debugger</a> był według mnie ciekawym eksperymentem. Pierwsza połowa roku powinna być pod tym względem niezmiernie ekscytująca. W 2011 roku zaś opublikowałem 3 prezentacje &#8211; o <a href="http://www.slideshare.net/ferrantes/ecmascript-5-10575898">ECMAScript 5</a>, <a href="http://www.slideshare.net/ferrantes/od-jquery-do-html5-i-css3">o HTML5 i CSS3</a> i <a href="http://www.slideshare.net/ferrantes/make-the-right-choices">JavaScript: Make the right choices</a>. Ta pierwsza ma już ponad osiem tysięcy wyświetleń! Było mi też dane dać prelekcję na <a href="http://hackfest.pl">Hackfeście</a> w Poznaniu! Przeprowadziłem również kilka komercyjnych szkoleń dla największych firm IT w Polsce i muszę stwierdzić, że bardzo podoba mi się taka forma spędzania czasu. Praca z ludźmi jest o wiele ciekawsza niż kodowanie, choć to temat na inny artykuł.</p>
<p>W roku 2011 było też kilkadziesiąt/kilkaset maili bez odpowiedzi &#8211; niestety nie jestem już w stanie odpowiadać na wszystkie. Nie udzielam również pomocy ze skryptami, choćbym chciał, to niestety żyję za coś innego. Wydaje mi się, że nastał moment w moim życiu na lepsze zorganizowanie swojego czasu &#8211; biorę na siebie ostatnio o wiele za dużo, choć lubię się sprawdzać w nowych rzeczach.</p>
<p>Każdy rok definiuje u mnie lista pomysłów do zrealizowania. Jeśli takich nie będę miał, mogę powiedzieć, że dany rok będzie nudny. Co do 2012 jest przeciwnie &#8211; jest ich sporo, wiele wyklarowało się pod koniec roku 2011, dlatego z nadzieją spoglądam w przyszłość. Oby udało się zrealizować wszystkie z nich!</p>
]]></content:encoded>
			<wfw:commentRss>http://ferrante.pl/frontend/javascript/rok-2011-rokiem-spolecznosci-front-end/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Falsy Values &#8211; co nas czeka w tym tygodniu</title>
		<link>http://ferrante.pl/life/ferrantepl/falsy-values-co-nas-czeka-w-tym-tygodniu/</link>
		<comments>http://ferrante.pl/life/ferrantepl/falsy-values-co-nas-czeka-w-tym-tygodniu/#comments</comments>
		<pubDate>Mon, 16 May 2011 13:25:35 +0000</pubDate>
		<dc:creator>ferrante</dc:creator>
				<category><![CDATA[ferrante.pl]]></category>
		<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://ferrante.pl/?p=1281</guid>
		<description><![CDATA[Już lada moment rozpoczyna się Falsy Values Workshops and Conference. Środę i czwartek spędzamy na workshopach, w piątek słuchamy prelekcji. Twitter Przypominam, że najświeższe informacje o konferencji znajdziecie na Twitterze: @falsyvalues. Oficjalny hashtag konferencji: #falsyvalues. Workshopy Najważniejsza informacja &#8211; należy przynieść ze sobą laptopa! Miejsce Workshopy zlokalizowane będą przy Al. Jana Pawła II 27 w siedzibie [...]]]></description>
			<content:encoded><![CDATA[<p>Już lada moment rozpoczyna się Falsy Values Workshops and Conference. Środę i czwartek spędzamy na workshopach, w piątek słuchamy prelekcji.<span id="more-1281"></span></p>
<h3>Twitter</h3>
<p>Przypominam, że najświeższe informacje o konferencji znajdziecie na Twitterze: <a href="http://twitter.com/falsyvalues">@falsyvalues</a>. Oficjalny hashtag konferencji: #falsyvalues.</p>
<h3>Workshopy</h3>
<p>Najważniejsza informacja &#8211; <strong>należy przynieść ze sobą laptopa</strong>!</p>
<h3>Miejsce</h3>
<p>Workshopy zlokalizowane będą przy Al. Jana Pawła II 27 w siedzibie Golden Floor (należy szukać głównego wejścia naprzeciwko Hali Mirowskiej przy Coffee Heaven). Planujemy również oznaczyć to miejsce bannerami.</p>
<p>Konferencja odbędzie się w Kinie Femina w sali C. Do naszej dyspozycji są dwa piętra na lunch i przerwy kawowe, być może również zaplecze za salą (szczególnie ważne dla palaczy ;-))</p>
<p>Rejestracja każdego dnia rozpoczyna się od 8 rano. Workshopy, jak i konferencja trwają od 9 do 17. Aby ułatwić nam zadanie, fajnie byłoby, gdybyście przyszli z wydrukowanymi biletami.</p>
<p>Z ciekawostek, jeśli ktoś poczułby potrzebę &#8211; przy venue workshopów jest wspomniane Coffee Heaven, natomiast naprzeciwko Kina Femina &#8211; Starbucks oraz KFC. </p>
<h3>Impreza</h3>
<p>W czwartek od 19 w klubie Rabarbar w Warszawie odbędzie się główna konferencyjna impreza dzięki firmie Pusher &#8211; tzw. <strong>Pusher Party!</strong> Uczestniczyć w niej będzie mógł każdy &#8211; jeśli kupiłeś bilet tylko na dzień konferencji nie ma problemu, przyjdź z biletem i rozkoszuj się darmowymi drinkami i przekąskami od naszych sponsorów. Z Golden Floor do Rabarbaru jest tylko kilka przystanków tramwajowych!</p>
<p>Jeszcze raz wielkie dzięki dla sponsorów: Mozilli, Nokii, DevMeetings, Pushera oraz Gadu-Gadu!</p>
]]></content:encoded>
			<wfw:commentRss>http://ferrante.pl/life/ferrantepl/falsy-values-co-nas-czeka-w-tym-tygodniu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Falsy Values &#8211; mała niespodzianka dla Czytelników Ferrante.pl</title>
		<link>http://ferrante.pl/frontend/javascript/falsy-values-mala-niespodzianka-dla-czytelnikow-ferrante-pl/</link>
		<comments>http://ferrante.pl/frontend/javascript/falsy-values-mala-niespodzianka-dla-czytelnikow-ferrante-pl/#comments</comments>
		<pubDate>Wed, 11 May 2011 12:27:42 +0000</pubDate>
		<dc:creator>ferrante</dc:creator>
				<category><![CDATA[ferrante.pl]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ferrante.pl/?p=1271</guid>
		<description><![CDATA[Czasem wypada się po prostu odwdzięczyć za dobre słowo i trzymane kciuki. Doszedłem do wniosku, że skoro czytacie, komentujecie i polecacie mojego bloga to wypada Wam jakoś podziękować. Wielu z Was zajmuje się profesjonalnie front-endem, część to młodzież, która dopiero stawia pierwsze kroki, choć już teraz jest bardzo zdolna. Postanowiłem więc wyselekcjonować wśród Czytelników te [...]]]></description>
			<content:encoded><![CDATA[<p>Czasem wypada się po prostu odwdzięczyć za dobre słowo i trzymane kciuki. Doszedłem do wniosku, że skoro czytacie, komentujecie i polecacie mojego bloga to wypada Wam jakoś podziękować. Wielu z Was zajmuje się profesjonalnie front-endem, część to młodzież, która dopiero stawia pierwsze kroki, choć już teraz jest bardzo zdolna. Postanowiłem więc wyselekcjonować wśród Czytelników te osoby, które najczęściej komentowały mojego bloga, osoby, które pamiętam jeszcze z czasów, kiedy ferrante.pl startowało oraz różnych dobrze zapowiadających się developerów front-end. Nie ma tutaj wszystkich z Was, jednak musiałem dokonać wyboru ze względu na ograniczoną liczbę wejściówek.</p>
<p>I tak, skromny prezent od Ferrante, a mianowicie wejściówkę na dzień konferencji <a href="http://falsyvalues.com">Falsy Values</a> (piątek 20 maja) dostają:</p>
<ul>
<li>pim</li>
<li>Tomasz Kowalczyk</li>
<li>procek</li>
<li>Vokiel</li>
<li>sher</li>
<li>czarodziejmarx</li>
<li>zx</li>
<li>ludwik</li>
</ul>
<p>Do zobaczenia!</p>
<p>Niniejszym chciałbym podziękować jeszcze raz <a href="http://mozilla.org">Mozilli</a>, dzięki której w tym roku możemy rozdać o wiele więcej wejściówek! Jesteście świetni!</p>
]]></content:encoded>
			<wfw:commentRss>http://ferrante.pl/frontend/javascript/falsy-values-mala-niespodzianka-dla-czytelnikow-ferrante-pl/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Zwycięzca konkursu CSS</title>
		<link>http://ferrante.pl/life/ferrantepl/zwyciezca-konkursu-css/</link>
		<comments>http://ferrante.pl/life/ferrantepl/zwyciezca-konkursu-css/#comments</comments>
		<pubDate>Sun, 03 Apr 2011 20:52:53 +0000</pubDate>
		<dc:creator>ferrante</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[ferrante.pl]]></category>

		<guid isPermaLink="false">http://ferrante.pl/?p=1210</guid>
		<description><![CDATA[Panie i Panowie. Brawa dla Krzysztofa Urbasa za zwycięstwo w konkursie CSS. Powiem szczerze, że miałem duży dylemat pomiędzy jeszcze jedną pracą. Generalnie, co zadecydowało to mała wielkość kodu, brak nadmiarowych klas czy tagów i jeden szczegół &#8211; obecność wrappera na wszelki wypadek. Ten css jest po prostu dobrze napisany i działa. A propos &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>Panie i Panowie. Brawa dla Krzysztofa Urbasa za <a href="http://ferrante.pl/krzysu.html">zwycięstwo</a> w konkursie CSS.</p>
<p style="text-align: center;"><a href="http://ferrante.pl/wp-content/uploads/2011/03/Introducing-HTML-5-Lawson-Bruce-9780321687296.jpg"><img src="http://ferrante.pl/wp-content/uploads/2011/03/Introducing-HTML-5-Lawson-Bruce-9780321687296.jpg" alt="" title="Introducing-HTML-5-Lawson-Bruce-9780321687296" width="311" height="400" class="alignnone size-full wp-image-1088" /></a></p>
<p>Powiem szczerze, że miałem duży dylemat pomiędzy jeszcze jedną pracą. Generalnie, co zadecydowało to mała wielkość kodu, brak nadmiarowych klas czy tagów i jeden szczegół &#8211; obecność wrappera na wszelki wypadek. Ten css jest po prostu dobrze napisany i działa. A propos &#8211; na stronie Opery <a href="http://www.opera.com/mobile/demo/">możecie przetestować go</a> pod Operą Mini.</p>
<p>Punktowaliśmy przede wszystkim to, czy używacie najświeższych ficzerów CSS3. Tak więc można było użyć przede wszystkim dwóch rzeczy: <span class="f">display: box</span> oraz <span class="f">calc</span>. Potem było działanie na urządzeniach mobilnych &#8211; wiele przysłanych rozwiązań tego nie wspierało. Liczyła się też schludność kodu. Jeśli ktoś dodawał mnóstwo niepotrzebnych <span class="f">id</span> to był oceniany niżej (to musiało być jednym z kryteriów z powodu wąskiej tematyki, mimo że identyfikatory nic nie robiły). Było też jedno rozwiązanie na <span class="f">table-cell</span> oraz różne kombinowanie z marginesami czy z <span class="f">position</span>.</p>
<p>Jeszcze raz przepraszam za opóźnienie. Ostatnio wróciłem do szkoleń z JS, pracuje też nad wieloma rzeczami naraz, co w połączeniu dało taki a nie inny efekt. Niemniej, chciałbym podziękować za kilkanaście rozwiązań. Większość z nich była na wysokim poziomie, chociaż pojawiło się kilka na podstawie <span class="f">float</span> &#8211; zachęcam ich autorów do sprawdzenia nowości.</p>
]]></content:encoded>
			<wfw:commentRss>http://ferrante.pl/life/ferrantepl/zwyciezca-konkursu-css/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Zwycięzca konkursu JavaScriptowego</title>
		<link>http://ferrante.pl/frontend/javascript/zwyciezca-konkursu-javascriptowego/</link>
		<comments>http://ferrante.pl/frontend/javascript/zwyciezca-konkursu-javascriptowego/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 14:25:50 +0000</pubDate>
		<dc:creator>ferrante</dc:creator>
				<category><![CDATA[ferrante.pl]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ferrante.pl/?p=1195</guid>
		<description><![CDATA[Wyłanianie zwycięzcy konkursu HTML5/CSS3 jeszcze trwa, natomiast już teraz mogę pogratulować niejakiemu Yanowi Kowalskyemu! Oto najszybszy kod jego autorstwa: /** * Funkcja rozwiązująca zadanie konkursowe * * @version 201103061820 * @author Yann Kowalsky * @param array input Jednowymiarowa, posortowana rosnąco tablica unikalnych * liczb całkowitych. * @return array Tablica z niepowtarzającymi się liczbami dodatnimi, których [...]]]></description>
			<content:encoded><![CDATA[<p>Wyłanianie zwycięzcy konkursu HTML5/CSS3 jeszcze trwa, natomiast już teraz mogę pogratulować niejakiemu Yanowi Kowalskyemu!</p>
<p style="text-align: center;"><a href="http://ferrante.pl/wp-content/uploads/2011/03/jspaterns-cover.jpg"><img src="http://ferrante.pl/wp-content/uploads/2011/03/jspaterns-cover.jpg" alt="" title="jspaterns-cover" width="397" height="520" class="alignnone size-full wp-image-1087" /></a></p>
<p>Oto najszybszy kod jego autorstwa:</p>
<pre><code>/**
 * Funkcja rozwiązująca zadanie konkursowe
 *
 * @version 201103061820
 * @author Yann Kowalsky
 * @param array input Jednowymiarowa, posortowana rosnąco tablica unikalnych
 * liczb całkowitych.
 * @return array Tablica z niepowtarzającymi się liczbami dodatnimi, których
 * wartość absolutna pojawiła się w tablicy dwa razy.
 */
window.solve = function(input) {
	var output = [];
	var length = input.length;
	var a, b; // "cache"

	// iteruje tablicę input od początku i od końca, porównując kolejno
	// wartość bezwzględną elementów
	for (
		var i = 0, j = ~- length, a = - input[0];
		(a = - input[i]) > 0;
		++ i
	) {
		// mały boost - po pierwsze zatrzymaj się tu, bo i tak nie spotkasz
		// wartości równych, po drugie - j przy następnym przebiegu pętli for
		// będzie startowało od ostatniej wartości, a nie od początku
		while (a < (b = input[j])) {
			-- j;
		}

		// wartość bezwględna taka sama
		if (a == b) {
			output[output.length] = b;
			// output[output.length] szybsze od output.push()...
			-- j;
		}
	}

	return output;
}</code></pre>
<p>Kilka słów na temat rozwiązań. Przede wszystkim należało użyć algorytmu nie korzystającego z pomocniczych struktur. Kilka algorytmów odpadło też ze względu na modyfikację tablicy z wejścia np. <span class="f">input.pop();</span>. Najczęstszym rozwiązaniem z kolei była iteracja po tablicy dwa razy w celu sprawdzenia ponownego wystąpienia liczby, co nie jest najbardziej wydajnym sposobem (2n do n^2).</p>
<p>Warto też powiedzieć, że JavaScript ma nieco inne właściwości niż choćby C++. Tu liczy się każda operacja. Dostałem bardzo oryginalne rozwiązanie oparte na wyszukiwaniu binarnym:</p>
<pre><code>
    var solve = function(arr){
        /*
            performs binary search on given array
            runs in log(n) where n is amount of elements in array
            @parameters:
                val       - searched value
                arr       - array where we seach, must be sorted in ascending order
                startLow  - optional, specifies starting low index of area of array where to perform search, defaults to 0
                startHigh - optional, specifies ending index of area in array where to search for given element,
                            defaults to arr.length - 1

            @returns:
                if searched value is in array, returns index of searched element in given array range which is >= 0
                if searched value is not in given array, returned value is < 0, and is equal to (last checked index + 1) * (-1)
        */
        var binSearch = function(val, arr, startLow, startHigh){
            var stopFnct = function(low, high){ return low > high;};
            var foundFnct = function(arr, idx, val){ return arr[idx] == val;};
            var _newBinSearchFnct = function(val, arr, startLow, startHigh){
                return _binSearch(val, arr, startLow, startHigh, stopFnct, foundFnct);
            }
            binSearch = _newBinSearchFnct;
            return binSearch.apply(null, arguments);
        }

        /*
            searches for the index of oelement in sorted array so that searched element value is <= val and next element's
            value in array is greater than val (>val)
            for example:
                >>>  diviseSearch(3, [1, 2, 3, 4, 5])
                2
                >>> diviseSearch (3, [1, 2, 4, 5])
                1

            runs in log(n) where n is amount of elements in array

            @parameters:
                val       - value that should divide array
                arr       - array where we seach, must be sorted in ascending order
                startLow  - optional, specifies starting low index of area of array where to perform search, defaults to 0
                startHigh - optional, specifies ending index of area in array where to search for given element,
                            defaults to arr.length - 1

            @returns:
                if searched value is in array, returns value >= 0 which represents index of searched element in given array range
                if searched value is not in given array then funciton returns -1
        */
        var diviseSearch = function(val, arr, startLow, startHigh){
            var stopFnct = function(low, high){ return low > high;};
            var foundFnct = function(arr, idx, val){ return arr[idx] <= val &#038;&#038; arr[idx + 1]>val;};
            var _newDiviseSearch = function(val, arr, startLow, startHigh){
                //M3 return _binSearch(val, arr, startLow, startHigh, stopFnct, foundFnct);
                var res = _binSearch(val, arr, startLow, startHigh, stopFnct, foundFnct);
                if(res<0){
                    return -(++res);
                } else {
                    return -1;
                }
            }
            diviseSearch = _newDiviseSearch;
            return diviseSearch.apply(null, arguments);
        }

        /*
            It performs binary search with custom function which checks whether proper index is found.

            Searches for value of index pointing to element in given array in the way so that the minimal amount of index changes
            would be required so that given function would succeed on changed index value. Assumes that:

                IF idx1 < idx2 AND solution isn't found in idx1 THEN
                for all idx3, so that idx3 < idx1, the solution for idx isn't found either
            AND
                IF idx1 > idx2 AND solution isn't found in idx1 THEN
                for all idx3, so that idx3 > idx1, the solution for idx isn't found either

            @parameters:
                val       - value that will be passed to foundFnct, it's meaning depends on foundFnct
                arr       - array where we seach, must be sorted in ascending order
                startLow  - optional, specifies starting low index of area of array where to perform search, defaults to 0
                startHigh - optional, specifies ending index of area in array where to search for given element,
                            defaults to arr.length - 1
                foundFnct - function that gets arguments: arr, idx, val. Meninng of these arguments is as follows:
                                arr - array where search is performed
                                idx - index that we ask if it may be the solution
                                val - value passed by the user
                            it should on the basis of given arguments determine whether currently checked index is solution
                            or not
                stopFnct  - function that takes two arguments: low, high. Mening of these arguments is as follows:
                                low - the lower index of the area in the searched array,
                                high - the upper index of the area in the searched array
                            on the basis of given arguments, it should determine whether to stop for searching
                extra_params - not used, but may be extended further for returning extra data (extra_params may be
                               passed as reference to object, and on that object will be added extra information about search (e.g.
                               checked indexes, checked values etc.)

            @returns:
                if returned value is < 0, then it's absoulte value represents ((index of array where foundFnct succeed) + 1)
                if returned value is >= 0, then it represents last checked index

        */
        var _binSearch = function(val, arr, startLow, startHigh, stopFnct, foundFnct, extra_params ){
            var length = arr.length,
            low = startLow || 0,
            high = startHigh || length - 1,
            idx, last_idx;

            for(var floor = Math.floor;;){
                idx = (high + low) / 2; //calculate middle index
                idx = floor(idx);
                last_idx = idx;

                // in the if-else block below, on the first position should be checking
                // whether foundFnct succeed, because foundFnct may succeed if arr[idx] < val or arr[idx] > val
                if(foundFnct(arr, idx, val)){
                    return -(idx + 1);
                } else if(arr[idx] > val){
                    high = --idx;
                } else { // arr[idx] < val
                    low = ++idx;
                }

                if(stopFnct(low, high))
                    return last_idx;
            }
        };

        var do_solve = function(arr){
            var swap = function(){
                var old_sLow = sLow, old_sHigh = sHigh, old_sIdx = sIdx;
                sLow = hLow, sHigh = hHigh, sIdx = hIdx;
                hLow = old_sLow, hHigh = old_sHigh, hIdx = old_sIdx;
            }

            var ret = [],
            length = arr.length,
            divIdx = diviseSearch(0, arr),
            midEl = arr[divIdx];

            if(divIdx === -1)
                return [];

            var smaller_amount = divIdx;// calculate amount of negative and positive elements in array
            if(midEl != 0)
                smaller_amount += 1;
            var higher_amount = length - smaller_amount,
            sLow = 0, sHigh = divIdx, sIdx,
            hLow = divIdx + 1 , hHigh = length - 1, hIdx;
            if(midEl == 0)
                sHigh--;

            if(smaller_amount == 0 || higher_amount == 0)
                return [];

            if(higher_amount < smaller_amount)
                swap();

            var searched, res, toAdd,
            ret = new Array(Math.ceil(length/2)),
            retCount = 0;
            for(var i=sLow, abs = Math.abs; i<=sHigh; i++){
                searched = -arr[i];
                res = binSearch(searched, arr, hLow, hHigh);
                if(res < 0){
                    res *= -1;
                    res -= 2;
                    ret[retCount++] = abs(searched);
                    hHigh=res;
                }else{
                    hHigh=res;
                    if(hLow == hHigh)
                        break;
                }
            }

            return ret.slice(0, retCount);
        }

        solve = do_solve;
        return solve.apply(null, arguments);
    }</code></pre>
<p>Okazało się jednak, że to przerost formy nad treścią.</p>
<p>Z innych ciekawych rozwiązań:</p>
<pre><code>function solve(i){return(i+'').match(/-(\d+)(?=.*?,\1\b)/g).map(Math.abs)}</code></pre>
<p>Zamiana tablicy na stringa i potem wyszukanie powtarzających się wartości. Sprytne, niestety dość wolne.</p>
<p>Inny bardzo JavaScriptowy kod to:</p>
<pre><code>function solve(arr) {
    return arr.filter(function(v,i,a){ return a.indexOf(-v) !== -1 &#038;&#038; v>0; });
}</code></pre>
<p>Korzysta z dobrodziejstw JS 1.6+, niestety jest dość wolny.</p>
<p>Warto też wkleić kod szybkich rozwiązanń: HrynKa:</p>
<pre><code>/**
 * funkcja realizujaca zadanie konkursowe z http://ferrante.pl/2011/03/02/wygraj-ksiazki-o-javascript-i-html5/
 *
 * Algorytm opiera sie na iteracji tablicy z obu koncow. Pozycja w tablicy przesuwana jest na kolejna (ku liczbom o
 * mniejszych wartosciach bezwzglednych) z tej strony, z ktorej wartosc bezwzgledna liczby pod dana pozycja jest
 * wieksza. Dojscie do zera, z ktorejkolwiek strony, konczy dzialanie.
 *
 * @author Maciej "HryneK" Hryniewicz
<hrynek@hrynek.com>
 * @param array data posortowane rosnaco unikalne liczby calkowite
 * @return array liczby dodatnie, ktorych wartosc absolutna pojawila sie dwukrotnie w tablicy wejsciowej
 */
window.solve = function (data) {
	var ans = [], // dane wyjsciowe
		ans_len = 0, // ilosc elementow w tablicy wyjsciowej - dla recznej realizacji .push()
		idx_a = 0, // "lewa" pozycja w tablicy
		idx_b = data.length - 1, // "prawa" pozycja w tablicy
		a, // wartosc bezwzgledna "lewej" liczby
		b; // wartosc bezwzgledna "prawej" liczby

	if (idx_b < 1) {
		// w tablicy wejsciowej sa mniej niz dwa elementy
		return [];
	}

	a = -data[idx_a], // na razie zakladamy, ze liczba jest ujemna
	b = data[idx_b]; // na razie zakladamy, ze liczba jest dodatnia

	if (a <= 0 || b <= 0) {
		// w danych wejsciowych nie ma dodatnich i ujemnych wartosci - wynik jest pusty
		return [];
	}

	while (true) {
		while (a > b) {
			if ((a = -data[++idx_a]) <= 0) {
				return ans;
			}
		}
		while (a < b) {
			if ((b = data[--idx_b]) <= 0) {
				return ans;
			}
		}
		if (a == b) {
			// @todo jak .push() przyspieszy, to podmienic i usunac komentarze
			ans[ans_len++] = b; // szybsze niz .push()

			// bierzemy kolejna "prawa" liczbe (mozna byloby brac nastepna lewa - w zaleznosci, czy
			// spodziewamy sie miec wiecej ujemnych czy dodatnich liczb w danych wejsciowych)
			if ((b = data[--idx_b]) <= 0) {
				return ans;
			}
		}
		// wartosci bezwzgledne nie sa rowne, wiec znowu "lewa" jest wieksza - zaczynamy kolejny obieg
	}
}</code></pre>
<p>Piotrka Koszulińskiego:</p>
<pre><code>var solve = function(input) {
 var a = 0,
	  b = input.length - 1,
	  av, bv, output = [];

 if (b < 1) return [];

 av = Math.abs(input[0]);
 bv = Math.abs(input[b]);

 while (a < b) {
  if (av > bv) {
	av = Math.abs(input[++a]);
  }
  else if (av < bv) {
	bv = Math.abs(input[--b]);
  }
  else {
	output[output.length] = av;
	av = Math.abs(input[++a]);
	bv = Math.abs(input[--b]);
  }
 }

 return output;
};</code></pre>
<p>Czy Przemka Ciężkowskiego:</p>
<pre><code>window.solve = function (input) {
	 var output = [], length = input.length;
	 if (length > 1){
				var l = 0, r = length - 1, abs = Math.abs, tmp1 = abs(input[l]),
tmp2 = abs(input[r]);
				do{
						  if (tmp1 > tmp2){
									 tmp1 = abs(input[++l]);
						  }else if (tmp1 < tmp2){
									 tmp2 = abs(input[--r]);
						  }else{
									 output[output.length] = tmp1;
									 tmp1 = abs(input[++l]);
									 tmp2 = abs(input[--r]);
						  }
				}while (l < r);
	 }
	 return output;
};</code></pre>
<p>A oto zestaw danych, na którym testowaliśmy:</p>
<pre><code>var testArr = [];
var testArr2 = [];
var testArr3 = [];
var testArr4 = [];
var testArr5 = [];
var testArr6 = [];

for (var i = -10; i < 10; i++) {
	testArr.push(i);
}

for (var i = -100; i < 100; i++) {
	 testArr2.push(i);
}

for (var i = -500; i < 100; i++) {
	testArr3.push(i);
}

for (var i = -10000; i < 10000; i++) {
	testArr4.push(i * 2);
}

for (var i = -50000; i < 50000; i++) {
	testArr5.push(i);
}

for (var i = -3000000; i < 3000000; i++) {
	if (Math.random() > 0.5) {
		testArr6.push(i);
 	}
}</code></pre>
<p>Oczywiście w grę wchodziły również styl i długość kodu. Co się jednak okazało, najszybszy kod był jednym z najkrótszych i bardzo dobrze napisanych. Gratulujemy zwycięzcy!</p>
]]></content:encoded>
			<wfw:commentRss>http://ferrante.pl/frontend/javascript/zwyciezca-konkursu-javascriptowego/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Konkurs z Autentika.pl &#8211; zakończenie</title>
		<link>http://ferrante.pl/frontend/javascript/konkurs-z-autentika-pl-zakonczenie/</link>
		<comments>http://ferrante.pl/frontend/javascript/konkurs-z-autentika-pl-zakonczenie/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 12:50:44 +0000</pubDate>
		<dc:creator>ferrante</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[ferrante.pl]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ferrante.pl/?p=1186</guid>
		<description><![CDATA[Wczoraj zakończył się konkurs front-endowy przy współpracy z Autentika.pl. Przyszło 60 odpowiedzi z czego wiele bardzo ciekawych. Wyniki opublikuję w weekend bądź na początku przyszłego tygodnia &#8211; trochę tego jest&#8230; Przy okazji konkurs okazał się dużym sukcesem &#8211; oto statystyki wpisu o nim:]]></description>
			<content:encoded><![CDATA[<p>Wczoraj zakończył się <a href="http://ferrante.pl/2011/03/02/wygraj-ksiazki-o-javascript-i-html5/">konkurs</a> front-endowy przy współpracy z <a href="http://autentika.pl">Autentika.pl</a>. Przyszło 60 odpowiedzi z czego wiele bardzo ciekawych. Wyniki opublikuję w weekend bądź na początku przyszłego tygodnia &#8211; trochę tego jest&#8230;</p>
<p>Przy okazji konkurs okazał się dużym sukcesem &#8211; oto statystyki wpisu o nim:</p>
<p style="text-align: center;"><a href="http://ferrante.pl/wp-content/uploads/2011/03/Autentika-statystyki.png"><img src="http://ferrante.pl/wp-content/uploads/2011/03/Autentika-statystyki.png" alt="" title="Autentika - statystyki" width="447" height="236" class="alignnone size-full wp-image-1187" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://ferrante.pl/frontend/javascript/konkurs-z-autentika-pl-zakonczenie/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>To dzisiaj</title>
		<link>http://ferrante.pl/frontend/javascript/to-dzisiaj/</link>
		<comments>http://ferrante.pl/frontend/javascript/to-dzisiaj/#comments</comments>
		<pubDate>Wed, 23 Feb 2011 23:00:53 +0000</pubDate>
		<dc:creator>ferrante</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[ferrante.pl]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ferrante.pl/?p=1041</guid>
		<description><![CDATA[4 lata, 150 artykułów, 2011 komentarzy (ciekawe, prawda?), prawie 1000 subskrybentów bloga przez RSS, 500 użytkowników dziennie. Dziękuję Wam!]]></description>
			<content:encoded><![CDATA[<p>4 lata, 150 artykułów, 2011 komentarzy (ciekawe, prawda?), prawie 1000 subskrybentów bloga przez RSS, 500 użytkowników dziennie. Dziękuję Wam!</p>
]]></content:encoded>
			<wfw:commentRss>http://ferrante.pl/frontend/javascript/to-dzisiaj/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>meet.js::after</title>
		<link>http://ferrante.pl/frontend/javascript/meet-jsafter/</link>
		<comments>http://ferrante.pl/frontend/javascript/meet-jsafter/#comments</comments>
		<pubDate>Sun, 13 Feb 2011 17:31:59 +0000</pubDate>
		<dc:creator>ferrante</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[ferrante.pl]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Publicystyka]]></category>

		<guid isPermaLink="false">http://ferrante.pl/?p=1027</guid>
		<description><![CDATA[W minioną sobotę na spotkaniu meet.js miałem przyjemność wygłosić debiutancką mini prelekcję na temat nowości w HTML5 i CSS3, które mogą w wielu przypadkach zastąpić rozwiązania oparte na JavaScripcie. Oto prezentacja: Od jQuery do HTML5 i CSS3 Możecie również ocenić moje &#8222;wystąpienie&#8221; na Speakerrate.com. Jestem dość zadowolony z jego przebiegu, ale mam też świadomość, że nie [...]]]></description>
			<content:encoded><![CDATA[<p>W minioną sobotę na spotkaniu meet.js miałem przyjemność wygłosić debiutancką mini prelekcję na temat nowości w HTML5 i CSS3, które mogą w wielu przypadkach zastąpić rozwiązania oparte na JavaScripcie.</p>
<p>Oto prezentacja:</p>
<div style="width:425px" id="__ss_6911770"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/ferrantes/od-jquery-do-html5-i-css3" title="Od jQuery do HTML5 i CSS3">Od jQuery do HTML5 i CSS3</a></strong><object id="__sse6911770" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=meet-js-12-02-2011-110213111202-phpapp02&#038;stripped_title=od-jquery-do-html5-i-css3&#038;userName=ferrantes" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6911770" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=meet-js-12-02-2011-110213111202-phpapp02&#038;stripped_title=od-jquery-do-html5-i-css3&#038;userName=ferrantes" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
<p>Możecie również <a href="http://speakerrate.com/talks/5616-od-jquery-do-html5-i-css3">ocenić moje &#8222;wystąpienie&#8221; na Speakerrate.com</a>.</p>
<p>Jestem dość zadowolony z jego przebiegu, ale mam też świadomość, że nie uniknąłem kilku problemów technicznych, które pewnie będą widoczne w materiale filmowym, jaki postaramy się wkrótce opublikować. W każdym razie, prezentacja miała być bardzo poglądowa i nie skupiać się na szczegółach. Mam nadzieję, że to się udało i choć część osób sprawdzi uważniej, jakie <em>ficzery</em> niosą za sobą słówka HTML5 oraz CSS3.</p>
<p>Zapraszam również na JSNews.pl, gdzie <a href="http://jsnews.pl/2011/02/13/po-meet-js-w-poznaniu/">trochę wiecej info o przyszłości meet.js</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ferrante.pl/frontend/javascript/meet-jsafter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>meet.js &#8211; spotkajmy się by pomówić o webdev</title>
		<link>http://ferrante.pl/frontend/javascript/meet-js-spotkajmy-sie-by-pomowic-o-webdev/</link>
		<comments>http://ferrante.pl/frontend/javascript/meet-js-spotkajmy-sie-by-pomowic-o-webdev/#comments</comments>
		<pubDate>Tue, 18 Jan 2011 18:00:02 +0000</pubDate>
		<dc:creator>ferrante</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[ferrante.pl]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://ferrante.pl/?p=1021</guid>
		<description><![CDATA[Jakiś czas temu pisałem o spotkaniu pod egidą JSNews.pl. Dziś wiemy nieco więcej. Meetup zyskał nową, lepszą nazwę &#8211; meet.js, a pierwsza edycja odbędzie się w Poznaniu, 12 lutego od godziny 11.30 w Klubie ZAK przy ulicy Szyperskiej 2. Wstęp wolny! Prelegenci: - Zbyszek Tenerowicz (jquerymobiledictionary.dyndns.org) &#8211; o jQuery Mobile - Krzysztof Szafranek (Nokia, szafranek.net) [...]]]></description>
			<content:encoded><![CDATA[<p>Jakiś czas temu pisałem o spotkaniu pod egidą <a href="http://jsnews.pl">JSNews.pl</a>. Dziś wiemy nieco więcej. Meetup zyskał nową, lepszą nazwę &#8211; <em>meet.js</em>, a pierwsza edycja odbędzie się w Poznaniu, 12 lutego od godziny 11.30 w Klubie ZAK przy ulicy Szyperskiej 2. Wstęp wolny!</p>
<p>Prelegenci:</p>
<blockquote><p>- Zbyszek Tenerowicz (<a href="http://jquerymobiledictionary.dyndns.org">jquerymobiledictionary.dyndns.org</a>) &#8211; o jQuery Mobile<br />
- Krzysztof Szafranek (Nokia, <a href="http://szafranek.net">szafranek.net</a>) &#8211; o silniku fizycznym Box2d w JavaScript<br />
- Kamil Trebunia (Zynga) &#8211; o audio w HTML5<br />
- Rafał Kukawski (Nokia, <a href="http://kukawski.pl">kukawski.pl</a>) &#8211; o Indexed DB API<br />
- Damian Wielgosik (<a href="http://ferrante.pl">ferrante.pl</a>) &#8211; &#8222;od jQuery do HTML5 i CSS3&#8243;</p></blockquote>
<p><a href="http://jsnews.pl/2011/01/18/meet-js-12-lutego-w-poznaniu/">Nieco więcej o spotkaniu na JSNews.pl</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ferrante.pl/frontend/javascript/meet-js-spotkajmy-sie-by-pomowic-o-webdev/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Rok 2010</title>
		<link>http://ferrante.pl/life/publicystyka/rok-2010/</link>
		<comments>http://ferrante.pl/life/publicystyka/rok-2010/#comments</comments>
		<pubDate>Tue, 11 Jan 2011 22:08:40 +0000</pubDate>
		<dc:creator>ferrante</dc:creator>
				<category><![CDATA[ferrante.pl]]></category>
		<category><![CDATA[Publicystyka]]></category>

		<guid isPermaLink="false">http://ferrante.pl/?p=994</guid>
		<description><![CDATA[Jaki był miniony rok? Trzeba powiedzieć, że dość dobry. Bardzo pracowity, męczący, ale udany. Na blogu z kolei pojawiło się więcej tekstów niż w roku 2009. Jest to więc dobra okazja, by podziękować Wam, że subskrybujecie RSS oraz zaglądacie tutaj i komentujecie posty. Nie zawsze się zgadzamy, czasem były drobne spięcia, jednak bardzo doceniam wkład [...]]]></description>
			<content:encoded><![CDATA[<p>Jaki był miniony rok? Trzeba powiedzieć, że dość dobry. Bardzo pracowity, męczący, ale udany. Na blogu z kolei pojawiło się więcej tekstów niż w roku 2009. Jest to więc dobra okazja, by podziękować Wam, że subskrybujecie RSS oraz zaglądacie tutaj i komentujecie posty. Nie zawsze się zgadzamy, czasem były drobne spięcia, jednak bardzo doceniam wkład każdego z Was. Dziękuję!<span id="more-994"></span></p>
<p>Jeśli piszę o sprawach prywatnych, to prawie zawsze mają one jakiś związek z technologiami. Nie inaczej spróbuję podsumować rok 2010. </p>
<p>Trzeba przyznać, że zaczął się intensywnie, serią trzech szkoleń z zaawansowanego JavaScriptu, poznaniem mnóstwa ciekawych ludzi, ale przede wszystkim jako takim sprostaniu publicznym występom. Całość zaaowocowała <a href="http://varjs.com">Just Advanced JavaScript</a>, ściągawce z języka, która ma dziś <a href="http://slideshare.net/ferrantes/just-advanced-javascript">prawie 6 tysięcy wyświetleń</a>. Szczerze powiedziawszy żałuję nieco tej nazwy, powinna być nieco bardziej wyrafinowana, tym bardziej, że często słowo <em>zaawansowany</em> mógłby zastąpić rzeczownik <em>osobliwości języka</em>. Niemniej udało się osiągnąć namiastkę czegoś, do czego dążę od kilku lat &#8211; książki o JavaScript. W roku 2011 chciałbym nieco poważniej podejść do tego tematu, bo nieco ustabilizowałem czasowo swoje życie zawodowe.</p>
<p>Właśnie, rok 2010 to ostateczne pogodzenie się z faktem, że korporacje nie sprzyjają &mdash; przynajmniej mi &mdash; rozwojowi i realizowaniu pomysłów. Szukając swego miejsca (chyba trafiło mnie też lekkie wypalenie), opuściłem po 1,5 roku kontraktu Nokię na rzecz pracy zdalnej z jednymi z moich idoli jakimi są <a href="http://michaux.ca">Peter Michaux</a> oraz <a href="http://garrettsmith.net">Garrett Smith</a>. Teraz to ja ustalam, gdzie i kiedy chcę pracować. Koniec ze służalczymi 40 godzinami tygodniowo. Po drodze było też kilka innych interview, z których powstało parę pomysłów na notki, czekających w kolejce do napisania. Między innymi o tym, że łatwiej dostać się do korporacji, niż do startupu. Co tylko dobrze świadczy o startupach.</p>
<p>Jeśli mogę też Wam coś doradzić, wyjedźcie, poznajcie inne kraje, innych programistów. Zdobywajcie doświadczenie. W Polsce na naprawdę godnych, europejskich warunkach (pensja, komfort pracy, know-how) pracuje się jedynie w <a href="http://roche.pl">Roche Polska</a> i kilku innych firmach, o których tylko słyszałem. Jest ich niewiele, więc jeśli nie chcecie zostać przeciętniakami, rozejrzyjcie się dookoła. Świat stoi przed nami otworem.</p>
<p>Kontynuując, w poprzednim roku udało się również doprowadzić do końca konferencję <a href="http://front-trends.com">Front-Trends</a>, z czego jestem bardzo zadowolony, ponieważ spełniło się jedno z moich marzeń. Z drugiej strony, nie wszystko pod względem organizacyjnym było perfekcyjne, aczkolwiek <a href="http://www.wait-till-i.com/2010/10/25/fronttrends2010-in-warsaw-poland-my-impressions-slides-and-audio/">Christian Heilmann</a> wystawił nam dość wysoką notę. Liczę, że uda się zorganizować następną edycję, pozbywając się znanych nam usterek.</p>
<p>W 2011 roku planujemy z <a href="http://czerski.info">Pawłem Czerskim</a> także <a href="http://falsyvalues.com">Falsy Values</a> &#8211; prawdziwą, 100% konferencję o JavaScripcie, opartą w dużej mierze o mnóstwo workshopów z ludźmi, którzy znają się na swoim fachu. Będę też ja ze swoimi dwoma workshopami z podstaw JavaScriptu, aczkolwiek nie wiem, czy to zdanie nie kontrastuje za bardzo z poprzednim&#8230;</p>
<p>Co do front-endu jako takiego, w 2011 mam zamiar rozruszać naszą <a href="http://blog.koszulinski.pl/2010/12/26/gdzie-ta-spolecznosc-polskich-frontendowcow/">skostniałą scenę front-endu</a>, aczkolwiek wiem, że będzie ciężko. Pierwszym krokiem do celu jest <a href="http://jsnews.pl/2011/01/03/jsnews-meetup/">JSNews Meetup</a>. Chciałbym, by idea ta rozpowszechniła się w innych miastach, jak na razie jednak pozostaje osobiście podłożyć fundamenty pod to, miejmy nadzieje, fajne spotkanie. 2010 pokazał, że tkwi w nas potencjał. Pisząc te słowa, o ironio, właśnie przerwał mi mój znajomy, zagadując na komunikatorze:</p>
<blockquote><p> kurde<br />
za duzo sie w tym js dzieje<br />
moglbym non stop ogladac nowe demka/patrzec w kod/czytac newsy<br />
i jakies githuby</p></blockquote>
<p>Wszystko wskazuje na to, że rok 2011 to kolejny okres dominacji JavaScriptu, a przecież już w 2010 było bardzo dobrze. W związku z tym, w minionym roku odpaliliśmy nawet <a href="http://jsnews.pl">JSNews.pl</a>. W roku 2011 prawdopodobnie czeka nas reorganizacja sposobu przekazywania treści, ponieważ nadal szukamy najbardziej optymalnej dla nas metody publikacji.</p>
<p>Rok 2010 to dla mnie także bolesne przekonanie, że niewielu jest grafików-freelancerów, którzy swoją pracę traktują serio. Tym śmieszniejsze są dla mnie artykuły w Wyborczej o oczekiwaniu na przelewy. W 2010 ogólnie długo czekałem &mdash; najdłużej na oddanie spóźnionych prac przez grafików lub w ogóle na jakikolwiek kontakt.</p>
<p>Podsumowując jednak, 2010 to najintensywniejszy dla mnie rok w całym moim życiu. Jestem z niego zadowolony, jednak mam przeczucie, że będą jeszcze lepsze i jestem gotów do działania, ponieważ w kolejce czeka mnóstwo pomysłów. Życzę więc sobie i Wam udanego Nowego Roku!</p>
<p>Niniejszym chciałbym podziękować też personalnie osobom, z którymi współpracowałem oraz tym, którzy najbardziej pozytywnie zapisali się w mojej pamięci w 2010 roku. Są to: <a href="http://devmeetings.pl">Piotr Zwoliński</a>, <a href="http://czerski.info">Paweł Czerski</a>, <a href="http://twitter.com/KamilTrebunia">Kamil Trebunia</a>, <a href="http://kukawski.pl">Rafał Kukawski</a> oraz ekipy startupów <a href="http://ankietka.pl">ankietka.pl</a> (warto czekać na ich nową wersję) i <a href="http://stadiony.net">Stadiony.net</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ferrante.pl/life/publicystyka/rok-2010/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>

