<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://rubysfera.pl/feed.xml" rel="self" type="application/atom+xml" /><link href="https://rubysfera.pl/" rel="alternate" type="text/html" /><updated>2026-02-16T15:14:44+00:00</updated><id>https://rubysfera.pl/feed.xml</id><title type="html">Rubysfera</title><subtitle>blog o Rubym</subtitle><entry><title type="html">Darmowe szkolenie z programowania w języku Ruby</title><link href="https://rubysfera.pl/2012/06/darmowe-szkolenie-z-programowania-w-jezyku-ruby/" rel="alternate" type="text/html" title="Darmowe szkolenie z programowania w języku Ruby" /><published>2012-06-14T10:13:08+00:00</published><updated>2012-06-14T10:13:08+00:00</updated><id>https://rubysfera.pl/2012/06/darmowe-szkolenie-z-programowania-w-jezyku-ruby</id><content type="html" xml:base="https://rubysfera.pl/2012/06/darmowe-szkolenie-z-programowania-w-jezyku-ruby/"><![CDATA[<p>
				<a href="http://rubysfera.pl/2012/06/darmowe-szkolenie-z-programowania-w-jezyku-ruby/ruby_logo/" rel="attachment wp-att-1701"><img src="/assets/Ruby_logo.png" alt="" title="Ruby_logo" width="200" height="200" class="alignright size-full wp-image-1701" /></a>
<p>Nie znasz Rubiego, a chcesz go poznać? Programujesz w innych językach? Piszesz w Railsach od kilku miesięcy, ale wciąż wiele rzeczy wydaje ci się magią? Ten kurs jest dla ciebie!</p>
<p><a href="http://www.ruby-lang.org/pl/about/">Ruby</a> to interpretowany, dynamiczny i obiektowy język programowania, w którym pisze się bardzo przyjemnie i efektywnie. W języku tym powstał popularny framework <a href="http://rubyonrails.pl/">Ruby on Rails</a> do tworzenia aplikacji internetowych.</p>
<p>Zaczniemy od zupełnych podstaw, tak abyś poznał solidne fundamenty języka, wytłumaczymy sobie dlaczego klasa jest obiektem i czym się różni od modułu, poznamy potęgę enumerable i zajrzymy w głąb biblioteki standardowej. Na sam koniec przyjrzymy się metaprogramowaniu, generowaniu kodu w locie i tworzeniu własnych DSLi. Jednym słowem dwudniowe solidne szkolenie z Rubiego od podstaw, po zaawansowane techniki i dobre praktyki (o testach nie zapomnimy). Nie jest to szkolenie z Railsów! Ale jeśli chciałbyś je poznać, to świetny początek i wiedza, dzięki której unikniesz błędów w przyszłości.</p>
<h3>Gdzie, kiedy i czemu za darmo?</h3>
<p>Szkolenie trwa dwa dni: <strong>23 i 24 czerwca</strong> (sobota i niedziela), zaczynamy o 10, a kończymy około 17. Odbędzie się w nowo powstałym biurze coworkingowym <a href="http://www.clock-work.pl/">ClockWork</a> na Mokotowie, adres to <a href="http://www.clock-work.pl/pl/jak-dojechać.html">Ksawerów 3</a>. Kurs jest organizowany w dużej mierze dzięki uprzejmości <strong>ClockWork</strong> (udostępniają nam salę za darmo) i mogę spokojnie napisać, że dojazd jest wygodny (blisko metro Wilanowska i liczne tramwaje), a na miejscu bardzo sympatycznie.</p>
<h3>Zapisy</h3>
<p>Liczba miejsc jest ograniczona do 12, dlatego obowiązują zapisy; wyślij maila na <a href="mailto:kontakt@rubysfera.pl">kontakt@rubysfera.pl</a> - kto pierwszy ten lepszy.</p>
<h3>Informacje praktyczne</h3>
<p>Duży nacisk położony został na zajęcia praktyczne, dlatego weźcie ze sobą laptopy, odpowiednia ilość gniazdek i interent będzie zapewniony. Formuła to wykład + ćwiczenia praktyczne. Grupą docelową są początkujący, lub osoby bez znajomości Rubiego. Treść jest przeznaczona dla osób, które potrafią programować w innym języku, a chciałyby się nauczyć Rubiego, jak i dla tych, którzy trochę Rubym się bawili i chcieliby swoją wiedzę usystematyzować. Techniczne informacje o szkoleniu dostaniecie po potwierdzeniu <a href="mailto:kontakt@rubysfera.pl">zgłoszenia</a>. Szkolenie poprowadzi <a href="http://about.me/aleksander_dabrowski">Aleksander Dąbrowski</a>.</p>]]></content><author><name>{&quot;login&quot; =&gt; &quot;tjeden&quot;, &quot;email&quot; =&gt; &quot;tjeden@gmail.com&quot;, &quot;display_name&quot; =&gt; &quot;tjeden&quot;, &quot;first_name&quot; =&gt; &quot;Aleksander&quot;, &quot;last_name&quot; =&gt; &quot;Dąbrowski&quot;}</name><email>tjeden@gmail.com</email></author><category term="Aktualności" /><summary type="html"><![CDATA[Chciałbyś poznać Rubiego? Programujesz w innych językach? Piszesz w Railsach od kilku miesięcy, ale wciąż wiele rzeczy dzieje się magicznie? Zapraszamy na darmowy dwudniowy kurs z solidnego programowania w Rubym w Warszawie 23 i 24 czerwca.]]></summary></entry><entry><title type="html">Konkurs na aplikację webową w Railsach</title><link href="https://rubysfera.pl/2012/04/konkurs-na-aplikacje-webowa-w-railsach/" rel="alternate" type="text/html" title="Konkurs na aplikację webową w Railsach" /><published>2012-04-30T09:07:04+00:00</published><updated>2012-04-30T09:07:04+00:00</updated><id>https://rubysfera.pl/2012/04/konkurs-na-aplikacje-webowa-w-railsach</id><content type="html" xml:base="https://rubysfera.pl/2012/04/konkurs-na-aplikacje-webowa-w-railsach/"><![CDATA[<p>
				<a href="http://rubysfera.pl/2012/04/konkurs-na-aplikacje-webowa-w-railsach/ctab_double/" rel="attachment wp-att-1663"><img src="/assets/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> </del></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>
<p>		</a></p>]]></content><author><name>{&quot;login&quot; =&gt; &quot;tjeden&quot;, &quot;email&quot; =&gt; &quot;tjeden@gmail.com&quot;, &quot;display_name&quot; =&gt; &quot;tjeden&quot;, &quot;first_name&quot; =&gt; &quot;Aleksander&quot;, &quot;last_name&quot; =&gt; &quot;Dąbrowski&quot;}</name><email>tjeden@gmail.com</email></author><category term="Aktualności" /><summary type="html"><![CDATA[Napisz aplikację webową i wygraj tablet CTAB. Dzisiaj znów mamy dla was konkurs.]]></summary></entry><entry><title type="html">Wroc_love.rb - wyniki konkursu</title><link href="https://rubysfera.pl/2012/02/wroc_love-rb-wyniki-konkursu/" rel="alternate" type="text/html" title="Wroc_love.rb - wyniki konkursu" /><published>2012-02-20T20:45:25+00:00</published><updated>2012-02-20T20:45:25+00:00</updated><id>https://rubysfera.pl/2012/02/wroc_love-rb-wyniki-konkursu</id><content type="html" xml:base="https://rubysfera.pl/2012/02/wroc_love-rb-wyniki-konkursu/"><![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> - 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="https://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><author><name>{&quot;login&quot; =&gt; &quot;tjeden&quot;, &quot;email&quot; =&gt; &quot;tjeden@gmail.com&quot;, &quot;display_name&quot; =&gt; &quot;tjeden&quot;, &quot;first_name&quot; =&gt; &quot;Aleksander&quot;, &quot;last_name&quot; =&gt; &quot;Dąbrowski&quot;}</name><email>tjeden@gmail.com</email></author><category term="Aktualności" /><summary type="html"><![CDATA[Wyniki konkursu w którym do wygrania był bilet na wroc_love.rb, Rubiową konferencję, we Wrocławiu.]]></summary></entry><entry><title type="html">Wygraj bilet na Wroc_love.rb</title><link href="https://rubysfera.pl/2012/02/wygraj-bilet-na-wroc_love-rb/" rel="alternate" type="text/html" title="Wygraj bilet na Wroc_love.rb" /><published>2012-02-13T10:18:23+00:00</published><updated>2012-02-13T10:18:23+00:00</updated><id>https://rubysfera.pl/2012/02/wygraj-bilet-na-wroc_love-rb</id><content type="html" xml:base="https://rubysfera.pl/2012/02/wygraj-bilet-na-wroc_love-rb/"><![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="/assets/avatar_a208ec531a94_128.png" alt="" title="avatar_a208ec531a94_128" width="128" height="128" class="alignright size-full wp-image-1579" /></a><br />
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> - między innymi autora <a href="http://exceptionalruby.com/?utm_source=devblog&utm_medium=banner&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 - 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 '11</a>), czy <a href="http://blog.wrocloverb.com/post/16342454204/jim-gay">Jim Gay</a> - 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 "Drogusa" Sarnackiego</a>, "naszego człowieka" 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><author><name>{&quot;login&quot; =&gt; &quot;tjeden&quot;, &quot;email&quot; =&gt; &quot;tjeden@gmail.com&quot;, &quot;display_name&quot; =&gt; &quot;tjeden&quot;, &quot;first_name&quot; =&gt; &quot;Aleksander&quot;, &quot;last_name&quot; =&gt; &quot;Dąbrowski&quot;}</name><email>tjeden@gmail.com</email></author><category term="Aktualności" /><summary type="html"><![CDATA[Wygraj bilet na wroc_love.rb , konferencję na której nie może Cię zabraknąć 10 i 11 marca we Wrocławiu.]]></summary></entry><entry><title type="html">Git - zaawansowany diff, status &amp;amp; log</title><link href="https://rubysfera.pl/2012/01/git-zaawansowany-diff-status-log/" rel="alternate" type="text/html" title="Git - zaawansowany diff, status &amp;amp; log" /><published>2012-01-24T15:10:54+00:00</published><updated>2012-01-24T15:10:54+00:00</updated><id>https://rubysfera.pl/2012/01/git-zaawansowany-diff-status-log</id><content type="html" xml:base="https://rubysfera.pl/2012/01/git-zaawansowany-diff-status-log/"><![CDATA[<p>
				<a href="http://rubysfera.pl/2012/01/git-zaawansowany-diff-status-log/git/" rel="attachment wp-att-1524"><img src="/assets/git.png" alt="" title="git" width="256" height="256" class="alignright size-full wp-image-1524" /></a>Trudno sobie wyobrazić średni czy duży projekt, którym dało by się zarządzać bez pomocy systemu kontroli wersji. Z różnych przyczyn (<a href="https://github.com/">GitHub</a>!), nieoficjalnym standardem w środowisku programistów Rails stał się Git.</p>
