IRB tippek

2008-08-18 01:51 | kommentek

Fejlesztés közben sokszor előfordul, hogy ki szeretnénk próbálni valami új gemet, letesztelni egy osztály működését, vagy csak felfedező körútra indulnánk. Ilyenkor a legjobb nyitni egy terminált és indítani egy IRB promptot. Jól beállítva és helyesen kezelve a Ruby programozó leghasznosabb eszköze lehet. Az alábbiakban adok pár tippet, amivel még hatékonyabban tudjuk használni a programot.

Aki esetleg nem ismerné, hogy mi is ez az egész: az IRB az Interaktív Ruby Shell rövidítése. Elindítás után egy promptot kapunk. Írjunk ide valamilyen Ruby kifejezést, és nyomjunk entert. Azonnal meg is kapjuk a kifejezés értékét. Itt minden megengedett, ami amúgy a Rubyban az. Betölthetünk külső könyvtárakat, írhatunk komplett osztályokat és modulokat, egyszóval mindent.

>> 1+3
=> 4
>> "chunky bacon".split
=> ["chunky", "bacon"]
>> 3.14.class
=> Float

.irbrc, Wirble

Itt jön a fontos rész. Az IRB induláskor megnézi, hogy van-e a $HOME könyvtárunkban egy .irbrc nevű fájl. Ha van, akkor ezt betölti. Mivel maga az IRB is egy Ruby osztály, ami kezeli a program futását, ezért természetesen az .irbrc fájl is egy ruby szkript. Minden amit itt csinálunk, az le fog futni az IRB indulása előtt. Első és legfontosabb tipp:

require 'rubygems'

Innentől kezdve nem kell mindig kiadnunk ezt a parancsot, ha egy gemet szeretnénk használni. A következő lépés a Wirble gem telepítése. Ez olyan további hasznos dolgokkal egészíti ki az IRB-t, mint például history, tab-completion és a visszatérési értékek színezése. Ha fent van, akkor a fenti sorhoz a következőket lehet még hozzáadni:

require 'wirble'
Wirble.init
Wirble.colorize

Az utolsó sor nem is szükséges, ha nem szeretnénk színes IRB-t.

Hol van definiálva?

Tovább fejleszthetjük az .irbrc fájlunk a Unix rendszerekből ismerős which parancshoz hasonló metódussal. A "Where is this defined?" metódus segítségével egy blokkon belüli metódushívásból el tudjuk dönteni, hogy az adott metódus hol van definiálva (a példában which-re aliasolva).

>> which { Time.zone }
=> "ActiveSupport::CoreExtensions::Time::Zones::ClassMethods received message 'zone', Line #14 of /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/core_ext/time/zones.rb"
>> which { [].map(&:name) }
=> "Symbol received message 'to_proc', Line #10 of /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/core_ext/symbol.rb"

Az utolsó példából az is látszik, hogy a metódus bonyolultabb kifejezésekkel is megbírkózik. Néha azonban előfordul, hogy nem pont azt találja meg, amit keresünk, vagy éppen nem talál semmit. Mindenesetre néha hasznos tud lenni.

String#to_proc

A Rails ActiveSupport moduljából ismerős lehet a Symbol#to_proc metódus, aminek a segítségével könnyen tudunk iterációkat írni.

users.select(&:active?).collect(&:email)

Ennél sokkal rugalmasabb Reginald Braithwaite String#to_proc implementációja. Pár példa, hogy mikre képes (bővebb bemutatót a hivatkozott blogbejegyzésben láthattok):

(1..5).map &'*2'   # => [2, 4, 6, 8, 10]
(1..5).inject &'+' # => 15
users.map &'.albums.first.title'

Az általam jelenleg használt .irbrc fájl tartalmazza az összes említett feature-t. Megtekinthető és letölthető Gistről. Használjátok kedvetek szerint.

Utility Belt

Korábban már hallottam egy Wirble-nél még több mindenre képes IRB enhancement gemről, aminek Utility Belt a neve. A bejegyzés írása közben ismét rátaláltam. Ez tudja mindazt amit a Wirble (tulajdonképpen arra épül), és tartalmazza a String#to_proc metódust is. Ezen túl még nagyon sok minden hasznos dolgot nyújt. Próbáljátok ki ezt is. Én biztos megteszem.

kommentek

Ruby Crash Course Prezentációm

2008-08-12 13:43 | kommentek

