Despre accesibilitatea produselor si programare in general

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:

Mesaj de Manu »

Da, ceva scripturi JAWS nu ar fi rele pentru editoarele SciTE / Scintilla...
Probabil ca un script de tipul: spune cuvantul curent, apoi selecteaza cuvantul urmator ar fi pentru shift+ control + sageata dreapta sau shift + insert + numpad 5, ar trebui sa imi fac pentru toate tipurile de selectie...

Cel mai simplu model pentru shift + control + sageata dreapta ar fi:

Cod: Selectaţi tot

Script SelectNextWord ()
SayString(GetWord () + " selected")
SelectNextWord ()
EndScript
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 »

"Ceea ce e enervant la editoarele acestea, cel putin la toate care sunt bazate pe SciTe, si aici vroiam sa ajung, este ca nu poti selecta cum trebuie o bucata de cod cu JAWS.
JAWS nu citeste ceea ce este selectat, astfel trebuie sa numar de multe ori randurile pe care vreau sa le selectez, apoi sa tin shift apasat si sa numar iar apasarile sagetii in jos pentru a selecta exact ceea ce am vrut.
Exista oare o solutie ca JAWS sa se comporte mai ca intr-un edit normal?"

Unele editoare au prostul obicei de a colora textul, uneori in functie de limbajul de programare folosit, ceea ce le este util vazatorilor, iar cand se selecteaza un text si culoarea text/fundal este diferita de cea obisnuita, asa ca JAWS pur si simplu nu stie ca acela este un text selectat, si in consecinta nu il citeste.
Pentru a rezolva problema, desi nu functioneaza intotdeauna, vezi daca editorul pe care il folosesti are o optiune de a colora textul si dezactiveaz-o.
Apoi, daca tot nu functioneaza, selecteaza o bucata de text, pune apoi cursorul JAWS deasupra textului selectat, apasa Insert+F2, apoi din lista alege "Custom highlight assign" si apoi incearca sa adaugi acea combinatie de culori ca un nou tip de combinatie care este recunoscuta de JAWS ca un text selectat.
In principiu ar trebui sa functioneze, doar ca uneori JAWS spune ca a recunoscut culoarea "black on black" si atunci nu prea functioneaza. Dar este o sansa sa mearga asa...

"O solutie ar fi Notepad, dar aici nu pot selecta cu control + sageata dreapta sau insert 6 cate o bucatica, sa ii zic lexem si atunci aleg EdSharp."

Notepad e un editor mult prea simplu si fara nici o facilitate necesara pentru programare, asa ca aproape orice alt editor este mai bun.
Am testat mai multe versiuni ale editorului EdSharp, dar nu mi-a placut niciodata acel editor. Acum a trecut multa vreme de cand am facut acele teste si nici nu mai tin minte ce nu imi placea, dar de fiecare data i-am transmis lui Jamal Masrui opiniile mele in legatura cu el.
Cred ca pe atunci era destul de legat de JAWS, si asta nu imi place deloc. Daca un editor spune ceva, eu vreau sa foloseasca eventual un script JAWS care sa il faca pe JAWS sa vorbeasca, nu sa spuna el ce are de spus direct prin JAWS API, fara sa pot dezactiva acel lucru. Si cred ca mai si seta o combinatie de taste cu care sa fie pornit editorul, care chiar daca alegeam la instalare sa nu fie setata, tot crea conflicte cu vre-una dintre combinatiile de taste pe care le aveam eu setate pe computer.
Si mai avea si o multime de optiuni prin meniuri, majoritatea inutile, dar cu combinatii de taste care nu puteau fi modificate... etc.

"Imi place EdSharp, JAWS merge perfect in fereastra de editare, se pot si selecta lexeme, dar nu sugereaza completarea automata pentru nume de variabile."

Nevoia de a completa automat nume de functii sau variabile tine si de stilul de programare si de limbajul de programare folosit, iar un IDE trebuie sa fie foarte performant pentru a putea oferi doar variabilele care trebuie ca optiuni in anumite cazuri, si de obicei nu o poate face decat partial, adica... mai bine deloc.

Adica, daca am de exemplu un cod ca:

sub nume {
my $nume = 'Gigi';
return $nume;
}

sub varsta {
my $varsta = 21;
#Ei bine, aici, editorul nu trebuie sa imi ofere posibilitatea de a scrie
#variabila $nume, fiindca aici nu poate fi folosita.
}