<p>Git jest potężnym narzędziem. Potężnym w podobny sposób jak potężny jest Emacs albo VIM. Git tak jak Emacs czy VIM potrafi przysporzyć kłopotu z najprostszymi czynnościami. Wiele osób korzysta z Gita nie rozumiejąc jego filozofii i znając tylko podstawowe polecenia, tak jak wiele osób korzysta z VIMa używając tylko <code>&lt;ESC&gt;:wq</code> oraz <code>i</code>. Komendy w gicie posiadają setki możliwych kombinacji argumentów. Część komend nazwana jest tak, żeby za nic nie dało się zgadnąć do czego służą (Emacs "auto-fill-mode" anybody?).</p>
<p>Wszystkie te programy po przeskoczeniu początkowych trudności, związanych z nauką nowego sposobu myślenia, powodują znaczny wzrost produktywności u użytkownika.</p>
<p>Jest jeszcze jedna rzecz łącząca Gita z VIMem i Emacsem. Wiele osób nie wie o istnieniu monstrualnej ilości trików pozwalających przyspieszyć i uprzyjemnić swoją pracę z tymi programami. Są to zwykle "sztuczki" rozwiązujące konkretny drobny problem. Na tyle drobny, że osobie napotykającej na niego nie opłaca się szukać bezpośredniego rozwiązania, więc zwykle problem zostaje rozwiązany "na około".</p>
<p>Postanowiłem zebrać w jednym miejscu kilka takich "sztuczek".</p>
<h3>diff</h3>
<p>Jedną z najprzydatniejszych komend w każdym porządnym systemie kontroli wersji jest <code>diff</code>.</p>
<p>Git pozwala porównać ze sobą pliki, commity, branche.</p>
<p>Nie wszyscy jednak wiedzą, że gitowy diff przyjmuje wiele opcji konfigurujących sposób w jaki różnice zostaną wyświetlone na ekranie. Jedną z nich jest <strong>--word-diff</strong>.</p>
<p>Typowy przypadek użycia tego przełącznika to np. próba wyświetlenia drobnych zmian w bardzo długiej linii. Problem ze zwykłym diffem jest taki, że zmiany zostaną pokazane linia do linii.</p>
<pre>
<code>git diff</code>

