<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4468421024394811861</id><updated>2024-12-19T04:30:42.155+01:00</updated><category term="ruby"/><category term="rails"/><category term="linux"/><category term="ubuntu"/><category term="gem"/><category term="web"/><category term="book"/><category term="idea"/><category term="acta/pipa/sopa"/><category term="anonymous"/><category term="mac os x"/><category term="python"/><category term="bdd"/><category term="django"/><category term="gnome"/><category term="haskell"/><category term="java"/><category term="php"/><category term="quote"/><category term="rspec"/><category term="tdd"/><category term="blog"/><category term="clojure"/><category term="fedora"/><category term="fizyka"/><category term="jruby"/><category term="lion"/><category term="lisp"/><category term="mongodb"/><category term="scala"/><category term="snippet"/><category term="studia"/><title type='text'>KrzysztofZalewski::Blog</title><subtitle type='html'>Yet another programming weblog...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>43</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-3722339556382721260</id><published>2012-02-28T20:59:00.001+01:00</published><updated>2012-02-28T20:59:57.398+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="blog"/><title type='text'>Goodbye Blogger, Welcome GitHub:Pages</title><content type='html'>&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;h1&gt;Goodbye&lt;/h1&gt;
&lt;img border=&quot;0&quot; height=&quot;97&quot; src=&quot;http://www.spidersweb.pl/wp-content/uploads/2011/03/blogger_logo-original-01.jpg&quot; width=&quot;320&quot; /&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;h1&gt;Welcome&lt;/h1&gt;
&lt;a href=&quot;http://zlw.github.com&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;72&quot; src=&quot;http://pages.github.com/logo_pages.png&quot; width=&quot;320&quot; /&gt;
&lt;br/&gt;
&lt;h1&gt;zlw@github:pages&lt;/h1&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/3722339556382721260/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2012/02/goodbye-blogger-welcome-githubpages.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/3722339556382721260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/3722339556382721260'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2012/02/goodbye-blogger-welcome-githubpages.html' title='Goodbye Blogger, Welcome GitHub:Pages'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-2338862165938471735</id><published>2012-02-26T23:32:00.002+01:00</published><updated>2012-02-26T23:32:39.904+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bdd"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="rspec"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="tdd"/><title type='text'>How to proper test scopes (named scopes)</title><content type='html'>&lt;br /&gt;
I just read few posts about &quot;how to test named scopes&quot;. I&#39;m asking - why should I use FactoryGirl and create tons of unnecessary objects just to test `order(:position).first`?!&lt;br/&gt;&lt;br/&gt;
&lt;h3&gt;How not to do this&lt;/h3&gt;&lt;br/&gt;
&lt;script src=&quot;https://gist.github.com/1919347.js&quot;&gt; &lt;/script&gt;
We&#39;ve just created .. let&#39;s count .. 5 objects and made 2 unnecessary db queries&lt;br/&gt;&lt;br/&gt;
&lt;h3&gt;How to do this&lt;/h3&gt;&lt;br/&gt;
&lt;script src=&quot;https://gist.github.com/1919368.js&quot;&gt; &lt;/script&gt;
It&#39;s useless to test &lt;b&gt;Rails&lt;/b&gt; (it&#39;s really proper tested). We need to spec &lt;b&gt;messages&lt;/b&gt; that goes between objects and given parameters.</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/2338862165938471735/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2012/02/how-to-proper-test-scopes-named-scopes.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/2338862165938471735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/2338862165938471735'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2012/02/how-to-proper-test-scopes-named-scopes.html' title='How to proper test scopes (named scopes)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-5763035410417630133</id><published>2012-02-16T11:46:00.000+01:00</published><updated>2012-02-16T11:46:23.803+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gem"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>named_accessors: attr_accessors na sterydach</title><content type='html'>attr_accessor jest świetne (szczególnie jeżeli ktoś przychodzi do Rubiego np. z Javy), ale ma jedną zasadniczą wadę - nazwa zmiennej instancji == nazwa metody (settera i gettera). W 99% to bardzo dobrze, ale dla tego jednego procenta powstało &lt;a href=&quot;https://rubygems.org/gems/named_accessors&quot;&gt;named_accessors&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1843966.js&quot;&gt; &lt;/script&gt;
Mam nadzieję że komuś się kiedyś przyda :)</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/5763035410417630133/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2012/02/namedaccessors-attraccessors-na.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/5763035410417630133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/5763035410417630133'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2012/02/namedaccessors-attraccessors-na.html' title='named_accessors: attr_accessors na sterydach'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-411921414227471659</id><published>2012-01-23T00:30:00.000+01:00</published><updated>2012-02-16T11:46:35.783+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gem"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>param_protected i Devise</title><content type='html'>Kilka dni temu &lt;a href=&quot;http://kzalewski.blogspot.com/2012/01/paramprotected-wycina-potrzebne.html&quot;&gt;pisałem już&lt;/a&gt; o gemie param_protected. Jeżeli używamy go razem z Devise, będziemy musieli zrobić zmodyfikować kontrolery i dodać definicję dozwolonych parametrów.&lt;br /&gt;
&lt;br /&gt;
Po pierwsze musimy zmapować URL-e na nasze nowe kontrolery.&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1659326.js&quot;&gt;
 
&lt;/script&gt;&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;Nie będzie do rozwiązanie DRY. Dlatego zdefiniujemy klasę, która przygotuje nam potrzebny hash&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1659344.js&quot;&gt;
 
&lt;/script&gt;&lt;br /&gt;
Zmieniamy więc nasz plik routes.rb&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1659347.js&quot;&gt;
 
&lt;/script&gt;&lt;br /&gt;
Teraz najgorsza część. Musimy zdefiniować wszystkie kontrolery&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1659359.js&quot;&gt;
 
&lt;/script&gt;&lt;br /&gt;
Jest bardzo duża szansa że zapomniałem a jakimś parametrze (chociaż narazie wszystko u mnie działa ;)). Jeżeli tak, proszę o komentarz.</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/411921414227471659/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2012/01/paramprotected-i-devise.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/411921414227471659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/411921414227471659'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2012/01/paramprotected-i-devise.html' title='param_protected i Devise'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-1217007474738230046</id><published>2012-01-22T21:33:00.001+01:00</published><updated>2012-01-28T13:37:17.739+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="acta/pipa/sopa"/><category scheme="http://www.blogger.com/atom/ns#" term="anonymous"/><category scheme="http://www.blogger.com/atom/ns#" term="web"/><title type='text'>Hakierzy</title><content type='html'>Mam dość komentarzy na temat tych ciągłych ataków na rządowe strony. Jak można wypowiadać się na dany temat bez żadnej wiedzy.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
Nazywanie Anonymous hakerami to żart. Ataki &lt;a href=&quot;http://pl.wikipedia.org/wiki/DDoS&quot;&gt;DDoS&lt;/a&gt; to żaden hacking, to po prostu jednoczesne wejście na daną stronę. O tym mówią nawet sami Anonimowi - &lt;i&gt;&quot;większość z nas nie ma żadnej wiedzy programistycznej&quot;&lt;/i&gt;, a na pytanie czy uznają się za hakerów - &lt;i&gt;&quot;Ja siebie nie określiłbym mianem hakera&quot;&lt;/i&gt;. Jak to jednak ładnie brzmi w radiu/telewizji - &quot;atak hakerów&quot;&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;b&gt;21:00 &lt;/b&gt;&quot;Anonimowi&quot; twierdzą, że zhakowali stronę Parlamentu Europejskiego. Witryna nie działa.
&lt;br /&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;
- &lt;a href=&quot;http://www.tvn24.pl/-1,1732237,0,1,polska-rewolucja-w-sieci-trwa-bitwa-o-acta,wiadomosc.html&quot;&gt;tvn24.pl&lt;/a&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
Wygląda na to, że tym razem hakerzy nie próbowali wchodzić głęboko w systemy czy bazy danych
&lt;br /&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;
- &lt;a href=&quot;http://www.rp.pl/artykul/9158,796151-Cyberatak-Anonymous-w-Internecie-to-szantaz.html&quot;&gt;rp.pl&lt;/a&gt;&lt;/div&gt;
&lt;/blockquote&gt;
No więc panie Kompała,&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1658641.js&quot;&gt;
 
