0) Ruby on Rails for assholes (Ruby on Rails za kretene)

 Uvodnik

Če si želite, da vas nekdo zmerja in žali med tem ko se trudite učiti programiranja, potem ste prišli na pravo mesto!
Jaz, Hoornet, se bom posebej potrudil, da ti predam del znanja v skrajno nenavadni obliki. Zelo verjetno se ne boste naučili prav ničesar. V primeru da spravim v jok vsaj enega bralca bo moje delo opravljeno.
Zatorej pripravi svoj ego ščit in se odpravi na pustolovščino, ki pa se bo najbrž končala že danes saj se preveč len da bi napisal več kot nekaj vrstic na blog.
Moje ime je Hoornet in jaz sem znan po nesposobnosti!
Stopi v moj svet in postani neuporaben tudi sam!
In vseskozi si boš mislil da si se celo nekaj naučil! Ha! Zmota!

1) Inštaliraj Ruby on Rails

Oh, ti nesrečni človek, ki vstopaš v sobane kretena, uboga je tvoja glava.

Hoornet’s proverb (17. century)
 
Kaže,da bom neki klikal po knjigi Ruby on Rails Tutorial 3.2….
Inštalacija poteka tako:
Enostavno poinštaliraj RailsInstaller, ki ga najdeš na, hmmm, http://railsinstaller.org
Za vse nadaljno delo v command promptu uporabljaj “Command Prompt with Ruby and Rails”, ki ga najdeš pod Start->All programs->Railsinstaller

2) Ustvari sample_app

Najprej ustvari mapo kjer boš ustvaril rails app.
Sam uporabljam mapo RAILS za igranje s sabo 🙂
Do this:

D:GitHubFilesLearningRAILS>rails new sample_app -T
      create
      create  README.rdoc
      create  Rakefile
      create  config.ru

  [ Removed half a screen of this for reasons of sanity. ]

      create  vendor/assets/stylesheets/.gitkeep
      create  vendor/plugins
      create  vendor/plugins/.gitkeep
         run  bundle install
Fetching gem metadata from https://rubygems.org/...........
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Using rake (10.0.3)
...Your buudle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

Komanda je več ali manj očitna. Edino kar je omembe vredno je

-T

Ta opcija namreč pomeni naj zgradi Rails app BREZ test direktorija.

Čas je za Git

Dragi (edini) bralec bloga!
Naj te danes napotim k neverjetno uporabnemu orodju modernega razvijalca programja. 

Uvodnik z malo zgodovine

Gre za enega najpopularnejših orodij za source control. Pred leti smo gonili CVS. Kasneje smo spoznali zmoto in naveliko preheblal na SVN oz. Subversion, kot smo mu pravili ljubkovalno. Delal je dost ql za tiste čase, če si seveda zadovoljen z nujno povezavo s serverjem za vsako dodano spremembo.
Ampak pred pa leti je popizdil The Linus!
Ja, taisti midel, ki je izumil Linux in ki se je dnevno zgražal nad grozljivim delom, ki ga je opravljal. In sicer gre za managing kode za Linux!
Si lahko predstavljaš vso kramo, ki jo ta model dnevo poriva v Linuxov repozitorij!
In ko model za nameček naleti na licenčne omejitve source control sistema, ki ga je takrat uporabljal je bila jeba popolna!
Tip popizdi in se dela loti sam, In v 14 dneh rukne ven eno začetno  verzijo SCM-ja z imenom Git!
Iskaže pa se fa je zadeva tok ql in tok hitra in univerzalna, da jo kmalu posvojijo tudi druge veje open source communitya.
Npr. Ruby folk! In ker zadnje čase Ruby kle gonmo je edino prav da tudi git posvojimo.

 Enouporabniško delo z Git (brez badaljnih nakladanj)

Ok. Nočeš torej vedeti zakaj je Git tak zakon itd. Zanima te zgolj kako začet z delom čimprej.
You’ve come to the right place, asshole!

Install the damn fence (i mean git)

