Balíček týždňa IV. (4.11.2007)

Dnešným balíčkom týždňa sa stáva Conduit - jednoduchá synchronizácia pre gnome.

Ak ste niekedy hľadali univerzálny program na synchronizáciu dát, už nehľadajte - je tu Conduit. Poskytuje množstvo možností a služieb medzi ktorými dokáže synchronizovať a ani pridanie vlastných nie je zložité.

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 →

Na novej doméne a hostingu

Áno, kane je späť. 1. november je ten deň kedy sa vracia. Na novej doméne (kane.sk) a hostingu (dreamhost.com). A má veľké plány.

V prvom rade chce pokračovať v seriáli o Ruby on Rails, pribudne pravidelná kategória hudba, v ktorej sa budú objavovať recenzie albumov, ktoré ho zaujali.

Ale dosť už v tretej osobe. Hosting u Dreamhostu som si zabezpečil už dávnejšie, takže prečo je blog spustený až teraz? Hlavnou príčinou je že som chcel nový wordpress a importovanie nebolo až také bezproblémové. Bolo to niekľkodňové laborovanie, exporty a importy databáz a nakoniec som aj tak musel všetký články spôsobom copy paste preniesť do novej databázy... No našťastie som to v zdraví prežil a vy si môžete prečítať tento článok.

Nakonie by som ešte chcel poďakovať fasterovi za pomoc s css-kom ;)

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 →

Balíček týždňa III. (8.7.2007)

Tento týždeň sa dostane hneď na dva balíčky. Funkcionalita oboch sa v niečom podobá - predchádzajú výskytu chýb. Jeden na CD/DVD médiách, druhý na vašom pevnom disku.

Balíčky tohto týždňa:dvdisaster a fslint

dvdisaster - predchádzame pohromám

dvdisaster screenshot

Ak aj vy zálohujete svoje dáta na CD/DVD potom sa vám bude hodiť tento program. Jeho úlohou je zabezpečiť čitateľnosť CD/DVD média. Po napálení média si ho môžete preskenovať, či neobsahuje chyby. Ak nie program vám umožní vytvoriť dáta pre budúcu obnovu.

Bohužiaľ program nedokáže opraviť už poškodené disky (ak neboli vytvorené dáta pre budúcu obnovu), no to ani nie je prakticky možné. Ak však boli dáta vytvorené úspešnosť obnovy je veľmi dobrá (závisí od miery poškodenia, ak je médium veľmi poškodené tak ho neopraví ani David Copperfield)

Program sa bude najskôr hodiť ľuďom, ktorý potrebujú zálohovať dôležité údaje na DVD, keď po čase začne médium dosluhovať a objavia sa prvé chyby chybné miesta sa obnovia pomocou .ecc súboru vytvoreného programom dvdisaster a môže sa bez straty napáliť znova.

fslint - lint pre váš harddisk

fslint screnshotAk ste niekedy programovali pravdepodobne viete, čo je to lint. Je to program na statickú kontrolu zdrojového kódu. Pomáha predchádzať budúcim chybám. Presne túto službu pre pevný disk nám poskytne tento program.

Jeho úlohou je kontrolovať dáta na pevnom disku a zbavovať ich:

  • Duplikovaných súborov
  • Súborov z chybnými názvami
  • Konfliktných názvou
  • Zabudnutých dočasných súborov
  • Neplatných odkazov
  • a mnoho ďalších…

Program pre všetkých, ktorý chcú udržiavať svoj filesystem v poriadku a dobrej kondícii.

Letné kino v Košiciach

Toto leto sa v Košiciach zmení Hlavná ulica na kino! Môže za to akcia z názvom Letné kino na Hlavnej, počas ktorej sa budú pri Dolnej bráne premietať filmy.

Výber je rôznorodý, aj tematicky aj krajinou pôvodu. Usporiadatelia sa neobmedzili iba na americké “trháky” ale dočkáme sa aj filmov z Francúzska, Slovenska, Nemecka.

Filmy sa premietajú vždy v nedeľu a stredu o 20:30. Vstupné je samozrejme zadarmo! Bližšie informácie nájdete na letnekino.sk

Dúfam že sa tam sem tam s fasterom uvidim :) ostatných pozývam tiež.

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

Velvet Revolver - Libertad

libertad cover3. júl je dátum kedy vyšiel (len oficiálne, na internete “vyšiel” o dva týždne skôr), mnou dlho očakávaný, nový album od skupiny Velvet Revolver - Libertad. Poďme sa teda naň pozrieť.Najprv trocha faktov:

Je to druhý album tejto hviezdnej skupiny, produkoval ho Brendan O’Brien (producent Stone Temple Pilots, Limp Bizkid ci Offspring). Čo sa týka skupiny, zostala v nezmenenom zložení.
Na albume sa nachádza 13 skladieb:

  1. “Let it Roll” - 2:31
  2. “She Mine” - 3:25
  3. “Get Out the Door” - 3:14
  4. “She Builds Quick Machines” - 4:02
  5. “The Last Fight” - 4:03
  6. “Pills, Demons & Etc.” - 2:54
  7. “American Man” - 3:56
  8. “Mary Mary” - 4:34
  9. “Just Sixteen” - 3:59
  10. “Can’t Get It Out of My Head” - 3:58
  11. “For a Brother” - 3:26
  12. “Spay” - 3:06
  13. “Gravedancer” - 8:42

Poďme sa pozrieť ako to vyzerá s jednotlivými pesničkami: Continue reading →

Balíček týždňa II. (1.7.2007)

Po týždni je tu opäť balíček týždňa dnes som si zobral na mušku ďalšiu skvelú utilitku, ktorá vám uľahčí kopírovanie.

Balíček tohto týždňa: Glipper - kopírovanie pod kontrolou
Ako určite viete, v linuxe sa dá v zásade kopírovať dvoma spôsobmi: buď klasicky Ctrl+c/x, Ctrl+v, alebo označením príslušného textu a vloženia stlačením prostredného tlačidla na myši. Glipper je aplikácia, ktorá archivuje kopírované texty pre budúce použitie. Opäť je to jedna z tých aplikácií, ktoré sedia v system tray-i a po stlačení klávesovej skratky sa objaví kontextové menu.glipper menu

Prvá položka je názov aplikácie a v zátvorkách používaná klávesová skratka (v tomto prípade nie je žiadna klávesová skratka), Na druhom mieste je text ktorý sa vloží po stlačení prostredného tlačidla na myši. Ďalšie sú posledné texty, ktoré boli uložené v schránke. Tučným písmom je vyznačený text ktorý bude vložený stlačením Ctrl+v.
V nasteveniach je možné nastaviť, ktoré schránky sa kontrolujú (Ctrl+c, middleclick), koľko položiek sa uchováva, a koľko z textu sa v kontextovom menu zobrazí.

Jednoduchý program, ktorý sa hodí hlavne ľuďom, ktorí často kopírujú texty, napríklad pri programovaní a svoju úlohu zvláda statočne.

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: