Limbajul de programare Java

Diverse limbaje, programare, scripting, coduri, unelte specifice etc.
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Limbajul de programare Java

Mesaj de Manu »

De foarte curand am inceput sa ma uit si peste Java, vroiam de mult timp sa demarez, cel putin din curiozitate.
Pana la urma nu pare atat de complicat, nu ma refer la limbajul in sine, ci la toate angaralele care tin de scriere cod, rulare etc.

Am inceput cu algoritmul de convertire a numerelor arabe in numere romane, telul fiind sa am eu un produs final pe care daca dau enter sa ma intrebe numarul si sa imi dea rezultatul.
Am reusit in cele din urma sa export si un JAR care la mine merge. Problema e ca .jar poate fi asociat implicit cu alte programe, nu cu JRE.
La mine, daca am setat in registry sa fie ok, merge acum cum trebuie daca dau enter pe un .JAR.

Am ales ca IDE Eclipse for Java, ultima versiune care merge satisfacator, cel putin la scriere de cod.
Pentru elemente de interfata, deocamdata un input si un alert (fereastra cu buton Ok) am importat "javax.swing.*" si vad ca pe Windows 7 merge ok daca e Java Access Bridge.
Am incercat si pe XP in masina virtuala dar... nimic, e mut, aud titlul ferestrei si cam atat. Am instalat si acolo ultima versiune JRE despre care se spune ca vine cu Access Bridge inclus, dar nimic.

Daca vrea cineva sa dea test, pun mai jos JAR-ul cu algoritmul de convertire a numerelor arabe in romane, e doar un input si un alert.
convertIntoRoman.jar
are doar 4 KB, contine doar fisierul .class care contine algoritmul compilat din fisierul sursa .java.
Ca sa nu intru in detalii despre rularea fisierului .class din linie de comanda, pun si un jarfix care rezolva ca orice .jar sa se deschida implicit cu JRE, sa ruleze la enter sau dublu click cumva precum un .exe.
jarfix.exe
fisierul are doar 64 KB.

M-ar interesa Java in ideea de a face ceva pentru Android, mi-am pus si un Eclypse cu toate pluginurile aferente pentru a crea pentru Android, dar pana acolo mai am de scormonit, inca nu am idee cum am "Hello world"-ul in telefon. :)

Daca mai sunt dintre cei care au incercat, incearca sau chiar lucreaza cu Java, orice detaliu ar fi binevenit...
Acum mi-am amintit ca se lauda cei de la Oracle ori altii ii lauda, nu stiu, ca merge doar cu 44% mai incet decat C. Se pare ca au lucrat de zor. Am mai vazut ca, cel putin in Cluj, la facultatea de informatica, Java este limbajul cel mai propovaduit, iar multe firme care angajeaza, un exemplu ar fi HP care are un sediu aici, tot Java cer.
Mie cred ca nu mi-ar putea placea mai mult decat C sau C++, inca sunt invatat sa fiu lasat sa merg si pe stil procedural daca vreau.
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
IonPop
Colonel
Mesaje: 2166
Membru din: 02 Oct 2010, 17:55

Re: Limbajul de programare Java

Mesaj de IonPop »

"De foarte curand am inceput sa ma uit si peste Java, vroiam de mult timp sa demarez, cel putin din curiozitate.
Pana la urma nu pare atat de complicat, nu ma refer la limbajul in sine, ci la toate angaralele care tin de scriere cod, rulare etc."

De complicat nu este complicat, fiindca este un limbaj foarte clar si bine standardizat, insa este foarte neproductiv, fiindca trebuie sa scri o gramada de cod ca sa faci doar cateva lucruri.
Dar ma rog, daca il compari cu C, s-ar putea sa ti se para chiar mai productiv. :-)

"Am inceput cu algoritmul de convertire a numerelor arabe in numere romane, telul fiind sa am eu un produs final pe care daca dau enter sa ma intrebe numarul si sa imi dea rezultatul.
Am reusit in cele din urma sa export si un JAR care la mine merge. Problema e ca .jar poate fi asociat implicit cu alte programe, nu cu JRE.".

Banuiesc ca pe majoritatea computerelor pe care este instalat Java, .jar va fi asociat cu Java, deci nu ar trebui sa fie o problema.

"La mine, daca am setat in registry sa fie ok, merge acum cum trebuie daca dau enter pe un .JAR.".

