Entries Tagged 'Ruby on Rails' ↓

Opäť nový netbeans - 6.1

  • english
  • slovak

netbeans splashLen nedávno vyšliel Netbeans 6.0 už onedlho je tu verzia 6.1. Hoci podľa čísla verzia by sa mohlo zdať že ide len o kozmetické úpravy opak je pravdou. Vylepšenia sa dočkal výkon editora, ktorý teraz štartuje omnoho rýchlejšie. Je to uvedené aj v novinkách 6.1-ky tak som to len tak so zvedavosti otestoval a je to naozaj tak - u mňa dokonca ešte viac ako sa uvádza (uvádzané zrýchlenie až 40% je u mňa viac ako 300%).

Kým verzia 6.0 mala priemerný štart zhruba 1 minútu pri verzii 6.1 je to už len 20 sekúnd.A to už je teda poriadne vylepšenie. Za toto vývojárom veľká pochvala. Ešte niekoľko takýchto počinov a presvedčíme každého, že tá Java vlastne vôbec nie je pomalá :) Navyše bola zlepšená aj správa pamäte - teda Netbeans zaberá o niečo menej.

Z ďalších vynovení som si všimol hlavne lepšiu podporu pre písanie JavaDoc-ov, hoci podľa môjho názoru mohli ponechať starý JavaDoc editor z verzie 5.5. Bola pridaná podpora automatického dopĺňania @ tagov (@params, @return atď.)

Na stránke som si tiež všimol, že bola pridaná podpora pre JavaScript (vyznačovanie syntaxe, refaktoring, dopĺňanie kódu atď.). Pribudli tiež aj nové hinty pre Ruby respektíve Rails, teda postupne sa možno refaktoring bude dať jednoducho robiť aj v dynamicky typovaných jazykoch, čo je len skvelé!

Musím povedať, že vývojárom sa opäť podarilo zapracovať na tomto skvelom IDE a vylepšili časť, ktorá ma mrzela najviac - rýchlosť štartu a pamäťovú náročnosť, týmto sa Netbeans dostal o krôčik bližšie k dokonalému IDE.

Ak ste programátor a Netbeans ste ešte nevyskúšali, alebo ešte nemáte najnovšiu verziu môžete si ho stiahnuť tu. Netbeans 6.1 je zatiaľ vo fáze betaverzie, vydaný by mal byť 23. apríla 2008.

Metaprogramovanie v Ruby

V jazyku Ruby sa metaprogramovanie stalo štandardným spôsobom písania aplikácií a existuje množstvo techník, ktoré sa dajú použiť, ale existuje len málo materiálov. V tomto príspevku sa pokúsim dať dohromady aspoň základné spôsoby, ktoré sa v Ruby dajú použiť.

V prvom rade je na mieste otázka What the f*** is metaprogramming..? odpoveď nie je jednoznačná. Dalo by sa povedať, že ide o vytváranie programov, ktoré vytvárajú alebo modifikujú iné programy... Toľko definícia podľa wikipédie, poďme sa pozrieť ako to vyzerá v praxi.
Continue reading →

Ruby on Rails III. - MVC

Architektúra MVC

Potreba oddeliť od seba časti z rôznou funkcionalitou sa stáva dôležitou hlavne pri veľkých systémoch. Práve z tohto dôvodu vznikla MVC (Model View Controller) architektúra. Jednoducho povedané MVC nám aplikáciu rozdelí na niekoľko vrstiev:

Continue reading →

Textový editor pre Ruby - Gedit!

Textový editor síce nie je najdôležitejšou vecou pri programovaní (aj keď by sa o tom dalo polemizovať), ale dobrý editor nám prácu veľmi uľahčí a spríjemní.

Na Mac-u je voľba tuším jasná. Vo všetkých screencastoch, ktoré som mal možnosť zhliadnuť sa objavoval MacOS a jediný text editor - Text Mate. Vyzerá to byť veľmi slušný editor s množstvom funkcií. Ale pre ľudí nevlastniacich počítač s jabĺčkom je tu zlá správa: Text Mate je Mac OS only… (a navyše nie je zadarmo). Situácia nie je stratená, ukážem vám ako si niečo, čo sa editoru Text Mate priblíži (a možno aj prekoná) vyrobíte sami - a zadarmo! Continue reading →