Najprej seveda rabiš poinštalirat sam git. Go here, jerk! And look around for the download, won’t ya!
Windows idioti, kot jaz lahko grejo direkt na: http://git-scm.com/download/win
Ob času pisanja tega posta je bla vezija cca. 1.8.1
Skratka poinštaliraj git. Bili so časi, še nedavno tega (lani?) ko je bila inštalacija tega orodja malce zakomplicirana; prihajajoč iz Linuxa etc. Danes temu ni več tako. Predlagam pa da pokljukcate TrueType font, izberete “Run Git from win Command prompt” in drugo pustite pri meru. Če se odločite, da boste izbrali Easy verzijo, potem poklikajte še uni dve podopciji, t.j bash in Gui… 🙂

Prvi koraki…ali post inštalacija

Glede na to, da uporabljaš git prvič bi blo dobr povedat mu kdo za hudiča ti sploh si. To ti zna priti prav, ko bo treba kazati s prstom na druge, ko pride do zajbka v kodi:
“Kreten debiln od šefa! A ne vidiš kle! Kle ti kažem, kle, idiot! A ne vidiš kdo je podpisan pod commitom? A je to mogoče moje  ime? Prašam… Mislem sam rašam! A JE TO MOGOČE MOJE IME! Kaj piše kle?! Kle piše Janez Janša! A je men ime Janez Janša?
Ne! Men ni ime Janez Janša! In kaj piše kle? 
Kle piše Janez Janša!
Torej? Kdo je commitav ta del kode? 
A sm bil to jest?
Ne! To je bil Janez Janša!”
itd.
Skratka: There is enough blame to go arround 🙂
Pri vsakem commitu (to je zapisu stanja kode, kot je bilo v tistem trenutku) je zraven zapisan komentar avtorja commita in njegovo ime.
Do this:
$ git config --global user.name "Slovenec Brezkurcni"
$ git config --global user.email slovenec@brezkurcni.si
 

Zgornjo zadevo naklofaš v prompt samo enkrat, saj se zadeva (glej –global oznako) zapiše v tvoj user profil, nekje v .gitconfig dir.

Če hočeš prevert nastavitve do this:
git config --list

Ven bo vrgu neki podobnega kot:

core.symlinks=false
core.autocrlf=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
user.name=
Slovenec Brezkurcni
user.email=slovenec@brezkurcni.simerge.tool=kdiff3
mergetool.kdiff3.path=C:/Program Files/KDiff3/kdiff3.exe
diff.guitool=kdiff3
difftool.kdiff3.path=C:/Program Files/KDiff3/kdiff3.exe
difftool.kdiff3.cmd="C:/Program Files/KDiff3/kdiff3.exe" "$LOCAL" "$REMOTE"
core.editor="C:/Program Files/GitExtensions/GitExtensions.exe" fileeditor
core.autocrlf=true 

Seveda bo zadeva samo podobna. Zgornji izpis je bil izveden na kompu, ki ima zraven poinštaliran še
git extrension. Če ga hočeš ga maš kle, kjer si lahko kaj več o paketutudi prebereš.

Let’s init my …
Ok. Napredek! (če ti git ne dela c command promptu bi znalo bit dobr znova zagnat winse. Kaj češ, tehnologija prejšnjega tisočletja pač. Hehe. hehe. muahahhaha)
Do that:
1) 

 Start->All programs->Git->Git Bash

Evo ti slike:

2) Spizdi v mapo, katere vsebino (in struktoro) hočeš soravit pod verssion control (se sliš kot da ga daješ u jarem avtoritarne družbe). In ne pozabit da je bash, linux-like in ne windows-like (glej spodaj napako namesto / ):

Hoornet@HOORNET-PC ~
$ cd D:GitHubFilesBLOG
sh.exe”: cd: D:GitHubFilesBLOG: No such file or directory
Hoornet@HOORNET-PC ~
$ cd D:/GitHubFiles/BLOG
Hoornet@HOORNET-PC /d/GitHubFiles/BLOG
$