Si cum intotdeauna este bine ca o variabila sa fie declarata si valabila in cel mai redus scop cu putiinta si sa nu se foloseasca pe cat posibil variabile globale, cu atat este si mai usor de retinut si scris numele variabilelor manual, fara sa fie nevoie de autocompletare.


"Ce solutii exista? Nu chiar un IDE, un simplu editor."

Depinde de nevoi, de limbajul folosit, etc.

Eu folosesc TextPad, care are un singur mare dezavantaj, dar altfel eu sunt foarte multumit de el.

Este foarte rapid si perfect accesibil cu JAWS, poate face cautari/inlocuiri cu regular expressions, permite o multime de setari pentru fiecare tip de fisier si adaugarea unor noi tipuri de fisiere daca se doreste, se poate configura chiar sa coloreze codul sursa in functie de limbajul de programare folosit, si stie sa formateze textul pentru multe limbaje, permite rularea codului sursa din fereastra curenta cu un anumit program, de exemplu perl, python, ruby, php, si pot fi definite mai multe asemenea programe, se poate adauga cate o optiune in meniu cu care pot fi rulate respectivele programe, si se pot seta chiar combinatii de taste cu care sa fie rulate.
Asa ca poate fi transformat intr-un IDE.
Dupa rularea programului care sa compileze/interpreteze codul sursa TextPad poate rula direct codul sursa curent sau poate deschide o caseta de dialog perfect accesibila in care se pot adauga parametrii pentru interpretor sau pentru program si sa se ruleze abia dupa ce se apasa un enter, ceea ce este foarte important fiindca se poate simula rularea unui program in linia de comanda cu diversi parametrii.
Dupa rulare, rezultatul programului, adica atat STDOUT cat si STDERR este trimis intr-un nou document deschis intr-o noua fereastra cu rezultate (fiindca TextPad are o interfata multi-document cu mai multe ferestre sau mai multe tab-uri... dupa preferinte), iar acea fereastra primeste focusul. Si bineinteles, rezultatul din ea este foarte usor accesibil si poate fi copiat/lipit in alta parte.

Pentru fiecare tip de fisier cu care se lucreaza se poate seta ce sfarsit de linie sa aiba (Win/Mac/Unix), cum sa se faca indentarea textului cand se apasa enter, codul de caractere folosit, si multe alte optiuni.

Dar dupa cum spuneam, are o problema mare fiindca nu suporta in intregime codul UTF-8, asa ca pot salva codul in UTF-8, insa doar acele caractere care se afla si in codul Eastern European, adica vechile caractere cu diacritice, nu si cele 4 noi caractere cu diacritice.

Asa ca am testat o multime de alte editoare de o calitate excelenta, cum ar fi UltraEdit, EditPlus, si altele, insa la toate am gasit cate un mare minus in comparatie cu TextPad. Unele nu permiteau sa adaug cativa parametrii la programul pe care vroiam sa il rulez, asa ca erau inutile pentru a rula programe, altele returnau rezultatul programului nu intr-o noua fereastra ci intr-un panou care aparea intotdeauna pe ecran, dar care era inaccesibil cu tastatura, si a trebuit sa fac un script Jaws cu care sa sar acolo, doar ca in acel rezultat era inclus doar STDOUT, nu si STDERR, asa ca nu vedeam care au fost erorile de rulare, altele nu permiteau configurarea editorului decat pentru un singur program cu care sa rulez codul si eu am nevoie de mai multe, altele aveau o interfata mai slab accesibila pentru JAWS, si in special dialogul "find" si "find and replace" si multe alte probleme.
Asa ca nu am gasit unul mai bun, dar cum nu am mai cautat de mult, poate voi face un test candva din nou sa vad cum au mai evoluat editoarele de text.

Eu am configurat in TextPad limbajele perl, ruby, python, php, programul perldoc cu care afisez documentatia pentru un anumit modul instalat local, programul cpandoc cu care afisez documentatia pentru un modul care nu este instalat dar care poate fi instalat de pe site-ul cpan.org si am mai avut in trecut si unele programe care formatau fisierul curent intr-un anumit mod...

Asa ca pentru a rula programul curent trebuie doar sa apas Control+Shift+A, combinatie de taste pe care am definit-o eu in TextPad, apare campul de editare in care pot scrie eventualii parametrii in linia de comanda, camp de editare care este gata completat cu comanda "perl $file "", urmand ca TextPad sa inlocuiasca automat $file cu numele fisierului. $file seamana cu o variabila in Perl, dar nu are nici o legatura cu Perl. Este doar o facilitate a editorului, si mai are multe variabile care pot fi folosite.