&lt;/script&gt;
to żaden atak. Jeżeli chce Pan, może taki &quot;atak&quot; przeprowadzić z własnego komputera! A jak Pan w ten sposób widzi sposobność do &quot;wejścia z system czy bazę danych&quot;? Nie mam pojęcia.&lt;br /&gt;
&lt;br /&gt;
A jak TVN24 widzi zhakowanie z niedziałaniu strony? No też nie wiem. Uwaga, zaraz wyłączam swój komputer, nie będzie działał, &lt;b&gt;jestem hakerem&lt;/b&gt; :/&lt;br /&gt;
&lt;br /&gt;
Równie zabawni są script kidies (a.k.a debile) panoszący się po wszystkich fejsbukach czy innych twitterach:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
Atakujemy stronę prezydenta. Wchodźcie i wciskajcie F5&lt;/blockquote&gt;
No prawdziwy hakerzy. Sory, mam Maca, u mnie F5 nie działa :/</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/1217007474738230046/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2012/01/hakierzy.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/1217007474738230046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/1217007474738230046'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2012/01/hakierzy.html' title='Hakierzy'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-3430747450567146418</id><published>2012-01-22T00:09:00.000+01:00</published><updated>2012-01-28T13:37:39.040+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="acta/pipa/sopa"/><category scheme="http://www.blogger.com/atom/ns#" term="anonymous"/><category scheme="http://www.blogger.com/atom/ns#" term="web"/><title type='text'>Anonymous - cyber Al-Kaida?</title><content type='html'>&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;b&gt;Anonymous&lt;/b&gt; (ang., rzeczownik niepoliczalny), &lt;b&gt;Anonimowi&lt;/b&gt;, &lt;b&gt;Grupa Anonimowych&lt;/b&gt; – niezidentyfikowana grupa aktywistów z całego świata podejmująca protesty oraz inne działania w internecie. Działania przypisywane grupie &quot;Anonymous&quot; są podejmowane przez niezidentyfikowane jednostki, które przybierają nazwę &quot;Anonymous&quot; atakując serwery rządowe lub korporacyjne.
&lt;/blockquote&gt;
W ostatnim czasie, na fali protestów przeciwko SOPA, PIPA czy ACTA w sposób zatrważający moim zdaniem roście poparcie dla grupy Anonymous. Poparcie graniczące wręcz z uwielbieniem. Chociaż może się wydawać, że Anonimowi są naszą ostatnią linią obrony, ostatnim bastionem wolności należy się zastanowić nad słusznością ich działań.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgijCaEZsH9bFyqnbIoxmok9BiaTQCbuEFQRf8BZHs1YuXie3hbhlVWhChB3UqC15wXyFTWbcc2H-xjd-cU9hGCip6Ba_CSGVS3JLVMR4qNdA_H081LAyJVgh5CAKXn4B2SzZGeS88RE584/s1600/anonymous.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgijCaEZsH9bFyqnbIoxmok9BiaTQCbuEFQRf8BZHs1YuXie3hbhlVWhChB3UqC15wXyFTWbcc2H-xjd-cU9hGCip6Ba_CSGVS3JLVMR4qNdA_H081LAyJVgh5CAKXn4B2SzZGeS88RE584/s400/anonymous.png&quot; width=&quot;397&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;Co mam na myśli? Choć Anonimowi przedstawiają się jako nasi obrońcy należy pamiętać, że to jednak bądź co bądź cyber-przestępcy atakujący strony rządowe, korporacyjne itd. Uznali oni siebie chyba za tych którzy będą wymierzać sprawiedliwość i walczyć w imię nas wszystkich czy tego chcemy czy nie.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkZF1IWaYbSsyni2QkQcgcs4mjsfoadn_Mugg6XGl5_9qr4ngw8DlwjxWkoDrCFjCm9W9craGukyzQiS0jmufsceS_Toy97cwRy46QcQagQ9KrzbrsEATfEdLIAiv4gQlM_au_R2Hsv1eo/s1600/Zrzut+ekranu+2012-01-22+o+00.18.38.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;257&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkZF1IWaYbSsyni2QkQcgcs4mjsfoadn_Mugg6XGl5_9qr4ngw8DlwjxWkoDrCFjCm9W9craGukyzQiS0jmufsceS_Toy97cwRy46QcQagQ9KrzbrsEATfEdLIAiv4gQlM_au_R2Hsv1eo/s640/Zrzut+ekranu+2012-01-22+o+00.18.38.png&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://twitter.com/#!/YourAnonNews/status/160819995289468928&quot;&gt;https://twitter.com/#!/YourAnonNews/status/160819995289468928&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Nawet jeżeli ich cele są słuszne to sposób w jaki działają jest moim zdaniem karygodny. Biorąc za przykład dzisiejszy (21 stycznia 2012) atak na polskie strony rządowe - czy naprawdę taki akt zniechęci polskich polityków do umowy, która ma chronić przed piractwem i cyber-przestępczością? Wątpię.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;360&quot; src=&quot;http://www.youtube.com/embed/sGlB36XrbI4?rel=0&quot; width=&quot;480&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
Chcąc znaleźć przykład podobnej grupy jedyne co przychodzi mi na myśl to (niestety) Al-Kaida. Dziwne filmiki w internecie, &quot;wyzwalanie&quot; wszystkich na siłę, walka z &quot;niewiernymi&quot; w USA - gdzieś to już chyba widzieliśmy. Akcje Anonymous to notabene bezkrwawe ataki terrorystyczne. Tylko zamiast kilku gości przejmujących samolot mamy tłumy (często durnych nie myślących samodzielnie dzieciaków) atakujące serwery. Wypowiadanie wojny światowej (I Cybernetycznej Wojny Światowej) jest już przekroczeniem wszelkich granic. Za kogo uważają się Ci ludzie, aby podejmować takie decyzje?&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;360&quot; src=&quot;http://www.youtube.com/embed/2RuVs0jeMyM?rel=0&quot; width=&quot;480&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
W 2001 roku już ktoś nam wszystkim wypowiadał wojnę. Założę się, że wtedy w krajach muzłumańskich poparcie dla Al-Kaidy (czy innych tego typu organizacji) było takie jak teraz dla Anonymous.&lt;br /&gt;
&lt;br /&gt;
Ludzie zapominają także o najważniejszej rzeczy - Anonimowych nikt nie kontroluje. Nikt nie wie kim są, jakie są ich plany i cele. Wiadomo tylko że na tą chwilę ich poglądy pokrywają się z poglądami większości. Co jednak będzie jutro? Co jeżeli Anonimowi zmienią front i zaczną atakować strony szerzące hasła wolnościowe. Zaczną atakować Wikipedię, portale informujące o walce z ACTA czy SOPA. Jest to &quot;żyjące cybernetyczne ciało&quot; nad którym nikt nie ma władzy ani wpływu.</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/3430747450567146418/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2012/01/anonymous-cyber-al-kaida.html#comment-form' title='Komentarze (5)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/3430747450567146418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/3430747450567146418'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2012/01/anonymous-cyber-al-kaida.html' title='Anonymous - cyber Al-Kaida?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgijCaEZsH9bFyqnbIoxmok9BiaTQCbuEFQRf8BZHs1YuXie3hbhlVWhChB3UqC15wXyFTWbcc2H-xjd-cU9hGCip6Ba_CSGVS3JLVMR4qNdA_H081LAyJVgh5CAKXn4B2SzZGeS88RE584/s72-c/anonymous.png" height="72" width="72"/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-152654446833928141</id><published>2012-01-21T01:14:00.000+01:00</published><updated>2012-01-21T01:17:23.664+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mac os x"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>Tapeta dla Rubistów</title><content type='html'>Choć grafik ze mnie żaden zrobiłem taką oto tapetę dla Rubistów: (&lt;a href=&quot;http://www.geekpedia.com/gallery/fullsize/green-apple-wallpaper.jpg&quot;&gt;oryginał tutaj&lt;/a&gt;. tak wiem, nałożyłem tylko logo Rubiego :P)
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgToXpdgqmpW5dGqfksnYKp0XFMyf738m_4GBj6yDUMvr124AB6ZaaV5wP-5nmq4pYpzefWYPycP516Xkdc0FfVy-S82ScYBN9QczkB1YUPfovcz_SAhOGZTsGt74afIzZRr_phScBK4KqR/s1600/ruby_green.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;250&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgToXpdgqmpW5dGqfksnYKp0XFMyf738m_4GBj6yDUMvr124AB6ZaaV5wP-5nmq4pYpzefWYPycP516Xkdc0FfVy-S82ScYBN9QczkB1YUPfovcz_SAhOGZTsGt74afIzZRr_phScBK4KqR/s400/ruby_green.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgToXpdgqmpW5dGqfksnYKp0XFMyf738m_4GBj6yDUMvr124AB6ZaaV5wP-5nmq4pYpzefWYPycP516Xkdc0FfVy-S82ScYBN9QczkB1YUPfovcz_SAhOGZTsGt74afIzZRr_phScBK4KqR/s1600/ruby_green.png&quot;&gt;Link do pobrania&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
Pulpit prezentuje się teraz znokomicie :)
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTuOkDIfUW1c6mF05G_ZnllfCC83z8GGvdWgPGzjhSA0B8sixPvh18uubiy-l21CJq3PVlGBXu1dAz28aNDZXXGcuUJoNXfGoHi-N2-Mo5j_7ws4X__Vnror0NxFS2PvF410R-WQEOAGZ-/s1600/Zrzut+ekranu+2012-01-21+o+01.08.35.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;250&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTuOkDIfUW1c6mF05G_ZnllfCC83z8GGvdWgPGzjhSA0B8sixPvh18uubiy-l21CJq3PVlGBXu1dAz28aNDZXXGcuUJoNXfGoHi-N2-Mo5j_7ws4X__Vnror0NxFS2PvF410R-WQEOAGZ-/s400/Zrzut+ekranu+2012-01-21+o+01.08.35.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/152654446833928141/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2012/01/tapeta-dla-rubistow.html#comment-form' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/152654446833928141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/152654446833928141'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2012/01/tapeta-dla-rubistow.html' title='Tapeta dla Rubistów'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgToXpdgqmpW5dGqfksnYKp0XFMyf738m_4GBj6yDUMvr124AB6ZaaV5wP-5nmq4pYpzefWYPycP516Xkdc0FfVy-S82ScYBN9QczkB1YUPfovcz_SAhOGZTsGt74afIzZRr_phScBK4KqR/s72-c/ruby_green.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-2752857658262836490</id><published>2012-01-20T21:02:00.000+01:00</published><updated>2012-01-22T21:34:28.285+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="acta/pipa/sopa"/><category scheme="http://www.blogger.com/atom/ns#" term="anonymous"/><category scheme="http://www.blogger.com/atom/ns#" term="web"/><title type='text'>Koniec wolności w internecie? Say NO to ACTA!</title><content type='html'>&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://leozerosty.deviantart.com/art/Say-NO-to-ACTA-205370423&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;450&quot; src=&quot;http://fc09.deviantart.net/fs71/f/2011/108/0/a/say_no_to_acta_by_leozerosty-d3e9stz.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://leozerosty.deviantart.com/art/Say-NO-to-ACTA-205370423&quot;&gt;http://leozerosty.deviantart.com/art/Say-NO-to-ACTA-205370423&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;360&quot; src=&quot;http://www.youtube.com/embed/citzRjwk-sQ?rel=0&quot; width=&quot;640&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
Za &lt;a href=&quot;http://www.newsweek.pl/polska/rzad--polska-podpisze-acta-26-stycznia,87385,1,1.html&quot;&gt;6 dni (26 stycznia 2012)&lt;/a&gt; polski rząd ma podpisać ACTA (&lt;span style=&quot;background-color: white; line-height: 30px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;a href=&quot;http://pl.wikipedia.org/wiki/Anti-Counterfeiting_Trade_Agreement&quot;&gt;Anti-Counterfeiting Trade Agreement&lt;/a&gt;). Póki możemy zróbmy coś aby temu zapobiec!!! &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;line-height: 30px;&quot;&gt;&lt;a href=&quot;http://www.laquadrature.net/wiki/Jak_walczy%C4%87_z_ACTA&quot;&gt;Jak walczyć z ACTA&lt;/a&gt;??&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Niestety jesteśmy chyba świadkami końca internetu jaki znaliśmy. Niedawne protesty przeciwko &lt;a href=&quot;http://pl.wikipedia.org/wiki/Stop_Online_Piracy_Act&quot;&gt;SOPA&lt;/a&gt; i &lt;a href=&quot;http://pl.wikipedia.org/wiki/PROTECT_IP_Act&quot;&gt;PIPA&lt;/a&gt;, dzisiejsze (20 stycznia 2012) &lt;a href=&quot;http://antyweb.pl/fbi-zamyka-megaupload-i-megavideo-co-z-uzytkownikami/&quot;&gt;zamknięcie Megavideo i Megaupload&lt;/a&gt; (oraz aresztowania osób związanych z portalami) czy przepychana &quot;pod stołem&quot; i w tajemnicy ACTA.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;360&quot; src=&quot;http://www.youtube.com/embed/p_bERAf5KAg?rel=0&quot; width=&quot;640&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/2752857658262836490/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2012/01/say-no-to-acta.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/2752857658262836490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/2752857658262836490'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2012/01/say-no-to-acta.html' title='Koniec wolności w internecie? Say NO to ACTA!'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/citzRjwk-sQ/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-4233068644529258361</id><published>2012-01-19T15:25:00.000+01:00</published><updated>2012-01-19T15:25:33.308+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="haskell"/><category scheme="http://www.blogger.com/atom/ns#" term="lion"/><category scheme="http://www.blogger.com/atom/ns#" term="mac os x"/><title type='text'>Haskell-Platform (+ GHC) na Mac OS X 10.7 (Lion)</title><content type='html'>Czym jest haskell każdy wie (jak nie, to zapraszam &lt;a href=&quot;http://www.haskell.org/haskellwiki/Haskell&quot;&gt;tu&lt;/a&gt;), więc nie będę go reklamował tylko od razu przejdę do sedna. Zakładam też że każdy użytkownik OSX używa &lt;a href=&quot;http://mxcl.github.com/homebrew/&quot;&gt;Homebrew&lt;/a&gt;&amp;nbsp;do zarządzania pakietami (jeśli nie to gorąco zachęcam!).&lt;br /&gt;&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1640222.js&quot;&gt;&lt;/script&gt;
Ponieważ instalacja ghc (kompilatora Haskella) chwilę trwa dlatego dobrze jest uruchomić instalację z opcją -v żebyśmy widzieli cały czas co się dzieje i czy przypadkiem nie występują błędy kompilacji etc.&lt;br /&gt;
&lt;br /&gt;
Opcja 64 też jest ważna! Bez niej &lt;a href=&quot;http://hackage.haskell.org/trac/ghc/ticket/5128&quot;&gt;nie skompilujemy prawidłowo haskell-platform&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1640234.js&quot;&gt; &lt;/script&gt;&lt;br/&gt;
Teraz możemy uruchomić REPL Haskella (komendą &lt;i&gt;ghci&lt;/i&gt;)&lt;br/&gt;&lt;br/&gt;
&lt;script src=&quot;https://gist.github.com/1640250.js&quot;&gt; &lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/4233068644529258361/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2012/01/haskell-platform-ghc-na-mac-os-x-107.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/4233068644529258361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/4233068644529258361'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2012/01/haskell-platform-ghc-na-mac-os-x-107.html' title='Haskell-Platform (+ GHC) na Mac OS X 10.7 (Lion)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-8426933783746642066</id><published>2012-01-14T17:09:00.001+01:00</published><updated>2012-02-16T11:46:48.651+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gem"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>param_protected wycina potrzebne parametry</title><content type='html'>&lt;a href=&quot;https://github.com/cjbottaro/param_protected&quot;&gt;param_protected&lt;/a&gt;&amp;nbsp;to świetny gem, który przenosi funkcjonalność &lt;a href=&quot;http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html#method-i-attr_accessible&quot;&gt;attr_accessible&lt;/a&gt;&amp;nbsp;oraz&amp;nbsp;&lt;a href=&quot;http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html#method-i-attr_protected&quot;&gt;attr_protected&lt;/a&gt;&amp;nbsp;do kontrolerów. Składnia jest bardzo prosta:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1611878.js&quot;&gt;
 