Am testat si eu programul si functioneaza foarte bine. Felicitari pentru program!

"Pentru elemente de interfata, deocamdata un input si un alert (fereastra cu buton Ok) am importat "javax.swing.*" si vad ca pe Windows 7 merge ok daca e Java Access Bridge.".

Cand am citit prima data mesajul ma intrebam de ce nu folosesti SWT, fiindca este mai accesibil si mai responsiv decat Swing, dar apoi am vazut ca te intereseaza Java pentru a crea programe pentru Android, si probabil ca pe Android se foloseste Swing care este mai portabil si depinde doar de Java.


"Am incercat si pe XP in masina virtuala dar... nimic, e mut, aud titlul ferestrei si cam atat. Am instalat si acolo ultima versiune JRE despre care se spune ca vine cu Access Bridge inclus, dar nimic.".

Java Access Bridge este inclus in ultima versiune de JRE, insa fiindca Java Access Bridge modifica multe lucruri in modul de operare al Java, in mod implicit este dezactivat.
Ca sa il activezi, trebuie sa mergi in directorul in care este instalat Java, apoi directorul "lib", de genul C:\Program Files\Java\jre7\lib
acolo sa deschizi fisierul text accessibility.properties si sa stergi comentariul (#) inainte de linia:
assistive_technologies=com.sun.java.accessibility.AccessBridge
Apoi salvezi si gata. Poti rula programul si va fi accesibil.
Este super bine ca JAB nu mai trebuie instalat separat, insa cred ca ar fi putut oferi o modalitate mai simpla de activare a lui, cu niste shortcut-uri in Start Menu sau ceva de genul asta.
Cred ca s-ar putea sa se poata activa/dezactiva si de undeva din control panel, insa nu stiu sigur si nici nu stiu daca applet-ul Java din control panel este suficient de accesibil.

"Acum mi-am amintit ca se lauda cei de la Oracle ori altii ii lauda, nu stiu, ca merge doar cu 44% mai incet decat C.".


Bla bla, ca de obicei. Am vazut si eu benchmark-uri pentru diverse chestii facute in Perl care ruleaza chiar mai rapid decat varianta similara in C, insa asta nu este deloc relevant. Daca pentru anumite operatiuni programul intr-un anumit limbaj este optimizat, iar in C nu se fac acele optimizari, atunci limbajul C va fi dezavantajat, doar ca acele comparatii nu sunt prea relevante.
Adica ma rog, au o oarecare relevanta in idea in care daca cu un limbaj de nivel mai inalt poti crea mult mai usor si mai rapid un program care ruleaza rapid, iar daca il creezi in C trebuie sa pierzi o gramada de timp si de neuroni, atunci este de preferat limbajul de nivel mai inalt, dar nu inseamna ca C nu ramane totusi mult mai rapid decat toate limbajele derivate.
De ce nu comparau si cate resurse necesita Java in comparatie cu C. :-))

" Se pare ca au lucrat de zor. Am mai vazut ca, cel putin in Cluj, la facultatea de informatica, Java este limbajul cel mai propovaduit, iar multe firme care angajeaza, un exemplu ar fi HP care are un sediu aici, tot Java cer.".

Java este preferat fiindca este un limbaj foarte standardizat, C# fiind similar cu el, si este foarte potrivit pentru echipe mari. Nu este un limbaj bun pentru tot felul de smecherii si solutii interesante si surprinzatoare, care le-ar putea da bataie de cap celor care nu sunt experti in acest limbaj, asa ca firmele angajatoare nu depind deloc de angajatii lor daca ei programeaza in Java, fiindca pot fi oricand schimbati cu alti programatori in Java care sa le continue munca.
Si cum a fost conceput in primul rand nu ca un limbaj pentru computere, ci pentru diverse dispozitive electronice, aceasta abordare este in prezent foarte buna cand multe dispozitive includ adevarate computere in ele. Cu alte cuvinte, daca pe un dispozitiv au reusit sa instaleze Java Virtual Machine, atunci este foarte probabil ca pe el va rula programul in Java, pe cand cu alte limbaje cum este C este mai dificil, fiindca fiecare program in parte trebuie compilat special pentru respectivul dispozitiv.

"Mie cred ca nu mi-ar putea placea mai mult decat C sau C++, inca sunt invatat sa fiu lasat sa merg si pe stil procedural daca vreau.".

