<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.2.1" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>Sebastian Bobrowski</title>
	<link>http://www.bobrowski.org.pl</link>
	<description>web developer, php, ruby, ruby on rails, html, css</description>
	<pubDate>Sun, 22 Nov 2009 10:50:59 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.1</generator>
	<language>en</language>
			<item>
		<title>Dwa monitory w Ubuntu 9.10</title>
		<link>http://www.bobrowski.org.pl/dwa-monitory-w-ubuntu-910/</link>
		<comments>http://www.bobrowski.org.pl/dwa-monitory-w-ubuntu-910/#comments</comments>
		<pubDate>Sun, 22 Nov 2009 10:50:59 +0000</pubDate>
		<dc:creator>Sebastian Bobrowski</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.bobrowski.org.pl/dwa-monitory-w-ubuntu-910/</guid>
		<description><![CDATA[Od paru dni testuje ubuntu 9.10. Zainstalowałem z płyty wersję 8.10, która ładnie się zaktualizowała do 9.04. Wbudowany aktualizator pobrał 230 MB danych, zainstalował wszystko w około 30 minut i działa bez problemu. Następnie chciałem zaktualizować do najnowszej wersji czyli 9.10. Droga ta sama, 640 MB do pobrania, około 40 minut instalacji i działa. Według [...]]]></description>
			<content:encoded><![CDATA[<p>Od paru dni testuje ubuntu 9.10. Zainstalowałem z płyty wersję 8.10, która ładnie się zaktualizowała do 9.04. Wbudowany aktualizator pobrał 230 MB danych, zainstalował wszystko w około 30 minut i działa bez problemu. Następnie chciałem zaktualizować do najnowszej wersji czyli 9.10. Droga ta sama, 640 MB do pobrania, około 40 minut instalacji i działa. Według <a href="http://linuxnews.pl/ubuntu-9-04-9-10-update-to-ciezka-przeprawa/">linuxnews</a> jestem w gronie 10% szczęśliwców którym udało się to bez problemu. Całość instalowana na hp nx7300.</p>
<p>Kolejną kwestią z jaką chciałem sobie poradzić było podłączenie drugiego monitora. W windowsie przy zainstalowanych sterownikach do karty graficznej odbywa się to od ręki. Na ubuntu 9.10 podłączyłem i też serwer xów od razu zobaczył  drugi monitor.</p>
<p>W menu <em>System -&gt; Preferencje -&gt; Ekran</em> jest podstawowe menu do zarządzania. Z jego poziomu można ustawić położenie monitorów, ich rozdzielczości i częstotliwość odświeżania. Wszystko działało bez zarzutów do momentu ustawienia na laptopie rozdzielczości nie wyższej niż 1024&#215;768 i monitorze 800&#215;600. Na codzień pracuje 2 razy 1280&#215;1024 zatem działające tutaj rodzielczości są za małe. Po chwili googlania nie znalazłem nic ciekawego i postanowiłem przeglądnąć ustawienia ekranów w gnome . Okazało się że rozwiązaniem jest wyłączenie efektów wizualnych. W systemie mamy 3 poziomy efektów:</p>
<ul>
<li><strong>Brak</strong>: Zwykłe środowisko pulpitu, bez efektów wizualnych</li>
<li><strong>Normalne</strong>: Lepsze funkcje użytkowe i dobra równowaga między atrakcyjnością wyglądu a wymaganiami sprzętowymi</li>
<li><strong>Dodatkowe</strong>: Zestaw bardziej estetycznych efektów</li>
</ul>
<p>Domyślnie jest ustawione na Normalne. Wystarczy ustawić na <em>Brak</em> i wszystko działa od ręki.Drugi monitor działa bez problemu w maksymalnej rodzielczości</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bobrowski.org.pl/dwa-monitory-w-ubuntu-910/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Prawn i prawnto - dlaczego jestem przeciw?</title>
		<link>http://www.bobrowski.org.pl/prawn-i-prawnto-dlaczego-jestem-przeciw/</link>
		<comments>http://www.bobrowski.org.pl/prawn-i-prawnto-dlaczego-jestem-przeciw/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 18:13:57 +0000</pubDate>
		<dc:creator>Sebastian Bobrowski</dc:creator>
		
		<category><![CDATA[Ruby On Rails początki]]></category>

		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.bobrowski.org.pl/prawn-i-prawnto-dlaczego-jestem-przeciw/</guid>
		<description><![CDATA[Jednym z elementów programu do faktur, nad którym pracuje jest generowanie wielu rodzajów pdfów, od faktur vat, przez korygujące aż po zestawienia faktur miesięcznie, kwartalne, roczne.Nie ukrywam, że na początku przysparzało to sporo problemów. Głównym z nich były tabelki, które stanowią trzon każdego z powyższych dokumentów.  Przy nowej odsłonie pdfów chciałem wykorzystać bibliotekę Prawn wraz z pluginem PrawnTo za namową reklamy [...]]]></description>
			<content:encoded><![CDATA[<p>Jednym z elementów <a href="http://www.infakt.pl">programu do faktur</a>, nad którym pracuje jest generowanie wielu rodzajów pdfów, od faktur vat, przez korygujące aż po zestawienia faktur miesięcznie, kwartalne, roczne.Nie ukrywam, że na początku przysparzało to sporo problemów. Głównym z nich były tabelki, które stanowią trzon każdego z powyższych dokumentów.  Przy nowej odsłonie pdfów chciałem wykorzystać bibliotekę <a href="http://prawn.majesticseacreature.com/">Prawn</a> wraz z pluginem <a href="http://www.cracklabs.com/prawnto">PrawnTo</a> za namową <a href="http://railscasts.com/episodes/153-pdfs-with-prawn">reklamy na railscasts</a>. W przykładach wszystko wygląda dobrze, pare lini kodu i działa. Jednak problemy zaczynają się przy:
<ul>
<li>większej ilości tekstu</li>
<li>numeracji poszczególnych stron</li>
</ul>
<p>Autorzy nie przewidzieli dobrej obsługi sytuacji gdy tekst umieszczony w komórce tabeli nie mieści się w jednym wierszu i musi zostać przeniesiony do kolejnych. Pozostawienie automatycznej konfiguracji dawało bardzo kiepskie rezulataty. Oczywiście można też samodzielnie liczyć szerokość każdego z wyrazów i dzielić je w razie potrzeby, gdy nie mieszczą się w jednym wierszu. Jednak obsługa szerokości znaków polskich nie działała poprawnie.Zdedydowanie gorszą sprawą, było numerowanie poszczególnych stron. O ile wersja podstawowa działała bez problemu, bo wystarczało zwiększać licznik wraz z każdą nową stroną to innej wersje są nieosiągalne. Próbowałem najbardziej popularną wersją obecną w dokumentach np: strona 2/7. Jest to konieczne dla wszystkich sprawdzających i czytających aby mieli pewność, że żadana ze stron nie zaginęła. Pytałem o tą sprawę na forum i kanale irc projektu jednak od autora biblioteki otrzymałem odpowiedź: &#8220;Nie da się :)&#8221;. Podobno mechanizm zamykania stron jest dość dziwny tzn, aby otworzyć nową stronę trzeba zamknąć poprzednią, a raz zamknięta strona nie może być ponownie otworzona. Takie rozwiązanie kompletnie wyklucza moją funkcjonalność. Autor próbował mi pomóc, ale razem doszliśmy do wniosku, że najłatwiejszym i najszybszym (tylko do implementacji) sposobem będzie:
<ol>
<li>generowanie dokumentu</li>
<li>zliczanie jego stron</li>
<li>generowanie ponownie dokumentu znając już całkowitą liczbę stron z pierwszego punktu</li>
</ol>
<p>Jednak to rozwiązanie nie bardzo przypadło mi do gustu z uwagi na to, że dokumenty już dość długo się generowały (parę sekund), a w wersji produktcyjnej pewnie zrobi się z tego około 10 z uwagi na dużo większą ilość danych.</p>
<p><strong>Podsumowanie:</strong>Prawn polecam do prostych dokumentów takich jak prosta lista czy <em>prawie</em> pusta tabelka. Wtedy używa się tego bardzo przyjemnie. Jednak do bardziej wymagających zadań wciąż niezastąpione jest rfpdf.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bobrowski.org.pl/prawn-i-prawnto-dlaczego-jestem-przeciw/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Wykrywanie schametów kodowania znaków</title>
		<link>http://www.bobrowski.org.pl/wykrywanie-schametow-kodowania-znakow/</link>
		<comments>http://www.bobrowski.org.pl/wykrywanie-schametow-kodowania-znakow/#comments</comments>
		<pubDate>Sat, 05 Sep 2009 19:22:31 +0000</pubDate>
		<dc:creator>Sebastian Bobrowski</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.bobrowski.org.pl/wykrywanie-schametow-kodowania-znakow/</guid>
		<description><![CDATA[Jednoznaczne określenie schematu kodowania danego łańcucha znaków jest dość trudne. Schematy wielobajtowe wykazują pewne wzorce, które możemy wykrywać i na ich podstawie domniemywać o schemacie kodowania. Pozostają schematy kodowania jednobajtowe które są znacznie trudniejsze. Możemy próbować podejść od strony statystycznej ale przy krótkim łańcuchu nie daje to dobrych efektów.W większość sytuacji pierwszym krokiem przy rozpoznawaniu [...]]]></description>
			<content:encoded><![CDATA[<p>Jednoznaczne określenie schematu kodowania danego łańcucha znaków jest dość trudne. Schematy wielobajtowe wykazują pewne wzorce, które możemy wykrywać i na ich podstawie domniemywać o schemacie kodowania. Pozostają schematy kodowania jednobajtowe które są znacznie trudniejsze. Możemy próbować podejść od strony statystycznej ale przy krótkim łańcuchu nie daje to dobrych efektów.W większość sytuacji pierwszym krokiem przy rozpoznawaniu jest odpowiedź na pytanie: &#8220;Czy jest to uft8?&#8221;. Jeśli tak to jesteśmy w domu, jeśli nie sprawa staje się bardziej skomplikowana. Najprostszą metodą rozpoznania jest uzycie metody unpack, która rzuca wyjątek w sytuacji kiedy nie otrzymuje prawidłowego łańcucha na wejściu.<br />
<blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px" class="webkit-indent-blockquote">class String<span style="white-space: pre" class="Apple-tab-span">	</span></p></blockquote>
<blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px" class="webkit-indent-blockquote"><p><span style="white-space: pre" class="Apple-tab-span"></span><span class="Apple-tab-span" style="white-space: pre">	</span>def utf8?<span style="white-space: pre" class="Apple-tab-span">		</span></p></blockquote>
<blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px" class="webkit-indent-blockquote"><p><span style="white-space: pre" class="Apple-tab-span"></span><span class="Apple-tab-span" style="white-space: pre">		</span>unpack(&#8217;U*&#8217;)  rescue return false<span style="white-space: pre" class="Apple-tab-span">	</span></p></blockquote>
<blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px" class="webkit-indent-blockquote"><p><span style="white-space: pre" class="Apple-tab-span"></span><span class="Apple-tab-span" style="white-space: pre">	</span>end</p></blockquote>
<blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px" class="webkit-indent-blockquote"><p>end</p></blockquote>
<blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px" class="webkit-indent-blockquote"></blockquote>
<p>W prosty sposób można też sprawdzać czy łańcuch składa się tylko ze znaków ASCII<br />
<blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px" class="webkit-indent-blockquote">class String<span style="white-space: pre" class="Apple-tab-span">	</span><span style="white-space: pre" class="Apple-tab-span">	</span></p></blockquote>
<blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px" class="webkit-indent-blockquote"><p><span style="white-space: pre" class="Apple-tab-span"></span><span style="white-space: pre" class="Apple-tab-span">	</span>def ascii?</p></blockquote>
<blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px" class="webkit-indent-blockquote"><p><span style="white-space: pre" class="Apple-tab-span">		</span>self.split(/./).all? {|ch| ch&lt;128}<span style="white-space: pre" class="Apple-tab-span">	</span><span style="white-space: pre" class="Apple-tab-span">	</span></p></blockquote>
<blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px" class="webkit-indent-blockquote"><p><span style="white-space: pre" class="Apple-tab-span"></span><span style="white-space: pre" class="Apple-tab-span">	</span>end</p></blockquote>
<blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px" class="webkit-indent-blockquote"><p>end</p></blockquote>
<blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px" class="webkit-indent-blockquote"></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.bobrowski.org.pl/wykrywanie-schametow-kodowania-znakow/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Kodowanie stringów różnymi schematami - jak radzić sobię z konwersją?</title>
		<link>http://www.bobrowski.org.pl/kodowanie-stringow-roznymi-schamatami-jak-radzic-sobie-z-konwersja/</link>
		<comments>http://www.bobrowski.org.pl/kodowanie-stringow-roznymi-schamatami-jak-radzic-sobie-z-konwersja/#comments</comments>
		<pubDate>Sun, 19 Apr 2009 19:58:03 +0000</pubDate>
		<dc:creator>Sebastian Bobrowski</dc:creator>
		
		<category><![CDATA[Ruby On Rails początki]]></category>

		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.bobrowski.org.pl/kodowanie-stringow-roznymi-schamatami-jak-radzic-sobie-z-konwersja/</guid>
		<description><![CDATA[Często się zdarza, że pracując z aplikacją mamy do czynienia z różnymi schematami kodowania, a to jedna z bibliotek jest w ISO-8859-2 albo api innej aplikacji, z którą mamy się integrować jest w cp-1250. Wtedy powstaje problem zmiany schematu kodowania danego łańcucha znaków.
Większość programistów spotkała się oczywiście z Iconv, jednak  zwykle tylko w najprostszym przypadku [...]]]></description>
			<content:encoded><![CDATA[<p>Często się zdarza, że pracując z aplikacją mamy do czynienia z różnymi schematami kodowania, a to jedna z bibliotek jest w ISO-8859-2 albo api innej aplikacji, z którą mamy się integrować jest w cp-1250. Wtedy powstaje problem zmiany schematu kodowania danego łańcucha znaków.</p>
<p>Większość programistów spotkała się oczywiście z <em>Iconv</em>, jednak  zwykle tylko w najprostszym przypadku użycia:</p>
<p>string_iso = Iconv.new(&#8221;ISO-8859-2&#8243;,&#8221;UTF-8&#8243;).iconv(string_utf_8)</p>
<p>W sytuacji, kiedy biblioteka napotyka znak, który nie wie jak przekodować wtedy zgłasza błąd. Aby zignorować ten błąd i nadal prowadzić proces przekodowywania należy użyć przełącznika <strong>//IGNORE</strong>.</p>
<p>string_iso = Iconv.new(&#8221;ISO-8859-2//IGNORE&#8221;,&#8221;UTF-8&#8243;).iconv(stron_utf_8)</p>
<p>Często możemy również potrzebować usunąć problemowe znaki z samego łańcucha bez potrzeby zmieniania jego zestawu kodowania na inny. Można to zrobić w następujący sposób:</p>
<p>nice_string = Iconv.new(&#8221;ISO-8859-2//IGNORE&#8221;,&#8221;ISO-8859-2&#8243;).iconv(string_with_problems)</p>
<p>Biblioteka Iconv daje nam jednak większe możliwości niż tylko przekodowywanie istniejących znaków lub usuwanie nie pasujących. Można również próbować zmusić ją do poszukiwania zbliżonych odpowiedników problemowych znaków przez zastosowanie przełącznika <strong>//TRANSLIT</strong>.</p>
<p>new_string = Iconv.new(&#8221;ISO-8859-2//TRANSLIT&#8221;,&#8221;UTF-8&#8243;).iconv(old_string)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bobrowski.org.pl/kodowanie-stringow-roznymi-schamatami-jak-radzic-sobie-z-konwersja/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Czcionki do generowanie pdfa przez bibliotekę rfpdf</title>
		<link>http://www.bobrowski.org.pl/czcionki-do-generowanie-pdfa-przez-biblioteke-rfpdf/</link>
		<comments>http://www.bobrowski.org.pl/czcionki-do-generowanie-pdfa-przez-biblioteke-rfpdf/#comments</comments>
		<pubDate>Sun, 19 Apr 2009 19:37:10 +0000</pubDate>
		<dc:creator>Sebastian Bobrowski</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.bobrowski.org.pl/czcionki-do-generowanie-pdfa-przez-biblioteke-rfpdf/</guid>
		<description><![CDATA[Zamieszczam długo oczekiwane czcionki do generowania pdfów.
arial.afm
arial.pfb
arial.rb
arial.z
arialbd.afm
arialbd.pfb
arialbd.rb
arialbd.ttf
arialbd.z 
]]></description>
			<content:encoded><![CDATA[<p>Zamieszczam długo oczekiwane czcionki do generowania pdfów.</p>
<p><a href="/files/arial.afm">arial.afm</a></p>
<p><a href="/files/arial.pfb">arial.pfb</a></p>
<p><a href="/files/arial.rb">arial.rb</a></p>
<p><a href="/files/arial.z">arial.z</a></p>
<p><a href="/files/arialbd.afm">arialbd.afm</a></p>
<p><a href="/files/arialbd.pfb">arialbd.pfb</a></p>
<p><a href="/files/arialbd.rb">arialbd.rb</a></p>
<p><a href="/files/arialbd.ttf">arialbd.ttf</a></p>
<p><a href="/files/arialbd.z">arialbd.z </a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bobrowski.org.pl/czcionki-do-generowanie-pdfa-przez-biblioteke-rfpdf/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rozszerzenie możliwości urli w Ruby On Rails - separatory</title>
		<link>http://www.bobrowski.org.pl/rozszerzenie-mozliwosci-urli-w-ruby-on-rails-separatory/</link>
		<comments>http://www.bobrowski.org.pl/rozszerzenie-mozliwosci-urli-w-ruby-on-rails-separatory/#comments</comments>
		<pubDate>Sat, 20 Dec 2008 21:30:05 +0000</pubDate>
		<dc:creator>Sebastian Bobrowski</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.bobrowski.org.pl/rozszerzenie-mozliwosci-urli-w-ruby-on-rails-separatory/</guid>
		<description><![CDATA[Ostatnio szukając nowego rodzaju adresów url rozpracowałem bardziej w mechanizm który używamy w routes.rb. Problem jaki napotkałem polegał na przebudowie standardowego modeli adresów (domena.pl/kontroler/metoda/id) na inny bardziej odpowiadający potrzebom serwisu.
Już dość dawno temu dowiedziałem się od znajomych z #rubyonrails.pl, że jest możliwość użycia symbolu jako elementu adresu np:
map.connect &#8216;:par1/:par2&#8242;, :controller=&#62;&#8221;test&#8221;, :action=&#62;&#8221;first_test&#8221;
teraz wszystkie żądania przychodzące w [...]]]></description>
			<content:encoded><![CDATA[<p>Ostatnio szukając nowego rodzaju adresów url rozpracowałem bardziej w mechanizm który używamy w routes.rb. Problem jaki napotkałem polegał na przebudowie standardowego modeli adresów (domena.pl/kontroler/metoda/id) na inny bardziej odpowiadający potrzebom serwisu.</p>
<p>Już dość dawno temu dowiedziałem się od znajomych z #rubyonrails.pl, że jest możliwość użycia symbolu jako elementu adresu np:</p>
<blockquote><p>map.connect &#8216;:par1/:par2&#8242;, :controller=&gt;&#8221;test&#8221;, :action=&gt;&#8221;first_test&#8221;</p></blockquote>
<p>teraz wszystkie żądania przychodzące w postaci dwóch parametrów będą &#8220;lądować&#8221; w metodzie first_test.</p>
<p>Jeśli traktować adres jako element nawigacji serwisu, tzn na podstawie adresu widzimy, gdzie się w tym momencie znajdujemy np:</p>
<blockquote><p>domena.pl/kategoria1/kategoria2</p></blockquote>
<p>to występują dwa problemy:</p>
<p>1. Przy nie bardzo prostym serwisie otrzymujemy dużą ilość poziomów - 4 i więcej , co by przekładało się na dość długi i skomplikowany adres.</p>
<p>2. Przy listowaniu rekordów wchodzi w grę paginacja. Ja używałem dotychczas chyba najbardziej popularnego do tego pluginu jakim jest <a href="http://github.com/mislav/will_paginate/tree/master">will_paginate</a>. Jednak w tej sytuacji domyślnie dostajemy niezbyt ładny adres postaci:</p>
<blockquote><p>domena.pl/kategoria1/kategoria2?page=11</p></blockquote>
<p>Rozwiązaniem tych problemów byłoby rozbudowanie poszczególnych poziomów adresu, jak również wcielenie numeru strony z paginacji w naturalny sposób do adresu. Na podstawie  domyślnych ustawień parametry adresu są rozdzielane przez:</p>
<p>1. /</p>
<p>2. .</p>
<p>3. ?</p>
<p>Elementu pierwszego już użyliśmy, drugi odpada ponieważ kojarzy się z rozszerzeniem (*.html, *.htm), natomiast trzeci wygląda za bardzo dynamicznie. Na podstawie analizy adresów url innych większych serwisów zauważyłem separowanie elementów adresu przez przecinki. Oczywiście w Ruby On Rails można to robić prosto z poziomu kontrolera i rozdzielania w nim poszczególnych elementów parametrów jakie przychodzą, jednak ta metoda wydaje się co najmniej mało błyskotliwa. Ponadto logika wskazuje, że rozdzielenie powinno się odbyć na poziomie rutingu aplikacji, zatem powinno być ustawione w pliku routes.rb. Jednak rozdzielenie postaci:</p>
<blockquote><p> map.connect &#8216;:par1,:par2&#8242;, :controller=&gt;&#8221;test&#8221;, :action=&gt;&#8221;first_test&#8221;</p></blockquote>
<p>nie działa. Rozwiązaniem problemów jest rozszerzenie separatorów o dodatkowe znaki:</p>
<blockquote><p>module ActionController<br />
module Routing<br />
SEPARATORS = %w( / ; . , ? )<br />
end<br />
end</p></blockquote>
<p>Wpis ten powinien nastąpić przed rysowaniem mapy adresów url (ActionController::Routing::Routes.draw) w routes.rb .Efektem tego jest możliwość rozszerzania ilości parametrów w adresie url nie tylko oddzielając je znakami / . ? ale również średnikami i przecinkami. Zatem teraz wpis:</p>
<blockquote><p>map.connect &#8220;:kategoria1,podkategoria11/detal&#8221;, :controller =&gt; &#8220;show&#8221;, :action=&gt;&#8221;detail&#8221;</p></blockquote>
<p>jest w pełni zrozumiały przez aplikacji railsową. Ponadto paginację można zrealizować na przykład przez:</p>
<p>domena.pl/kategoria1/kategoria2,11</p>
<p>co robi niewątpliwie lepsze wrażenie niż wersja z pytajnikami.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bobrowski.org.pl/rozszerzenie-mozliwosci-urli-w-ruby-on-rails-separatory/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Pożegnanie z AGH</title>
		<link>http://www.bobrowski.org.pl/pozegnanie-z-agh/</link>
		<comments>http://www.bobrowski.org.pl/pozegnanie-z-agh/#comments</comments>
		<pubDate>Sun, 19 Oct 2008 20:23:36 +0000</pubDate>
		<dc:creator>Sebastian Bobrowski</dc:creator>
		
		<category><![CDATA[agh]]></category>

		<guid isPermaLink="false">http://www.bobrowski.org.pl/pozegnanie-z-agh/</guid>
		<description><![CDATA[16 września 2008 decyzją wydziałowej komisji egzaminacyjnej otrzymałem tytuł: magister inżynier telekomunikacji Akademii Górniczo Hutniczej w Krakowie. Tym samym po 17 latach zakończyła się moja oficjalna, zawodowa edukacja, teraz pozostaje już tylko dokształcanie się i rozwijanie we własnym zakresie.
]]></description>
			<content:encoded><![CDATA[<p>16 września 2008 decyzją wydziałowej komisji egzaminacyjnej otrzymałem tytuł: magister inżynier telekomunikacji Akademii Górniczo Hutniczej w Krakowie. Tym samym po 17 latach zakończyła się moja oficjalna, zawodowa edukacja, teraz pozostaje już tylko dokształcanie się i rozwijanie we własnym zakresie.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bobrowski.org.pl/pozegnanie-z-agh/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Dlaczego warto przejść na Rails 2.1?</title>
		<link>http://www.bobrowski.org.pl/dlaczego-warto-przejsc-na-rails-21/</link>
		<comments>http://www.bobrowski.org.pl/dlaczego-warto-przejsc-na-rails-21/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 14:33:30 +0000</pubDate>
		<dc:creator>Sebastian Bobrowski</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.bobrowski.org.pl/2008/09/13/dlaczego-warto-przejsc-na-rails-21/</guid>
		<description><![CDATA[Pora przejść na Ruby On Rails 2.1. We wcześniejszych wersjach odkryto dziurę umożliwiającą SQL Injection. Bug występuje przy parametrze :offset.
Przy użyciu bazy MySqlowej otrzymujemy ActiveRecord::StatementInvalid exceptions z uwagi na domyślne wyłączenie wielokrotnych zapytań przez API. Natomiast przy innych bazach np: PostreSQL lub SQLite niestety może dojść do wstrzyknięcia kodu. Przy zapytaniu
 Item.find(:all, :limit=&#62;10, :offset=&#62;params[:offset]

i podaniu jako [...]]]></description>
			<content:encoded><![CDATA[<p>Pora przejść na Ruby On Rails 2.1. We wcześniejszych wersjach odkryto dziurę umożliwiającą SQL Injection. Bug występuje przy parametrze :offset.</p>
<p>Przy użyciu bazy MySqlowej otrzymujemy ActiveRecord::StatementInvalid exceptions z uwagi na domyślne wyłączenie wielokrotnych zapytań przez API. Natomiast przy innych bazach np: PostreSQL lub SQLite niestety może dojść do wstrzyknięcia kodu. Przy zapytaniu</p>
<blockquote><p> Item.find(:all, :limit=&gt;10, :offset=&gt;params[:offset]</p>
</blockquote>
<p>i podaniu jako parametr :offset ciągu: &#8220;&#8216;; Drop table items; &#8221; następuje usunięcie tabeli items.</p>
<p>Jeśli koniecznie nie chcemy robić na razie uaktualnienia, a mamy podobne zapytania u siebie najprościej jest rzutować to co podajemy do :offset na Integer (to_i) lub zainstalować odpowiedniech patcha do <a href="http://blog.innerewut.de/files/rails/activerecord-1.15.3.patch">wersji &lt;2.0</a> lub do <a href="http://blog.innerewut.de/files/rails/activerecord-2.0.2.patch">wersji 2.0</a></p>
<p>. </p>
<p>
To, że mysql domyślnie nie pozwala na wielokrotne zapytania z poziomu api na pierwszy rzut oka nie wygląda najlepiej, jednak w tym przypadku chroni to aplikacje przed dużymi problemami.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bobrowski.org.pl/dlaczego-warto-przejsc-na-rails-21/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Kohanaphp - nie polecam</title>
		<link>http://www.bobrowski.org.pl/kohanaphp-nie-polecam/</link>
		<comments>http://www.bobrowski.org.pl/kohanaphp-nie-polecam/#comments</comments>
		<pubDate>Sun, 07 Sep 2008 20:21:06 +0000</pubDate>
		<dc:creator>Sebastian Bobrowski</dc:creator>
		
		<category><![CDATA[php]]></category>

		<category><![CDATA[kohana]]></category>

		<guid isPermaLink="false">http://www.bobrowski.org.pl/2008/09/07/kohanaphp-nie-polecam/</guid>
		<description><![CDATA[Ostatnio z powodów niezależnych od siebie musiałem pogrzebać w aplikacji napisanej w php. Serwis, który miałem poprawić został zbudowany na bazie kohanaphp. Kiedyś byłem całkiem zadowolony z używania CodeIgnitera, wiec miałem nadzieję, że i tym razem będzie podobnie. Kohana jest właśnie następcą CodeIgnitera, tylko z użyciem wszystkich dobrodziejstw php5.
I  właśnie tutaj dobre wrażenia się [...]]]></description>
			<content:encoded><![CDATA[<p>Ostatnio z powodów niezależnych od siebie musiałem pogrzebać w aplikacji napisanej w php. Serwis, który miałem poprawić został zbudowany na bazie <a href="http://kohanaphp.com/home">kohanaphp</a>. Kiedyś byłem całkiem zadowolony z używania <a href="http://www.codeigniter.com">CodeIgnitera</a>, wiec miałem nadzieję, że i tym razem będzie podobnie. Kohana jest właśnie następcą CodeIgnitera, tylko z użyciem wszystkich dobrodziejstw php5.</p>
<p>I  właśnie tutaj dobre wrażenia się skończyły. Wszystko niby podobne do railsów, niby też ORM, niby widoki, kontrolery, jednak różnica jest znaczna. Pewnie przyzwyczaiłem sie już do jakość kodowania jaką dają Railsy, ale nie zmienia to faktu, że kohana jest dość oporna.</p>
<p>Pierwsze minusy jakie odczułem *</p>
<ul>
<li> Szablon - nie wiadomo co się renderuje, nie ma domyślnego pliku w który w ciemno można patrzyć. Za każdym razem trzeba sprawdzać w kontrolerze, jaki to plik szablonu używamy</li>
<li>Zmienne z kontrolera nie są widoczne w widoku, trzeba je w jawny sposób do niego przekazać. **</li>
<li>Słaba konfiguracja adresów url. Nie udało mi się ich tak skonfigurować abym mógł uzyskać efekt: domena.pl/tytul-aktualnosci. Granica możliwości, które wycinałem było domena.pl/tytul-aktualnosci/aktualnosci. W Railsach oczywiście jest to możliwe.</li>
<li>Brak generatorów kodu, podobno frameworki phpowe już mają, jednak w kohanie się nie doszukałem</li>
</ul>
<p>* Niekompletne dokumentacja od początku mnie odrzuciła. Możliwe, że opisane poniżej kwestie są juz rozwiązane tylko jeszcze nie opisane w dokumentacji.</p>
<p>** nie jest tak źle jak w CodeIgniterze, że zmienne przekazuje się w tablicy razem poleceniem renderowania widoku. Tutaj można zmienne dokładać w miare poczeb podczas metody. Jednak po pierwsze zwiększa to ilość pisanego niepotrzebnie kodu, a po drugie zmusza do zastanawiania się co będzie potrzebne a co nie. Możliwe, że zwiększa to wydajność aplikacji, bo programisty na pewno nie.</p>
<h3>Podsumowanie</h3>
<p>Pierwsze wrażenia są raczej negatywne, jednak pracowałem z narzędziem zaledwie 2 dni, być może dla phpowców to duży krok do przodu, dla tych co posmakowali Railsów to raczej mocno odgrzewane danie.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bobrowski.org.pl/kohanaphp-nie-polecam/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Linguistics - pomoc przy zabawach z językiem i wyrazami w Ruby</title>
		<link>http://www.bobrowski.org.pl/linguistics-pomoc-przy-zabawach-z-jezykiem-i-wyrazami-w-ruby/</link>
		<comments>http://www.bobrowski.org.pl/linguistics-pomoc-przy-zabawach-z-jezykiem-i-wyrazami-w-ruby/#comments</comments>
		<pubDate>Sun, 24 Aug 2008 18:36:13 +0000</pubDate>
		<dc:creator>Sebastian Bobrowski</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.bobrowski.org.pl/2008/08/24/linguistics-pomoc-przy-zabawach-z-jezykiem-i-wyrazami-w-ruby/</guid>
		<description><![CDATA[Ostatnio pracując nad wersją anglojęzyczną faktury w programie do fakturowania on-line, szukałem biblioteki do przekształcania liczb na ich słowne odpowiedniki. Byłem przekonany, że coś takiego istnieje, gdyż w Active Record w  Ruby On Rails zna liczbę mnogą rzeczowników, gdyż szuka tabeli w bazie danych będącej liczbą mnogą od nazwy modelu.Do podobnych zastosowań mogę polecić [...]]]></description>
			<content:encoded><![CDATA[<p>Ostatnio pracując nad wersją anglojęzyczną faktury w <a href="http://www.infakt.pl/">programie do fakturowania on-line</a>, szukałem biblioteki do przekształcania liczb na ich słowne odpowiedniki. Byłem przekonany, że coś takiego istnieje, gdyż w <a href="http://www.rubyonrails.org/">Active Record</a> w <a href="http://www.rubyonrails.org/"> Ruby On Rails</a> zna liczbę mnogą rzeczowników, gdyż szuka tabeli w bazie danych będącej liczbą mnogą od nazwy modelu.Do podobnych zastosowań mogę polecić <a href="http://www.deveiate.org/projects/Linguistics/"> Ruby Linguistics</a>. Bibliotekę łatwo można zainstalować z gemów. Widząc kilka przykładów użycia nie trzeba się nawet wiele zagłębiać w <a href="http://deveiate.org/code/Linguistics/"> dokumentacje projektu</a>.<br />
<blockquote>require &#8216;linguistics&#8217;Linguistics::use( :en ) # extends Array, String, and Numeric&#8221;book&#8221;.en.plural # =&gt; &#8220;books&#8221;"mouse&#8221;.en.plural # =&gt; &#8220;mice&#8221;"ruby&#8221;.en.plural # =&gt; &#8220;rubies&#8221;</p></blockquote>
<p>Oprócz liczb mnogich rzeczowników biblioteka &#8220;zna&#8221; równiez przedimki:<br />
<blockquote>&#8220;book&#8221;.en.a# =&gt; &#8220;a book&#8221;"article&#8221;.en.a# =&gt; &#8220;an article&#8221;</p></blockquote>
<p>liczebniki porządkowe<br />
<blockquote>5.en.ordinal # =&gt; &#8220;5th&#8221;2004.en.ordinal # =&gt; &#8220;2004th&#8221;</p></blockquote>
<p>oraz potrafi zamieniać liczby na ich odpowiednik słowny:<br />
<blockquote>5.en.numwords# =&gt; &#8220;five&#8221;2004.en.numwords# =&gt; &#8220;two thousand and four&#8221;2385762345876.en.numwords# =&gt; &#8220;two trillion, three hundred and eighty-five billion, seven# hundred and sixty-two million, three hundred and forty-five thousand,# eight hundred and seventy-six&#8221;</p></blockquote>
<p>Jedyną wadą jaką dotychczas znalazłem jest mała liczba języków dostępnych, a właściwie jest tylko angielski.Więcej przykładów dostępnych jest poprzez <a href="http://www.deveiate.org/projects/Linguistics/wiki/English">wiki projektu</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bobrowski.org.pl/linguistics-pomoc-przy-zabawach-z-jezykiem-i-wyrazami-w-ruby/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>