&lt;/script&gt;
Jedyny problem jest taki, że nie ma defaultowej listy dozwolonych parametrów. Tzn. że wycinane są takie atrybuty jak &lt;i&gt;action&lt;/i&gt;, &lt;i&gt;controller&lt;/i&gt;, &lt;i&gt;id&lt;/i&gt;, &lt;i&gt;utf8&lt;/i&gt; czy (w przypadku używania devise) &lt;i&gt;authenticity_token&lt;/i&gt;. Formularze nie będą przez to działać poprawnie, będziemy cały czas wylogowywani itd.&lt;br /&gt;&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;Rozwiązanie jest na szczęście banalnie proste:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1611885.js&quot;&gt;
 
&lt;/script&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;:commit&lt;/b&gt; i &lt;b&gt;:utf8&lt;/b&gt; - formularze&lt;/li&gt;
&lt;li&gt;&lt;b&gt;:page&lt;/b&gt; - &lt;a href=&quot;https://github.com/mislav/will_paginate&quot;&gt;will_paginate&lt;/a&gt;&amp;nbsp;lub&amp;nbsp;&lt;a href=&quot;https://github.com/amatsuda/kaminari&quot;&gt;kaminari&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;:authenticity_token&lt;/b&gt; - &lt;a href=&quot;https://github.com/plataformatec/devise&quot;&gt;devise&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/8426933783746642066/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2012/01/paramprotected-wycina-potrzebne.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/8426933783746642066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/8426933783746642066'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2012/01/paramprotected-wycina-potrzebne.html' title='param_protected wycina potrzebne parametry'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-8075217740789651693</id><published>2012-01-05T20:49:00.000+01:00</published><updated>2012-02-26T23:32:58.956+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bdd"/><category scheme="http://www.blogger.com/atom/ns#" term="gem"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="rspec"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="tdd"/><title type='text'>Capybara i Devise - mock logowania</title><content type='html'>Piszemy request spec-i dla naszej aplikacji.&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1566810.js&quot;&gt;
&lt;/script&gt;
No i problem! Jak zalogować użytkownika?&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;Możemy użyć metody &quot;brute force&quot; ;) i po prostu wejść na stronę logowania i wypełnić formularz&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1566830.js&quot;&gt;
 
&lt;/script&gt;

Albo zrobić to sprytniej i użyć helperów Warden-a (na którym oparte jest Devise)
Utwórzmy plik /spec/support/devise.rb&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1566837.js&quot;&gt;
 
&lt;/script&gt;

Teraz w spec-ach możemy używać metody #sign_in&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1566845.js&quot;&gt;
 
&lt;/script&gt;

Takie rozwiązanie potrzebne jest tylko przy request spec-ach używających driver-a capybary, który obsługuje javascript (capybara-webkit, capybara-selenium). Przy spec-ach używających Rack driver wystarczy*:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1566864.js&quot;&gt;
 
&lt;/script&gt;
&lt;br /&gt;
&lt;small&gt;*Wydaje mi się jednak, że wersja używająca Warden-a jest szybsza. Ale możliwe że to tylko subiektywne wrażenie&lt;/small&gt;</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/8075217740789651693/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2012/01/capybara-i-devise-mock-logowania.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/8075217740789651693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/8075217740789651693'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2012/01/capybara-i-devise-mock-logowania.html' title='Capybara i Devise - mock logowania'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-2000540105721709681</id><published>2011-12-21T23:16:00.000+01:00</published><updated>2011-12-22T23:10:34.573+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jruby"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>#next na każdym znaku Stringa</title><content type='html'>Jakiś czas temu &lt;a href=&quot;http://rubyonrails.pl/forum/t4628-String-each_char-a-modyfikacja&quot;&gt;deliberowaliśmy&lt;/a&gt; ( :] ) &lt;a href=&quot;http://rubyonrails.pl/forum/t4628-String-each_char-a-modyfikacja&quot;&gt;na forum&lt;/a&gt;&amp;nbsp;jak najszybciej i najbardziej elegancko rozwiązać wywołanie &lt;i&gt;#next&lt;/i&gt; na każdym znaku Stringa. Jeżeli ktoś nie wie jak działa &lt;i&gt;String#next&lt;/i&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1507880.js&quot;&gt;
 
&lt;/script&gt;
&lt;br /&gt;
Niestety jeżeli wywołamy #next na ciągu znaków nie zadziała tak jakbyśmy chcieli:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1507929.js&quot;&gt;
 