TextPad mai are si posiblitatea definirii unui macrou, adica a insirarii multor comenzi care sunt apoi executate automat, dar eu nu prea am folosit acea facilitate, si are si o librarie cu elemente HTML, dar nu am folosit-o nici pe ea si multe alte optiuni...

TextPad se poate testa gratis, si cred ca dupa perioada de testare afiseaza pe undeva ceva avertisment dar nu mai tin minte daca este ceva deranjant...

Oricum, poti testa si UltraEdit fiindca si el este un editor bun, si preferintele vor depinde si de limbajul folosit.

Aa, o alta problema pentru care nu imi placeau unele editoare era ca JAWS nu imi citea bine cand navigam cu tastele control+sageti stanga-dreapta, iar Notepad este unul dintre cele mai rele sub acest aspect.

De exemplu, daca am codul:
my $var = calculate("zzz");

si ma deplasez cu Control+sageata dreapta, notepad imi citeste doar:
my, $var, equals, calculate

Si apoi nu imi mai citeste nimic ce apare dupa calculate, fiindca toate caracterele sunt legate iar Notepad le citeste ca pe un singur cuvant, totusi JAWS nu imi citeste totul dintr-o bucata macar, ci se opreste la prima paranteza, asa ca imi pot scapa elemente importante din cod. Alte editoare sar si ele peste unele bucati de cod, dar nu chiar atat de rau ca Notepad. TextPad nu sare peste nimic sau aproape nimic dupa cate stiu, dar ma rog, depinde si cum este setat JAWS sa citeasca sau nu semnele de punctuatie...
IonPop
Colonel
Mesaje: 2166
Membru din: 02 Oct 2010, 17:55

Mesaj de IonPop »

"La partea cu IDE nu sunt de acord, sunt multi, atat vazatori cat si nevazatori, care folosesc cu succes, printre care ma numar si eu. E drept, eu am o preferinta puternica pentru limbajele strongly typed. Gusturile nu se discuta."

Evident. Doar ca si in ceea ce priveste gustul pentru un anumit limbaj este ca si in domeniul religios... adica avem opinii in functie de informatiile la care am avut acces si de ordinea in care am avut acces la ele si de increderea in cei care ne-au transmis acele informatii, si de preferintele pentru alte domenii.
Daca cineva este ateu in Romania, probabil ca ar fi ateu si daca ar locui in China sau India, dar daca este profund credincios in religia crestina, probabil ca ar fi fost profund credincios in buddhism sau hinduism, si poate ca nici nu ar fi auzit prea multe despre crestinism.

Pe de o parte limbajele puternici tipizate cele mai renumite si folosite in prezent, adica Java si C# sunt promovate de primele doua firme de software din lume, care au bani gramada ca sa le promoveze prin scoli si universitati, sa publice carti, sa le dea speranta unora ca poate si ei vor avea norocul sa lucreze pe plantatie la Microsoft sau Oracle unde se plateste probabil mai bine decat pe alte plantatii mai mici.
Pe de alta parte, eu am observat, dar evident, nu am facut un sondaj despre care sa pot spune ca este relevant, asa ca s-ar putea sa ma insel, dar am observat ca in general cei pasionati de matematica prefera limbajele statice, puternic tipizate, unde nu conteaza ca muncesti si de zece ori mai mult decat in alte limbaje ca sa faci acelasi lucru, dar este mai usor fiindca toate lucrurile sunt clare si ar trebui sa sti la ce sa te astepti.
Or problema invatamantului romanesc de proasta calitate cum este, este aceea ca o foarte mica parte dintre profesorii de informatica s-au pregatit in cariera lor pentru a deveni profesori de informatica. Majoritatea lor au fost profesori de matematica si peste noapte s-au trezit ca au devenit profesori de informatica, si evident ca si ei prefera aceeasi strictete in programare ca in matematica si probabil ca ar considera cam ciudat un limbaj in care sa existe functii ca die, bless, confess. :-)

Asa ca in Romania se studiaza foarte putine limbaje de programare ca lumea, mai exact doar Java si C#, restul, inclusiv PHP se studiaza asa ca sa nu se spuna ca nu au fost studiate.
Este evident ca la noi nici nu exista prea multe motive sa se studieze ca lumea informatica, fiindca daca am exclude toate firmele care fac outsourcing pentru straini, probabil ca in afara de un pic de PHP pentru a crea acolo cateva pagini web amarate nu prea ar fi nevoie de multa informatica pentru uz intern.
Prin alte tari insa, si iau la intamplare o tara oarecare, adica SUA, se foloseste o cantitate foarte mare de cod scris in Cobol si chiar si Fortran sau Ada, se folosesc o multime de sisteme de operare ca HP-UX, AIX, VMS, o multime de platforme hardware, asa ca acolo au motive sa invete mai multe fiindca pot lua ce este mai bun de la fiecare, pe cand la noi se promoveaza idea ca un singur limbaj oricare ar fi el, este bun pentru toate, iar si aceste putine limbaje care se predau sunt predate de profesori fara experienta, despre care in general nu prea auzi ca au creat nu stiu ce programe importante sau ca au avut contributii reale si utile, ci doar titluri academice.

Dar dupa cum spuneai, de gustibus non disputandum est.
Si eu daca ar trebui sa lucrez intr-o echipa mai mare si ar trebui sa intretin codul creat de altii, nu mi-ar placea deloc flexibilitatea oferita de unele limbaje de programare, si cred ca as ajunge si eu sa prefer chiar limbajele puternic tipizate. :-)
IonPop
Colonel
Mesaje: 2166
Membru din: 02 Oct 2010, 17:55

Mesaj de IonPop »

"Cel mai simplu model pentru shift + control + sageata dreapta ar fi:"

Cred ca ar fi mai complicat, fiindca cu acea combinatie de taste poti si selecta si deselecta, depinde de unde incepi selectia, de la stanga spre dreapta, sau de la dreapta spre stanga.

Incearca mai intai cu modificarea asignarilor de culori pentru textul selectat.
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Multumesc de indicatia cu asignarea culorilor pentru textul selectat.
Am reusit sa rezolv problema pentru editorul din DevCPP, e alta viata, nu stiu cum m-am tot chinuit pana acum... Se pare ca uneori sunt probleme destul de simplu rezolvabile, dar pana sa le dai de cap... te tot chinui fara rost.

Revenind la o idee de mai sus, si eu prefer limbajele static typed, dar probabil este pentru ca am inceput cu JAWS Scripting.
Am facut un joculet, Vrei sa fii milionar in AutoIt care e limbaj dinamic, dar tot mai la largul meu ma simt intr-un limbaj static gen BGT care are sintaxa C++. E clar ca tine de obisnuinta, sunt sigur ca tot timpul va fi preferat stilul cu care s-a inceput.
Limbajele statice sunt mai rapide la rulare, fapt care probabil da un punct in plus pentru alegerea acestora, chiar daca nu prea ar conta viteza la programele mici, ba chiar nici nu ar putea fi simtita diferenta pe calculatoarele din prezent.
Cumva te simti mai bine daca spui: imi place C++ sau Java, asta pentru ca sigur nu are nimeni de comentat, sunt limbaje mari si general valabile.
De multe ori am vazut pe net cum cei care programeaza in JavaScript sau PHP sunt priviti cumva de sus... ceva in genul: "aaa, ala e un scripting language..."

Pana la urma ceea ce conteaza pentru mine personal sunt pachetele finale. Daca am un fisier .exe, .sis sau .dmg care face ceea ce trebuie e perfect, nu cred ca ar trebui sa imi mai pun problema cum a fost facut, atata vreme cat nu da erori si isi face treaba pana la capat.

Sau sa fie oare posibil ca un utilizator sa isi puna problema ca la lucrurile fizice? Asta e din lemn de stejar, asta e din pal?
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 »

Ma bucura ca ai reusit sa faci JAWS sa citeasca textul selectat.

Nu cred ca programatorii isi manifesta preferintele in functie de "esenta" programului. :-))

Dar intotdeauna isi manifesta preferintele in functie de propriul interes, asa ca tin sa generalizeze si sa spuna ca limbajele pe care le cunosc ei sunt cele mai bune pentru orice, ceea ce nu este adevarat.

Limbajul de asamblare este urat de tot, adica nu ca sintaxa, caci sintaxa este una foarte simpla, ci din punctul de vedere a productivitatii, fiindca trebuie sa scri cod pana te plictisesti, si sa ai cunostinte foarte low-level, dar totusi, pentru anumite parti de programe, acesta este cel mai potrivit limbaj.

Cand aud despre C++ intotdeauna aud cuvinte urate despre programarea obiectuala in C++ iar cand aud despre C aud de asemenea cuvinte urate despre alocarea memoriei si productivitate, dar totusi aceste limbaje sunt folosite intotdeauna cand cel mai important lucru este viteza.

Despre Java... am citit undeva ca toata lumea stie ca nimeni nu iubeste limbajul Java, mai ales cei care sunt nevoiti sa programeze in Java, dar daca este nevoie de portabilitate cred ca este de departe cel mai potrivit limbaj.