<code>def too_big_if_to_be_true
-    some_very_long_method_name arg_firct, arg_second
+    some_very_long_method_name arg_first, arg_second
end</code>
</pre>
<p>Patrząc na powyższy kod nie widać od razu co zostało zmienione i na co. Z pomocą przychodzi<strong> --word-diff</strong>. Po dodaniu tego przełącznika do wywołania git diff otrzymamy następujący rezultat:</p>
<pre>
<code>git diff --word-diff</code>

<code>def too_big_if_to_be_true
some_very_long_method_name [-arg_firct,-]{+arg_first,+} arg_second
end</code>
</pre>
<p>W tym wypadku sytuacja wygląda trochę lepiej. Nawias kwadratowy i znaki '-' pokazują nam zastępowany wyraz, nawias klamrowy i znaki '+' pokazują wyraz zastępujący. Wciąż nie jest to jednak forma najbardziej czytelna, szczególnie jeśli trafi nam się kawałek kodu, w którym intensywanie korzystamy z tablicy ([]) albo hasha ({}). W tym wypadku sprawdza się flaga <strong>--color-words</strong>:</p>
<pre>
<code>git diff --color-words</code>

<code>def too_big_if_to_be_true
some_very_long_method_name <span style="color: red">arg_firct</span>,<span style="color: green">arg_first</span>, arg_second
end</code>
</pre>
<p>Jeśli odpalimy tą komendę w terminalu, który obsługuje kolory, jakiekolwiek wątpliwości co do wprowadzonych zmian zostaną natychmiast rozwiane. Wyraz zastępowany zostaje pokolorowany na czerwono, wyraz zastępujący na zielono.<br />
Istnieje również możliwość połączenia <strong>--word-diff</strong> z kolorowaniem:</p>
<pre>
<code>git diff --word-diff --color</code>

<code>def too_big_if_to_be_true
some_very_long_method_name <span style="color: red">[-arg_firct,-]</span><span style="color: green">{+arg_first,+}</span> arg_second
end</code>
</pre>
<p>Oczywiście nie ma sensu za każdym razem wpisywać ręcznie <strong>--word-diff</strong>. Od czego mamy aliasy:</p>
<pre>
<code>git config alias.dic 'diff --color-words'</code>
</pre>
<p>ustawia alias 'dic' działający w bieżącym repozytorium. Jeśli dodamy <strong>--global</strong>:</p>
<pre>
<code>git config --global alias.dic 'diff --color-words'</code>
</pre>
<p>zmiany zostaną zapisane w naszym pliku .gitconfig, przez co będą działały również w pozostałych repozytoriach.</p>
<h3>status</h3>
<p>Dużą pomocą dla początkujących użytkowników gita jest wiadomość pokazująca się każdorazowo podczas odpalenia komendy <strong>status</strong>. Poniżej widać przykładowe wywołanie git status w repozytorium, w którym został zmieniony tylko jeden plik.</p>
<pre>
<code>git status</code>
<code>
# On branch master
# Changes not staged for commit:
#   (use "git add &lt;file&gt;..." to update what will be committed)
#   (use "git checkout -- &lt;file&gt;..." to discard changes in working directory)
#
#    modified:   app/controllers/application_controller.rb
#
no changes added to commit (use "git add" and/or "git commit -a")</code>
</pre>
<p>Jak widać więcej niż same zmiany w repozytorium zajmuje tekst objaśniający co z tymi zmianami można zrobić, jak je cofnąć, jak wykonać commit. Ten widok, uszyty specjalnie dla początkujących, nie jest jedynym możliwym sposobem wyświetlenia statusu zmian.</p>
<p>Z pomocą przychodzi opcja <strong>--short</strong> (w skrócie <strong>-s</strong>). Jej użycie powoduje, że zamiast wielkiego tekstowego bloba pojawia się zgrabne:</p>
<pre>
<code>git status -s</code>
<code>
M app/controllers/application_controller.rb</code>
</pre>
<p>Jeśli nie mamy ustawionego wyświetlania bieżącego brancha w shellu warto jeszcze dodać przełącznik <strong>--branch</strong>. Dzięki niemu na górze wyświetlą się informacje na temat bieżącego brancha.</p>
<pre>
<code>git status -sb</code>
<code>## master
M app/controllers/application_controller.rb</code>
</pre>
<p>Można ułatwić sobie życie i dodać powyższą komendę jako alias.</p>
<pre>
<code>git config --global alias.st 'status -sb'</code>
</pre>
<h3>log</h3>
<p>Jedną z częściej używanych, a przy tym mocno niedocenianych komend, jest w gicie <strong>log</strong>. Większość z nas w normalnej pracy ogranicza się do odpalenia git <strong>log</strong> bez parametrów, ew. z nazwą pliku, którego log chcemy zobaczyć. <strong>git-log</strong> to idealny przykład komendy, która w 90% przypadków robi dokładnie to czego od niej oczekujemy bez żadnej pomocy z naszej strony. Na pozostałe 10% przypadków twórcy gita przygotowali mnóstwo opcji pozwalających nam zdecydować co właściwie chcemy zobaczyć, w jakim formacie i w jakiej kolejności.</p>
<p>git-log domyślnie wypisuje historię zmian dokonanych na danym branchu w formacie <strong>HASH</strong>, <strong>AUTOR</strong>, <strong>DATA</strong>, <strong>COMMIT_MESSAGE</strong>.</p>
<p>Tak naprawdę najbardziej interesujące w logu są treści commitów. Nie zawsze jednak same teksty wystarczają do znalezienia tego czego szukamy (kto nigdy nie wpisał bzdurnego <strong>COMMIT_MESSAGE</strong> niech pierwszy rzuci kamień!).</p>
<p>Bardzo przydana jest możliwość wypisania nie tylko samych commitów, ale także pokazania ich zawartości w formie patchy. Służy do tego polecenie:</p>
<pre>
<code>git log -p</code>