&lt;/script&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br/&gt;
Można to rozwiązać na różne sposoby - od zmiany w miejscu poprzez &lt;i&gt;#next!&lt;/i&gt; w pętli, stworzenie nowego stringa w &lt;i&gt;#each_char&lt;/i&gt;, podzielenie na tablicę i wykonanie &lt;i&gt;#next&lt;/i&gt; na każdym elemencie a na końcu &lt;i&gt;#join&lt;/i&gt; na tablicy. Jedne rozwiązania są mniej lub bardziej eleganckie (oraz mniej lub bardziej wydajne). Najszybsze &amp;nbsp;(i jednocześnie najkrótsze) okazało się wykorzystanie wyrażeń regularnych. Poniżej benchmark kilku rozwiązań ze wspomnianego tematu*:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1507946.js&quot;&gt;
 
&lt;/script&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;
#each_char_next wykonuje się tylko dla n == 1000. Dla wyższych wykonywał się tragicznie długo.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Oraz wyniki:&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;MRI 1.9.2&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj1qTvqK3R8NNy88v532ucefsmFQEolK8ZVl2lcoo2dhFYH6lWUoDnqyb93XkvWNfG90Uos5nM31y3W_QOLCslA1NMxZM9Ie08HsBQ5paLNHWglHKNoJwpXmaHfXTS6Q8akvyrwsnhXXqM/s1600/Zrzut+ekranu+2011-12-21+o+19.09.11.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;376&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj1qTvqK3R8NNy88v532ucefsmFQEolK8ZVl2lcoo2dhFYH6lWUoDnqyb93XkvWNfG90Uos5nM31y3W_QOLCslA1NMxZM9Ie08HsBQ5paLNHWglHKNoJwpXmaHfXTS6Q8akvyrwsnhXXqM/s400/Zrzut+ekranu+2011-12-21+o+19.09.11.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;JRuby 1.6.5 (w trybie zgodności z&amp;nbsp;ruby-1.9.2-p136)&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnkWulpj8ArVW4tmG_x0xSjhEZCzrTllxpfXQFQw85bTFQTbEvDs1b6ecYJDG-k7bTNBxA-CSJOvpi7pYMkomphKI6jkt3oI5pv8AYJZ2aZBIYZk1_gWo7-7LXri_bapNyW4x87dZh4VNL/s1600/Zrzut+ekranu+2011-12-21+o+19.08.28.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;376&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnkWulpj8ArVW4tmG_x0xSjhEZCzrTllxpfXQFQw85bTFQTbEvDs1b6ecYJDG-k7bTNBxA-CSJOvpi7pYMkomphKI6jkt3oI5pv8AYJZ2aZBIYZk1_gWo7-7LXri_bapNyW4x87dZh4VNL/s400/Zrzut+ekranu+2011-12-21+o+19.08.28.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Różnica pomiędzy &lt;i&gt;#gsub&lt;/i&gt; a &lt;i&gt;#each_next!&lt;/i&gt; nie jest duża (aczkolwiek dla większych n była coraz wieksza), ale kod używający wyrażeń regularnych jest krótszy, czytelniejszy i bardziej RubyWay (brak zmiany stringa &lt;i&gt;&quot;w miejscu&quot;&lt;/i&gt; itd.). Mówiąc szczerze nie wiem czemu gsub jest aż tak szybki. Może ktoś wie?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* komputer użyty w benchmarku:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTbBWdPL7o7RA3M7tYFj_m9mUfKNBvNfPt2JRK_7Ux4wW2Y2GFIyxULU5nk4lE9A-uu-HJISBl9ZdZz4Z419pN8T5mchhHla6QaemFvs70r28jsEx7Fhm-K69QwZUUHaEYMybRWBm4VS4G/s1600/Zrzut+ekranu+2011-12-21+o+23.11.31.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;255&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTbBWdPL7o7RA3M7tYFj_m9mUfKNBvNfPt2JRK_7Ux4wW2Y2GFIyxULU5nk4lE9A-uu-HJISBl9ZdZz4Z419pN8T5mchhHla6QaemFvs70r28jsEx7Fhm-K69QwZUUHaEYMybRWBm4VS4G/s400/Zrzut+ekranu+2011-12-21+o+23.11.31.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Jak słusznie ktoś zauważył w komentarzach, należałoby dodać warming-up, żeby nie uruchamiać kodu &quot;na zimno&quot;. Poniżej nowy kod oraz wyniki:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1512039.js&quot;&gt;
 
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/2000540105721709681/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2011/12/next-na-kazdym-znaku-stringa.html#comment-form' title='Komentarze (8)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/2000540105721709681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/2000540105721709681'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2011/12/next-na-kazdym-znaku-stringa.html' title='#next na każdym znaku Stringa'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj1qTvqK3R8NNy88v532ucefsmFQEolK8ZVl2lcoo2dhFYH6lWUoDnqyb93XkvWNfG90Uos5nM31y3W_QOLCslA1NMxZM9Ie08HsBQ5paLNHWglHKNoJwpXmaHfXTS6Q8akvyrwsnhXXqM/s72-c/Zrzut+ekranu+2011-12-21+o+19.09.11.png" height="72" width="72"/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-7097115844284865913</id><published>2011-12-14T12:49:00.000+01:00</published><updated>2012-02-16T11:47:12.107+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gem"/><category scheme="http://www.blogger.com/atom/ns#" term="mongodb"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>Mongoid: polimorficzne embeds_one</title><content type='html'>&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Nie da się&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
Załóżmy, że nasza aplikacja ma model &lt;i&gt;MediaObject&lt;/i&gt;, który posiada tytuł, głosy itd. ale specyficzne informacje n/t obiektu (treść/link etc.) są w innym modelu (&lt;i&gt;Media::Text&lt;/i&gt;, &lt;i&gt;Media::Image&lt;/i&gt; etc.). Relacja oczywiście jeden-do-jeden. Jeżeli zrobimy to na zasadzie referenced assosiation, czyli relacje rodem z baz SQL, będziemy mieli zawsze &lt;a href=&quot;http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations&quot;&gt;n+1 zapytań&lt;/a&gt;. Mongoid co prawda obsługuje &lt;a href=&quot;http://mongoid.org/docs/querying/criteria.html#includes&quot;&gt;&lt;i&gt;eager loading&lt;/i&gt;&lt;/a&gt;, ale nie dla relacji polimorficznych. Co więc możemy zrobić?&lt;br /&gt;
&lt;br /&gt;
Tworzymy model &lt;b&gt;MediaObject&lt;/b&gt;:&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1476215.js&quot;&gt;
&lt;/script&gt;
&lt;br /&gt;
Oraz model &lt;b&gt;Media::Resource&lt;/b&gt; - po nim będą dziedziczyć wszystkie modele z modułu Media&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1476224.js&quot;&gt;
&lt;/script&gt;
&lt;br /&gt;
Teraz możemy dodać np. model &lt;b&gt;Media::Text&lt;/b&gt;&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1476231.js&quot;&gt;
&lt;/script&gt;
&lt;br /&gt;
&lt;b&gt;Użycie:&lt;/b&gt;&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1476236.js&quot;&gt;
&lt;/script&gt;
&lt;br /&gt;
&lt;br /&gt;
Żeby ułatwić sobie życie, &lt;a href=&quot;http://api.rubyonrails.org/classes/Module.html#method-i-delegate&quot;&gt;możemy wydelegować&lt;/a&gt; &lt;i&gt;#content&lt;/i&gt; do MediaObject&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1476253.js&quot;&gt;
&lt;/script&gt;
&lt;br /&gt;
Opcja &lt;i&gt;allow_nil&lt;/i&gt; pozwala trzymać w #content pustą wartość. W tym przypadku to bardzo ważne, bo nie wiemy czy napewno wszystkie modele Media będą miały taką metodę. Gdyby nie miały, bez tej opcji model zawrze rzucał by wyjątek. Teraz użycie wygląda tak:&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1476268.js&quot;&gt;
 
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/7097115844284865913/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2011/12/mongoid-polimorficzne-embedsone.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/7097115844284865913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/7097115844284865913'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2011/12/mongoid-polimorficzne-embedsone.html' title='Mongoid: polimorficzne embeds_one'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-6397495343242600998</id><published>2011-12-13T23:35:00.001+01:00</published><updated>2011-12-14T12:49:51.402+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>Bump to 1.9.3-p0</title><content type='html'>Dzisiaj &lt;i&gt;(dopiero)&lt;/i&gt; zrobiłem update Ruby do wersji 1.9.3-p0. Dużo &lt;a href=&quot;http://www.rubyinside.com/ruby-1-9-3-faster-loading-times-require-4927.html&quot;&gt;naczytałem się o poprawie startu appki, wykonywaniu testów itd.&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Sprawdźmy jak to wygląda w praktyce :)&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1474312.js&quot;&gt;
 
