Erinevus lehekülje "Ruby" redaktsioonide vahel
(→SMTP) |
(→Ruby gems) |
||
| 299. rida: | 299. rida: | ||
puts "www.loomaaed.tartu.ee A kirje: " + addr.to_s | puts "www.loomaaed.tartu.ee A kirje: " + addr.to_s | ||
end | end | ||
| + | |||
| + | ===Soketite 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 | ||
===Ruby gems=== | ===Ruby gems=== | ||
Redaktsioon: 28. veebruar 2010, kell 16:21
Sisukord
- 1 Sissejuhatus
- 2 Ruby paigaldamine
- 3 Ruby dokumentatsioon
- 4 Programmeerimine Rubys
- 5 Ruby interpretaator
- 6 Ruby skript
- 7 Andmestruktuurid
- 8 Meetodid
- 9 Konsoolilt sisendi lugemine
- 10 Jadatöötlus
- 11 Stringitöötlus
- 12 Shelli värvid
- 13 Klassi kirjeldamine
- 14 SMTP
- 15 DNS
- 16 Soketite kasutamine
- 17 Ruby gems
- 18 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 öelda (tegelik paketinimi on ruby1.8)
# apt-get install ruby
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 dokumentatsioon
Ruby dokumentatsiooni kasutamiseks tuleb 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"
Programmeerimine Rubys
Ruby on
- dynamically typed - st, et nt muutujate väärtustamisel ei pea nende tüüpe kirjeldama
Ruby interpretaator
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
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
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 (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
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
Jadatöötlus
ary = [1, 2, 3] puts ary[0]
cities = %w[ London
Oslo
Paris
Amsterdam
Berlin ]
visited = %w[Berlin Oslo]
puts "I still need " +
"to visit the " +
"following cities:",
cities - visited
Stringitöötlus
herb = "parsley" puts herb[0,1] puts herb[0..3]
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
#!/usr/local/bin/ruby
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()
#!/usr/bin/env ruby
ARGV.each do|a|
puts "Argument: #{a}"
end
./arg.sh ahaa Argument: ahaa
failid
File.open("file", "r") do |io|
# do something with io
end
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
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
Soketite 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
Ruby gems
TODO
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)