<code>
commit 69dc58e59f11436b4a153537f63d7db3baa8552e
Author: Maciej Gajewski &lt;email&gt;
Date:   Fri Sep 16 16:24:34 2011 +0200</code>

<code>Message 1</code>
</pre>
<pre>
<code>diff --git a/abc b/abc
index 11921d5..d8a2f87 100644
--- a/abc
+++ b/abc
@@ -1,3 +1,7 @@
Master</code>
<code>
Master end
+
+Master 1
+
+Master 2
</code>
<code>
commit aa1d275d9c9cba634297c864301238c6903c5e08
Author: Maciej Gajewski &lt;email&gt;
Date:   Fri Sep 16 16:23:08 2011 +0200

<code>added to master</code>

diff --git a/abc b/abc
index e69de29..11921d5 100644
--- a/abc
+++ b/abc
@@ -0,0 +1,3 @@
+Master
+
+Master end
</code>
</pre>
<p>Odpalone bez parametrów pokaże nam logi bieżącego brancha łatka po łatce, co kiedy zostało dodane i przez kogo. Jeśli wpiszemy po <strong>-p</strong> nazwę pliku będziemy mogli zobaczyć zmiany w podanym pliku - poprawka po poprawce.</p>
<p>Zdarzają się sytuacje, że <strong>log -p</strong> zwraca za dużo informacji. Czasami chcemy po prostu zobaczyć <strong>jakie</strong> pliki były zmieniane, a nie koniecznie każdą jedną zmianę w nich. W tym celu musimy odpalić <strong>git-log</strong> z parametrem <strong>--stat</strong></p>
<pre>
<code>
commit 78dbfbe86609759c33f9c59362f6a2813d2c3e13
Author: Maciej Gajewski &lt;mail&gt;
Date:   Fri Sep 16 16:28:53 2011 +0200</code>

