gem mysql 2.8.1 na Mac Os X 10.6.1

02 listopada 2009, 11:02:38

Cos nie dziala?

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

sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql- config=/opt/local/lib/mysql5/bin/mysql_config sciezke ustawiasz do swojego mysql_config i gem zbuduje sie poprawnie.

Tagi w Gicie

19 października 2009, 10:14:47

Jak zrobić tag w gicie
Tagi w gicie działają jak brench tylko że ich nie "ruszamy" tag robi się lokalnie


  git tag -a rel-1 9f4e4fce28d371b78397492e566f9e5913b2bf9f

To tworzy taga o nazwie "rel-1" teraz aby posłać tagi na server używamy

git push --tags

, a aby miec tagiu sibei musimy je sciągnac z servera

git fetch --tags



ps. Dzięki Maciek

Zmiany w basic uthentication (Rails 2.3.4)

07 września 2009, 09:56:35

Update i problem z testem...

Dziś rano uaktualniałem aplikacje w railsach z 2.3.2 do 2.3.4 w testach miałem autentykacje z użyciem "basic" i procedura do logowania wyglądała tak


  def use_basic_authorization!(options = {})
    options.reverse_merge!({:username => "a", :password => "b"})
    @request.env["HTTP_AUTHORIZATION"] = "Basic" + 
      ActionController::HttpAuthentication::
Basic.encode_credentials ( options[:username] ,  options[:password] )
  end

Po uaktualnieniu wszystkie testy sie posypały, przeglądnełem change log i nie było wzmianki po przejrzeniu źródeł encode_credentials zauważyłem iż dodali to "Basic" a więc teraz wystaczy usunąc to i wszystko działa jak powinno znów :D

Duże i małe wzorce

19 maja 2009, 00:00:57

Granulacja

Ostatnio klarowne dla mnie stało się to iż musi istniec wyraźna granica między "przydatnym" i "bezużytecznym" 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 "miejsce" od którego "zawsze" 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.

Oklepane przykłady

Dość często pojawia się "motyw" 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"gotowych" wzorców realizowania pewnych funkcjonalności i konstrukcji wraz z opisem wystepujacych problemów i zestawem "teoretycznych testów" 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 > 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.

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ć.

Wizytówki

21 kwietnia 2009, 17:16:57

Dziś w firmie dostałem wizytówki :D


Ps. Spoko Spoko

Zuo i Chooy

24 marca 2009, 17:28:04

Krótko o prezentacji "Dlaczego Open Source to Zło"
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.

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 :).
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 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 ? :)))

3) Pojawia się lista argumentów!!! Miażdzące one są (Yoda).

  • Niesformalizowany rozwój - duży wpływ jednostek na rozwój projektu
  • Brak odpowiedzialności - developerzy nie ponosza odpowiedzialności za swój kod

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).

4) Następnie pojawia się krótka historia na temat projektu open source w któ®ej natrafiamy na szereg przypuszczeń.

  • Brak kierownika projektu
  • Może pojawic się konflik w zespole
  • Zaplanowana achitektura jest nie wystarczająca

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.

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.

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!!!).

7) Hit całości to "Modyfikacja rozwiazan OS wymaga dopisania modułów weług specyfikacji klienta" 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.

8) W projektach Open source występuje ryzyko błędów. Tak, w projektach closed source niema tego ryzyka. (NIGDY!!!)

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.

10) Na koniec widac ikonki joomli i mambo z jakimis komentarzami i znaczek microsoftu

Jak to powiedział moj kolega, cała prezentacja wygląda jakby ktoś chciał na zebraniu z microsoftem wejść pod stół.

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 TUTAJ(można zwrócic uwage na nazwe firmy jakbyście coś tam zamawiali :) )

Ale chyba lepiej posłuchać Balangi u Ninjów

Przerwa

23 marca 2009, 14:55:14

Przerwa techniczna
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.

Do zaczytania i pozdrawiam :)

Gdy repo gitowe zacznie chodzić wolno...

19 lutego 2009, 20:34:01

Gdy repo zaczyna chodzić wolno...
Warto uruchomić git gc które sprząta oraz optymalizuje repo. Po dzisiejszym refactorze aż sam git o to poprosił x[

Mac Os X i nitrogen

17 lutego 2009, 13:42:06

Argument '-smp enable' not supported.
Jeżeli ktoś natrafił na Argument '-smp enable' not supported. to wystarczy wyedytowac skrypt $ERL_LIBS/nitrogen-master/support i usunac -smp enable z drugiej linii eskryptu . skrypt nitrogen będzie działać już poprawnie.

Variadic Macros

15 lutego 2009, 16:32:59

Zmienna liczba argumentów w Makrach
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.

#define FEAR(...) ({fprintf(stderr, "Warning: "); fprintf(stderr,  __VA_ARGS__ ); })

Ważne są dwie rzeczy ... i __VA_ARGS__ w miejsce tego drugiego rozwijane są kropki ;) Ot cała magia. Teraz można sobie napisać FEAR("Destrukcja za %d %d %d ...",3,2,1) ;)

Developers Day

03 lutego 2009, 17:04:36

Jak wygląda normalny dzien programisty ?
Dla tych którzy się zastanawiają zdradzę sekret...

