My own boolean

January 7th, 2014

Papildus tam, ka es jaucu strip un trim dažādās programmēšanas valodās, tagad jāpiedomā arī pie tā vai boolean nozīmē true/false vai yes/no.

valgrind: Invalid boolean value 'true' (should be 'yes' or 'no')

quiz.ask.fm

November 29th, 2013

Vakar un šodien piedalījos un mazliet guvu panākumus interesantā programmēšanas konkursā.

Mans labākais Java risinājums bija 187 simbolus garš:

class Z{public static void main(String[]a){long[]i={9252785928L,14503985428L,11299508030L,9135278114L,9136394018L};for(long k:i)for(;k>0;k/=2)System.out.print(k<2?"#.\n":k%2>0?'#':'.');}}

Īsākais risinājums izmantoja base36 kodējumu, ar kuru es nesekmīgi spēlējos iekš Python, bet nezināju, ka to viegli var uztaisīt Java. Jebkurā gadījumā, redzot uzvarētāja kodu un ar savu uzkrāto pieredzi, varu piedāvāt Java risinājumu 182 simbolos:

class Z{public static void main(String[]a){for(int i=170;i>0;)System.out.print(--i%34<1?"#.\n":new java.math.BigInteger("1KB0ZJFEN39I5YDVARZX28KI5Z5RX1FYO",36).testBit(i)?'#':'.');}}

Starpcitu, es nosūtīju arī Python risinājumu 114 simbolos, bet tas laikam notika pēc rezultātu freeze:

for z in[32085242077,28922607561,17589334997,25223231453,25105905629]:print''.join('#.'[c>'0']for c in bin(z)[2:])

Viena no manām idejām bija arī

banner ask.fm

bet rezultāts mazliet atšķīrās no vajadzīgā.

