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: ,

Jan 19 2012

knowledgeblackbelt.com sau cum să îți dezamăgești comunitatea

Category: Miscellaneous,TechnicalIuliana @ 18:07

Acum ceva vreme, când eram “pe bench” cum se spune aici, pentru a nu mi se rugini și atrofia cunoștințele pe java petreceam ore întregi pe knowledgeblackbelt.com. Ce făceam? Analizam întrebări beta, comentam și la un moment dat după ce am trecut toate examenele care nu necesitau contribution points m-am apucat de adăugat întrebări pentru a primi contribution points pentru că fără ele nu poți da examene, deci nu poți obtine acele centurici virtuale care  spun cât ești de bazat.
Boon, a trecut vremea, m-au pus ăștia la munca, în timpul liber aveam altele de făcut și nu am mai intrat pe site ceva vreme. Până acum câteva zile, când am intrat și am avut un șoc. L-au transformat de mă rătăcesc în el. Și asta n-ar fi o problemă. Problema majoră e că se mișca al naibilor de greu, unele dintre linkuri sau butoane nu merg și multe alte asemenea. Am încercat să mă conving că pot trece peste asta de dragul conținutului, dar când mi s-a spus că nu pot adăuga întrebări pentru ca nu am levelul necesar și mi s-a cerut să dau un click într-un modal afișat incomplet ca să mă ducă pe o pagină unde să mi se spună ce level am și să mi se explice cum să îl cresc, iar linkul ducea la profilul meu, unde nU ERA SCRIS LEVELUL MEU … am clacat. Și mi-am băgat picoarele.

Rest in peace blackbeltfactory(da l-au și redenumit), I will not be visiting anymore! Ever! (Și am o bănuială că nu sunt singura)

Tags: ,

Jan 19 2012

Java stuff that you should know: difference between abstract classes and interfaces

Category: English posts,Miscellaneous,TechnicalIuliana @ 17:14

Many times after a Java Interview I have asked myself if my answers were correct, if the person interviewing me realized that I understand a certain concept and if I was able to express my knowledge in order to achieve that. So I will start writing on my blog how I would answer some common Java Interview questions.

So, in Java what are the differences between an abstract class and an interface?
This is a question with one big answer, not only because there are that many differences between abstract classes and interfaces, but because there are so many ways to say it. So, here is what I would say about interfaces:

  1. Interfaces are equivalent to protocols. They basically represent an agreed-upon behavior (a contract) to facilitate interaction between unrelated objects.
  2. Interfaces are a capsule for a group of methods with empty bodies or prototypes (abstract methods ) and implicitly final static members (constants).
  3. Interfaces have all members public impilicitly.
  4. Interfaces are declared like this:
    public interface TestIntf {}
  5. Interfaces can only extend other interfaces and keyword implements does not apply to them.
  6. Interfaces can extend more interfaces.
  7. If an interface has no direct superinterfaces, then the interface implicitly declares a public abstract member method m with signature s, return type r, and throws clause t corresponding to each public instance method m with signature s, return type r, and throws clause t declared in Object, unless a method with the same signature, same return type, and a compatible throws clause is explicitly declared by the interface.
  8. Interfaces are considered to be slower because they require extra indirection to find the corresponding method in the class implementing them.
  9. Interfaces support only public and default access modifiers.
  10. Interfaces can be declared abstract, so the Java compiler would not complain if your declaration would look like below, but the abstract modifier is redundant as interfaces are implicitly abstract.
    public abstract interface TestIntf {}

Here is what I would say about abstract classes:

  1. Abstract Classes are the middle ground between interfaces and classes. They can have both abstract and non-abstract methods and constant and non-constant fields.
  2. Abstract Classes can have constructor, but it can never be called directly. It can only be called using super in the extending class or is automatically called by the jvm.
  3. Abstract Classes support all access modifiers.
  4. Abstract classes can be declared like this:
    [access_modifier] abstract class TestAC {  [ implementation]    }
  5. Abstract Classes can implement any number of interfaces, can extend only one class (which can be abstract or not – the condition is not to be final) and implicitly extend class Object.
  6. Abstract Classes can have only non-abstract methods (but what would be the point?). Abstract Classes which have only abstract methods and constant fields are called fully abstract.