Ruby on Rails II. - syntax

Minule sme si nainštalovali Ruby a Rails, v dnešnom diele sa pozrieme bližšie na jazyk ruby a jeho konštrukcie a syntax. Úvodom ešte musím pripomenúť že ma teší, že sa čoraz viac začína písať aj u nás (Čechy a Slovensko) o Ruby on Rails, predovšetkým musím spomenúť dva články na prievan.sk a tiež blog o RoR - na čo ma upozornil faster.

Trocha syntaxe

Keywords

V jazyku Ruby existuje niekoľko keywords - vyhradených slov. Sú to tieto:

BEGIN, END, alias, and, begin, break, case, class, def, defined?,
do, else, elsif, end, ensure, false, for, if, in, module, next,
il, not, or, redo, rescue, retry, return, self, super, then, true,
undef, unless, until, when, while, yield

Premenné, konštanty - identifikátory

V jazyku Ruby existuje niekoľko druhov premenných:

  • lokálne - začínajú malým písmenom (príklad: id, word)
  • globálne - začínajú ‘$’ (príklad: $counter)
  • inštančné (platnosť vrámci objektu) - začínajú ‘@’ (príklad: @instance, @Nie_konstanta)
  • class (platnosť vrámci triedy) - začínajú ‘@@’ (príklad: @@class, @@Ziadna_konstanta)
  • konštanty - začínajú veľkým písmenom (príklad: Nejaka_konstanta)

Komentáre

Pre jednoriadkové komentáre sa používa ‘#’. Napríklad:

a=3*b #vynasobi b tromi!!

Pre viacriadkové komentáre sa používa =begin a =end, ktoré slúžia na vkladanie dokumentácie, použitie:

=begin
 
Je jedno co tu napisem
 
interpreter to aj tak nezaujima
 
a odignoruje to... :/
 
=end

Premenné, konštanty - typy

V jazyku Ruby premenné nemajú typy. Objekty na ktoré odkazujú však typ majú. Najzákladnejšie typy sú numeric (číselný dátový typ), character (znak) a string (reťazec).

Pri číslach a znakoch je to viacmenej jasné, reťazce sa môžu nachádzať buď v apostrofoch ‘reťazec v apostrofoch’ alebo v úvodzovkách “iný reťazec”. Kým apostrofy vyznačujú jednoduchý reťazec, v ktorom sa môžu maximálne nachádzať odescapované lomítka, v reťazci vyznačenom úvodzovkami je možná aj interpolácia medzi jednotlivými typmi. Napríklad takto:

a=2
 
 puts "Premenná a má hodnotu #{a}"

