//DEVGURU

Author's entries:

Proudly presenting has_uniq_token.

Thursday, December 10th, 2009

In one of our rails projects, we found that a lot of models needed some sort of unique token or guid generated before saving. Most of them were then used in routes or something similiar, but all of them were generated by callbacks in each model. Since that methods were mostly effect of copypasta, i decided to abstract the code, and make a plugin of it.

A bit of meta programming later, i’m proud to present the results: http://github.com/netguru/has_uniq_token/

Hope you find it useful.

Validating email in rails

Tuesday, November 17th, 2009

That’s pretty basic stuff but if you wonder how to validate email in rails check out this plugin:

http://github.com/dancroak/validates_email_format_of/

Good luck.

Simple trick to use sql dump in rails

Friday, October 30th, 2009

Fastest way to use sql dump when riding Ruby On Rails.

script/dbconsole < dumpname.sql

Ruby and RoR – picking every n-th element of an array

Monday, October 26th, 2009
def every_nth(nr)
self.in_groups_of(nr).map(&:first)
end
def every_nth!(nr)
self.replace(self.every_nth(nr))
end
Picking every n-th element of an array might look like this: (via @d3x)

Define:


class Array
  def every_nth(nr)
    self.in_groups_of(nr).map(&:first)
  end
  def every_nth!(nr
    self.replace(self.every_nth(nr))
  end
end

and use:


>> (1..9).to_a.every_nth(3)
=> [1, 4, 7]

Rails and IE false image upload headers.

Wednesday, January 14th, 2009

Some time ago, when I was young and unexperienced (ok, it was an hour ago…), I’ve found out that my image upload form is not working on IE. No errors, but no image either.

Here is what i came to  after an hour of debug:

the model has following validation rule:

validates_attachment_content_type :content, :content_type => ['image/jpeg', 'image/png', 'image/gif']

but IE sends false image header (god knows why?) so you need to add:

‘image/pjpeg’, ‘image/x-png’

to get it going again.

Works like a charm.

Firebug dla IE 6!!!

Friday, January 2nd, 2009

Jakis (dość już długi) czas temu, znajomy pokazał mi rozszerzenie do Firefoxa o nazwie Firebug. Wtedy byłem nim zachwycony i ten zachwyt choć z małymi przerwami nie przestał mnie opuszczać aż do dziś. Ciężko sobie wyobrazić w obecnej chwili webdevelopment bez użycia tego narzędzia, co można zresztą zobaczyć chociażby w poprzednim poście.

I choć jest to niesamowicie przydatne narzędzie ma ono jedną poważną wadę – jak sama nazwa wskazuje będzie działać tylko w Firefoxie.  Część przeglądarek udostępnia nam podobne, mniej lub bardziej przydatne narzędzia (np. Web Inspector w Safari czy Chrome) ale pozostaje jeden duży problem – co z Internet Explorerem 6?

W IE6 oczywiście takie narzędzie przydało by się najbardziej, ze względu na niesamowitą ilość błędów interpretacji CSS’a, czy dość specyficzne (innaczej mówiąc złe) podejście do interpretacji JavaScriptu. Z pomocą może nam przyjść IE Developer Toolbar, jest to jednak narzędzie przygotowane przez sam MS co niech świadczy o jego jakości – co za tym idzie nawet do niego nie zalinkuje.

Dlaczego? Bo z odsieczą przybywa nam DebugBar – i to już jest bardzo poważne narzędzie, którego autorzy większość czasu spędzają prawdopodobnie patrząc na samego Firebuga i myśląc w czym by tu jeszcze go naśladować.

I tak DebugBar udostępnia nam wszystkie najważniejsze funkcjonalności jakie oferuje Firebug, w prawdopodobnie maksymalnej jakości jaką sie da wyciągnąc z IE. Dostajemy dostęp do prawdziwej działającej konsoli JS i prawdzej działającej przeglądarki zasobów http(s) i prawdziwego działającego inspektora elementów strony. Wszystko jest w ogóle prawdziwe i działające, a development w IE6 nagle przestaje być taki straszny.

Ahhh… (westchenie kodera CSS któremu development w IE nagle przestał być taki straszny).

Haml czyni cuda – czyli dlaczego koder HTML’a woli być koderem HAML’a

Monday, October 20th, 2008

Logo Hamla
Jakiś czas temu wewnątrz netguru rozgorzała krótka żarliwa dyskusja na temat “Czy warto uzywać HAML’a”. Małe wewnętrzne lobby, utworzone na potrzebę zdarzenia szybko przeforsowało taką decyzje i teraz programiści szczęśliwi mogą go używać do woli. OK.

Tylko po co to zamieszanie??

Gdy rozwiniemy skrót HAML (w moim przypadku zezując na drugi monitor gdzie otwarta jest strona projektu) dowiem się żę jest to (x)HTML Abstraction Markup Language – póki co nic fajnego. Starając jakoś to przybliżyc musimy powiedziec że jest to język używany do tworzenia szablonów, mogący zastąpić popularnego rhtml’a w frameworku RoR.

Pomijając moją nieudolną próbę definicji tego pojęcia HAML to w praktyce poprostu jeden wielki skrót HTML’a. Z założenia autorzy napisali go by ulżyc programistom framework’a RoR, ale plotka głosi istnieją wersje, które spokojnie zadziałają również w php i ASP .NET.

Jego podstawową zaletą jest fakt, że jest go najzwyczajniej w świecie mniej. To co tradycyjnie w rhtml’u wymagało napisania czegoś takiego:

<div class="jakas_klasa">
Treść która nas urzeka
</div>

w HAMLu sprowadza się do:

.jakas_klasa Treść która nas urzeka

I uwierzcie mi że potem jest tylko lepiej. Przeciętnie takie pisanie szablonu w HAML’u to ok 40% kodu, nie mówiąc już o tym jak przejrzyście robi się się w takich szablonach. Dla porównania przykład, który możemy znaleźć w tutorialu do HAML’a.
Rhtml:

<div id='content'>
  <div class='left column'>
    <h2>Welcome to our site!</h2>
    <p>
      <%= print_information %>
    </p>
  </div>
  <div class="right column">
    <%= render :partial => "sidebar" %>
  </div>
</div>

HAML:

#content
  .left.column
    %h2 Welcome to our site!
    %p= print_information
  .right.column= render :partial => "sidebar"

Widać tu od razu kilka sztuczek jakich używa się w HAML’u by definiować znaczniki. Tworząc nowy znacznik używamy składni %nazwa_znacznika, lub %nazwa_znacznika.klasa gdy chcemy stworzyć znacznik z atrybutem class albo %nazwa_znacznika#jakis_id gdy potrzebny nam atrybut id. Warto zauważyć dwa fakty – po pierwsze, html’owy div jest znacznikiem domyślnym w HAML’u i nie musimy go pisać, starczy zdefiniować tylko class lub id, po drugie HAML jest “white space sensitive” jak piszą autorzy – zmusza nas on do poprawnego wcinania kodu co w praktyce okazje się mieć zbawienne skutki. Wszystkich zainteresowanych większą ilością informacji zachęcam do dokładnego zapoznania się z tutorialem.

Część z Was pewnie jest w tym momencie wciąz zdegustowana początkiem mojej wypowiedzi gdzie wspomniałem, że “programiści szczęśliwi mogą go używać do woli”. Teoretycznie ze względu na fakt, że HAML oferuje nam zupełnie nową składnie do tworzenia szablonu, moglibyśmy powiedzieć że jest on nieużyteczny dla koderów HTML’a i CSS’a którz wcale nie muszą umieć programować. Ponieważ jest to faktycznie kluczowa kwestia postanowiłem zapytać o zdanie naszego firmowego kodera. Zapytany o HAML’a  Marcin powiedział:

HAML jest tak genialny, że po tym jak się go nauczyłem nie mogę zasnąć wieczorem zmartwiony myślą, iż nie jest mi dane używać go w każdym projekcie

(oczywiście wszycy którzy znają naszego kodera wiedzą jak bardzo sparafrazowana i ocenzurowana jest ta wypowiedź)

W praktyce faktycznie okazuje się, że autorzy nie kłamią pisząc:

Haml feels odd for the first 20 minutes, but then after that YOU WILL BE FASTER.

Oprócz genialnej w użyciu składni, najnowsza wersja 2.0  HAML’a oferuje nam nawet większą prędkość renderowana szablonów nić tradycyjny Rhtml, co wytąca jeden z najpoważniejszych argumentów jaki mieli sceptycy. Co więcej faktycznie po pierwszych 20 minutach prób z HAML’em jesteśmy już w stanie spokojnie z niego korzystać co skutkuje jak określa jeden z naszych teraz już “szczęśliwych” programistów:

Jest mniej tego plugawego htmla w kodzie!

(tym razem bez cenzury :P )