And what would I say about both of them:

  1. Java supports multiple inheritance only through interfaces.(Some say it is limited. I say it is practical.) Why? Because extending multiple classes may lead to problems when they have methods with identical signatures. (Remember C?)
  2. The use of interfaces or abstract classes is determined by the project requirements and design.
  3. Using abstract classes affects the flexibility of your code, because class extension rips away class individuality.

If you have anything else to add, or something here needs correction, your effort will be kindly appreciated.

Tags: , ,

Jan 16 2012

VirtualBox with Gentoo(4)

Category: English posts,Miscellaneous,TechnicalIuliana @ 13:58

This post is the not about the virtual machine or Gentoo, is more about setting up the tools that you will use to develop your applications and other good practices.

First, let’s talk more about environment variables. I mentioned in my previous post the JAVA_HOME variable. Most development tools need their environment variables too and they are not set up by Gentoo, so we will have to do this the way I like it, by hand. Every user has in it’s home directory – in /home/[username] (on my machine /home/jules) a file named .bashrc.The good practice is to edit this file by adding the necessary environment variables required by the tool that user will use.

1. Apache Ant

Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files as targets and extension points dependent upon each other. The main known usage of Ant is the build of Java applications. Ant supplies a number of built-in tasks allowing to compile, assemble, test and run Java applications.

It is easy to use, quite practical and I recommend it for small scale applications. The installation of Ant consists in unpacking the a

rchive, setting the ANT_HOME and adding the bin directory to the environment PATH variable of Gentoo. Also, the bin directory for Java should be added too, we’ll do that too.

To download ant, go to http://ant.apache.org and under Download menu item, there is a Binary Distributions link, click on that. On the frame on the right you will have a set of links which point to current versions of Ant. Download the tar.bz2 archive, you can use Firefox to do that or you can use wget:

# wget http://mirrors.hostingromania.ro/apache.org/ant/binaries/apache-ant-1.8.2-bin.tar.bz2

Then you have to unpack it:

# tar xpf apache-ant-1.8.2-bin.tar.bz2

After unpacking you will have a directory named apache-ant-1.8.2, usually I rename it to ant, because the version is not that important when the update is made by copying the new version content over the old one. You can copy it where you want, I usually leave it in the home directory for the current user. Then we have to set the ANT_HOME environment variable.

# cd ~ (gets you in /home/[username])
# nano -w .bashrc

Add the following lines:

# export ANT_HOME=/home/[username]/ant
# export PATH=${PATH}:${JAVA_HOME}/bin:${ANT_HOME}/bin

Save. (Ctrl+X,Y) Test the new environment variables:

# echo $ANT_HOME
# echo $PATH

Continue reading “VirtualBox with Gentoo(4)”

Tags: , ,

Jan 09 2012

Munca de mântuială produce totuși

Category: Miscellaneous,TechnicalIuliana @ 13:02

Citind la VisUrât despre ce e ala “ciuf” m-am hotărât să abordez o temă pe care am evitat-o multă vreme.

Graba strică treaba și în IT, e un domeniu ca oricare altul, deci nu scapă de asta, dacă până acum cât de mult se strica treaba nu era așa evident, de când internetul a devenit cel mai puternic mediu de comunicare, iar aplicațiile web au devenit ceva banal acest lucru devine din ce în ce mai vizibil și deranjant.

La începuturile internetului țin mine că singurele aplicații care crăpau vizibil erau cele open-source și asta era scuza lor – că sunt open source. Acum, orice aplicație crapă și uneori cu erori din alea urâte de programator neatent și tester dezinteresat. Știu că nu e frumos să vorbesc de rău despre client așa că n-am s-o fac, doar am să pun niște întrebări retorice.

