<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Alt + Sabon</title>
	
	<link>http://blog.altsabon.com</link>
	<description>Freelancing, startupy i Ruby on Rails</description>
	<pubDate>Thu, 09 Oct 2008 01:31:37 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Sabon" type="application/rss+xml" /><item>
		<title>Boolean w Ruby on Rails czyli czy chciałbyś zaoszczędzić 2 dni swego życia?</title>
		<link>http://feeds.feedburner.com/~r/Sabon/~3/415310332/</link>
		<comments>http://blog.altsabon.com/boolean-w-ruby-on-rails-czyli-czy-chcialbys-zaoszczedzic-2-dni-swego-zycia/#comments</comments>
		<pubDate>Thu, 09 Oct 2008 01:31:37 +0000</pubDate>
		<dc:creator>Sabon</dc:creator>
		
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://blog.altsabon.com/?p=44</guid>
		<description><![CDATA[Chciałbym, żeby mi ktoś zaoszczędził 2 dni z mojego życia. Jeden z weekendów mógłby być o 2 dni dłuższy. Wyjazd na deskę mógłby trwać tyle ile by się chciało. Byłoby więcej czasu na czytanie książek, spędzanie czasu z bliskimi itp.
Ten &#8220;ktoś&#8221; jednak postanowił mi te 2 dni zabrać zamiast sprezentować&#8230; A tym &#8220;kimś&#8221; jest sposób [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="alignright size-full wp-image-45" title="boolean" src="http://blog.altsabon.com/wp-content/uploads/2008/10/boolean.jpg" border="0" alt="boolean" width="200" height="178" align="right" />Chciałbym, żeby mi ktoś zaoszczędził 2 dni z mojego życia. Jeden z weekendów mógłby być o 2 dni dłuższy. Wyjazd na deskę mógłby trwać tyle ile by się chciało. Byłoby więcej czasu na czytanie książek, spędzanie czasu z bliskimi itp.<br />
Ten &#8220;ktoś&#8221; jednak postanowił mi te 2 dni zabrać zamiast sprezentować&#8230; A tym &#8220;kimś&#8221; jest sposób interpretacji kolumny <code>boolean</code> przez Ruby on Rails.</p>
<p style="text-align: justify;">Nie ma co jednak wybiegać do przodu, więc wszystko po kolei.</p>
<p style="text-align: justify;">We wszystkich swoich dotychczasowych projektach używałem bazy MySQL, więc na tym będę bazował swoje rozważania.</p>
<p style="text-align: justify;">Tworzę więc sobie model Person i daję mu atrybut friend, który może być true albo false. W migracjach, zgodnie z konwencją Rails, w modelu <code>Person</code> przy polu <code>:friend</code> daję typ <code>:boolean</code>. Wszystko na razie idzie zgodnie z planem. Po wykonaniu <code>rake:db</code> pojawia się tabela &#8220;people&#8221; i w niej pole &#8216;friend&#8217; ma typ <code>tinyint(1)</code>. Tu w sumie też wszystko idzie z planem, gdyż kolumna o typie <code>tinyint(1)</code> przez ActiveRecord rozpoznawana jest jako &#8216;boolean&#8217;.</p>
<p style="text-align: justify;">MySQL ciągle się nie dopracował prawdziwego typu &#8216;boolean&#8217;, więc nawet w natywnym MySQL gdy się tworzy kolumnę typu <code>BOOLEAN</code>, to jest to równoznaczne ze stworzeniem kolumny o typie <code>tinyint(1)</code>. Wartość zerowa jest traktowana jako false, a każda inna wartość jako true. (<a href="http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html">MySQL 5.0 Reference Manual - Overview of Numeric Types</a>)</p>
<p style="text-align: justify;">No i gdybym nie był &#8220;sprytniejszy&#8221;, niż trzeba, albo może gdybym kodował to nie będąc w pełni sił umysłowych, to nie byłoby żadnego problemu. Będąc jednak pomysłowym Dobromirem spojrzałem w strukturę bazy danych, zauważyłem typ <code>tinyint(1)</code>, doszedłem do wniosku, że ani <code>true</code> ani <code>false</code> w <code>tinyint</code> się nie zmieści, więc będą tam tylko zera lub jedynki. I dalej szczęśliwie wrzucałem sobie do kodu tu i ówdzie takie oto kwiatki:</p>
<pre name="code" class="ruby">

if Person.friend == 1 ...
if Person.friend == 0 ...
</pre>
<p style="text-align: justify;">W kodzie miałem oczywiście zmienne, a nie nazwy modeli, ale podaję dla zobrazowania. W każdym bądź razie te kawałki aż prosiły się o poprawienie, ale nów umysłowy (antonim pełni) był silniejszy i z zadowoleniem pisałem sobie dalej.<br />
Można łatwo sobie dopowiedzieć czym to się skończyło. Absolutnie bezsensownymi dwoma dniami, gdzie aplikacja &#8220;dziwnie się zachowywała&#8221;.</p>
<p style="text-align: justify;">Jeśli więc ktoś kiedyś również będzie pisał kod nie wkładając w niego za wiele myśli (z braku sił czy też jakiegokolwiek innego powodu), to chciałbym, żeby poniższe przykłady zapadły dostatecznie w pamięć, żeby napisać to dobrze. Jak się na to patrzy, to wszystko to powinno być proste i logiczne, ale rzeczy proste i logiczne daleko nie zawsze są proste.</p>
<p style="text-align: justify;">Znajdujemy więc sobie dwie osoby, jedną która jest moim przyjacielem, a druga - niekoniecznie.</p>
<pre name="code" class="ruby">

t = Person.find(:first, :conditions =&gt; [&quot;...&quot;])     # atrybut friend o typie tinyint(1) ma wartość 1
f = Person.find(:first, :conditions =&gt; [&quot;...&quot;])     # atrybut friend o typie tinyint(1) ma wartość 0
</pre>
<p>Sprawdzamy czy te osoby naprawdę są przyjaciółmi czy też nie.</p>
<pre name="code" class="ruby">

t.friend    # true
f.friend    # false

t.friend?    # true
f.friend?    # false
</pre>
<p style="text-align: justify;">I właśnie sposób powyższy (najlepiej ze znakiem zapytania, bo jest bardziej czytelny i jasny w przekazie) jest prawidłowym i najlepszym sposobem na testowanie wartości boolean w Rails. Prawda, że proste?<br />
Warto jednak rozpatrzyć jeszcze kilka przykładów, które czasami dają nam rezultaty, których oczekujemy, a czasem nas zaskakują. I to w niemiły sposób.</p>
<pre name="code" class="ruby">

t.friend.blank?     # false
f.friend.blank?     # true

t.friend.empty?     # NoMethodError: undefined method `empty?&#039; for true:TrueClass

f.friend.empty?     # NoMethodError: undefined method `empty?&#039; for false:FalseClass
</pre>
<p style="text-align: justify;">Tutaj <code>blank?</code> działa, natomiast <code>empty?</code> odmawia współpracy. Jednak mimo iż <code>blank?</code> działa poprawnie, to jest to raczej niefortunny i nieklarowny zapis, więc lepiej go unikać.<br />
Poniżej zaś to, co próbowałem robić w swoim kodzie. Dziecinny błąd. <strong>Children, don&#8217;t try this at home!</strong> :)</p>
<pre name="code" class="ruby">

t.friend == 0     # false
t.friend == 1     # false
t.friend == &quot;0&quot;   # false
t.friend == &quot;1&quot;   # false

t.friend.to_i   # NoMethodError: undefined method `to_i&#039; for true:TrueClass
f.friend.to_i   # NoMethodError: undefined method `to_i&#039; for false:FalseClass
</pre>
<p style="text-align: justify;">Jak widać ani porównywanie tego do wielkości <code>integer</code>, ani <code>string</code> nie daje oczekiwanych rezultatów. Nawet próba konwersji wyrzuca błąd. Wniosek: nigdy nie porównywać boolean do wielkości liczbowych (i konkretnie do zer i jedynek).<br />
Można porównywać je do wartości <code>true/false</code> (ale koniecznie nie jako <code>string</code>), ale to też jest mało eleganckie.</p>
<pre name="code" class="ruby">

t.friend == true  # true
f.friend == true  # false

t.friend == &quot;true&quot;    # false
f.friend == &quot;true&quot;    # false
t.friend == &quot;false&quot;   # false
f.friend == &quot;false&quot;   # false

t.friend.to_s   # &quot;true&quot;
f.friend.to_s   # &quot;false&quot;
</pre>
<p style="text-align: justify;">Jeśli więc ktoś kiedyś dzięki powyższemu użyje formy prawidłowej zamiast niepoprawnej i zaoszczędzi przynajmniej kilka godzin (nie mówiąc już o dwóch dniach), to&#8230; przynajmniej nie będzie musiał pisać postów rozpoczynających się słowami &#8220;Chciałbym, żeby mi ktoś zaoszczędził 2 dni z mojego życia&#8221;.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/Sabon?a=lJVwM"><img src="http://feeds.feedburner.com/~f/Sabon?i=lJVwM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/Sabon?a=tQ6jm"><img src="http://feeds.feedburner.com/~f/Sabon?i=tQ6jm" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Sabon/~4/415310332" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.altsabon.com/boolean-w-ruby-on-rails-czyli-czy-chcialbys-zaoszczedzic-2-dni-swego-zycia/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.altsabon.com/boolean-w-ruby-on-rails-czyli-czy-chcialbys-zaoszczedzic-2-dni-swego-zycia/</feedburner:origLink></item>
		<item>
		<title>Ruby on Rails: szlachetny kamień na szynach czy duchowny w pociągu?</title>
		<link>http://feeds.feedburner.com/~r/Sabon/~3/410659988/</link>
		<comments>http://blog.altsabon.com/ruby-on-rails-szlachetny-kamien-na-szynach-czy-duchowny-w-pociagu/#comments</comments>
		<pubDate>Fri, 03 Oct 2008 22:48:21 +0000</pubDate>
		<dc:creator>Sabon</dc:creator>
		
		<category><![CDATA[Ogólne]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://blog.altsabon.com/?p=42</guid>
		<description><![CDATA[Pewnego słonecznego dnia szedł sobie stary i mądry rabin przez pola i łąki. Rozmyślał nad Torą, nad niebezpiecznie rozluźniającymi się obyczajami w swojej gminie (młodzi już nie kłaniają się starszym tak nisko jak drzewiej bywało) i nad nadmiernie wzrastającym autorytetem rabina z sąsiedniej gminy za rzeką. Będąc dotychczas najbardziej szanowaną osobistością w całej okolicy między [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="alignright size-full wp-image-43" title="ruby-rabbi" src="http://blog.altsabon.com/wp-content/uploads/2008/10/ruby-rabbi-small.png" alt="Ruby vs Rabbi" width="250" height="278" align="right" border="0"/>Pewnego słonecznego dnia szedł sobie stary i mądry rabin przez pola i łąki. Rozmyślał nad Torą, nad niebezpiecznie rozluźniającymi się obyczajami w swojej gminie (młodzi już nie kłaniają się starszym tak nisko jak drzewiej bywało) i nad nadmiernie wzrastającym autorytetem rabina z sąsiedniej gminy za rzeką. Będąc dotychczas najbardziej szanowaną osobistością w całej okolicy między rzeką a tą miejscowością, dokąd czasem się zapuszczał dokonać bardziej nietypowych zakupów, niż chleb czy mięsiwo (np. kałamarze czy płótno), oczywistością było, że rosnący u boku autorytet jest co najmniej powodem do niespokojnego snu w nocy i podczas siesty. Idąc więc przez łąkę i bezwiednie muskając dłonią czubki wyższych traw, podświadomie poszukiwał &#8220;znaku&#8221;, który by go wewnętrznie umocnił w przekonaniu, że jego pozycja jest niezagrożona i że nieoczekiwane drgawki nie będą go wyrywały z błogiego stanu siesty.<br />
Tak niepostrzeżenie doszedł aż do nasypu, który biegł wzdłuż rzeki. W swym zamyśleniu i trosce zabrnął dalej, niż zwykle. Wspiął się więc po nasypie (a trzeba zaznaczyć, że nie był to nasyp zwykły, lecz kolejowy) i wzdłuż tego nasypu podążył powoli z powrotem w kierunku swej siedziby.<br />
Aż tu raptem z zadumy wyrwał go nieoczekiwany czerwony blask, strzelający wprost spod nóg. Ku jego bezgranicznemu zdumieniu był to&#8230; dorodnej wielkości rubin leżący wprost na torach kolejowych.<br />
- Cóż za wspaniały rubin! - wykrzyknął rabin, podniósł go z torów i już ze spokojnym umysłem i uśmiechem na twarzy dziarsko potruchtał w kierunku unoszącego się dymu, zwiastującego rychły obiad.</p>
<p style="text-align: justify;">A jaki jest morał tej historii?<br />
Otóż apeluję szczerze, żebyśmy nie zamieniali ról w tej historii i nie pozwalali rubinowi znaleźć rabina na torach, tylko pozostawili to w takiej wersji jak powyżej, nawet nie zważając na fakt, że nie jest to najwybitniejsza przypowieść tego roku.</p>
<p>Jak bowiem brzmiałoby kluczowe zdanie przypowieści w języku angielskim?<br />
- What a nice ruby! - exclaimed rabbi, took it off the rails and merrily trotted home. (tłum. wolne)</p>
<p>Ze szczegółami:<br />
<strong>[hwuht] [a] [nahys] [roo-bee]! - [ik-skleymd] [rab-ee]</strong><br />
Źródło: <a href="http://dictionary.reference.com"><strong>Dictionary.com Unabridged (v 1.1)</strong></a></p>
<p><strong>[roo-bee]</strong> (pol. rubi) - Rubin<br />
<strong>[rab-ee]</strong> (pol. rabi) - Rabin</p>
<p>Jeśli więc jesteśmy w tej branży, programujemy w tym języku, inwestujemy w projekty związane z tą technologią czy wręcz posiadamy firmy, które się zajmują programowaniem m.in. w tym języku, to ja bardzo proszę&#8230; nie mieszajmy w to religii i duchownych :)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/Sabon?a=mIzIM"><img src="http://feeds.feedburner.com/~f/Sabon?i=mIzIM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/Sabon?a=e3pLm"><img src="http://feeds.feedburner.com/~f/Sabon?i=e3pLm" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Sabon/~4/410659988" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.altsabon.com/ruby-on-rails-szlachetny-kamien-na-szynach-czy-duchowny-w-pociagu/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.altsabon.com/ruby-on-rails-szlachetny-kamien-na-szynach-czy-duchowny-w-pociagu/</feedburner:origLink></item>
		<item>
		<title>Ruby on Rails :include i ‘eager loading’ w akcji</title>
		<link>http://feeds.feedburner.com/~r/Sabon/~3/315385335/</link>
		<comments>http://blog.altsabon.com/ruby-on-rails-include-i-eager-loading-w-akcji/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 12:22:21 +0000</pubDate>
		<dc:creator>Sabon</dc:creator>
		
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://blog.altsabon.com/ruby-on-rails-include-i-eager-loading-w-akcji/</guid>
		<description><![CDATA[Jako że ostatnie kilka tekstów było natury dywagacyjnej, a Ruby on Rails było poruszone tylko pobieżnie i niejako powierzchownie, tym razem będzie bardziej &#8220;technicznie&#8221;.
Nie czytam literatury dotyczącej RoR w języku innym, niż angielski, więc większość terminów będzie po angielsku, co mam nadzieję nie obrazi żadnych purystów językowych. Jako że nie znalazłem polskiego odpowiednika &#8220;eager loading&#8220;, [...]]]></description>
			<content:encoded><![CDATA[<p align="justify"><a href="http://www.flickr.com/photos/damiensimages/689753543/" title="eager loading"><img src="http://blog.altsabon.com/wp-content/uploads/2008/06/image1.png" style="border-width: 0px; margin: 10px 0px 10px 10px" alt="eager loading" align="right" border="0" height="504" width="338" /></a>Jako że ostatnie kilka tekstów było natury dywagacyjnej, a Ruby on Rails było poruszone tylko pobieżnie i niejako powierzchownie, tym razem będzie bardziej &#8220;technicznie&#8221;.</p>
<p align="justify">Nie czytam literatury dotyczącej RoR w języku innym, niż angielski, więc większość terminów będzie po angielsku, co mam nadzieję nie obrazi żadnych purystów językowych. Jako że nie znalazłem polskiego odpowiednika &#8220;<strong>eager loading</strong>&#8220;, będę się więc posługiwał taką właśnie formą. No chyba że bym się trochę wysilił z kreatywnością i przynajmniej spróbował to przetłumaczyć.<br />
Może więc &#8220;chętne ładowanie&#8221;?<br />
Albo - co brzmi dużo bardziej interesująco i ekstrawagancko - &#8220;<strong>skwapliwe ładowanie</strong>&#8220;?</p>
<p align="justify">Czym jest więc skwapliwe ładowanie? (Spodobał mi się ten termin, więc będę go stosował naprzemiennie z jego anglojęzycznym odpowiednikiem).</p>
<p align="justify">Otóż Rails daje nam proste i skuteczne narzędzia do tworzenia aplikacji internetowych. Jednakże prostota i skuteczność często pociąga za sobą mniejszą skłonność do myślenia i wręcz lenistwo.</p>
<p align="justify">Może więc na początek szybki quiz w stylu 1 z 10, kiedy na odpowiedź ma się około 5 sekund.<br />
<strong>Sznuk</strong>: Kiedy stosuje się eager loading?<br />
<strong>Programista RoR</strong>: Eager loading jest stosowany kiedy mamy do czynienia z powiązanymi modelami.</p>
<p align="justify"><strong>Sznuk:</strong> Do czego służy eager loading?<br />
<strong>Programista RoR: </strong>Służy do zmniejszenia liczby zapytań do bazy danych i tym samym do usprawnienia i przyśpieszenia aplikacji. [ding!] Przynajmniej w większości przypadków. (Ostatnie zdanie, mimo iż prawdziwe, było już po &#8220;ding!&#8221;, sygnalizującym koniec czasu na odpowiedź, jednakże odpowiedź zaliczona).</p>
<p align="justify">Załóżmy więc, że mamy restaurację i w niej kilku dobrych kucharzy, którzy robą świetne dania i używają do tego swoich ulubionych składników</p>
<p align="justify">
<pre name="code" class="ruby">

class Cook
  has_many :dishes
  has_many :ingredients, :through =&gt; :dishes

class Dish
  belongs_to :cook
  has_many :ingredients

class Ingredient
  belongs_to :dish
</pre>
<p align="justify">Jeśli więc chcielibyśmy sobie sprawdzić jakich to składników używa każdy z kucharzy (i dlaczego schodzi tak dużo rumu mimo iż nie jest składnikiem prawie żadnej potrawy), to będąc leniwymi programistami możemy sobie upichcić takie oto zapytanko:</p>
<p align="justify">
<pre name="code" class="ruby">

@cooks = Cook.find(:all)
</pre>
<p align="justify">Później w widoku (view) pokażemy te składniki dla każdego z kucharzy:</p>
<p align="justify">
<pre name="code" class="ruby">

&lt;% for cook in @cooks %&gt;
  &lt;%= cook.name %&gt;:&lt;br /&gt;
  &lt;% cook.ingredients.each do |i| %&gt;
    &lt;%= i.name %&gt;
  &lt;% end %&gt;
&lt;% end %&gt;
</pre>
<p align="justify">I nic nie będzie w tym złego. Bo w końcu mamy tylko jedną restaurację, więc najwyżej kilku kucharzy. Nic więc strasznego, że dla każdej iteracji będzie generowane nowe zapytanie do bazy, żeby wydobyć listę składników. Jednakże jeśli byśmy mieli sieć restauracji w całej Europie i chcielibyśmy wiedzieć który kucharz spośród nich wszystkich używa więcej chili, niż przeciętny kucharz mąki, to już mielibyśmy problem, bo przy tak dużej ilości kucharzy nasza baza danych nie byłaby tak szybka w zaserwowaniu nam pysznych wyników.<br />
Jednakże skwapliwe ładowanie stoi tuż za rogiem, machając nieśmiało ręką i próbując zwrócić na siebie uwagę. Przywołujemy więc je, pokazujemy mielącą dyskami i RAMem bazę danych i mówimy: &#8220;Zrób z tym coś&#8221;. Skwapliwe zabrawszy się za robotę, eager loading w końcu daje nam coś tak idealnie prostego, aczkolwiek skutecznego:</p>
<p align="justify">
<pre name="code" class="ruby">

@cooks = Cook.find(:all, :include =&gt; :ingredients)
@cooks = Cook.find(:all, :include =&gt; [:dishes, :ingredients])
</pre>
<p align="justify">Skutkuje to tym, że do bazy danych zostaje wystosowane jedno jedyne, długie jak spagetti zapytanie, które wszystkie potrzebne nam dane wyciąga za jednym zamachem. Przykładowe zapytanie (z kategorii innej niż kuchenna, ale żeby zobrazować długość możliwego zapytania) może być np. takie jak poniżej.<br />
Jest to zapytanie wygenerowane przez ten niewinny kod:</p>
<p align="justify">
<pre name="code" class="ruby">

@user_categories = current_user.categories.find(:all,
                :include =&gt; [ :children =&gt; [ :children, :parent ]], :order =&gt; &quot;categories.name&quot;)
</pre>
<p align="justify">
<pre name="code" class="sql">

SELECT `categories`.`id` AS t0_r0,
`categories`.`cat_type` AS t0_r1,
`categories`.`name` AS t0_r2,
`categories`.`description` AS t0_r3,
`categories`.`created_at` AS t0_r4,
`categories`.`updated_at` AS t0_r5,
`categories`.`parent_id` AS t0_r6,
`categories`.`user_id` AS t0_r7,
`childrens_categories`.`id` AS t1_r0,
`childrens_categories`.`cat_type` AS t1_r1,
`childrens_categories`.`name` AS t1_r2,
`childrens_categories`.`description` AS t1_r3,
`childrens_categories`.`created_at` AS t1_r4,
`childrens_categories`.`updated_at` AS t1_r5,
`childrens_categories`.`parent_id` AS t1_r6,
`childrens_categories`.`user_id` AS t1_r7,
`childrens_categories_2`.`id` AS t2_r0,
`childrens_categories_2`.`cat_type` AS t2_r1,
`childrens_categories_2`.`name` AS t2_r2,
`childrens_categories_2`.`description` AS t2_r3,
`childrens_categories_2`.`created_at` AS t2_r4,
`childrens_categories_2`.`updated_at` AS t2_r5,
`childrens_categories_2`.`parent_id` AS t2_r6,
`childrens_categories_2`.`user_id` AS t2_r7,
`parents_categories`.`id` AS t3_r0,
`parents_categories`.`cat_type` AS t3_r1,
`parents_categories`.`name` AS t3_r2,
`parents_categories`.`description` AS t3_r3,
`parents_categories`.`created_at` AS t3_r4,
`parents_categories`.`updated_at` AS t3_r5,
`parents_categories`.`parent_id` AS t3_r6,
`parents_categories`.`user_id` AS t3_r7
FROM `categories`
LEFT OUTER JOIN `categories` childrens_categories ON childrens_categories.parent_id = categories.id
LEFT OUTER JOIN `categories` childrens_categories_2 ON childrens_categories_2.parent_id = childrens_categories.id
LEFT OUTER JOIN `categories` parents_categories ON `parents_categories`.id = `childrens_categories`.parent_id
WHERE (categories.user_id = 3)
ORDER BY categories.name
</pre>
<p align="justify">Przy większej ilości danych średnia poprawa wydajności (nie według żadnych benchmarków, a według moich własnych i często subiektywnych obserwacji) jest co najmniej 2-3-krotna. Iterować po takich wynikach możemy dokładnie tak samo jak w poprzednim przypadku, tyle że tym razem już nie będą wysyłane żadne dodatkowe zapytania do bazy.</p>
<p align="justify"><strong>Sznuk:</strong> Pytanie finałowe dla Pana: czego nie potrafi eager loading?<br />
<strong>Programista RoR: </strong>Eager loading nie potrafi gotować, prać, robić masażu i wybierać tylko poszczególne pola poprzez :select, bo tak bardzo jest skwapliwy, że [ding!] ładuje wszystko&#8230;<br />
<strong>Sznuk:</strong> To jest poprawna odpowiedź! Gratuluję Panu wygranej w naszym programie. Wygrał Pan darmowe skwapliwe ładowanie trzech ciężarówek w malowniczym porcie w Gdyni. Pozdrawiam i do zobaczenia!</p>
<p align="justify">Trochę odbiegając już od tematu, jednak potwierdzę, że w przypadku eager loading opcja :select jest stanowczo i ostentacyjnie ignorowana. Jeśli nam jednak zależy na tej opcji, to możemy zrezygnować z :include na rzecz :joins, uzyskując pożądany wynik, aczkolwiek w trochę mniej elegancki sposób.</p>
<pre name="code" class="ruby">

@posts = Post.find(:all,
:select =&gt; &quot;posts.id, posts.title, posts.subject, users.username&quot;,
:joins =&gt; &quot;left outer join users on users.id = posts.user_id&quot;)
</pre>
<p>Nie bądźmy więc leniwi bardziej niż to konieczne lub zdrowe i używajmy częściej skwapliwego ładowania, a baza danych będzie nam za to wdzięczna i w przyszłości, jak będziemy bardzo potrzebować jej dobrej pracy, spojrzy na nas łaskawszym okiem, westchnie głęboko i się zabierze za ładowanie.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/Sabon?a=qKuuGI"><img src="http://feeds.feedburner.com/~f/Sabon?i=qKuuGI" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/Sabon?a=DEp4ki"><img src="http://feeds.feedburner.com/~f/Sabon?i=DEp4ki" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Sabon/~4/315385335" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.altsabon.com/ruby-on-rails-include-i-eager-loading-w-akcji/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.altsabon.com/ruby-on-rails-include-i-eager-loading-w-akcji/</feedburner:origLink></item>
		<item>
		<title>Mam pomysł, potrzebuję tylko programisty</title>
		<link>http://feeds.feedburner.com/~r/Sabon/~3/309198037/</link>
		<comments>http://blog.altsabon.com/mam-pomysl-potrzebuje-tylko-programisty/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 00:00:47 +0000</pubDate>
		<dc:creator>Sabon</dc:creator>
		
		<category><![CDATA[Freelancing]]></category>

		<category><![CDATA[Ogólne]]></category>

		<category><![CDATA[Startup]]></category>

		<guid isPermaLink="false">http://blog.altsabon.com/mam-pomysl-potrzebuje-tylko-programisty/</guid>
		<description><![CDATA[ Czytałem ostatnio sporo branżowych blog&#243;w, przeglądałem odpowiednie fora, trafiłem na kilka artykuł&#243;w w Newsweeku / Time / Polityce / Fortune, przejrzałem polskie poletko Web 2.0 i wpadłem na świetny pomysł!     Teraz potrzebuję tylko programisty, kt&#243;ry mi to szybciutko skleci i będę kolejnym złotym dzieckiem polskiego Internetu. Na szczęście w Polsce [...]]]></description>
			<content:encoded><![CDATA[<p align="justify"><img style="border-right: 0px; border-top: 0px; margin: 0px 0px 0px 15px; border-left: 0px; border-bottom: 0px" height="184" alt="Czy tego szukam?" src="http://blog.altsabon.com/wp-content/uploads/2008/06/image.png" width="244" align="right" border="0" /> <strong>Czytałem ostatnio sporo branżowych blog&#243;w, przeglądałem odpowiednie fora, trafiłem na kilka artykuł&#243;w w Newsweeku / Time / Polityce / Fortune, przejrzałem polskie poletko Web 2.0 i wpadłem na świetny pomysł!     <br />Teraz <u>potrzebuję tylko programisty</u>, kt&#243;ry mi to szybciutko skleci i będę kolejnym złotym dzieckiem polskiego Internetu. Na szczęście w Polsce takowych jest jeszcze bardzo mało, więc tym bardziej mam spore szanse.</strong> </p>
<p align="justify">Taki mniej więcej tok zdarzeń i rozumowania jest aż nazbyt częsty. Zar&#243;wno w Polsce, jak i w innych krajach, ale na innych się skupiać nie będę, więc będę pisał o rodzimym rynku. </p>
<p align="justify">Jest niestety bardzo dużo przypadk&#243;w jak powyżej i odpowiednich ogłoszeń &quot;szukam programisty&quot;. Przy czym <strong>dalszy tok rozumowania wygląda następująco</strong>:    <br />- Zr&#243;b mi proszę prosty serwis (a i tak dobrze, jeśli pada słowo &quot;proszę&quot;)    <br />- taki coś w stylu Allegro / Nasza-Klasa / Web 2.0 / Flickr (w zależności na jaki genialny pomysł się wpadło)    <br />- to przecież powinno być proste    <br />- trochę PHP, trochę MySQL, oczywiście AJAX i powinno być gotowe (ilość i stopień wyszukania akronim&#243;w odpowiedni do stopnia oczytania branżowych blog&#243;w i znajomości aktualnych topowych buzzword&#243;w)    <br />- jako że to jest proste, to jestem nawet skłonny zapłacić 1000-2000 PLN (co też jest wspaniałomyślne, bo r&#243;wnie często prosi się znajomego programistę o sklecenie podobnego serwisu po znajomości)    <br />- dodaj jeszcze do tego serwisu funkcje X, Y i Z i po sprawie (przy czym te właśnie funkcje, nawet jeśli są całkowicie pozbawione sensu z punktu widzenia przeznaczenia serwisu, powinny z niego zrobić co najmniej drugiego eBay&#8217;a, jak nie lepiej) </p>
<p align="justify"><strong>Kwestie, o kt&#243;rych się nawet nie myślało</strong>    <br />- godne wynagrodzenie za wykonanie pomysłu (to 1-2K nie jest godne?!)    <br />- podział zysk&#243;w z programistą / developerem    <br />- udziały w przedsięwzięciu dla programisty / developera    <br />- no i oczywiście najważniejsze - zasadność tworzenia takiego serwisu </p>
<p align="justify"><strong>Kwestie, o kt&#243;rych w wielu wypadkach się nawet nie słyszało</strong>    <br />- User Interface    <br />- Pageflow    <br />- Struktura bazy danych    <br />- Bezpieczeństwo (serwisu, serwera, danych użytkownik&#243;w)    <br />- Skalowalność </p>
<p align="justify">Powyższe kwestie nie zostały wyssane z palca - widziałem zbyt wiele ogłoszeń typu &quot;1-2K PLN za serwis o funkcjonalności Allegro&quot;, przy czym zawarte jest w tym wszystko od zarejestrowania domenu do uruchomienia serwisu. Zbyt wiele, żeby uznać to za jednostkowe przypadki. </p>
<p align="justify">Jeśli już nawet zasadne byłyby przypadki, kiedy tzw. &quot;biz guy&quot; szuka &quot;tech guy&quot; do zrobienia roboty, to <strong>rozumowanie powinno się zaczynać od końca</strong>:    <br />- Jaka jest zasadność tworzenia takiego serwisu? (pytanie to powinno być zadane wielokrotnie i pod wieloma kątami, dopiero p&#243;źniej można przechodzić do pytań kolejnych)    <br />- jak będzie wyglądał / kto stworzy UI    <br />- jaka będzie struktura serwisu (pageflow)    <br />- jaki będzie podział r&#243;l między biz / tech guy    <br />- jaki będzie podział zysk&#243;w / udział&#243;w między nimi    <br />- jak znaleźć dobrego programistę / developera, kt&#243;ry na dodatek będzie chciał pracować z kimś, kto ze strony technicznej nic nie wniesie do przedsięwzięcia (r&#243;wnie dobrze może to być na pierwszym miejscu, jeśli chodzi o wpływ, jaki ma to na powodzenie projektu)    <br />- dopiero p&#243;źniej cała reszta </p>
<p align="justify">Ciekawe dlaczego nie ma pytań ze strony programist&#243;w <strong>potrzebuję tylko człowieka do generowania pomysł&#243;w, a z resztą sobie poradzę</strong>, prawda? </p>
<p align="justify"><strong>Zawsze źle oceniamy to, czego nie rozumiemy. A to, co rozumiemy, możemy zrobić sami</strong>.    <br />Dlatego też powinno być tak, że to developerzy powinni poszukiwać ludzi, kt&#243;rzy się zajmą &quot;stroną biznesową&quot; serwisu, kt&#243;ry już stworzyli, a nie odwrotnie. Dlaczego tak nie jest? W dużej mierze przedstawiłem to tutaj: <a title="Dlaczego powstaje mało serwis&#243;w mimo ciągle zmniejszającej się bariery wejścia?" href="http://blog.altsabon.com/dlaczego-powstaje-malo-serwisw-mimo-ciagle-zmniejszajacej-sie-bariery-wejscia/">Dlaczego powstaje mało serwis&#243;w mimo ciągle zmniejszającej się bariery wejścia?</a></p>
<p align="justify">Moim zdaniem jeśli już, to właśnie w odwrotną stronę powinno to działać, czyli do gotowego serwisu powinna być poszukiwana osoba, kt&#243;ra się zajmie żmudną pracą wprowadzania go na szerokie wody. zakładając oczywiście, że osoba, kt&#243;ra go stworzyła, chce się zajmować tylko techniczną stroną i dlatego takiej osoby poszukuje. Tudzież z braku czasu na obie role naraz. Jednak takiego ogłoszenia, nawet jednego, jeszcze w Polsce nie widziałem&#8230;</p>
<p align="justify">Idealnym rozwiązaniem jednak jest wsp&#243;łpraca dw&#243;ch takich os&#243;b od samego początku. Nie szukanie kogoś <em>tylko do zrobienia czegoś</em>, a wsp&#243;lne i ukierunkowane działania od etapu generowania pomysłu, poprzez projektowanie interfejsu, poszukiwania potencjalnych źr&#243;deł przychod&#243;w, do wyprowadzania projektu na szerokie wody. Jako że jest to jednak sytuacja idealna i wymagająca całkowitego poświęcenia dw&#243;ch os&#243;b, co w Polsce jeszcze jest rzadko spotykane, poświęciłem temu zagadnieniu powyższy post.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/Sabon?a=u019uI"><img src="http://feeds.feedburner.com/~f/Sabon?i=u019uI" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/Sabon?a=EGRtCi"><img src="http://feeds.feedburner.com/~f/Sabon?i=EGRtCi" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Sabon/~4/309198037" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.altsabon.com/mam-pomysl-potrzebuje-tylko-programisty/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.altsabon.com/mam-pomysl-potrzebuje-tylko-programisty/</feedburner:origLink></item>
		<item>
		<title>Ruby on Rails: analiza SWOT</title>
		<link>http://feeds.feedburner.com/~r/Sabon/~3/222294519/</link>
		<comments>http://blog.altsabon.com/ruby-on-rails-analiza-swot/#comments</comments>
		<pubDate>Thu, 24 Jan 2008 13:30:42 +0000</pubDate>
		<dc:creator>Sabon</dc:creator>
		
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://blog.altsabon.com/ruby-on-rails-analiza-swot/</guid>
		<description><![CDATA[Kiedyś jak na zajęciach z ekonomii na pierwszym roku studiów trzeba było robić analizy SWOT dla wyimaginowanych firm, byłem przekonany, że był to jedyny raz kiedy coś takiego robię i że nigdy więcej na pewno tego nie będę potrzebował.
Minęło lat ileś i kiedy wpadł mi do głowy pomysł oceny Ruby on Rails, do głowy samoistnie [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Kiedyś jak na zajęciach z ekonomii na pierwszym roku studiów trzeba było robić analizy SWOT dla wyimaginowanych firm, byłem przekonany, że był to jedyny raz kiedy coś takiego robię i że nigdy więcej na pewno tego nie będę potrzebował.</p>
<p align="justify">Minęło lat ileś i kiedy wpadł mi do głowy pomysł oceny Ruby on Rails, do głowy samoistnie nasunęła mi się analiza SWOT, jako dość dobrze nadające się narzędzie do pokazania różnych aspektów tego zjawiska.</p>
<p align="justify">Krótka definicja analizy SWOT (gdyby ktoś nie wiedział albo chciał sobie odświeżyć swoją wiedzę).</p>
<p align="justify">Strengths (Mocne strony)<br />
Weaknesses (Słabe strony)<br />
Opportunities (Szanse)<br />
Threats (Zagrożenia)</p>
<p align="justify">Słownikowo (Wikipedia):<br />
&#8220;<a href="http://pl.wikipedia.org/wiki/Analiza_SWOT" title="Wikipedia: Analiza SWOT">Analiza SWOT</a> – jedna z najpopularniejszych heurystycznych technik analitycznych, służąca do porządkowania informacji. Bywa stosowana we wszystkich obszarach planowania strategicznego jako uniwersalne narzędzie pierwszego etapu analizy strategicznej. Np w naukach ekonomicznych jest stosowana do analizy wewnętrznego i zewnętrznego środowiska danej organizacji, (np. przedsiębiorstwa), analizy danego projektu, rozwiązania biznesowego itp.&#8221;</p>
<p align="center"><img src="http://blog.altsabon.com/wp-content/uploads/2008/01/windowslivewriterrubyonrailsanalizaswot-268aswot-en-5.png" id="id" style="border-width: 0px" alt="SWOT_en" border="0" height="364" width="324" /></p>
<p align="justify">Poniżej pokrótce moje opinie i obserwacje na temat słabych i mocnych stron RoR, ich szans i zagrożeń. Każdy z punktów (o ile nie jest ewidentny) rozwinę i wytłumaczę dlaczego tak uważam.</p>
<table cellpadding="2" cellspacing="0" width="450">
<tr>
<td style="border: thin dotted " valign="top" width="222"><strong>Mocne strony<br />
</strong>1. Proste i szybkie w budowaniu<br />
2. Standardowa struktura aplikacji<br />
3. Wbudowane testowanie<br />
4. Społeczność<br />
5. Dobry marketing (na świecie)</td>
<td style="border: thin dotted " valign="top" width="226"><strong>Słabe strony<br />
</strong>1. Problemy przy uruchamianiu na serwerze<br />
2. Wolne działanie niektórych elementów frameworka<br />
3. Dokumentacja<br />
4. Słaby marketing (w Polsce)</td>
</tr>
<tr>
<td style="border: thin dotted " valign="top" width="222"><strong>Szanse<br />
</strong>1. Rails 2.0 (dodatkowy buzz)<br />
2. Potrzeba bardzo szybkiego tworzenia i szybkich zmian aplikacji<br />
3. Rosnąca ilość dużych serwisów napisanych w Rails</td>
<td style="border: thin dotted " valign="top" width="226"><strong>Zagrożenia<br />
</strong>1. Nie zdobędzie masy krytycznej użytkowników<br />
2. Nie zdobędzie masy krytycznej firm hostingowych<br />
3. Wejście nowego gracza lub umocnienie się istniejącego<br />
4. Brak (dobrych) programistów<br />
5. Zaniedbanie / pominięcie Ruby (i/lub Rails) przez uczelnie</td>
</tr>
</table>
<p align="justify">Na początek <strong><u>plusy</u></strong>, które są dość powszechnie znane, bo są wałkowane na lewo i prawo jak część &#8220;buzzu&#8221;, który jest wytwarzany wokół Rails.</p>
<p align="justify"><strong>Prostota i szybkość developmentu. </strong>Struktura MVC (Model - View- Controller) narzuca pewne standarty, przez co nie trzeba się zbytnio zastanawiać gdzie co ma być, jakie to ma uzasadnienie i czy następna osoba będzie miała takie samo spojrzenie na to, gdzie muszą być poszczególne elementy aplikacji. Pomaga to w równoległym tworzeniu aplikacji przez kilku programistów albo w miarę bezproblemowym wdrożeniu się lub przejęciu projektu przez nowego programistę.<br />
Wbudowane testy oraz niejako integralna i wpojona część filozofii Rails (TDD / BDD) ułatwia życie na dalszych etapach dużych projektów, kiedy to już nie da się wszystkiego przetestować ręcznie albo ogarnąć wszystkiego naraz.</p>
<p align="justify"><strong>Społeczność i dobry marketing.</strong> Nie widzę nic złego w tym, że ktoś na wiele możliwych sposobów promuje swoje rozwiązanie, o ile oczywiście to rozwiązanie jest dobre. Nie mam więc nic przeciwko temu, że chłopaki z 37 Signals (skąd wywodzi się Ruby on Rails) bardzo dobrze pokierowali społecznością railsową i umiejętnie wytworzyli szum, który pozwolił dość szybko i skutecznie wybić się ponad inne rozwiązania, zostać zauważonym i dzięki temu coraz szerzej stosowanym i akceptowanym.</p>
<p align="justify"><strong><u>Słabe strony</u></strong></p>
<p align="justify">Nadal <strong>odpalanie serwisów (deployment)</strong> nie jest czynnością banalną, jak to jest chociażby w przypadku PHP (wrzucam na FTP&#8217;a i mi to działa). Istnieją narzędzia, które ten proces znacznie ułatwiają, jednak ciągle nie jest to tak bezproblemowe, jak mogłoby być &#8220;w idealnym świecie&#8221;.<br />
Ostatnio pojawiły się dość burzliwe i intensywne dyskusje na ten temat, kwestia stała się dość powszechnie znana, a taki &#8220;PR&#8221; danej kwestii powinien moim zdaniem tylko zmobilizować społeczność railsową do znalezienia skutecznych rozwiązań.</p>
<p align="justify"><strong>Wolne działanie niektórych elementów</strong> frameworka. Przykładem może tu być chociażby <em>named routes </em>(nie jestem dobry w tłumaczeniu technologicznych pojęć na polski, więc nawet nie próbuję). W Rails 2.0 jest to jeden z kluczowych elementów, więc problem nie jest banalny. Są już jednak wprowadzane na to ulepszenia, które praktycznie niwelują ten problem, więc prawdopodobnie w najbliższej podwersji Rails powinno to działać dużo lepiej.<br />
Nie będę zabierał teraz głosu w sprawie odwiecznych zarzutów typu <em>&#8220;Rails doesn&#8217;t scale&#8221;</em>, gdyż uważam, że dostatecznie dużo zostało na ten temat napisane. Nadmienię tylko, że jest to moim zdaniem problem w bardzo znacznej części rozdmuchany ponad to, jak jest rzeczywiście.</p>
<p align="justify"><strong><br />
Dokumentacja.</strong> Standardowa dokumentacja API jest często niewystarczająca, ale chociażby projekt <a href="http://www.noobkit.com/" title="Noobkit">Noobkit</a> ten problem stara się rozwiązać i to z dość dobrym skutkiem. Poza tym, jak wynika z punktów pozytywnych, społeczność jest dość pomocna. Grupy dyskusyjne czy kanały IRC zawsze okazywały mi nieocenioną pomoc kiedy niechcący skręciłem gdzieś w ślepą uliczkę i nie wiedziałem co zrobić dalej.</p>
<p align="justify"><strong><br />
Sytuacja w Polsce</strong> zmienia się cały czas (i to dość szybko) na lepsze, aczkolwiek jeszcze widzę sporo miejsca na poprawę sytuacji, jeśli chodzi o polepszenie rozpoznawalności i akceptacji Ruby on Rails chociażby wśród większych firm w Polsce.</p>
<p align="justify"><strong><u>Szanse i zagrożenia</u></strong></p>
<p align="justify">Serwisy internetowe są teraz tworzone w coraz większej ilości i coraz szybciej. Im bardziej cykl tworzenia serwisu jest zbliżony (czasowo) do cyklu wypieku świeżych bagietek, tym lepiej - z punktu widzenia twórców oczywiście.<br />
Poprzednie narzędzia i metody powoli przestają dawać gwarancję tworzenia w takim tempie, mając cykl bardziej zbliżony do dojrzewającego wina, niż gorących bagietek.<br />
Im większe więc będzie zapotrzebowanie na świeże pieczywo, tym większa szansa dla Ruby on Rails na rozwinięcie skrzydeł i uzyskanie dodatkowego uznania (na świecie i w Polsce).<br />
Trzeba tylko zadbać, żeby była odpowiednia ilość dobrych piekarzy i poprawić system dystrybucji bułek (czyt. deployment).</p>
<p align="justify">Uczelnie też mogą mieć w tym swój spory udział. Wystarczy uznać, że Ruby (i Rails) są warte tego, żeby postawić na nich dość mocny akcent, a już samo to powinno dać w Polsce spore efekty. Pozostaje mieć nadzieję, że skostniałe (oby jak najmniej) struktury uczelniane jak najszybciej dojdą do takich samych wniosków.</p>
<p align="justify">No i ciągle trzeba dbać o to, żeby za kilka lat ludzie nie uznali, że wolą np. nie ciepłe bułeczki, a choćby fastfood. Na razie to nie grozi i maszyna marketingowa (wraz z produktem, który sam się broni) działa należycie, ale nie można tego elementu zaniedbać.</p>
<p align="justify"><strong><u>Wnioski</u></strong></p>
<p align="justify">Podsumowując (bądź streszczając dla leniwych, którym nie chciało się czytać powyższych wywodów):</p>
<p align="justify"><em>Jest dobrze, może być jeszcze lepiej.<br />
Idealnie nie jest (bo nic nie jest idealnie), ale jest do czego dążyć.<br />
I jest to wniosek dla Rails ogólnie, jak i dla RoR w Polsce.</em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/Sabon?a=oN84rID"><img src="http://feeds.feedburner.com/~f/Sabon?i=oN84rID" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/Sabon?a=SrzK1Pd"><img src="http://feeds.feedburner.com/~f/Sabon?i=SrzK1Pd" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Sabon/~4/222294519" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.altsabon.com/ruby-on-rails-analiza-swot/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.altsabon.com/ruby-on-rails-analiza-swot/</feedburner:origLink></item>
		<item>
		<title>Pogodnie.pl - nowy serwis pogodowy</title>
		<link>http://feeds.feedburner.com/~r/Sabon/~3/189600802/</link>
		<comments>http://blog.altsabon.com/pogodniepl-nowy-serwis-pogodowy/#comments</comments>
		<pubDate>Sat, 24 Nov 2007 01:30:07 +0000</pubDate>
		<dc:creator>Sabon</dc:creator>
		
		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[Startup]]></category>

		<guid isPermaLink="false">http://blog.altsabon.com/pogodniepl-nowy-serwis-pogodowy/</guid>
		<description><![CDATA[
Czy sprawdzanie pogody musi być uciążliwe?
Czy naprawdę potrzebne są wszystkie dane o kierunku wiatru, niżach, wyżach innych anomaliach, o których nawet nie mam pojęcia?
Czy można ten proces maksymalnie uprościć i przyśpieszyć?
Co można zrobić, żeby dodatkowo umilić ten proces?

Kiedy już miałem pytania - znalezenie na nie odpowiedzi było już tylko kwestią czasu.
Tak więc moim zdaniem najważniejsze [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li>Czy sprawdzanie pogody musi być uciążliwe?</li>
<li>Czy naprawdę potrzebne są wszystkie dane o kierunku wiatru, niżach, wyżach innych anomaliach, o których nawet nie mam pojęcia?</li>
<li>Czy można ten proces maksymalnie uprościć i przyśpieszyć?</li>
<li>Co można zrobić, żeby dodatkowo umilić ten proces?</li>
</ul>
<p>Kiedy już miałem pytania - znalezenie na nie odpowiedzi było już tylko kwestią czasu.</p>
<p>Tak więc moim zdaniem najważniejsze w każdym nowym przedsięwzięciu nie są kwestie techniczne, zawiłości tworzenia czy problemy z pomysłem.</p>
<p><strong>Najważniejsze są odpowiednio postawione pytania.</strong></p>
<p>Zakładam, że jakiś czas temu zadałem te odpowiednie i teraz przedstawiam efekt moich prac: <a href="http://pogodnie.pl" title="Pogoda na Pogodnie.pl">http://pogodnie.pl</a></p>
<p align="justify"><a href="http://pogodnie.pl" title="Pogodnie.pl"><img src="http://blog.altsabon.com/wp-content/uploads/2007/11/windowslivewriterpogodnie.plnowyserwispogodowy-2328pogodnie-logo-3.png" style="border: 0px none " alt="pogodnie-logo" border="0" height="77" width="454" /></a></p>
<p align="justify">Serwis jest już w 90% procentach gotowy. Planuję dodać jeszcze kilka szczegółów, ale podstawowa funkcjonalność już działa, więc zapraszam do używania, testowania, wyrażania opinii i ocen pozytywnych lub nie, w zależności od subiektywnych wymagań w stosunku do serwisów tego typu.</p>
<p align="justify">Zaznaczam od razu, że większość sugestii dotyczących dodania nowych funkcji niestety będzie &#8220;rozpatrzona ze skutkiem negatywnym&#8221;, gdyż zamysłem jest &#8220;co jeszcze można odjąć, żeby mieć dostatecznie info o pogodzie&#8221;, a nie &#8220;jaką by tu jeszcze funkcję dodać oprócz mikropaskali, natężenia pyłków i prawdopodobieństwa zorzy polarnej&#8221;.</p>
<p>Kilka szczegółów technicznych:</p>
<ul>
<li>Serwis oczywiście stoi na Ruby on Rails</li>
<li>Wykorzystuje Weatherbug API</li>
<li>Sporo wachlowania i &#8220;rozczłonkowywania&#8221; plików XML (API nie jest zbytnio developer-friendly, a dokumentacji jak na lekarstwo, na dodatek już nieaktualna w większości)</li>
<li>Zminimalizowana ilość zapytań do API</li>
</ul>
<p align="justify">Radość z budowania i tworzenia tego projektu: MAX :)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/Sabon?a=c8VNM1B"><img src="http://feeds.feedburner.com/~f/Sabon?i=c8VNM1B" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/Sabon?a=TGhvwab"><img src="http://feeds.feedburner.com/~f/Sabon?i=TGhvwab" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Sabon/~4/189600802" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.altsabon.com/pogodniepl-nowy-serwis-pogodowy/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.altsabon.com/pogodniepl-nowy-serwis-pogodowy/</feedburner:origLink></item>
		<item>
		<title>Dlaczego powstaje mało serwisów mimo ciągle zmniejszającej się bariery wejścia?</title>
		<link>http://feeds.feedburner.com/~r/Sabon/~3/180783575/</link>
		<comments>http://blog.altsabon.com/dlaczego-powstaje-malo-serwisw-mimo-ciagle-zmniejszajacej-sie-bariery-wejscia/#comments</comments>
		<pubDate>Tue, 06 Nov 2007 22:57:25 +0000</pubDate>
		<dc:creator>Sabon</dc:creator>
		
		<category><![CDATA[Freelancing]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[Startup]]></category>

		<guid isPermaLink="false">http://blog.altsabon.com/dlaczego-powstaje-malo-serwisw-mimo-ciagle-zmniejszajacej-sie-bariery-wejscia/</guid>
		<description><![CDATA[ Czy w Polsce są ludzie mniej zdolni niż w USA czy chociażby nawet w Niemczech? Czy mają mniej determinacji, umiejętności albo czasu? Jeśli nie, to dlaczego w innych krajach powstaje dużo więcej firm, serwisów czy usług internetowych (nie używając niemodnego już buzzwordu), niż w Polsce? Poniżej postaram się odpowiedzieć na te pytania, wraz z [...]]]></description>
			<content:encoded><![CDATA[<p align="justify"><img src="http://blog.altsabon.com/wp-content/uploads/2007/11/windowslivewriterdlaczegopowstajemaoserwiswmimociglezmnie-14c7akabelek-3.jpg" id="id" style="border-width: 0px" alt="kabelek" align="right" border="0" height="164" width="244" /> Czy w Polsce są ludzie mniej zdolni niż w USA czy chociażby nawet w Niemczech? Czy mają mniej determinacji, umiejętności albo czasu? Jeśli nie, to dlaczego w innych krajach powstaje dużo więcej firm, serwisów czy usług internetowych (nie używając niemodnego już buzzwordu), niż w Polsce? Poniżej postaram się odpowiedzieć na te pytania, wraz z wyszczególniem co wpływa na taki właśnie stan rzeczy.</p>
<h3>Bariery z niedawnej przeszłości</h3>
<ul>
<li>
<p align="justify"><strong>Hosting</strong><br />
Serwery są drogie, niedostępne dla przeciętnego śmiertelnika i na dodatek wybór był niemalże pomiędzy kontami typu &#8220;Geocities&#8221; (co najwyżej można wrzucić obrazek i napisać kilka słów) a serwerem dedykowanym. Opcje pomiędzy - pominięte albo w ilościach śladowych.</li>
<li>
<p align="justify"><strong>Znajomość serwerów</strong><br />
Jeśli się miało serwer, to trzeba było albo być guru linuxa albo mieć takiego kolegę. Bez tego nic większego, niż postawienie bloga nie dawało się zrobić.</li>
<li>
<p align="justify"><strong>Czas tworzenia</strong><br />
Od powstania koncepcji do stworzenia produktu końcowego mijało co najmniej od kilku do kilkunastu miesięcy - nawet jeśli pracowała przy tym spora grupa ludzi.</li>
<li>
<p align="justify"><strong>Sposoby dotarcia do szerszego grona</strong><br />
Albo się było portalem albo zamiast tworzenia serwisów wybierało się koszykówkę, imprezy, podróże, alkohol - co kto wolał. Brak pierwszego warunku dawał szeroki wachlarz możliwości. Wszystkie z nich z dala od klawiatury (co oczywiście daleko nie zawsze jest złe).</li>
<li>
<p align="justify"><strong>Mały rynek docelowy</strong><br />
Mało tego, że stosunkowo mały, to na dodatek skrzętnie podzielony pomiędzy wyżej wspomniane portale, które w oczach chcącego coś zrobić zapaleńca wyrastały na krwiożercze bestie winne całemu złu - od zgarniania wszystkich przychodów reklamowych po trądzik.</li>
<li>
<p align="justify"><strong>Brak możliwości finansowania</strong><br />
Albo pieniądze masz&#8230; albo je zdobywasz w taki sposób, który po pierwsze skutecznie zabiera kilkanaście godzin na dobę, a po drugie starcza tylko na to, by podtrzymać się w stanie pozwalającym na dalsze poświęcanie tych kilkunastu godzin dzień w dzień i może jeszcze na to, by twoja dziewczyna / narzeczona / żona była dostatecznie zadowolona (czyt. &#8220;tolerowała taki stan rzeczy&#8221;).<br />
<em>Mała dygresja: użyłem płci żeńskiej, bo po pierwsze w tej branży mało jest kobiet, a po drugie w przypadku mężczyzny to nie brzmiałoby tak samo dobrze.</em></li>
<li>
<p align="justify"><strong>Konieczność postawienia wszystkiego na jedną kartę</strong><br />
Powyższe punkty niejako prowadzą do tego, że trzeba włożyć naprawdę mnóstwo wysiłku, czasu i pieniędzy, żeby z czymś wystartować (ukierunkowane studia, zdobywanie finansowania, długi czas tworzenia etc.) Jeśli mimo to produkt / usługa / interes nie wypali, to nie pozostaje wiele innych opcji.</li>
<li>
<p align="justify"><strong>Małe możliwości monetyzacji</strong><br />
Jeśli nie uda mi się zdobyć kawałeczka tortu reklamowego, to tak jakby mnie w ogóle nie było. A tego kawałeczka nie uda mi się zdobyć, bo nie mam sposobów dotarcia do szerszego grona. A nie mam tego sposobu, bo nie mam pieniędzy, z którymi to dotarcie nieodwołalnie się wiąże. A nie mogę długo czekać aż stopniowo zbuduję bazę użytkowników, bo hosting i ogólne koszty utrzymania są drogie itd.</li>
</ul>
<h3>Teraz</h3>
<ul>
<li>
<p align="justify"><strong>Tani hosting</strong><br />
Nie wypiję kilku piw miesięcznie, nie pójdę raz na imprezę albo nie kupię raz zbędnego gadżetu i już spokojnie mnie stać na miesięczne opłacenie serwera, na którym bez najmniejszego problemu można postawić początkujący serwis, który powinien sobie poradzić z pierwszymi, nawet większymi &#8220;falami&#8221; użytkowników.</li>
<li>
<p align="justify"><strong>Łatwość wdrażania<br />
</strong>Nie muszę się znać na serwerach, znać wszystkie komendy linuxa, od podszewki znać TCP/IP i DNS, żeby móc odpalić wreszcie swój serwis. W PHP jest to wręcz dziecinnie łatwe, a i do niedawna słynące z problematycznego wdrażania Ruby on Rails ma takie narzędzia jak <a href="http://www.capify.org">Capistrano</a>, które również upraszczają to jak tylko się da. Wczoraj od wymyślenia nazwy domeny do działającej na serwerze wersji serwisu napisanego w Ruby on Rails (z działającą domeną włącznie) minęło około pół godziny.<br />
<em>Więcej na temat serwisu w jednym z kolejnych postów. Oczywiście każdy nie może już się doczekać, jakżeby inaczej?</em></li>
<li>
<p align="justify"><strong>Frameworki</strong><br />
Nie ma potrzeby pisania wszystkiego w tasiemcowych plikach lub tworzenia własnych frameworków w celu automatyzacji najczęściej używanych funkcji lub zadań. Ogromna większość tej żmudnej pracy została już za nas zrobiona przez autorów różnych frameworków. Na dodatek mamy logicznie ułożoną strukturę serwisu, gdzie nie tylko programista to piszący się połapie, ale i ten, który przyjdzie po nim. Chyba że ten poprzedni do niczego się nie nadawał, ale w takim przypadku nawet najlepszy następca jedyne co może zrobić, to najwyżej zacząć wszystko od nowa. Albo oczywiście, jeśli ma ochotę - może wybrać koszykówkę, imprezy, podróże, alkohol&#8230; jednak to odbiega już nieco od tematu.</li>
<li>
<p align="justify"><strong>Kanały dotarcia</strong><br />
Już nie trzeba mieć dużych pieniędzy, żeby dotrzeć do szerszego grona. Wystarczy dobry wykonanie pomysłu, z którym się startuje i przemyślane działania pseudomarketingowe. Z pomocą tu oczywiście idą wszelkiej maści serwisy mniej lub bardziej społecznościowe (tu umownie niech to będzie nazwane Web 2.0) W mniejszym stopniu Web 1.0, a najbardziej oczywiście Web 0.0 (czyli zero webu, a dużo hype&#8217;u i szumu wokół tematu lub serwisu - działa świetnie).</li>
<li>
<p align="justify"><strong>Rosnący rynek</strong><br />
Tym łatwiej jest używać powyższych kanałów, im więcej jest ludzi z nich korzystających. A grupa docelowa rośnie. Tort do podzielenia puchnie. I choć portale nadal mają dla siebie największe kawałki, to jednak coraz większe okruchy spadają i od czasu do czasu nawet wisienka się znajdzie.</li>
<li>
<p align="justify"><strong>Brak konieczności finansowania</strong><br />
Po pierwsze wystartować można już <strong>bez finansowania</strong>. To jest przydatne tudzież potrzebne gdy serwis się rozwinie i zacznie generować ruch (i jeśli dobrze pójdzie, to przychody). Mimo jednak iż nie zawsze jest <strong>koniecznośś</strong> finansowania, to teraz dużo łatwiej o <strong>możliwość</strong> finansowania. Fundusze VC, anioły biznesu i ogólna większa chęć inwestowania w technologie i przestanie postrzaganie internetu jako zabawki dla dużych chłopców. Wszystko działa na korzyść tych, którzy chcieliby tą kasę wziąć i coś z nią zrobić.</li>
<li>
<p align="justify"><strong>Kupujące portale</strong><br />
Nie jest to zjawisko masowe ani też nie padają spektakularne sumy, ale &#8220;podwaliny zostały podłożone&#8221; i precedensy ustanowione. Co prawda nie wszystkie portale kupują (niektóre wręcz mają &#8220;politykę niekupowania&#8221;, jednak lody się zaczęły kruszyć i widać ruch w interesie.</li>
<li>
<p align="justify"><strong>Możliwość utworzenia / zbudowania / uzyskania zysku w więcej niż jednej firmie</strong><br />
Nie trzeba już stawiać wszystkiego na jedną kartę. Można zbudować kilka serwisów, spróbować w kilku niszach, zawalczyć na więcej niż jednym froncie. I na dodatek nie trzeba poświęcać wcześniej wielu lat na to, żeby osiągnąć poziom pozwalający na stworzenie tych serwisów. Nauczenie się jednego z framework&#8217;ów to kwestia około kilku miesięcy. Później to już kwestia praktyki i wprawienia się.</li>
<li>
<p align="justify"><strong>Jeśli chcesz - globalny rynek do podbicia</strong><br />
Jeśli nie wystarcza jednak rodzimy tort i okazyjne wisienki na nim dostępne, to równie dobrze można sięgnąć po tort o wiele większy. Wystarczy tylko mieć dobry przepis na ulepszenie takiego tortu. Wtedy można spokojnie sprawić sobie dużo większą łyżkę i czerpać nią do woli. Oczywiście trzeba mieć trochę więcej sił, żeby taką łyżkę dźwignąć, ale wszystkie składniki przecież są dostępne: mamy tu i możliwość szybkiego tworzenia, są i dostępne finanse, łatwość wdrażania i tani hosting też mogą to tylko ułatwić&#8230;</li>
</ul>
<p align="justify">Dlaczegoż więc tak mało tych serwisów powstaje? Już nawet nie mówiąc o tych skierowanych na rynek globalny (nie ma tu praktycznie o czym mówić, poza kilkoma chlubnymi wyjątkami - <a href="http://www.nozbe.com">Nozbe</a>, częściowo <a href="http://www.polarrose.com">Polar Rose</a>), to na rynku polskim również wszystkie wymienione powyżej pozytywy nie przekładają się na lawinowy przyrost ilości nowo tworzonych serwisów. Przyczyn może być kilka. Spróbuję przeanalizować kilka z nich.</p>
<h3>Możliwe powody</h3>
<ul>
<li>
<p align="justify"><strong>Chęć posiadania dorobienia się na jak najwcześniejszym etapie</strong><br />
Przykład hipotetyczny:<br />
Kończę studia (&#8221;branżowe&#8221;). Moi koledzy, nazwijmy ich &#8220;spoza branży&#8221;, idą do swojej pierwszej lub drugiej pracy. W każdym bądź razie są na początkowym etapie swojej kariery. Zarabiają 1-4K brutto, w zależności od branży czy stopnia fartu. Ja zaś od razu po studiach mogę na starcie zarobić więcej, niż moi koledzy po innych studiach, bo tyle mi proponują tzw. korporacje. Pewna kasa, pewny dochód. W wieku dwudziestu paru lat mogę już sobie wziąć kredyt na mieszkanie, żyć na całkiem innej stopie, niż moi koledzy. Powstaje pytanie: dlaczego niby miałbym z tego rezygnować i przez dłuższy czas inwestować swoją pracę i czas w coś, co nie jest tak pewne i co do czego nie wiadomo czy przyniesie w przyszłości zysk czy też okaże się niewypałem. Mogę mieć chęć zrobienia czegoś ciekawego, ale raczej nigdy nie będę miał na to czasu, bo przecież pracuję.<br />
Koniec przykładu hipotetycznego.<br />
Czy branie kredytu i wiązanie się umowami na kilkadziesiąt lat jest rozwiązaniem sensownym, to już jest całkiem inny temat. Chodzi tylko o to, że taka możliwość istnieje. I w młodym wieku, na dodatek na początku drogi &#8220;na swoim&#8221;, dość trudno jest ludziom takiej możliwości się oprzeć.</li>
<li>
<p align="justify"><strong>Duże zapotrzebowanie ze strony &#8220;biznesu&#8221; na programistów</strong><br />
Gdyby bohater &#8220;hipotetycznego przykładu&#8221;rozpoczynał karierę od 2K brutto, jak jego inni koledzy, moim zdaniem byłoby dużo więcej startupów. Dużo więcej osób nie chciałoby pracować po 8-10 godzin za takie pieniądze i byłoby skłonnych podjąć ryzyko i spróbować czegoś na własną rękę. Zapotrzebowanie na takich pracowników jest jednak spore, różnice w zarobkach na starcie również. Na dodatek nie zmieni to się raczej w najbliższym czasie.</li>
<li>
<p align="justify"><strong>Awersja do ryzyka i niepewność sukcesu</strong><br />
Muszę włożyć dużo wysiłku w coś, co nie wiadomo czy wypali, a jeśli wypali, to nie wiadomo kiedy. I na jaką skalę. Na razie jest za mało w Polsce przykładów typu <a href="http://www.nasza-klasa.pl">nasza-klasa.pl</a>, które są nagłaśniane przez media i przemawiają do wyobraźni ludzi poprzez liczby. Nawet jeśli te liczby idą na rozwój serwisu, a nie do kieszeni właściciela - ważny jest szum wokół tego, ważne jest dotarcie z taką informacją do mas i ważne jest, że takie liczby robią wrażenie. Poza Polską jest dużo więcej takich przykładów, co przechyla szalę na stronę wypróbowania czegoś własnego. W Polsce to jest na stadium początkującym, ale jeszcze przyjdzie na to czas. Może nawet niedługo.</li>
<li>
<p align="justify"><strong>Status</strong><br />
Przykład hipotetyczny #2:<br />
- Cześć, jestem Piotrek.<br />
- Cześć, Marcin jestem.<br />
- Jestem CTO / system analyst / chief programmer / inny-fancy-stuff w XYZ.pl, a Ty?<br />
- Eeeee&#8230; jestem freelancerem / robię taką stronkę / pracuję nad takim serwisem, którego jeszcze nie ma / eeee&#8230; (?)<br />
Koniec przykładu.<br />
Status w życiu wielu ludzi jest jednak ważny. A przykład pierwszy zawsze dużo lepiej &#8220;brzmi&#8221; i wygląda na wizytówce, niż przykład drugi, gdzie nawet nie ma wizytówki.</li>
<li>
<p align="justify"><strong>Brak rozwiniętego ekosystemu startup&#8217;ów</strong><br />
Dobrze, że nie ma <strong>rozwiniętego</strong> ekosystemu startup&#8217;ów, bo jeszcze niedawno nie było <strong>żadnego</strong>. Już się coś dzieje w temacie spotkań branżowych (wreszcie!), zaczyna działać więcej VC i aniołów biznesu. Jednak jeśli np. chcę sobie załatwić jakiekolwiek kwestie prawne dotyczące mojej obecnej tudzież przyszłej firmy, to praktycznie nie ma takiej osoby, do której bym się zwrócił, bo ma już doświadczenie w działaniu ze startupami i zna specyfikę rynku. A takich firm / osób powinno być <u>wiele</u>. Podobnie z księgowością. W dziedzinach pozatechnicznych jest jeszcze wiele do zrobienia w tym temacie.</li>
</ul>
<h3>Podsumowanie i wnioski</h3>
<p align="justify">Z jednej strony wiele warunków potrzebnych lub koniecznych do powstawania nowych przedsięwzięć jest już spełnionych. Z drugiej jednak jest wiele aspektów, które ciągle jeszcze działają na niekorzyść. Dobrze jednak, że są te przeciwstawne siły. Że pozytywne aspekty już istnieją. Z czasem i wraz z rozwojem tych pozytywów coraz większa będzie też aktywność, coraz większa społeczna akceptacja i coraz większa chęć do robienia takich rzeczy. Coraz częstsza obecność tematów startupowych w miediach, tworzący się powoli ekosystem, aktywność portali na rynku akwizycji - coraz więcej tych jaskółek na niebie technologicznym. Oby wskazały drogę innym z ciepłych krajów.</p>
<p align="justify"><em>Disclaimer: na potrzeby artykułu niektóre warunki zostały uproszczone bądź przejaskrawione, niektóre szczegóły i aspekty pominięte. Temat jest zbyt skomplikowany i szeroki, by zamknąć go w kilku punktach, więc specjalnie zastosowałem wersję uproszczoną, ale odzwierciedlającą pewne trendy. Proszę wziąć to pod uwagę przy ewentualnym komentowaniu. Zapraszam tym samym do dyskusji - poznanie zdania i dyskuja uczestników samego &#8220;ekosystemu&#8221; są jak najbardziej wskazane.</em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/Sabon?a=XvZBtjB"><img src="http://feeds.feedburner.com/~f/Sabon?i=XvZBtjB" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/Sabon?a=WArxyYb"><img src="http://feeds.feedburner.com/~f/Sabon?i=WArxyYb" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Sabon/~4/180783575" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.altsabon.com/dlaczego-powstaje-malo-serwisw-mimo-ciagle-zmniejszajacej-sie-bariery-wejscia/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.altsabon.com/dlaczego-powstaje-malo-serwisw-mimo-ciagle-zmniejszajacej-sie-bariery-wejscia/</feedburner:origLink></item>
		<item>
		<title>Porównanie IDE / edytorów dla Ruby on Rails</title>
		<link>http://feeds.feedburner.com/~r/Sabon/~3/173524004/</link>
		<comments>http://blog.altsabon.com/porownanie-ide-edytorow-dla-ruby-on-rails/#comments</comments>
		<pubDate>Mon, 22 Oct 2007 22:45:57 +0000</pubDate>
		<dc:creator>Sabon</dc:creator>
		
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://blog.altsabon.com/porownanie-ide-edytorow-dla-ruby-on-rails/</guid>
		<description><![CDATA[Żeby firma odniosła sukces, najpierw musi w ogóle powstać. Tu więc najważniejszym elementem jest faza początkowa, czyli startup.
Żeby startup mógł powstać, ktoś musi najpierw go zbudować. Mowa tu o startupie technologicznym / internetowym, więc kluczowym elementem jest w tym przypadku zespół developerski.
Żeby ten zespół mógł stworzyć swój wymuskany produkt końcowy, musi mieć w czym pracować. [...]]]></description>
			<content:encoded><![CDATA[<p align="justify"><img src="http://blog.altsabon.com/wp-content/uploads/2007/10/rails_ide_porownanie.jpg" alt="Porównanie Rails IDE" align="right" border="0" height="225" width="300" />Żeby firma odniosła sukces, najpierw musi w ogóle powstać. Tu więc najważniejszym elementem jest faza początkowa, czyli startup.<br />
Żeby startup mógł powstać, ktoś musi najpierw go zbudować. Mowa tu o startupie technologicznym / internetowym, więc kluczowym elementem jest w tym przypadku zespół developerski.<br />
Żeby ten zespół mógł stworzyć swój wymuskany produkt końcowy, musi mieć w czym pracować. I tu elementem niezbędnym i koniecznym jest edytor lub środowisko programistyczne (IDE).<br />
Jako że piszę tu o Ruby on Rails, to zanim przejdę do tematów bardziej technicznych, najpierw się skupię na elemencie niezbędnym (pomijając umiejętność myślenia, bo bez tej nawet najlepsze środowisko programistyczne nie spłodzi nawet jednej sensownej linijki kodu, może oprócz <em>scaffold</em>&#8216;ów).</p>
<p align="justify">Zróżnicowanie systemów operacyjnych jest widoczne również w przypadku edytorów i IDE (w dalszej części będę tych pojęć używał zamiennie, żeby za każdym razem nie podkreślać, że coś jest edytorem, a coś innego jest środowiskiem programistycznym).<br />
Użytkownicy Mac&#8217;ów mają &#8220;owiany legendą&#8221; <a href="http://macromates.com/" title="TextMate">TextMate</a>.<br />
Linux ma sporo opcji: <a href="http://www.jedit.org/" title="jEdit">jEdit</a>, <a href="http://www.vim.org/" title="vim">vim</a>, <a href="http://cream.sourceforge.net/" title="Cream">Cream</a> (bazujący na vim), <a href="http://www.codegear.com/products/3rdrail" title="3rdRail">3rdRail</a> (płatny, $299) i in.<br />
Jako że jednak uznałem, że wydanie kilku tysięcy złotych na Mac&#8217;a tylko po to, żeby mieć dobry edytor dla projektów Railsowych, mija się z celem, pracuję więc pod Windowsami i dla tego właśnie systemu przygotowałem zestawienie porównujące dostępne opcje dla środowisk programistycznych dla Ruby on Rails.<br />
Wraz z upływem czasu i rosnącym &#8220;zamieszaniem&#8221; wokół Rails (w pozytywnym tego słowa znaczeniu), rośnie również dostępna ilość edytorów. Stopniowo dołączają coraz bardziej znane marki i są tworzone coraz bardziej zaawansowane narzędzia. Jest więc w czym wybierać, w porównaniu choćby do okresu sprzed roku.</p>
<p align="justify">Ze wszystkich możliwych opcji dostępnych na dzień dzisiejszy pod Windows, zdecydowałem się wybrać cztery i przyjrzeć im się bliżej. Są to: <a href="http://www.aptana.com/" title="Aptana">Aptana / RadRails</a>, <a href="http://www.netbeans.org/" title="Netbeans">Netbeans</a>, <a href="http://www.e-texteditor.com" title="e texteditor">e</a> oraz <a href="http://www.activestate.com/Products/komodo_edit/" title="Komodo Edit">Komodo Edit</a>.<br />
Oto jakie wersje miałem zainstalowane podczas testowania:</p>
<ul>
<li>Aptana IDE build build 0.2.9.17048 (plugin RadRails 0.8.0.200707021211)</li>
<li>NetBeans Ruby IDE 20071020152017 (Ruby and Rails plugin v. 0.102.0)</li>
<li><strong>e</strong> v. 1.0.3</li>
<li>Komodo Edit, version 4.2.0, build 281898</li>
</ul>
<p align="justify">Po kolei, dlaczego akurat te:</p>
<ul>
<li>Aptana, bo wcześniej używałem i polubiłem RadRails. Niestety nie mogę stwierdzić, że od kiedy RadRails został przejęty przez Aptanę, wyszło to na korzyść dla tego pierwszego. Możliwe jednak, że z czasem dojdą do ładu i produkt będzie tylko coraz lepszy.</li>
<li>Netbeans, bo jest to prawie kompletne, rozbudowane i profesjonalne środowisko programistyczne, które ostatnio zauważyło Ruby i dość dynamicznie szlifuje swoje funkcje w tym kierunku.</li>
<li><strong>e</strong> (lub też &#8220;e texteditor&#8221;), bo jest to chyba najbardziej zbliżony &#8220;klon TextMate&#8217;a&#8221; pod Windows. Mimo iż jest płatne (po okresie testowym 30 dni licencja kosztuje $34,95)</li>
<li>Komodo, bo mimo iż może mniej znane, ale jest to szybkie i wygodne narzędzie dla projektów w Ruby.</li>
</ul>
<p align="justify">Dość dużym zainteresowaniem cieszy się też jEdit, ale miałem z nim zbyt dużo problemów dostosowując go do przynajmniej znośnej pracy w Rails, żeby poważnie rozważać jego kandydaturę, przynajmniej na tym etapie rozwoju. Poza tym jego wygląd naprawdę nie powala, a skoro mam wiele godzin dziennie patrzeć na to, co mam przed sobą na ekranie, to siłą rzeczy wolę, żeby był to twór jeśli nie piękny, to przynajmniej miły. Podobnie z kobietami - jak nie jest piękna, to niech chociaż będzie miła. jEdit niestety w mój gust nie trafił w żadnej z tych kategorii, więc nie ma go w tym zestawieniu.</p>
<p align="justify">Wracając więc do pięknych, miłych i czasami nawet posiadających obie cechy naraz. Poniżej zestawienie funkcji i właściwości każdej z czterech opcji. Nie jest to w żadnym wypadku kompletna lista możliwości w żadnym z czterech przypadków - jest tego o wiele, wiele więcej. Jednak te są moim zdaniem ważne pod tym względem, że - bardziej lub mniej - przyczyniają się do pożądanego efektu końcowego, jakim jest przyjemna, szybka i efektywna praca w miłym środowisku (tym razem nie ludzkim, a komputerowym).</p>
<p align="justify">Na Google Docs zamieściłem wersję również z angielskimi nazwami właściwości, na wypadek gdyby moje wysiłki tłumaczeniowe okazały się nie do końca jasne dla wszystkich. Oto link: <a href="http://spreadsheets.google.com/pub?key=p5oLDkASGsigsvkHLTR8eIA" title="Porównanie edytorów i IDE dla Ruby on Rails">Porównanie IDE / edytorów dla Ruby on Rails: Rails IDE</a>.</p>
<p><img src="http://blog.altsabon.com/wp-content/uploads/2007/10/porownanie_ide_ruby_on_rails.png" alt="Porównanie IDE i edytorów dla Ruby on Rails" align="middle" border="0" height="771" width="468" /></p>
<p align="justify">Po kolei więc podsumowanie, od &#8220;ostatniego miejsca&#8221; w tym zestawieniu.</p>
<ul>
<li><strong>Komodo Edit</strong></li>
</ul>
<p align="justify">Komodo Edit jest darmową wersją Komodo IDE ($295,00), jednak nawet wersja darmowa jest dostatecznie dobrym narzędziem, żeby móc polecić go ludziom zajmującym się Ruby on Rails. Może nie jest jeszcze najlepszym rozwiązaniem dla dużych i skomplikowanych projektów, ale dla mniejszych prac na pewno spełni pokładane w nim oczekiwania. Na jego korzyść na pewno przemawia szybkość działania. Stosunkowo prosty i niezaśmiecony interfejs również jest na plus. Możliwość definiowania własnych makr oraz spora ilość już dostępnych pozwala na dostosowanie go do swoich potrzeb. Ocena końcowa: 6. Dla mnie sporym minusem jest brak <em>snippets</em> (z braku polskiego odpowiednika, zostawiam angielską nazwę), który przy dłuższej pracy z Rails jednak daje się we znaki. Wygląd, mimo iż prosty i nienachalny, też mógłby być jednak trochę lepszy. Poniżej screeny wszystkich edytorów, więc można porównać.</p>
<ul>
<li><strong>Aptana / RadRails</strong></li>
</ul>
<p align="justify">Prosty w użyciu i w miarę szybki RadRails po przejęciu przez Aptanę trochę stracił na swojej prostocie, bo zostało dodane dużo moim zdaniem zbędnych rzeczy. Jednak jest to dosyć logiczne, zważając na fakt, że RadRails był przystosowany tylko do pracy z Rails, a Aptana to środowisko programistyczne dla dużo większej ilości języków i framework&#8217;ów. Mimo iż na tej zmianie RadRails sporo stracił, to jednak ciągle posiada większość swoich pozytywnych cech. Jeśli chodzi o wygląd, to brak motywów jest tu minusem (wolę pracować na ciemnym tle, więc wszędzie gdzie tylko można zmieniam wygląd - oczy się mniej męczą przy ciemnym tle, szczególnie w nocy). Możliwość dostosowania do swoich potrzeb jest dość spora, więc na upartego można zmusić, żeby Aptana pracowała tak, jak się chce. Ocena końcowa: 7.</p>
<ul>
<li><strong><em>e</em> i Netbeans</strong></li>
</ul>
<p align="justify">Obecnie pracuję w Ruby on Rails pół na pół, jeśli chodzi o edytory: połowę czasu (mniejsze projekty, szybkie zmiany, początkowe fazy) w <strong><em>&#8220;e&#8221;</em></strong>, połowę w Netbeans. Dlatego dałem równe oceny dla obu tych opcji.<br />
Za <strong><em>&#8220;e&#8221;</em></strong> przemawia jego prostota, szybkość działania, zintegrowanie z SVN (działające trochę bardziej intuicyjnie i prościej, niż w Netbeans), ciągły i szybki rozwój (co bardzo ważne), możliwość zaznaczania również kolumnowo (w pionie) i oczywiście <em>snippets</em>, które działają bardzo dobrze i są ciągle dodawane nowe.<br />
Netbeans natomiast jest według mnie środowiskiem najbliższym tego, żeby można go było nazwać kompletnym. Dobrze rozwiązna nawigacja pomiędzy poszczególnymi plikami (jej brak jest bardzo uciążliwy przy otwartej dużej ilości plików), dokumentacja dostępna bez wychodzenia z edycji (dostępna razem z funkcją autouzupełniania), <em>smart views</em> (podział na kontrolery, widoki, pliki konfiguracyjne itp. według ich funkcji, a nie struktury folderu), nawigacja w dokumencie i powiązanych z nim plikami oraz setki innych funkcji, które są dostępne, jeśli tylko dusza zapragnie.<br />
Na niekorzyść <em><strong>&#8220;e&#8221;</strong></em> może działać brak podświetlania błędów czy brak możliwości otworzenia kilku projektów jednocześnie, jednak jest to edytor, a nie IDE, więc nie jest to jego celem. W ciągu ostatnich kilku miesięcy od kiedy używam tego edytora, zmiany są wprowadzane szybko i jest ich sporo, więc komfort pracy z <em><strong>&#8220;e&#8221;</strong></em> rośnie.<br />
Minusem Netbeans jest szybkość. Często się zdarza, że nie jest &#8220;błyskawiczny&#8221; i trzeba trochę poczekać. Skutki Javy. Jest jednak również bardzo intensywnie rozwijany pod kątem Rails, więc jeśli chodzi o przyjemność użytkowania, ilość funkcji, poprawność ich działania i szybkość dodawania nowych, naprawdę warto mu się przyjrzeć i poważnie rozważyć jako swoje główne narzędzie w podbijaniu świata (oprócz umiejętności myślenia oczywiście, co już jednak wspominałem).</p>
<p align="justify">Narzędzia programistyczne są w naprawdę wielu smakach. Każdy lubi inny smak lodów, więc nie widzę dlaczego miałoby być inaczej z IDE. W efekcie końcowym liczy się to, czy dobrze się nam pracuje w tym czy innym środowisku. Radzę więc samemu przynajmniej na krótko wypróbować każdą z opcji i zdecydować się na tą, która będzie &#8220;najsmaczniejsza&#8221;.<br />
Poniżej - dla porównania - ilość RAM, jaką aktualnie zużywa wszystkie powyższe opcje na moim komputerze. Na ten wynik może wpływać wiele czynników, ale podaję poglądowo, przynajmniej dla zobaczenia jaki jest rząd wielkości. Każdy z edytorów ma otwartych około 10 dokumentów.<br />
<em>// Konfiguracja mojego komputera: 2 GB RAM, Intel Core2 1,83 GHz //</em></p>
<p><strong>Aptana:</strong> 130 MB<br />
<strong> Netbeans:</strong> 161 MB<br />
<strong>e:</strong> 28 MB<br />
<strong> Komodo:</strong> 88 MB</p>
<p>Poniżej screeny (dla tych, co nie chcą ściągać i instalować, a chcieliby obejrzeć). Wszystkie edytory miały ustawione domyślnie białe tło, ale jak już wspomniałem - wolę czarne i dbam o oczy, więc widać tego efekty.</p>
<p><a href="http://blog.altsabon.com/wp-content/uploads/2007/10/aptana_ide.png" title="Aptana IDE"><img src="http://blog.altsabon.com/wp-content/uploads/2007/10/aptana_ide_small.png" alt="Aptana IDE" align="absmiddle" border="0" height="147" width="220" /></a> <strong>Aptana IDE</strong></p>
<p><a href="http://blog.altsabon.com/wp-content/uploads/2007/10/e-texteditor.png" title="e texteditor"><img src="http://blog.altsabon.com/wp-content/uploads/2007/10/e-texteditor_small.png" alt="e texteditor" align="absmiddle" border="0" height="147" width="220" /></a> <strong>e texteditor</strong></p>
<p><a href="http://blog.altsabon.com/wp-content/uploads/2007/10/komodo.png" title="Komodo"><img src="http://blog.altsabon.com/wp-content/uploads/2007/10/komodo_small.png" alt="Komodo" align="absmiddle" border="0" height="147" width="220" /></a> <strong>Komodo Edit</strong></p>
<p><a href="http://blog.altsabon.com/wp-content/uploads/2007/10/netbeans_api.png" title="Netbeans API"><img src="http://blog.altsabon.com/wp-content/uploads/2007/10/netbeans_api_small.png" alt="Netbeans API" align="absmiddle" border="0" height="144" width="220" /></a> <strong>Netbeans API</strong></p>
<p align="justify">Jeśli macie jakieś inne godne uwagi edytory lub IDE dla Ruby on Rails albo nie zgadzacie się co do którychś moich stwierdzeń (co byłoby całkowicie logiczne, ja np. nie lubię lodów orzechowych albo truskawkowych), zapraszam do zostawienia swojej opinii w komentarzach.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/Sabon?a=guCLicA"><img src="http://feeds.feedburner.com/~f/Sabon?i=guCLicA" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/Sabon?a=74B6sja"><img src="http://feeds.feedburner.com/~f/Sabon?i=74B6sja" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Sabon/~4/173524004" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.altsabon.com/porownanie-ide-edytorow-dla-ruby-on-rails/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.altsabon.com/porownanie-ide-edytorow-dla-ruby-on-rails/</feedburner:origLink></item>
		<item>
		<title>Powody, dla których zostałem freelancerem</title>
		<link>http://feeds.feedburner.com/~r/Sabon/~3/170894759/</link>
		<comments>http://blog.altsabon.com/powody-dla-ktorych-zostalem-freelancerem/#comments</comments>
		<pubDate>Wed, 17 Oct 2007 00:44:58 +0000</pubDate>
		<dc:creator>Sabon</dc:creator>
		
		<category><![CDATA[Freelancing]]></category>

		<guid isPermaLink="false">http://blog.altsabon.com/powody-dla-ktorych-zostalem-freelancerem/</guid>
		<description><![CDATA[Jak wskazuje sam tytuł, wcześniej freelancerem nie byłem. Owo &#8220;wcześniej&#8221; znaczy w moim przypadku około dwóch miesięcy. Do tego czasu moja tzw. ścieżka kariery przebiegała może niezbyt typowo, ale też nie odbiegając daleko od średniej statystycznej, z zaznaczeniem, że jest to średnia statystyczna dla studentów z dużych uczelni.
 Otóż najpierw były studia (przez czas najdłuższy [...]]]></description>
			<content:encoded><![CDATA[<p align="justify"><img src="http://blog.altsabon.com/wp-content/uploads/2007/10/freelance-badz-inny1.jpg" alt="Bądź inny" align="right" border="1" height="228" width="220" />Jak wskazuje sam tytuł, wcześniej freelancerem nie byłem. Owo &#8220;wcześniej&#8221; znaczy w moim przypadku około dwóch miesięcy. Do tego czasu moja tzw. ścieżka kariery przebiegała może niezbyt typowo, ale też nie odbiegając daleko od średniej statystycznej, z zaznaczeniem, że jest to średnia statystyczna dla studentów z dużych uczelni.</p>
<p align="justify"> Otóż najpierw były studia (przez czas najdłuższy jak to tylko możliwe).</p>
<p align="justify">Później praca pierwsza → praca druga → praca kolejna.<br />
Płaca niska → płaca średnia → płaca bardzo dobra.</p>
<p align="justify"> Na dodatek wszystkie prace bez jakiegokolwiek bezpośredniego związku z komputerami oprócz nieśmiertelnych Power Pointów i oczywiście szczytu zaawansowania technologicznego – tabel przestawnych w Excelu.<br />
Podczas pierwszej wizyty w centrali jednej z korporacji gdy chciałem się przedstawić i normalnie opowiedzieć kilka zdań o sobie, usłyszałem “Do you have a presentation for that?”. Na początku przyjąłem to jako średnich lotów żart, ale później się okazało, że byłem chyba pierwszy, który “zaprezentował swoją osobę” bez użycia prezentacji w Power Poincie.</p>
<p align="justify">Mimo jednak faktu, że wszystkie poprzednie miejsca pracy nie były związane z IT, ciągle robiłem swoje po godzinach pracy. W tym przypadku swoje = wachlowanie kodem, tworzenie mniej lub bardziej użytecznych programów / serwisów, obmyślanie koncepcji na następny “killer-app” itp.</p>
<p align="justify">Dostatecznie długi czas minął i dostatecznie wiele niesamowitych pomysłów nie zrealizowałem, żeby zacząć myśleć o tym, żeby jednak poważniej podejść do tematu. Każdy kolejny niezrealizowany pomysł (brak czasu, zbyt duże wymagane nakłady pracy na realizację po godzinach, świat poza pracą i monitorem, który jest na tyle nęcący, że się domaga trochę więcej niż tylko paru godzin na dobę) pchał mnie coraz bardziej ku decyzji, która zapadła te parę miesięcy temu.<br />
Oprócz tego, było też kilka innych, równie kluczowych elementów:</p>
<ul>
<li>Rutyna – po pół roku w każdej dotychczasowej firmie ilość nowych rzeczy do poznania, nauczenia się, zastosowania, spada praktycznie do prawie niezauważalnego minimum.</li>
<li>Poniedziałkowe poranki – uczucie skazańca idącego na stos (albo przynajmniej przestępcy wracającego z przepustki) zaczynając nowy tydzień.</li>
<li>Poczucie robienia “czegoś ważniejszego, czegoś, co ma znaczenie”. A raczej jego brak.</li>
<li>W związku z powyższym – odczucie, że się powinno być całkiem gdzie indziej (patrz rys. 1).</li>
<li>No i patrząc z perspektywy dnia dzisiejszego, mogę z pewnością potwierdzić, że jeden z najważniejszych powodów to chęć zmiany ścieżki A-B na ścieżkę A-C (patrz rys. 2). Udało się bezbłędnie.</li>
</ul>
<p align="justify">A już po uczynieniu kroku milowego, trzeba było sobie odpowiedzieć na pytanie: “co dalej?”.<br />
Pytanie bardzo ważne, ale też niemożliwe do przewidzenia w danym momencie. Z grubsza dróg jest kilka:</p>
<ul>
<li> Freelancing na pełen etat</li>
<li>Założenie własnej firmy na podstawie jednego z pomysłów na “killer-app”</li>
<li>Rozwijanie stopniowo pomysłu numer dwa, zarabiając przy tym na to poprzez częściową realizację planu numer jeden.</li>
</ul>
<p align="justify"> Wybrałem plan trzeci i tego się na razie trzymam.</p>
<p align="left"><img src="http://blog.altsabon.com/wp-content/uploads/2007/10/freelance-alarm-clock.jpg" alt="Freelance - budzik" align="left" border="0" height="197" width="320" /><strong>“W kolejnym odcinku”…</strong><br />
…będzie mniej historii, a więcej praktyki (jeśli będzie to artykuł o Ruby on Rails) lub analizy (jeśli będzie o startupach).</p>
<p align="justify">PS. Teraz w poniedziałek rano jak włączam radio i słyszę jak prowadzący/a współczuje wszystkim, bo jest właśnie “poniedziałek rano”, to wreszcie nie rozumiem o co mu/jej chodzi (patrz rys. 1, 2)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/Sabon?a=3dknuBRO"><img src="http://feeds.feedburner.com/~f/Sabon?i=3dknuBRO" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/Sabon?a=VTRMep4x"><img src="http://feeds.feedburner.com/~f/Sabon?i=VTRMep4x" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Sabon/~4/170894759" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.altsabon.com/powody-dla-ktorych-zostalem-freelancerem/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.altsabon.com/powody-dla-ktorych-zostalem-freelancerem/</feedburner:origLink></item>
		<item>
		<title>Był sobie chłopiec…</title>
		<link>http://feeds.feedburner.com/~r/Sabon/~3/169593225/</link>
		<comments>http://blog.altsabon.com/byl-sobie-chlopiec/#comments</comments>
		<pubDate>Sun, 14 Oct 2007 02:35:45 +0000</pubDate>
		<dc:creator>Sabon</dc:creator>
		
		<category><![CDATA[Ogólne]]></category>

		<guid isPermaLink="false">http://blog.altsabon.com/byl-sobie-chlopiec/</guid>
		<description><![CDATA[ &#8230;a przynajmniej chłopiec z punktu widzenia iluzorycznej i enigmatycznej &#8220;blogosfery&#8221;. Chłopcem był, bo w owej blogosferze nie uczestniczył, czyli że bloga swego nie posiadał.
I nie z chęci stania się &#8220;mężczyzną&#8221;, ani też z naśladownictwa, jednak od dzisiaj powstaje nowy twór blogosferowy (nigdy nie lubiłem tego słowa, więc będę ograniczał jego uzywanie do minimum). Z [...]]]></description>
			<content:encoded><![CDATA[<p align="justify"><img src="http://blog.altsabon.com/wp-content/uploads/2007/10/sabon-start.jpg" alt="Sabon - Start" align="left" border="1" height="300" width="200" /> &#8230;a przynajmniej chłopiec z punktu widzenia iluzorycznej i enigmatycznej &#8220;blogosfery&#8221;. Chłopcem był, bo w owej blogosferze nie uczestniczył, czyli że bloga swego nie posiadał.<br />
I nie z chęci stania się &#8220;mężczyzną&#8221;, ani też z naśladownictwa, jednak od dzisiaj powstaje nowy twór blogosferowy (nigdy nie lubiłem tego słowa, więc będę ograniczał jego uzywanie do minimum). Z potrzeby ustruktyruzowania swoich przemyśleń, skrystalizowania przemyśleń i chęci skonfrontowania ich z szerszym gronem.</p>
<p align="justify">Na tym blogu mam zamiar umieszczać treści w przeważającej mierze z trzech dziedzin:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Freelancing_on_the_Internet" title="Wikipedia: Freelancing"> Freelancing</a></li>
<li><a href="http://en.wikipedia.org/wiki/Startup" title="Wikipedia: Startup">Startupy</a></li>
<li><a href="http://www.rubyonrails.com" title="Ruby on Rails">Ruby on Rails</a></li>
</ul>
<p align="justify">Dlaczego akurat te tematy?<br />
Po kolei:</p>
<ul>
<li>Freelancing, bo jestem freelancerem. Świeżo upieczonym (parę miesięcy) jeśli chodzi o &#8220;full time&#8221;, ale dość długo już działającym, jeśli chodzi o &#8220;part time&#8221;.</li>
<li>Startupy, bo oprócz bycia freelancerem pracuję też nad swoim(i) projektem(ami), co w przyszłości może się przerodzić w nowy startup (wizja optymalna) bądź nie dożyć do tego etapu (wizja katastrofalna).</li>
<li>Ruby on Rails, bo w tym właśnie się specjalizuję i w tym robię swoje projekty.</li>
</ul>
<p align="justify">Nie będę poruszać zaś tematów, na których się nie znam bądź też z którymi nie miałem bezpośredniej styczności na tyle, by wyrobić sobie o nich zdanie.<br />
Nie mam też zamiaru tylko i wyłącznie tłumaczyć na polski tego, co się pojawia w sieci po angielsku. Mieszkam w Polsce (Wrocław), tutaj pracuję, więc będę się na tym właśnie skupiał. Trendy światowe są dla mnie interesujące na tyle, na ile dotykają i wpływają na polskie realia. Często te wpływy są pośrednie i oddziaływujące w bardzo inny sposób, niż na swoim macierzystym rynku anglojęzycznym.</p>
<p align="justify">Jeśli zaś chodzi o blogi i język angielski, to nasuwa się od razu skojarzenie związane i z jednym i z drugim: &#8220;content is king&#8221;. Król jednak nagi chodzić nie powinien. To nic, że nader często tak właśnie paraduje, ale jednak nie powinien. Żeby go trochę oblec w szaty, poniżej zapowiedź pierwszych dziesięciu artykułów, jakie się pojawią na tym blogu. Jak już wszystkie 10 będzie online, to może nie będzie to jeszcze król, a zaledwie zaściankowy szlachcic czy pośledni książę i może nie będzie miał przepysznych szat, ale przynajmniej nie powinien mieć czego się wstydzić i będzie mógł wyjść do ludzi bez świecenia oczami.<br />
A oto i artykuły, wraz z kategoriami, do których będą przypisane:</p>
<ol>
<li>Przyszłość startupów internetowych w Polsce (startupy)</li>
<li>Znaczenie lokalizacji geograficznej startupów (startupy)</li>
<li>Znaczenie zasięgu rynku docelowego startupu (lokalny / globalny) (startupy)</li>
<li><a href="http://blog.altsabon.com/porownanie-ide-edytorow-dla-ruby-on-rails/" title="Edytory i IDE dla Ruby on Rails">Porównanie IDE / edytorów dla Ruby on Rails</a> (Ruby on Rails)</li>
<li><a href="http://blog.altsabon.com/ruby-on-rails-analiza-swot/" title="Ruby on Rails: analiza SWOT">Analiza SWOT dla Rails w Polsce i na świecie</a> (Ruby on Rails)</li>
<li>Ataki SQL injection <strike>Iniekcja SQL</strike> w aplikacjach Rails (Ruby on Rails)</li>
<li>Możliwość wypromowania się będąc freelancerem (freelance)</li>
<li>Nabycie i utrzymanie potrzebnych umiejętności (freelance)</li>
<li><a href="http://blog.altsabon.com/powody-dla-ktorych-zostalem-freelancerem/" title="Powody, dla których zostałem freelancerem">Powody, dla których zostałem freelancerem (freelance)</a></li>
<li><a href="http://blog.altsabon.com/dlaczego-powstaje-malo-serwisw-mimo-ciagle-zmniejszajacej-sie-bariery-wejscia/">Dlaczego powstaje stosunkowo mało serwisów mimo ciągle zmniejszającej się bariery wejścia</a> (freelance / startup / Ruby on Rails)</li>
</ol>
<p align="justify">Artykuły te będą się ukazywać niekoniecznie w takiej kolejności jak powyżej, ale na pewno każdy z tych tematów zostanie poruszony.<br />
Żeby nie przegapić tego, który Cię interesuje, najlepiej od razu <a href="http://blog.altsabon.com/feed/">subskrybuj RSS</a> i wtedy na pewno nic Cię nie ominie.</p>
<p align="justify">/ AD 2007 / Sabon (Radek Sienkiewicz) /</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/Sabon?a=zIYHxRad"><img src="http://feeds.feedburner.com/~f/Sabon?i=zIYHxRad" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/Sabon?a=bmE0kqCJ"><img src="http://feeds.feedburner.com/~f/Sabon?i=bmE0kqCJ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Sabon/~4/169593225" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.altsabon.com/byl-sobie-chlopiec/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.altsabon.com/byl-sobie-chlopiec/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 1.430 seconds -->
