Archyvas

2010.10 archyvas

Aš nekenčiu SAS!

2010.10.24 Xamas Komentarų: 1

Aš nekenčiu SAS!
Aš nekenčiu SAS!
Aš nekenčiu SAS!
Aš nekenčiu SAS!
Aš nekenčiu SAS!
Aš nekenčiu SAS!
Aš nekenčiu SAS!
:@ :@ :@ :@ :@

Durnesnės (NE)programavimo kalbos neteko matyti.

Kompiuterių tinklai, arba kaip išmokau programuoti CLR/C++ (Visual C++/CLI)

2010.10.18 Xamas Komentarų: 2

Beje, MS istorija buvo tokia:

1. Visual Basic
2. Bandymai pagerinti ISO C++ – padarytas Visual C++/CLI. Neva turėjo pagerinti GUI kūrimą. Gal ir pagerino, bet yra iš tiesų tai totalus CRAP. Ir tai sakau, perpratęs šią C++ kalbos perdarymo rūšį. Beje, google taip pat tam pritaria, ir dauguma Visual C++/CLI programuotojų perėjo prie:
3. C#.

Nesvarbu kad visi jie naudoja tą patį .NET framework’ą 4.0. Esmė ta, kad Visual C++/CLI kalba praktiškai yra tiesiog ‘useless’. Aš suprantu kad galima surasti ISO C++ programavimo kalbos panaudojimų vietų, tačiau C# neabejotinai yra geriau nei Visual C++/CLI.

Vienas iš tokių atveju – objektų multithreadingas – t.y. GUI po mygtuko paspaudimo pabandus paduoti ‘this’ pointerį į pačią windows formą, nelabai gaunasi daryti ‘mutual connection between objects’. Nes gaunasi begalinė rekursija, arba reikia matyt labai užsiknisti.

O ir šiaip – programinimas per prototipus – headerius, tikrai yra outdated dalykas per daug lėtinantis procesą. Java ir C#, C++ kalbą šiuo atžvilgiu daro į vienus vartus…

Beje, Echo Serverį programinau su standartiniu ISO C++ su CodeBlocks IDE, be GUI. Visual C++/CLI ir Visual Studio buvo reikalingas tik dėl Echo Kliento, nes jis buvo su GUI. Tik čia normaliai ir lengvai galima padaryti ir valdyti C++ GUI, negana to be didesnių keitimų veikia Java GUI(Swing) anksčiau rašytas kodas.

O iš tiesų tai parašiau tik 2 programas – Echo Serverį ir Echo Klientą Java 1.6 su NetBeans IDE. O tik po to tą patį kodą perkėliau į ISO C++, bei Visual C++/CLI.
Port’us tarp aplikacijų daryti jau ne kartą yra tekę: Java -> C#, Java -> Python, tad ir šis portas nebuvo naujiena. :) )

Vidutinis 1 programos dydis buvo ~1400 eilučių, na o visas 3 užduotis padaryti prisireikė mažiau mėnesio. Pradėjau rugsėjo vidurį, o spalio viduryje pabaigiau. :) )

100-ojo komentaro šventė

2010.10.06 Xamas Komentarų: 0

Visai nepastebėjau, bet dabar pamačiau, kad šiandien parašytas mano komentaras buvo jubiliejinis – 100-asis.
100 komentarų sulaukti pasisekė per beveik pusantrų metų. Nežinau, daug tai ar mažai, tačiau nei per daug stengiausi, nei ne.

Papildomai pasiGOOGLinau vieno įrankio ‘days passed since’ – ‘Date difference calculator’:
http://www.convertunits.com/dates/

Įvedęs skaičius:
http://www.convertunits.com/dates/from/Jun+23,+2009/to/Oct+6,+2010

Sužinojau kad praėjo jau 469 dienos nuo mano pirmojo blogo įrašo, o tai reiškia, jog per dieną parašau vidutiniškai po 0,21 blogo.

Hmm… gal reiktų pasiieškoti nacionalinės Lietuvos blogų lygos, galbūt į kokį sąrašą priimtų :D .

Qt VS Code::Blocks – reziumė (III-ioji dalis)

2010.10.06 Xamas Komentarų: 0

O dabar trupai:

Ką naudoti?
Atsakymas: greičiausiai teks naudoti abu, nes tik sudėjus bendrai galima gauti normalų C++ IDE įrankį.

Code::Blocks pliusai:

  1. Užima mažai vietos
  2. Paprastas ir lengvai suprantamas IDE
  3. Puikus debugeris
  4. Daug gerų įrankių – kodo eilučių skaičiuoklis, lib finder ir pan.
  5. Visai padorus IDE GUI kūrimas(ne kompilavimas) wxSmith įrankiu, drag n’ drop, event bind ir t.t.
  6. Patogus išorinių bibliotekų pridėjimas.
  7. Puikiai dirba su SOCKET’ais.

Code::Blocks minusai:

  1. Tragiškai sudėtingas GUI aplikacijų kompilavimas naudojant wxWidgets bibliotekas. (galbūt tik Windows terpėje)
  2. Nėra gero ‘on-write check’ neteisingo kodo ryškinimo – ryškinamos tik sintaksės klaidos, o ne loginės/semantinės.

 

Nokia Qt pliusai:

  1. Bene vienintelis įrankis, kuriame normaliai kompiliuojasi C++ GUI aplikacijos (neskaitant MS Visual Studio ir Visual C++).
  2. Gana paprastas Qt GUI drag n’ drop, event bind’as sudėtingesnis.
  3. Puikus ‘on-write check’ tikrintuvas, leidžiantis ištaisyti daugumą klaidų kodo rašymo metu.

Nokia Qt minusai:

  1. Sudėtingas ir griozdiškas, bei labai nepatogus IDE. Daug bereikalingų veiksmų, viskas padėta tikrai ne ten kur turėtų būti.
  2. Rankinis projektinio failo konfigūravimas. Labai nepatogu + galimybė įvelti ir nesugebėti rasti klaidos.
  3. Sunku sutvaryti su Socketais dirbantį projektą (man kol kas nepavyko).
  4. Problema pernešus projektą iš vienos direktorijos į kitą. Statinis kelio įrašymas.

Kai prisiminsiu daugiau punktų sąrašą papildysiu.

 

Kada rinktis CodeBlocks, o kada Qt?

CodeBlocks rinktis kai:

  • Norite kurti ‘Console’ tipo aplikaciją
  • Norite dirbti su Socket’ais.
  • Norite pradėti mokytis C++ ir norite lengvo, paprasto ir greitai perprantamo IDE.
  • Norite gerai išDEBUG’inti projektą.

Qt rinktis, kai:

  • Esate ‘advanced’ C++ kūrėjas.
  • Norite kurti C++ GUI tipo apliakacijas.
  • Norite perkelti Java aplikaciją į C++ ir kodo tvarkymo metu surasti ir ištaisyti kuo daugiau problemų.
  • Norite kurti komandinį projektą (Share on TeamServer), ir naudoti Source Control įrankius: Git arba Mercurial.

Qt VS CodeBlocks arba ‘kaip aš kūriau tinklų serverio programą’ II-oji dalis

2010.10.05 Xamas Komentarų: 2

Kadangi dažnai vadovaujuosi požiūriu(’share it!’), t.y. jeigu kažką žinai, kas gali būti naudinga kitiems, ir nepakenks tau pačiam, tuo pasidalink, tai va, truputi įvykių.

Visų pirma, tik perėjęs CGI -> HTML >~~> Pascal -> Php >~~> Pascal -> ASM -> C -> C++ -> Java -> C# -> Python >~~> Java -> C++ galiu pasakyti, kad C++ programavimas C++ (aš net nekalbu apie C) yra labai labai užknisantis, ir maždaug 2-3 kartus sudėtingesnis ir mažiau patogus nei netgi tokia kalba kaip Java. O pati java ir tokie toolsai kaip NetBeans dar nežinia kada prilygs tokiems toolsams kaip Visual Studio ir C# kalbai. Ir daugiausiai problemų atsiranda su C++ kalba tada, kaip prisireikia DEBUGGINIMO, GUI bei SOCKET”ų… Siaubizmas…

Taigi, mano idėja buvo tokia – paimti Java savo parašyti programą ir padaryti portą į C++.

Tokius dalykus jau yra tekę daryti – Php HipHop’e Php kodą keičiau į C++, C++ kodą į Php, pasiėmęs Java programą ją perrašinėjau Jython’ui (Python on Java), o Java programą perrašinėjau C#.

Ir galiu pasakyti, kad padaryti portą Java -> C++ buvo kol kas pati sudėtingiausia užduotis. Koks durnas yra C++ kodas kartais net keista.

Pvz. jeigu norite statinio metodo, tai headeryje rašote žodį static prieš metodo prototipą, o realizacijoje jau nebeįmanoma. Dar laimei kad yra toks dalykas kaip #include <vector>.