&lt;/script&gt;
&lt;br /&gt;
Po zainstalowaniu odpaliłem testy powstającej (a więc narazie niedużej) aplikacji Railsowej (Rails 3.1.3)&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Ruby 1.9.2&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGLaa2KwT4HVJk6v1p_7JRzpO3aMYraC442oFem4P26kUNZsg_9q8m7mrfDVQ51FH3VBDDcBJzCMNnNCleCDzLb7sLEv9aNaYDjD3EPdvtZ-ktzR8DKveU9JfNuOFRbzcNPMAsjf7jQ606/s1600/ruby192.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;305&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGLaa2KwT4HVJk6v1p_7JRzpO3aMYraC442oFem4P26kUNZsg_9q8m7mrfDVQ51FH3VBDDcBJzCMNnNCleCDzLb7sLEv9aNaYDjD3EPdvtZ-ktzR8DKveU9JfNuOFRbzcNPMAsjf7jQ606/s400/ruby192.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Ruby 1.9.3&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz9WIlBFPkwdlv907yMvC0WV10NW2F_4GHBCLXy3UFlM-ru34Fn-4H_t3RiXLusOIWtVRWIwWleXEaxce4b-aeq6okkILF9lLafJOSwXUFjfNTq3J2LLqzbtcGbD1FviG9YPwBan64vHTQ/s1600/ruby193.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;305&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz9WIlBFPkwdlv907yMvC0WV10NW2F_4GHBCLXy3UFlM-ru34Fn-4H_t3RiXLusOIWtVRWIwWleXEaxce4b-aeq6okkILF9lLafJOSwXUFjfNTq3J2LLqzbtcGbD1FviG9YPwBan64vHTQ/s400/ruby193.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;b&gt;Średnie czasy:&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Ruby 1.9.2 =~ 16.69&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Ruby 1.9.3 =~ &lt;b&gt;11.12(!)&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
A więc różnica ponad &lt;b&gt;5.5s&lt;/b&gt;. Całkiem sporo jak na &lt;b&gt;140 testów&lt;/b&gt;.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Update&#39;ować? &lt;a href=&quot;http://rubyonrails.pl/forum/t4654-1.9.3-p0&quot;&gt;Opinie są różne&lt;/a&gt;, ale wydaje mi się, że jeżeli ma się dobrze otestowaną aplikację można spróbować. Jeśli testy przejdą to po co tracić codziennie te kilka minut (5s * odpalanie_testów_miliard_razy)?&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/6397495343242600998/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2011/12/bump-to-193-p0.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/6397495343242600998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/6397495343242600998'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2011/12/bump-to-193-p0.html' title='Bump to 1.9.3-p0'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGLaa2KwT4HVJk6v1p_7JRzpO3aMYraC442oFem4P26kUNZsg_9q8m7mrfDVQ51FH3VBDDcBJzCMNnNCleCDzLb7sLEv9aNaYDjD3EPdvtZ-ktzR8DKveU9JfNuOFRbzcNPMAsjf7jQ606/s72-c/ruby192.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-1996901503166260370</id><published>2011-11-27T21:35:00.001+01:00</published><updated>2011-11-27T21:56:36.253+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>Ruby &amp; Ruby on Rails 101</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot;&gt;Ruby &amp;amp; Ruby on Rails 101. Krótka lista od czego zacząć** &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-small;&quot;&gt;(będzie uzupełniana)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Ruby&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
1. &lt;a href=&quot;http://tryruby.org/levels/1/challenges/0&quot;&gt;TryRuby&lt;/a&gt; (Ruby w 15 minut)&lt;br /&gt;
2. &lt;a href=&quot;http://www.amazon.com/Eloquent-Ruby-Addison-Wesley-Professional/dp/0321584104/ref=sr_1_1?ie=UTF8&amp;amp;qid=1322426258&amp;amp;sr=8-1&quot;&gt;Eloquent Ruby&lt;/a&gt; (moja &lt;a href=&quot;http://kzalewski.blogspot.com/2011/06/pisz-elokwentnie-w-rubym.html&quot;&gt;&quot;mini recenzja&quot;&lt;/a&gt;)&lt;br /&gt;
3. &lt;a href=&quot;http://www.amazon.com/Design-Patterns-Ruby-Russ-Olsen/dp/0321490452/ref=sr_1_2?ie=UTF8&amp;amp;qid=1322426258&amp;amp;sr=8-2&quot;&gt;Desing Patterns in Ruby&lt;/a&gt;&lt;br /&gt;
4. Klasyk, tzw &quot;Książka z Kilofem&quot; - &lt;a href=&quot;http://www.amazon.com/Programming-Ruby-1-9-Pragmatic-Programmers/dp/1934356085/ref=sr_1_11?ie=UTF8&amp;amp;qid=1322426258&amp;amp;sr=8-11&quot;&gt;Programming Ruby&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Ruby on Rails&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
1.&amp;nbsp;&lt;a href=&quot;http://railsforzombies.org/&quot;&gt;Rails for Zombies&lt;/a&gt;&lt;br /&gt;
2. &lt;a href=&quot;http://guides.rubyonrails.org/&quot;&gt;RailsGuides&lt;/a&gt;&lt;br /&gt;
3. &lt;a href=&quot;http://railscasts.com/&quot;&gt;RailsCasts&lt;/a&gt;&lt;br /&gt;
4. &lt;a href=&quot;http://ruby.railstutorial.org/ruby-on-rails-tutorial-book&quot;&gt;Ruby on Rails Tutorial&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Za książki o Rubym trzeba niestety zapłacić (ale pamiętajmy, że to inwestycja!), natomiast źródła o Railsach są w 100% darmowe (no, RailsCasty przynajmniej do niedawna były w 100% darmowe, teraz &lt;b&gt;część&lt;/b&gt; treści tam publikowanych jest płatna) i moim zdaniem wystarczające, aby zacząć pisać proste aplikacje. Książek do Railsów jest multum - począwszy od &lt;a href=&quot;http://www.amazon.com/Agile-Development-Rails-Pragmatic-Programmers/dp/1934356549/ref=sr_1_1?ie=UTF8&amp;amp;qid=1322426902&amp;amp;sr=8-1&quot;&gt;Agile&lt;/a&gt;, przez &lt;a href=&quot;http://www.amazon.com/Rails-3-Action-Ryan-Bigg/dp/1935182277/ref=sr_1_1?ie=UTF8&amp;amp;qid=1322426951&amp;amp;sr=8-1&quot;&gt;Rails 3 in Action&lt;/a&gt;&amp;nbsp;aż po &lt;a href=&quot;http://www.amazon.com/Rails-Way-Addison-Wesley-Professional-Ruby/dp/0321601661/ref=sr_1_2?ie=UTF8&amp;amp;qid=1322426951&amp;amp;sr=8-2&quot;&gt;Rails 3 Way&lt;/a&gt;&amp;nbsp;(ta ostatnia zdecydowanie dla zaawansowanych), ale moim zdaniem nie są one wymagane (tzn. da radę lepiej lub gorzej nauczyć się bez nich)&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-small;&quot;&gt;** głównie do publikacji na &lt;a href=&quot;http://forum.rubyonrails.pl/&quot;&gt;forum&lt;/a&gt; Ruby on Rails. Tam takie pytania (a co za tym idzie i odpowiedzi) padają bardzo często. Zamiast pisać to za każdym razem lepiej odesłać do linka ;)&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/1996901503166260370/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2011/11/ruby-ruby-on-rails-101.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/1996901503166260370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/1996901503166260370'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2011/11/ruby-ruby-on-rails-101.html' title='Ruby &amp; Ruby on Rails 101'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-5808383989778408546</id><published>2011-08-25T14:18:00.001+02:00</published><updated>2011-08-26T00:11:48.172+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="snippet"/><title type='text'>One of keys</title><content type='html'>&lt;b&gt;Edit:&lt;/b&gt; Okej, już wiem, która wersja jest najbardziej RubyWay :)&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://github.com/zlw/HashKeys&quot;&gt;HashKeys@github&lt;/a&gt;&amp;nbsp;- taki sobie o bajer z nudów. Użycie jest bajecznie proste - pobieramy hash_keys.rb (może zrobię z tego gema w wolnym czasie) a następnie:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1172123.js&quot;&gt;
 
