Jun 19 2012

when you have an itch…

Category: English posts,TechnicalIuliana @ 10:34

… you gotta scratch it. And I had a serious itch cause by my Windows. Even if Windows has evolved so much, even if Windows 7 is the peak of greatness among all the Windowses before it, it still does not know how to manage 4 core processors. So I was seriously pissed about the fact that Windows 7 froze from time to time, making my super-laptop look like my first computer, an AMD K6, 500 MHz and 256 MB SRAM. Which was definitely not cool, considering the fact that my laptop’s configuration looks like this: Intel Quad Core i5-450M and 6 GB DDR3. The only reason I kept windows so far on my laptop was that my processor has a capability known as turbo boost, meaning that can over-clock itself when needed. But this won’t be needed that much if the tasks were efficiently distributed between the 4 cores, which were not.

So two days ago, I just snapped, decided to give up the possibility of playing games for a while and went on a search for the perfect Linux for my laptop. I am fond of Gentoo as you know, but compiling a full OS was not an option because it is a time-consuming operation and also because all that compiling would set my laptop on fire and it’s already hot in Romania right now (32 Celsius degrees). So I was left to choose between Archlinux and Mint. I did not even consider Ubuntu, it’s a Linux that looks and acts like Windows, the thing I was trying to get rid of. I had Archlinux before and I know in order to get the final result some time must be wasted on its configuration, so I went for Mint.

In less than 30 minutes I had a fully functional and compact Linux, oh well … fully for a normal user, not for me, a curios developer. So after this I went on and started installing the development software. The first one I wanted to install was the jdk. Mint uses open-jdk which Idea and STS refuse to go along with, so I went on a quest for installing the Oracle version. If on other Linux systems this was a piece of cake on Mint, it was not so, because Mint has all these symlinks pointing to open-jdk binaries, and even if you do everything right, set the JAVA_Home variable and add it to the path, when you will execute “java -version” in the console, the binary that will be executed will still be the one of the in the open-jdk. The only way to change this is to go to /usr/bin, see where the specific symlinks point to and change that. After that I installed Idea and STS and everything was flawless.

Then I wanted to add a second monitor and this is where all blew up in my face. But not because there was something wrong with Mint, but because one of the cables was not plugged in correctly in my monitor and the system did not see it. I did not even consider that the problem might come from a cable and went on and tried to install nVidia drivers in order to convince the system to see my external monitor. After the first restart I was left without an interface, because the nVidia drivers were not stable, ofcourse. So I went old-school and installed lynx, a text based browser, and searched for a solution for my problem. I did so and tried different options for an hour, when finally it worked and I had my graphic interface back, but the external monitor still was invisible to Mint, so I considered the possibility of the monitor not actually being plugged in the laptop. I check the cables and … surprise. It detected it right away.

Conclusion: if you want to install a Linux on your laptop, I truly recommend Mint, it is small, smart, fast and it knows how to work the special buttons on your laptop, without any additional settings. And is also easy to install, if you are not an old-school developer who considers problems being caused by the software first :D , that is. :)

Tags: , , , ,


May 06 2012

[Updated]Swapping values

Category: English posts,TechnicalIuliana @ 13:29

While in high school and college when I was starting to learn what programming meant the fist example that my teacher gave was the swapping of two values. The typical solution was:

int swp = a;
a = b;
b = swp;

None of those teachers asked as if there is another solution to do this. We were just supposed to take the above solution as granted. But in some cases there is another one, which is also slightly more efficient as it does not use a temporary variable:

b += a;
a = b – a;
b = b – a;
// string version when a does not contain b and b does not contatin a
b += a;
a = b.replace(a,””);
b = b.replace(a,””);
// string version when a might contain b and b might not contain a and neither of them contains special regex characters
b = a+ b ;
a = b.replaceFirst(a,””);
b = b.replaceFirst(a,””);
// universal solution offered by bm
b = (a + b).substring(0, (a + b).length() – (a = (a + b).substring(a.length())).length());

I know this might seem totally useless to a lot of you, but this post is supposed to promote thinking out of the box, and never taking anything for granted. Use your own mind, find your own solutions, this is what actually helps you improve and keeps your brain alive. And also, when going to an interview as a developer for the first time, this problem has a big chance of being among the one presented to you. :)

Tags:


May 05 2012

What does a passionate developer do…

Category: English posts,TechnicalIuliana @ 22:35

… when is stuck in a hotel room because of the rain, bored out of his mind and with no mood to work? Well when that happens to me I start to reed my java feed reader and depending on what I find there I might write my own articles. So… yes, this article is today’s consequence of boredom.

