Kde začít v Ruby aneb věštírna, mýdlo & friends

Čím začít, když jste programovali v PHP a zajímáte se o nové technologie a neosvědčené postupy? Ruby on Rails je jasná odpověď.

Ptáte se proč? Z vlastní zkušenosti vím, že programování v PHP není úplně triviální záležitost. Naučíte se rychle postavit docela složitý web, najdete hromady příkladů, máte z čeho vycházet. Proto není špatné s ním začít, abyste pochopili o čem webové programování je. Jenže jednoho dne už nebudete mít chuť neustále se opakovat v psaní kódu. Zestárnete a přestanete si pamatovat pořadí parametrů (tzv. Haystack-Needleův paradox). Pomůžete si vynikajícím IDE a na chvilku si budete říkat, že je zase všechno v pořádku. Budete přejedení objektovým modelem PHP a rozsáhlé aplikace, které jste napsali, začnou stárnout přímo před očima. Přestane vás to bavit a budete přemýšlet, jak z toho ven. Budete hledat něco čistšího a hlavně zábavnějšího.

Docela obstojně čistým je pro mě osobně Ruby a pro web Ruby on Rails. Pěkná je i Java, ale pokud jste i ve svém pokročilém věku stále moderně uvažující tvorové, přijde vám možná tak trochu zkostnatělá. Nikomu to nevnucuji, odmítám se o to přít, tak to prostě vidím já.

Jak začít s Ruby on Rails? Nejdříve je vhodné dozvědět se něco o Ruby, abyste nebyli moc překvapení. Nejlépe začít něčím ne příliš velkým, web service je naprosto ideální pidi-projekt, jak si ostatně ukážeme v následující minutě. Není to nudné jako velké projekty zvící milionů řádků skvělého kódu, není to ani příliš jednoduché a při programování se dozvíte pár nových věcí. Když budete chtít.

Začněme serverem:

require 'soap/rpc/standaloneServer'
require 'oci8'

class SimpleClass
  def birthDay(date)
    r = OCI8.new("username", "password", nil).exec("SELECT
        TO_CHAR(TO_DATE('#{date}', 'DD.MM.YYYY'), 'DAY') FROM DUAL")
    r.fetch
  end
end

class SimpleServer  SOAP::RPC::StandaloneServer
  def on_init
    srv = SimpleClass.new
    add_method(srv, "birthDay", "date")
  end
end

server = SimpleServer.new("srv", "http://localhost/srv", "127.0.0.1", 80)
trap('INT') {
  server.shutdown
}

server.start

Zatím se nenašel dobrovolník, který by chtěl komentovat můj kód. Navíc jsem toho názoru, že v tomto příkladu nejsou komentáře ani potřeba. Takže tomu budete muset porozumět sami.

Jak vidno, náš server má na starost jedinou věc. Má odpovědět klientovi na palčivou otázku, co bylo při jeho narození vlastně za den v týdnu. Že jste to už dlouho chtěli zjistit, ale neumíte to spočítat?
Proces stárnutí je neúprosný, takže se počítáním pro dnešek nebudeme zatěžovat. Raději si ukážeme, jak to za nás udělá třeba nějaká databáze. Když říkám databáze, tak pro jistotu nějaká použitelná: Oracle XE.

Protože jste nesmírně šikovní (a ovládli jste všechna tajemství copy and paste), máte nyní jednoduchý SOAP server. Takže asi budete chtít mít i nějakého toho SOAP klienta, ne?

Zde je tedy velmi jednoduchý klientík:

require 'soap/rpc/driver'

date   = ARGV.shift or raise "Nemáš se na co ptát?"
client = SOAP::RPC::Driver.new("http://127.0.0.1:80", "http://localhost/srv")
client.add_method('birthDay', 'date').to_s
puts client.birthDay(date).to_s

Klient i server můžete pustit na stejném stroji, ale nemusíte se omezovat, stačí změnit adresy. Ovšem pozor, http://localhost/srv není adresa, nýbrž namespace pro vaši skvělou novou službu, takže je dobré zachovat na obou stranách stejný, aby si klient se serverem rozuměli.

Že to bylo příliš snadné a je lepší začít něčím jiným? Že je naprosto šílené ptát se databáze na den v týdnu? Že jste si nic neodnesli? Něco tomu chybí? Dobře, dobře, co byste tak ještě chtěli vědět?

Související odkazy

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Time limit is exhausted. Please reload CAPTCHA.

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..