Archyvas

Įrašai, pažymėti ‘C++’

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. :) )

Sudėtingas bitų išsitraukimas C#

2010.04.08 Xamas Komentarų: 4

int nibbleRequired = (int)Math.Truncate((double)updateBit / 4);
int reversedChangingHexNibble = oldRegValue.Length - nibbleRequired - 1;
char[] hexBitChar = {'0'};
hexBitChar[0] = oldRegValue[reversedChangingHexNibble];
uint hexBitValue = Convert.ToUInt32(System.Text.Encoding.ASCII.GetString(Encoding.ASCII. GetBytes(hexBitChar)));

Ypač paskutinė eilutė man patinka. Aišku galima SHIFTinti << ir >>, bet toje interpretacijos tas dalykas netinka. :)
Su php užtektų 1 eilutės, pvz. išsitraukti pirmus 3 bitus:
printf(“[%2.3s]\n”, decbin(hexdec(“0EFFA”)));

Microsoft nori išlaikyti C# ir VB tolimesnį kūrimą lygiagrečiai

2010.03.25 Xamas Komentarų: 0

Gana keistų minčių teko pasiskaityti iš C# vieno iš kūrėjų, bei dabartinio ’.NET product unit manager’. Kas keisčiausia, kad jis visas -.NET kalbas (VB, C#, F#, IronPython, IronRuby) vertina lygiavertiškai, ir planuoja, nepaisant to ar C# VS VB bus 50:50 ar 70:30 santykiu, visas naujas funkcijas, kaip supratau, nori kurti lygiagrečiai VB.

Aš asmeniškai apskritai nesuprantu, kokia reali prasmė tobulinti Visual Basic’ą, kuris kaip pamenu, dar 2002 pačio microsoft buvo paskelbta kaip ‘retiring‘ ir apskritai, kodėl nauji žmonės išvis turėtų domėtis Visual Basic’u. Asmeniškai neketinu parašyti nė eilutes Visual Basic’u(kurio aišku ir nemoku, ir mokytis neketinu). Sakyčiau greičiausiai čia būtų tu 30-50 metų JAV programerių, kurių JAV firmose yra begalės, ir kurie visiškai nepripažysta ‘outdated’ dalykų.

Beje, girdėjote apie Php hip-hop? Ne, tai nieko bendro su muzika neturi, na bet tiek kurie yra labai labai labai advanced programeriai php srityje, supranta apie ką aš :) . Remiantis hip-hop’u, visas C# ir Python lieka toli gale :) )). Panašu kad iš Php ir Zend pusės dar yra stiprių galimybių pasistūmėti į prieki.

Dar vienas dalykas – ar jau bandėt opera 10.51. Asmenškai esu apakęs – taip greit vykdomo JS kodo neteiko matyti. Mano 400-800 eilučių DHMTL parserius, ir objektų perkūrimais(new(), remove() [hate of IE6,7] kupino JS kodo vykdymas stulbinantis – IE ir Firefox lieka smarkiai gale. Opera NETIK kad VISIŠKAI neapkrauna CPU su parseriu, bet vykdo tarsi tai būtų ‘native application’, t.y. zero-load time’as :) … Didelis pliusas ir pagarba už tai, į operos pusę… Ir ahh, CSS 3.0 ir opera 10.5 tiesiog idealiai dera kartu… Na bet viską css 3.0 serijoje į vietą turėtų pastatyti IE9, kurio pasirodymas jau visai ne už kalnų(ar jau turite developers IE9 versiją – nelaimei, tik W6/W7, apie W5 MS nuomonė jau seniai aiški(nelaimei, ji nesutampa su mano nuomone apie W5) – kiek žinau sheduled ie realease yra 2011 Q1. Tik neaišku final, official ar pre-release.

Sumąsčiau, kad mokytis per lengva

2009.11.26 Xamas Komentarų: 0

Ne iš šio ne iš to. Na galbūt iš to, kad labai dažnai pagaunu save prisilaikantį idėjos apibėgti viską ką pajėgiu(ar net nebepajėgiu). Tai šį kartą neišsitekau su vienu LPD(laisvai pasirenkamas dalykas), tai toks dalykas kuris egzistuoja VU(manau ir kitur), kur mačiau du tikrai naudingus dalykus[python kursas ar C# kursas yra nenaudingi kursai - tai kuo puikiausiai įmanoma išmokti pačiam]. Taigi mano akys užkliuvo už dviejų – multi-kernel’ingo(C#) bei Mobilijųjų technologijų. Multi-kernel’ingas toks labiau pagal specialybę sakyčiau dalykas, iš jau hi-end srities. Bet vat mobiliųjų technologijų įrašas bakalaure ar magistre tikrai šiek tiek praplečia veiklos galimybes baigus studijas ar/ir studijų metu. Faktiškai tai sritis, kurią savaime, kaip kad Fizika(astronomija, el. dalelių fizika ir kt.) ar Matematika(Mat. analizė, algebra ir kt.) tikrai nepulsi narsiai gilintis niekieno neverčiamas. Tačiau tai labai įdomūs dalykai juos suprantant – tai juos išskirčiau prie tų, kurie itin tinkami tapti lankomų paskaitų objektu.

Tas pats ir su mob. technologijom, toks dalykas kuris labai platus ir manau tikrai vertas tapti klausomu kursu.

Taigi, kadangi niekaip nesigavo išsirinkti vieną, nuėjau į studijų skyrių ir pasiskolinau 3 kreditus iš kito semestro :D .

Vien jau sandas kaip neblogai atrodo(tikiuosi čia nėra ‘totally secret’ informacija kurią griežtai draudžiama publikuoti(?)):
GSM tinklo architektūros apžvalga. Septinta signalizacijos sistema SS7. Komutacinė stotis MSC. Namų ir vizitaciniai registrai HLR ir VLR. Bazinių stočių kontroleris BSC. Bazinės stotys BS. Trumpųjų žinučių centras SMSC. Paketinio duomenų perdavimo elementai GGSN ir SGSN. SIM kortelė, jos sandara ir paskirtis. Mobilus įrenginys ME. Pozicionavimas. Paslaugų apskaita. 3G/UMTS tinklas. Trumpųjų žinučių paslauga SMS. SMS centro architektūra ir veikimo principai. Standartai. Žinučių tipai: SMS-SUBMIT, SMS-SUBMIT-REPORT, SMS-DELIVER, SMS-DELIVERY-REPORT. SS7 MAP (Mobile Application Part) pranešimai tarp tinklo elementų HLR/VLR, MSC, SMSC. Žinučių teksto kodavimas: GSM alfabetas, dvejetainiai duomenys ir unikodas. Vartotojo duomenų antraštė UDH. Ilgosios žinutės. Specialios žinutės: EMS, WAP push, MMS indikacija. Adresacija. AT komandos. Žinučių perdavimo per IP protokolas SMPP. Apmokestinimas. Daugiaformačių pranešimų paslauga MMS. MMS centro architektūra ir veikimo principai. Standartai. MM1, MM3, MM4, MM7 protokolai. Tranzakcijų modelis. MMS išsiuntimas, priėmimas ir gavimo ataskaitos. MMS kodavimas. MMS prezentacijų kalba SMIL. MMS transportavimas: tarp šalies ir užsienio operatorių, el. paštu bei pridėtinių paslaugų tiekėjams VASP. MMS turinio adaptavimas. Apmokestinimas. Mobilusis protokolas WAP. WAP 1.x ir WAP 2.0 (wHTTP, HTTPS) protokolai. Standartai. Autentifikavimas, autorizavimas ir apskaita (AAA). Paketiniai duomenys GPRS, prieigos taškas APN. WAP šliuzas. WAP žiniatinklo (proxy) serveris. Tinklo adresų transliavimas NAT. Push proxy šliuzas PPG. WML ir xHTML puslapiai. Duomenų kešavimas. Mobilaus įrenginio savybių nustatymas pagal WAP antraštes ir UAProf. Kannel ir Apache 2.x moduliai.
Oj kiek daug visokių įdomių trumpinių :D .

Na anyway, jeigu ir išnaudosiu savo LPD rezervus, tai blogiausiu atveju iš didelio noro galima tų kreditų ir nusipirkti.

Bet dabar pagalvojau – jeigu koks matanas(mat.analizė) būtų koks LPD ar man kiltų nors kokia pagunda jį pasirinkti. Dėl kažkokių priežasčių nesu tuo labai tikras :D .

Pajutau hi-end programavimo reikalavimus

2009.11.01 Xamas Komentarų: 17

Anksčiau, išskyrus Asemblerio(assembler) užduotis, bei Disasemblerį(disassembler), kurio taip ir neparašiau, mokantis universitete, visad į pateiktas programavimo užduotis žiūrėdavau kaip į labai elementarius dalykus. Visų pirma dėl duodamų mėnesio terminų vien maksimaliam balui gauti, o visų antrą dėl nedidelių reikalavimo skirtumų.

Taip buvo ir su C, ir su C++ ir su Java pirmom užduotim. Tačiau dabar, praktiškai viskas pasikeitė. Faktiškai yra duodama viena savaitė naujai programai parašyti(terminai yra kas dvi savaitės, bet viena iš tų dviejų yra 95 proc. atveju esamos programos pataisymas pagal reikalautus pakeitimus).

O ir palyginus dviejų užduočių reikalavimus:

Užduotį reikia atsiskaityti iki 2009.10.26 imtinai

1. Kurios nors užduoties klasės vietoje sudaryti bent trijų klasių hierarchiją.
2. Aprašyti specifinį išvestinių klasių elgesį, perrašant reikiamus bazinės klasės metodus.
3. Bent vieną išvestinę klasę papildyti laukais ir metodais, kurių nėra bazinėje.
4. Pademonstruoti klasių polimorfinį elgesį vykdymui skirtoje klasėje.

Bei: 

Užduotį reikia atsiskaityti iki 2009.11.09 imtinai

1. Parengti parašytas klases klonavimui.
2. Vykdymui skirtoje klasėje pagaminti objektus su identiška būsena.
3. Išimtinių situacijų aprašymui sukurti savo išimčių klasių hierarchiją ir ją panaudoti.
4. Vykdymui skirtoje klasėje išimtis pagauti ir atspausdinti informatyvius pranešimus.
5. Prasmingai panaudoti static, final, static final specifikatorius kuriems nors klasių laukams ar/ir metodams.

Tikrai, kaip vienos savaitės darbui, reikalavimai tikrai gana progresyviai keliami. Ir jeigu visi universitetiniai dalykai būtų dėstomi tokiais tempais ir reikalavimais, manau nesunkiai būtų galima pamanyti besimokant ne VU MIF’e, o Kembridžo MIF’e :) . Ir mokslo kokybės nebūtų galima kritikuoti.

Taip, dauguma atveju tai priklauso nuo pačio dėstytojo. Šiuo atveju tikrai pasitaikė ‘programeris’ :) . Ir išties malonu tokiais atvejais rašyti programą, kuomet reikalavimai jai nebėra pirmoko lygmens :) .