Ok. Torej recimo da sem v željeni mapi. Čist vseen je, ali je mapa prazna alin pa že ima vsebino. Ko namreč začenemo komando:

 $ git init
Initialized empty Git repository in d:/GitHubFiles/BLOG/.git/
Hoornet@HOORNET-PC /d/GitHubFiles/BLOG (master)
$

smo omenjeno mapo in vse podmape z vsebino vred postavili v source control. Seveda lahko ignoriramo določene mapi, fajle ali tipe fajlov ampak o tem (morda?) drugič.

Če sedaj damo pregledat kaj vse je v mapi, bomo videli, da je git dodal novo mapo z imenom:
.git

V tej mapi IN SAMO V TEJ MAPI je vse kar se tiče vaše pravkar init-ane mape in njene vsebine (dejmo zej temu pravt kar samo mapa. Nanaša se na vse podmape in svo vsebino v njih). Git nima svoje mape v vsakem poddirekltoruiju kot ste navajeni ustrahovani SVN-jevci. Totalni zakon, kadar hgočete skopširat vse kar mate v mapi brez gitovega dela!!!
Pa dejmo prevrit kva je sedaj not v mojem primeru.
3) Do this:

$ ls -a
.  ..  .git  Git_time
Hoornet@HOORNET-PC /d/GitHubFiles/BLOG (master)
$

Kot vidiš je poleg moje podmape git_time noter še en dir z imenom .git
Še nekaj! Skoraj vse to lahko počnete v običajnem win promptu ampak ne boste videli sprotne informacije kot je:

Hoornet@HOORNET-PC /d/GitHubFiles/BLOG (master)
$

In to: IN COLOR!!!! Že v letu 2013 e.v.!

4) Git vsebuje komando status, ki nam vedno poda trnutno sliko. Do that:
$ git status

in boš dobil izpoved:

# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use “git add” to track)
Hoornet@HOORNET-PC /d/GitHubFiles/BLOG (master)
$

Kot nam da sam git vedeti trenutno še ne sledimo ničemur. Dejmo nardit en ruby file s katerim se lahko potem igramo:

Za primer sem izbral en file (kontroller) iz Rails applikacije.

5) Torej dodajmo file v sledilnik (za drugačen prikaz bom sedaj uporabljal običajni Win command prompt). Najprej status potem dodajmo, rubijev file in nato še nkrat preverimo status:

D:GitHubFilesBLOG>git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use “git add <file>…” to include in what will be committed)
#
#       Git_time/
nothing added to commit but untracked files present (use “git add” to track)

D:GitHubFilesBLOG>git add .

D:GitHubFilesBLOG>git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use “git rm –cached <file>…” to unstage)
#
#       new file:   Git_time/movies_controller.rb
#

D:GitHubFilesBLOG>

Štekaš?
Sedaj mam now file noter namenjen sledenju, toda da zapišem trenutno stanje moram storiti še nekaj: Commit s komentarjem spremembe.
6) Do this:

 D:GitHubFilesBLOG>git commit -m”začetni commit”
[master (root-commit) 53192ac] začetni commit
 1 file changed, 60 insertions(+)
 create mode 100644 Git_time/movies_controller.rb

D:GitHubFilesBLOG>

Če sedaj poizvem po statusu sledenih datotek dobim sledeč rezultat:

D:GitHubFilesBLOG>git status
# On branch master
nothing to commit, working directory clean

D:GitHubFilesBLOG>

Vse datoteke so torej shranjene v trenutnem stanju. Dajmo sedaj spremenit datoteko tako, da bom pobrisal 3 metode v fajlu:  


Preverimo sedaj status, da vidimo, če je git poštekal da sem premenil fajl:
D:GitHubFilesBLOG>git status
# On branch master
# Changes not staged for commit:
#   (use “git add <file>…” to update what will be committed)
#   (use “git checkout — <file>…” to discard changes in working directory)
#
#       modified:   Git_time/movies_controller.rb
#
no changes added to commit (use “git add” and/or “git commit -a”)