Cu toate acestea, majoritatea site-urilor web nu sunt scrise in Java sau in C/C++ sau intr-un alt limbaj care compileaza programele intr-o forma executabila, tocmai fiindca pentru site-uri web acestea nu sunt cele mai bune.

In legatura cu limbajele puternic tipizate, ele consuma ceva mai putine resurse daca folosesc multe variabile care ocupa putin spatiu, cum ar fi cele de tip bool, sau integer, fiindca pot fi stocate mai bine decat ca simple string-uri, insa cele care sunt mai rapide nu sunt mai rapide din acest motiv, ci fiindca in general sunt mai low-level. Java este de exemplu considerat mult mai high-level decat C sau C++, dar in comparatie cu Perl in anumite domenii este destul de low-level, (considerand limbajul Perl nu doar interpretorul, ci toate modulele care se pot instala de pe site-ul CPAN).

Un avantaj cu care sunt promovate limbajele puternic tipizate este faptul absolut eronat ca datorita faptului ca o variabila nu poate avea niciodata un alt tip de valoare decat cel definit initial, programele sunt mai sigure si ca nu sunt predispuse sa dea erori.
Or in general erorile nu se datoreaza unor astfel de probleme in limbajele dinamice.
Si in Plus, in Perl de exemplu un atribut al unui obiect se poate defini nu doar sa aiba un anumit tip, adica integer, string... ci si sa nu poata avea valori mai mici sau mai mari decat anumite valori, sau sa contina/sa nu contina anumite caractere, adica absolut orice conditie se doreste, ceea ce in limbajele puternic tipizate nu prea se poate dupa cate stiu eu decat daca se creaza o clasa speciala care sa aiba astfel de restrictii definite.
Dar si cu aceste restrictii care ajuta, nu se elimina posibilitatile de a face erori...
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

IonPop scrie:Un avantaj cu care sunt promovate limbajele puternic tipizate este faptul absolut eronat ca datorita faptului ca o variabila nu poate avea niciodata un alt tip de valoare decat cel definit initial, programele sunt mai sigure si ca nu sunt predispuse sa dea erori.
Or in general erorile nu se datoreaza unor astfel de probleme in limbajele dinamice.
Mi se par foarte clare lucrurile cand se foloseste pentru concatenarea a doua stringuri alt semn decat plus, daca plus este folosit pentru adunarea numerelor.
La PHP e clara treaba, au ales punctul si atunci nu mai sunt probleme, la AutoIt au ales & (and-ul) si iar sunt clare lucrurile, cand vrem adunare de numere sau "adunare" de stringuri.

Ce ne facem insa cu JavaScript unde se foloseste plus in ambele cazuri si se pare ca adunarea unui numar cu un string da tot timpul string. Inseamna ca vom avea tot felul de rezultate pentru x plus y, in functie de cum se nimeresc sa fie x si y la rulare. Pana la urma trebuie sa iti bati capul si aici cu convertiri si cu tot felul de asigurari ca nu se pot intampla anumite lucruri. Ba mai mult, teoretic poate aparea in timpul rulari operatia 10 impartit la "Gigi", iar pentru a ma asigura ca nu se intampla acest fenomen iar trebuie sa verific daca rezultatul unei impartiri nu este NaN,.

Totusi, avantajul la statice e ca nu te lasa din start sa compilezi daca nu e clar ce cu ce combini.

Asadar, in cazul limbajelor dinamice trebuie facute mai multe verificari in timpul rularii, poate de aceea pare putin ciudat un astfel de limbaj pentru cine e obisnuit cu rigoarea si a inceput sa programeze intr-un mod static.

Din cate am vazut exista limbaje care pot fi folosite atat static cat si dinamic, acelea ar fi avantajoase din punctul de vedere al typing-ului, macar te lasa sa alegi dupa imprejurari.
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 »

"Ce ne facem insa cu JavaScript unde se foloseste plus in ambele cazuri si se pare ca adunarea unui numar cu un string da tot timpul string. Inseamna ca vom avea tot felul de rezultate pentru x plus y, in functie de cum se nimeresc sa fie x si y la rulare. Pana la urma trebuie sa iti bati capul si aici cu convertiri si cu tot felul de asigurari ca nu se pot intampla anumite lucruri. Ba mai mult, teoretic poate aparea in timpul rulari operatia 10 impartit la "Gigi", iar pentru a ma asigura ca nu se intampla acest fenomen iar trebuie sa verific daca rezultatul unei impartiri nu este NaN,."

