úterý 20. listopadu 2007

ActiveRecord and BigDecimal problem with decimal point

We are using database with Czech Collation (Locales) and Czech language uses comma as decimal point. ActiveRecord (and BigDecimal) are not written for using comma. So, when another character than digit or point appears on input, input is stopped and previous parsed text is returned as number.
We have to compute with prices that are decimal. In database is stored something like 123,45 but after calling

> Amount.find(1).value

we received 123 instead of 123.45 (#<BigDecimal:4b5850c,'0.12345e3',8(12)>)
I traced ActiveRecord and found that method find (its internal implementation) uses method instantiate and it calls object.instance_variable_set("@attributes", record) and this method is just stub for C runtime libraries.
So I created solution - override method instance_variable_set in model class Amount like this:


def instance_variable_set symbol, obj
super
if symbol == "@attributes"
input = obj["value"]
unless input.nil? or input.index(",").nil?
input[input.index(",")] = "."
@value = BigDecimal.new(input)
end
end
end

Any better solution?

sobota 3. listopadu 2007

TMOU 9

I letos bylo TMOU naprosto famozni. V 17 hodin vse vypuklo hymnou na namesti Svobody a pak bylo TMOU vsude kolem nas.. demonstranti, bezdomovci, Ivos se svoji basnickou, roztleskavacky, Jan Skacel se svou napovedou, telefonni budky :)
Po chvili bezmocneho pobihani kolem jsme zjistili o co jde a zacli postupne sbirat hesla k desifrovani prvni sifry. Dokonce dle statistiky na strankach TMOU jsme porazili budouciho viteze na prvni sifre (diky abecede :), Prahory maj smulu)
Druhou sifru jsme zvladli bravurne aneb nadherne to vyjadrila slova Martinky "je vyborny, ze nejsme prvni, uz vedela na kolik to ma zvetsit".
Vyrazili jsme tedy na dalsi stanoviste, ktere jsme malem minuli, ale nastesti jsem se zeptal chlapcu pod mostem, zda lusti a oni byli na tolik solidarni, ze mi ten cip dali :) Akorat jsem nemohl trefit spravne nasi tajnou frazi, tak me trosku zalil pot, co jsem tam vlastne zadal. Lusteni teto sifry bylo nejzabavnejsi (viz foto), navic jsme lustili v teple, tak jsme byli maximalne spokojeni. I proto jsme na Karaskovo namesti bezeli jen dva a vraceli se zpatky do tepla.
Mapa nas trosku zradila, premysleli jsme co by to mohlo byt, jaka hora.. Spilberk, Bila hora?! Takze cast tymu se vydala smerem na Bilou horu, ale stihli jsme je jeste stopnout a dohnat na Stare Osade a vydali s k hrbitovu. Zde byla podle me nejzabavnejsi sifra, kterou jsme potkali, protoze vymysleni tretiho slova k predchozim dvoum bylo ... Martin prekvapil svymi prispevky: "Zeny, vino, zpev" a "Sex, drogy, rockandroll". Knedlo-zelo-vepro jsme nedali, ale cast, kterou jsme meli, nam stacila na presun k sose u skoly na Masarove.
No a tady byla pro nas konecna :-/- nejaka krychle. Princip jsme pochopili, ale precist ji - to byl problem. Po dvou hodinach jsme se vydali pro napovedu.. pak dalsi a pak jsme se rozhodli to zabalit.. cestou jsme (druha cast tymu) jeste potkali treti napovedu a nasli reseni, ale uz jsme to nesvolavali zpet a spokojeni sli spat.. Bylo to bajecne a priste to bude zase o chlup lepsi :)

úterý 9. října 2007

prezentace Google v Brne


Brno navstivil vicepresident Googlu Douglas Merrill a mel nam "prozradit tajemstvi o vyhledavani".
Bohuzel jsem z jeho prezentace mirne zklaman po technicke strance, ale show to byla uzasna. Doug je vyborny bavic a zcela bez zabran si dokazal utahovat jak ze sebe, Americanu, tak i z cehokoliv jineho. Bylo prijemne videt cloveka, ktery se podili na mem nejoblibenejsim software a po prezentaci (zamerne nepouzivam slovo prednaska) s nim dokonce prohodit par slov. K tomu jsem se dostal ciste nahodou, kdy me pri odchodu odchytla nejaka pani z ceskeho Google a ptala se me spolu s dalsimi na odezvu k teto prezentaci. Nechal jsem jim i email, tak doufam, ze brzy prijde lakava nabidka :) treba na nejakou pozici vicepresident engineering.