Depinde pentru ce ai nevoie de ele. Daca ai nevoie de viteza, C ramane cel mai bun. Daca ai nevoie de un limbaj care sa iti permita sa te angajezi la firme mari si sa lucrezi in echipe cu multi colegi, atunci Java este mai potrivit. Daca ai nevoie sa creezi programe pentru tine personal si te intereseaza in primul rand productivitatea, alte limbaje sunt mai potrivite...
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Intr-adevar, nu era activat Java Access Bridge pe XP-ul meu din masina virtuala, acum merge acel "programel" si acolo.
Stiu ca citisem candva ca trebuie si cum se activeaza Java, doar ca la mine pe Seven nu a fost nevoie sa sterg semnul de comment, cine stie de ce era activat dinainte, de asta mi-a iesit din cap total ce si cum.
Sunt foarte bune instructiunile tale, poate multora nu le merg anumite lucruri pentru ca nu au activat JAB-ul.
Acum merge acel "programel" si pe XP-ul meu.

Da, pe XP-ul meu a mers implicit fisierul .jar, asta pentru ca tocmai inainte instalasem Java.
Totusi, de-a lungul timpului se pare ca unele programe, daca nu esti atent pot fura extensia, vezi Nokia Ovi Suite sau WinRar, desigur ca or fi intreband ele pe undeva, dar oamenii dau in general Next, Next, Finish si...

Sigur ca in alegerea unui limbaj depinde ce vrei sa faci, eu spuneam asa de placerea de a crea cod, in viitor tot in BGT voi face un joc pentru nevazatori, asta pentru ca au fost chiar nevazatori care programau astfel de jocuri in Java si au trecut si ei la BGT, nu se compara productivitatea pentru asa ceva.

Inca nu stiu exact ce si cum e cu Android, o sa studiez acum un manual sa vad intai de toate cum ajung cu un fisier ceva in telefon ca sa il execut sau sa il rulez pentru a fi interpretat.

Ceva in genul Java Access Bridge este si pentru Mac? Sau este cumva Java accesibil si pe Mac?
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
IonPop
Colonel
Mesaje: 2166
Membru din: 02 Oct 2010, 17:55

Mesaj de IonPop »

"Sigur ca in alegerea unui limbaj depinde ce vrei sa faci, eu spuneam asa de placerea de a crea cod, in viitor tot in BGT voi face un joc pentru nevazatori, asta pentru ca au fost chiar nevazatori care programau astfel de jocuri in Java si au trecut si ei la BGT, nu se compara productivitatea pentru asa ceva.".

Sigur. Daca este vorba despre jocuri pentru orbi, probabil ca BGT este cel mai potrivit pentru asa ceva.

"Ceva in genul Java Access Bridge este si pentru Mac? Sau este cumva Java accesibil si pe Mac?".

Nu am idee. Dar nici Mac. :-)
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Poate incearca Gruia cand se intoarce din concediu, pe acolo nu are nici net, nici Mac.

Am citit acum ca Microsoft a participat inca de la inceput la dezvoltarea accesibilitatii pentru Java, asta o scriu cei de la Oracle pe site-ul lor intr-o pagina numita Java Accessibility FAQ.
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
IonPop
Colonel
Mesaje: 2166
Membru din: 02 Oct 2010, 17:55

Mesaj de IonPop »

Google nu e in concediu, asa ca uite ce ne spune:

"Java Access Bridge is a technology that enables Java applications and applets that implement the Java Accessibility API to be visible to assistive technologies on Microsoft Windows systems.
Java Access Bridge is included with Java SE Runtime Environment 7 Update 6 (JRE 7u6) and later. By default, Java Access Bridge is disabled."

Deci s-ar parea ca e doar o chestiune de Windows.

Dar in alta parte:

http://www-int.elluminate.com/support/j ... bility.jsp

Spune ca Java Accessibility Bridge este instalat in mod implicit sub Mac OS X.
(Si se refera la Java Access Bridge, ca am vazut un link pentru descarcarea JAB).
Deci s-ar parea ca sub Mac JAB era de mai mult timp pre-instalat odata cu Java.

Mai clar a fost urmatorul text:

