wtorek, 28 lutego 2012
niedziela, 26 lutego 2012
How to proper test scopes (named scopes)
I just read few posts about "how to test named scopes". I'm asking - why should I use FactoryGirl and create tons of unnecessary objects just to test `order(:position).first`?!
How not to do this
We've just created .. let's count .. 5 objects and made 2 unnecessary db queries
How to do this
It's useless to test Rails (it's really proper tested). We need to spec messages that goes between objects and given parameters.
czwartek, 16 lutego 2012
named_accessors: attr_accessors na sterydach
attr_accessor jest świetne (szczególnie jeżeli ktoś przychodzi do Rubiego np. z Javy), ale ma jedną zasadniczą wadę - nazwa zmiennej instancji == nazwa metody (settera i gettera). W 99% to bardzo dobrze, ale dla tego jednego procenta powstało named_accessors.
Mam nadzieję że komuś się kiedyś przyda :)
Mam nadzieję że komuś się kiedyś przyda :)
poniedziałek, 23 stycznia 2012
param_protected i Devise
Kilka dni temu pisałem już o gemie param_protected. Jeżeli używamy go razem z Devise, będziemy musieli zrobić zmodyfikować kontrolery i dodać definicję dozwolonych parametrów.
Po pierwsze musimy zmapować URL-e na nasze nowe kontrolery.
Po pierwsze musimy zmapować URL-e na nasze nowe kontrolery.
niedziela, 22 stycznia 2012
Hakierzy
Mam dość komentarzy na temat tych ciągłych ataków na rządowe strony. Jak można wypowiadać się na dany temat bez żadnej wiedzy.
Anonymous - cyber Al-Kaida?
Anonymous (ang., rzeczownik niepoliczalny), Anonimowi, Grupa Anonimowych – niezidentyfikowana grupa aktywistów z całego świata podejmująca protesty oraz inne działania w internecie. Działania przypisywane grupie "Anonymous" są podejmowane przez niezidentyfikowane jednostki, które przybierają nazwę "Anonymous" atakując serwery rządowe lub korporacyjne.W ostatnim czasie, na fali protestów przeciwko SOPA, PIPA czy ACTA w sposób zatrważający moim zdaniem roście poparcie dla grupy Anonymous. Poparcie graniczące wręcz z uwielbieniem. Chociaż może się wydawać, że Anonimowi są naszą ostatnią linią obrony, ostatnim bastionem wolności należy się zastanowić nad słusznością ich działań.
sobota, 21 stycznia 2012
Tapeta dla Rubistów
Choć grafik ze mnie żaden zrobiłem taką oto tapetę dla Rubistów: (oryginał tutaj. tak wiem, nałożyłem tylko logo Rubiego :P)
![]() |
| Link do pobrania |
Pulpit prezentuje się teraz znokomicie :)
piątek, 20 stycznia 2012
czwartek, 19 stycznia 2012
Haskell-Platform (+ GHC) na Mac OS X 10.7 (Lion)
Czym jest haskell każdy wie (jak nie, to zapraszam tu), więc nie będę go reklamował tylko od razu przejdę do sedna. Zakładam też że każdy użytkownik OSX używa Homebrew do zarządzania pakietami (jeśli nie to gorąco zachęcam!).
Ponieważ instalacja ghc (kompilatora Haskella) chwilę trwa dlatego dobrze jest uruchomić instalację z opcją -v żebyśmy widzieli cały czas co się dzieje i czy przypadkiem nie występują błędy kompilacji etc.
Opcja 64 też jest ważna! Bez niej nie skompilujemy prawidłowo haskell-platform
Teraz możemy uruchomić REPL Haskella (komendą ghci)
Ponieważ instalacja ghc (kompilatora Haskella) chwilę trwa dlatego dobrze jest uruchomić instalację z opcją -v żebyśmy widzieli cały czas co się dzieje i czy przypadkiem nie występują błędy kompilacji etc.
Opcja 64 też jest ważna! Bez niej nie skompilujemy prawidłowo haskell-platform
Teraz możemy uruchomić REPL Haskella (komendą ghci)
sobota, 14 stycznia 2012
param_protected wycina potrzebne parametry
param_protected to świetny gem, który przenosi funkcjonalność attr_accessible oraz attr_protected do kontrolerów. Składnia jest bardzo prosta:
Jedyny problem jest taki, że nie ma defaultowej listy dozwolonych parametrów. Tzn. że wycinane są takie atrybuty jak action, controller, id, utf8 czy (w przypadku używania devise) authenticity_token. Formularze nie będą przez to działać poprawnie, będziemy cały czas wylogowywani itd.
Jedyny problem jest taki, że nie ma defaultowej listy dozwolonych parametrów. Tzn. że wycinane są takie atrybuty jak action, controller, id, utf8 czy (w przypadku używania devise) authenticity_token. Formularze nie będą przez to działać poprawnie, będziemy cały czas wylogowywani itd.
czwartek, 5 stycznia 2012
Capybara i Devise - mock logowania
Piszemy request spec-i dla naszej aplikacji.
No i problem! Jak zalogować użytkownika?
No i problem! Jak zalogować użytkownika?
środa, 21 grudnia 2011
#next na każdym znaku Stringa
Jakiś czas temu deliberowaliśmy ( :] ) na forum jak najszybciej i najbardziej elegancko rozwiązać wywołanie #next na każdym znaku Stringa. Jeżeli ktoś nie wie jak działa String#next:
Niestety jeżeli wywołamy #next na ciągu znaków nie zadziała tak jakbyśmy chcieli:
Niestety jeżeli wywołamy #next na ciągu znaków nie zadziała tak jakbyśmy chcieli:
środa, 14 grudnia 2011
Mongoid: polimorficzne embeds_one
Nie da się
Załóżmy, że nasza aplikacja ma model MediaObject, który posiada tytuł, głosy itd. ale specyficzne informacje n/t obiektu (treść/link etc.) są w innym modelu (Media::Text, Media::Image etc.). Relacja oczywiście jeden-do-jeden. Jeżeli zrobimy to na zasadzie referenced assosiation, czyli relacje rodem z baz SQL, będziemy mieli zawsze n+1 zapytań. Mongoid co prawda obsługuje eager loading, ale nie dla relacji polimorficznych. Co więc możemy zrobić?
Tworzymy model MediaObject:
Oraz model Media::Resource - po nim będą dziedziczyć wszystkie modele z modułu Media
Teraz możemy dodać np. model Media::Text
Użycie:
Żeby ułatwić sobie życie, możemy wydelegować #content do MediaObject
Opcja allow_nil pozwala trzymać w #content pustą wartość. W tym przypadku to bardzo ważne, bo nie wiemy czy napewno wszystkie modele Media będą miały taką metodę. Gdyby nie miały, bez tej opcji model zawrze rzucał by wyjątek. Teraz użycie wygląda tak:
Załóżmy, że nasza aplikacja ma model MediaObject, który posiada tytuł, głosy itd. ale specyficzne informacje n/t obiektu (treść/link etc.) są w innym modelu (Media::Text, Media::Image etc.). Relacja oczywiście jeden-do-jeden. Jeżeli zrobimy to na zasadzie referenced assosiation, czyli relacje rodem z baz SQL, będziemy mieli zawsze n+1 zapytań. Mongoid co prawda obsługuje eager loading, ale nie dla relacji polimorficznych. Co więc możemy zrobić?
Tworzymy model MediaObject:
Oraz model Media::Resource - po nim będą dziedziczyć wszystkie modele z modułu Media
Teraz możemy dodać np. model Media::Text
Użycie:
Żeby ułatwić sobie życie, możemy wydelegować #content do MediaObject
Opcja allow_nil pozwala trzymać w #content pustą wartość. W tym przypadku to bardzo ważne, bo nie wiemy czy napewno wszystkie modele Media będą miały taką metodę. Gdyby nie miały, bez tej opcji model zawrze rzucał by wyjątek. Teraz użycie wygląda tak:
wtorek, 13 grudnia 2011
Bump to 1.9.3-p0
Dzisiaj (dopiero) zrobiłem update Ruby do wersji 1.9.3-p0. Dużo naczytałem się o poprawie startu appki, wykonywaniu testów itd.
Sprawdźmy jak to wygląda w praktyce :)
Po zainstalowaniu odpaliłem testy powstającej (a więc narazie niedużej) aplikacji Railsowej (Rails 3.1.3)
Sprawdźmy jak to wygląda w praktyce :)
Po zainstalowaniu odpaliłem testy powstającej (a więc narazie niedużej) aplikacji Railsowej (Rails 3.1.3)
Ruby 1.9.2
Ruby 1.9.3
Średnie czasy:
Ruby 1.9.2 =~ 16.69
Ruby 1.9.3 =~ 11.12(!)
A więc różnica ponad 5.5s. Całkiem sporo jak na 140 testów.
Update'ować? Opinie są różne, ale wydaje mi się, że jeżeli ma się dobrze otestowaną aplikację można spróbować. Jeśli testy przejdą to po co tracić codziennie te kilka minut (5s * odpalanie_testów_miliard_razy)?
niedziela, 27 listopada 2011
Ruby & Ruby on Rails 101
Ruby & Ruby on Rails 101. Krótka lista od czego zacząć** (będzie uzupełniana)
Ruby
1. TryRuby (Ruby w 15 minut)
2. Eloquent Ruby (moja "mini recenzja")
3. Desing Patterns in Ruby
4. Klasyk, tzw "Książka z Kilofem" - Programming Ruby
Ruby on Rails
1. Rails for Zombies
2. RailsGuides
3. RailsCasts
4. Ruby on Rails Tutorial
Za książki o Rubym trzeba niestety zapłacić (ale pamiętajmy, że to inwestycja!), natomiast źródła o Railsach są w 100% darmowe (no, RailsCasty przynajmniej do niedawna były w 100% darmowe, teraz część treści tam publikowanych jest płatna) i moim zdaniem wystarczające, aby zacząć pisać proste aplikacje. Książek do Railsów jest multum - począwszy od Agile, przez Rails 3 in Action aż po Rails 3 Way (ta ostatnia zdecydowanie dla zaawansowanych), ale moim zdaniem nie są one wymagane (tzn. da radę lepiej lub gorzej nauczyć się bez nich)
** głównie do publikacji na forum Ruby on Rails. Tam takie pytania (a co za tym idzie i odpowiedzi) padają bardzo często. Zamiast pisać to za każdym razem lepiej odesłać do linka ;)
Ruby
1. TryRuby (Ruby w 15 minut)
2. Eloquent Ruby (moja "mini recenzja")
3. Desing Patterns in Ruby
4. Klasyk, tzw "Książka z Kilofem" - Programming Ruby
Ruby on Rails
1. Rails for Zombies
2. RailsGuides
3. RailsCasts
4. Ruby on Rails Tutorial
Za książki o Rubym trzeba niestety zapłacić (ale pamiętajmy, że to inwestycja!), natomiast źródła o Railsach są w 100% darmowe (no, RailsCasty przynajmniej do niedawna były w 100% darmowe, teraz część treści tam publikowanych jest płatna) i moim zdaniem wystarczające, aby zacząć pisać proste aplikacje. Książek do Railsów jest multum - począwszy od Agile, przez Rails 3 in Action aż po Rails 3 Way (ta ostatnia zdecydowanie dla zaawansowanych), ale moim zdaniem nie są one wymagane (tzn. da radę lepiej lub gorzej nauczyć się bez nich)
** głównie do publikacji na forum Ruby on Rails. Tam takie pytania (a co za tym idzie i odpowiedzi) padają bardzo często. Zamiast pisać to za każdym razem lepiej odesłać do linka ;)
czwartek, 25 sierpnia 2011
One of keys
Edit: Okej, już wiem, która wersja jest najbardziej RubyWay :)
HashKeys@github - taki sobie o bajer z nudów. Użycie jest bajecznie proste - pobieramy hash_keys.rb (może zrobię z tego gema w wolnym czasie) a następnie:
HashKeys@github - taki sobie o bajer z nudów. Użycie jest bajecznie proste - pobieramy hash_keys.rb (może zrobię z tego gema w wolnym czasie) a następnie:
piątek, 22 lipca 2011
Nie róbcie update'u RubyMine do 3.2.2
Update: okazało się, że wystarczy wybrać z menu File -> Invalidate Caches... i w większości przypadków usuwa to błędy.
Wczoraj pojawił się update (podobno bugfix :/) RubyMine do wersji 3.2.2. Zainstalowałem, uruchomiłem i tzw. "dupa". Podpowiadanie składni przestało działać, skok do definicji przestał działać podgląd dokumentacji przestał działać (pewnie więcej rzeczy nie działało, tyle udało mi się zauważyć zanim zrobiłem downgrade). Wszystko się wysypało.
Wywaliłem w cholerę, zainstalowałem 3.2.1 (musiałem niestety wywalić całą konfigurację) i działa.
Radzę poczekać z aktualizacją na kolejną wersję (3.2.3?)
poniedziałek, 11 lipca 2011
wtorek, 28 czerwca 2011
UPDATE Rails 3.1: respond_with i pusty json/xml/yaml przy update
Update postu Rails3: respond_with i pusty json/xml/yaml przy update dla Rails 3.1. Plik application_responder.rb powinien w niej wyglądać tak:
Reszta pozostaje bez zmian.
Reszta pozostaje bez zmian.
niedziela, 19 czerwca 2011
Kod, który zawsze działa!
Remember, a great way to avoid broken code is to have less of it. The code that you never write will work forever.
- Russ Olsen, "Eloquent Ruby" (Addison-Wesley Professional, 2011)
Subskrybuj:
Posty (Atom)