neděle 7. října 2007

kvalifikace TMOU 9

Jako kazdy rok jsem se letos tesil na kvalifikaci TMOU. Vecer straveny premyslenim, radosti stridajici beznadej po nekolika hodinach lusteni tezke sifry a na zaver sladke poteseni po uspesnem kvalifikovani.
Zacatek byl vynikajici, po nekolika minutach jsme meli vyresene sifry 11 a 12 a uz nam chybela pouze jedna do druheho kola. "Pouze" se nakonec protahlo na hodinu a pul a uz me popadala beznadej, ze to letos zase nezvladneme :-( obzvlaste kdyz mi po hodine a pul psal kamarad, ze uz maji kvalifikaci hotovou. Nastesti jsme zvladli sifru 14 a sli jsme dal..
Druhe kolo jsme zvladli behem chvile a objevilo se nam zadani kola tretiho. Zadna slast. Bud muzeme lustit sipky nebo nejake divne obrazce. Nakonec vyhraly sipky, protoze jsme zjistili, ze vytvori krasnou krychlicku. Potom to uz jenom dat dohromady, zjistit, kde je jake pismenko a 22:30 jsme byli hotovi :)
Ted uz jen zbyvalo cekat na jedenactou hodinu a doufat, ze jsme se vlezli do limitu 200 tymu. Ano, mame krasne 144. misto!!!
Pro jistotu jsem se nedrzel nazvu naseho tymu (Na posledni chvili) a zaplatil poplatek za hru jako prvni. A ted uz jen:
Instruktori, teste se!!! 2.11. pujdeme TMOU!!!

pátek 5. října 2007

veliky objev

Mozna vam to prijde hloupe az detinske, ale dnes rano jsem ucinil veliky objev. Uvedomil jsem si jak dulezite to je v zivote kazdeho otce nalezt prvni zub sveho ditete, vzpomnel jsem si na sve album z detstvi, kde stojim v postylce, hrde ukazuju prstem do pusy a vedle je maluvka a popisek, ze jsme objevili prvni zub.
Muj velky objev sice neni prvni zub u meho potomka ani u jineho potomka, ale samotnou podstatu naplnuje.
Dnes rano jsem totiz objevil svuj prvni ... teda ... svoji prvni osmicku :-D

středa 3. října 2007

Rails (mongrel ) and problem with class Service

We are using model class named "Service". This class extends ActiveRecord::Base.
This error "undefined method `find' for Service:Module" was appeared after deployment on production server where we are running mongrel as web server.
Webrick on developer's machine works fine, so we started searching in google and here is answer.

Problem is in name conflict between gem mongrel_service (mongrel should work as windows service) and our model class Service.

So, try uninstall (gem uninstall mongrel_service) and everything should works fine.

pondělí 24. září 2007

nový mazlíček


O koupi nového mobilu jsem uvažoval už hodně dlouho. Můj stařičký Siemens C65 už zlobil, špatně zobrazoval některé údaje, zapomínal čísla nepřijatých hovorů atd., ale stále mi bylo líto utrácet zbytečně peníze dokud slouží.
Sehrála se však spousta událostí (Brio, kde jsem si rozbil displey, Neuschwanstein, kde jsem měl půjčenou Zuzanu) a tak jsem se rozhlédl po internetu - požadavky byly jednoduché: mobil, GPS, WiFi, přehrávání mp3 a aby to umělo prohlížet pdf soubory a samozřejmě čím nižší cena, tím líp.
Po dlouhém a dlouhém vybíraní jsem se rozhodl pro E-Ten X500+, přečetl si o něm diskuze na internetu a narazil na jakýsi problém, který prý zamezí distribuci. Inu, našel jsem si prodejce v Brně, který ho měl skladem a šel ho omrknout a poptat se co a jak. Byla to láska na první pohled a už jsem ho nechtěl vracet, tak jsem si ho hned odnesl :-)

úterý 18. září 2007

Neuschwanstein

Rok se s rokem sesel a moje draha polovicka oslavila narozeniny. Rozhodl jsem se, ze ji nevenuju obycejny darek a tak jsem zvolil vylet na zamek Neuschwanstein.
Ciste nahodou jsem ziskal dalsi dva pasazery (kolega s kolegyni z prace), kteri se k nam pridali v Zelezne Rude, kde uz byli na vylete.
Vyrazili jsme tedy v patek z Brna, prespali v Zelezne Rude v hotelu Belveder a v sobotu rano se vydali do Nemecka do mesta Hohenschwangau, kde se nas cil nachazel. Prvni problem se vyskytl hned na hranici, kde nam pan celnik oznamil, ze nas do Nemecka nemuze pustit, pokud mame s Martinou ustrihly roh obcanky (pozustatek po svatbe :)). No po chvili vahani jsem slapl na plyn a uz jsme byli v Nemecku, takze ted ocekavam nejakou obsilku nebo tak neco.
Samotna dalsi cesta uz byla v pohode a dorazili jsme v poradku az do cile. Trosku me zarazila doba prohlidky (30 minut) a jeji rozsah, ale doma jsme zjistili, ze jsme asi opravdu prosli cely zamek - divne. Cestou zpet do Zelezne Rudy jsem rozhodl, ze dojedeme na zbytek benzinu, abychom nemuseli tankovat v Nemecku. Rozhodnuti to bylo chvalyhodne, lec neopatrne. Velmi uspornou (a pomalou) jizdou jsem se dostal az k hranicim, jenze Sumavske pohori pro nas bylo smrtelne a benzin skoro dosel. V tuto chvili nas zachranila Zuzana (zapujcena navigace od maxima), ale uz jsme meli fakt nahnano. Cesta pres celnici prosla v pohode - asi davali zajimave porady v televizi. Cestou domu do Brna jsme se jeste stavili ve Velharticich a na nejstarsim kamennem moste v Pisku.. supr vylet a ted trosku cisel:
celkova trasa: 1312 km
prumerna rychlost: 76 km/h
prumerna spotreba: 6.1 l/100km
doba stravena za volantem: ~17 hodin
to vse realizovano behem 50 hodin
obrazky jsou zde!!

úterý 11. září 2007

rails and file_column plugin: copy problem

I must solve this problem: some record with picture is created and it is necessary to create its copy. This record has image and we use file_column plugin for manipulations with this field.
Uploading of file is super, but problem began when you try to set image from local file system. I found simple and nice solution on this blog, but this solution doesn't work.
So, I made some changes to original script and you should use these simple commands.


coppied_area = Area.find(params[:coppied_area]) # original record
@area = coppied_area.clone # create copy
@area.day_foto = File.open coppied_area.day_foto unless coppied_area.day_foto.nil? # add image when existing


New file_column.rb should be downloaded here.

středa 5. září 2007

Ruby on Rails, MS SQL Server 2005 and default values

The next problem to solve was this:
When we create model class like this

class CreateSubjects < ActiveRecord::Migration
def self.up
create_table :subjects do |t|
t.column :first_name, :string
t.column :last_name, :string, :null => false
t.column :age, :integer
end
end
...
end

we suggested that first_name and age should contain NULL values. But our suggestion on MS SQL Server was wrong (on postgreSQL is everything fine).

>> Subject.new
=> #<subject:0x495357c @new_record=true, @attributes={
"first_name"=>"NULL", "last_name"=>nil, "age"=>0}>

and we have string "NULL" in first_name and 0 in age columns after calling save! method. In development.log was this create table script:

CREATE TABLE subjects ([id] int NOT NULL IDENTITY(1, 1) PRIMARY KEY, [first_name] varchar(255) DEFAULT NULL, [last_name] varchar(255) NOT NULL, [age] integer DEFAULT NULL)

Adding of "DEFAULT NULL" causes creation of default values (0 or "NULL") in sqlserver adapter. So, I created my first ticket in rails (http://dev.rubyonrails.org/ticket/9469) with proposed solution and made this solution in our project:

# bugfix for mssql adapter - adding default value for columns
module ActiveRecord
module ConnectionAdapters # :nodoc:
module SchemaStatements
alias_method :old_add, :add_column_options!

attr_writer :adapter

def adapter
if @adapter.nil?
c = Rails::Configuration.new
env = ENV['RAILS_ENV'] ||= "development"
@adapter = c.database_configuration[env]['adapter']
end
@adapter
end

def add_column_options!(sql, options) #:nodoc:
if adapter === "sqlserver"
sql << " NOT NULL" if options[:null] == false
sql << " DEFAULT #{quote(options[:default], options[:column])}" unless options[:default].nil?
else
old_add sql, options
end
end
end
end
end

úterý 4. září 2007

Ruby on Rails, MS SQL Server 2005 and diacritic

It looks like a common problem :) for all developers.
I used Windows 2000 Czech Edition on my developer station, MS SQL Server 2005 Express and Ruby on Rails 1.2.3. There was no problem up to application deployment on server that runs on English edition of Windows Server. Then diacritic was broken and you can see "Jiří Novák" instead of nice "Jiří Novák". Database was OK, application worked fine, so where is problem?