Existuje ešte ďalší typ reťazcov, ktorý sa používa hlavne pri skriptoch. je ohraničený znakom ` (opačný dĺžeň?). Takéto reťazce obsahujú príkaz, ktorý sa odošle systému a obsah reťazca je nahradený výstupom daného príkazu. Dlhšie príkazy sa môžu vyznačovať tiež %x[]. Napríklad:

`ls -l`
 
 %x[tail /etc/apt/sources.list && top]

V jazyku Ruby sú polia (arrays) veľmi silným typom. Polia môžu obsahovať ľubovoľné typy, dokonca aj zmiešané. Všetky polia sú inštanciou triedy Array a majú k dispozícii veľa metód. Príklady konštrukcie polí:

[1,2,3] #pole čísel
 
[1,2,"slovo"] #pole s číslami a reťazcom
 
{1,["jablko","hruška"], "niečo iné"]
# hovorí sa že jablká sa nemajú miešať s hruškami

Veľmi často sa používajú polia reťazcou, preto v jazyku Ruby existuje skratka pre vytváranie poľa reťazcov:

%w[toto je pole retazcov]

Polia samozrejme používajú indexy na prístup k prvkom poľa:

 prvy=pole[0]
 
pole[0]=pole[1]

Ďalším silným konceptom v Ruby je hash - mapovanie. Je to vlastne vytvorenie dvojíc kľúč => hodnota (key => value). Kľúč predstavuje index na ktorom sa daná hodnota nachádza. Napríklad:

{"peter@gmail.com"=>"Peter",
"darth_vader@hotmail.com"=>"Darth",
"sample@domain.ext"=>"Sample"}

Potom v programe môžeme použiť na pristupovanie k položkám takéto indexy:

petrov_email=email["Peter"]

Podmienky, vetvenie, cykly

Okrem klasického if má Ruby aj menej tradičnú podmienku unless, čo je opak if. Korešpondujúce riadky tabuľky majú rovnaký význam:

 

 

if x < 5 then

statement1

end

 

 

unless x >= 5 then

statement1

end

 

 

if x < 5 then

statement1

else

statement2

end

 

 

unless x < 5 then

statement2

else

statement1

end

 

 

statement1 if y == 3

 

 

statement1 unless y != 3

 

 

x = if a>0 then b else c end

 

 

x = unless a<=0 then c else b end

Case je v Ruby oveľa silnejší ako v ostatných jazykoch. Dovoľuje totiž provnávať akúkoľvek hodnotu (aj reťazce). V Ruby vyzerá takto:

case "Tu je reťazec"
 
 when "hodnota 1"
 
 puts "A je spravne"
 
 when "UPLNE INA HODNOTA"
 
 puts "B je spravne"
 
 when /char/
 
 puts "C je spravne"
 
 else
 
 puts "Ziadna z moznosti A, B, C nie je spravne"
 
 end

Pri číselných hodnotách môže byť vstupná hodnota testovaná aj na príslušnosť v určitom rozmedzí (napríklad od 0 do 100 - 0..100)

Pre slučky existuje množstvo spôsobov ako ich vytvoriť:

 

 

# Loop 1 (while)

i=0

while i < list.size do

print "#{list[i]} "

i += 1

end

 

 

# Loop 2 (until)

i=0

until i == list.size do

print "#{list[i]} "

i += 1

end

 

 

# Loop 3 (for)

for x in list do

print "#{x} "

end

 

 

# Loop 4 ('each' iterator)

list.each do |x|

print "#{x} "

end

 

 

# Loop 5 ('loop' method)

i=0

n=list.size-1

loop do

print "#{list[i]} "

i += 1

break if i > n

end

 

 

# Loop 6 ('loop' method)

i=0

n=list.size-1

loop do

print "#{list[i]} "

i += 1

break unless i <= n

end

 

 

# Loop 7 ('times' iterator)

n=list.size

n.times do |i|

print "#{list[i]} "

end

 

 

# Loop 8 ('upto' iterator)

n=list.size-1

0.upto(n) do |i|

print "#{list[i]} "

end

 

 

# Loop 9 (for)

n=list.size-1

for

i in 0..n do

print "#{list[i]} "

end

 

 

# Loop 10 ('each_index')

list.each_index do |xt

print "#{list[x]} "

end

Na kontrolu behu slučiek sa používa kľúčové slovo break, ktoré “vyskočí” so slučky. (rovnako ako napríklad v C-čku v prípade vnorených cyklov skončí len najvnútornejší)

Kľúčové slovo retry sa používa s iterátorom (slučka for), alebo v begin/end bloku pri výnimkách. Pri použití v cykle for sa iterátor reštartuje.

Pre cykly while a until sa namiesto retry používa kľúčové slovo redo. Kľúčové slovo next, sa používa na vyskočenie z najvnútornejšieho cyklu, pričom sa pokračuje ďalej.

Výnimky

Ruby rovnako ako ostatné jazyky (Java, C#) obsahuje koncept výnimiek. Na “vyhodenie” výnimky sa používa kľúčové slovo raise, na zotavenie sa používa blok begin/end, na odchytenie sa používa rescue. Príklady:

begin
 
 # Nejaký kód
 
 rescue Výnimka1
 
 # ...
 
 rescue Výnimka2
 
 # ...
 
 else
 
 # Iné výnimky...
 
 end

V mnohých prípadoch chceme vyskúšať opraviť čo sa pokazilo a skúsiť znova.. Práve tu nám príde vhod retry:

begin
 
 # Chybový kód...
 
 rescue
 
 # Pokúsime sa o nápravu...
 
 retry # Skúsime znova
 
 end

Niekedy, napríklad pri práci so súbormi je potrebné vykonať určité akcie bez ohľadu na to či nastala výnimka alebo nie. V týchto prípadoch sa používa ensure:

begin
 
 # Chybový kód...
 
 rescue
 
 # Vysporiadame sa s chybou
 
 ensure
 
 # Toto sa vykoná vždy
 
 end

Existujú ešte zjednodušené zápisy odchytávania výnimiek:

x = a/b rescue puts("Delenie nulou!")

V metódach sa môže rescue blok umiestniť na koniec metódy, vtedy sa odchytávajú výnimky v celej metóde:

def vzorova_metoda
 
 # telo...
 
 rescue
 
 # zotavime sa z vynimiek...
 
 end

Na dnes je to všetko, nabudúce si povieme niečo o OOP, dynamickom prístupe a metaprogramovaní.

Ruby on Rails - úvod a inštalácia

ruby on rails logoRuby prichádza

Možno ste už počuli o Ruby on Rails, skvelom a veľmi porduktívnom spôsobe vytvárania webových aplikácií. Ak nie tak vám to v skratke zhrniem. Ruby je programovací jazyk, ktorý vznikol v roku 1995 a medzi jeho hlavné črty patrí:

  • je objektovo orientovaný
  • 4 druhy “viditeľnosti” premenných (globálna, pre triedu, inštanciu a lokálna)
  • garbage collector
  • preťažovanie operátorov
  • reflexia a metaprogramovanie

Ok to je Ruby. A čo Rails?

Rails je webový rámec pre jazyk Ruby. Ak vám niektoré zo slov “webový” alebo “rámec” nič nehovorí tak vám prezradím že web je napríklad aj to čo práve čítate ( :) ) a rámec je nejaký znovupoužiteľný, všeobecný návrh softwarového systému, väčšinou pozostávajúci z abstraktných tried.

Práve znovupoužiteľnosť je pri Rails kľúčovým slovom. Všetky časti sú uložené na jednom konkrétnom mieste a nie je ich potrebné písať nanovo. Ďalšou dôležitou zásadou je “konvencia pred konfiguráciou”. To znamená že programátor musí špecifikovať a nakonfigurovať len nekonvenčné aspekty v programe, ostatné fungujú automagicky.
Inštalácia

Neviem či sa dá napísať jeden “správny” návod ako nainštalovať Ruby on Rails. Hlavne kôli tomu že výber servera je na vás. Takže je len otázkou chuti či nainštalujete apache, nginx, lighttpd alebo budete používať štandardne dodávaný webrick. Postup pri ľubovoľnom serveri sa zhoduje v týchto krokoch:

  1. Nainštalovať Ruby
  2. Nainštalovať Ruby Gems
  3. Nainštalovať Ruby on Rails pomocou Ruby Gems

Tak teda začneme. Presvedčíme sa, či máme aktuálene všetky balíky:

sudo aptitude update && sudo aptitude upgrade

Nainštalujeme Ruby:

sudo apt-get install ruby ri irb rdoc

Ak nemáme nainštalujeme aj balíčky súvisiace s databázou (opäť je výber na vás, ja som sa rozhodol pre klasickú MySQL) teda konkrétne balíčky: mysql-server libmysql-ruby ruby1.8-dev libdbd-mysql-perl libdbi-perl libmysql-ruby1.8 libmysqlclient15off libnet-daemon-perl libplrpc-perl libreadline-ruby1.8 libruby1.8 mysql-client-5.0 mysql-common mysql-server-5.0

Zo stránky Ruby Forge stiahneme najnovšiu verziu balíka rubygems (v čase písania článku 0.9.4), rozbalíme a spustíme setup.rb:

sudo wget http://rubyforge.org/frs/download.php/20989/rubygems-0.9.4.tgz

cd rubygems-0.9.4

sudo ruby setup.rb

Teraz môžeme nainštalovať Rails:

sudo gem install rails --include-dependencies

Ak by náhodou inštalácia zlyhala treba skúsiť

sudo gem update

Teraz by sme mal mať naninštalované Ruby on Rails, kto chce môže doinštalovať nejaký server. To si ukážeme nabudúce. Nateraz si ešte môžeme overiť či sa nám inštalácia podarila. Vytvoríme si priečinok, (napríklad ~/rails) a tam spustíme:

rails test

cd test

./script/server

Týmto by sa nám mal spustiť server webrick, ktorý je štandardne umiestnený na 0.0.0.0:3000, teda do prehliadača zadáme túto adresu.

Na záver zopár užitočných odkazov: