<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><title>http://sharp.jogger.pl/</title><link>http://sharp.jogger.pl/</link><description>Wpisy z dziennika internetowego Jogger, wspomaganego przez Jabbera</description><lastBuildDate>Sat, 20 Mar 2010 12:24:21 +0100</lastBuildDate><generator>JoggerPL</generator><item><title>gem mysql 2.8.1 na Mac Os X 10.6.1</title><link>http://sharp.jogger.pl/2009/11/02/gem-mysql-2-8-1-na-mac-os-x-10-6-1/</link><description>&lt;p&gt;&lt;strong&gt;Cos nie dziala?&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
Jeżeli masz mysql z portów i instalujesz gema mysql to on sie zbuduje zle, nie bedzie mogl odpalic mysqlclient. Rozwiązanie jest dosc proste dla mnie bylo to&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo env ARCHFLAGS=&quot;-arch x86_64&quot; gem install mysql -- --with-mysql- config=/opt/local/lib/mysql5/bin/mysql_config&lt;/code&gt; sciezke ustawiasz do swojego mysql_config i gem zbuduje sie poprawnie.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
</description><pubDate>Mon, 02 Nov 2009 11:02:38 +0100</pubDate><guid>http://sharp.jogger.pl/2009/11/02/gem-mysql-2-8-1-na-mac-os-x-10-6-1/</guid><category>Ogólne</category></item><item><title>Tagi w Gicie</title><link>http://sharp.jogger.pl/2009/10/19/tagi-w-gicie/</link><description>&lt;p&gt;&lt;strong&gt;Jak zrobić tag w gicie&lt;/strong&gt;&lt;br&gt;
Tagi w gicie działają jak brench tylko że ich nie &quot;ruszamy&quot; tag robi się lokalnie&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
  git tag -a rel-1 9f4e4fce28d371b78397492e566f9e5913b2bf9f
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;To tworzy taga o nazwie &quot;rel-1&quot; teraz aby posłać tagi na server używamy&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;git push --tags&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;, a aby miec tagiu sibei musimy je sciągnac z servera&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;git fetch --tags&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;br&gt;
&lt;br&gt;
ps. Dzięki Maciek&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
</description><pubDate>Mon, 19 Oct 2009 10:14:47 +0200</pubDate><guid>http://sharp.jogger.pl/2009/10/19/tagi-w-gicie/</guid><category>Ogólne</category></item><item><title>Zmiany w basic uthentication (Rails 2.3.4)</title><link>http://sharp.jogger.pl/2009/09/07/zmiany-w-basic-uthentication-rails-2-3-4/</link><description>&lt;p&gt;&lt;strong&gt;Update i problem z testem...&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
Dziś rano uaktualniałem aplikacje w railsach z 2.3.2 do 2.3.4 w testach miałem autentykacje z użyciem &quot;basic&quot; i procedura do logowania wyglądała tak&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
  def use_basic_authorization!(options = {})
    options.reverse_merge!({:username =&amp;gt; &quot;a&quot;, :password =&amp;gt; &quot;b&quot;})
    @request.env[&quot;HTTP_AUTHORIZATION&quot;] = &quot;Basic&quot; + 
      ActionController::HttpAuthentication::