After few experiments, I found solution: add these lines in config/environment.rb

require 'win32ole'
WIN32OLE.codepage = WIN32OLE::CP_UTF8

"Jirí Novák" is better but not perfect. So last modification is just setting of Windows Server - switch default locales to Czech and lalala... "Jiří Novák" is here!

co nového?

Dalo by se říct, že v podstatě vůbec nic - mám se stále výborně a jsem spokojený. Kamarádi se na mě ještě nevykašlali, takže občas zajdem zasportovat, na pivko nebo si zahrát nějakou deskovou hru.
Ale přeci jen něco se změnilo - rozhodl jsem se zase pokračovat ve svém blogu. A proč? Protože mám nějaké novinky a dokonce možná i něco zajímavého. LogicaCMG fakt nešla, takže jsem se s nima rozloučil a přesunul jsem se do nové, krásné, perspektivní a zajímavé práce. Měl jsem jít na pozici Software Architekta na projektu v J2EE a všechno mělo být jak v pohádce. Člověk míní a Bůh mění, nebo jak se to říká a projekt se zpozdil, takže bylo potřeba nás upíchnout na něco, kde bychom firmě vydělali nějakou kačku a tak jsem přičichl k Ruby a Ruby on Rails. Byla mi přislíbena nová funkce (už jsem skoro funkcionář :-)) team leadra vývojového týmu na tomto projektu. A opět nastala změna: jelikož s mojí drahou jsme plánovali svatbu, úspěšně ji naplánovali a zrealizovali (http://picasaweb.google.com/michal.skrdla/Svatba), vydali jsme se též na svatební cestu (http://picasaweb.google.com/michal.skrdla/Egypt). Bohužel pro mě, jsem se vrátil do rozjetého vlaku, kdy "moje" pozice už byla zabraná a tak jsem začal kódit. S dvoutýdenním spožděním oproti kolegům mě pasovali na pozici "technology leader". Zábavný to krok, ale jinak ideální práce. No a co takový člověk dělá? Řeší problémy za ostatní, aby se nezdržovali a tak zkouším, prototypuju, hledám a vymýšlím řešení o které se tu snad budu dělit.

středa 18. dubna 2007

petanque

Krasne jarni pocasi nas tahne do prirody. Pravda, v Brne si prilis prirody neuzijete, tak je prijemne, ze tu mame aspon Luzanky, kde v te zeleni skoro zapomenete, ze jste v centru velkomesta :-D
Domluvil jsem se tedy s Mirkou (vpravo - kamaratka), ze vyuzijeme "ihrisko na petanque" a vyzkousime koule, ktere jsem dostal k Vanocum.
Byly moc pekne, leskle, stribrne.. proste nadherne.. Bohuzel na tom hristi jsou celkem velke kaminky, takze hned po prvnim hodu bylo jasne, ze tyto koule uz nebudou vystavnimi kousky. Musim nas pochvalit - porazili jsme s Mirkou jeji kamarady 4:1 na zapasy, takze me znicene koule ani tolik nemrzely. Spis ta posledni prohra.. protoze 5:0 by bylo mnohem prijemnejsi. No, nemusi prset.. staci kdyz kape.

pondělí 16. dubna 2007

karnevalovy

Bylo nebylo, stala se mi takova (ne)prijemna vec. Pred ctyrmi lety Martina zacla organizovat detsky karneval. Letos vsak jeji partner-moderator nemohl a tak jsem jeho pozici zaujal ja.
Ziskali jsme vyborne masky - krabice od smetany. Ja byl vetsi modra. Martina mensi cervena.
Behem karnevalu se nam jeste z cervene smetany stalo zbozi s proslou dobou trvanlivosti.
Me poznatky z krabicoveho odpoledne jsou nasledujici:
  • byt v krabici neni nic prijemneho
  • obsahu krabice, jehoz obal je kapacitne poddimenzovan se spatne dycha
  • nosit krabici neni nic prijemneho (je tezka, obsah ztraci pohyblivost, ...)
  • otvirani krabice neni ani pro obsah prilis setrne
Podarilo se mi splest masku kralicka s gepardem - ostuda :) a nekolik dalsich faux pas.
Fotky snad budou :)