<code>Added config and index files</code>
<code>
config.xml |    9 +++++++++
index.html |   17 +++++++++++++++++
2 files changed, 26 insertions(+), 0 deletions(-)
</code>
<code>
commit fa0950503af962cccdccd1bcb9b9380501faed28
Author: Maciej Gajewski &lt;mail&gt;
Date:   Fri Sep 16 16:27:36 2011 +0200
</code>
<code>
Added main ruby file
</code>
<code>
main.rb |    3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
</code>
</pre>
<p>Git-Log pozwala nam na na wyświetlenie listy zmian na wszystkich branchach, nie tylko na bieżącym. Co więcej, możemy wyświetlić zmiany tylko na niektórych branchach.</p>
<p>Na przykład:</p>
<pre>
<code>git log b1 b2</code>
</pre>
<p>wyświetli wszystkie commity, które występują na branchu b1 i te które występują na branchu b2.<br />
Niezwykle przydaje się możliwość wyświetlenia commitów, które znajdują się na jednym branchu, ale nie ma ich jeszcze na drugim.<br />
Pisząc:</p>
<pre>
<code>git log master..b1</code>
</pre>
<p>możemy zobaczyć które commit są na branchu b1, ale nie zostały jeszcze zmergowane do mastera.</p>
<p>Git potrafi filtrować historię po dacie.</p>
<pre>
<code>
git log --since=2.hours.ago --until=10.minutes.ago</code>
</pre>
<p>Co robi powyższy kod jest w miarę jasne. Wyświetla wszystkie commity powstałe najwyżej dwie godziny temu i nie później niż dziesięć minut temu. Zamiast hours i minutes można wstawić m.in. days, years, months, weeks itd.</p>
<p>Na koniec zostawiłem coś o co chyba najczęściej pojawiają się pytania w kontekście polecenia "log".</p>
<pre>
<code>git log -S "def login"</code>
</pre>
<p>wyświetli wszystkie commity, które zawierają "def login". Zawierają nie w COMMIT_MESSAGE tylko w plikach dodanych w konkretnym commicie.</p>
<h3>Szukania ciąg dalszy</h3>
<p>Załóżmy, że mamy jakąś zmianę ale nie wiemy na ilu gałęziach ona się znajduje. Ten problem rozwiązuje git-brach --contains.</p>
<pre>
<code>git branch --contains=8d38c3ec11ee6247ff929f264815b3f508fc47b2
b1
b2
* master</code>
</pre>
<p>Polecenie to wypisuje nazwy branchy na których znajduje się commit o podanym SHA1.</p>
<p>Wszystkie powyższe argumenty można łączyć, a więc możliwe jest znalezienie np. definicji funkcji dodanej w zeszłym tygodniu przez autora A, która nie została jeszcze z mergowana z masterem. Nie jest ważne, żeby nauczyć się koniecznie tych poleceń na pamięć (chociaż warto!). Najważniejsze jest żeby wiedzieć, że git posiada takie możliwości. Po detale można sięgać w razie potrzeby ;)</p>
<h3>Dla wzrokowców</h3>
<p>Na koniec tej sekcji bonus. Jeśli nie znasz jeszcze - wpisz do konsoli w swoim największym projekcie ;)</p>
<pre>
<code>git log --oneline --graph</code>
</pre>
<p>Aha! Istnieje jeszcze jeden "hack" pasujący do kategorii "log" chociaż nie mający z git-log wiele wspólnego.</p>
<pre>
<code>git show :/regexp</code>
</pre>
<p>znajduje i wyświetla ostatni commit które COMMIT_MESSAGE pasuje go wzorca regexp.</p>
<p>Takich trików jest naprawdę mnóstwo i naprawdę warto się zabrać za solidną naukę obsługi gita. To się opłaca. 		</p>]]></content><author><name>{&quot;login&quot; =&gt; &quot;Maciej Gajewski&quot;, &quot;email&quot; =&gt; &quot;gajewski.mm@gmail.com&quot;, &quot;display_name&quot; =&gt; &quot;Maciej Gajewski&quot;, &quot;first_name&quot; =&gt; &quot;Maciej&quot;, &quot;last_name&quot; =&gt; &quot;Gajewski&quot;}</name><email>gajewski.mm@gmail.com</email></author><category term="Tutoriale" /><summary type="html"><![CDATA[Korzystasz z gita, ale chciałbyś z niego wycisnąć więcej? Dziś mamy dla Ciebie zaawansowane porady odnośnie git diff, git status i git log. Zebrane przez Maćka Gajewskiego (@weszlem).]]></summary></entry><entry><title type="html">Meetjs Summit - relacja</title><link href="https://rubysfera.pl/2012/01/summit-meetjs-relacja/" rel="alternate" type="text/html" title="Meetjs Summit - relacja" /><published>2012-01-19T10:18:37+00:00</published><updated>2012-01-19T10:18:37+00:00</updated><id>https://rubysfera.pl/2012/01/summit-meetjs-relacja</id><content type="html" xml:base="https://rubysfera.pl/2012/01/summit-meetjs-relacja/"><![CDATA[<p>
				<a href="http://rubysfera.pl/2012/01/summit-meetjs-relacja/dsc_0613/" rel="attachment wp-att-1478"><img src="/assets/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ć "it was remarkable event", ale nie jestem, więc rozwinę myśl w moim natywnym języku.</p>
