Šorti

January 25th, 2010

Sestdienas rītā, kad ārā temperatūra kādi mīnus 15, uzvilku ziemas jaku un krosenes, iekāpu mašīnā un aizbraucu uz veikalu. Šortos. Pēc tam bija stipri jāsakož zobi, lai nesmietos par cilvēku izbolītajām acīm. Bet man nesalst.

Tas atgādināja bērnību, kad 90. gados dobokā un basām kājām trenējāmies nekurinātās vai slikti apkurinātās sporta zālēs un pusstunda pagāja, līdz atkal varēja just kāju pirkstus. Uz beigām treneris kļuva apsēsts ar “Детка” ideju un vairākas reizes treniņi notika tajos pašos dobokos basām kājām sniegotā mežā. Beidzās ar to, ka es aizgāju trenēties uz citu klubu.

Python 3.2 un GIL

January 20th, 2010

Mazliet pārfrāzējot: programmētājam bija ātrdarbības problēma un viņš nespēja atrast risinājumu. “Zinu,” viņš teica, “es lietošu vairākus pavedienus.” Tagad programmētājam bija divas problēmas.

Ik pa brīdim uzrodas kāda diskusija par Python GIL likvidēšu. Tā ir “ļaunuma sakne”, kuras dēļ Python vairākpavedienu programmas nespēj izmantot vairākus procesorus, jo vienlaicīgi tiek izpildīta tikai viena instrukcija un darbojas viens pavediens. Oficiālā atbilde šādos gadījumos ir lietot Jython vai neatkarīgus procesus pavedienu vietā.

Arī jaunākajā Python 3k versijā GIL joprojām ir, bet ar dažiem uzlabojumiem. Ja piever acis uz tehnisko realizāciju, šajā prezentācijā ir pāris interesanti fakti:

  • Šobrīd, “optimizējot” ar vairākiem pavedieniem un paralēlu izpildi, tiek sasniegts negatīvs rezultāts – prezentācijas piemērā uzdevums tiek veikts 1.8 reizes lēnāk.
  • Nākošajās Python versijās vairākpavedienu programmas strādās gandrīz tikpat ātri kā viena pavediena programmas.

Tāpēc, ja vien programmas šaurā vieta nav I/O (bieži ir), tad par vairākiem pavedieniem Python programmās ir jāaizmirst.

Life is hard, and then you die.

January 18th, 2010

Meklējot precīzos vārdus citātam par Perl izrādījās, ka kopš 2009. gada Erik Naggum vairs nav. Pirms vairākiem gadiem es izklaides pēc lasīju comp.lang.lisp diskusijas ar viņa piedalīšanos apmēram to pašu īpašību dēļ kā tagad skatos dakteri Hausu. Viņš bija Lisp programmētājs, kas ienīda Perl, XML, C++, cilvēku stulbumu, mācīšanās vēlmes trūkumu, prata argumentēt savus uzskatus un nekad nepalika vārdu parādā.
Tas viss ir jautri, kamēr nav vērsts pret tevi.

 

Pusceļā starp RDBMS un NoSQL

January 12th, 2010

Kaut kur pusceļā starp RDBMS un NoSQL atrodas FcukSQL pasaule.

No vienas puses FcukSQL grib izmantot SQL, nevis manuāli rakstītu meklēšanas/grupēšanas/summēšanas kodu, grib vairākus(!) indeksus, ACID transakcijas un RDBMS administrēšanas rīkus. Un pilnībā pietiek ar viena datu bāzes servera jaudu. No otras puses – grib “lidojumā” maināmas datu struktūras, glabāt nestrukturētus datus (schema-less) un taisīt indeksus šiem nestrukturētajiem datiem.

Tad rodas risinājumi, kas “izvaro” RDBMS un glabā serializētus datus vai tabulas ar key-value pārīšiem. Bet kaut ko tādu nākas redzēt pirmo reizi:

[...] Salesforce’s Craig Weissman, Chief Architect, created an innovative approach where tables are not created for each customer. All data from all customers is mapped into the same data table, including indexes. The schema for that table looks something like orgid, oid, value0, value1…value500. “orgid” is the organization ID and is how data is never mixed up.

Vēl viens pierādījums, ka Perl lieto slimi perveļi

December 1st, 2009

The Goatse Operator =()=

Out-of-memory un malloc()

November 3rd, 2009

Kāds ir uzrakstījis diezgan labu rakstu par malloc() kļūdu apstrādi dažādās atvērtā koda programmās un bibliotēkās. Visus variantus atgremot nav vērts, tomēr vispopulārākā stratēģija ir kļūdas ziņojums un priekšlaicīgā procesa pārtrauce (abort), kas ir saprātīgs kompromiss starp mēģinājumu apstrādāt kļūdu un nekā nedarīšanu.

Arī komentāri lasīšanas vērti. Ir interesanta versija (ļoti ticami, bet precīzi pārbaudījis neesmu): malloc() uz Linux pēc noklusēšanas vienmēr atgriezīs ne-NULL adresi. Atmiņa tiks izdalīta tikai brīdī, kad mēģinās rakstīt šajā adresē un programmu nokaus OOM killer.

Pēc šī teksta vēlme apstrādāt malloc() kļūdas vēl vairāk tuvojas nullei.

In C “abcdef”[3] == 3["abcdef"]

July 9th, 2009

Cik ilgi var programmēt C/C++ nezinot, ka "abcdef"[3] ir tas pats, kas 3["abcdef"] ? Jo kvadrātiekavas ir tikai sintaktisks cukurs:

a[i] == *(a + i) == *(i + a) == i[a]

Arrays as Pointers – Weird But True

die_you_gravy_sucking_pig_dog();

January 15th, 2009

LOL: die_you_gravy_sucking_pig_dog();

Š ādu saiti uzgāju, lasot coding horror rakstu par atmiņas vadību . Vairums jauno un moderno programmēšanas valodu ir atbrīvojušās no “drausmīgās” manuālas atmiņas vadības ar new/delete, malloc/free. Bet problēma drīzāk ir acquire/release šablons, kas joprojām ir sastopams daudzās programmās. Es runāju par kaut ko šādu, kur resource ir fails, pieslēgums pie datubāzes, pavediens:

    resource.acquire();
    try {
        usage code
    } finally {
        resource.release();
    }

Aizmirstā release problēma joprojām ir aktuāla. Tāpēc man liekas, ka lielākais (automātisko) drazu savācēju trūkums ir tāds, ka tie veic tikai atmiņas resursu vadību. 60-ajos gados tas tiešām bija aktuāli, bet mūsdienās pat “Hello world” lasa vairākus konfigurācijas failus, slēdzas pie datubāzes, Web serveriem un šiem resursiem ir tendence izbeigties ātrāk nekā atmiņai. Problēma tiek slēpta, veicot drazas savākšanu biežāk, vairāk un pat paralēli programmas izpildei. Kaut kādi uzlabojumi šajā jomā ir sastopami C# un Ruby ar paredzamu resursu vadību koda bloka ietvaros, bet man arvien vairāk sāk likties, ka atsauču skaitīšana un RAII ir pareizāks risinājums. Tik daudz darba tiek veikts, lai tuvinātos paredzamai resursu atbrīvošanai – varbūt tā bija jādara no paša sākuma?

Civility

January 13th, 2009

You know how much you value civility by finding out when you are willing to abandon it.

Enerģija

December 21st, 2008

Pussy reklāmas Rīgas ielās un televīzijā pašas uzprasījās. Es reģistrēšu preāu zīmi “Cock” – tā būs mana vīzija par proteīniem bagātu enerģijas batoniņu.

Kas notiek ar Latvijas finansēm, ekonomiku un starptautisko aizņēmumu?

December 5th, 2008

Read the rest of this entry »

fop fop fop

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

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 .