1. What is the flaw with the Stack class?
Actually, there are two of them all being caused by the fact that java.util.Stack extends java.util.Vector:
I. Extending Vector methods insertElementAt and removeElementAt can be called and they actually work, so the stack definition is not respected (that part with only the last inserted element being accessible, the LIFO principle)
II. Extending Vector, Stack is also synchronized which makes it slow and when synchronization is not necessary this  is quite inefficient. This is not exactly a flaw, it’s more of a personal observation observation.

Then again in the api it is written that “It extends class Vector with five operations that allow a vector to be treated as a stack “, so I guess these are not flaws, the Stack class just works as intended. (Recommendation: use ArrayDeque)

2. Can an interface extend multiple interfaces?
There is no right answer to this question, because it depends of the point of view of the interviewer.
I. Yes, because you can define an interface like this:
public interface MultipleIntf extends List, Serializable {
}
II. No, extending means actually inheriting all functionality of the super-entity and  perhaps adding new functionality, in the case of interfaces there is nothing to inherit and no functionality to add. Except for the obligation to implement all abstract methods that will be enforced on the implementing class.

3. What is lazy loading?
Lazy loading is a name to describe the process of not loading something (object/class) until needing it. This question will surely take you to a ClassLoader discussion, so it is better to know and understand the Java Class Loading mechanism.
So:
– the java source files are compiled into executable code for the JVM, called bytecode, stored into *.class files.
– at start-up JVM has no loaded classes. When the first class is loaded, the classes on which its execution depends are searched and loaded too. So if I have a class which has imports statement for ArrayList and Serializable, the JVM will load my class, then it will search and load ArrayList.class and Serializable.class. Let’s imagine we have a big application with a lot of class files and one of them is missing. The application will run just fine, until we try to access a functionality implemented by that class, when the JVM will let us know that the class was not found by throwing a java.lang.ClassNotFoundException.
And this my darlings is lazy loading. A class is not loaded until used and there would be no point in doing that for efficiency reasons. Right? Anyway, if you want to have a deep understanding of the Java Class Loader, I recommend this article.

Tags: , , ,


Mar 19 2012

Incapacitatea de a accepta critica

Category: TechnicalIuliana @ 10:09

Românii suferă patologic de înfumurare – ei sunt cei mai buni, cei mai tari, dușmanii mor că nu’s ca ei, suntem cei mai deștepți, femeile noastre sunt cele mai frumoase și tot așa. Cred că știți placa.

Lucrând în IT, clar ca și în IT suntem cei mai buni. Nu zic nu, dar n-ar strica să muncim mai mult și apoi să le lăudăm cu asta, nu de alta dar observ o tendință de delăsare în domeniul ăsta. Faptul că ai terminat o facultate de IT și că ai reușit să te angajezi nu înseamnă că ai un talent nativ pentru asta. Faptul că la firma la care te-ai angajat lucrezi cu oameni cunoscuți a fi guru în domeniu nu înseamnă că meriți să lucrezi alături de ei și că te apropii de nivelul lor înseamnă doar că firmele nu mai au de unde alege. Așa că dacă vrei să crești, vrei să fii apreciat trebuie să fii ca un burete să absorbi orice ți se dă să înveți și să muncești și de unul singur pentru a ajunge acolo unde vrei. Când lucrezi în IT la o firmă privată, nu vei prinde niciodată măriri date la grămadă că așa trebuie (numai bugetarii primesc așa ceva) măririle se dau pe măsură în funcție de evoluția ta și dedicarea de care dai dovadă.

Nu toți au capacitatea sau motivația de a învăța singuri, în afara serviciului pentru a crește în domeniul. Mulți, se dovedesc în timp a nu fi capabili să facă asta. Nu este nici o rușine să accepți faptul că te-ai înșelat și să ai curajul să găsești ce îți place cu adevărat să faci.

Din păcate la noi atitudinea asta o întâlnești foarte rar. Mulți dacă au diplomă de ingineri vor să fie ingineri (dau exemplu titlul ăsta pentru că e mai aproape de mine), mulți vor neapărat să lucreze în IT, pentru că au terminat o facultate în domeniu. Mulți fug după gradele de developer, deși nu au chemare pentru asta. Da știu se câștigă bine în IT și e o mândrie imensă să te prezinți ca senior developer, dar dacă titlul ăla este la fel de sec ca și diploma de la facultate și ți-a fost dat doar pe vechime nu înseamnă nimic.

Firmele serioase au evaluări periodice, la aceste evaluări ți se spune ce-i de capul tău, ce progrese ai făcut, dacă ai făcut. Ești sfătuit ce să mai studiezi și cât, dacă ai dovedit aptitudini pentru altceva ești sfătuit să încerci să dezvolți talentul acela, pentru că un angajat care face ceva la care este foarte bun este mult mai valoros și este remunerat pe măsură decât unul care face ceva la nivel mediocru. Mulți nu fac fața primei evaluări negative, da sunt și dintr-astea, pentru că suferă de boala patologică menționată la început. Pe mulți evaluările negative îi revoltă, pleacă din firmă sau își manifestă frustrările trăgând mâța de coadă la serviciu, după. Foarte puțini analizează ce li s-a spus și se mobilizează în direcția dorită sau recomandată. Mulți nu realizează cât ar avea de câștigat dacă ar face-o și pentru asta educația primită de la părinți ce au lucrat în sistemul comunist este de vină. E așa de greu de priceput că o firmă vrea să te poată vinde la adevărata ta valoare și că și tu ai avea de câștigat din asta?

Eu am o prietenă care a terminat AC-ul. La AC nu este nici o materie care să te pregătească să devii tester. De asta toți ce termină se așteaptă să devină developeri. Ea și-a dat seama că nu are talent de developer și s-a băgat pe testare, și-a dat certificări și câștigă foarte bine făcând ceva ce îi place și ce înțelege și este foarte apreciată pentru asta. Nu a bocit ore întregi că vrea să fie developer, nu s-a îndopat cu lecitină și și-a pierdut nopțile ca să ajungă un developer mediocru. S-a reorientat și a devenit un tester foarte capabil.

Dacă mie mâine mi s-ar spune că sunt mai bună pe asta, mi-aș da măcar o șansă, aș încerca să văd dacă e adevărat. Pentru că bani/carieră faci atunci când excelezi într-un domeniu, nu ești mediocru în el.

Iar critica negativă, când vine de la cineva capabil și a cărui intenție nu este să te jignească, ci să te ajute trebuie luată în considerare și învățat din ea. Da este greu, știu, dar trebuie să ne schimbăm mentalitatea astfel nu vom evolua niciodată. Și nu mă refer numai la IT, am dat exemple din IT pentru că ăsta este domeniul meu, mă refer la orice domeniu.

Mi-am adus aminte să scriu articolul ăsta după ce am citit la Arhi despre proasta de la Antene, care este directoare de marketing (deci o poziție de conducere în care a ajuns numai ea știe cum, că dacă se făceau evaluări serioase nu ajunge acolo) care mănâncă în continuare căcat pe facebook și pe unde apucă, după ce un reportaj apărut la tv a fost aspru criticat, deoarece era un fake în care intervievata trebuia să fie o bugetară amărâtă care nu își permitea decât două roșii, iar aceasta câteva de secunde mai târziu se transforma în vânzătoare de roșii. Dacă vreți să vedeți toată tărășenia, aruncați un ochi aici. Doamna directoare de atunci tot aruncă cu injurii și citate ce conțin cuvinte învățate la facultatea de jurnalistică încercând să… nu prea pricep eu ce… pentru că gafa e atât de evidentă încât ce dracu ai mai putea să spui???

Conducerea Antenei 1 ar fi trebuit de mult să-i dea liber madamei dacă și-ar angaja oamenii pe bază de cât îi duce capul în domeniu, din păcate Antena 1 probabil e un fel de instituție comunistă care funcționează ca un sistem bugetar în care nimeni nu este concediat, nimeni nu este penalizat, doar ascundem gunoiul sub preș și mergem înainte. Mergeți voi înainte acum când există internetul și toată lumea poate afla ușor ce incapabili angajați voi acolo!

Poate unii oameni încă nu realizează cât de puternic este internetul… este foarte puternic, este Big-Brother, este ca un ziar mare în care se scrie despre oricine și despre orice, orice om este vedetă, orice întâmplare este eveniment. De ce credeți că se dau vedetele peste cap să fie aprobate SOPA, ACTA și alte nebunii asemenea? Fix pentru că celebritatea nu mai e ce era odată, nu mai este ceva al lor. Dar despre asta altă dată…

Tags: , , ,


Mar 18 2012

Așa mă trec și eu…

Category: Miscellaneous,TechnicalIuliana @ 23:06

   Când eram la începutul carierei mele de developer, mai exact când terminasem facultatea tot ce îmi doream era să găsesc o firmă care să mă angajeze și să mă muncească ca pe un sclav, forțându-mă să îmi folosesc creierul la maxim pentru a acumula informație și a învăța cum să o folosesc astfel încât să cresc în domeniu. Îmi doream să scriu mult cod, să scriu atât de mult cod încât să și visez cod. Nu știu dacă am găsit exact ce căutam, am avut colegi care au evoluat profesional mai repede decât mine, deci ori creierul meu nu duce, ori firma ce m-a găsit, nu m-a muncit destul. Oricare ar fi motivele, acum când mă apropii de șase ani de experiență în development, deși îmi place la nebunie să scriu cod, asta nu mai este așa de important.