Ma tartottam az első belső képzést a Virgoban Ruby alapok témakörben. Egy szűk órás prezentációval indult az alkalom, amivel bemutattam a nyelv tulajdonságait, nyelvi elemeket, sajátosságokat. Inkább csak bevezető jelleggel. A prezentáció után interaktív kísérletezgetés folyt, aminek keretében további dolgokra derült fény (privát és védett metódusok, modulok, mi az a Mix-in, nyílt osztályok). Játszottunk IRB-vel, és raktunk az ~/.irbrc fájlba pár hasznos dolgot.

A Virgos vezető fejlesztői feladatkörömhöz tartozik a Rubys belső képzések szervezése, vezetése is. A cégen belül egyre több helyen használjuk a nyelvet. Vannak Railses projektek, JRubys projektek, és néhány üzemeltetői feladat is igényel Rubys ismereteket (Capistrano FTW). Ennek kapcsán egyre több ember kóstól bele a Rubyba, olyanok is, akiknek ez az első találkozása a nyelvvel. Emellett elég nagy érdeklődés alakult ki olyanok körében is a nyelv iránt, aki a munkája során amúgy nem használná.

Emiatt döntöttem úgy, hogy az első képzés egy bevezető lesz a Ruby rejtelmeibe. Sajnos kevés időm jutott a prezentáció elkészítésére, és ettől érzésem szerint az egész alkalom kicsit szétszórt lett. Az eddigi visszajelzések alapján azonban úgy tűnik hasznos volt. Úgy döntöttem, hogy a prezentációt itt elérhetővé teszem mások számára is. Remélem kontextus nélkül is érthető lesz. Sok dolog kimaradt belőle, amit eredetileg bele akartam rakni, de már nem jutott rá idő. Utólag viszont már nem fogom bővíteni. Ha lesz még ilyen alkalom, akkor inkább újraírom.

kommentek

RubyFringe, a legjobb Ruby konferencia ever

2008-07-24 15:31 | kommentek

Rég nem írtam, tudjátok az okát. Nehéz visszarázódni: sok a munka, kevés a szabadidő. Ilyenkor mindig nehéz (lehetetlen?) behozni a lemaradást. Rengeteg téma van, amivel szeretnék foglalkozni, utánaolvasni, kísérletezni, de nem jut rá idő. Így inkább nem töröm magam. Írok rövid bejegyzéseket, és rátok hagyom a többit.

Itt van például a RubyFringe. Előre is jónak tűnt, utólag meg mindenki áradozik róla. Zed Shaw például egyenesen az eddigi legjobb ruby konferenciának titulálta, és ezzel nincs egyedül.

Az előadásokra kevesebb kód több filozófia, és családias hangulat volt jellemző. Joey deVilla minden előadáson szorgosan jegyzetelt, ezekből elég részletes képet lehet kapni az elhangzott témákról. Végül itt egy beszámoló az egyik szervező tollából is.

Az első olyan konferencia, amire tényleg sajnálom, hogy nem volt lehetőségem elmenni. Talán majd legközelebb, mert biztos, hogy lesz legközelebb. Addig pedig itthon kellene felpezsdíteni egy kicsit az életet. Vannak is ötleteim, de erről majd később.

kommentek

Rövid szolgálati közlemény

2008-07-09 10:17 | kommentek

Rövid szolgálati közleményünk következik.

Az elmúlt hetekben nem tudtam írni a blogra, aminek főként a jó ideje gyógyulni nem akaró kötőhártyagyulladásom az oka. Emiatt minden programban másfélszeresre növeltem a betűméretet, és még így is bezoomolva gépezek sokszor, mivel amúgy homályos lenne a kép (ezt is így írom).

Az ügyeletes és rendelői orvosokról is lehetne írni bőven hozzá nem értés és nemtörődömség témakörben, holnap új dokit próbálok ki. És ahogy ilyenkor lenni szokott a múlt heti betegszabimon pont azokkal a dolgokkal nem tudtam foglalkozni, amikkel amúgy a "szabi" miatt tudtam volna, mert végre időm az jutott volna rá. Ilyenkor veszi észre az ember, mennyire függ a techinkától. Nem is jöhetett volna sokkal rosszabbkor ez a betegség. Virgóban amúgy is szűk határidők, és egyéb súlyosbító tényezők is vannak.