&lt;/script&gt;&lt;br /&gt;
&lt;hr/&gt;&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1170527.js&quot;&gt;
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/5808383989778408546/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2011/08/one-of-keys.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/5808383989778408546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/5808383989778408546'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2011/08/one-of-keys.html' title='One of keys'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-7108324162203615454</id><published>2011-07-22T11:30:00.001+02:00</published><updated>2011-07-31T12:47:48.628+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="idea"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>Nie róbcie update&#39;u RubyMine do 3.2.2</title><content type='html'>&lt;b&gt;Update:&amp;nbsp;&lt;/b&gt;okazało się, że wystarczy wybrać z menu File -&amp;gt; Invalidate Caches... i w większości przypadków usuwa to błędy.&lt;br /&gt;
&lt;br /&gt;
&lt;strike&gt;Wczoraj pojawił się update (podobno bugfix :/) RubyMine do wersji 3.2.2. Zainstalowałem, uruchomiłem i tzw. &quot;dupa&quot;. Podpowiadanie składni &lt;b&gt;przestało działać&lt;/b&gt;, skok do definicji &lt;b&gt;przestał działać &lt;/b&gt;podgląd dokumentacji &lt;b&gt;przestał działać &lt;/b&gt;(pewnie więcej rzeczy nie działało, tyle udało mi się zauważyć zanim zrobiłem downgrade).&lt;b&gt; Wszystko się wysypało&lt;/b&gt;.&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;&lt;br /&gt;
&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;Wywaliłem w cholerę, zainstalowałem 3.2.1 (musiałem niestety wywalić całą konfigurację) i działa.&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;&lt;br /&gt;
&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;Radzę poczekać z aktualizacją na kolejną wersję (3.2.3?)&lt;/strike&gt;</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/7108324162203615454/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2011/07/nie-robcie-updateu-rubymine-do-322.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/7108324162203615454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/7108324162203615454'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2011/07/nie-robcie-updateu-rubymine-do-322.html' title='Nie róbcie update&#39;u RubyMine do 3.2.2'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-3810120342242213122</id><published>2011-07-11T19:53:00.000+02:00</published><updated>2011-07-11T19:53:58.206+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="fizyka"/><category scheme="http://www.blogger.com/atom/ns#" term="studia"/><title type='text'>Universitas Varsoviensis</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; font-size: 14px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&quot;Fizyka, stacjonarne pierwszego stopnia&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: verdana, helvetica, arial, sans-serif; font-size: 0.95em; margin-left: 30px;&quot;&gt;&lt;b&gt;Decyzja kwalifikacyjna:&lt;/b&gt;&amp;nbsp;&lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;kandydat zakwalifikowany&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd9fJGuplxJ_RXomKlhPtxnG-xqeY9rKSYWlqabRXoMU9gORAOksE8YBPrSmQRdre0wetTckFaUeAdmzBrkPhOm6D2uXo5otg7QYYbyVxddPY4Xfqj6cJfH0uZABTE2z0-6UiauuZBXPgN/s1600/string_theory.png&quot; imageanchor=&quot;1&quot; rel=&quot;lightbox&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;385&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd9fJGuplxJ_RXomKlhPtxnG-xqeY9rKSYWlqabRXoMU9gORAOksE8YBPrSmQRdre0wetTckFaUeAdmzBrkPhOm6D2uXo5otg7QYYbyVxddPY4Xfqj6cJfH0uZABTE2z0-6UiauuZBXPgN/s400/string_theory.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/3810120342242213122/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2011/07/universitas-varsoviensis.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/3810120342242213122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/3810120342242213122'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2011/07/universitas-varsoviensis.html' title='Universitas Varsoviensis'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd9fJGuplxJ_RXomKlhPtxnG-xqeY9rKSYWlqabRXoMU9gORAOksE8YBPrSmQRdre0wetTckFaUeAdmzBrkPhOm6D2uXo5otg7QYYbyVxddPY4Xfqj6cJfH0uZABTE2z0-6UiauuZBXPgN/s72-c/string_theory.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-6448774573414537767</id><published>2011-06-28T11:14:00.001+02:00</published><updated>2011-08-25T14:21:25.894+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>UPDATE Rails 3.1: respond_with i pusty json/xml/yaml przy update</title><content type='html'>Update postu&amp;nbsp;&lt;a href=&quot;http://kzalewski.blogspot.com/2011/03/rails3-respondwith-i-pusty-jsonxmlyaml.html&quot;&gt;Rails3: respond_with i pusty json/xml/yaml przy update&lt;/a&gt;&amp;nbsp;dla Rails 3.1. Plik application_responder.rb powinien w niej wyglądać tak:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1170531.js&quot;&gt; &lt;/script&gt;&lt;br /&gt;
Reszta pozostaje bez zmian.</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/6448774573414537767/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2011/06/update-rails-31-respondwith-i-pusty.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/6448774573414537767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/6448774573414537767'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2011/06/update-rails-31-respondwith-i-pusty.html' title='UPDATE Rails 3.1: respond_with i pusty json/xml/yaml przy update'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-2305883983779758573</id><published>2011-06-19T10:48:00.001+02:00</published><updated>2011-06-19T10:51:06.109+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="book"/><category scheme="http://www.blogger.com/atom/ns#" term="quote"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>Kod, który zawsze działa!</title><content type='html'>&lt;blockquote&gt;Remember, a &lt;b&gt;great way to avoid broken code is to have less of it&lt;/b&gt;. The code that you never write will work forever.&lt;/blockquote&gt;&lt;div style=&quot;text-align: right;&quot;&gt;- Russ Olsen, &lt;i&gt;&quot;Eloquent Ruby&quot;&lt;/i&gt; &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-small;&quot;&gt;(&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: verdana, arial, helvetica, sans-serif;&quot;&gt;Addison-Wesley Professional, 2011)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/2305883983779758573/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2011/06/kod-ktory-zawsze-dziaa.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/2305883983779758573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/2305883983779758573'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2011/06/kod-ktory-zawsze-dziaa.html' title='Kod, który zawsze działa!'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-7332157558569267983</id><published>2011-06-17T15:05:00.003+02:00</published><updated>2011-06-19T10:50:53.025+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="book"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>Pisz &quot;elokwentnie&quot; w Rubym</title><content type='html'>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZzCYpoHrhhLw-kW3ZiXjxKLGngGT9B2MI3lvfspOvOypad1dTm85Orn_3on8obFio5J2OAdFt9-UAFQyVsn-P2N-aBGWs89DNdpRmvcjYEMbvP51s24rzhIxYhojUrGKq56oR3piHRnwS/s1600/eloquent_ruby.jpg&quot; imageanchor=&quot;1&quot; rel=&quot;lightbox&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZzCYpoHrhhLw-kW3ZiXjxKLGngGT9B2MI3lvfspOvOypad1dTm85Orn_3on8obFio5J2OAdFt9-UAFQyVsn-P2N-aBGWs89DNdpRmvcjYEMbvP51s24rzhIxYhojUrGKq56oR3piHRnwS/s200/eloquent_ruby.jpg&quot; width=&quot;151&quot; /&gt;&lt;/a&gt;Nie trudno nauczyć się nowego języka programowania. W końcu wszędzie mamy te same if-y, pętle, klasy, funkcje. Trochę czasu zajmuje oczywiście poznanie biblioteki standardowej i pewnych konstrukcji typowych dla danego języka.&lt;br /&gt;
&lt;br /&gt;
Sztuką jednak poznać jest styl danego języka. Wiedzieć kiedy użyć danej konstrukcji, znać idiomy, zasady którymi rządzi się język.&lt;br /&gt;
&lt;blockquote&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 21px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;W innym wypadku jest duża szansa, że nie piszesz w Rubym, ale jakimś innym języku, który znałeś wcześniej. Wtedy trzeba sobie zadać pytanie: to po co udawać, że się pisze w Rubym?&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div style=&quot;text-align: right;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-small;&quot;&gt;- Radarek,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://radarek.jogger.pl/2008/04/14/you-can-write-fortran-in-any-language/&quot;&gt;&quot;You can write FORTRAN in any language&quot;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://radarek.jogger.pl/2008/04/14/you-can-write-fortran-in-any-language/&quot;&gt;&lt;/a&gt;&lt;/span&gt;Tutaj z pomocą przychodzi nam świetna książka - &quot;Eloquent Ruby&quot; autorstwa Russa Olsena&amp;nbsp;&lt;/div&gt;&lt;blockquote&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;It’s easy to write correct Ruby code, but to gain the fluency needed to write&amp;nbsp;&lt;i&gt;great&amp;nbsp;&lt;/i&gt;Ruby code, you must go beyond syntax and absorb the “Ruby way” of thinking and problem solving. In&amp;nbsp;&lt;b&gt;&lt;i&gt;Eloquent Ruby,&amp;nbsp;&lt;/i&gt;&lt;/b&gt;Russ Olsen helps you write Ruby like true Rubyists do–so you can leverage its immense, surprising power.&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Olsen draws on years of experience internalizing the Ruby culture and teaching Ruby to other programmers. He guides you to the “Ah Ha!” moments when it suddenly becomes clear why Ruby works the way it does, and how you can take advantage of this language’s elegance and expressiveness.&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;i&gt;&lt;b&gt;Eloquent Ruby&amp;nbsp;&lt;/b&gt;&lt;/i&gt;starts small, answering tactical questions focused on a single statement, method, test, or bug. You’ll learn how to write code that actually looks like Ruby (not Java or C#); why Ruby has so many control structures; how to use strings, expressions, and symbols; and what dynamic typing is really good for.&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Next, the book addresses bigger questions related to building methods and classes. You’ll discover why Ruby classes contain so many tiny methods, when to use operator overloading, and when to avoid it. Olsen explains how to write Ruby code that writes its own code–and why you’ll want to. He concludes with powerful project-level features and techniques ranging from gems to Domain Specific Languages.&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;A part of the renowned Addison-Wesley Professional Ruby Series,&amp;nbsp;&lt;b&gt;&lt;i&gt;Eloquent Ruby&amp;nbsp;&lt;/i&gt;&lt;/b&gt;will help you “put on your Ruby-colored glasses” and get results that make you a true believer.&lt;/span&gt;&lt;/blockquote&gt;Nie jest to książka, która wyjaśni nam podstawy programowania (co to jest zmienna, pętla czy obiekty). Autor zakłada, że znamy już trochę Ruby&#39;ego na tyle żeby pisać poprawne (działające) programy. Jednak nie na tyle dobrze żeby pisać je &lt;b&gt;&lt;u&gt;poprawnie&lt;/u&gt;&lt;/b&gt; (zgodne z duchem Ruby&#39;ego).&lt;br /&gt;
&lt;br /&gt;
W sumie dopiero w trakcie lektury Ruby mnie zafascynował. Do tej pory był tylko &quot;pośrednikiem&quot; pomiędzy mną a Railsami, a sam w sobie mnie nie porywał.&lt;br /&gt;
&lt;div align=&quot;left&quot; style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot; text-align=&quot;left&quot;&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div align=&quot;left&quot; style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot; text-align=&quot;left&quot;&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div align=&quot;left&quot; style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot; text-align=&quot;left&quot;&gt;&lt;/div&gt;&lt;div align=&quot;left&quot; style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot; text-align=&quot;left&quot;&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/7332157558569267983/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2011/06/pisz-elokwentnie-w-rubym.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/7332157558569267983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/7332157558569267983'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2011/06/pisz-elokwentnie-w-rubym.html' title='Pisz &quot;elokwentnie&quot; w Rubym'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZzCYpoHrhhLw-kW3ZiXjxKLGngGT9B2MI3lvfspOvOypad1dTm85Orn_3on8obFio5J2OAdFt9-UAFQyVsn-P2N-aBGWs89DNdpRmvcjYEMbvP51s24rzhIxYhojUrGKq56oR3piHRnwS/s72-c/eloquent_ruby.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-8338643042118389043</id><published>2011-06-16T19:10:00.007+02:00</published><updated>2011-12-03T00:33:46.259+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="idea"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>Lepsze wsparcie dla YARD w nowym RubyMine (3.2)</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDncrqJo21hd3ftf4sblYJkfZ0tkyR5dy749Rj6-SoxrvOv5psn8dUCV5eQ1v5fKGPSybIRZGiG4bE-b-ChHIrLVGXm03E2ati1ud2ApO0-1oYikp6jwPY4fi_14BUPotZx5rtNBo5n-sN/s1600/yard_rubymine32_2.png&quot; imageanchor=&quot;1&quot; rel=&quot;lightbox[RubyMine]&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;203&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDncrqJo21hd3ftf4sblYJkfZ0tkyR5dy749Rj6-SoxrvOv5psn8dUCV5eQ1v5fKGPSybIRZGiG4bE-b-ChHIrLVGXm03E2ati1ud2ApO0-1oYikp6jwPY4fi_14BUPotZx5rtNBo5n-sN/s320/yard_rubymine32_2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Dobrze jest pisać komentarze i dokumentować kod - to wie każdy. Nowoczesne IDE potrafią dzięki dobrze zbudowanej dokumentacji lepiej podpowiadać kod (potrzebne parametry i ich typ, typ zwróconej wartości itd.)&lt;br /&gt;
&lt;br /&gt;
Nowa wersja RubyMine (3.2) &lt;a href=&quot;http://blogs.jetbrains.com/ruby/2011/04/what%e2%80%99s-mining-advanced-yard-support/&quot;&gt;wprowadza lepszy support&lt;/a&gt; dla &lt;a href=&quot;http://yardoc.org/&quot;&gt;YARD&lt;/a&gt;. Sprawa jest generalnie prosta. Piszemy odpowiednio komentarze nad kodem używając &lt;a href=&quot;http://rubydoc.info/docs/yard/file/docs/Tags.md#List_of_Available_Tags&quot;&gt;składni&lt;/a&gt; YARD:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1170534.js&quot;/&gt;
 