Atsimenu vieno dėstytojo pretenzijas, kai parašiau programą per gudriai. Kadangi programos reikalavimas buvo rašytas Pascal programai, ir C++ buvo kaip alternatyvą, aš pasinaudojau ‘vector.h’ įrankiu ir labai lengvai realizavau programą. Tačiau visvien galiausiai teko perrašyti vector.h, t.y. pasirašyti savo ‘vector.h’ vien dėl to, kad realizuoti programos ‘tūpūmą’.

Beje, nusivyliau ir C++ universitetiniais reikalavimais. Niekas nereikavo panaudoti nei ‘template’ <T> tipo abstrakčių duomenų tipų, nei realizuoti grafinio interfeiso. T.y. bent jau primityvaus grafinio modeliavimo. Tai padariau tik savo noru ir nuožiūrą.

Ko pasekoje gaudavosi kuriozinė situacija, universitetinį pažymį ‘10′ galėjo gauti tie, kurie rašė elementarias programas.

Java programų atveju, kaip jau minėjau vienas dalykas tapo idealus – tai deadline’ai. Kas dvi savaitės, o praktiškai – kas viena. Reikalavimų progresija išties puiki. Neskaitant tūpų pirmųjų programų, kuomet atsiskaityt pirmas dvi pavyko per 30 minučių, o parašyt – tik pora dienų, nes reikalavimai joms buvo tarsi cheap-quality php tinklapio.

Mano supratimu, jeigu jau mokaisi VU, ir neva hi-end specialybėje, tai apskritai joje neturėtų būti žmonių gaunančių aukštus įvertinimus rašant žemo lygio programas. Ir reikalavimai turėtų būti ne hi-end, o labiau super-hi-end.

Nes priešingu atveju universitetas neteikia jokios naudos – gi universitetas siekia išugdyti kvalifikuotus specialistus. Bet kaip jis tokius gali išugdyti, kai ’sunkiausiai’ semestro programa ‘tenkinanti’ reikalavimus teužima vos 700 eilučių ir parašoma per dieną-dvi. Ir tokia programa gerų geriausiai teišnaudoja vos pusę programavimo kalbos galimybių.

Ir po to tokie specialistai eina dirbti į įmones. :) Nieko stebėtina, kad pačios įmonės po to turi inverstuoti tūkstančius į darbuotojų kvalifikacijos kėlimą.

——-

Kitas aspektas – tikrai neturėtų būti taip, kad visus semestro laboratorinius programavimo darbus pavyktų atsiskaityt vos per pirmas 4-5 semestro savaites kiekvienai programai skiriant vos viena-dvi dienas darbo.

O to esmė vėlgi, kaip jau ir minėjau – tiesiog programų sudėtingumo kilimo kreivė yra kone horizontali, nors pagal Kembridžo dėsnius ji turėtų būti bent jau geometrinės progresijos arba netgi eksponentinė.

Galbūt ir tokiu atveju būtų įmanoma atsiskaityti darbus per 7-8 semestro savaites, bet tokiu atveju vienai programai mažiausiai 4 pilnų dienų gilinimosi į prog. kalbos galimybes ir jos realizacija prireiktų, ir bent jau gavęs diplomą studentas galėtų sakyti kad jis kažko vertas.

Dabar gi gaunasi taip, kad ir tas, kuris rašo 3000+ eilučių programas realizuodamas paskutine ’sunkiausia’ semestro užduotimi 90+ proc.  prog. kalbos esminių galimybių, ir tas, kuris rašo 600-700 eilučių programas, realizuodamas vos 40-50 proc. prog. kalbos savybių, gauna lygiai tokius pačius diplomus. Negana to, jeigu pastarąjam geriau sekąsi antriniai specialybės dalykai, jis gali būti netgi aukščiau už pirmąjį žmogų.

Taigi ar tame yra logikos? Manau, kad ne.

Žinoma, visada atsiras prieštaraujančių, kad reikalavimai programoms yra ‘kosminiai’.

Bet tada kyla natūralus klausimas tokiems žmonėms – ko Jūs einate į tuos universitetus?

Kitas kuriozinis dalykas – universitetuose praktiškai nedėstomas Php. O C# dėstomas minimaliai. Kas dar kurioziškiau – realybėje realūs darbo užsakymai būtent sudaro 90 proc. būtent šioms programavimo kalboms. :)

Tačiau itin uoliai išdėstomas ‘pascal’is’. Ir turbūt būtų išdėstytas dar uoliau, jeigu ne galimybės pakeisti pascal į C++ leidimas antrame ir tolimesniuose semestruose universitete. Tačiau visgi visi dėstytojai ‘pasikaustę paskalyje’, ir kartais gana juokinga būdavo žiūrėti kaip jie vertina ‘C++ kodą’ :) . O supratę, kad C++ tai padaryti be galo paprasta ir lengva atsidurdavo keblioje situacijoje – universitetiniai reikalavimai tiesiog nėra ruošiami aukštesnio lygio programavimo kalboms.

Tai tiek minčių apie mokslo kokybę Lietuvos universitetuose. Šiuo atveju, bene geriausiu laikomame ‘VU’. Skirtumas tas, kad nuo šių metų fux’ai už tai dar moka ir kelioliką tūkstančių litų kasmet :) . Argi ne kurioziška :) .