Javascript nu este un limbaj extraordinar de complex, asa ca nu este cel mai nimerit exemplu de limbaj dinamic, dar oricum, intotdeauna trebuie sa verifici daca datele sunt de un anumit tip sau daca nu trebuie sa imparti cumva la zero, chiar daca se foloseste un limbaj puternic tipizat.

Datele se preiau din afara programului, din surse externe, si ele trebuie intotdeauna verificate.
Si daca programul este creat cu un limbaj puternic tipizat, daca interfata lui ii permite utilizatorului sa introduca "Gigi" in locul unui numar care este folosit intr-o impartire, acel program oricum va da o eroare urata, iar ca sa nu dea o eroare ci sa afiseze un mesaj frumos si informativ, trebuie sa verifice daca datele introduse sunt numere si ori sa ii dea un mesaj frumos, ori sa nu il lase pur si simplu pe utilizator sa introduca date incorecte, si exact acelasi lucru trebuie sa faca indiferent de limbajul de programare folosit.

"Totusi, avantajul la statice e ca nu te lasa din start sa compilezi daca nu e clar ce cu ce combini."

Nu te lasa sa compilezi daca nu combini tipul de variabile permise, dar in faza de compilare tot nu sti ce valori vor fi introduse pentru acele variabile in timpul rularii, asa ca tot trebuie sa verifici daca acele valori sunt de tipul permis, adica exact ceea ce trebuie sa faci indiferent de limbajul folosit.

"Asadar, in cazul limbajelor dinamice trebuie facute mai multe verificari in timpul rularii, poate de aceea pare putin ciudat un astfel de limbaj pentru cine e obisnuit cu rigoarea si a inceput sa programeze intr-un mod static."

In afara de verificarea datelor de intrare, verificare pe care trebuie sa o faci si in cazul programelor scrise cu un limbaj puternic tipizat, nu trebuie sa faci alte verificari in plus, fiindca cu aceleasi date de intrare si aceiasi algoritmi, programele dau aceleasi tipuri de rezultate indiferent daca sunt scrise cu limbaje puternic tipizate sau nu.

Spre deosebire de programele statice, programele dinamice ofera unelte cu care poti lucra mai bine in acele limbaje. Nu este ca si cum ai lucra in C++ doar cu singura diferenta ca o variabila poate avea orice tipuri de valori.
De exemplu, in Perl exista operatori distincti pentru adunare si concatenare, asa ca poti folosi + pentru adunare si punct pentru concatenare, (sau ~ in Perl 6), iar in Python desi o variabila poate avea orice tipuri de valori, limbajul nu permite adunarea a doua valori daca sunt de tipuri diferite.

"Din cate am vazut exista limbaje care pot fi folosite atat static cat si dinamic, acelea ar fi avantajoase din punctul de vedere al typing-ului, macar te lasa sa alegi dupa imprejurari."

Hmm, este adevarat ca termenul de limbaj dinamic este destul de vag, dar cred ca faci o confuzie intre limbajele dinamice si limbajele dinamic tipizate.
Am gasit pe Wikipedia o pagina despre limbajele dinamice, care nu stiu cat este de clara, dar poate ca ajuta:

http://en.wikipedia.org/wiki/Dynamic_pr ... g_language

Cand auzi de dinamic tipizat versus puternic tipizat sau strongly typed, se refera doar la posibilitatea ca o variabila sa accepte mai multe tipuri de valori, iar cand se face o distinctie intre limbajele statice si cele dinamice, se refera la posibilitatea modificarii dinamice a programului in timpul rularii, ceea ce permite o mai mare flexibilitate. Acel articol spune ca si in limbajele statice se poate face asa ceva, insa mai complicat, pe cand limbajele dinamice ofera mai multe facilitati in acest sens.

Oricum, in afara de programele mai complexe in care poate ajuta foarte mult faptul ca un limbaj este dinamic, cred ca daca un limbaj este puternic tipizat sau nu, static sau dinamic, are in general o importanta mai redusa decat faptul ca un limbaj este low level sau high level, or problema principala a limbajelor statice este aceea ca in general ele sunt mai low level, ceea ce implica scrierea de mai mult cod, adica mai multa munca, adica o productivitate mai mica.