Aha! Git je zaznal spremembo. Recimo da smo sedaj vmes programirali in da je sedaj ta datoteka končana. Torej je čas za nov commit.  Postopek, ki ga nato ponavljam ob vsaki spremmbi, ki jo ohčem zapisati je:

D:GitHubFilesBLOG>git add .

D:GitHubFilesBLOG>git commit -m”odstranil odvečne metode”
[master f6f5754] odstranil odvečne metode
 1 file changed, 21 insertions(+), 60 deletions(-)
 rewrite Git_time/movies_controller.rb (82%)

D:GitHubFilesBLOG>

Na tak način imam zapisane vse verzije vseh fajlov in map.
O tem kako do dolečene verzije pa (morda) prihodnjič.

Za zdaj lahko rečem samo to:
Switch to git!

C ya!

Ruby programiranje za pametne kretene (2): “Programiranje v Rubiju naj bo užitek”

2) Ruby jezik

Ruby je minimalističen jezik. Tudi pod razno se ne pusti zapletati pravilom C in C++. Ne jebe idiotskih pravil, katerih četrtine ne poznajo niti profesionalni programerji. Njegova filozofija je  naj bi bilo
Programiranje v Rubiju naj bo užitek!

Ruby je torej minimalistični jezik: ima bogate knjižnice, toda v samem jeziku je malo mehanizmov.
Za razumevanje idiomatske kode v Rubiju so potrebni zgolj 3 principi delovanja teh mehanizmov jezika:

1) VSE kar obstaja v Rubiju JE OBJEKT.
Ruby ni OOP zgolj v smislu kot je OOP C++. V C++ in Javi obstajajo primitivni tipi. Tega Ruby sploh ne pozna. Celo števila, kot npr. 1 so polni objekti.

2) Vsaka operacija je klic metode na nekem objektu in vrne vrednost.
V Javi in C++ je npr overloadanje operatorjev nekaj drugega kot overridanje metod. Prav tako so tam možne void funkcije, ki ne vračajo ničesar. Ne v Rubiju. + je npr. prav toliko metoda kot GetSize().

3) Vsako programiranje je metaprogramiranje
Razredi in metode so lahko dodani ali spremenjeni kadarkoli, celo med tekom programa!
V Javi morajo bit razredi deklarirani ob času prevajanja; baznih razredov se ne da spremeniti niti takrat.  Ne v Rubiju! Tu lahko ‘odpremo’ celo tako važne razrede kot je npr. String in ga spremenimo oz. mu dodamo metode. Kar slišim vrišč groze C++ programerja, ki se zgraža nad to omogočeno močjo Ruby programerju. “Toda s tem lahko nardiš en kup slabih zadev…”
Eh, GROW UP, MAN! With great power comes great responsibility! Ass hole  Go back to your C++ cave full of stupid bugs and people without hair (the pulled all of them out, while loosing nerves)

več najbrž prihodnjič, “but who the fuck knows…” 🙂

Ruby programiranje za kretene – 1: So, let’s begin

1) So, let’s begin…

1.1) Inštalacija

Za MacOS & Linux

Če nisi srečnež z Macom ali pa Linuxaš boš rabil ruby tudi namestiti. Če pa imaš Maca imaš ruby že predinstaliran in ti je za zagon interpreterja v REPL zanki treba naklofat samo:
irb
v ukazno lupino. Nekatere  Linux  distribucije prav tako uletijo z že nameščenim rubyjem, tist, ki ga še nimate pa to itak znate narediti sami (saj si linuxaš, al kaj?!). Glej le da namestiš vsaj Ruby 1.9.1

Za Win namestitev:

Windows nesrečniki smo Ruby interpreter prisiljeni poinštalirat sami.
Še do nedavnega je bilo na Win treba najprej poinštalirat Ruby, nato pa še DevKit da je bil mogoč tudi prevod C kode, ki je kdaj potrebna za posamezne dodatke (knjižnice itd). Če se odločiš za to pot je najbolje da obiščeš RubyInstaller stran in poinštaliraš oboje.
Danes ta pot (načeloma) ni več potrebna saj so skup spravli paket, ki poleg obeh zgornjih paketov vsebuje tudi vse potrebno za delo z Ruby on Rails. Zato, ker najbrž nameravaš na dolgi rok naštudirat tudi Rails predlagam to pot.
1) Pojdi torej najprej na: http://railsinstaller.org/

2) Potegn dol RailsInstaller kit
3) Poinštaliraj in
boš poleg omenjenega postal še veseli ‘lastnik’ programov kot so Git (sistem za kontrolo programske kode – zelo uporabna zadeva. Mogoče boš še kaj naklofal na to temo) in SQLite (baza podatkov v obliki enga samega fajla), kakor tudi vmesnika za dostop do baze SQL severja in drugih avtomatično nameščenih knjižnic, ki znajo priti prav že kmalu.
4) zadeva ima da dela.

1.2) Prvi preizkus

Po uspešni namestitvi naj bi bil Ruby dostopen od kjerkoli na compu, zato zavihaj rokave, piči na start gumb->RailsInstaller in klikni Interactive Ruby.

Ima da se ti odpre okno v Command Promptu in reče neki podobnga kot:

irb(main):001:0>

Do istega REPL loopa lahko pride tudi s preprostim 
irb
natipkanim v Win Command Prompt.
irb oz. Interactive Ruby je t.i. REPL zanka v Rubyju. REPL je kratica za: Read, Eval(uate), Print in nato Loop. Preprosto to pomeni da ob vsakem stisku tipke ENTER:
najprej PREBERE kar si natipkal,
ta text izvede,
nato IZPIŠE rezultat,
in ponovi – t.j. čaka na naslednji ENTER.

Simpl, ne? Ampak REPL je genialna zadeva. Včasih je blo to na Commodorju 64 ali ZX spectrumu v 80-ih, le da je to delal v jeziku BASIC. Izhaja pa še od prej in sicer iz jezika LISP (kokr jez vem zgodovino), iz katerega Ruby jemlje kar nekaj pametnih! Lisp je zakon, btw!

Skratka to ti je osnovno orodje za delo v rubiju. Kle lahko v realnem času testiraš rezultat, preverjaš napake itd.

Najbolj simpl ga je preprosto uporabit za kalkulator:

irb(main):001:0> 1 + 5
=> 6
irb(main):002:0>

Od tu dalje se lahko špilaš sam, moj tutorial bo sedaj poskočil za 500 stopenj in postal
Ruby za pametne kretene!

Ruby programiranje za kretene

0) Uvodnik

Ruby je res lep objekti jezik. Po mojem je najprimernejši za začetno učenje programiranja npr. na fakulteti. Predvsem ker je dosleden v pravilih. Ima jih zelo malo; tudi sam jezik je majhen a to nikakor ne pomeni da ni močan.
Še nekaj let nazaj je veljal za otročji jezik in resni programerji (ha!) se zanj -razen par izjem- nis(m)o menili.

Pa je prišel Rails.
In kot bi izstrelil iz topa je v letu dni popularnost poskočila na sam vrh. Razvoj v PHP je postal anarhičen v primerjavi z Rubi on Rails in vsi so skušali kopirati uspeh tega frameworka. PHP je imel svojo verzijo (verzije). Python je poskušal. Scala ni zamujala veliko…
Pa kljub temu da tile frameworki sploh niso slab samo po sebi nekako niso dosegli Railsovega buma.
Zakaj?

Hja… V grobem je sicer res, da so si OOP jeziki podobni in da kar lahko izvedeš na enemu boš podobno naredu na drugem… toda spoznali smo da si jeziki le niso tako podobni.
Rails je uspešen ne samo zaradi briljantne strukture njegovega avtorja, ki jo poseduje, temveč tudi zaradi samega jezika!