"With some platforms, to use the Java Accessibility API, you must use a native bridge. This is not necessary in OS X because the bridging code is built in. Users can configure the accessibility features of OS X through the Universal Access pane of System Preferences. As a result, if you are using the Accessibility API, your application can use devices that the user has configured there.
Beginning with OS X v10.4, a screen reader called VoiceOver is included with the operating system. Your Java application automatically uses this technology."

Mai clar, sub Mac OS X nu exista Java Access Bridge fiindca nu are nevoie de acel program. Se pare ca facilitatile privind accesibilitatea sunt incluse in mod implicit.

Asadar, din acest punct de vedere se pare ca Windows sta mai rau (daca accesibilitatea oferita de VoiceOver intr-o aplicatie care foloseste Swing este intr-adevar buna).
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Sa speram ca merge si pe Mac, ar fi ceva.

Pana la urma, daca ar fi sa fac ceva care sa fie in final un pachet de instalare, ceva complet, as putea sa verific daca e sau nu activat JAB-ul pe Windows si eventual as putea pune in installer si intrebarea daca se doreste activarea accesibilitatii pentru Java si as modifica eu fisierul acela taind semnul "#" de comentariu.

Am observat jucandu-ma acum putin ca intr-un dialog creat de Java cu swing, JAWS ruleaza cu Virtual Cursor, nu cu PC Cursor, asadar, se intampla acolo ceva destul de "artificial" ca sa functioneze accesibilitatea... :)
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
IonPop
Colonel
Mesaje: 2166
Membru din: 02 Oct 2010, 17:55

Mesaj de IonPop »

Exact, pe langa faptul ca Swing nu este o clasa nativa si nu este atat de responsiva, Jaws o poate accesa doar cu un cursor virtual, cam cum permite si accesarea Ribbon-urilor in versiunile mai noi ale programelor facute de Microsoft.
Asa ca si accesibilitatea este pe masura. Pentru utilizatorul final nici nu ar fi o problema atat de mare daca are un computer rapid, dar pentru cei care trebuie sa creeze interfata grafica a programului este mai dificil daca sunt orbi fiindca nu se pot verifica pozitiile pe ecran in diverse coordonate.
GruiaVelicu
Locotenent - colonel
Mesaje: 1063
Membru din: 15 Mar 2008, 15:50
Localitate: Cluj-Napoca

Mesaj de GruiaVelicu »

Am verificat si acel jar merge foarte bine pe mac.
Gruia
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Da, interesant, in sfarsit un fisier care fiind pus pur si simplu cu paste pe un sistem sau altul merge la fel.
Se pare ca la mac citeste direct Voice Over, nu trebuie activat Java Access Bridge, probabil ca acolo javax.swing cheama elemente de interfata ale sistemului cu tot cu identificatorii specifici recognoscibili de Voice Over.

Acum sunt curios daca si in ceea ce priveste sunetul lucrurile pot fi atat de cross platform, fac acum un mic programel sa vedem cum se va comporta. Sa vad intai daca exista ceva clase native java pentru sunet, sa nu trebuiasca sa chem ceva specific unui sistem sau altul de operare.

In ceea ce priveste programarea pentru Android, lucrurile nu sunt prea simple, Java nu mai este atat de cross platform, cele mai multe tutoriale de programare fiind cu Android APIs. In acest caz, interfata grafica este intr-un format XML, trebuie apoi initiate activitati, intent--uri etc, este ceva la fel de complex ca si cum te-ai apuca sa programezi in C++ cu Windows API.
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Incet-incet, in limita timpului disponibil, am mai avansat in studiul limbajului Java si pot spune ca incepe sa imi placa.
Are un foarte mare avantaj, chiar merge un fisier JAR pe toate cele trei sisteme de operare fara nici o modificare; pur si simplu un paste sau o descarcare de pe net a aceluiasi fisier si totul e la fel peste tot, desigur, daca se utilizeaza clase native fara dependenta de sistemul de operare.

M-am axat pe cautarea solutiilor pentru diferite segmente, in special redarea sunetului, atat looped cat si simplu sau cu intreruperea threadului.

Cum am obiceiul in orice nou limbaj, am inceput si aici sa fac o mica aplicatie simulator de zaruri, sper sa nu devin deja penibil cu asa ceva, dar... nu gasesc altceva mai nimerit pentru familiarizare; tot asa ceva a fost pe vremuri si in JAWS Scripting.
Daca in JAWS Scripting provocarea era crearea unei functii de random pe baza ceasului, aici aceasta functie desigur ca exista, provocarile fiind redarea unui sunet de fundal, redarea audio a numerelor nimerite, crearea interfetei grafice si, foarte important, crearea unui JAR care sa cuprinda totul astfel incat un program sa fie standalone pentru toate cele trei sisteme mai importante de operare desktop.