čtvrtek 12. dubna 2007

cokoladovy

Tak zase uplynulo par dni v praci a co se zmenilo?
V podstate nic. Rano prijdu, zadna prace, tak neco delam (snazim se naucit nejake blbiny) a odpoledne jdu pryc.
Ale prece jen nejake zlepseni - mame tu takovy kouzelny automat na kafe atd. Oproti ICZ je z nej naprosto vyborna cokolada - asi tu nemame nejakeho cloveka, co si tu dobrou nosi domu a dava do automatu nejaky zmetky.
No a co ze to ted delam? Rozhodl jsem se usnadnit praci sve drahe a pisu ji aplikaci, pomoci ktere bude moct udelovat znamky svym ratolestem treba pres mobil a samozrejme to bude obsahovat same featury, jako napriklad export znamek pres web services, pristup rodicu ke znamkam ditete pres web. Vse v J2EE a nejnovejsich technologiich (JPA, JSF, JAX-WS atd). Aspon se na chvili zabavim :) Treba to nekdo bude i pouzivat... :-)

Java koutek:
Tak jsem objevil, ze pokud mam web modul a EJB modul v Enterprise aplikaci a pouzivam mapovani pomoci JPA (Toplink), tak je potreba ve web modulu do persistance.xml vlozit Entity Beans z EJB modulu, jinak je Toplink nevidi a hlasi prijemne chyby. Inu chybami se clovek uci.

čtvrtek 5. dubna 2007

zacatek v LogiceCMG

Tak jsem v pondeli nastoupil do nove prace pln nadseni a radosti, ze odletim pracovat do Londyna.
Hned v pondeli prisla zprava, ze letim dalsi pondeli (Velikonocni pondeli), tak mi to trosku nabortilo plany a najednou se mi ani moc nechtelo, ale nejak jsem se s tim smiril, reorganizoval si plan a smiril se i s tim, ze me posadili k desktopu se strasnou klavesnici a ze normalni pocitac (notebook) snad dostanu v te Anglii.
Prislo utery, den druhy. Rano se mi dostala zprava, ze odletaji pouze dva testeri, kteri s nami nastoupili a ja a jeste jeden kolega zustavame tady, protoze pro nas neni "assignment". Zacal jsem se tedy trochu zajimat, co a jak a kolega sedici po pravici priznal, ze uz tu sedi asi mesic a taky ceka na odlet do Anglie.
Streda, den treti. Ocekavana schuzka s nasim sefem, ktery zatim nemel cas nadesla. Hned cestou na obed pri parkovani naboril sveho Volkswagena Passata a na obede nam sdelil, ze teda testeri odletaji a o nas, ze zatim nevi, protoze porad nema zadny "assignment". Takze se tu porad nudim u blbyho pocitace s klavesnici na ktere se neda ani poradne psat. Spravci pocitacu mi nechteji dat jinou, protoze tu jsem pry na chvili a sedim u "hotdesku", ktery je normalne volne k pouziti a tedy neni vhodne u nej cokoliv menit, aby nevznikl zmatek. Ani radeji moc nepisu pres icq a ucim se pracovat a ovladat pocitac mysi.
Ctvrtek, den ctvrty - soucasnost. Assignment stale zadny. Zacinam se smirovat s tim, ze se muzu ucit. Prichazi nepotvrzena zprava o moznosti presmerovani na nejaky projekt na Slovensku. Sice zadny terno, ale aspon by to bylo kousek domu :)
Po nekolika dalsich pokusech o vymenu klavesnice pres IT vzdavam svoji snahu a smiruji se s tim, ze ukradnu v utery klavesnici po testerech, co odletaji do Anglie. Grrrr... Po obede jsem vsak objevil klavesnici u kolegyne, ktera stejne pise jen na notasu a jelikoz neklade zadny vetsi odpor je klavesnice ma :-D Huraaa.... Aspon dilci uspech..
Uvidime, jak to bude pokracovat ;-)