De la ce m-am luat? Ei bine, de ceva vreme sunt subcontractată la o firmă ce oferă anumite produse IT. Nu am să dau detalii exacte că n-am voie, de asta am să mențin postarea cât de generică se poate. Eu am rolul de “product consultant”, iar asta înseamnă să rezolv cam orice problemă legată de produsul în cauză, acesta fiind o măgăoaie de aplicație ce ar trebui să poată fi ușor configurată pentru nevoile fiecărui client. Și trebuie fie să rezolv problemele din configurările aplicației, fie să dau sfaturi developerilor cum să identifice sursa problemei și cum să o rezolve, pentru că nu am acces la cod, că na sunt “resursă externă”, fie să testez. Ei bine măgăoaia asta de aplicație, are de-a buguri cu nemiluita și la fiecare update, dacă s-au reparat unele dintre ele apar altele. Asta ca să nu le menționez pe cele mai “transparente” care migrează liniștite de la o versiune la alta și până nu le menționează clientul sunt trecute cu vederea. Majoritatea bugurilor sunt cauzate de chichițe minuscule (de exemplu formatul în care trebuie afișată data calendaristică), iar buguri de genul pentru mine sunt de neconceput. Cum este posibil să faci modificarea în cauză și să nu o testezi tu ca developer înainte? Cum te lasă conștiința și cum poți avea atâta încredere în tine încât să nu testezi și tu ce ai făcut? Dacă compilează nu înseamnă că merge!!! (Scuzați cacofonia inevitabilă!) Nu de alta, dar nu e așa comod să vină să îți spună un tester “Bugul ala încă nu e rezolvat” sau “Ce i-ai făcut, că acum crapă cu altă eroare!?”

Când am fost în Irlanda am interacționat cât de cât cu developerii lor și nu numai și mi-am dat seama că întreaga lor organizare este de vină. Ei nu au o echipă de testeri care chiar să fie pregătiți pentru activitatea de testare, au un grup de oameni care ocupă alte posturi, care au devenit indisponibile din cauza terminării unor proiecte și pentru că opțiunea de a-i da afară nu există, pentru că este posibil să aparăsc proiecte care să necesite abilitățile lor, cât timp sunt “pe bench” îi pun la testat. Asta ar fi un motiv. Apoi developerii, în afară de un singur om cu care am interacționat eu mai des, restul par foarte dezinteresați.

Chestia pe care nu o pricep eu este: cum naiba aplicația asta a produs anul trecut un profit de ceva zeci de milioane de euro? Cum???

Și nu este singura aplicație cu probleme, spre exemplu acum ceva vreme am avut probleme cu aplicația de internet banking, care permitea unei persoane să se logheze pe sesiunea mea pe același calculator,deși eu părăsisem aplicația folosind butonul de logout. Bine, sistemul cu digi-pass previne orice fel de tranzacții nedorite, dar datele mele personale ca adresa, numărul de telefon sunt la îndemâna oricârui om care se loghează după mine pe același calculator. Eu lucrând în domeniu nu prea împart calculatoarele cu care lucrez decât cu persoane de încredere, adică una singură și asta rareori fără să fiu și eu de față, dar cei care nu sunt așa familiari cu lumea web 2.0 sunt victime sigure ale furtului de informație.

Care este concluzia acestei postări: suntem oameni și greșim, cu presiune sau fără și totuși până acum a mers așa, am evoluat până acum așa. Să vrem mai mult înseamnă să schimbăm modul de gândire al clienților, să îi convingem să plătească mai mult și să aștepte mai mult timp pentru un produs de calitate. Iar asta nu se va întâmpla într-o lume bazată pe consumerism. Pentru că orice client are la rândul lui clienți care vor mult, bun, ieftin și repede.