Meta-programiranje, ki ga s tako lahkoto podpira Ruby je namreč osnovni gradnik samega Frameworka  Ni torej dovolj le RESTfulnes, MVC, Agilni pristop in TDD; potreben je programski jezik, ki te stvari omogoča brez puljenja las.
In to je bil “the secret sauce of Ruby on Rails”!

so let’s begin…
V nadaljevanju nameravam iti torej po vrsti. A ne v klasičnem stilu ki je običajen v te vrste learning tutorialih. Pri delu se nameravam zabavati in pri tem malenkost za(je)bavati tudi tebe, bralec, kretenissimo 🙂

O naslovu: glede na to da imamo serijo knjig “za telebane” in da mi je izraz teleban naravnost idiotski sem se v skladu s svojo črno humorno naravo odločil za izraz kreten. Le tega nameravam zamenjevati tudi z drugimi izrazi kot so budala, idiot, buksl, bebo, butl itd
Skratka, želim vam lep dan, več pa drugič 🙂

Novi izrazi za oklepaje v kodi

Počasi postajam sit razvlečenih izrazov za različne tipe oklepajev . ki se običajno uporabljajo v kodi.

Gre za najpogostejše vrdte oklepajev v iz ‘C derived’ jezikih kot so:
()
[]
{}
<>

Danes sem pretežno boplan odšel na pivo (točneje na 3 pive v Idreijski Mlinček, hehe), se vsedel v kot kjer sem vedal da bom najverjetneje imel mir in prebiral knjigo o C#.
Med branjem mi postane jasno, da celo v Angleškem jeziku še vedno dodločeni avtzprji ne vedo kako uporabiti izraz za, recimo <tovrstne> oklepaje.
Seveda je še huje v Slovenščini. Poleg ‘navadnih’ sem osebno slišal osebe omenjati zgolj še ‘oglate oklepaje’ ostalih (no ja nekateri se spomnijo še ‘zavitih’) pa ne. Raj uporabijo angleškega BRACKETS ali CURLY.
Nkar mi je prišlo na misel da tudi če že poznam ‘zavite’ in ‘oglate’ oklepaje so to dve besedi in to ni cool.
Hočem enobesednico !   🙂

Od tu moje odpičene speljanke. Za:
oglatega [] sem se spomnnil KVAKLEPAJ (ker je KVAdratni oKLEPAJ)
kotnega (whatever the bitch is really called in Slovenian) sem se spomnil TRIKLEPAJ, ker gre za TRIkotni oKLEPAJ

Mi pa še manjka the zaviti one! {}
Any ideas?
Please comment your ideas! (kot da bo kdo prebral prvi post neznanega wanna-be-bloggerja, hehe)

93/93
Vaš,
Hoornet

Qt4 designer, custom slots and rbuic4

Kopija iz strani: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/241780
Da ne pozabim!!!

> Has anybody had any luck implementing custom slots in ruby without
> changing the output of rbuic4?  Everything I have tried results in
> segfaults and superclass mismatch errors.

I’ve done this:

  1. Ustvari custom_widget_base.ui z Designerjem (predpostavimo, da se forma imenuje CustomWidgetBase in da vsebuje en sam push button z imenom ‘push_button‘)
  2. Zaženi rbuic4 na datoteko, da dobiš custom_widget_base.rb. Ta file vsebuje razred z imenom Ui_CustomWidgetBase, iz katerega je izpeljan razred CustomWidgetBase, ki ga vsebuje modul Ui.
  3. Ustvari datoteko custom_widget.rb z naslednjo vsebino:
require 'custom_widget_base.rb' #require the rbuic4-generated file
class CustomWidget < Qt::Widget

slots 'button_pressed()'

def initialize parent=nil
super #call Qt::Widget constructor
@base=Ui::CustomWidgetBase.new
@base.setupUI self #this is where the widget construction happen
connect @base.push_button,SIGNAL('pressed()'),self,SLOT('button_pressed())
end

def button_pressed
Qt::MessageBox.information self, 'App', 'The button has been pressed'
end

end