Przeciganie liny
Wszystko sprowadza się do tego, żeby podejść do sciany i zobaczyć co da się przeciągnąć w prawo :D Zawszę w prawo ! Te żółte karteczki muszą się znaleść na 3 polu :D to znaczy muszą przejść przez środkowe pole na którym rozgrywa się mecz a potem dojść na ostatnie. A widzicie tą najbardziej z prawej ? To nie przypadkowy sukces to są 3 bugi :D.

Mecz o wszystko!
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 Od lewej , Wojtek , Ja , Maciej , Marcin
Video przedstawia oczywiści grupe podczas meczu :D 10:5 przegraliśmy ;/ Ale jeszcze nie jest to nasze ostatnie słowo !

Ps. Myśle że siłą firmy nie jest marka ani władza nad światem ale ludzie. Naprawde zajebiści ludzie.

Urodziny i Ruby 1.9.1

02 lutego 2009, 09:40:24

31/01/2009
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ść.

porty jeden siedem !

17 grudnia 2008, 13:57:01

Port 1.700
Już są nowe porty makowe więc all sudo port -v selfupdate

BOOST FFFFFFOUND ;>

12 grudnia 2008, 20:23:36

FFFFOUNDZZZ

Mój znajomy Mariusz 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

Foreach w C++
Boost udostepnia nam BOOST_FOREACH przykładowe użycie Może iterować po:

  • kontenerach STL
  • tablicach
  • null-terminated
  • stringach
  • mapach



Sygnały
Sygnałki ;) przykładowe użycie:

sloty sa traktowane jak kolejka FIFO


Grupy watków
Przykład użycia

To tyle mnie dziś zaciekawiło... a akurat patrzyłem na boost

merb-is-wombat

12 grudnia 2008, 18:56:46

Skalujący się Pomysł :O

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 "Czy to sie skaluje". Mając na uwadze iż nie chce mi się pisac tony kodu aby stworzyć "proxy" 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 (dm-couchdb-adapter). Ok więc jak sie jawiła moja chora idea ?

Schematycznie:
[aplikacja w merbie] - [proxy] - [n baz danych]

Nasze Proxy to aplikacja która zawiera całą logike związana z tym jaka baza danych trzyma co i gdzie jest. Działa ona tak dostaje RESTowy 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. /images/142 może odsylac do filesystemu gdzieś tam i zwracac go natomiast /user/2 zwracac nam obiekt user'a

Ale jak to osiągnąc bez boleśnie ?
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 nastepnie stworzyłem sobie druga aplikację w której dzialam na porcie 4004 i dodałem jej odpowiednie routsy Teraz aby dowieść całości w pierwszej aplikacji stworzyłem prosty model i w kontrolerze wrzucilem @people = People.all 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 dm-is-wombat dlatego iż z couchdb nie korzysta się "wygodnie" 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 ;)

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ł :)

ps. Różnice w stosunku do "normalnych modeli" w kontekscie couchdb są takie że musimy używac include DataMapper::CouchResource zamiast include DataMapper::Resource oraz pola sa Stringami !!! oraz pola property :id, String, :serial => true, :key => true, :field => :_id property :rev, String, :field => :_rev musza sie pojawic koniecznie !!! Są one wymagane przez couchdb

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

PCRE czyli wyrażenia regularne jak w nginx'ie

07 grudnia 2008, 11:09:52

Wyrażenia regularne w C++
Jakiś czas temu kompilowałem nginx'a szybki i łatwy w konfiguracji server www. Server ten ma bardzo ciekawa architekturę



Master-Slave dzięki temu składnikowi i kilku jeszcze jest on bardzo szybki i wydajny. Gdy kompilowałem go zobaczyłem że wymaga PCRE 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 /opt/local/include (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 "czegoś" ;) 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

nazwa: wartość

No ok ;)

Po kilku chwilach...
Miałem już gotowy przykładowy kodzik

Trzeba dodawać krótki opis ? Kluczowe są dwie rzeczy

  • pcrecpp::RE re("(\\w+):\\s+(.+)"); czyli to jak tworzymy/compilujemy nasz regexp
  • re.FullMatch( line , &var, &val); i to jak dokonujemy opasowania

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 ;)

To tak offtopem napisałem o czymś z C++ ;)))

Py30

04 grudnia 2008, 10:44:10

Wyszedł Python 3000
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ć dokument o tym co się zmieniać NIE BĘDZIE

znajdz 130 roznic => lol !

03 grudnia 2008, 17:54:50

Dopasuj brakujace elementy

+

=

LOL :))

Gist > Pastie

01 grudnia 2008, 10:19:34

Gist :)))
Właśnie w pracy kolega pokazał mi gist'a :) jest naprawde fajny ;> wchodzimy na http://gist.github.com/ ... 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 ...

a tu przykład mojego modułu jakby ktoś nie chciał skrolować

Sinatra

28 listopada 2008, 21:54:15

Micro framework
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.

Jak zacząć ?
Najprosza strona w sinatra wyglądala mniej więcej tak

Wyświetla ona napis "Cze" ;D wewnątrz bloku opisująceog nasza akcje możemy używać szablonów erb czy haml w bardzo prosty sposób. Poprostu piszac erb :index 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.

Tak samo możemy dodać wspomniany wcześniej layout pisząc @@ layout i podajac jego treść, nie zpaomnijcie o yield ;)
Sinatra ma też całkiem fajny router

Na koniec warto dodać jak uruchomic naszą aplikacje, ruby strona.rb
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ę.

Co do potyczki Sinatra Merb to można by dodać tylko to... 01 Życie jak gaz