Még lehet csiholgatok rajta. Forráskód itt, lehet mondjuk egy olyan fantáziadús neve mint "sysstat.rb" - egy kép pedig lejjebb látható.
Hozzávalók:
sudo apt-get install ruby acpi sysstat pydf
- log69 blogja
- A hozzászóláshoz be kell jelentkezni
- 1143 megtekintés
Hozzászólások
Felveszlek kovetesre, es udv a taborban.
Ha kerdesed van Ruby temakorben, batran keress meg, ha tudok, segitek.
http://flori.github.com/term-ansicolor/
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Kösz, megnézem az ansicolor-t. Igazából az összes metódust át kell néznem, nehogy le akarjam programozni ami megvan :)
- A hozzászóláshoz be kell jelentkezni
Sokat segít ha ismerkedsz a standard libraryval, meg az idiomatius rövid megoldásokkal.
Rubyban pl. első körben a különböző adatokon/gyűjteményeken futtatható iteratív blokkok ismerete lehet az egyik fő aha élmény és élvezeti forrás. (each, collect, inject, lines stb...)
Példaként itt a kódod egy részlete átírva - amiben megpróbáltam minél több ilyet használni a példa kedvéért;) : http://pastebin.com/CFiQACcH
Számomra ez a kód sokkal átláthatóbb mint a tiéd (persze ehhez ismerni kell a használt metódusok jelentését), de az talán már avatatlan szemnek is látszik, hogy sokkal rövidebb. :)
szerk: bevallom fogalmam sincs a kódodban textb,textc-s while ciklus mit csinál, szóval ha kihagytam valami funkcionalitást akkor bocsánat és az éles kódméret összehasonlítást tekintsd tárgytalannak ;)
- A hozzászóláshoz be kell jelentkezni
Megjegyzés: collect == map; inject == reduce (aka. fold)
Csak hogy python felől jönve egyértelműbb legyen. :)
Ezeket egy ideje már lehet rubyban aliasként használni.
scan is hasznos tud lenni néha. Pl. itt a meminfós rész kicsit tömörebben (bar nékül):
info = {}
File.read('/proc/meminfo').scan(/(\w+):\s+([0-9]+)/) do |key, val|
info.update({key => val.to_i / 1024})
end
info['MemUsed'] = info['MemTotal'] - info['MemFree'] - info['Buffers'] - info['Cached']
%w{MemTotal MemUsed Buffers Cached MemFree SwapCached}.each do |key|
print "#{key} (#{info[key]}) "
end
puts
- A hozzászóláshoz be kell jelentkezni
A map az csak ~ collect, mert mig map! van addig collect! nincs. Illetve a masik, hogy ez szemantikai kerdes is, sokszor en jobban szeretem a mapet hasznalni, mnt a collectet, egyszeruen azert, mert azt erzem az adott kontextusban helyesebbnek.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Vigyázz mert ez típus függő is. Array-ban van map! és collect!, de Enumerable-nál már nincs. Nem lehet, hogy ezt nézted be véletlen? Milyen ruby verziót használsz?
http://ruby-doc.org/core-1.9.3/Array.html#method-i-collect-21
- A hozzászóláshoz be kell jelentkezni
Hmmm.. ugy emlekszem, 1.8-ban nincs.
Sajnos az 1.9 tekinteteben meg nem vagyok annyira tajekozott, meg csak nem reg ota hasznalom (1 honap).
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Az is lehet. Ott se mindegy milyen verzió. Reduce is csak 1.8.7-től jött be, de map! ha minden igaz, volt már 1.8.6-ban is: http://ruby-doc.org/core-1.8.6/Array.html#method-i-map-21
- A hozzászóláshoz be kell jelentkezni
A map! -et ismerem es hasznalom is, a collect! az ami nekem ugy maradt meg, hogy azt nem hasznaljuk inplace. Es nem is szoktam.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Nekem úgy rémlik, hogy collect volt alapból és csak később jött a map, de lehet tévedek. Én is jobb szeretem map-et. Furcsa is volt collectet látni egy hosszabb rubys szünet után. :)
- A hozzászóláshoz be kell jelentkezni
En - mivel funkcionalisan megegyezik a ket fuggveny - szemantikai kerdest csinaltam a dologbol. Ahol sok ugyanolyan objektum egy tulajdonsagat kerem le, ott collectet hasznalok, mert ez vegulis az, begyujtom az infot. Illetve meg egyre, a stringekkel kapcsolatos muveletre, mert ott nagy esellyel string lesz a vege. A map marad a tobbinek, foleg ott, ahol tipusvaltas is van.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Fú, ennek örülök, csak még fel kell fognom :)
Köszi a példákat, pont ezek segítenek hamar elsajátítani. Kambus-nak is kösz.
szerk.: meg telepítettem a rubybook csomagot, nagyon jónak tűnik, ezt akarom átnyálazni hogy hamar ráálljak gondolkodásilag. Ahogy belepapoztam nekem tetszett (sima html az egész).
- A hozzászóláshoz be kell jelentkezni
Ja még annyi, hogy a textb textc-s while true ciklussal csak annyit csinálok, hogy a név oszlopból kikapom az egyformákat, de úgy, hogy a szám oszlopban összegzem az egyforma nevekhez tartozó értékeket. Tehát mintha egy uniq-ot futtatnék a név oszlopra, de azt akarom, hogy az azonos nevű folyamatok értekeit összegezve lássam, mert nem PID érdekel hanem program típus.
Erre egyébként ötlet?
Ugye több dimenziós tömbben tároltam oszlopokat, és így sorokat. Több oszlopra úgy rendezek, hogy a több dimenziós tömbnek loccsantom oda a .sort -ot, ami ekkor elsősorban az első oszlop alapján rendez, másod sorban a második és így tovább. De mi van akkor, ha van 8 oszlopom, és én először a 4., másodsorban a 6. oszlop alapján akarom sorba rendezni az egész hóbelebancot. Erre valami frappáns megoldás? Mert ugye most úgy játszottam vele, hogy az oszlopokat eleve olyan sorrendben vettem fel a több dimenziós tömbbe, hogy jó legyen (mert megérdemlem :). De ha nem optimális, akkor mit lehetne tenni manuális rendezgetés helyett?
Tömbre példa (8 oszlop, 3 sor):
[[1,4,5,6,7,6,7,8] , [4,5,3,2,2,4,5,6] , [4,6,7,7,6,7,6,7]]
- A hozzászóláshoz be kell jelentkezni
Azonos nevűek összegzése tipikus alkalmazása a Hashnek, tankönyvi példa a "számold meg melyik szó hányszor fordul elő a szövegben" feladat
Itt a kiegészített kód: http://pastebin.com/87qpat4Q
- A hozzászóláshoz be kell jelentkezni
Köszi, ennek is utánanézek.
- A hozzászóláshoz be kell jelentkezni
Na, letelepítettem a rubybook csomagot (a szerzőnek is dobtam egy köszönő mailt hogy free licenc alá tette). Tudom ajánlani a könyvet Ruby iránt érdeklődőknek (sima HTML text-et telepít). Plusz javaslom a ruby csomag mellé az irb csomagot (interaktív shell hozzá, úgymint python-nál alapból).
Veszem fel a Ruby logikát. Nagyon jó. Másnak érdekességként:
tömb feltöltése pl. 10 elemmel:
a = [] ; a = 10.times.to_a
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Tömb értékeket összekeverni:
10.times.to_a.shuffle
=> [0, 3, 4, 6, 7, 9, 5, 1, 2, 8]
Lottóhoz 90-ből 5 véletlen szám (kérek számokat 0-tól 90-ig bezárólag, majd tömbbé konvertálom, majd a sorozatból a 0. elem kivételével lekérem az 1.-től az utolsóig - így kapok egy sorozatot 1-től 90-ig - majd összekeverem, majd pedig az első 5 elemet lekérem):
91.times.to_a[1..-1].shuffle.first(5)
=> [57, 23, 30, 78, 37]
- A hozzászóláshoz be kell jelentkezni
SPOILER
És ha eljutsz a range típusig akár azt is mondhatod majd:
(1..90).to_a.shuffle.take(5)
(Persze az igazsághoz hozzá tartozik, hogy ilyet a számok bizonyos korlát fölé növelése esetén az ember már csak lusta kiértékelésű nyelvben mond.)
- A hozzászóláshoz be kell jelentkezni
Úú, meddig lehet ezt még fokozni? :)
- A hozzászóláshoz be kell jelentkezni
A shuffle-t nem ismertem, koszi.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Nem vagyok nagy rajongoja a script nyelveknek, de az elozo postod utan utannaneztem a rubynak es nekem is megtetszett.
Meg nem tudom mire fogom hasznalni, de valamire majdcsak jo lesz. :)
- A hozzászóláshoz be kell jelentkezni
Tök jó kis progi, de akadt egy kis gond vele, Arch-on:
Uptime: 13:33:39 up 2:48, 2 users, load average: 0.15, 0.14, 0.18
Battery: [#######################################]
Battery 0: Unknown, 99%
Battery 0: design capacity 4489 mAh, last full capacity 3981 mAh = 88%
Adapter 0: on-line
Thermal 0: ok, 53.0 degrees C
Thermal 0: trip point 0 switches to mode critical at temperature 100.0 degrees C
Thermal 0: trip point 1 switches to mode passive at temperature 95.5 degrees C
Thermal 1: ok, 54.0 degrees C
Thermal 1: trip point 0 switches to mode critical at temperature 127.0 degrees C
Memory (MB): /home/kisdosi/statistics_system.rb:50:in `': undefined method `to_a' for # (NoMethodError)
[kisdosi@kisdosi-laptop ~]$
- A hozzászóláshoz be kell jelentkezni
Ja, igen ugye ez az első ruby progim volt amit hamar gyorsan dobtam össze bővebb doksi olvasás nélkül, és így tele pár hülyeséggel :)
Most eltávolítottam az összes felesleges slice kulcsszót. Megnéznéd most?
- A hozzászóláshoz be kell jelentkezni
Diff:
-print "Total (" + mem_total.to_s + ") "
+print "Total (#{mem_total})"
A #{} automatikusan rahiv az Object#to_s -re.
Bar, ugy remlik, a String#+ is rahiv, ebben azonban biztos nem vagyok. A #{} azonban egeszen biztos.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Uptime: 20:22:31 up 18 min, 2 users, load average: 0.08, 0.19, 0.21
Battery: [#######################################]
Battery 0: Unknown, 99%
Battery 0: design capacity 4493 mAh, last full capacity 3985 mAh = 88%
Adapter 0: on-line
Thermal 0: ok, 55.0 degrees C
Thermal 0: trip point 0 switches to mode critical at temperature 100.0 degrees C
Thermal 0: trip point 1 switches to mode passive at temperature 95.5 degrees C
Thermal 1: ok, 56.0 degrees C
Thermal 1: trip point 0 switches to mode critical at temperature 127.0 degrees C
Memory (MB): /home/kisdosi/statistics_system.rb:48:in `': undefined method `to_a' for # (NoMethodError)
- A hozzászóláshoz be kell jelentkezni
Frissítettem github-on. Most ok?
- A hozzászóláshoz be kell jelentkezni
http://pastebin.com/5Uq05Wxi
így mutatom, mert kiszűrt pár dolgot ha simán illesztem be.
- A hozzászóláshoz be kell jelentkezni
Köszi. Írnál nekem egy Ruby verziót?
Szerk.: ja közben látom hogy sikerült reprodukálnom ugyanezt a hibát Ruby 1.9.x -el, mivel 1.8.x-re írtam eredetileg, ott nem jött elő. Akkor elvileg mindjárt meglesz a javításom.
- A hozzászóláshoz be kell jelentkezni
Átírtam és frissítettem a github-on. Most már ok.
Köszi a hiba jelzést.
- A hozzászóláshoz be kell jelentkezni
kiváló, én köszi a progit!
- A hozzászóláshoz be kell jelentkezni
Van új átírt verzió.
- A hozzászóláshoz be kell jelentkezni
1.8 / 1.9 inkompatibilitás. Az 1.8-ban a to_a implicit módon soronként bontja tömbre a stringet, az 1.9-ből ez hiányzik. Ami mindkettőben működik az az explicit megoldás (persze a split is ok):
text.lines.to_a
- A hozzászóláshoz be kell jelentkezni