Jan 16 2009

Map Sorter by size of it’s values

Category: TechnicalIuliana @ 15:41

Acum doua zile m-am vazut in postura de a optimiza ceva, din punctul de vedere al utilizatorului, nu al programatorului. Adica trebuia sa ordonez ninste procesari in functie de durata lor, pentru ca userul ce folosea aplicatia sa vada ca in spate chiar se proceseaza ceva. In fine, n-o sa intru in detalii. Ideea era ca datele de intrare ale procesarilor respective erau continute intr-un map de forma Map<K, Collection<V>> si eu ar fi trebuit sa parcurg mapul respectiv si sa pornesc procesarile in functie de dimensiunea colectiilor din map. Deci as fi avut nevoie sa sortez mapul respectiv in functie de dimensiunea valorilor mapului.

Continue reading “Map Sorter by size of it’s values”


Jan 15 2009

Pidgin stuff

Category: TechnicalIuliana @ 22:22

Anul trecut cam pe vremea asta scriam postul asta.

De atunci a trecut ceva timp, iar pidgin a ajuns la versiunea 2.5.4. Fixul din postul a devenit inutil, dar modul de obtinere a unui pidgin direct din surse va ramane mereu acelasi.

  • 1. se obtin sursele ultimei versiuni de pidgin aparute, in momentul de fata de aici.
  • 2. se despacheteaza (daca extensia este tar.gz sau tar.bz2 se da in consola comanda tar -xvf pidgin.*.tar.*)
  • 3. se intra in directorul obtinut in urma despachetarii si se da in consola urmatoarea comanda: ./configure –disable-gtkspell –disable-gstreamer –disable-meanwhile –disable-avahi –disable-nm –disable-tcl
  • 4. apoi urmatoarea: make
  • 5. apoi (ca root de data asta) urmatoarea: make install

Stiu ca pentru linuxarii cu greutate postul asta e banal, dar eu acum doua zile cand voiam sa imi schimb versiunea de pidgin nu am gasit pe nicaieri stringul complet al comenzii configure si a trebui sa o rulez de mai multe ori, pana cand am aflat ce optiuni nu erau suportate implicit ca sa le dau disable.


Jan 03 2009

Human life in my favourite music

Category: English posts,MiscellaneousIuliana @ 13:12

Because of some artistic reasons this post will be written in English.

When we are born we are all so innocent, then for some of us the going gets though, some of us say bye bye before their time, they just die like this, some others live ordinary lives and others do everything to be popular. Some of us not actually die, but do give up and get too friendly with drugs and alcohol. But some of us do make’it and get to meet love and feel insatiable, and get to be happy. But even so, some things might crash and burn or shake and break. It is all normal in a world that continuously spins around us. And it is also normal to have strange relationships and moments when you feel like you have no way out of the darkness. But remember, in a world so big, you are not alone. You are never alone, someone you don’t even know about is always right beside you. Some of us preffer to belive it’s an angel but most of us we know that he/she’s the one, the only one.

So have some faith, even you that consider yourselfs freeks! We are on the verge of something wonderful, at least that’s what Julia says.


Aug 14 2008

HQL-ul mamii lui…

Category: Miscellaneous,TechnicalIuliana @ 19:16

De ceva vreme ma chinui cu un task de la servici. Spun ca ma chinui, pentru ca specificatiile se tot modifica si de fiecare data cand vreau sa implementez ceva gasesc buguri sau nelamuriri.

Hai sa dau niste detalii. Deci am o tabela cu niste inregistrari numite tranzactii. In fiecare tranzactie sunt implicate niste conturi, dar nu direct ci prin intermediul altor tabele. Intr-una din tabele astea o intregistrare are un camp numit value. Eu trebuia sa fac un query care sa sumeze valorile respective pentru tranzactiile in care apare un anumit cont ca destinatie. Toate in toate¬† tranzactiile sumate nu sunt implicate conturi care au “parinti” intr-o anumita lista. Tranzactiile sunt si ele grupate in documente si se vor lua in considerar numai cele care fac parte din documente care au fost introduse intre datele specificate de utilizator.