Nem is nyavalygok tovább, ennyit is csak azért, hogy értsétek miért nem írtam mostanában. Nektek vígasztalásul annyit, hogy tartogatok pár érdekes bejegyzés ötletet, amiket megírok, amint lesz időm, energiám és természetesen látásom hozzá.

Rövid szolgálati közleményünket olvasták.

kommentek

Nemkívánatos ételek szűrése Netpincéren, Greasemonkey script

2008-06-10 02:28 | kommentek

Nem eszek sertéshúst. Meg néhány más húst sem. Akit jobban érdekel, hogy miért nem, az Mózes 3. könyvében a 11. fejezetben megtalálja a magyarázatot. Szóval eléggé zavar, amikor netpincéren egy több oldalas listában kell végigböngésznem, hogy mi az ami jó nekem.

Ennek megkönnyítésére csináltam egy Greasemonkey Scriptet, ami kiszedi azokat a sorokat, amik biztos nem lesznek jók. Látva a twitteres lelkesedést a szkript iránt ezt itt is elérhetővé teszem. Mások is használhatják, hogy mondjuk kiszűrjék az ananászt, tengeri herkentyűket, etc. tartalmazó ételeket.

Telepítés: Netpincer 0.1

Beállítható, hogy milyen összetevőkre szűrjön a szkript. Ezt az about:config oldalon lehet megtenni. Érdemes előtte, de már a szkript telepítése után legalább egyszer meglátogatni a Netpincér oldalát. Ekkor elérhető lesz egy greasemonkey.scriptvals.http://lackac.hu/Netpincer.pattern nevű beállítás, amit át kell állítani arra, ami nekünk tetszik. Ez lehet egy vesszővel elválasztott lista azokról, amiket nem szeretünk, vagy egy reguláris kifejezés. Például "sonka, ananász, csiga" v. "/sonk[aá]|ananáss?z|csig[aá]/i". A példában említetthez hasonló konverziót a vesszővel elválasztott listán végrehajtok, így reguláris kifejezést az ennél bonyolultabb szűrésekhez érdemes csinálni.

Tapasztalatokat, feature requesteket kommentekbe írjátok.

kommentek

Meetup prezentációm a.k.a. Firefox kiterjesztések fejlesztése

2008-06-04 11:00 | kommentek

Ma volt Meetup nap, én pedig előadtam. Alap szintű előadás Firefox kiterjesztés fejlesztés témában. Aki esetleg nem tudott eljönni és az eseményeket realtime sem tudta követni, utólag majd megnézheti videón. Az én prezentációm pedig itt is megtekinthető:

kommentek

Első nap a Virgónál

2008-06-02 13:58 | kommentek

Eredetileg nem akartam írni az első napomról, de aztán találtam ezt az első munkanapos élményt az rss olvasómban, és kellett valami, hogy belinkelhessem. Olvassátok el. Vicces.

Velem azonban semmi ilyesmi nem történt. Volt viszont madárcsicsergős meeting, grillparti délben, később torta, még több meeting, és persze munka is. Sőt, ami azt illeti beérkezésem utáni második órában már ki is pipálhattam az első feladatomat, ami egy projekt update volt Rails 2.1-re (BTW, aki nem Edge-en él az lépjen fel 2.1-re. Érdemes).

Azt mondják, azért nem minden nap ilyen, ez csak a beetetés. Viszont a légkör jó volt, és a projekt is jónak tűnik (a rubys része legalábbis). Kaptam monitort is (Samsung 223BW, az itthoni nagyobb, meg jobb is, de a célnak ez is megfelel), meg vadiúj Apple alu billentyűzetet. Persze szokás szerint a magyar Apple kereskedők nem voltak képesek hajlandóak megérteni, hogy angol kiosztással szeretném, de ebből inkább nem csinálok problémát. A következő körben szerintem beszereztetek magamnak egy Griffin Elevator notebook állványt is. Múlt héten volt alkalmam a KiBuban kipróbálni, és beleszerettem.

kommentek

Angol projekt oldal, GitHub repók, stb.

2008-06-01 14:14 | kommentek

Aki még nem tudná, szerdán tartok egy meetup prezit Firefox kiterjesztés fejlesztésről. Aki tud, jöjjön el, infók a meetup blogon. Szóval tekintettel arra, hogy holnap kezdek a Virgónál, nem hagyhattam utolsó pillanatra a prezentáció elkészítését. Nagy valószínűséggel nem lett volna már rá sok időm. Tehát ez készült el ma délelőtt. Szép Keynote-os lesz, syntax highlighttal, meg mindennel. Oh, és easter egg is lesz benne. Erről ennyit.