Mi se par mult mai interesanți pașii de dezvoltare ai unui proiect, alcătuirea unei echipe, estimări, arhitectură și alte nebunii care la început mi se păreau a fi pierdere de timp. Poate îmbătrânesc, poate experiența își spune cuvântul, chiar nu știu care este motivul pentru care mi-am schimbat punctul de vedere. Nu mă înțelegeți greșit, încă îmi face plăcere să scriu cod, doar că acum codul scris de mine știu ce rol joacă în proiect și știu cum să îl dezvolt ținând cont de imaginea de ansamblu a proiectului.

Și na, acum că văd lucrurile altfel în proiectele IT mă amuză oarecum obsesia unor juniori de a scrie cod, dar adevărul este că până nu ajungi la un anumit nivel tehnic nu poți înțelege imaginea de ansamblu a unui proiect. Și cât de mult lucrezi la prima firmă unde te angajezi contează cel mai mult. De exemplu, guru-ul pe java la compania la care lucrez acum a lucrat încă din al doilea an de facultate la o firma unde programul era de 8-14 ore pe zi, șase zile pe săptămână. Da, am scris bine, 6 zile pe săptămână. E adevărat că n-a mai terminat facultatea, dar între noi fie vorba, la ce i-ar fi folosit? La ce mi-au folosit mie 5 ani de facultate + 1 an de master? Acum îi sunt  un fel de subalternă (este posibil să scriu prostii – nu știu dacă ierarhia e chiar așa) și asta pentru pentru că în loc să învăț să folosesc tehnologii care chiar se cer pe piață, în loc să rezolv probleme reale  eu am ales să învăț să implementez soluții vechi pentru probleme și mai vechi și în loc să muncesc pentru un salariu am învățat pentru o medie și o amărâtă de bursă.

Dacă ar fi să mă pot întoarce în timp aș spune părinților mei să nu mă mai bată la cap să fac o facultate doar pentru a le îndeplini lor un vis pe care nu l-au putut îndeplini pentru ei înșiși. Le-aș spune să îmi spună că pot să îmi fac un rost în viață fără facultate, dacă asta vreau cu adevărat. E bine să îți îndemni copilul să învețe, dar într-un sistem de învățământ putred și depășit, mai bine îi dai voie să facă ce-i place, îl  îndemni și îl susții să facă din asta o obsesie, are mai multe șanse așa.

Tags:


Jan 29 2012

Javascript… you so funny :)

Category: English posts,TechnicalIuliana @ 11:34

Via GlobalNerdy I have found this video that I wanted to share. So just click here and watch it. You will not be sorry. I laughed at first too, but then I realized that the weird behavior must have a logical explanation that I don’t know, mostly because I don’t program in Javascript unless I am forced to. The explanation can be found here.
Enjoy!

Tags:


Jan 26 2012

Java stuff that you should know:What are the differences between C++ and Java?

Category: English posts,Miscellaneous,TechnicalIuliana @ 16:48

Java vs. C++ Because somebody brought up this subject here I decided that this is the question I should answer next. I am a developer from the old generation,at least this is how we call it here in Romania. Turbo Pascal was my first, (red cheeks :D) then I learned C, C++, Php, Java and .Net. With Java and C++ I have had the longest and most stable relationships. So I think I am able to answer this one, though I have to mention that nowadays you could be asked to compare Java to other languages too.

Again this can considered to be a difficult question mostly because there are a lot of differences between these two languages. That’s why you want to start your answer with the differences that remove any doubt that you know both languages pretty well, and usually this means getting technical. This is the how I would answer this question:

  • Java is multi-threaded, C++ is not
  • In Java primitive and reference data types are always passed by value, C++ uses also references and pointers.
  • Java has no pointers, C++ does
  • Java has implicit memory management through garbage collector, in C++ memory management is explicit
  • Java does not allow operator overloading,  C++ does
  • Java does not need destructors, C++ does
  • Java does not have type struct and union, C++ does
  • In Java, types cannot be overridden, in C++ we can do that.
  • Java does not provide multiple inheritance using classes (or virtual inheritance), C++ does
  • In Java, arrays have fixed sizes and attempt to read from an index bigger that size -1, will cause an exception. In C++ attempt to read from an index bigger that size-1 might even succeed and the value returned is the current value stored int that memory block.
  • Java programming model is totally compatible with OOP programming. C++ also supports functional programming, procedural and template programming.
  • Java is a WORA/WORE – write once run anywhere/everywhere (any compatible JRE ) , C++ is a WOCA – write once compile anywhere
  • Java has built-in support for comment documentation
  • Java has no native support for unsigned arithmetic, C++ does. (Has anybody used that in C++, ever?)
  • In Java there is no need for scope resolution operator (::)

Of course there’s more, but this should be enough at an interview. Fell free to add anything you might consider important. As always I am eager to learn new stuff.

Tags: ,