Iar daca prin acele "limbaje care pot fi si statice si dinamice" te refereai la limbajele care pot fi si dinamic tipizate si puternic tipizate, adica care permit ca anumite entitati adica variabile sau atributele obiectelor sa poata avea orice tip de valoare, dar atunci cand se doreste sa poata accepta doar un anumit tip, Perl poate face acest lucru cand se definesc atributele obiectelor, si se pot impune orice conditii. Acest lucru este util nu in programe, care stiu ce valori trebuie sa primeasca, fiindca interfata prin care sunt introduse acele valori verifica asta, ci este util in module, care stiu ca trebuie sa opereze cu numere, sau doar numere intregi, sau doar string-uri, sau doar array-uri care contin numere etc, dar nu stiu in ce programe vor fi folosite si daca acele programe verifica validitatea datelor.
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Ma refeream sa se poata alege din start cum vrei sa programezi intr-un limbaj, in mod dynamic typed sau static typed.
Era si in Wikipedia in articolul Type System un paragraf:
It has been proposed, chiefly by Gilad Bracha, that the choice of type system be made independent of choice of language; that a type system should be a module that can be "plugged" into a language as required. He believes this is advantageous, because what he calls mandatory type systems make languages less expressive and code more fragile.
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 »

Pai exact asta am spus si eu. Cand limbajul te forteaza sa faci ceva si nu te lasa sa te exprimi, codul devine mai fragil tocmai fiindca trebuie sa incepi sa folosesti o multime de functii care sa verifice tipul datelor si alte functii cu care sa transformi un tip de data in altul pentru a le putea compara, aduna etc.

Uite, de exemplu Perl este foarte liber si permite sa ai orice tip de date intr-un atribut al unui obiect in mod implicit. De exemplu pentru un obiect de tipul "Animal", poti defini un atribut "picioare" care poate avea orice valoare, ca de exemplu 2, 4, "patru", "vre-o patru"...

Iata un exemplu de astfel de program care creaza obiectul si care tipareste apoi numarul de picioare ale animalului:

use Animal;
my $animal = Animal->new;

$animal->picioare(4);
print $animal->picioare, "\n";

Si iata cum arata modulul Animal:

package Animal;

sub new {
return bless {}, shift;
}

sub picioare {
my ( $self, $picioare ) = @_;
$self->{picioare} = $picioare if defined $picioare;
return $self->{picioare};
}

1;

Evident, acel program va tipari cifra 4.
Dar daca in loc de 4 utilizatorul introduce prin intermediul unei interfete "vre-o patru"?
Evident, se va tipari "vre-o patru".
Dar daca $animal->picioare va fi folosit in calcule?
Evident, s-ar putea sa dea erori.

Ei bine in acel caz, in locul sistemului de tipuri de baza, exact cum spune acel autor pe care l-ai citat, in Perl se poate folosi un modul care modifica sistemul de tipuri, si anume modulul numit Moose.

In acest caz programul ramane nemodificat, si se modifica doar modulul "Animal", care va arata astfel:

package Animal;

use Moose;

has picioare => (is => 'rw', isa => 'Int');

1;

Dupa cum vezi, noul modul este mai scurt, mai clar si mai curat, si in plus ofera mult mai multe facilitati (chiar mult mai multe, nu doar cele legate de sistemul de tipuri).

Asa ca daca in program am adauga:

$animal->picioare("vre-o patru");
print $animal->picioare, "\n";

programul ar raporta urmatoarea eroare:

Attribute (picioare) does not pass the type constraint because: Validation failed for 'Int' with value vre-o patru at accessor Animal::picioare (defined at Animal.pm line 5) line 4

Iar acel parametru "isa", care inseamna "is a ", poate specifica nu doar tipuri de baza ca Num, Int, Str, ArrayRef, HashRef... ci si diverse clase, sau combinatii cum ar fi un array care contine doar string-uri si se pot adauga alti parametrii care permit doar anumite valori cum ar fi 2, 4, fiindca probabil ca nu exista animale cu 3 sau 5 picioare, sau permite doar numere pare sau orice altceva se doreste.

Si bineinteles, chiar daca se foloseste modulul Moose, parametrul isa este optional, asa ca atunci cand nu este nevoie de astfel de restrictii, se poate omite, fiindca dupa cum am spus, el ofera multe alte avantaje in afara de acest sistem de tipuri, iar daca se omite, se pot folosi orice tipuri de date ca in mod implicit in Perl.

De aceea am spus ca este un sistem mai flexibil pe care poti sa il folosesti cat de restrictiv vrei, pe cand limbajele puternic tipizate nu ofera o astfel de facilitate.
BosGrigore
Plutonier
Mesaje: 145
Membru din: 22 Iul 2012, 21:48
Localitate: Cluj-Napoca

Mesaj de BosGrigore »