Ha már úgyis FF kiterjesztésekkel kezdtem a napot, gondoltam rendet rakok közöttük. Felraktam a három fontosabb Firefox kiterjesztésem addons.mozilla.org-ra (AMO), csináltam nekik GitHub-os repositoryt, ezzel hivatalosan is megnyitva a forrásukat. Végül csináltam egy angol nyelvű oldalt, amin összegyűjtöttem a egydélutános projekteket. Ez a lackac.name címen érhető el. Elég fapados lett, de a célnak egyelőre megfelel. Itt amúgy megtalálható a link a kiterjesztések AMO oldalaira és a GitHub repositorykhoz is.

Úgy érzem produktív nap volt. Most pedig alvás, hogy holnap ne legyek teljesen kómás az első Virgós napon.

kommentek

Heroku, majdnem Google AppEngine Railshez

2008-05-29 15:38 | kommentek

Minden Rails fejlesztő arról álmodozik, hogy mikor lesz Google AppEngine-ben Ruby support. Ez persze nagyon hasznos lenne, viszont van itt valami ehhez hasonló jószág, aminek Heroku a neve.

Ez egy online rendszer Rails alkalmazások fejlesztésére és hosztolására. Van webes IDE is, de persze lehet lokálisan is fejleszteni, amihez nem árt alap szintű git felhasználói ismeret, mivel a Heroku a git verziókezelőre épít.

Jelenleg a szolgáltatás meghívásos béta állapotban van. Én már kaptam pár hete meghívást, de sajnos még nem jutott időm alaposabban kipróbálni. Talán meg tudok pár embert hívni, ha valakit érdekel. Most viszont olvasom ezt a Herokuval játszadozós bejegyzést róla és igazán megjött hozzá a kedvem.

Mit akarsz, ez nem is AppEngine

Valóban nem AppEngine-ről van szó, de valami hasonló környezetet kapunk itt is. Az alkalmazások az Amazon EC2 elosztott rendszerén futnak, kapunk egy hasznos parancssori eszközt az alkalmazásaink karbantartására. A deployment annyiból áll, hogy kinyomunk egy lokális verziót a Heroku szerverén található git repositorynkba. A migrationöket, szerverújraindítást elintézi a rendszer helyettünk.

Szóval amit nyerünk:

  • nem nekünk kell szervert konfigurálni
  • Cloud Computing Amazon EC2-őn
  • Webes GUI és/vagy parancssoros segédeszköz és git
  • Teljes Rails környezet (gemek, pluginek)

Mindez jelenleg ingyenes, bár nem hinném, hogy béta után is így maradna. Valami hasonló modellt tudok elképzelni, mint az AppEngine-nél, de erről még nincs semmilyen információ. Bár ki tudja, lehet hogy most RailsConfon bejelentenek valamit.

kommentek

JRuby on Rails komoly környezetben

2008-05-26 02:04 | kommentek

A legutóbbi JRubys bejegyzésben én is arra a következtetésre jutottam, hogy JRuby már most használható production környezetben is. Most pedig itt egy újabb ragyogó példa erre.

A Collaborative Software Initiative (CSI) hasonló gondolkodású cégeket fog össze kollaboratív szoftverfejlesztés során. Nemrég egy open-source web-alapú szoftver fejlesztésébe kezdtek, amely a fertőző betegségek kezelésében és bejelentésében fog segítséget nyújtani.

Fejlesztői platformként a JRubyt és Railst választották. Az InfoQ által készített interjúban a program menedzser elmondja, hogy miért a JRubyt választották, és mik a tapasztalataik vele. Olvassátok el, hasznos. Én most csak egy részt idéznék (kiemelés általam):

More than anything, we have been impressed with the drive of the JRuby community. It is very ambitious and also pragmatic. The core team is comprised of some spectacular developers. The focus seems to be on the right things. Better Java integration, constant performance improvement, and collaborating with the JVM folks on improving the JVM for all dynamic languages. This is all good.

A JRuby fejlesztők valóban mindent megtesznek, hogy ez a platform jól alkalmazható alternatíva legyen bármilyen enterprise, Java, vagy akár Ruby környezetben is.

kommentek

« Újabb bejegyzések | Régebbi bejegyzések »