Tai va, pirmiausia Qt prieš mėnesį rašytame blogo įraše išvis išbrokavau kaip įrankį. Su Qt yra tekę susidurti ir prieš 3 mėnesius ir prieš pusmetį, vienam kursiokui darant operacinės sistemos projektą. Ir visus kartus aš Qt išbrokavau.

Bet pasirodo Qt buvo mano problemos vienas iš būtinų realizacinių sprendimų. O taip yra todėl, kad jis turi tikrai neblogą ‘debug’ą kodo rašymo (ne kompiliavimo metu). Jeigu CodeBlocks leidžia atidaryti Java projektą su *.cpp galunėmis ir nuėmus import, praktiškai pripažystą kaip VALID kodą. Todėl teko tą projektą atsidaryti su Qt programa, kuri mane būtent ir išgelbėjo. Pavyko paruošti pakankamai neblogą PORTą iš Java į C++. Tačiau kai ištaisiau dar vėliau kompiliavimo metu rastas klaidas, vėl susidūriau su Qt prastumu. Nepaisant prasto IDE, debugeris su “collect2: returned -1″ ir labai dideliu nenoru su SOCKET LIB’ais vėl išsekino mano kantrybės taurę. Todėl, viską ką buvau padaręs, persikėliau į CodeBlocks – IDE tūlsą su labai puikiu Debugeriu(kaip C++ kalbai), patogiu IDE, bei suknistu GUI kūrimu ir probleminių, ne kompiliavimo metu, klaidų radimu.

Na o Code::Blocks su Socketais dirba puikiai.

Jeigu yra nežinančių, kaip naudotis Echo Serveriu, tai atsakysiu:
1. Winsock 2 (libws2_32.a ) >>>>(daug geriau)>>>> Winsock I (libwsock32.a )
(T.y. Wsock2 yra FULL BACKWARDS COMPATIBLE su Wsock, ir turi naujų funkcijų, todėl geriau naudoti Wsock2.)

2. Taigi susikuriame ‘C++ Console Application’ projektą.

3. Tada ant projekto spaudžiame dešinį klavišą -> “Properties…

4. Project settings kortelėle spaudžiame mygtuką “project’s build options…”

5. Atsidariusiame lange spaudžiame ant kortelės “linker settings

6.Link libraries:” bloke apačioje spaudžiame mygtuką “add

7. Per [browse...] susirandame failą:

C:/MinGW/lib/libws2_32.a

arba (jeigu instaliavote MinGW kartu su CodeBlocks, nors, mano nuomone, tai blogas sprendimas, jeigu kaip ir aš naudojate kelis C++ IDE, o norite projektus mėtyti tarp vieno į IDE į kitą ir norite taupyti vietą) 

C:/Program Files(x86)/CodeBlocks 10.05/MinGW/lib/libws2_32.a

8. Pridedame tą patį prie Debug ir prie Release.

9. Dabar mūsų serverį reikės paleisti per kažkokį tai portą, geriausiai virš 10000, ir nenaudokite 80 (IE), 8080 (TFS, PostgreSQL, Skype, WAMP), 8000 (Python+Django server), nes neveiks. Taigi, spaudžiame:
Meniu -> Project -> Set programs’ arguments…

10. Prie debug ir release pridedame dalyje “programs arguments:”, pvz. “10999″, t.y. Jūsų serverio porto numerį.

11. Viską išsaugome. Susikeliate C++ Example Echo server aplikaciją, tik visur header failuose padarome pakeitimus:

Kodą:

#include "winsock.h"

keičiame į:

#include "WinSock2.h"

Beje, Visual Studio ir Visual C++ irgi turi savo alternatyvą, tačiau man daug paprasčiau viską padaryti pavyko būtent ne su Visual C++, o su Code::Blocks.

Visual C++ ketinu naudoti tik tuomet, jeigu nepavyks kliento(ne serverio) programos sukurti naudojant GUI per Qt. Visual C++ ir Visual Studio GUI Jus gana smarkiai pririš prie Windows’ų, tuo tarpu Netbeans ir Swing, Qt ir Qt GUI, bei Code::Blocks ir WxWidgets (kuris man taip niekad ir nesusikompiliavo) yra platform-independent.