Java, C++, C#, Php, Pascal redaktoriai ir kompiliatoriai

2009.09.12 Xamas Komentarų: 2

Pamaniau, pasidalinsiu mintimis ir atradimais, padarytus per tuos studijų ir iki studijinius metus.

Yra daugybė programavimo kalbų ir daugybė jų redaktorių.

Šiaip dažnai esu gana alergiškas ‘viskas viename’, bei ‘milžiniškos apimties’ programoms. Todėl renkuosi alternatyvas.

Šį kartą skip’insime, terminal’ą, ir Kubuntu, Linux 5 ir pan. pingvinus, nes visgi namuose dirbu XP langais(Windows XP SP2)

Taigi nuosekliai:

Pascal(programavimo kalba nuo kurios mane pykina).

Kompiliatorius: Free Pascal

Redaktorius(Source): Free Pascal (LT versija)

Beje LT versija yra tikrai puikiai paruošta, ir EN varianto tikrai nereikia

Alternatyvos: Senutėlis Turbo Pascal, ir dar keletas nereikšmingų

C/C++ :

Unversitete ir pan. bandys siūlyti visad matyt “Dev C++” programą, kuri mano nuomone po mėnesio darbo ja, yra tikras nieko vertas šlamštas. Ja nebent ‘makefile’ patogiau pasiredaguoti, t.y. dalyką kuris taip pat yra atgyvena(turiu omeny redagavimą pačiam)

Na arba iškart bus siūlomas maksimalizmas – Microsoft Visual Studio. 5 GB instaliuotas gigantas.

Aš asmeniškai pasirinkau: Code::Blocks (CodeBlocks) . Ši programa nėra didelė – užima vos ~100MB, tačiau tikrai yra tas ko bent jau man ir reikia. Ir tvarkinga, ir funkcionalu, ir kur kas geriau/patogiau už “Dev C++”, bei nėra tokia griozdiškai kaip Visual Studio. Be to jos kompiliatorių ir derinimo terpė labai interaktyvi, taip kad galima sakyti jog galima pasirinkti beveik bet ką.

Code::Blocks yra ir kompiliatorius ir puikus redaktorius.

C# (Microsoft’o Java arba ‘užturbintas’ Pascal’is):

Nesu didelis šios kalbos mėgėjas, bet čia be abejonės lyderis yra M$ tools’as “Microsoft Visual Studio”.

Java:

Pagrindiniai įrankiai: NetBeans, JBuilder bei Eclipse. Kol kas labiausiai sužavėjęs yra “NetBeans”, jeigu tiksliau, tai “JDK with NetBeans IDE Java SE bundle” (JDK – Java Developer Kit). Beje JDK įmanoma atsisiųsti tik iš Sun tinklapio :D . Download’as pilnos Java yra ~135MB, o instaliuota ~430MB, kas gal ir nėra labai mažai, bet programa tikrai gana puikiai susitvarko su mano poreikiais.

Php grupė(HTML, CSS, Php, JavaScript,MySQL DB):

Mano mėgstamiausia :) . Redaktorius Php sąsajai be abejonės Notepad++. Gana aiškus lyderis šioje srityje. Nors teoriškai galima būtų užleisti ir kompiliatorių, bet tai nėra prasminga.

Kompiliatorius šiuo atveju yra – serveris kompiuteryje EasyPhp . Turi puikią lietuvybę ir yra labai paprastas naudoti. Tai tarsi patobulintas WAMP atskirų dalių serverio instaliacijos procesas.

 

———

O dabar trumpai:

  • Pascal redaktorius: Free Pascal (LT)
  • Pascal kompiliatorius: Free Pascal (LT)

 

  • C++ redaktorius: CodeBlocks (Code::Blocks)
  • C++ kompiliatorius: CodeBlocks (Code::Blocks)

 

  • Java redaktorius: NetBeans
  • Java kompiliatorius: JKD with NetBeans

 

  • C# redaktorius: Microsoft Visual Studio
  • C# kompiliatorius: Microsoft Visual Studio

 

  • Php redaktorius(+CSS, JavaScript,HTML,MySQL DB): Notepad++
  • Php kompiliatorius: EasyPhp (LT)