<h3>Organizatorzy</h3>
<p>Rejestracja, obsługa, pomoc techniczna - 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>"How not to reinvent the wheel" była dobrą zachętą do korzystania z gotowych frameworków i engine'ó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 - 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 - CSS 3d Transforms</h4>
<p><a href="http://rubysfera.pl/2012/01/summit-meetjs-relacja/dsc_0802/" rel="attachment wp-att-1492"><img src="/assets/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="/assets/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. :)</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 "1 urządzenie = 1 użytkownik".  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="/assets/aleks_talk.jpg" alt="" title="aleks_talk" width="708" height="236" class="aligncenter size-full wp-image-1495" /></a>		</p>]]></content><author><name>{&quot;login&quot; =&gt; &quot;pavelloz&quot;, &quot;email&quot; =&gt; &quot;pavelloz@gmail.com&quot;, &quot;display_name&quot; =&gt; &quot;Paweł Kowalski&quot;, &quot;first_name&quot; =&gt; &quot;Paweł&quot;, &quot;last_name&quot; =&gt; &quot;Kowalski&quot;}</name><email>pavelloz@gmail.com</email></author><category term="Aktualności" /><summary type="html"><![CDATA[Gościnna relacja Pawła Kowalskiego z Meetjs Summit w Poznaniu. (Tak, niedługo będzie coś o Rubym i nie o konferencjach).]]></summary></entry><entry><title type="html">Rubyshift - relacja</title><link href="https://rubysfera.pl/2011/12/rubyshift-relacja/" rel="alternate" type="text/html" title="Rubyshift - relacja" /><published>2011-12-28T08:35:54+00:00</published><updated>2011-12-28T08:35:54+00:00</updated><id>https://rubysfera.pl/2011/12/rubyshift-relacja</id><content type="html" xml:base="https://rubysfera.pl/2011/12/rubyshift-relacja/"><![CDATA[<p>
				[caption id="attachment_1407" align="alignright" width="300" caption="Pałac Potomkina"]<a href="http://rubysfera.pl/2011/12/rubyshift-relacja/309704_214672135266361_100001707272528_514332_745013265_n/" rel="attachment wp-att-1407"><img src="/assets/309704_214672135266361_100001707272528_514332_745013265_n-300x200.jpg" alt="" title="Pałac Potomkina" width="300" height="200" class="size-medium wp-image-1407" /></a>[/caption]</p>