&lt;/script&gt;&lt;br /&gt;
Dzięki czemu uzyskujemy lepsze podpowiedzi:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6ZPBsQSHbxESLtjs3_MEAPV3Qwe1G-dR8hpf30f6xbDGcmlNH2sdJ2125NV5gpCtENuf4CacKZJV82TM-MXdc2XX9eWo4LRSDcnLd_yqtwgn_X3z4NVS3bJom0ukgEjyatNULoCTlN1YL/s1600/yard_rubymine32.png&quot; imageanchor=&quot;1&quot; rel=&quot;lightbox[RubyMine]&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;252&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6ZPBsQSHbxESLtjs3_MEAPV3Qwe1G-dR8hpf30f6xbDGcmlNH2sdJ2125NV5gpCtENuf4CacKZJV82TM-MXdc2XX9eWo4LRSDcnLd_yqtwgn_X3z4NVS3bJom0ukgEjyatNULoCTlN1YL/s400/yard_rubymine32.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/8338643042118389043/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2011/06/lepsze-wsparcie-dla-yard-w-nowym.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/8338643042118389043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/8338643042118389043'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2011/06/lepsze-wsparcie-dla-yard-w-nowym.html' title='Lepsze wsparcie dla YARD w nowym RubyMine (3.2)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDncrqJo21hd3ftf4sblYJkfZ0tkyR5dy749Rj6-SoxrvOv5psn8dUCV5eQ1v5fKGPSybIRZGiG4bE-b-ChHIrLVGXm03E2ati1ud2ApO0-1oYikp6jwPY4fi_14BUPotZx5rtNBo5n-sN/s72-c/yard_rubymine32_2.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-4312215522639325198</id><published>2011-06-13T17:26:00.003+02:00</published><updated>2011-08-25T14:26:20.436+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="django"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>Template inheritance w Rails 3.1 - DRY niczym Briana Banks</title><content type='html'>Wielkimi krokami &lt;a href=&quot;http://weblog.rubyonrails.org/2011/5/22/rails-3-1-release-candidate&quot;&gt;zbliża się&lt;/a&gt; wersja 3.1 frameworka Ruby on Rails, a wraz z nią wiele ciekawych ficzerów jak na przykład&amp;nbsp;&lt;a href=&quot;http://edgerails.info/articles/what-s-new-in-edge-rails/2011/05/06/reversible-migrations&quot;&gt;reversible migrations&lt;/a&gt;&amp;nbsp;czy &lt;a href=&quot;http://piotrsarnacki.com/2010/09/14/mountable-engines/&quot;&gt;mountable&lt;/a&gt; &lt;a href=&quot;https://github.com/rails/rails/blob/master/railties/lib/rails/engine.rb&quot;&gt;engines&lt;/a&gt;. Jako genialny wynalazek zostało również wprowadzone template inheritance:&lt;br /&gt;
&lt;blockquote&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 23px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;As the name implies, inherited templates make template lookup follow the controller inheritance heirarchy if it can’t find a template for the current controller.&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;Najłatwiej będzie to opisać fragmentami kodu.&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1170537.js&quot;&gt; &lt;/script&gt;&lt;br /&gt;
Fragment kodu, który odpowiada za menu możemy przenieść do katalogu &lt;u&gt;app/views/application&lt;/u&gt;, ponieważ każdy kontroler dziedziczy po &lt;u&gt;ApplicationController&lt;/u&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1170539.js&quot;&gt; &lt;/script&gt;&lt;br /&gt;
Do tej pory wszystko wygląda wspaniale. Co jednak, jeżeli chcielibyśmy dodać jedną pozycję w menu np. dla &lt;u&gt;NewsController&lt;/u&gt;? Nic prostrzego. Tworzymy &lt;u&gt;app/views/news/_menu.html.erb&lt;/u&gt; w którym dodajemy link. Wspaniale! Co jednak, jeżeli mamy bardzo rozbudowane menu a dla jednego kontrolera chcemy dodać 1 (JEDNĄ!) pozycję? Tak! Musimy skopiować cały plik i dodać tylko ten 1 link. &lt;b&gt;Don&#39;t Repeat Yourself pełną gębą&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
System szablonów (nie mówię o języku szablonów, ale bardziej o tym jak działa mechanizm ich ładowania, przekazywania do nich zmiennych itd.) w Rails nigdy mnie nie powalał. Dużo bardziej podoba mi się ten znany z Django. Mamy w nim tzw. bloki. Przenosząc ten mechanizm na nasz przykład mielibyśmy blok menu w głównym szablonie (&lt;u&gt;application.html.erb&lt;/u&gt;) i bloki rozszerzające go w poszczególnych szablonach. Wyglądałoby to mniej więcej tak:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1170540.js&quot;&gt; &lt;/script&gt;&lt;br /&gt;
&lt;b&gt;Prawda że wygodniej, schludniej i bardziej DRY?&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit; font-size: x-small;&quot;&gt;*&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 19px;&quot;&gt;&lt;b&gt;Briana Banks&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 19px;&quot;&gt;&amp;nbsp;(ur. 21 maja 1978 w Monachium) - niemiecka aktorka występująca w filmach&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 19px;&quot;&gt;pornograficznych&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 19px;&quot;&gt;. [&lt;a href=&quot;http://pl.wikipedia.org/wiki/Briana_Banks&quot;&gt;wikipedia.org&lt;/a&gt;] [która zdecydowanie nie jest dry (sucha) - autor]&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/4312215522639325198/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2011/06/template-inheritance-w-rails-31-dry-jak.html#comment-form' title='Komentarze (3)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/4312215522639325198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/4312215522639325198'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2011/06/template-inheritance-w-rails-31-dry-jak.html' title='Template inheritance w Rails 3.1 - DRY niczym Briana Banks'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-5577832475193215641</id><published>2011-06-08T01:11:00.002+02:00</published><updated>2011-06-19T10:49:40.805+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="clojure"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="lisp"/><title type='text'>Java-Szkoły i kurs 6.001 (MIT)</title><content type='html'>Jakiś czas temu przeczytałem wpis Joel&#39;a Spolsky&#39;ego n/t &quot;Java-Szkół&quot;. Tych, którzy chcą zapoznać się z wpisem odsyłam do &lt;a href=&quot;http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html&quot;&gt;oryginału&lt;/a&gt;&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-small;&quot;&gt;[&lt;a href=&quot;http://www.devblogi.pl/2009/09/niebezpieczne-java-szkoy.html&quot;&gt;polskie tłumaczenie&lt;/a&gt;]&lt;/span&gt;. Blogosfera zawrzała - komentarze pod każdym z wpisów, wpisy typu &lt;a href=&quot;http://thinkingdigitally.com/archive/what-if-i-went-to-a-java-school-joel/&quot;&gt;&lt;i&gt;&quot;What if I went to a Java school, Joel?&quot;&lt;/i&gt;&lt;/a&gt;. Ale nie o tym wpis, nie będę (przynajmniej teraz) polemizował ze zdaniem Spolsky&#39;ego.&lt;br /&gt;
&lt;br /&gt;
Joel wychwala za to kurs &lt;b&gt;6.001 Structure and Interpretation of Computer Programs&lt;/b&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;This course introduces students to the principles of computation. Upon completion of 6.001, students should be able to explain and apply the basic methods from programming languages to analyze computational systems, and to generate computational solutions to abstract problems. Substantial weekly programming assignments are an integral part of the course. This course is worth 4 Engineering Design Points.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijp8YEVxFL0ldoUzd9aBLBR5_GA4kvJQ-N7pNez_DEolY4x3W9nsKmA6ZisNOxnJBcMBcpqdkV4b9wXKlfcTA3TAotfbomASs1y8JxGPT9Kthg6eY5bJUbiJZLUXFw_SrHX0n7PYsTvCfl/s1600/halpicture.jpg&quot; imageanchor=&quot;1&quot; rel=&quot;lightbox&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;160&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijp8YEVxFL0ldoUzd9aBLBR5_GA4kvJQ-N7pNez_DEolY4x3W9nsKmA6ZisNOxnJBcMBcpqdkV4b9wXKlfcTA3TAotfbomASs1y8JxGPT9Kthg6eY5bJUbiJZLUXFw_SrHX0n7PYsTvCfl/s200/halpicture.jpg&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Kurs chociaż bardzo stary (pierwsze wydanie podręcznika - 1985) jest bardzo ciekawy i warty obejrzenia. Tak, obejrzenia. Dostępne są nagrania wideo całego kursu prowadzonego przez twórców języka &lt;a href=&quot;http://en.wikipedia.org/wiki/Scheme_(programming_language)&quot;&gt;Scheme&lt;/a&gt; &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;-&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 19px;&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Guy_L._Steele&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: initial; background-origin: initial;&quot;&gt;Guy&#39;a L. Steele&lt;/span&gt;&#39;a&lt;/a&gt; i&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 19px;&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Gerald_Jay_Sussman&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: initial; background-origin: initial;&quot;&gt;Gerald&#39;a Jay Sussman&lt;/span&gt;&#39;a&lt;/a&gt;. Co prawda sam Scheme nie jest dzisiaj szeroko używany, ale coraz popularniejszy staje się inny dialekt Lisp-a - &lt;a href=&quot;http://clojure.org/&quot;&gt;Clojure&lt;/a&gt;&amp;nbsp;(sam dzięki 6.001 zainteresowałem się Lispem i Clojure właśnie).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 19px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 19px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 19px;&quot;&gt;&lt;embed allowfullscreen=&quot;true&quot; allowscriptaccess=&quot;always&quot; flashvars=&quot;file=http://www.youtube.com/v/2Op3QLzMgSY&quot; height=&quot;325&quot; id=&quot;player1&quot; name=&quot;player1&quot; src=&quot;http://ocw.mit.edu/jw-player-free/player.swf&quot; width=&quot;530&quot;&gt;&lt;/embed&gt;&lt;/span&gt;&lt;/center&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large; line-height: 19px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large; line-height: 19px;&quot;&gt;Download:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 19px;&quot;&gt;Nagrania wideo dostępne są &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 19px;&quot;&gt;&lt;a href=&quot;http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures/&quot;&gt;na stronie MIT&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 19px;&quot;&gt;&amp;nbsp;[flash]&amp;nbsp;oraz&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 19px;&quot;&gt;&lt;a href=&quot;http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/&quot;&gt;tutaj&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 19px;&quot;&gt; [mpeg/divx do bezpośredniego pobrania lub poprzez torrent].&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 19px;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 19px;&quot;&gt;&lt;a href=&quot;http://mitpress.mit.edu/sicp/full-text/book/book.html&quot;&gt;Podręcznik w wersji on-line&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/5577832475193215641/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2011/06/java-szkoy-i-kurs-6001-mit.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/5577832475193215641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/5577832475193215641'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2011/06/java-szkoy-i-kurs-6001-mit.html' title='Java-Szkoły i kurs 6.001 (MIT)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijp8YEVxFL0ldoUzd9aBLBR5_GA4kvJQ-N7pNez_DEolY4x3W9nsKmA6ZisNOxnJBcMBcpqdkV4b9wXKlfcTA3TAotfbomASs1y8JxGPT9Kthg6eY5bJUbiJZLUXFw_SrHX0n7PYsTvCfl/s72-c/halpicture.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4468421024394811861.post-2584277611865162422</id><published>2011-06-06T19:38:00.003+02:00</published><updated>2011-06-19T10:50:00.746+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="fedora"/><category scheme="http://www.blogger.com/atom/ns#" term="gnome"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><title type='text'>GNOME3 i GNOME Shell</title><content type='html'>Dawno temu, &lt;a href=&quot;http://kzalewski.blogspot.com/2010/03/gnome-shell.html&quot;&gt;pisałem o GNOME Shell&lt;/a&gt;. Od jakiegoś czasu używam Fedory 15 z GNOME3 i powłoką GNOME Shell.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPvKjUqAIWDO0nrwT1GQrzrq8cLbpSleNcMUlQVI1oz-L4CgzCxK9jqMja65YpOsyaG2DpNcjz0Hk2UiwfdTJYPbt9ErFA1MAsiLgyipt-hvZ72dfsXAtNVcNaVLMMyGEJHk14SeJaaYIX/s1600/shell1.png&quot; imageanchor=&quot;1&quot; rel=&quot;lightbox[gnome3]&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;284&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPvKjUqAIWDO0nrwT1GQrzrq8cLbpSleNcMUlQVI1oz-L4CgzCxK9jqMja65YpOsyaG2DpNcjz0Hk2UiwfdTJYPbt9ErFA1MAsiLgyipt-hvZ72dfsXAtNVcNaVLMMyGEJHk14SeJaaYIX/s640/shell1.png&quot; width=&quot;512&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Od opisywanej przeze mnie wersji (była to jedna z pierwszych wersji testowych) zmieniło się sporo. Przeprojektowano zupełnie ekran &lt;b&gt;Activities&lt;/b&gt; (w wersji polskiej - Podgląd) - wybór aplikacji, widok okien i przemieszczanie ich pomiędzy pulpitami, dodano coś na kształt docka (pasek z ulubionymi aplikacjami oraz uruchomionymi programami):&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiozwdYE8RXPXxSd0RyjN0t1LOtrmDzDcHn8Si5RHEg0_goaCWdSnlZvX1ZaQbDVZAHKVdh1-uK07d4-chuFytYltHGWNeFkO1EhHIrviPNnWj7AzsNm1qJDUvFTl5-swQbVr1eypR4U6BJ/s1600/shell2.png&quot; imageanchor=&quot;1&quot; rel=&quot;lightbox[gnome3]&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;179&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiozwdYE8RXPXxSd0RyjN0t1LOtrmDzDcHn8Si5RHEg0_goaCWdSnlZvX1ZaQbDVZAHKVdh1-uK07d4-chuFytYltHGWNeFkO1EhHIrviPNnWj7AzsNm1qJDUvFTl5-swQbVr1eypR4U6BJ/s320/shell2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Przeprojektowano mechanizm wielu pulpitów. Ich liczba zmienia się dynamicznie - zawsze mamy 1 pusty pulpit. Gdy przeniesiemy na niego którąś z aplikacji od razu pojawia się nowy, pusty ekran.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD9yJaH94I5bGkQrD4VjYldt2I5-U_Uw4TuQGWBR2Td339SU80SEdWtdn6VxxpqxlLkDo9Qn0FqxoaCU5gVytqB914HkxCZbqRTUlNiSn2-snne1qmlv7aNa_d_9yKKw5nSZhBZH8YHvlY/s1600/shell3.png&quot; imageanchor=&quot;1&quot; rel=&quot;lightbox[gnome3]&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;179&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD9yJaH94I5bGkQrD4VjYldt2I5-U_Uw4TuQGWBR2Td339SU80SEdWtdn6VxxpqxlLkDo9Qn0FqxoaCU5gVytqB914HkxCZbqRTUlNiSn2-snne1qmlv7aNa_d_9yKKw5nSZhBZH8YHvlY/s320/shell3.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
Do Shell&#39;a powstało już&amp;nbsp;&lt;a href=&quot;http://www.webupd8.org/search/label/gnome%20shell%20extensions?max-results=10&quot;&gt;wiele rozszerzeń&lt;/a&gt;. Jedno z nich to dock, który znajduje się po prawej stronie ekranu&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;GNOME3&lt;/span&gt;&lt;br /&gt;
GNOME3 to oczywiście nie tylko Shell - to także nowe wersje programów (jak np. Nautilus), nowy framework ustawień, gtk+ 3.0 itd. Więcej o GNOME3 na stronie projektu -&amp;nbsp;&lt;a href=&quot;http://www.gnome.org/gnome-3/&quot;&gt;http://www.gnome.org/gnome-3/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Wiele osób narzeka na GNOME Shell. Jego używanie wymaga zmiany niektórych przyzwyczajeń i zachowań. Taka jednak cena za rewolucyjne zmiany :) Mimo wad i niedoróbek (zwyczajne problemy wieku dziecięcego, które mają zniknąć w kolejnej wersji 3.2 planowanej na jesień tego roku) jest to środowisko używalne i wygodne. Zmniejsza też znacząco przepaść jaka dzieliła wygląd Linuksa i Mac OS X :)</content><link rel='replies' type='application/atom+xml' href='http://kzalewski.blogspot.com/feeds/2584277611865162422/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://kzalewski.blogspot.com/2011/06/gnome3-i-gnome-shell.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/2584277611865162422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4468421024394811861/posts/default/2584277611865162422'/><link rel='alternate' type='text/html' href='http://kzalewski.blogspot.com/2011/06/gnome3-i-gnome-shell.html' title='GNOME3 i GNOME Shell'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPvKjUqAIWDO0nrwT1GQrzrq8cLbpSleNcMUlQVI1oz-L4CgzCxK9jqMja65YpOsyaG2DpNcjz0Hk2UiwfdTJYPbt9ErFA1MAsiLgyipt-hvZ72dfsXAtNVcNaVLMMyGEJHk14SeJaaYIX/s72-c/shell1.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>