Archive for November, 2008

fop fop fop

Thursday, November 27th, 2008

Manas smadzenes ir izvarotas un rokas nogurušas: Apache FOP (Formatting Objects Processor) jau esošajiem izvadformātiem pievienoju Horrible Spreadsheet Format, pazīstamu arī kā Excel. Tagad no datiem XML formātā ar standarta XSL(-FO) transformācijām var iegūt XLS atskaites failu.

Smadzenes tāpēc, ka arvien labāk saprotu, ka briesmīgais nosaukums ir tiešām pelnīts – var palasīt kā tiek rēķināts kolonas platums un pārējos ierobežojumus. Rokas dēļ javiskajiem table.getCommonBorderPaddingBackground() .getBorderStyle(CommonBorderPaddingBackground.BEFORE) .

fap fap fap

Monty Python

Thursday, November 20th, 2008

Tā vietā, lai liktu YouTube dzēst tūkstošiem video un sūdzētu tiesā “pirātus”, Monty Python paši publicē savus video klipus .

Ooh, four… I mean five… I mean fire!

Sunday, November 16th, 2008

Sestdienas vakarā iekārtojos ērtāk spilvenā, paņēmu klēpī portatīvo datoru un sāku klabināt taustiņus. Tajā brīdī pāris reizes iebļāvās UPSis un nodzisa gaisma, savukārt kāpņutelpā atskanēja soļi. Gāju skatīties korķus, bet nāsīs sitās degošas gumijas smaka. Pēc pāris mirkļiem sapratu, ka lielākais tracis notiek divus stāvus augstāk pie elektrības skapja. Bet tur bija tādi dūmi, ka, kamēr izdomāju tiešām iet skatīties, cilvēki uguni bija paspējuši nodzēst un jau mēģināja atvērt logu. “Atvērt” izdevās izsitot stiklus. Es ierados tieši laikā, lai novērtētu postījumus: elektrības skaitītāji bija sadeguši, tāpat televīzijas un interneta kabeļi. Skaidrs, ka elektrību tik ātri neatjaunos, bet televīzija un internets prasīs vēl ilgāku laiku. Ņemot vērā jauko iespēju pavadīt valsts svētkus akmens laikmeta garā, savācām mantas un naktī braucām 120 kilometrus prom no Rīgas uz civilizāciju.

Būs Ziemassvētkos sev jāuzdāvina dūmu detektors pie ārdurvīm.

std::string intern

Monday, November 3rd, 2008

Pāris vietās nākas nodarboties ar string interning, lai samazinātu datu apjomu atmiņā. Tas nozīmē glabāt visas unikālās virknes vienā eksemplārā. Kādreiz mans kods, kas to darīja, aizņēma aptuveni 20 rindiņas un glabāja rādītājus uz unikālām simbolu virknēm. Bet tas nebija forši, jo rādītāji kādreiz var rādīt uz nekurieni un viss kods jāpārraksta izmantojot rādītājus.

Nesen vēlreiz paskatījos uz StringPool realizāciju un aizdomājos par std::string govi, kas piemīt GCC lietotajai STL realizācijai. Īsumā – ja tiek kopēts std::string objekts, reālā simbolu virkne netiek kopēta, tikai palielināts referenāu skaits. Tikai tad, kad objekts tiek legāli modificēts ar std::string metodēm, tiek veidota kopija un veiktas izmaiņas tajā. Savukārt gadījumos, kad izmaiņas tiek veiktas nelegāli:

std::string a = "foobar";
std::string b = a;
*((char *)a.c_str() + 3) = '\0';

“pēkšņi” tiek mainīti nesaistīti objekti. Š ajā gadījumā b ir “foo”, nevis “foobar” kā būtu gaidāms. Augstāk redzamais ir slikts kods, bet vairākas reizes ir nācies tādu sastapt.

Tā kā vienmēr tiek lietota GCC STL realizācija, tagad man ir jauna, uz šo brīdi īsākā, versija par std::string interning bez rādītāju izmantošanas:

typedef std::set<std::string> StringPool;
StringPool strings;

std::string foo = *strings.insert(getSomeString()).first;

Great Demo

Sunday, November 2nd, 2008

Š onedēļ kādas astoņpadsmit stundas Peter E. Cohan mācīja labāk prezentēt programmatūru. Viņam par to ir sava “Do the Last Thing First” koncepcija un Grāmata. Kewl! Saskaņā ar šo koncepciju, sākumā vajag stāstīt par problēmu un risinājumu, tad par īsāko ceļu kā sasniegt vēlamo rezultātu un tikai pēc tam saprātīgās porcijās stāstīt teoriju, konfigurēšanas iespējas un visu pārējo. Tas tādēļ, ka jo svarīgāks un ietekmīgs cilvēks klausās prezentāciju, jo ātrāk cilvēks aiziet prom – vismaz tāds bija viņa novērojums. Un vēl cilvēku uztveres un atmiņas īpatnības, ka vislabāk atceras prezentācijas sākumu, vidu aizmirst un mazliet atceras beigas.

Katrā ziņā interesanti un cits skatījums, kas (vabūt) ļaus rakstīt labākas prezentācijas.