Pe de altă parte mai era o vorbă populară “prost nu e ăla care dă, prost e ăla care plătește”. Cât timp oamenii plătesc pentru ceva slab calitativ, sub așteptările lor, fiind nevoiți să meargă pe principiul, mai bine așa decât deloc, vor exista mereu și oameni care fac lucruri de mântuială. Și e păcat, dar “soc avem, soc ardem” sau “ăștia suntem, ăștia defilăm”.


Tags: , , ,

Dec 19 2011

Depre femeie – IT version

Category: Funny,Miscellaneous,TechnicalIuliana @ 16:58

Femeia e ca un patch cumulativ: care vine la cârmă trebuie să pupe toate pulile de dinaintea lui și să suporte toate fițele învățate de la predecesori. Cu toate astea nici varianta 1.0 (virgina) nu e bună, că e plină de buguri și nu există feedback la ea.

(Via Rpx și un coleg ucrainean :D)

Nov 20 2011

Talk to people!Communicate!

Category: Miscellaneous,TechnicalIuliana @ 22:57

Nu mai ştiu la cine am auzit prima oară expresia asta spusă pe un ton jucăuş, dar serios în acelaşi timp, dar mi s-a imprimat pe creier şi de fiecare dată când am de a face cu oameni cu probleme de comunicare (sau cărora din cine ştie ce motiv :P le este teamă să încerce să îşi expună punctul de vedere în faţa mea) repet expresia asta cu aceeaşi tonalitate cu care am auzit-o prima oară în viaţa mea.

Cam acum trei ani am realizat că cele mai mari probleme pot fi cauzate de lipsa de comunicare sau existența unei comunicări defectuoase între părțile implicate. Lucram la o firmă de soft cu o echipă tare mișto, la un proiect uber-cool. (:D) Și aveam doi Team Lideri sau Project Manageri, încă nu mi-e clar ce și cum au fost. Practic aranjamentul era ca atunci când unul era indisponibil să se ocupe celălalt de noi. Ceea ce mergea cu hopuri și dâmburi pentru că oamenii ăștia nu prea comunicau între ei. Într-o vineri seara aveam de făcut ceea ce noi numeam deploy de date, care consta în inserarea unor date noi în baza de date de la client și legarea acelor informații de cele deja existente în baza de date. Chestiile astea trebuiau testate înainte, așa că vineri de dimineață se definea procedeul, se făceau ultimele verificări și procesări și se făcea local un deploy de test. Ei bine în acea vineri treaba s-a început cu unul dintre team lideri, să-l numim UNU. Acesta a plecat înainte să se termine deploy-ul de test. La scurt timp a venit cel de-al doilea team leader, să-l numim DOI. S-a terminat deploy-ul și s-a testat validitatea datelor cu DOI. Și, să vezi minune, dădea cu virgulă! Adică se făceau niște sumări și trebuiau să obținem niște rezultate, care .. numa nu erau cele dorite și pace. Am bibilit datele alea toată ziua și într-un final am decis să nu mai facem deploy-ul. DOI nu i-a comunicat decizia și motivul ei lui UNU. Ce-i drept nici nimeni nu i-a scris lui UNU un email să i se explice ce s-a făcut, ce nu s-a făcut și din ce motiv. Probabil nimeni nu s-a complicat pentru că fiind vineri nu își imagina nimeni că UNU se va întoarce la serviciu. Dar UNU a făcut-o și a avut o surpriză de proporții când a văzut ce se făcuse, adică nimic.

De atunci am rămas cu o gâză pe creier, când mi se pare că cineva nu îmi oferă toată informația de care am nevoie îi spun pe un ton autoritar: Talk to people! Communicate! Pentru că lipsa de comunicare poate avea consecințe dezastruoase. În cazul meu s-a lăsat cu demisia mea. Mie mi-a fost învățătură de minte. Acum tot ce fac raportez și trimit emailuri tuturor celor implicați.

Tags: , ,