<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 - 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>
<p>[caption id="attachment_1410" align="alignright" width="300" caption="Takie panny młode pojawiały się na miejscu imprezy."]<a href="http://rubysfera.pl/2011/12/rubyshift-relacja/312802_10150336020507592_733287591_8684453_2137587013_n/" rel="attachment wp-att-1410"><img src="/assets/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>[/caption]</p>
<h3>Konferencja</h3>
<p>Keynote o tytule "Open Source life" 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>
<p>[caption id="attachment_1423" align="alignright" width="267" caption="Alka seltzer dla każdego"]<a href="http://rubysfera.pl/2011/12/rubyshift-relacja/attachment/430831528/" rel="attachment wp-att-1423"><img src="/assets/430831528-267x200.jpg" alt="" title="alka seltzer" width="267" height="200" class="size-medium wp-image-1423" /></a>[/caption]</p>
<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ę.		</p>]]></content><author><name>{&quot;login&quot; =&gt; &quot;tjeden&quot;, &quot;email&quot; =&gt; &quot;tjeden@gmail.com&quot;, &quot;display_name&quot; =&gt; &quot;tjeden&quot;, &quot;first_name&quot; =&gt; &quot;Aleksander&quot;, &quot;last_name&quot; =&gt; &quot;Dąbrowski&quot;}</name><email>tjeden@gmail.com</email></author><category term="Aktualności" /><summary type="html"><![CDATA[Relacja z Rubyshift - klimatycznej konferencji w Dniepropietrowsku na Ukrainie.]]></summary></entry><entry><title type="html">CodeRetreat relacja</title><link href="https://rubysfera.pl/2011/12/coderetreat-relacja/" rel="alternate" type="text/html" title="CodeRetreat relacja" /><published>2011-12-12T08:00:02+00:00</published><updated>2011-12-12T08:00:02+00:00</updated><id>https://rubysfera.pl/2011/12/coderetreat-relacja</id><content type="html" xml:base="https://rubysfera.pl/2011/12/coderetreat-relacja/"><![CDATA[<p>
				<a href="http://rubysfera.pl/2011/12/coderetreat-relacja/6454824967_9ac85b4432_b/" rel="attachment wp-att-1374"><img src="/assets/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>) - 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="/assets/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 "evil coder". 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'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="/assets/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></p>]]></content><author><name>{&quot;login&quot; =&gt; &quot;tjeden&quot;, &quot;email&quot; =&gt; &quot;tjeden@gmail.com&quot;, &quot;display_name&quot; =&gt; &quot;tjeden&quot;, &quot;first_name&quot; =&gt; &quot;Aleksander&quot;, &quot;last_name&quot; =&gt; &quot;Dąbrowski&quot;}</name><email>tjeden@gmail.com</email></author><category term="Aktualności" /><summary type="html"><![CDATA[Podsumowanie Global Day od CodeRetreat w Warszawie - świetnego szkolenia z pisania idealnego kodu.]]></summary></entry><entry><title type="html">Global day of CodeRetreat Warszawa</title><link href="https://rubysfera.pl/2011/11/global-day-of-coderetreat-warszawa/" rel="alternate" type="text/html" title="Global day of CodeRetreat Warszawa" /><published>2011-11-18T09:43:08+00:00</published><updated>2011-11-18T09:43:08+00:00</updated><id>https://rubysfera.pl/2011/11/global-day-of-coderetreat-warszawa</id><content type="html" xml:base="https://rubysfera.pl/2011/11/global-day-of-coderetreat-warszawa/"><![CDATA[<p>
				<a href="http://www.flickr.com/photos/sermoa/5697071418/"><img src="/assets/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 - 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></p>]]></content><author><name>{&quot;login&quot; =&gt; &quot;tjeden&quot;, &quot;email&quot; =&gt; &quot;tjeden@gmail.com&quot;, &quot;display_name&quot; =&gt; &quot;tjeden&quot;, &quot;first_name&quot; =&gt; &quot;Aleksander&quot;, &quot;last_name&quot; =&gt; &quot;Dąbrowski&quot;}</name><email>tjeden@gmail.com</email></author><category term="Aktualności" /><summary type="html"><![CDATA[Zapraszamy was na darmowe warsztaty z programowania w parach i test driven developemnt, 3 grudnia w Warszawie, które są częścią Global day of Code Retreat.]]></summary></entry><entry><title type="html">Codebrawl</title><link href="https://rubysfera.pl/2011/10/codebrawl/" rel="alternate" type="text/html" title="Codebrawl" /><published>2011-10-11T08:06:52+00:00</published><updated>2011-10-11T08:06:52+00:00</updated><id>https://rubysfera.pl/2011/10/codebrawl</id><content type="html" xml:base="https://rubysfera.pl/2011/10/codebrawl/"><![CDATA[<p>
				<a href="http://rubysfera.pl/2011/10/codebrawl/coderawl/" rel="attachment wp-att-1313"><img src="/assets/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> - 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><author><name>{&quot;login&quot; =&gt; &quot;tjeden&quot;, &quot;email&quot; =&gt; &quot;tjeden@gmail.com&quot;, &quot;display_name&quot; =&gt; &quot;tjeden&quot;, &quot;first_name&quot; =&gt; &quot;Aleksander&quot;, &quot;last_name&quot; =&gt; &quot;Dąbrowski&quot;}</name><email>tjeden@gmail.com</email></author><category term="Aktualności" /><summary type="html"><![CDATA[Jesteś znudzony pisaniem kolejnej przełomowej aplikacji opartej o CRUD? Weź udział w konkursie Codebrawl i zmierz się z czystym Rubym.]]></summary></entry></feed>