Pana in prezent am reusit sa creez un JAR care cuprinde o mica aplicatie care la deschidere ruleaza un sunet de fundal, are 4 butoane:
Aruncă, Ieşire, Câte si Limbă.
Pentru butonul Câte, am facut sa apara un input box care cere numarul de zaruri, iar pentru butonul Limbă un alt input box care cere limba sunetelor; pentru limba trebuie scris deocamdata ro, it sau en, pentru romana, italiana sau, respectiv engleza.
Nu sunt verificari daca se scrie corect, asta pentru ca vreau ca acolo sa apara in viitor combo box-uri.

Desi JAWS vede interfata cu un cursor virtual, totusi, utilizand JAWS Cursor se pot determina coordonate, cel putin atat ca sa se vada ca butoanele Aruncă, Câte si Limbă sunt unul sub altul la distanta egala, iar ca butonul Iesire e mai in dreapta in linie cu Arunca.

Pun JAR-ul in faza lui actuala, l-am testat pe Mac-ul lui Gruia si pe Linux-ul lui Stefan si au mers ca pe Windows.
Pe Linux a fost testat doar vizual, nu cred ca Orca sa citeasca o interfata creata cu Swing.
Pe mac merge implicit cu Voice Over, nu trebuie activat Java Access Bridge.

Fisierul PontesCrossDice.jar

Implicit sunt doua zaruri ale caror numere sunt anuntate in romana de vocea lui Cristi Csetnek.

Deocamdata mai e mult de lucru, trebuie sa vad cum as putea reda cross platform fisiere MP3, in prezent utilizez WAV, trebuie sa vad cum afisez imagini cu zaruri pe pozitii aleatorii pe suprafata goala etc.

Java va fi poate o alternativa buna, daca voi reusi candva sa fac ceva jucabil in retea intre doua sisteme de operare diferite, fara nici o ajustare pentru unul sau altul.
Am inteles ca si clasele de conectare, transmisie de date prin internet sunt destul de comode, om mai vedea ce si cum in viitor.
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
IonPop
Colonel
Mesaje: 2166
Membru din: 02 Oct 2010, 17:55

Mesaj de IonPop »

Am instalat Java pe masina virtuala Ubuntu si am testat programul, insa intr-adevar, se pare ca are nevoie de Java Access Bridge.
Altfel, programul porneste, se aude sunetul de fond, insa Orca citeste numele programului dar spune ca este inaccesibil.
Am instalat Oracle Java 7, dar fara Access Bridge. M-am gandit ca e mai bine sa instalez o versiune facuta de Oracle, decat una open source. Am gasit apoi Java Access Bridge cu aptitude search si l-am instalat, insa fara nici un efect. Probabil ca nu l-a instalat pentru versiunea de Java pe care tocmai am instalat-o. Oricum, este destul de complicat pentru ca utilizatorul final sa trebuiasca sa faca atatea operatiuni.

Este utila informatia cu privire la accesibiitatea cu Jaws. Intr-adevar, am vazut ca acum Jaws citeste coordonatele controalelor dintr-o aplicatie care foloseste SWING. Este posibil sa fi facut asta de mult timp, insa eu nu am mai testat. Am vazut doar in urma cu cateva versiuni Jaws ca nu putea face asa ceva si era cam neplacut.
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Nu stiu mai nimic despre Linux, va trebui sa imi fac si eu rost de un Ubuntu pentru masina virtuala.

Teoretic inseamna ca ar trebui sa mearga cu cititorul de ecran, iar daca ar fi vreun utilizator interesat de un programel in Java pe Linux, mai mult ca sigur ca s-ar descurca sa urmeze tot felul de pasi, altfel ar fi utilizator de Windows sau Mac.

Am citit aici niste pasi pentru a avea JAB pe Linux, nu stiud aca sunt cei care ar putea duce la ceva bun.