Cum ar arata query-ul… asa intuitiv:

select sum(a.value) from Entry a where a.account.id=:id_param and a.sourcedestinationFlag=’destination’
and a.transaction in (select tr from Entry e inner join e.transaction tr where e.account.parentAccount in (:list))
and a.transaction.document.date <![CDATA[>=]]>:start_date
and a.transaction.document.date <![CDATA[<=]]>:end_date;

Simplu nu? Ei bine nu merge, hibernate arunca o exceptie de tipul NullPointerException. Ca respectivul query sa mearga trebuie sa arate de fapt asa:

select sum(a.value) from Entry a where a.account.id=:id_param and a.sourcedestinationFlag=’destination’
and a.transaction in
(select t from transaction t where t in
(select p from transaction p where p not in
(select tr from Entry e inner join e.transaction tr where e.account.parentAccount in (:list)) )
and t.document.date <![CDATA[>=]]>:start_date
and t.document.date <![CDATA[<=]]>:end_date
and t.deleted=:not_deleted_filter_param )

Al doilea select (ala cu p) e necesar tot pentru a preveni NullPointerException. Cea mai faina faza este ca nu iti spune ca este de la query-ul respectiv problema. Spune doar:

Exception in thread “main” java.lang.NullPointerException
at org.hibernate.hql.ast.tree.FromClause.findIntendedAliasedFromElementBasedOnCrazyJPARequirements(FromClause.java:120)
at org.hibernate.hql.ast.tree.FromClause.getFromElement(FromClause.java:107)
at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:81)

(… bla bla bla)

Cool ha?


Aug 09 2008

Cu ce m-am jucat azi :)

Category: TechnicalIuliana @ 18:33

In sfarsit mi-am gasit timp sau mai bine zis chef, sa mai programez si acasa. De ceva vreme mi se ca diminuase cheful de programat in scopuri proprii, altele decat serviciul, din variate motive pe care nu le voi mentiona aici. Acum o saptamana profitand si de timpul liber datorat lipsei prietenului m-am apucat incet incet de programat. Am inceput cu implementarea unei metode de gasire a ciclurilor intr-un graph, chestie care mi-a fost ulterior utila si la servici. Aseara m-am certat iar cu eclipse-ul meu pentru ca nu imi mergea pluginul de derby :) si normal ca s-a lasat cu reinstalarea lui si instalarea pluginului la mana. Am renuntat la JbossTools pentru ca editorul de jsf-uri nu mergea si pentru ca imi modifica setarile pentru proiectele de tip EJB(el voia neaparat sa aiba o structura super-complicata si fixa) chestie care pe mine m-a scos din minti.

Astazi de dimineata m-am apucat de primul proiect JPA. Folosesc Derby pe care l-am instalat in /usr/derby. In wrokspace-ul folosit am creat un director in care se vor stoca toate bazele de date cu care voi lucra. Pornirea derby in directorul respectiv se face ruland la locatia respectiva un script facut de mine stocat intr-un fisier executabil care se numeste startdb si care contine comanda de pornire a serverului :

java -jar $DERBY_HOME/lib/derbyrun.jar server start & DERBY_HOME reprezentand variabila de mediu in care am stocat calea catre directorul de instalare al Derby.

Avand in vedere ca sunt inca la partea de testare, trebuie sa refac bazele de date de mai multe ori si normal ca asta nu se poate face decat prin stergerea lor si restartarea serverului. Deoarece ma saturasem sa tot killaresc serverul pe care scriptul meu il pornea in background ca sa nu imi tina consola ocupata, astazi m-am apucat sa fac un script de restartarea lui. Totul ar fi trebuit sa mearga usor, trebuia numai sa obtin pidul(process id -ul) serverului, sa-i dau kill si apoi sa execut scriptul de pornire. Si eventual sa primeasca numele bazei de date ca parametru pentru a o sterge. Avand in vedere ca tutorialele de pe net sunt destul de explicite totul ar fi trebuit sa mearga uns, dar avand in vedere ca mie nu imi iese nimic usor, a durat mai mult timp decat prevazut. Mai exact m-am blocat timp de vreo 30 de minute la o instructiune if pentru ca nu mi-am dat seama ca spatiile au importanta. Mai exact in bash, intre conditie si parantezele patrate care o contin trebuie sa existe spatii, altfel scriptul crapa. Intr-un final m-am prins si uite rezultatul:

#!/bin/bash
args=($@)
#in variabila asta stochez parametrul primit dn linia de comanda
echo “Database to be deleted = ${args[0]}”;
declare -a MYVAR
MYVAR=(`ps aux | grep -i derby |¬† tr ” ‘ ‘`)
#iterate over the array
pid=0
for i in ${!MYVAR[*]}
do
if [ ${MYVAR[$i]} = “jj” ];
then
let pid=${MYVAR[$i+1]}
echo “Pid to kill = $pid”
kill -9 $pid
fi
done
rm -R $DB_HOME/${args[0]}
cd $DB_HOME
startdb

Bineinteles ca erau si comenzi linux mai simple pentru incheierea executiei unui proces atunci cand se cunoaste doar numele lui, dar m-am folosit de ocazia asta pentru a invata inca putin bash scripting.(Acum astept sa intre prietenul pe blog sa-l impresionez :D)


Jul 19 2008

Changes

Category: TechnicalIuliana @ 8:15

Vineri seara, chinuindu-ma sa rezolv un ultim bug mi-am dat seama ca in cursul acelei zile am reusit sa imi stric pluginul eclipse pentru Drools. Am incercat cateva dezinstalari ale pluginului care il suprascrisese si apoi am renuntat si m-am decis sa intru pe http://www.eclipse.org. Pe site la ei ma astepta o surpriza de proportii. Bunul meu prieten Ganymede, care imi scosese peri albi la firma cealalta cu numarul de crash-uri pe zi a devenit stabil si mai mult a devenit varianta oficiala de eclipse. Si au definitivat varianta pentru J2EE, desi de la inceput Ganymede(ultima varianta de WebTools) fusese facut pentru dezvoltare web. L-am dat repede jos numarand secundele si l-am instalat. Timp de 5 minute de la calculatorul meu se auzea numai: “Wow” si “Cool”. A inceput prin pornirea rapida, prin numarul de puginuri inglobate si imbunatatite(si totusi acestea nu ii incetineau pornirea) apoi am observat sistemul de updateuri, care acum rezolva dependentele si apoi mi-a sarit in ochi si code assistance-ul si documentatia inculusa pentru AJAX. Eram in extraz, dar ma mai asteptau doua surprize. JBossIDE versiunea 2 devenise stabila intre timp si se integra perfect in noul Eclipse, putand fi instalat direct prin mecanismul de update al Eclipse de pe site-ul remote http://download.jboss.org/jbosstools/updates/stable.( Include code assitance pentru RichFaces – da stiu ca e impropriu spus “code assistance” :D)

Si bineinteles ca la final am instalat pluginul pentru Drools, de la care a pornit de fapt totul (http://downloads.jboss.com/drools/updatesite3.3/) care are acum si code assistance.

Raman la parerea ca Eclipse ramane cel mai puternic instrument de dezvoltare Java. Iar faptul ca e free este cel mai bun lucru care ni s-a intamplat noua dezvoltatorilor de aplicatii in java. Ma gandesc serios sa fac o cotizatie lunara baietilor de la Eclipse, pentru ca au facut o treaba buna tare.


Jul 09 2008

Going down

Category: TechnicalRpx @ 23:20

Din anumite motive de securitate, va trebui sa fac upgrade la sistemul de operare.

Acest upgrade va incepe undeva pe joi seara si va dura probabil toata noaptea. Din acest motiv, blogul va fi indisponibil in aceasta perioada de timp.

Oricum, clar e ca el se va intoarce. Wish me luck!

Edit: Pana acum a mers brici partea de server. Urmeaza partea de desktop, asa ca e posibil sa mai cada cateva minute din cand in cand.