Erinevus lehekülje "Ruby" redaktsioonide vahel
(→Oracle andmebaasi kasutamine) |
(→Oracle andmebaasi kasutamine) |
||
520. rida: | 520. rida: | ||
$ ruby skript.rb > /tmp/valjund.txt | $ ruby skript.rb > /tmp/valjund.txt | ||
+ | |||
+ | Kasulikud lisamaterjalid | ||
+ | |||
+ | * http://www.it-wikipedia.com/web/how-to-install-ruby-oci8-on-ubuntu-server.html | ||
===DNS=== | ===DNS=== |
Viimane redaktsioon: 28. aprill 2013, kell 18:42
Sisukord
- 1 Sissejuhatus
- 2 Ruby paigaldamine
- 3 Ruby paigaldamine RVMi abil
- 4 Ruby dokumentatsioon
- 5 RubyGems
- 6 Programmeerimine Rubys
- 7 Ruby interpretaator
- 8 Ruby skript
- 9 Andmestruktuurid
- 10 Meetodid
- 11 Konsoolilt sisendi lugemine
- 12 Stringitöötlus
- 13 Shelli värvid
- 14 failioperatsioonid
- 15 Klassi kirjeldamine
- 16 SMTP
- 17 Mysql andmebaasi kasutamine
- 18 PostgreSQL andmebaasi kasutamine
- 19 Oracle andmebaasi kasutamine
- 20 DNS
- 21 Soketi kasutamine
- 22 Kasulikud lisamaterjalid
Sissejuhatus
Ruby http://www.ruby-lang.org/ on populaare programmeerimikeel, millele on iseloomulikud sellised asjaolud
- objekt-orienteeritud keel
- skriptimskeel
2010 aastal on levinud kaks Ruby versiooni
- 1.8 - ...
- 1.9 - ...
Ruby paigaldamine
Debian Lenny paketihalduses on olemas kaks Ruby versiooni
- 1.8.7 - vaikimisi
- 1.9.0 - võimalik lisaks paigaldada
Ruby v. 1.8.7 paigaldmiseks sobib Debianis öelda (tegelik paketinimi on ruby1.8)
# apt-get install ruby
või FreeBSD puhul
# cd /usr/ports/lang/ruby18 # make install clean
Lisaks paigaldatakse pakett libruby1.8, mis sisaldab Ruby kasutamiseks vajalikke teeke, teegid kopeeritakse kataloogi
/usr/lib/ruby/1.8
Paigaldatud Ruby versiooni küsimiseks sobib öelda
$ ruby -v ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
Ruby paigaldamine RVMi abil
RVM on lühend mis tähendab Ruby Version Manager. RVM võimaldab käigupealt ja kergelt paigaldada, hallata ja vahetada Ruby versiooni olles seega asendamatu töömees arendajatele, kes testivad enda rakenduste tööd erinevate versioonidega. RVMi kasutamise üheks eelduseks on see, et süsteemi on paigaldatud curl.
RVMi paigalduseks tuleb anda käsk:
# bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )
Misjärel tehakse kogu RVMi paigaldusprotsess automaatselt ära. RVMi kasutamiseks, näiteks Ruby 1.8 paigaldamiseks tuleb trükkida käsk:
# rvm install 1.8.7
Misjärel RVM paigaldab ja kompileerib Ruby koos kõikide sõltuvuste ja vajalike failidega, kaasaarvatud RubyGemsiga.
Peale versiooni paigaldust tuleb süsteemile öelda, et võtame uue versiooni kasutusele käsuga:
# rvm use 1.8.7
Sedamoodi võib otse "lennult" vahetada Ruby versiooni näiteks 1.8 ja 1.9 vahel. Nüüd võime paigaldada süsteemi ka teise versiooni:
# rvm install 1.9.2
Ning lülituda use võtme abil ümber hoopis sellele.
Rohkem infot leiab kodulehelt: http://beginrescueend.com/
Ruby dokumentatsioon
FreeBSDs paigaldatakse dokumentatsioon vaikimisi koos Rubyga. Debianis tuleb selle kasutamiseks paigaldada pakett ri
# apt-get install ri
ning nt Resolv teegi kohta info küsimiseks öelda
$ ri Resolv ---------------------------------------------------------- Class: Resolv Resolv is a thread-aware DNS resolver library written in Ruby. Resolv can handle multiple DNS requests concurrently without blocking. The ruby interpreter. See also resolv-replace.rb to replace the libc resolver with # Resolv. Resolv can look up various DNS resources using the DNS module directly. Examples: p Resolv.getaddress "www.ruby-lang.org" p Resolv.getname "210.251.121.214"
RubyGems
RubyGems on Ruby sisemine moodulite halduse süsteem. Gems süsteemi kasutamise kohta näeb näiteid öeldes
# gem help examples
Paigaldatud tarkvara nimekirja näeb
# gem list --local
Tarkvara paigaldamiseks sobib öelda nt
# gem install paketinimi
Tarkvara saab otsida öeldes
# gem search marksona --remote
Selle kasutamiseks on vajalik paigaldada pakett rubygems
http://docs.rubygems.org/read/chapter/2 lisalugemist
Programmeerimine Rubys
Ruby on
- dünaamilise tüübiskeemiga (ingl. k. dynamically typed) keel - programmi käivitamisel ajal (ingl. k. runtime) toimub tüüpide üle otsustamine; st praktiliselt, et nt muutujate väärtustamisel ei pea nende tüüpe kirjeldama
- nõrga tüübiskeemiga (ingl. k. weakly typed) keel - erinevat tüüpi muutujatega saab teha teatud operatsioone, nt liita arv ja sõne
Ruby on objekt-orienteeritud keel, st kõik Rubys on objektid, sh numbrid, nt avaldis esitab arvu viis meetodid
puts 5.methods
ja avaldis esitab arvu viis klassi
puts 5.class
Kiire interaktiivse ülevaate Rubys programeerimises leiab lingilt http://tryruby.org/
Ruby interpretaator
Ruby interpretaator (tõlgendaja) annab kasutajale võimaluse ruby koodi katsetada. Puuduseks on see, et funktsioonide defineerimisel tekkivad apsakad tulevad alles lõpus välja ning nende parandamine on aeganõudev.
Ruby interpretaatori paigaldamiseks tuleb Debian operatsiooni puhul öelda
# apt-get install irb
Interpretaatorit saab kasutada nt kalkulaatorina
$ irb irb(main):001:0> 20.0/8 => 2.5
või ka
$ irb irb(main):001:0> require 'date' => true irb(main):002:0> t2na = Date.today => #<Date: 4910765/2,0,2299161> irb(main):003:0> sada_p2eva_hiljem = t2na + 100 => #<Date: 4910965/2,0,2299161> irb(main):004:0> t2na.to_s => "2010-07-05" irb(main):005:0> sada_p2eva_hiljem.to_s => "2010-10-13"
Ruby skript
Ruby skript esineb tekstifaili kujul, nt selline skript kirjutab 'Hello, world'
puts "Hello, world!"
Skripti käivitamiseks sobib öelda
$ ruby skript.rb
Alternatiiviks on lisada faili algusse rida interpretaatori nimega
#!/usr/bin/ruby puts "Hello, world!"
ning muuta fail käivitatavaks
$ chmod 0755 skript.rb
või
$ chmod +x skript.rb
ning käivitada
$ ./skript.rb
Andmestruktuurid
TODO
Sõne
muutuja = "Tere hommikust!"
Sõne osa 'hommikust' poole saab pöörduda selliselt
muutuja[5..13]
Arv
muutuja = 5
Massiiv
Massiiv või ka jada (ingl. k. list) on järjestatud hulk
massiivinimi = ["yks", "kaks", "kolm"]
Massiivi elemendi poole pöördumine toimub selliselt
puts massiivinimi[1]
Tänu Ruby objekt-orienteeritusele saab kasutades massiivi meetodit each öelda nii
massiivinimi = ["yks", "kaks", "kolm"] massiivinimi.each do |massiivielement| puts massiivielement end
ary = [1, 2, 3] puts ary[0]
Või keerukam näide
cities = %w[ London Oslo Paris Amsterdam Berlin ] visited = %w[Berlin Oslo] puts "I still need " + "to visit the " + "following cities:", cities - visited
Viimases näites defineeritakse jada kiirmeetodil, kasutades %w tähist, kusjuures jada elemente ei pea jutumärkidesse panema.
Suurima numbri leidmine jadast
[12, 47, 35].max => 47
Jada sorteerimiseks
jadanimi.sort!
Sõnastik
Sõnastik (ingl. k. hash) on key-value paaridest koosnev järjestamata hulk
sonastik = { 'priit': 167, 'mart': 196 }
Sõnastiku elemendi väärtuse esitamine toimub nii
print sonastik["print"]
Meetodid
Meetodid võimaldavad programmi teksti loogiliselt organiseerida, nt eraldada osa korduvaks kasutamiseks.
def korrutamine(x, y) return x * y end puts korrutamine(15, 3)
Teatud mõttes võib öelda, et tänu Ruby objekt-orienteeritusele on need asjad mis nö tavaliselt on funktsioonid Rubys meetodid.
Konsoolilt sisendi lugemine
print "Enter your name: " name = gets
Stringitöötlus
herb = "parsley" puts herb[0,1] puts herb[0..3]
tulemuseks
p pars
Mitu märki on stringis ?
"Jimmy".length
Stringi kordus
"Jimmy" * 5
Random funktsioon
puts rand(10)
saame suvalise numbri 0-10
for num in (0..100) print num,"\n" end
Lihtne tsükkel nullist sajani
topelt tsükkel mis väljastab number ühtedest koosneva tabeli
1.upto(10) do |fg| 1.upto(10) do |bg| print "1" end puts end
Shelli värvid
puts " \e[32mROHELINE\e[0m"
värvitabel, asjalik-vajalik
[0, 1, 4, 5, 7].each do |attr| puts '----------------------------------------------------------------' puts "ESC[#{attr};Foreground;Background" 30.upto(37) do |fg| 40.upto(47) do |bg| print "\033[#{attr};#{fg};#{bg}m #{fg};#{bg} " end puts "\033[0m" end end
#!/usr/bin/env ruby require 'pathname' Pathname.new($0).realpath()
Shellis parameetrina antavad argumendid
ARGV.each do|a| puts "Argument: #{a}" end
Kasutamine
./arg.sh ahaa Argument: ahaa
failioperatsioonid
Üldpõhimõte oleks
File.open("file", "r") do |io| # do something with io end
Lihtne faili lugemine
print File.read("/comics.txt")
Avame faili ja loeme sealt infot
File.open("/location/of/my/file.txt", "r") do |f| while ! f.eof do line = f.gets puts line #Print the line to the screen end end
Klassi kirjeldamine
class Arvutaja def meelespea puts "Monede tehete tulemus soltub jarjekorrast" end end class Liitja < Arvutaja def liitja puts "Liitmine ei soltu jarjekorrast" end end arvuta = Liitja.new arvuta.meelespea arvuta.liitja
kus
- kirjeldatakse kaks klassi, Arvutaja ja Liitja
- Liitja.new tekitab uue objekti 'arvuta'
- arvuti.meelespea ja arvuta.liitja kutsuvad täitmiseks välja klassi meetodid meelespea ning liitja
- klass Liitja pärib klassi Arvutaja meetodid, seetõttu on võimalik kasutada arvuta.meelespea'd mida otseselt ei ole kirjeldatud Liitja klassis
- klasside nimesid on oluline alustada suure algustähega
SMTP
require 'net/smtp' msgstr = <<END_OF_MESSAGE From: Priit Kask <priit@loomaaed.tartu.ee> To: Mart Kask <mart@loomaaed.tartu.ee> Subject: kevad saabub, puurid puhtaks Kirja sisu END_OF_MESSAGE smtp = Net::SMTP.start('192.168.1.250', 25, 'loomaaed.tartu.ee') smtp.send_message msgstr, 'priit@loomaaed.tartu.ee', 'mart@loomaaed.tartu.ee' smtp.finish
Mysql andmebaasi kasutamine
Ühendumine ja query päring
require 'mysql' mysql = Mysql.init() mysql.connect('localhost') results = mysql.query("SELECT now();") results.each{|row|; puts row;} mysql.close()
Tabeli kustutamine, tekitamine ja sinna info lisamine
require 'mysql' mysql = Mysql.init() mysql.connect('localhost') mysql.select_db('test') mysql.query("DROP TABLE IF EXISTS rocks") mysql.query("CREATE TABLE rocks (id INT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (id), rockname CHAR(20) NOT NULL);") mysql.query("INSERT INTO rocks (rockname) values('Granite');") mysql.query("INSERT INTO rocks (rockname) values('Coal');") mysql.query("INSERT INTO rocks (rockname) values('Quartz');") mysql.close()
PostgreSQL andmebaasi kasutamine
PostgreSQL andmebaasi saab Ruby seest kasutada mooduli ruby-pg abil.
Gemist installiks tuleb öelda
# gem install postgres
Debian Lenny keskkonnas sobib selleks paigaldada pakett
# apt-get install libpgsql-ruby
Skript küsib andmebaasist public.kasutajad tabelist kahte väärtust
require 'pg' conn = PGconn.connect("192.168.1.247", 5432, , , "andmebaasinimi", "kasutajanimi", "parool") res = conn.exec("SELECT nimi, vanus FROM kasutajad where nimi = 'Priit Kask';") res.each do |rida| puts "Nimi: #{rida['nimi']}, vanus: #{rida['vanus']}" end res.clear conn.close
Oracle andmebaasi kasutamine
Oracle andmebaasi saab Ruby seest kasutada mooduli ruby-oci8 abil. Paigaldamise ettevalmistamiseks tuleb
- tekitada nö tavapärasel viisil Oracle_Instant_Client /opt/instantclient kataloog ning moodustada seal link
# ln -s libclntsh.so.11.1 libclntsh.so
- paigaldada kompileerimiseks vajalikud paketid
# apt-get install build-essential python-dev libaio-dev
- seadistada keskkonnamuutujad
# export LD_LIBRARY_PATH=/opt/instantclient # export ORACLE_HOME=/opt/instantclient # export TNS_ADMIN=/opt/instantclient
Gemist installiks tuleb öelda
# LD_LIBRARY_PATH=/opt/instantclient gem install ruby-oci8 Building native extensions. This could take a while... Successfully installed ruby-oci8-2.1.5 1 gem installed Installing ri documentation for ruby-oci8-2.1.5... Enclosing class/module 'cOCI8' for module Metadata not known Installing RDoc documentation for ruby-oci8-2.1.5... Enclosing class/module 'cOCI8' for module Metadata not known
Tulemuse küsimiseks sobib öelda
# gem list --local *** LOCAL GEMS *** ruby-oci8 (2.1.5)
Nt selline skript kirjutab tabelist t1 välja nö tulpade A ja B väärtused arvestades UTF-8 kodeeringut
$ cat skript.rb require 'rubygems' ENV['NLS_LANG'] = 'ESTONIAN_ESTONIA.AL32UTF8' require 'oci8' conn = OCI8.new('KASUTAJANIMI','PAROOL', 'SIDNIMI') cursor = conn.exec('select A, B from t1') while r = cursor.fetch() puts r.join(',') end cursor.close conn.logoff
Käivitamiseks öelda
$ ruby skript.rb > /tmp/valjund.txt
Kasulikud lisamaterjalid
DNS
Skript esitab domeeninimele vastavad ip aadressid
require 'resolv' Resolv::DNS.new.each_address("www.loomaaed.tartu.ee") do |addr| puts "www.loomaaed.tartu.ee A kirje: " + addr.to_s end
Soketi kasutamine
Server
require "socket" ajaserver = TCPServer.new('192.168.10.35', 20000) loop do Thread.start(ajaserver.accept) do |s| print(s, " on vastuvoetud\n") s.write(Time.now) print(s, " on teenindatud\n") s.close end end
kus
- kasutatakse socket teeki
- moodustatakse ajaserver nimeline objekt
- käivitatakse loop korduse see uue lõime alustamine sissetuleva ühenduse tekkimsiele
Klient
require 'socket' streamSock = TCPSocket.new( "192.168.10.35", 20000 ) str = streamSock.recv( 100 ) print str + "\n" streamSock.close
Kasulikud lisamaterjalid
- http://www.ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/index.html
- http://www.elctech.com/articles/ruby-daemons-and-angels ruby ja deemonid
- http://www.phptoruby.com/ php ja ruby süntaksi teisendused
- Learning Ruby (Michael Fitzgerald)
- Ruby Cookbook (Lucas Carlson, Leonard Richardson)
- http://rubyonrails.org/
- http://wiki.rubyonrails.org/
- http://www.humblelittlerubybook.com/
- http://lipsiadmin.com/
- http://www.ioncannon.net/programming/941/using-daemon-kit-and-robustthread-to-build-ruby-daemons/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+ioncannon+%28IONCANNON%29
- http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/93305 nano süntaks värviliseks
- http://totalrecall.wordpress.com/2008/09/12/charming-ruby-with-curses/ ncurses abil kursori liigutamine