Manu te rog frumos explica-mi cum se creaza un proiect in microsoft visual c++ 2005 express pentru ca ajung pana la win32 console application wizard si de aici nu pot continua, adica nu gasesc comanda next. Visual c++ 2005 express este gratuit sau nu?
Grigore
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Eu folosesc Microsoft Visual C++ 2010 Express, nu sunt probleme de accesibilitate.
Când il deschid apare un Start page, unde dupa apasarea unui Tab ajung la butonul New Project. Dau pe el si apare o fereastra unde aleg Win32 si apoi dupa un Tab aleg Win32 Console Application daca asta vreau si nu simplu Win32 Project care e pentru interfata grafica cu Windows API; apas apoi Ok si apare o ultima fereastra unde dau pe Finish.
Mai trebuie eventual bifat Empty Project pentru a aparea o fereastra goala daca se doreste începerea cu void main() sau int main() si nu cu int _tmain() cum pun ei implicit. In cazul in care se doreste un Empty Project, trebuie apasat Next nu Finish la al treilea pas.
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
BosGrigore
Plutonier
Mesaje: 145
Membru din: 22 Iul 2012, 21:48
Localitate: Cluj-Napoca

Mesaj de BosGrigore »

Multumesc! Dupa instalare o sa revin.
Grigore
BosGrigore
Plutonier
Mesaje: 145
Membru din: 22 Iul 2012, 21:48
Localitate: Cluj-Napoca

Mesaj de BosGrigore »

Manu scrie te rog frumos codul sursa pentru a crea o scurtatura, de exemplu ctrl+1 dupa urmatorul algoritm:
- se apasa ctrl dupa care se elibereaza tasta si sa am la dispozitie 5 secunde pentru a apasa tasta 1 pentru executarea unei functii oarecare. Doresc codul sursa in c++.
- daca nu se apasa tasta 1 in intervalul celor 5 secunde sa se revina la starea initiala.
Grigore
Campus
Comandantul unitatii
Mesaje: 446
Membru din: 09 Mai 2007, 12:15
Localitate: Cluj Napoca

Mesaj de Campus »

Salut
In c++ exista mai multe modalitati de a capta tastele, depinde la ce folosesti aplicatia. Acest topic iti da mai multe exemple de astfel de cod. Trebuie sa mai incluzi si un timer ca sa iti numere secundele.
Din topicul respectiv am adaptat codul pe winapi pentru ceea ce vrei tu. Am adaugat si o clasa timer gasitea undeva in documentatia online de la cplusplus.

Cod: Selectaţi tot

#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>

// clasa luata de la
// http://www.cplusplus.com/forum/beginner/317/

class timer
{
private:
    unsigned long begTime;
public:
    void start()
    {
        begTime = clock();
    }

    unsigned long elapsedTime()
    {
        return ((unsigned long) clock() - begTime) / CLOCKS_PER_SEC;
    }

    bool isTimeout(unsigned long seconds)
    {
        return seconds >= elapsedTime();
    }
};
// programelul nostru
int main ( void )
{
    // vrem sa inchidem programul la esc
    short esc = 0;
    // nr de secunde in care sa verificam
    unsigned long secunde = 5;
    // initializare clasa timer
    timer t;
    // ne spune daca am apasat control in ultimul timp
    bool ctrl_apasat = false;
    // atata timp cat esc nu e apasat
    while ( !esc )
    {
        // verifica daca esc e apasat pt a iesi din program
        esc = GetAsyncKeyState ( VK_ESCAPE );
        // verifica daca ctrl e apasat pt a porni timerul
        if (GetAsyncKeyState(VK_CONTROL))
        {
            // am apasat control si incepem sa cronometram
            if (ctrl_apasat == false)
            {
                ctrl_apasat = true;
                t.start();
            }
        }
        // daca a expirat timpul uitam ca am apasat control
        if(ctrl_apasat && t.elapsedTime() >= secunde)
        {
            ctrl_apasat = false;
            puts("intervalul a expirat");
        }
        else
        {
            // daca nu a expirat timpul si am apasat tasta 1
            if  (ctrl_apasat && GetAsyncKeyState(0x31)) // codul de la tasta 1
            {
                puts("Combinatie apasata");
                // si o luam de la inceput :)
                ctrl_apasat = false;
            }
        }
    }
    return EXIT_SUCCESS;
}
Lista cu enumerarile pentru fiecare tasta o gasesti in documentatia msdn referitoare la virtual-key codes . Daca vrei sa mai adaugi taste trebuie doar sa pui inca o conditie cu codul tastei respective.
Toate cele bune!
Campus
Scrie răspuns