Kas bija interesanti un pamācoši:

  • Sākumā izmēģināju datos glabāt cik reizes kurš simbols atkārtojas, bet daudz optimālāks izrādījās binārais formāts, kur "0" un "1" atbilst "." un "#".
  • Katru reizi, kad likās "nu īsāk vairs nevar", pēc pusstundas atkal radās doma kā kodu saīsināt.
  • Python varēja izdzēst daudzas atstarpes, piemēram print''.join('#.'[ vai a<'0'and'\n'or vienā no pirmajiem mēģinājumiem.
  • Salīdzināšanai jālieto tikai "<" vai ">" nevis "==", "!=" - ietaupam 1 simbolu.
  • Jāsalīdzina pret pozitīvu skaitli vai 0, ietaupam uz mīnusa rēķina.
  • Java: long f[]= vai long[]f= - efekts tas pats, bet par atstarpi īsāk.
  • Java: pāra skaitļa pārbaudi (k&1)>0 var uzrakstīt īsāk kā k%2>0, lai nav nepieciešamas iekavas dēļ operatoru prioritātēm.
  • Pareizi izvēloties kuru simbolu attēlos ar "0", var samazināt datu apjomu. Pašus datus arī var "uzlabot". Mans Java risinājums paļāvās, ka katrs binārais kods sākas ar "1" un samazināja bitu skaitu, jo visas rindas beidzās ar "#.\n".
  • Python: '#.'[int(c)], kur c ir "0" vai "1" var uzrakstīt par simbolu īsāk, jo bool konvertējas uz 0 vai 1: '#.'[c>'0']
  • Java bija nepieciešami veseli 45 simboli pirms paša algoritma rakstīšanas, lai būtu klase un main funkcija. Žēl, ka izlabots "bugs" un jālieto "public" main funkcijai - vecās Java runtime versijas "public" uzlika piespiedu kārtā pašas.

e-voting system

July 12th, 2013

Estonia just opensourced their e-voting system… written in Python!

In theory, there is no difference between theory and practice. But, in practice, there is.

July 3rd, 2013

Divi raksti, kuri nepretendē uz absolūtu patiesību, bet rada pārdomas.

Pirmais ir UML in Practice, kas tika prezentēts diezgan nopietnā konferencē (35th International Conference on Software Engineering (ICSE 2013)). Tikai 30% no aptaujātajiem speciālistiem / kompānijām daļēji un selektīvi lieto UML. Ko un kā lieto, var apskatīties publikācijā, bet man patika arī pirmais raksta komentārs – jautājums ir nevis kāpēc UML netiek lietots, bet gan kādēļ tas būtu jālieto.
Nez, vai LU joprojām UML un GRADE ir “svētā govs”?

Otrs ir High Costs and Negative Value of Pair Programming. Mani īpaši neinteresē patiesā efektivitāte un izmaksas, bet šī sadaļa gan “aizķēra”:

The software industry employs a total of 116 different occupation groups.  To date there is no data or literature on other kinds of pairs such as:

  • Pairs of business analysts
  • Pairs of architects
  • Pairs of designers
  • Pairs of testers
  • Pairs of quality assurance
  • Pairs of cost estimation specialists
  • Pairs of technical writers
  • Pairs of project managers

In many kinds of work divided authority has been shown to be harmful.  For example divided authority in military campaigns has led to many famous military disasters such as the battle of Cannae where Carthage defeated a Roman army with divided command.
For some kinds of work pairs have been shown to be helpful:

  • Airline pilots and copilots
  • Scuba diving with pairs
  • Authoring some but not all books
  • Police patrol units in hazardous locations

For other kinds of work pairs have been shown to be quite harmful:

  • Military commands
  • Corporate CEO level executives
  • Medical practices for individual patients
  • Professional football with two quarterbacks sharing playing time

Happiness

June 7th, 2013

Šodien esmu priecīgs divu iemeslu dēļ:

Ir publicēta grāmata par Oracle Tuxedo, kurai es biju recenzents, un es beidzot saņemšu dažas izdevniecības grāmatas par citiem tematiem kā “samaksu”.

Mans risinājums uzvarēja pirmajā Rubylight/JUG konkursā. Tas mani uzjautrina dēļ “es un Java” (Java man nav ne primārā, ne sekundārā valoda) un fakta, ka šo risinājumu sāku rakstīju ap 3iem naktī pirms deadline, pēc dārza svētkiem ar viskiju. Dažādus risinājumus un testus gan biju uzrakstījis pirms tam, kā arī pirms vairākiem gadiem gnome-terminal taisīju Trie struktūru optimizāciju. kods

Latvijas attīstībai, FAIL!

March 4th, 2013

Šovakar Einārs tik aizrautīgi stāstīja par savu jaunāko projektu un dators man arī bija turpat blakus, tāpēc nolēmu apskatīties ko cilvēki domā par Latvijas nākotni un tās attīstību.
It works? It fails!

made in china

March 1st, 2013

My latest über gadget:

Programming Languages for BIND 10

February 27th, 2013

If you learned C++ a while ago, but haven’t worked with a modern C++ environment, you probably have the wrong idea about programming with it.

Hurray for Poland!

January 14th, 2013

Polijā pieprasa oficiālas reliģijas statusu Lidojošā spageti briesmoņa «kultam»

Accept His Noodly Magnificence into your heart, into your soul, and ye shall forever be free. R’Amen.

Source code comment of the night

January 9th, 2013

/* XXX: This is not elegant, is it efficient ? */

Who am I?

January 3rd, 2013

Ļoti izteikta “kas es esmu” problēma Oracle RDBMS lietojumā. Šāds jautājums lietojumu moka apmēram 1300 reizes sekundē. Vismaz tekošais laiks interesē tikai 700 reizes sekundē.

              Snap Id     Snap Time      Sessions Curs/Sess Comment
            --------- ------------------ -------- --------- -------------------
Begin Snap:     38473 02-Jan-13 13:57:27    1,696      23.5
  End Snap:     38475 02-Jan-13 14:27:34    1,649      24.7
   Elapsed:               30.12 (mins)
                                                CPU per    Elap per
 Executions   Rows Processed   Rows per Exec    Exec (s)   Exec (s)  Hash Value
------------ --------------- ---------------- ----------- ---------- ----------
   2,454,655       2,453,967              1.0       0.00        0.00 2403185938
Module: C:\whatever
SELECT USER FROM SYS.DUAL

   1,335,087       1,335,041              1.0       0.00        0.00 3588513883
Module: C:\whatever
SELECT SYSTIMESTAMP FROM SYS.DUAL

SQL is slow, lets use NoSQL! LOL!

Oh yes, no ORM!

December 6th, 2012

No prezentācijas kā rakstīt nopietnas programmas Java priekš lieliem apjomiem un lielām bankām :D

Bet īsti vīri raksta high-frequency trading programmas, kas darbojas uz tīkla kartēm ar FPGA.

Lattelecom dekodera maiņa

November 5th, 2012

Vecais Lattelecom digitālās televīcijas dekoderis sāka sūdzēties, ka ir novecojis un jāpasūta jauns. Nu ko, paņēmām veco un brīvdienās aizbraucām uz Spici apmainīt pret jaunāku modeli.
Jautrība sākās mājās, kad jaunais modelis prasīja ievadīt 7 ciparu pakalpojuma numuru. Kā izrādās, tad līgumā šim numuram ir DTVS prefikss, lai ienaidnieks neiedomātos. Vēl lielāka nesaprašana radās, kad šis kods netika ņemts pretī. Izmēģinājām visas līguma ciparu kombinācijas, bet velti. Un tad 177 operatore pastāstīja, ka satraukumam nav pamata un mūsu pakalpojums tiks aktivizēts otrdien. Dooooh! Loģiski, vai ne?