<?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>Rubysfera &#187; Aktualności</title>
	<atom:link href="http://rubysfera.pl/category/aktualnosci-2/feed/" rel="self" type="application/rss+xml" />
	<link>http://rubysfera.pl</link>
	<description>Kolejna witryna oparta na WordPressie</description>
	<lastBuildDate>Wed, 02 May 2012 19:17:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Konkurs na aplikację webową w Railsach</title>
		<link>http://rubysfera.pl/2012/04/konkurs-na-aplikacje-webowa-w-railsach/</link>
		<comments>http://rubysfera.pl/2012/04/konkurs-na-aplikacje-webowa-w-railsach/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 09:07:04 +0000</pubDate>
		<dc:creator>tjeden</dc:creator>
				<category><![CDATA[Aktualności]]></category>

		<guid isPermaLink="false">http://rubysfera.pl/?p=1660</guid>
		<description><![CDATA[Napisz aplikację webową i wygraj tablet CTAB. Dzisiaj znów mamy dla was konkurs.]]></description>
			<content:encoded><![CDATA[<p><a href="http://rubysfera.pl/2012/04/konkurs-na-aplikacje-webowa-w-railsach/ctab_double/" rel="attachment wp-att-1663"><img src="http://rubysfera.pl/wp-content/uploads/2012/04/ctab_double.png" alt="" title="ctab_double" width="286" height="195" class="alignright size-full wp-image-1663" /></a>
<p>Firma Compendium Centrum Edukacyjne zaprasza miłośników języka Ruby do wzięcia udziału w konkursie na aplikację webową w Ruby on Rails. Do wygrania jest <a href="http://www.ctab.pl/">tablet CTAB</a> (<a href="http://www.ctab.pl/specyfikacja/">specyfikacja</a>). Ponieważ lubimy takie inicatywy, Rubysfera została patronem konkursu.</p>
<p>Aplikację należy stworzyć korzystając z zasobów <a href="http://thedatahub.org/">thedatahub.org</a>, a następnie opublikować ją na <a href="htttp://github.com">githubie</a>. Prace konkursowe będą oceniane według następujących kryteriów (w skali od 1 do 5):</p>
<ul>
<li>opcje i funkcjonalność</li>
<li>użyteczność aplikacji</li>
<li>szybkość działania</li>
<li>wizualizacje</li>
<li>zakres danych z thedatahub.org wykorzystywanych przez aplikację</li>
<li>innowacyjność</li>
<li>udogodnienia dla niepełnosprawnych</li>
</ul>
<p>Zwycięzca otrzyma tablet CTAB, urządzenie specjalnie wyprodukowane dla Compendium CE.</p>
<h3>Zgłoszenia</h3>
<p><a>Aplikacje biorące udział w konkursie należy zgłosić za pomocą <a href="http://www.compendium.pl/files/konkurs_railsberry_formularz_pl.pdf">pobranego formularza</a> do <strong><del>11 maja<del> </strong> (termin został przesunięty na <strong>25 maja</strong>) na adres <a href="mailto:mark@compendium.pl">mark@compendium.pl</a>.</p>
<p>Aplikacja webowa powinna spełniać następujące wymagania:</p>
<ul>
<li>pracować bezawaryjnie na urządzeniach mobilnych</li>
<li>
korzystać z jednego lub więcej źródła danych z thedatahub.org (o wielkości co najmniej 1000 wpisów). Istnieje również możliwość skorzystania z własnego źródła danych, ale wcześniej należy je zgłosić do thedatahub.org.</li>
<li>
być opublikowana za zasadach jednej z licencji open software (GPL, MIT/X11, BSD etc.)</li>
</ul>
<p>Pełny regulamin i skład Jury dostępny jest na <a href="http://www.compendium.pl/info/1567/konkurs-na-webaplikacje/1">stronie konkursu</a>.</p>
<p>Co prawda pogoda na razie nie zachęca, ale podobno pod koniec tygodnia ma być oziębienie. Mashupowa aplikacja może być ciekawym zajęciem na długi weekend, a <a href="http://www.ctab.pl/">interesująca nagroda</a> przypadnie do gustu fanom Andorida, zatem do dzieła!</p>
]]></content:encoded>
			<wfw:commentRss>http://rubysfera.pl/2012/04/konkurs-na-aplikacje-webowa-w-railsach/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Wroc_love.rb &#8211; wyniki konkursu</title>
		<link>http://rubysfera.pl/2012/02/wroc_love-rb-wyniki-konkursu/</link>
		<comments>http://rubysfera.pl/2012/02/wroc_love-rb-wyniki-konkursu/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 20:45:25 +0000</pubDate>
		<dc:creator>tjeden</dc:creator>
				<category><![CDATA[Aktualności]]></category>

		<guid isPermaLink="false">http://rubysfera.pl/?p=1634</guid>
		<description><![CDATA[Wyniki konkursu w którym do wygrania był bilet na <a href="http://wrocloverb.com/">wroc_love.rb</a>, Rubiową konferencję, we Wrocławiu.]]></description>
			<content:encoded><![CDATA[<p>W zeszłym tygodniu ogłosiliśmy <a href="http://rubysfera.pl/2012/02/wygraj-bilet-na-wroc_love-rb/">konkurs</a>, w którym do wygrania był bilet na <a href="http://wrocloverb.com/">wroc_love.rb</a> &#8211; konferencję poświęconą Rubiemu, która odbędzie się 10 i 11 Marca we Wrocławiu. Poniżej znajduje się link do losowania, nie będę pisał kto wygrał, żeby nie psuć puenty. Skrypt losujący jest dostępny <a href="https://gist.github.com/1869582">pod tym adresem</a>.</p>
<p><iframe src="http://player.vimeo.com/video/37129687?title=0&amp;byline=0&amp;portrait=0" width="700" height="394" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<p>Zwycięzcy gratuluję (skontaktujemy się z nim mailowo), a wszystkim uczestnikom dziękuję gorąco za udział.  Dla niezdecydowanych informacja: kilka biletów jest jeszcze <a href="http://www.eventbrite.com/event/2726199135">dostępnych</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://rubysfera.pl/2012/02/wroc_love-rb-wyniki-konkursu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wygraj bilet na Wroc_love.rb</title>
		<link>http://rubysfera.pl/2012/02/wygraj-bilet-na-wroc_love-rb/</link>
		<comments>http://rubysfera.pl/2012/02/wygraj-bilet-na-wroc_love-rb/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 10:18:23 +0000</pubDate>
		<dc:creator>tjeden</dc:creator>
				<category><![CDATA[Aktualności]]></category>

		<guid isPermaLink="false">http://rubysfera.pl/?p=1570</guid>
		<description><![CDATA[Wygraj bilet na  <a href="http://wrocloverb.com/">wroc_love.rb</a> , konferencję na której nie może Cię zabraknąć  <strong>10 i 11 marca </strong>  we <strong>Wrocławiu</strong>.]]></description>
			<content:encoded><![CDATA[<p><a href="http://rubysfera.pl/2012/02/wygraj-bilet-na-wroc_love-rb/avatar_a208ec531a94_128/" rel="attachment wp-att-1579"><img src="http://rubysfera.pl/wp-content/uploads/2012/02/avatar_a208ec531a94_128.png" alt="" title="avatar_a208ec531a94_128" width="128" height="128" class="alignright size-full wp-image-1579" /></a>
</p>
<p>Nie można ostatnio narzekać na rubiowe konferencje w Polsce. Po jesiennym <a href="http://rupy.eu/">RuPy</a> (przy okazji: <a href="http://blip.tv/rupy-strongly-dynamic-conference">dostępne są już nagrania</a>), już za miesiąc <strong>10 i 11 marca </strong> zapowiada się świetna konferencja we Wrocławiu o wdzięcznej nazwie <a href="http://wrocloverb.com/">wroc_love.rb</a>. Przygotowaliśmy dziś konkurs, w którym można wygrać bilet na konferencję, więcej szczegółów na końcu artykułu.</p>
<h3>Czego się można spodziewać?</h3>
<p>Dużo merytorycznej dyskusji, o którą dba <a href="http://andrzejonsoftware.blogspot.com/">Andrzej Krzywda</a>, jeden z organizatorów konferencji. Na pewno warto będzie posłuchać <a href="http://blog.wrocloverb.com/post/15373097663/avdi-grimm">Avdi Grimma</a> &#8211; między innymi autora <a href="http://exceptionalruby.com/?utm_source=devblog&#038;utm_medium=banner&#038;utm_campaign=blog_sidebar">Exceptional Ruby</a>. Przejrzyjcie jego <a href="http://avdi.org/devblog/">blog</a>, tematy które porusza stoją na wysokim poziomie.</p>
<p>Będzie też między innymi <a href="http://nicksda.apotomo.de/">Nick Suterrer</a>, którego prezentacje zawsze polecam &#8211; Nick jest świetnym mówcą i ma o czym opowiadać, uważajcie tylko z nim na afterparty, jeśli macie ambitne plany na dzień następny. Oprócz nich można się spodziewać gorących europejskich nazwisk takich jak: <a href="http://blog.wrocloverb.com/post/15626089020/steve-klabnik">Steve Klabnik</a> (<a href="http://rubyheroes.com/heroes">RubyHero &#8217;11</a>), czy <a href="http://blog.wrocloverb.com/post/16342454204/jim-gay">Jim Gay</a> &#8211; core team member Radiant CMS.</p>
<p>Z polskich nazwisk będzie można usłyszeć między innymi <a href="http://blog.wrocloverb.com/post/11687828797/if-you-were-at-rupy-2011-then-you-already-know">Piotrka &#8222;Drogusa&#8221; Sarnackiego</a>, &#8222;naszego człowieka&#8221; w <a href="http://contributors.rubyonrails.org/contributors/piotr-sarnacki/commits">Railsach</a>, <a href="http://chastell.net/">Piotra Szotkowskiego</a>, który występował między innymi na RubyConf za oceanem, ScotlandOnRails, czy <a href="http://rubyandrails.eu/">RubyAndRails</a>, a także <a href="http://blog.wrocloverb.com/post/17221627747/michal-taszycki">Michała Taszyckiego</a>, który poprowadził ostatnio <a href="http://rubysfera.pl/2011/12/coderetreat-relacja/">CodeRetreat w Warszawie</a>.</p>
<h3>Bilety</h3>
<p>Pierwsza tura biletów rozeszła się w ciągu jednego dnia, dziś o 18 <a href="http://www.eventbrite.com/event/2726199135">startuje druga i ostatnia tura</a>. Bilety ostatnio były dostępne w cenie 239 złotych. Prawdopodobnie teraz będą droższe, ale i tak cena nie powinna odstraszać. Jak na dwudniową konferencję z niezłymi nazwiskami szkoda nie kupić, bo zapowiada się świetny weekend we Wrocławiu. My już bilety kupiliśmy, do zobaczenia na miejscu.</p>
<h3>Konkurs</h3>
<p>Do wygrania jest jeden bilet, ufundowany przez organizatorów. Zasady są proste: Napisz na twiterze lub w inny sposób daj znać światu o wroc_love.rb i w komentarzu pod tym artykułem umieść link do tweeta, lub informacji, którą zamieściłeś. Spośród wszystkich zgłoszeń, zostanie rozlosowany <strong>jeden darmowy bilet</strong>. Konkurs trwa do <strong>20 lutego do godziny 12:00</strong>. Powodzenia!</p>
]]></content:encoded>
			<wfw:commentRss>http://rubysfera.pl/2012/02/wygraj-bilet-na-wroc_love-rb/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Meetjs Summit &#8211; relacja</title>
		<link>http://rubysfera.pl/2012/01/summit-meetjs-relacja/</link>
		<comments>http://rubysfera.pl/2012/01/summit-meetjs-relacja/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 10:18:37 +0000</pubDate>
		<dc:creator>Paweł Kowalski</dc:creator>
				<category><![CDATA[Aktualności]]></category>

		<guid isPermaLink="false">http://rubysfera.pl/?p=1463</guid>
		<description><![CDATA[Gościnna relacja <a href="https://twitter.com/#!/pavelloz">Pawła Kowalskiego</a> z <a href="http://summit.meetjs.pl/">Meetjs Summit</a> w Poznaniu. (Tak, niedługo będzie coś o Rubym i nie o konferencjach).]]></description>
			<content:encoded><![CDATA[<p><a href="http://rubysfera.pl/2012/01/summit-meetjs-relacja/dsc_0613/" rel="attachment wp-att-1478"><img src="http://rubysfera.pl/wp-content/uploads/2012/01/DSC_0613-300x198.jpg" alt="" title="DSC_0613" width="300" height="198" class="alignright size-medium wp-image-1478" /></a>
<p>Spróbuję trochę opowiedzieć o tym co wydarzyło się <a href="http://summit.meetjs.pl/">14 stycznia</a> i wczesnego 15 stycznia. Jakbym był speakerem, to musiałbym w tym momencie powiedzieć &#8222;it was remarkable event&#8221;, ale nie jestem, więc rozwinę myśl w moim natywnym języku.</p>
<h3>Organizatorzy</h3>
<p>Rejestracja, obsługa, pomoc techniczna &#8211; wszyscy w przewidywalnych miejscach i chętni do pomocy, nawet tym trudniejszym do współpracy. Chylę czoła. Sponsorzy również dopisali, ciepłe napoje, catering w porze lunchu i świetne stoisko allegro z xboxem na którym można było się sprawdzić w Mortal Kombat.</p>
<p>Rozłożenie wykładów (chociaż niektóre bardziej przypominały warsztaty) pod względem wymaganej energii i zaangażowania słuchaczy było moim zdaniem dobre. Stosunek teoretycznych prezentacji do praktycznych zajęć z kodem był niemal doskonały. Każdy mógł znaleźć coś dla siebie, niezależnie od tego czy miał ochotę na chwilę inspiracji nowoczesnymi technologiami, czy też posłuchać o optymalnym wykorzystaniu kodu w dwóch miejscach aplikacji jednocześnie.</p>
<h3>Najciekawsze prezentacje</h3>
<h4>Michal Budzynski</h4>
<p>&#8222;How not to reinvent the wheel&#8221; była dobrą zachętą do korzystania z gotowych frameworków i engine&#8217;ów, nawet dla zagorzałych zwolenników autorskich rozwiązań. Atrakcyjna forma prezentacji (<a href="http://michalbe.blogspot.com/2012/01/meetjs-summit.html">Prince of Persia w tle</a>) i dynamiczny prowadzący &#8211; dwa ważne czynniki udanej prezentacji. Kolejnym mocnym punktem było krótkie omówienie wybranych oraz co ważne, przetestowanych przez prowadzącego, rozwiązań.</p>
<h4>Bartek Szopka &#8211; CSS 3d Transforms</h4>
<p><a href="http://rubysfera.pl/2012/01/summit-meetjs-relacja/dsc_0802/" rel="attachment wp-att-1492"><img src="http://rubysfera.pl/wp-content/uploads/2012/01/DSC_0802-300x200.jpg" alt="" title="DSC_0802" width="300" height="200" class="alignright size-medium wp-image-1492" /></a></p>
<p>Bartaz używając do prezentacji <a href=http://bartaz.github.com/impress.js/#/bored">impress.js</a> zaskoczył mnie tym jak spójnie i gładko potrafił wpleść w slajdy demonstracje tego o czym mówi. Dowiedzieliśmy się jak można złożyć sześcian z divów, obracać je, sprawiać że są przezroczyste, co to jest według CSS3 perspektywa oraz kilka innych, a wszystko to w obrębie slajdów, co robiło jeszcze większe wrażenie.</p>
<h4>Kamil Trebunia</h4>
<p>Niesamowicie pomysłowa formuła prowadzenia warsztatu, dzięki któremu każdy mógł na żywo śledzić postępy (ale nie w mozolnym tępie pisania) powstawania prostej gry, dzięki zastosowaniu innowacyjnego podejścia revertowania do odpowiednich commitów.</p>
<h4>Aleksander Dąbrowski</h4>
<p>Obrazkowe slajdy, subtelne poczucie humoru i emfaza na najważniejsze elementy tego o czym mówił <a href="https://twitter.com/#!/_tjeden">Aleks</a> sprawiły, że w mojej głowie zostało kilka ważnych koncepcji o których warto pamiętać. Bezpieczeństwo jest ważne. Daj serwerowi to co należy do serwera, klientowi co jest klienta. Nie duplikuj kodu. Nie duplikuj kodu.</p>
<h4>Patrick H. Lauke</h4>
<p><a href="https://twitter.com/#!/patrick_h_lauke">Patrick</a> błysnął demonstracjami i lekkością przedstawiania tego o czym mówi. Rozpoczął od video w html5, jak można nim manipulować przy pomocy javascriptu i kompatybilności z przeglądarkami. Mnie bardzo zainteresował wywód o kodekach i kierunku w którym zmierza standaryzacja wideo w sieci. Niesamowite dema z dostępem do kamerki przy pomocy JS i przekształcanie obrazów przy pomocy canvas zrobiły na mnie i z tego co widziałem na pozostałych uczestnikach duże wrażenie. Patrick bardzo optymistycznie nastawił na przyszłość i zamknął część wykładową konferencji.</p>
<p><a href="http://rubysfera.pl/2012/01/summit-meetjs-relacja/pano_20120114_115006/" rel="attachment wp-att-1482"><img src="http://rubysfera.pl/wp-content/uploads/2012/01/PANO_20120114_115006.jpg" alt="" title="PANO_20120114_115006" width="708" height="176" class="aligncenter size-full wp-image-1482" /></a></p>
<p>Wszystkie prezentacje są dostępne <a href="https://plus.google.com/u/0/110191013153077917985/posts/5U4XmoQkQeR">w tym miejscu</a>, a nagrania mają być wkrótce.</p>
<h3>Afterparty</h3>
<p>Wieczorem spotkaliśmy się w mniejszym już gronie w klubie Alcatraz gdzie integrowaliśmy się w najlepsze do późnych godzin nocnych, a co twardsi wczesnych rannych. Sponsorowanych napojów było tyle, że nawet najwytrawniejsi smakosze byli zaspokojeni, a towarzystwo dopisało wyśmienicie, wymyślając coraz to bardziej japońskie toasty, od Takanai poczynając. <img src='http://rubysfera.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Uwagi:</h3>
<p>Kilka uwag ode mnie, żeby przyszłe edycje meetjs (i nie tylko) były jeszcze lepsze.</p>
<ul>
<li>System wifi, jak da się, omijać szerokim łukiem autoryzację w formule &#8222;1 urządzenie = 1 użytkownik&#8221;.  Po pierwsze ten system zawiódł (mnie), po drugie, jakbym chciał mieć dodatkowo na telefonie dostęp do sieci, to zablokowałbym sobie go na komputerze, jakby mi się udało go jakoś wcześniej uzyskać. </li>
<li>Automaty z ciepłymi napojami nie powinny znikać wszystkie naraz, a przynajmniej nie bez ostrzeżenia. </li>
<li>Wymagajcie od speakerów przedstawienia prezentacji i skróconej formy tego co powiedzą przed prezentacją, żeby nie było sytuacji w której ktoś mówi coś innego niż zapowiedział, że powie. Albo co gorsza, dzień wcześniej zmieni zdanie i wykład będzie nieadekwatny do prezentacji.</li>
<li>W przypadku dwóch tracków, na przeciwległych trackach proponujcie tematy, które na podstawie prawdopodobieństwa nie będą oba interesowały jednej osoby (Accessibility vs Warsztat z backbone.js)</li>
<li>W przypadku dwóch tracków, wymagajcie od speakerów ustalania tytułów adekwatnych do tematyki, żebym zawsze wiedział na co ide, albo żebym wiedział dlaczego nie idę.</li>
<li>
W przypadku dwóch tracków, 5 minutek więcej na zmianę sali.</li>
<li>
Nie róbcie dwóch tracków. Mniej prezentacji maksymalnie dobrej jakości obejrzanych w całości to lepszy pomysł niż ich większa ilość i plucie sobie w brodę, że się źle strzeliło do której sali wejść. O sytuacji gdy chciałoby się być w dwóch miejscach naraz nie wspomnę, bo to na prawdę rozdziera serce i przyspiesza procesy starzenia.</li>
</ul>
<p>Pozdrawiam,</p>
<p><a href="https://twitter.com/#!/pavelloz">@pavelloz</a><br />
<a href="http://rubysfera.pl/2012/01/summit-meetjs-relacja/aleks_talk/" rel="attachment wp-att-1495"><img src="http://rubysfera.pl/wp-content/uploads/2012/01/aleks_talk.jpg" alt="" title="aleks_talk" width="708" height="236" class="aligncenter size-full wp-image-1495" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://rubysfera.pl/2012/01/summit-meetjs-relacja/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Rubyshift &#8211; relacja</title>
		<link>http://rubysfera.pl/2011/12/rubyshift-relacja/</link>
		<comments>http://rubysfera.pl/2011/12/rubyshift-relacja/#comments</comments>
		<pubDate>Wed, 28 Dec 2011 08:35:54 +0000</pubDate>
		<dc:creator>tjeden</dc:creator>
				<category><![CDATA[Aktualności]]></category>

		<guid isPermaLink="false">http://rubysfera.pl/?p=1327</guid>
		<description><![CDATA[Relacja z <a href="http://rubyshift.org">Rubyshift</a> - klimatycznej konferencji w Dniepropietrowsku na Ukrainie.]]></description>
			<content:encoded><![CDATA[<div id="attachment_1407" class="wp-caption alignright" style="width: 310px"><a href="http://rubysfera.pl/2011/12/rubyshift-relacja/309704_214672135266361_100001707272528_514332_745013265_n/" rel="attachment wp-att-1407"><img src="http://rubysfera.pl/wp-content/uploads/2011/12/309704_214672135266361_100001707272528_514332_745013265_n-300x200.jpg" alt="" title="Pałac Potomkina" width="300" height="200" class="size-medium wp-image-1407" /></a><p class="wp-caption-text">Pałac Potomkina</p></div>
<p>Miałem jesienią przyjemność uczestniczyć w konferencji <a href="http://rubyshift.org">Rubyshift</a>, która odbyła się w Dniepropietrowsku na Ukrainie. Parę osób mnie prosiło o relację, oto ona:</p>
<h3>Miejsce</h3>
<p>Dniepropietrowsk to miasto (koło miliona mieszkańców) położone nad brzegami Dniepru, we wschodniej części Ukrainy. W czasie zimnej wojny znajdowała się tam największa <a href="http://en.wikipedia.org/wiki/Yuzhmash">fabryka rakiet</a> (w tym balistycznych) w ZSSR, z tego powodu miasto to było przez kilkadziesiąt lat zamknięte dla cudzoziemców. Dziś przypomina trochę taką biedniejszą wersję Łodzi, widać, że najlepsze lata ma już za sobą. W centrum znajduje się Pałac Studentów &#8211; chyba najciekawsze miejsce w całym mieście, w którym odbyła się konferencja.  Główna sala bardziej przypominała teatr i było to niesamowiecie klimatyczne miejsce, co objawiło się tym, że obok Rubistów przewinęło się kilkanaście par młodych, które miały tam sesje ślubne.</p>
<div id="attachment_1410" class="wp-caption alignright" style="width: 310px"><a href="http://rubysfera.pl/2011/12/rubyshift-relacja/312802_10150336020507592_733287591_8684453_2137587013_n/" rel="attachment wp-att-1410"><img src="http://rubysfera.pl/wp-content/uploads/2011/12/312802_10150336020507592_733287591_8684453_2137587013_n-300x200.jpg" alt="" title="Ukraińska Panna Młoda" width="300" height="200" class="size-medium wp-image-1410" /></a><p class="wp-caption-text">Takie panny młode pojawiały się na miejscu imprezy.</p></div>
<h3>Konferencja</h3>
<p>Keynote o tytule &#8222;Open Source life&#8221; poprowadził <a href="https://twitter.com/#!/svenfuchs">Sven Fuchs</a>, który na swoim przykładzie opowiedział ile korzyści może przynieść udzielanie się w ruchu otwartego oprogramowania. Przyznam, że było to bardzo inspirujące i zachęcające do działania. <a href="https://twitter.com/#!/joshkalderimis">Josh Kaldermis</a> opowiadał o <a href="http://travis-ci.org/">Travis CI</a>, po <a href="http://rubysfera.pl/2011/06/euruko-2011-dzien-pierwszy/">EuRuKo</a> i RuPy, był to trzeci raz, kiedy natknąłem się na tę prezentację. Jednym zdaniem: jeśli macie publiczne projekty z testami i nie korzystacie z Travisa, to robicie coś źle. Konfiguracja jest banalna i darmowa, a CI reagujące na każdy push działa świetnie i pozwala testować Twój projekt z różnymi wersjami Rubiego.</p>
<p>Z ciekawszych prezentacji warto wspomnieć również o <a href="http://nicksda.apotomo.de/">Nicku Sutterze</a>, który pokazał swój sposób na prawdziwe MVC w Railsach za pomocą <a href="http://apotomo.de/">frameworku Apotomo</a>. <a href="https://twitter.com/#!/pdejuan">Pablo Dejuan</a>, który przyleciał z Urugwaju, zwrócił uwagę na to by, przemyśleć podejście do testowania i skupić się na sprawdzaniu tylko najważniejszych funkcji zamiast poświęcania czasu na drobiazgowym maglowaniu trywialnych i mało potrzebnych rzeczy.</p>
<p>Na uwagę zasługuje prezentacja <a href="http://jonathanleighton.com/">Jona Leightona</a>, który w świetny sposób opowiedział o swojej przygodzie z refaktyzacją Active Recordu. I treśc i wykonaniuebyło brawurowe, więc jeśli będziecie mieli chwilkę, warto je <a href="http://vimeo.com/31728891">obejrzeć</a>.</p>
<div id="attachment_1423" class="wp-caption alignright" style="width: 277px"><a href="http://rubysfera.pl/2011/12/rubyshift-relacja/attachment/430831528/" rel="attachment wp-att-1423"><img src="http://rubysfera.pl/wp-content/uploads/2011/12/430831528-267x200.jpg" alt="" title="alka seltzer" width="267" height="200" class="size-medium wp-image-1423" /></a><p class="wp-caption-text">Alka seltzer dla każdego</p></div>
<p>Organizacja i atmosfera były świetne. Co prawda kilka raz były problemy z mikrofonem, a wifi potrafiło przycinać, ale za to drugiego dnia rano obok przekąsek dostępny był Alka Seltzer. I słusznie. Część wystąpień można już obejrzeć <a href="http://vimeo.com/tag:rubyshift">pod tym adresem</a>. Nagranie z mojej prezentacji jest jeszcze niedostępne, ale sądząc po pozytywnym feedbacku wyszło całkiem nieźle.</p>
<h3>Ludzie</h3>
<p>Największe wrażenie zrobili na mnie ludzie; bardzo otwarci, życzliwi i ciekawi. To dzięki nim mogłem zwiedzić zamknięte w poniedziałek muzeum kosmiczne. Doktorant z miejscowego uniwesytetu wprowadził mnie na miejsce i powiedział kustoszowi, że jestem gościem z polskiej uczelni, mieliśmy więc wszystkie rakiety tylko dla siebie. Oprócz tego miałem okazję zwiedzić ukraiński akademik (temat na osobną notkę niezwiązaną z tematyką tego bloga) i wylądować w jednym z Dniepropietrowskich klubów, gdzie głównym drinkiem była wódka w szklankach. Wszystko to razem ze świetną atmosfera na konferencji sprawiło, że jeśli będzie kolejna edycja <a href="http://ruybshift.org">Rubyshift</a>, to z radością się na nią wybiorę.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rubysfera.pl/2011/12/rubyshift-relacja/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CodeRetreat relacja</title>
		<link>http://rubysfera.pl/2011/12/coderetreat-relacja/</link>
		<comments>http://rubysfera.pl/2011/12/coderetreat-relacja/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 08:00:02 +0000</pubDate>
		<dc:creator>tjeden</dc:creator>
				<category><![CDATA[Aktualności]]></category>

		<guid isPermaLink="false">http://rubysfera.pl/?p=1354</guid>
		<description><![CDATA[Podsumowanie <strong>Global Day od CodeRetreat</strong> w Warszawie - świetnego szkolenia z pisania idealnego kodu.]]></description>
			<content:encoded><![CDATA[<p><a href="http://rubysfera.pl/2011/12/coderetreat-relacja/6454824967_9ac85b4432_b/" rel="attachment wp-att-1374"><img src="http://rubysfera.pl/wp-content/uploads/2011/12/6454824967_9ac85b4432_b-300x200.jpg" alt="" title="6454824967_9ac85b4432_b" width="300" height="200" class="alignright size-medium wp-image-1374" /></a>
<p>Sobotni Global Day of Coderetreat w Warszawie udał się świetnie. Była to część światowego wydarzenia, w którym brało udział 2200 programistów w 90 miastach. <a href="http://rubysfera.pl/2011/11/global-day-of-coderetreat-warszawa/">Zasady coderetrat</a> opisaliśmy w poprzednim poście. Teraz czas na podsumowanie i uwagi, ponieważ pierwszy raz brałem udział w tym specyficznym szkoleniu.</p>
<h3>Sesje</h3>
<p>Po wprowadzeniu w temat przystąpiliśmy do 45 minutowych sesji, których było razem 6. W każdej z niej próbowaliśmy napisać <a href="http://pl.wikipedia.org/wiki/Gra_w_%C5%BCycie">grę w życie</a>, za każdym razem zaczynając od nowa z inną osobą i innymi wytycznymi (ograniczeniami), wszystko oczywiście w duchu <a href="http://rubysfera.pl/2011/04/tdd-z-uzyciem-testunit/">test driven development</a>. Często też zmienialiśmy edytory, języki oraz środowiska, by poszerzeszyć swoje horyzonty.</p>
<p>Pierwsza sesja polegała po prostu na oswojeniu się z tematem i udowodeniu uczestnikom, że nie da się zrealizować tego zadania w 45 minut. Przez pomyłkę sesja ta zakończyła się raptem po 25 minutach, ale pokazało to nam tylko, jak mało czasu jest na iterację i przyzywczaiło do usuwania kodu na końcu.</p>
<p>W następnych sesjach skupiliśmy się na prostym projekcie, dobrym nazywaniu zmiennych i próbie napisania gry, bez używania pętli lub rozgałęzień (czyli funkcji w stylu <code>if</code> oraz <code>switch</code>) &#8211; okazało się, że jest na to sposób. Było to wyzwaniem i pozwoliło na spojrzenie na implementację z innej perspektywy.</p>
<p><a href="http://rubysfera.pl/2011/12/coderetreat-relacja/6454827191_f1be98ef00_b/" rel="attachment wp-att-1375"><img src="http://rubysfera.pl/wp-content/uploads/2011/12/6454827191_f1be98ef00_b-300x200.jpg" alt="" title="6454827191_f1be98ef00_b" width="300" height="200" class="alignleft size-medium wp-image-1375" /></a></p>
<p>Najciekawsza okazała się czwarta sesja o nazwie &#8222;evil coder&#8221;. Polegała ona na tym, że jedna osoba pisała tylko testy, a druga kod, ale w najbardziej złośliwy i leniwy sposób. Na przykład jeśli test sprawdzał, czy jakaś funkcja zwraca wartość <code>2</code>, to wystarczyło napisać metodę, która wypisuje 2. Dodatkowo w czasie tej sesji, nie można było rozmawiać, więc była to świetna nauka jak napisać nazwę testu i jego treść, tak by druga osoba była w stanie zrozumieć nasze intencje. Złośliwy programista z kolei pokazywał, jak pisać jednoznaczne testy, które rzeczywiście sprawdzają wszystkie przypadki.</p>
<p>Dwie ostatnie sesje polegały na obiektowym potraktowaniu odległości i koncepcji sąsiednich komórek, oraz na zastasowaniu zasady <a href="http://pragprog.com/articles/tell-dont-ask">tell, don&#8217;t ask</a>. Więcej czasu niż na implementacji spędziliśmy na rozważaniu nad koncepcją i strukturą kodu. Dodatkowo zmęczenie dało o sobie znać i z mojego punktu widzenia były to najmniej owocne iteracje.</p>
<p>Na koniec zrobiliśmy wspólne podsumowanie, wymieniając czego się nauczyliśmy i co wprowadzimy w poniedziałek w życie, po czym udaliśmy się na zasłużone piwo.</p>
<h3>Uwagi</h3>
<p><a href="http://rubysfera.pl/2011/12/coderetreat-relacja/6454836935_fe6d9a5c92_b/" rel="attachment wp-att-1376"><img src="http://rubysfera.pl/wp-content/uploads/2011/12/6454836935_fe6d9a5c92_b-300x200.jpg" alt="" title="6454836935_fe6d9a5c92_b" width="300" height="200" class="alignright size-medium wp-image-1376" /></a></p>
<p>Mimo kilku problemów organizacyjnych (w ostatniej chwili wycofał nam się sponsor) udało nam się zorganizować fajne wydarzenie. Wielkie brawa należą się <a href="https://twitter.com/#!/mehowte">Michałowi Taszyckiemu</a> za brawurowe poprowadzenie szkolenia, przekazał nam naprawdę dużo cennych wskazówek. Chciałbym również podziękować Pawłowi, Maćkowi i Darkowi, z którymi miałem przyjemność zrealizować coderetreat w Warszawie.</p>
<p>Z kilkudniowej perspektywy muszę przyznać, że programuję nieco lepiej, niż tydzień temu i zwracam uwagę na kilka nowych aspektów testowania. Warto było spędzić całą sobotę w świetnej atmosferze z ciekawymi ludźmi, tworząc doskonały kod. Myślimy o kolejnej edycji na wiosnę!
<p>Więcej zdjęć z imprezy jest dostępna <a href="http://www.flickr.com/photos/71470546@N08/sets/72157628278787087/">w albumie Dariusza Gorzęby</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://rubysfera.pl/2011/12/coderetreat-relacja/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Global day of CodeRetreat Warszawa</title>
		<link>http://rubysfera.pl/2011/11/global-day-of-coderetreat-warszawa/</link>
		<comments>http://rubysfera.pl/2011/11/global-day-of-coderetreat-warszawa/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 09:43:08 +0000</pubDate>
		<dc:creator>tjeden</dc:creator>
				<category><![CDATA[Aktualności]]></category>

		<guid isPermaLink="false">http://rubysfera.pl/?p=1339</guid>
		<description><![CDATA[Zapraszamy was na darmowe warsztaty z programowania w parach i test driven developemnt, <strong>3 grudnia</strong> w <strong>Warszawie</strong>, które są częścią Global day of Code Retreat.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/sermoa/5697071418/"><img src="http://rubysfera.pl/wp-content/uploads/2011/11/retreat.jpg" alt="" title="retreat" width="300" height="200" class="alignright size-full wp-image-1344" /></a></p>
<p>Masz dość gonienia terminów i chciałbyś kiedyś po prostu napisać kawałek dobrego kodu, programując w parach i zgodnie z TDD? CodeRetreat to coś dla Ciebie!</p>
<p><a href="http://coderetreat-warsaw.heroku.com/">CodeRetreat</a> to całodniowe darmowe ćwiczenie, w czasie którego będziesz programował zgodnie z dobrymi praktykami; liczy się dążenie do perfekcji, a nie wynik. Całe ćwiczenie podzielone jest na 45 minutowe sesje, w czasie których w możliwie najlepszy sposób będziesz implementował grę w życie. Każdą sesję krótko podsumujemy, po czym usunisz kod, zmienisz parę i podejdziesz do problemu od innej strony.</p>
<p>Więcej szczegółów dostępnych jest na <a href="http://coderetreat-warsaw.heroku.com/">stronie wydarzenia</a>.</p>
<p> Oprócz świetnej zabawy będziesz doskonalić swoje umiejętności. Skupiamy się na powrocie do podstaw programowania obiektowego. Baw się kodem!</p>
<p>Co oferujemy w sobotę:</p>
<ul>
<li>Mnóstwo hackowania</li>
<li>Pisanie czystego kodu</li>
<li>Design &#8211; programowanie obiektowe</li>
<li>Test driven development</li>
<li>Programowanie w parach</li>
<li>Dobry i darmowy lunch</li>
</ul>
<p>To wydarzenie jest częścią <a href="http://coderetreat.com/global_day.html">Global day of code retreat</a> i odbędzie się <strong>3 grudnia</strong> w ponad 70 miastach na całym świecie, łącząc ponad 1500 pasjonatów programowania. Będziemy częścią tego wydarzenia w <strong>Warszawie</strong>.</p>
<p><a href="http://www.coderetreat.evenea.pl/">Zapisz się!</a> (mamy tylko 30 miejsc).</p>
<p>Wydarzenie to jest organizowane przez grupę zapaleńców, <del datetime="2011-12-28T12:34:48+00:00">przy pomocy firmy <a href="http://www.innov8on.com/">innov8on</a>,</del> a Rubysfera objęła patronat medialny.</p>
]]></content:encoded>
			<wfw:commentRss>http://rubysfera.pl/2011/11/global-day-of-coderetreat-warszawa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Codebrawl</title>
		<link>http://rubysfera.pl/2011/10/codebrawl/</link>
		<comments>http://rubysfera.pl/2011/10/codebrawl/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 08:06:52 +0000</pubDate>
		<dc:creator>tjeden</dc:creator>
				<category><![CDATA[Aktualności]]></category>

		<guid isPermaLink="false">http://rubysfera.pl/?p=1303</guid>
		<description><![CDATA[Jesteś znudzony pisaniem kolejnej przełomowej aplikacji opartej o CRUD? Weź udział w <strong>konkursie Codebrawl</strong> i zmierz się z czystym Rubym.]]></description>
			<content:encoded><![CDATA[<p><a href="http://rubysfera.pl/2011/10/codebrawl/coderawl/" rel="attachment wp-att-1313"><img src="http://rubysfera.pl/wp-content/uploads/2011/09/coderawl.jpg" alt="" title="coderawl" width="300" height="200" class="alignright size-full wp-image-1313" /></a>
<p>Znudzeni kolejnym przełomowym CMSem i innowacyjną aplikacją social media w pracy? Świetnie, mam coś dla was. <a href="http://codebrawl.com/">Codebrawl</a> to cykliczny konkurs małych programów napisanych w Rubym. Żadnych Railsów, żadnych rozbudowanych projektów, tylko szybki skrypt do napisania. Co dwa tygodnie publikowane jest małe zadanie, na które odpowiedź należy zamieścić w prywatnym <a href="https://gist.github.com/">giście</a>. Liczy się kreatywność i elegancja rozwiązania. Na zgłaszanie pomysłów jest pierwszy tydzień, w drugim trwa głosowanie nad najciekawszym rozwiązaniem. Zasady są następujące:</p>
<ul>
<li>Pierwsza reguła Codebrawl: Nie rozmawiasz o Codebrawl. Trzymaj swoje rozwiązanie w sekrecie, aż do końca głosowania, to nie jest konkurs popularności.</li>
<li>Nie używaj swojego imienia w giście, to ujawnia twoją tożsamość.</li>
<li>Nie forkuj przykładowych gistów</li>
<li>Wyjaśnij swoje rozwiązanie dokładnie w README (nie zapomnij uwzględnić przykładowego kodu)</li>
<li>Doszlifuj swoje zgłoszenie, możesz je edytować aż do rozpoczęcia głosowania</li>
</ul>
<h3>Czemu mi się to tak podoba?</h3>
<p>Popatrzcie sami na najwyżej oceniane wyniki w zadaniach takich jak: <a href="http://codebrawl.com/contests/key-value-stores">baza klucz wartość</a> &#8211; wygrało rozwiązanie oparte o gita, <a href="http://codebrawl.com/contests/ruby-testing-libraries">mikroframework testowy</a>, czy też <a href="http://codebrawl.com/contests/command-line-todo-lists">TODO listę obsługiwaną z terminala</a>. Zadania są naprawdę ciekawe, rozwiązania bywają bardzo kreatywne, a co najlepsze, nie musisz zarwać całego popołudnia, żeby coś napisać, czasem wystarcza godzinka, lub dwie.</p>
<p>Dzisiaj na tapecie jest <a href="http://codebrawl.com/contests/methods-taking-multiple-blocks">stworzenie metody, która może przyjmować wiele bloków kodu</a>. Do dzieła!</p>
]]></content:encoded>
			<wfw:commentRss>http://rubysfera.pl/2011/10/codebrawl/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>DevMeetings.pl &#8211; NoSql</title>
		<link>http://rubysfera.pl/2011/09/devmeetings-pl-nosql/</link>
		<comments>http://rubysfera.pl/2011/09/devmeetings-pl-nosql/#comments</comments>
		<pubDate>Mon, 19 Sep 2011 09:25:15 +0000</pubDate>
		<dc:creator>tjeden</dc:creator>
				<category><![CDATA[Aktualności]]></category>

		<guid isPermaLink="false">http://rubysfera.pl/?p=1230</guid>
		<description><![CDATA[Pozostajemy w temacie <strong>node.js</strong> i opowiadamy o warsztacie z cyklu <a href="http://devmeetings.pl">DevMeetings.pl</a> dotyczącym <strong>nierelacyjnych baz danych</strong>.]]></description>
			<content:encoded><![CDATA[<p><a href="http://devmeetings.pl"><img src="http://rubysfera.pl/wp-content/uploads/2011/09/devmeetings.png" alt="" title="devmeetings" width="300" height="200" class="alignright size-full wp-image-1233" /></a></p>
<p>W zeszłym tygodniu miałem przyjemność uczestniczyć w <a href="http://devmeetings.pl/">DevMeetings.pl</a>, czyli bezpłatnych spotkaniach dla deweloperów. Jest to warta promowania inicjatywa całodniowych, prowadzonych na bardzo wysokim poziomie szkoleń, które odbywają się w soboty w kilku miastach Polski (Poznań, Kraków, Warszawa). Tematyka kręci się głównie wokół serwerowego javascriptu i technologii z nim związanych. Tym razem szkolenie dotyczyło baz NoSQL czyli &#8222;Not only SQL&#8221;.</p>
<h3>NoSQL</h3>
<p>Spotkaliśmy się na 16 piętrze Millenium Plaza w Warszawie (genialny widok) w sobotę rano. Po dwugodzinnym, skondensownym wstępie teoretycznym podzieliliśmy się na kilkuosobowe grupy, by zająć się przewidzianym na resztę dnia kodowaniem. Tym razem celem było wzbogacenie napisanego w node.js na poprzednim DevMeetingu, <a href="https://github.com/adamjodlowski/tweet-perf">prostego klona API twittera</a> o nierelacyjną bazę danych. Do wyboru były: <a href="http://www.mongodb.org/">MongoDB</a>, <a href="http://cassandra.apache.org/">Cassandra</a>, <a href="http://redis.io/">Redis</a> oraz <a href="http://couchdb.apache.org/">CouchDB</a>. Wylądowałem w zespole, który używał tej ostatniej.</p>
<p>Większość czasu zjadła nam migracja ze źródłowej bazy w MySQLu do CouchDB. Początkowo wydawało się, że obsługa MySQL w nodzie jest dramatycznie wolna, przyczyna długiej migracji leżała jednak gdzie indziej i mogę ją streścić w jednym zdaniu: Zawsze zakładaj indeksy na bazie. Plik który otrzymaliśmy ich nie miał, co powodowało problemy z szybkością wyszukiwania danych. Synchroniczność noda dała o sobie tutaj również znać. Kolega z zespołu po zakończeniu migracji zamiast 10 000 rekordów, miał ich w bazie tylko około 6 tysięcy. Gdy uruchomił migrację jeszcze raz otrzymał ich 2 tysiące. Podobnie jak podczas <a href="http://rubysfera.pl/2011/09/node-js-w-48-godzin/">Node Knockout</a>, zapomnieliśmy o asynchroniczności. Po prostu skrypt zdążył pobrać dane z MySQLa i uruchomić wywołania zwrotne (callbacks) zapisujące je do CouchDB, a następnie (gdy callbacki wciąż się wykonywały <strike>w osobnych wątkach</strike>) natrafiał na instrukcję zakończenia przetwarzania. Ostatecznie rzutem na taśmę udało nam się zaimplementować minimalną liczbę funkcji. Nie wszystkim zespołom to się udało, ale trzeba przyznać, że ci, którzy wybrali Redisa nie mieli z tym większych problemów.</p>
<h3>Parę słów o CouchDB</h3>
<p>CouchDB posiada RESTowy interfejs dostępu do danych. Jest on prosty, gdy wystarczy nam pobranie prostych danych. Jeśli chcemy jednak wykonać skomplikowane zapytanie, musimy naszą bazę odpowiedni przygotować i utworzyć widok, przy pomocy którego wywołujemy zapytanie. Powoduje to, że dla osób, które mają doświadczenie ze zwykłymi bazami relacyjnymi, dużo prostsze do nauki od CouchDb jest chociażby MongoDB, które pozwala na używanie zapytań, podobnych do tych w SQLu. Wygląda jednak na to, że dobrze opanowane widoki mogą stać się całkiem niezłą bronią w walce o szybkośc odczytu.</p>
<h3>Opinia o szkoleniu</h3>
<p>Warto było spędzić ponad 10 godzin na praktycznym poznawaniu CouchDB; nic tak nie motywuje do nauki jak zapalona grupa osób wokół Ciebie i konkretny problem do rozwiązania. Mimo, że na sali był spory przekrój programistów od frontendowych Javascriptowców, po ludzi programującyh w Javie i C, to niewiele osób przyznało się do korzystania z baz NoSQL. Jedna osoba wdrożyła Redisa, kilka Mongo, nikt nie bawił się Cassandrą. Nawet prowadzący (świetnie tłumaczący David de Rosier) przyznał się, że nie ze wszystkimi z tych baz pracował. Tak więc nierelacyjne bazy danych kryją przed nami wiele tajemnic i można sporo odkryć, poznając je. DevMeeting i <a href="http://rubysfera.pl/2011/09/node-js-w-48-godzin/">Node Knockout</a>, to świetne okazje by się ich nauczyć. Jeśli będziesz miał okazję przejść się na <a href="http://devmeetings.pl">DevMeeting</a>, nie wahaj się, tylko idź. Nie pożałujesz.</p>
]]></content:encoded>
			<wfw:commentRss>http://rubysfera.pl/2011/09/devmeetings-pl-nosql/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Node.js w 48 godzin</title>
		<link>http://rubysfera.pl/2011/09/node-js-w-48-godzin/</link>
		<comments>http://rubysfera.pl/2011/09/node-js-w-48-godzin/#comments</comments>
		<pubDate>Sat, 10 Sep 2011 08:40:26 +0000</pubDate>
		<dc:creator>tjeden</dc:creator>
				<category><![CDATA[Aktualności]]></category>

		<guid isPermaLink="false">http://rubysfera.pl/?p=1204</guid>
		<description><![CDATA[Napisaliśmy aplikację w <strong>48 godzin</strong> przy pomocy <strong>node.js</strong> i sporo się nauczyliśmy. O tym jak wyglądał dwudniowy <strong>maraton programistyczny</strong> od kuchni.]]></description>
			<content:encoded><![CDATA[<p><a href="http://rubysfera.pl/2011/09/node-js-w-48-godzin/gitbroker/" rel="attachment wp-att-1207"><img src="http://rubysfera.pl/wp-content/uploads/2011/09/gitbroker.png" alt="" title="gitbroker" width="300" height="193" class="alignright size-full wp-image-1207" /></a></p>
<p>Dwa tygodnie temu wzieliśmy udział w <a href="http://nodeknockout.com">Node.js Knockout</a> &#8211; konkursie, który polega na napisaniu aplikacji w 48 godzin przy użyciu <a href="http://nodejs.org">node.js</a>. Sama idea konkursu i jego zasady praktycznie są identyczne z tymi podczas <a href="http://rubysfera.pl/2010/09/rails-rumble-2010/">Rails Rumble</a>. Zachęcony świetną zabawą podczas ostatniego Rails Rumble (udało nam się <a href="http://rubysfera.pl/2010/10/aplikacja-w-48-godzin/">napisać grę w 48 godzin</a>), namówiłem kolegów z pracy, byśmy razem usiedli i zrobili coś świetnego. A raczej nie musiałem ich długo namawiać, powiedziałem tylko: serwer side javascript, konkurs, weekend programowania. Przyszli.</p>
<h3>Aplikacja</h3>
<p>Tak powstał <a href="http://nko2-infopoprac.herokuapp.com/">GitBroker</a> &#8211; giełda projektów Open Source. Kilka razy dziennie projekty na githubie są wyceniane w zależności od ich popularności (szczegółowy algorytm znamy tylko my); użytkownik na start dostaje 1000 GitCoinów (to nasza waluta) i może je inwestować w rozwijające się repozytoria, zarabiając i wspinając się na górę rankingu.
<p>Oprócz <a href="http://nko2-infopoprac.herokuapp.com/users/4e5bc7ef0fd4990100087c81">jednego użytkownika</a>, który złamał system (już się z nim skontaktowaliśmy i komisja nadzoru GitCoinów bada sprawę) sporo osób zarobiło już swoje pierwsze GitCoiny. Jeśli chcesz się pobawić w githubowego Gordona Gecko, to <a href="http://nko2-infopoprac.herokuapp.com/start">zaloguj się</a> i znajdź projekt, który niedługo podbije świat.</p>
<h3>Technicznie</h3>
<p><a href="http://rubysfera.pl/2011/09/node-js-w-48-godzin/img_2331/" rel="attachment wp-att-1222"><img src="http://rubysfera.pl/wp-content/uploads/2011/09/IMG_2331.jpg" alt="" title="IMG_2331" width="300" height="200" class="alignleft size-full wp-image-1222" /></a>
<p>Wszystko to zostało napisane w node.js, z wykorzystaniem biblioteki przypominającej Sinatrę &#8211; <a href="http://expressjs.com/">expressa</a>. Pod spodem siedzi MongoDB, a widoki przygotowane są przy pomocy <a href="http://jade-lang.com/">jade</a> (podobne do hamla lub slima). Całość wrzucona jest na Heroku &#8211; dobra wiadomość, aplikacje w nodzie hostuje się tam tak samo łatwo jak w Rubym. Nie wykorzystaliśmy prawie asynchroniczności noda, niemniej opanowanie callbacków było sporym wyzwaniem. Kilka razy złapałem się na tym, że kod mi nie działał, bo cały czas próbowałem go pisać synchronicznie. Jedyne miejsce w którym tak na prawdę korzystamy z zalet asynchroniczności, to przeliczanie projektów, w czasie którego odpytujemy githubowe api. Zapytania te wysyłane są w ten sposób, że podczas czekania na odpowiedź, obliczane są wartości już pobranych projektów i przygotowywane są kolejne zapytania.</h3>
<h3>Maraton</h3>
<p>Cóż jest fascynującego w czterech facetach, którzy przez dwie doby programują? Z punktu widzenia pobocznego obserwatora niewiele, z naszego punktu widzenia emocje były. Od początku wyszło nasze słabe przygotowanie i mimo, że każdy coś tam kiedyś bawił się nodem, to pierwsze godziny w sobotę spędziliśmy na naprawdę podstawowych rzeczach. Koło południa przyszło zwątpienie, bo po szybkich szacunkach wyszło nam, że oferowane przez Heroku 5MB na bazę MongoDB w wypadku więcej niż kilkuset użytkowników szybko się skończy. Zastanawialiśmy się już nad realizacją awaryjnego pomysłu, ale okazało się, że w ramach konkursu mamy dostęp do bodajże 1GB na <a href="https://mongohq.com/home">mongohq</a>, co załatwiło sprawę. Przed północą udało nam się stworzyć podwaliny pod serwis, ale do końca było jeszcze daleko.</p>
<p><a href="http://rubysfera.pl/2011/09/node-js-w-48-godzin/img_2312/" rel="attachment wp-att-1223"><img src="http://rubysfera.pl/wp-content/uploads/2011/09/IMG_2312.jpg" alt="" title="IMG_2312" width="300" height="200" class="alignright size-full wp-image-1223" /></a>
<p>Zaczęta wcześnie niedziela była pracowita i dopiero koło południa udało się naszemu pomysłowi nadać konkretną formę. Po fali zachwytów &#8222;ojej, to naprawdę działa&#8221; resztę czasu spędziliśmy na szlifowaniu pomysłu i poprawianiu bugów. Tych ostatnich popełniliśmy sporo, ponieważ było to nasze pierwsze poważniejsze zetknięcie z nodem. Zemściło się na nas też niedbalstwo: mnóstwo rzeczy robione było jako proof of concept i tak na przykład część logiki umieszczona w widoku nie działała jak należy, przez co ostatecznie musieliśmy ją usunąć. Funkcje w modelach zaczeliśmy pisać dopiero koło 19, a wtedy było już za późno, by w pełni je wykorzystać. Przed 23 uznaliśmy, że produkt jest gotowy, nic więcej już nie poprawiamy; wrzuciliśmy go na produkcję i poszliśmy do domu.</p>
<h3>Konkurencja</h3>
<p>Wystartowało prawie <a href="http://nodeknockout.com/entries">300 zespołow</a>, z czego 178 nadawało się do głosowania. Uplasowaliśmy się gdzieś w na 30-40 miejscu (nie są one ponumerowane, a nie zależy nam aż tak bardzo by dokładnie liczyć). Z innych pomysłów najbardziej przypadł mi do gustu <a href="http://nko2-forward.herokuapp.com/">Metris</a> (massively multiplayer Tetris game) &#8211; jak masz dłuższą chwilkę, to zagraj, gdy odkryjesz jak działa, to Cię wciągnie. Z naszych rodzimych zespołów <a href="http://nodeknockout.com/entries?q=Poland">konkurs ukończyło 6</a>. Na szczególną uwagę zasługuję <a href="http://virtualdesign.no.de/">Awesome file downloader</a>, do którego można wkleić link który się chce pobrać, aby otrzymać link, który można pobrać. Serio, nie kumam dowcipu. :/ Warto tu wspomnieć, że w siedzibie Gadu Gadu odbyło się wspólne kodowanie, z którego relację <a href="http://blog.end3r.com/148/relacja-z-48h-maratonu-node-knockout-w-siedzibie-gadu-gadu/">można tutaj przeczytać</a>; szkoda, że chłopakom nie udało się ukończyć więcej projektów.</p>
<h3>Wnioski na następny raz</h3>
<p>Przyguj się, nie poddawaj się i od początku pisz porządny kod. Callbacki po poznaniu są fajne, tylko, że trzeba używać przy niech zupełnie innych obszarów mózgu niż zazwyczaj. Jak tylko będzie wiadomo coś więcej o <a href="http://blog.railsrumble.com/">nadchodzącym Rails Rumble</a> to się zapisujemy!</p>
]]></content:encoded>
			<wfw:commentRss>http://rubysfera.pl/2011/09/node-js-w-48-godzin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