Oricum am lua-o, faptul de a avea un singur fisier care acelasi sa ruleze un program pe toate cele 3 sisteme de operare, inseamna foarte mult.
Pana la urma se pare ca merge binisor, nu la fel de vioi la apasarea unui tab ca un program in C++ cu Windows API, dar suficient daca e un calculator cat de cat din zilele noastre.
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Si ca tot s-a reluat subiectul, am facut si un mic test din care am dedus ca intr-adevar, la simple operatii matematice Java este de aproximativ 1,5 ori mai lent ca C++.
Probabil ca la astfel de operatii se refereau cei care mentionau diferentele de viteza intre cele doua limbaje.

Am reluat un mic for pe care il propuneam in BGT pentru aruncarea unui numar mare de zaruri, tinand cont de cate ori a picat fiecare.

Java "arunca" un miliard de zaruri in aproximativ 18/19 secunde pe procesorul meu, iar C++ in aproximativ 12/13 secunde. Zaruri e un mod de a spune, ma refer la generare de valori de tip int intre 0 si 5.

Practic am cronometrat ceva foarte simplu:

Cod: Selectaţi tot

// Java:
int limit=1000000000;
int die=0;
int[] aDice = new int[6]; // un array cu 6 pozitii.
Random rand = new Random();
for(int i=0; i<limit; i++) {
die=rand.nextInt(6);
aDice[die]++;
}

Cod: Selectaţi tot

// C / C++:
int limit=1000000000;
int die=0;
int aDice[6]={0,0,0,0,0,0}; // Array cu 6 pozitii;
for(int i=0; i<limit; i++) {
die=rand()%6;
aDice[die]++;
}
In Java, metoda nextInt(int x) a clasei Random scoate direct un integer intre 0 si x-1, echivalent cu rezultatul rand[]%x din C++ care rezulta tot un int intre 0 si x-1.

Timpul se marea considerabil in Java daca as fi creat random-ul prin Math.random() care scoate un double intre 0 si 1. Acolo ar mai fi fost si celelalte calcule aritmetice necesare pentru a ajusta rezultatul astfel incat sa fie intre doua valori anume, plus cast-ul la int. Ajungea pe la 46 de secunde. Probabil ca sunt la baza in metoda nextInt() niste algoritmi mai eficienti care pornesc tot de la integere si nu mai e nevoie de tot felul de transformari intre tipuri.
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
IonPop
Colonel
Mesaje: 2166
Membru din: 02 Oct 2010, 17:55

Mesaj de IonPop »

"Teoretic inseamna ca ar trebui sa mearga cu cititorul de ecran, iar daca ar fi vreun utilizator interesat de un programel in Java pe Linux, mai mult ca sigur ca s-ar descurca sa urmeze tot felul de pasi, altfel ar fi utilizator de Windows sau Mac.".

Teoretic, ca bine zici. :-)
Intr-adevar, daca exista Java Access Bridge si pentru Linux, inseamna ca el face programele care folosesc SWING accesibile, atat doar ca si Orca trebuie sa poata colabora cu Java Access Bridge.
Nu e problema ca un utilizator de Linux nu s-ar descurca, insa la fel cum era cazul instalarii Java Access Bridge sub Windows in trecut, lua destul timp si dadea batai de cap.

"Am citit aici niste pasi pentru a avea JAB pe Linux, nu stiud aca sunt cei care ar putea duce la ceva bun.".

Gasisem si eu acea pagina, insa am trecut peste ea fiindca am vazut ca vorbea despre Java 6, or eu tocmai instalasem Java 7, asta mai ales ca din ultimele versiuni de Java s-au introdus niste modificari in ceea ce priveste modul de instalare al Java Access Bridge. Asta sub Windows, dar ma gandeam ca poate ca o fi ceva asemanator si sub Linux.
Totusi, se pare ca nu prea exista nici o legatura intre Java pentru Windows, Mac si Linux. Pentru Mac nu e nevoie deloc de JAB. Sub Windows JAB se instaleaza automat, iar sub Linux se pare ca trebuie instalat manual.

De fapt, o problema generala pentru Linux este faptul ca nu prea suporta cu draga inima programele proprietar cum este cazul Oracle Java, asa ca pentru a le instala este aproape intotdeauna suficient de complicat pentru a te face sa vrei sa instalezi o alta versiune, care e cu sursa deschisa.
Pentru publicul larg in general asta nu e o problema, dar pentru orbi poate fi, fiindca creatorii de programe open source sunt extraordinari, insa in general lor nu prea le pasa de problemele orbilor, ci merg pe principiul "daca nu iti place, fa tu imbunatatirile de care ai nevoie, fiindca codul este liber".