Pastaba: Qt projetų GUI buvo atsisakęs kompiliuoti vien dėl to, kad Windows 7 buvau paredagavęs ‘environment variables’ ir prie PATH pridėjęs MinGW kelią. Jis turi būti application-controled, o ne iš Windows’ų nustatomas. Šį dalyką buvau padaręs, nes to reikalavo WxWidgets, bet taip ir pamiršęs buvau nuimti, o WxWidgets kaip neveikė, taip ir neveikė.

Pastaba 2: C++ echo serverio pilno kodo pavyzdžių nebus, nes yra toks saitas:

http://www.justfuckinggoogleit.com/

C++ kūrėjų IDE: Code:Blocks Vs Qt

2010.10.01 Xamas Komentarų: 0

Nors kartą nuo Qt, jau buvau nusisukęs, bet gavau rimtų argumentų, trumpam grįžti vėl. Tie argumentai – neva gerai veikiantis C++ GUI builder.

Nelaimei, rezultate nieko gero taip iki šiol ir nesigavo. Laimei, pirmiau išbandžiau šį dalyką su laptopu ir jame esančiais 32 bitų windows 7′aisiais. Ten bent jau example projektai veikė.

Windows 7 x64 atveju kuriant “Qt C++ GUI” projektą susidūriau su analogiškomis problemomis kaip ir ”Code::Blocks C++ wxWidgets GUI” atveju:

Build issues: CreateProcess: No such file or directory
Compile output: When executing build step ‘Make’
 

O dar bjauresnis dalykas yra tas, kad klausdamas visagalio “GŪGLO”, gaudavau siūlymą problemos ieškoti šiame bloge… Kitaip tariant, gūglas aiškaus atsakymo taip pat nežino.

O dabar truputi užstumsiu ant Qt ide:
1) Jau trejetą metų nemačiau tokio bajerio, kad visokius makefile’ų papildymus, reikalingus build papildomus LIB’us reiktų įrašinėti per text editorių į projekto tekstinį failą… T.y. Qt neegzistuoja tokia funkcija kaip “add library”, kuri yra visur kitur – Visual Studio, CodeBlocks, NetBeans ir t.t.
2) Ta programa – Qt – griozdiška. Užima bene 2GB tačiau taip ir nesupratau, ko ten pridėta, kad kas būtų reikalinga. Matyt didžiąją dalį svorio sudaro įranga skirta tik mobiliems telefonams skirtų programų kūrimui. Pastebėjimui – CodeBlocks instaliuotas užima vos kelis šimtus MB.
3) Ši programa iš pradžių pasiūlo tik vieną kompiliatorių, jo keitimas pakankamai sudėtingas, kai tuo tarpu CodeBlocks yra bent 20 kompiliatorių sąrašas.
4) Qt projektai NEVEIKIA perkėlus iš vieno PC į kitą, NetBeans, CodeBlocks ir t.t. be problemų projektus mėtau tarp kompiuterių. Problema ta, kad Qt dėl tik jam pačiam suprantamų savybių, naudoja ‘absolute path’. Todėl reikia naudotis Replace all funkcijomis.
5) Qt ide yra labai nepatogus, susigaudyti jame sunku, vaikščioti tarp failų – taip pat.
6) Qt išbandžiau dėl to, kad čia turėjo gerai kompiliuotis GUI projektai – bet taip nė velnio nėra.
7) Man nepatinka Qt debugeris – labai nepatogus, man nepatinka kompiliavimas – jis labai neaiškus, klaidos ieškoti turi pats, o ne tave prie jos numeta, kaip yra kituose IDE.
8 ) Qt projektai gali būti tik tame pačiame diske, tik C:\Qt\2010.05\qt\ direktorijoje.
9) Qt gali būti instaliuotas tik į “no space” direktoriją, t.y. neįmesiu aš jo ten, kur esu pratęs, t.y. C:\Program Files(x86)\… Po to taip ir užmiršti kelių bitų yra ta Qt programa – 32 ar 64.
10) Qt nepalaiko CTRL+D metodo(‘duplicate line’), codeblocks – palaiko.

Iš Qt pliusų – tai kol kas tik vienas. C++ Gui drag’n drop kūrimas gana patogus, tačiau pvz. Code::Blocks priskirti BackgroundColor – reikia vieno žingsio, čia reikia bene 5 žingsnių.

Reziumė paprasta – Qt trumpam pabandžiau dėl to, kad tikėjausi pakurti Qt GUI projektą. Bet, deja, toli gražu iki to, su Windows 7 x64 sistema.

Kategorijos: programavimas Žymos: , ,