Basic.encode_credentials ( options[:username] ,  options[:password] )
  end
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Po uaktualnieniu wszystkie testy sie posypały, przeglądnełem change log i nie było wzmianki po przejrzeniu źródeł &lt;i&gt;encode_credentials&lt;/i&gt; zauważyłem iż dodali to &quot;Basic&quot; a więc teraz wystaczy usunąc to i wszystko działa jak powinno znów :D&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
</description><pubDate>Mon, 07 Sep 2009 09:56:35 +0200</pubDate><guid>http://sharp.jogger.pl/2009/09/07/zmiany-w-basic-uthentication-rails-2-3-4/</guid><category>Ogólne</category></item><item><title>Duże i małe wzorce</title><link>http://sharp.jogger.pl/2009/05/19/duze-i-male-wzorce/</link><description>&lt;p&gt;&lt;strong&gt;Granulacja&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
Ostatnio klarowne dla mnie stało się to iż musi istniec wyraźna granica między &quot;przydatnym&quot; i &quot;bezużytecznym&quot; komponentem programu. I jako pierwsza pojawiła się wilkość. Jeśli mamy problem dość sporego rozmiaru i komponent który rozwiązuje z nim związane zagadnienie to istnieje pewne &quot;miejsce&quot; od którego &quot;zawsze&quot; trzeba będzie ten komponent dostosowywac pod konkretne rozwiązanie. I tu pojawia się pytanie czy cegiełka programu która spełnia 70% naszych wymagań i wymaga dopieszczenia w postaci 30% kodu jest dalej dobrym komponentem czy już złym. Czy nie lepiej zrobić z tego czegoś 2 różnych mniejszych pod-cegiełek i wtedy może się okazać iż pod-komponenty zadowalają nas w 100%. Bez konieczności w ich ingerencje. Ale to raczej pytanie do twórców komponentów.&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Oklepane przykłady&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
Dość często pojawia się &quot;motyw&quot; oklepanego przykładu, ktoś coś zrobił już 5 razy i wydaje mu sie iż wszycy dokładnie wiedza jak to zrobić, a tak nie jest. Ludzie pisząc poraz pierwszy nawet najbanalniejsza rzecz potrafia popełniac głupie gafy i zadziwiające jest to że niema&quot;gotowych&quot; wzorców realizowania pewnych funkcjonalności i konstrukcji wraz z opisem wystepujacych problemów i zestawem &quot;teoretycznych testów&quot; owszem są wzorce projektowe. Tylko że one nie dotykają wszystkich przy ziemnych problemów takich jak choćby głupi messaging system w portalu społecznościowym. Napisany już N (N &amp;gt; 1) razy przez większość ludzi parającym się tym zajęciem a wciąż pisząc to trzeba powtarzać te same rzeczy. I choć ta częśc systemu nadaje się na osobny komponent nikt nie decyduje się go pisać bo zwykle jest to silnie dopieszczone pod konkretną sytuacje. Tylko czy nie było by fajnie gdyby stworzyć coś w rodzaju opisów znanych z książki Gang of Four. Opis zawierający: nazwe-opis-problemu, opis problemu i rozwiązanie , rysunek schematyczny i zestaw ogólnych testów. I nie mówie tutaj o ogółach tylko o szczegółowych rozwiązaniach osobno nawet dla frameworków i języków. Bo przecież to samo teoretycznie nie będzie miało identycznej implemntacji w pythonie i ruby czy też erlangu.&lt;br&gt;
&lt;br&gt;
Myślę że te dwa pomysły są conajmniej ciekawe i taka mini sciąga była by fajną referencją przy realizowaniu projektów. Szczególnie interesującą sekcją mogła by być sekcja związana z testami. Czasami nawet prosty opis prostego problemu może wiele rozjaśnić.&lt;/p&gt;
</description><pubDate>Tue, 19 May 2009 00:00:57 +0200</pubDate><guid>http://sharp.jogger.pl/2009/05/19/duze-i-male-wzorce/</guid><category>Ogólne</category></item><item><title>Wizytówki</title><link>http://sharp.jogger.pl/2009/04/21/wizytowki/</link><description>&lt;p&gt;&lt;strong&gt;Dziś w firmie dostałem wizytówki :D&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
&lt;img src=&quot;http://img134.imageshack.us/img134/9570/zdjcie012p.jpg&quot;&gt;&lt;br&gt;
Ps. Spoko Spoko&lt;/p&gt;
</description><pubDate>Tue, 21 Apr 2009 17:16:57 +0200</pubDate><guid>http://sharp.jogger.pl/2009/04/21/wizytowki/</guid><category>Ogólne</category></item><item><title>Zuo i Chooy</title><link>http://sharp.jogger.pl/2009/03/24/zuo-i-chooy/</link><description>&lt;p&gt;&lt;strong&gt;Krótko o prezentacji &quot;Dlaczego Open Source to Zło&quot;&lt;/strong&gt;&lt;br&gt;
Przecieram moje oczy z wrażenia po przeglądnięciu prezentacji o wyżej wymienionym tytule. To niesamowite jaki Open Source jest zły, jest tak zły iż bardziej już być nie może. Dobra nie będę spoilerował tylko przytocze argumenty prowadzącego.&lt;br&gt;
&lt;br&gt;
1) Prezentacja zaczyna się od tego o czym pan będzie mówił i o czym nie będzie mówił, przynajmniej szczerze pisze że nie jest w temacie :).&lt;br&gt;
2) Pojawia się slaj ze Stallman'em w czapce ! Już bardziej chyba środowisku Open Source nie można dojechać!!! :) Bo jak wiemy KAŻDY projekt Open Source jest robiony przez Stallman'a albo przynajmniej przez niego autoryzowany. Jak wiemy od dawna środowisko Open Source składa się z szaleńców &lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/KMU0tzLwhbE&amp;amp;hl=pl&amp;amp;fs=1&quot;&gt;
&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;
&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;
&lt;embed src=&quot;http://www.youtube.com/v/KMU0tzLwhbE&amp;amp;hl=pl&amp;amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/object&gt; Pan od prezentacji co pare slajdów podkreśla związki z Microsoft :) Ale zadajmy sobie pytanie, komu powierzyć swoje dziecko. Gościowi który wygląda jak jezus czy małpie ? :)))&lt;br&gt;
&lt;br&gt;
3) Pojawia się lista argumentów!!! Miażdzące one są (Yoda).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Niesformalizowany rozwój - duży wpływ jednostek na rozwój projektu&lt;/li&gt;
&lt;li&gt;Brak odpowiedzialności - developerzy nie ponosza odpowiedzialności za swój kod&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rozumiem więc iż w projektach tego pana każdy developer pisze co chce i jak chce bo nikt nie jest leaderem, albo inaczej każdy jest leaderem dla siebie. Odpowiedzialność... prawdopodobnie chodzi oto że jak ktoś znajdzie bug u kogoś to ten pierwszy idzie do więzienia. Moim zdaniem to dwa kłamstwa. Po pierwsze w projektach open source jest znacznie więcej czasu na review kodu, które jest czynione bądz nie. To wiąże się z tym kto go robi. (Nikt nie broni nikomu zrobic review i zgłosic to teamowi czy też zaproponować patch. natomiast w projektach zamkniętych NIE WIADOMO NIC może robią może nie... nikt nie zgłasza bugów bo niema gdzie i nie ma jak ... może to jest metoda, nie ma miejsca na zgłaszanie bugów TO ICH NIEMA = Właśnie Prowadzący prezentacje odkrył chyba nowy trend w produkcji oprogramowania, PRZEŁOM).&lt;br&gt;
&lt;br&gt;
4) Następnie pojawia się krótka historia na temat projektu open source w któ®ej natrafiamy na szereg przypuszczeń.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Brak kierownika projektu&lt;/li&gt;
&lt;li&gt;Może pojawic się konflik w zespole&lt;/li&gt;
&lt;li&gt;Zaplanowana achitektura jest nie wystarczająca&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I jak sie okazuje projektów Komercyjnych też to nie dotyczy. Tak w projektach Open Source nigdy niema kierownika projektu (NIGDY). Czy może pojawić się konflikt w zespole... tak, może tez wybuchnąc bomba atomowa w warszawie i zabić wszystkich albo ufo porwać prezydenta. Różne rzeczy moga się wydarzyć, ale nie w projekcie komercyjnym. Projekty zamkniete chroni sam Bóg. Architektura.... jest takie słowo REFACTORING.. ale w projektach zamkniętych jeszcze o tym nie słyszeli.&lt;br&gt;
&lt;br&gt;
5) Oho slajd z licencjami. Widać wyraźnie że albo prowadzący nie rozumie jak one działają albo coś mu nie wychodzi... optymistyczne pojęcie liberalnej licencji, tak BSD jest liberalne bo ona zezwala na wszystko. ale LGPL to już restrykcyjna do bólu i nie pozwala na nic.&lt;br&gt;
&lt;br&gt;
6) Wybór odpowiedniego rozwiązania wymaga czasochłonnych analiz. Ale nie tyczy sie to projektow closed source przecież :) masz dostawce który ci daje .lib/.so/.dll i plik .h i jazda na ręcznym przecież to pewny przetestowany kod od dostawcy. Analiza jakości dokumentacji i jej kompletności... no tak Projekty Open Source zwykle nie posiadają dokumentacji. Analiza stabilności... no boże.. przecież wiadomo że closed source jest stabilny to nie trzeba go analizować(PRAWDA ŚWIĘTA!!!).&lt;br&gt;
&lt;br&gt;
7) Hit całości to &quot;Modyfikacja rozwiazan OS wymaga dopisania modułów weług specyfikacji klienta&quot; CZUJESZ !!! Trzeba coś dopisać, jak masz liba od wendora za 50000$ to spełnia on specyfikacje WSZYSTKICH KLIENTÓW. Tak Wszystkich !!!! Twoje też ! Pierze , sprząta zamiata, i składa optymalne zapytania.&lt;br&gt;
&lt;br&gt;
8) W projektach Open source występuje ryzyko błędów. Tak, w projektach closed source niema tego ryzyka. (NIGDY!!!)&lt;br&gt;
&lt;br&gt;
9) OS = {Idee, Technologie,Poznawanie ludzi} , Projekty Komercyjne = {Zysk, Jakość, Stabliność, Systematyczny Rozwój} Poznawać ludzi to można też w kawiarni, sklepie i na gg... nie trzeba do tego zakładać projektu. Miało być smieśnie ale przytocze argument iż Microsoft zmienia api wielu usług lub z nich całkowicie wręcz rezygnuje jak było w przypadku D3D.NET 3.0 ... no tak ale to sie nie zdarza w Closed Source... zaraz ? Microsoft to Closed Source O_o.. ktoś coś miesza... albo mówi nieprawde.&lt;br&gt;
&lt;br&gt;
10) Na koniec widac ikonki joomli i mambo z jakimis komentarzami i znaczek microsoftu&lt;br&gt;
&lt;br&gt;
Jak to powiedział moj kolega, cała prezentacja wygląda jakby ktoś chciał na zebraniu z microsoftem wejść pod stół.&lt;br&gt;
&lt;br&gt;
Już więm dlaczego nie chodzę na krak spoty, ponieważ wpuszczają tam ludzi z takimi prezentacjami. Tę prace badawczą z zakresu hodowli zwierząt można przeglądnąc tutaj &lt;a href=&quot;http://www.empathy.pl/pl/aktualnosci/rok-2009.html,,0:vw:68&quot;&gt;TUTAJ&lt;/a&gt;(można zwrócic uwage na nazwe firmy jakbyście coś tam zamawiali :) )&lt;br&gt;
&lt;br&gt;
Ale chyba lepiej posłuchać Balangi u Ninjów &lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/YIPSyT4akkM&amp;amp;hl=pl&amp;amp;fs=1&quot;&gt;
&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;
&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;
&lt;embed src=&quot;http://www.youtube.com/v/YIPSyT4akkM&amp;amp;hl=pl&amp;amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
</description><pubDate>Tue, 24 Mar 2009 17:28:04 +0100</pubDate><guid>http://sharp.jogger.pl/2009/03/24/zuo-i-chooy/</guid><category>Ogólne</category></item><item><title>Przerwa</title><link>http://sharp.jogger.pl/2009/03/23/przerwa/</link><description>&lt;p&gt;&lt;strong&gt;Przerwa techniczna&lt;/strong&gt;&lt;br&gt;
W ostatnich dniach , tygodniach a nawet miesiącach nastąpiła przerwa techniczna wynikajaca z braku oleju w głowie szefa tutejszego podwórka, dziś wieczorem nastąpi próba reanimacji jego umierającej tkanki mózgowej poprzez zalanie jej odczynnikiem A.&lt;br&gt;
&lt;br&gt;
Do zaczytania i pozdrawiam :)&lt;/p&gt;
</description><pubDate>Mon, 23 Mar 2009 14:55:14 +0100</pubDate><guid>http://sharp.jogger.pl/2009/03/23/przerwa/</guid><category>Ogólne</category></item><item><title>Gdy repo gitowe zacznie chodzić wolno...</title><link>http://sharp.jogger.pl/2009/02/19/gdy-repo-gitowe-zacznie-chodzic-wolno/</link><description>&lt;p&gt;&lt;strong&gt;Gdy repo zaczyna chodzić wolno...&lt;/strong&gt;&lt;br&gt;
Warto uruchomić &lt;code&gt;git gc&lt;/code&gt; które sprząta oraz optymalizuje repo. Po dzisiejszym refactorze aż sam git o to poprosił x[&lt;/p&gt;
</description><pubDate>Thu, 19 Feb 2009 20:34:01 +0100</pubDate><guid>http://sharp.jogger.pl/2009/02/19/gdy-repo-gitowe-zacznie-chodzic-wolno/</guid><category>GIT</category><category>Ogólne</category></item><item><title>Mac Os X i nitrogen</title><link>http://sharp.jogger.pl/2009/02/17/mac-os-x-i-nitrogen/</link><description>&lt;p&gt;&lt;strong&gt;Argument '-smp enable' not supported.&lt;/strong&gt;&lt;br&gt;
Jeżeli ktoś natrafił na &lt;code&gt;Argument '-smp enable' not supported.&lt;/code&gt; to wystarczy wyedytowac skrypt &lt;code&gt;$ERL_LIBS/nitrogen-master/support&lt;/code&gt; i usunac &lt;code&gt;-smp enable&lt;/code&gt; z drugiej linii eskryptu . skrypt &lt;code&gt;nitrogen&lt;/code&gt; będzie działać już poprawnie.&lt;/p&gt;
</description><pubDate>Tue, 17 Feb 2009 13:42:06 +0100</pubDate><guid>http://sharp.jogger.pl/2009/02/17/mac-os-x-i-nitrogen/</guid><category>Erlang</category><category>Ogólne</category></item><item><title>Variadic Macros</title><link>http://sharp.jogger.pl/2009/02/15/variadic-macros/</link><description>&lt;p&gt;&lt;strong&gt;Zmienna liczba argumentów w Makrach&lt;/strong&gt;&lt;br&gt;
W standardzie C99 jest opisane jak zrobić makro ze zmienną liczbą argumentów. Jest to bardzo proste i może okazać się przydatne. Ok. Przykład.&lt;/p&gt;
&lt;pre&gt;
#define FEAR(...) ({fprintf(stderr, &quot;Warning: &quot;); fprintf(stderr,  __VA_ARGS__ ); })
&lt;/pre&gt;
&lt;p&gt;Ważne są dwie rzeczy &lt;code&gt;...&lt;/code&gt; i &lt;code&gt;__VA_ARGS__&lt;/code&gt; w miejsce tego drugiego rozwijane są kropki ;) Ot cała magia. Teraz można sobie napisać &lt;code&gt;FEAR(&quot;Destrukcja za %d %d %d ...&quot;,3,2,1)&lt;/code&gt; ;)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
</description><pubDate>Sun, 15 Feb 2009 16:32:59 +0100</pubDate><guid>http://sharp.jogger.pl/2009/02/15/variadic-macros/</guid><category>Ogólne</category></item><item><title>Developers Day</title><link>http://sharp.jogger.pl/2009/02/03/developers-day/</link><description>&lt;p&gt;&lt;strong&gt;Jak wygląda normalny dzien programisty ?&lt;/strong&gt;&lt;br&gt;
Dla tych którzy się zastanawiają zdradzę sekret...&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Przeciganie liny&lt;/strong&gt;&lt;br&gt;
Wszystko sprowadza się do tego, żeby podejść do sciany i zobaczyć co da się przeciągnąć w prawo :D Zawszę w prawo ! &lt;img src=&quot;http://img4.imageshack.us/img4/3443/photork3.jpg&quot;&gt; Te żółte karteczki muszą się znaleść na 3 polu :D to znaczy muszą przejść przez środkowe pole na którym rozgrywa się &lt;i&gt;mecz&lt;/i&gt; a potem dojść na ostatnie. A widzicie tą najbardziej z prawej ? To nie przypadkowy sukces to są 3 bugi :D.&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Mecz o wszystko!&lt;/strong&gt;&lt;br&gt;
Kluczem do sukcesu jest gra zespołowa. Aby cały mecz mógł przebiedz idealnie muszą być 4 osoby. Tester, dwóch developerów i gość którego nikt nie lubi bo robi code Review :D Całość wygląda tak &lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/VMHAHcJpxxw&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1&quot;&gt;
&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;
&lt;embed src=&quot;http://www.youtube.com/v/VMHAHcJpxxw&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/object&gt; Od lewej , Wojtek , Ja , Maciej , Marcin&lt;br&gt;
Video przedstawia oczywiści grupe podczas meczu :D 10:5 przegraliśmy ;/ Ale jeszcze nie jest to nasze ostatnie słowo !&lt;br&gt;
&lt;br&gt;
Ps. Myśle że siłą firmy nie jest marka ani władza nad światem ale ludzie. Naprawde zajebiści ludzie.&lt;/p&gt;
</description><pubDate>Tue, 03 Feb 2009 17:04:36 +0100</pubDate><guid>http://sharp.jogger.pl/2009/02/03/developers-day/</guid><category>Ogólne</category><category>Życie</category></item><item><title>Urodziny i Ruby 1.9.1</title><link>http://sharp.jogger.pl/2009/02/02/urodziny-i-ruby-1-9-1/</link><description>&lt;p&gt;&lt;strong&gt;31/01/2009&lt;/strong&gt;&lt;br&gt;
Właśnie w moje urodziny dostałem całkiem fajny prezent. Wydany został Ruby 1.9.1 stable :) Co podwójnie mnie cieszy, chociaż z drugiej strony czuje się jakbym w podstawówce z królem Arturem na wycieczki do Palestyny jeździł ;/ No cóż starość nie radość.&lt;/p&gt;
</description><pubDate>Mon, 02 Feb 2009 09:40:24 +0100</pubDate><guid>http://sharp.jogger.pl/2009/02/02/urodziny-i-ruby-1-9-1/</guid><category>Ogólne</category><category>Ruby i RoR</category><category>Ruby 1.9.1</category><category>Ruby</category><category>Ruby19</category></item><item><title>porty jeden siedem !</title><link>http://sharp.jogger.pl/2008/12/17/porty-jeden-siedem/</link><description>&lt;p&gt;&lt;strong&gt;Port 1.700&lt;/strong&gt;&lt;br&gt;
Już są nowe porty makowe więc all &lt;code&gt;sudo port -v selfupdate&lt;/code&gt;&lt;/p&gt;
</description><pubDate>Wed, 17 Dec 2008 13:57:01 +0100</pubDate><guid>http://sharp.jogger.pl/2008/12/17/porty-jeden-siedem/</guid><category>Ogólne</category></item><item><title>BOOST FFFFFFOUND ;&gt;</title><link>http://sharp.jogger.pl/2008/12/12/boost-ffffffound/</link><description>&lt;p&gt;&lt;strong&gt;FFFFOUNDZZZ&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
Mój znajomy &lt;a href=&quot;http://blog.dotmariusz.net/&quot;&gt;Mariusz&lt;/a&gt; kiedyś pokazał kanał mi RSS FFFFFFFFFFFFOUND (nie wiem czy dobra ilość F ;) ) potem sam zaczął wrzucać do siebie Weekly Finds, jakies rzeczy związane z ogólnie pojetym DESIGN'em (btw. Mariusz mnie nie czyta bo jestem w jego znajomych a nie w czytanych blogach wiec pewnie nawet nie zauwazy ze tutaj pisze o tym co on czyta i zdradzma jego sekrety ;) ) I ja jak przeglądałem BOOST'a biblioteke pomyślałem że zrobie sobie taki boostowy FFFFOUND gdzie wrzuce rzeczy które mi się rzuciły w oczy podczas przeglądania biblioteki BOOST ;) a więc zaczynam&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Foreach w C++&lt;/strong&gt;&lt;br&gt;
Boost udostepnia nam &lt;code&gt;BOOST_FOREACH&lt;/code&gt; przykładowe użycie &lt;script src=&quot;http://gist.github.com/35231.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt; Może iterować po:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;kontenerach STL&lt;/li&gt;
&lt;li&gt;tablicach&lt;/li&gt;
&lt;li&gt;null-terminated&lt;/li&gt;
&lt;li&gt;stringach&lt;/li&gt;
&lt;li&gt;mapach&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Sygnały&lt;/strong&gt;&lt;br&gt;
Sygnałki ;) przykładowe użycie:&lt;/p&gt;
&lt;script src=&quot;http://gist.github.com/35234.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;
&lt;p&gt;sloty sa traktowane jak kolejka FIFO&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Grupy watków&lt;/strong&gt;&lt;br&gt;
Przykład użycia&lt;/p&gt;
&lt;script src=&quot;http://gist.github.com/35236.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;
&lt;p&gt;To tyle mnie dziś zaciekawiło... a akurat patrzyłem na &lt;code&gt;boost&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
</description><pubDate>Fri, 12 Dec 2008 20:23:36 +0100</pubDate><guid>http://sharp.jogger.pl/2008/12/12/boost-ffffffound/</guid><category>C/C++</category><category>Ogólne</category></item><item><title>merb-is-wombat</title><link>http://sharp.jogger.pl/2008/12/12/merb-is-wombat/</link><description>&lt;p&gt;&lt;strong&gt;Skalujący się &lt;i&gt;Pomysł&lt;/i&gt; :O&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
Jadąc do domu wczoraj wpadłem na pomysł że skoro nginx działa w architekturze master-slave merb też w takiej działa, a sterownik datamapperowy (adapter) działa korzystając z api couchdb które jest restowe to może można by to połączyć w taki sposób aby rozwarstwić merb od struktury i logiki w jakiej deploy'ujemy nasze bazy danych. W zasadzie ta idea była kolejną z cyklcu &quot;Czy to sie skaluje&quot;. Mając na uwadze iż nie chce mi się pisac tony kodu aby stworzyć &quot;proxy&quot; pośrednika który by przykrywał logike w jakiej mam swoje bazy danych i jak z nich korzystam tylko aby zrobic dummy roziwazanie moge uzyć juz istniejacego sterownika do couchdb (&lt;code&gt;dm-couchdb-adapter&lt;/code&gt;). Ok więc jak sie jawiła moja chora idea ?&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Schematycznie:&lt;/strong&gt;&lt;br&gt;
[aplikacja w merbie] - [proxy] - [n baz danych]&lt;br&gt;
&lt;br&gt;
Nasze &lt;strong&gt;Proxy&lt;/strong&gt; to aplikacja która zawiera całą logike związana z tym jaka baza danych trzyma co i gdzie jest. Działa ona tak dostaje &lt;strong&gt;RESTowy&lt;/strong&gt; request na który odpowiada, koniec wewnatrz niej jest logika podziału requestów, byś może jest to jedna baza danych być może 15 a może i więcej. Wszystko jest obsługiwane przez nia czyli np. &lt;code&gt;/images/142&lt;/code&gt; może odsylac do filesystemu gdzieś tam i zwracac go natomiast &lt;code&gt;/user/2&lt;/code&gt; zwracac nam obiekt user'a&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Ale jak to osiągnąc bez boleśnie ?&lt;/strong&gt;&lt;br&gt;
Jako proof of concept wykorzytsałem aplikacje napisana w merbie w którą skonfigurowałem do korzystania z couchdb tak aby nie wskazywal na moja baze tylko na druga aplikacje w merbie &lt;script src=&quot;http://gist.github.com/35201.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt; nastepnie stworzyłem sobie druga aplikację w której dzialam na porcie &lt;code&gt;4004&lt;/code&gt; i dodałem jej odpowiednie routsy &lt;script src=&quot;http://gist.github.com/35202.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt; Teraz aby dowieść całości w pierwszej aplikacji stworzyłem prosty model &lt;script src=&quot;http://gist.github.com/35203.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt; i w kontrolerze wrzucilem &lt;code&gt;@people = People.all&lt;/code&gt; w jednej z akcji, po chwili rozkminia co zwraca couchdb doszedlem do tego co zwrocic aby bylo sparsowane i zadzialalo ;) Nie drążyłem tematu implementacji za długo ponieważ udało sie dowieść jakiejś tam rzeczy. W kontrolerze była wywoływana moja akcja i mogłem tam zadecydowac co chce robić i to była materializacji mojej ideii. Teraz kolejnym krokiem jest to aby połączyć adapter mysql/postgres/sqlitowy z interfejsem restowym i zrobic cos w rodzaju &lt;code&gt;dm-is-wombat&lt;/code&gt; dlatego iż z couchdb nie korzysta się &quot;wygodnie&quot; w aplikacji ponieważ z kilku powodów normalne modele wymagaja dosc sporo zmian :) Ale myśle ze kierunek jest dobry. Jak będe miał czas to to zrobię i zdam raport ;)&lt;br&gt;
&lt;br&gt;
Jest to materializacja jakiejś tam ideii, w temacie rozwarstwiania, dlatego iż w całej aplikacji frontowej zostaje zmieniony tylko adapter i tyle :) o logice decyduje proxy. Może komuś sie spodoba moj pomysł :)&lt;br&gt;
&lt;br&gt;
ps. Różnice w stosunku do &quot;normalnych modeli&quot; w kontekscie couchdb są takie że musimy używac &lt;code&gt;include DataMapper::CouchResource&lt;/code&gt; zamiast &lt;code&gt;include DataMapper::Resource&lt;/code&gt; oraz pola sa Stringami !!! oraz pola &lt;code&gt;property :id, String, :serial =&amp;gt; true, :key =&amp;gt; true, :field =&amp;gt; :_id property :rev, String, :field =&amp;gt; :_rev&lt;/code&gt; musza sie pojawic koniecznie !!! Są one wymagane przez couchdb&lt;/p&gt;
&lt;p&gt;Takie ot, czwartkowe przemyślenia :ASD, wybaczcie mi błedy, włąsnie napisałem pierwsża częśc sprawka na laborki i wyszło mi 28 stron (sic!!) i mam już dreszcze na myśl o części drugiej oraz analizie/wnioskach&lt;/p&gt;
</description><pubDate>Fri, 12 Dec 2008 18:56:46 +0100</pubDate><guid>http://sharp.jogger.pl/2008/12/12/merb-is-wombat/</guid><category>Merb i DataMapper</category><category>Ogólne</category><category>Ruby i RoR</category></item><item><title>PCRE czyli wyrażenia regularne jak w nginx'ie</title><link>http://sharp.jogger.pl/2008/12/07/pcre-czyli-wyrazenia-regularne-jak-w-nginx-ie/</link><description>&lt;p&gt;&lt;strong&gt;Wyrażenia regularne w C++&lt;/strong&gt;&lt;br&gt;
Jakiś czas temu kompilowałem &lt;a href=&quot;http://wiki.codemongers.com/Main&quot;&gt;nginx&lt;/a&gt;'a szybki i łatwy w konfiguracji server www. Server ten ma bardzo ciekawa architekturę&lt;br&gt;
&lt;br&gt;
&lt;img src=&quot;http://www.dossier-andreas.net/software_architecture/masterslave.jpg&quot;&gt;&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Master-Slave&lt;/strong&gt; dzięki temu składnikowi i kilku jeszcze jest on bardzo szybki i wydajny. Gdy kompilowałem go zobaczyłem że wymaga &lt;a href=&quot;http://pl.wikipedia.org/wiki/PCRE&quot;&gt;PCRE&lt;/a&gt; jako że od jakiegoś roku pracuje czynnie jako programista Ruby'iego nie wyobrażam sobie życia bez wyrażeń regularnych. Gdy pracoałem jako programista C# ;) nie było ego problemu bo prawie wcale się ich nie używało, i był to błąd. Regexp'y to wspaniałe narzędzie i pomyślałem że fajnie by było zobaczyć jak się używa PCRE w C++. I po kilku chwilach miałem już otwarte nagłówki ;) pcrecpp.h i pcreposix.h które znalazłem w catalogu &lt;code&gt;/opt/local/include&lt;/code&gt; (MacOsX Leopards Pcre z portów). Potem pojawił się pomysł że przecież przeczytanie ngłówka nic nam nieda jeśli nie zrobimy jakiegoś wmiare przydatnego &quot;czegoś&quot; ;) co się może przydać w C++ każemu ? CZYTELNY CONFIG oczywiście można stosować do tego XML'a ale taki gduby XML z czytelnością wiele wspolnego niema. Więc natchniony ruby'mocą postanowiłem zrobić miniyamlowy config w postaci&lt;/p&gt;
&lt;pre&gt;
nazwa: wartość
&lt;/pre&gt;
&lt;p&gt;No ok ;)&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Po kilku chwilach...&lt;/strong&gt;&lt;br&gt;
Miałem już gotowy przykładowy kodzik&lt;/p&gt;
&lt;script src=&quot;http://gist.github.com/33072.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;
&lt;p&gt;Trzeba dodawać krótki opis ? Kluczowe są dwie rzeczy&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pcrecpp::RE re(&quot;(\\w+):\\s+(.+)&quot;);&lt;/code&gt; czyli to jak tworzymy/compilujemy nasz regexp&lt;/li&gt;
&lt;li&gt;&lt;code&gt;re.FullMatch( line , &amp;amp;var, &amp;amp;val);&lt;/code&gt; i to jak dokonujemy opasowania&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Biblioteka ta ma jedną wadę, całkiem brakuje do niej dokumentacji ale z małych testów wynika że jest szybka bardzo :) a to sie chwali ;)&lt;br&gt;
&lt;br&gt;
To tak offtopem napisałem o czymś z C++ ;)))&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
</description><pubDate>Sun, 07 Dec 2008 11:09:52 +0100</pubDate><guid>http://sharp.jogger.pl/2008/12/07/pcre-czyli-wyrazenia-regularne-jak-w-nginx-ie/</guid><category>C/C++</category><category>Ogólne</category></item><item><title>Py30</title><link>http://sharp.jogger.pl/2008/12/04/py30/</link><description>&lt;p&gt;&lt;strong&gt;Wyszedł Python 3000&lt;/strong&gt;&lt;br&gt;
Właśnie wyszedł Python 3000 ;) oprócz tego iż nie jest kompatybilny wstecz (ale mamy tool 2to3 do konwersji programow) i jest 10% wolniejszy niż 2.6 to pojawiło się w około niego tyle kontrowersji iż musiał powstać &lt;a href=&quot;http://www.python.org/dev/peps/pep-3099/&quot;&gt;dokument&lt;/a&gt; o tym co się zmieniać NIE BĘDZIE&lt;/p&gt;
</description><pubDate>Thu, 04 Dec 2008 10:44:10 +0100</pubDate><guid>http://sharp.jogger.pl/2008/12/04/py30/</guid><category>Ogólne</category></item><item><title>znajdz 130 roznic =&gt; lol !</title><link>http://sharp.jogger.pl/2008/12/03/znajdz-130-roznic-lol/</link><description>&lt;p&gt;&lt;strong&gt;Dopasuj brakujace elementy&lt;/strong&gt;&lt;br&gt;
&lt;img src=&quot;http://farm3.static.flickr.com/2140/2152375175_17e802dba8_o.jpg&quot;&gt;&lt;br&gt;
+&lt;br&gt;
&lt;img src=&quot;http://img508.imageshack.us/img508/4070/miniyehudaec8.jpg&quot;&gt;&lt;br&gt;
=&lt;br&gt;
&lt;img src=&quot;http://img245.imageshack.us/img245/8534/randomsekciarzemk0.jpg&quot;&gt;&lt;br&gt;
LOL :))&lt;/p&gt;
</description><pubDate>Wed, 03 Dec 2008 17:54:50 +0100</pubDate><guid>http://sharp.jogger.pl/2008/12/03/znajdz-130-roznic-lol/</guid><category>Ogólne</category></item><item><title>Gist &gt; Pastie</title><link>http://sharp.jogger.pl/2008/12/01/gist-pastie/</link><description>&lt;p&gt;&lt;strong&gt;Gist :)))&lt;/strong&gt;&lt;br&gt;
Właśnie w pracy kolega pokazał mi gist'a :) jest naprawde fajny ;&amp;gt; wchodzimy na &lt;code&gt;http://gist.github.com/&lt;/code&gt; ... trzeba mieć konto na githubie ;). Wrzucamy swoj kod, wybieramy język i dostajemy pięknego gist'a ;) z możliwościa do wklejenia na blog'a :D , i do tego ładnie koloruje ... przykład widać we wpisie niżej na temat sinatry ...&lt;br&gt;
&lt;br&gt;
a tu przykład mojego modułu jakby ktoś nie chciał skrolować &lt;script src=&quot;http://gist.github.com/30690.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;/p&gt;
</description><pubDate>Mon, 01 Dec 2008 10:19:34 +0100</pubDate><guid>http://sharp.jogger.pl/2008/12/01/gist-pastie/</guid><category>C/C++</category><category>Merb i DataMapper</category><category>Ogólne</category><category>Python</category><category>Ruby i RoR</category><category>SQL</category></item><item><title>Sinatra</title><link>http://sharp.jogger.pl/2008/11/28/sinatra/</link><description>&lt;p&gt;&lt;strong&gt;Micro framework&lt;/strong&gt;&lt;br&gt;
Sinatra to fajny micro web framework. Jeśli piszemy coś bardzo małego możemy cała funkcjonalność zmieścić w jednym pliku ;) np. mamy akcje ktora zwraca jsona/yamla/xml ktory obrazuje statystyki w naszym serwisie albo generuje dynamicznie obrazek z wykresem.. cokolwiek. Nie chcemy tego dodawac do glownej aplikacji z jakiś tam powodów.&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Jak zacząć ?&lt;/strong&gt;&lt;br&gt;
Najprosza strona w sinatra wyglądala mniej więcej tak&lt;/p&gt;
&lt;script src=&quot;http://gist.github.com/30687.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;
&lt;p&gt;Wyświetla ona napis &quot;Cze&quot; ;D wewnątrz bloku opisująceog nasza akcje możemy używać szablonów &lt;code&gt;erb&lt;/code&gt; czy &lt;code&gt;haml&lt;/code&gt; w bardzo prosty sposób. Poprostu piszac &lt;code&gt;erb :index&lt;/code&gt; wtedy zostanie wygenerowany template index. dla aplikacji mozemy zdefiniować layout który będzie uwzględniony przy renderowaniu naszej akcji. Przykład użycia szablonu.&lt;/p&gt;
&lt;script src=&quot;http://gist.github.com/30688.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;
&lt;p&gt;Tak samo możemy dodać wspomniany wcześniej layout pisząc @@ layout i podajac jego treść, nie zpaomnijcie o &lt;code&gt;yield&lt;/code&gt; ;)&lt;br&gt;
Sinatra ma też całkiem fajny router&lt;/p&gt;
&lt;script src=&quot;http://gist.github.com/30689.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;
&lt;p&gt;Na koniec warto dodać jak uruchomic naszą aplikacje, &lt;code&gt;ruby strona.rb&lt;/code&gt;&lt;br&gt;
Sinatra to całkiem fajny micro framework którego można się nauczyć w 20 minut ;) całego :D. Myśle ze warto zwrócić na niego uwagę.&lt;br&gt;
&lt;br&gt;
Co do potyczki Sinatra Merb to można by dodać tylko to... &lt;a href=&quot;http://moldron.wrzuta.pl/audio/9EP3KWbXX6/01_zycie_jak_gaz&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.wrzuta.pl/images_2/audio.gif&quot; alt=&quot;01 Życie jak gaz&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</description><pubDate>Fri, 28 Nov 2008 21:54:15 +0100</pubDate><guid>http://sharp.jogger.pl/2008/11/28/sinatra/</guid><category>Ogólne</category></item></channel></rss>