"Oricum am lua-o, faptul de a avea un singur fisier care acelasi sa ruleze un program pe toate cele 3 sisteme de operare, inseamna foarte mult.".

Evident, acesta este principalul avantaj al unei masini virtuale ca JVM, si de aceea a fost copiat si de altii, ca in cazul DotNet. Mare pacat ca Microsoft nu este deloc interesat ca DotNet sa poata fi folosit si pe alte platforme decat Windows.
JVM este si super optimizat si poate fi folosit de multe alte limbaje in afara de Java.

"Pana la urma se pare ca merge binisor, nu la fel de vioi la apasarea unui tab ca un program in C++ cu Windows API, dar suficient daca e un calculator cat de cat din zilele noastre.".

Java este intr-adevar un elefant care consuma multe resurse, insa faptul ca interfata nu este atat de responsiva se datoreaza bibliotecii SWING, nu limbajului Java.
Daca folosesti SWT in loc de SWING, interfata este mai responsiva iar pentru utilizatorii de tastatura este mult mai placut de lucrat.
Pentru cele 3 sisteme de operare cred ca distributia programelor care folosesc SWT nu este cu mult mai complicata, fiindca trebuie doar sa adaugi in kitul programului biblioteca respectiva, care in cazul Windows este un fisier .dll.
Dar e drept, asta are dezavantajul ca trebuie sa creezi cate un kit de instalare pentru fiecare sistem de operare in parte.

"Si ca tot s-a reluat subiectul, am facut si un mic test din care am dedus ca intr-adevar, la simple operatii matematice Java este de aproximativ 1,5 ori mai lent ca C++."

Java foloseste o multime de optimizari ca sa ruleze cat de rapid posibil, insa din acest motiv consuma foarte multe resurse si cand nu este nevoie.
Din acest motiv nu este relevanta o comparatie cu C doar in ceea ce priveste viteza, fiindca ar trebui comparata de exemplu si memoria consumata pentru a face acelasi lucru.

Mai demult am discutat cu cineva despre viteza unor limbaje de programare si am facut niste teste cu generarea unui sir Fibonacci, ca o metoda clasica de testare.
In C a iesit foarte rapid, evident. In Java a iesit daca mai tin bine minte mai rapid decat in C. Am facut si un test in Perl dar a iesit extrem de lent. Atunci am apelat in script si modulul Memoize si cu doar vre-o doua linii de cod adaugate in plus, programul in Perl a iesit super rapid, mult mai rapid decat cel in C si cel in Java.
Doar ca asta nu inseamna ca Perl este mai rapid decat C, fiindca doar e facut in C, la fel ca Java.
Atat doar ca modulul Memoize facea niste optimizari care il facea sa ruleze mult mai rapid, dar bineinteles, programul consuma mai multa memorie.
In acel exemplu asta nu conta, fiindca programul termina de rulat in mai putin de o secunda indiferent pentru ce numar Fibonacci se faceau calculele, dar in cazul programelor reale, conteaza si memoria.
Java foloseste anumite optimizari just in time, in mod implicit, asa ca optimizeaza multe calcule, in timp ce in alte limbaje, inclusiv C, acele optimizari trebuie facute manual.
Dezavantajul este ca ele trebuie facute manual, dar avantajul este ca daca de cele mai multe ori nu este nevoie de astfel de optimizari, programele in limbajele respective nici nu consuma degeaba atat de multe resurse.
In cazul modulului Memoize optimizarile constau in evitarea unor calcule care s-au mai facut o data, si salvarea rezultatelor calculelor intermediare in memorie, si apelarea lor directa cand trebuie facute din nou aceleasi operatii in loc sa se mai faca inca o data. Probabil ca astfel de optimizari foloseste si Java si din acest motiv pare ca este atat de rapid.

In ceea ce priveste diferentele de viteza intre diferite metode de randomizare, trebuie tinut cont si de cat de aleatore sunt de fapt rezultatele.
Nu ma pricep la domeniul randomizarii, dar mi-a parut destul de ciudat cand am inteles ca unele numere aleatore nu sunt suficient de aleatoare,, si ca din acest motiv pot aparea probleme. Cine stie, probabil ca generarea unor numere cu adevarat aleatore ia mai mult timp...
Scrie răspuns