Archyvas

Kategorijos ‘programavimas’ archyvas

C# geek’ams :D – force’iname Windows Form’os refresh’ą

2010.04.20 Xamas Komentarų: 0

Šitas dalykas daug nervų sugadino, kol susigaudžiau kame replės.
O esmė ta, kad priskiri delegatą eventui, ir kai delegatas executina funkciją, kuri nuskaito duomenis iš user RTFBox input’o įrašydamas į List variable’ą per Add(), o Windows forma buvo sukurtas turinti ‘DataGridView’ objektą, kurios konstruktoriuje yra aiškiai nurodyta:

public StackForm(ref Stack refToStack)
{
    <...>
    this.stackDataGridView.DataSource = refToStack.stackData;
    <...>
}

Padarius bet kokį Add’ą, Remove’ą, Forma elgdavosi labai keistai – tai sureguodamo, tai nesureguodamo, tai rodydavo kad pridėtų elementų nėra, arba rodydavo nebeegzistuojančius elementus, o ant jų paspaudus execeptionus pradėdavo mėtyti.

Taigi teko susirasti WorkAround’ą :D , ir šitas bajeris labai efektyviai veikia, tiesiog po bet kokių pokyčiu List variable’a(aka kolekcijoje), formos data bind’o update’ą forsuojame iškviesdami funkciją:

public void updateStackData()
{
     // Force a refresh of the DataGridView
     ((CurrencyManager)stackDataGridView.BindingContext[this.stack.stackData]).Refresh();
}

Tikiuosi kam nors padės :) .

128 bitų Operacinė juda į priekį (128bit OS developer blog #1)

2010.04.19 Xamas Komentarų: 4

Intel AVX, IA-128(Intel Iatanium), Intel x32-64 developer manuals, bei C#, C#, C# … Tūkstančiai eilučių C# kodo(tiksliau – jau turbūt ir dešimtimis tūkstančių eilučių galima būtų skaičiuot :D ).

v0.99 pre alpha versiją jau turim :D :

1. v 0.99 pre-alpha versijos galimybės:

Tvarkingai veikia neveikia nei vienas režimas :D .

+/- daugmaž veikia IA-32ee, bei IA-32e režimai, ‘legacy mode’ bloke.

8 lygių puslapiavimo lentelėje(PML8…PML4, PDPT, PDT, PT) 80 proc. atveju adresai nepasiklysta :D

aprašyta ~600 cpu komandų ir jų variantų, iš jų +/- ~30 tvarkingai realizuotos (570 left :D )

Galutinėje versijoje turėtų būti realizuota ~200 komandų ir jų variantų, beta versijai pilnai turėtų pakakti ir ~50 veikiančių komandų :D .

Kalbų palaikymas – angliška versija dar labai smarkiai buksuoja, tad kol kas tik mono-language support (sorry, englishman :D ).

————

Final release date ????-??-?? ;D. O šiaip tai – Summer, 2010 :D . (I guess??? :D ).

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.

100+ eilučių SQL užklausos :))

2010.03.08 Xamas Komentarų: 0
Iki praėjusių metų vidurio į SQL užklausas taip smarkiai niekados neįsijausdavau. Būdavau linkęs viską labiau iš PHP pusės realizuoti, na o kadangi teko dar ir tokį kursą išklausyti pavadinimu DBVS, tai tuo pačiu ir labiau pačiu SQL ir jo galimybėmis pradėjau domėtis.
Anksčiau teikiau pirmenybę new DateInterval(“P7D”) vietoje ADDDATE(CURRENT_DATE,7) time() vietoje UNIX_TIMESTAMP() vartoti, praktiškai beveik nenaudodavau UNION’u, bei CASE – abu pastaruosius dažniausiai realizuodavau kaip atitinkamai dvi užklausas bei if’ais/switch’ais. Beto, tokio pomėgio 10 ir daugiau INNER/LEFT/RIGTH JOIN’ams irgi kažkaip neturėjau, tai realizuodavau keliomis užklausomis.
Tik vieno dalyko gaila, kad PHP nepalaiko komentarų query_mysql(..) dalyje. Na dalinai turbūt dėl to, kad įmanoma padaryti tik vieną užklausą, o bet tačiau, kai užklausos tampa 100+ eilučių ilgio, tai pasikomentuoti kartais būna visai naudinga(apie brutalų:
'dabar skaičiuosime tikrąjį id' AS comment_1
nekalbu).
Aišku, kaip programuoju Zend’u, tai ten viską gamina autogen’as su savo:
$select->from( … table and cols… );
$select->where( … search… );
$select->order( …sorting… );

Bet, tų Zend projektų yra ne visi, ypač tie, kuriems turiu daryti Maintenance’ą, kurie buvo buildinti 5-6yrs ago.

:)
Tai vat, šiandien visai netikėtai pasižiūrėjau į ‘trumputę’ užklausėlę kurią parašiau vienai GIS(geografinė-informacinė-sistema), ir pamačiau kad mano QUERY’is jau lenda ties 100+ lin’ų riba. :)
100 eilučių MySQL užklausa

100 eilučių MySQL užklausa

Ir šitas dalykas asmeniškai kodo švarumo atveju daug kokybiškiau atrodo, kaip pačiam teko stebėti:
desing paternai vienur (nesvarbu ar tai tiesiog pre-html output’o paruošimas su sugeneruotais array variable’ais, ar paruoštas SMARTY autogen templat’as), gen php kodas antroj vietoj, funkcijos – trečioj, klasės – ketvirtoje, include/require libai dar kitur, o štai dabar jau ir sql queriams pradėjau naudoti atskirą prefixą  – t.y. excludint’i iš code failų į atskirą failą :) .
Ir tai yra labai logiškai, ypač tais atvejais kaip SQL queriai yra 100+ eilučių :) .

Apie GOTO naudojimą, Php 5.3.0+

2009.12.27 Xamas Komentarų: 0

Taigi, Php 5.3.0 įtraukė GOTO, kaip JUMP label’į.

Gal ir nebūčiau rašęs šio įrašo, bet pačiam prisireikė labai keisto dalyko – perkelti kinamąjį į ankstesnį kodo tašką:

if(isset($var)) { $best_product_to_print = $var; <.. PRINT IT ..> }
$var = best_price_of_inserted(insert_lots_of_products($query_arr)));

Nelaimei su $output = ob_get_contents(); Php leidžia tik override’inti pvz. <title></title> tagu’s, bet ne užsettinti kintamuosius. Tad čia add_to_header(); function nepanaudosi.

PS. Jeigu kam nors kyla klausimas – kada to reikia, tai atsakau: jeigu įmonė pasirašo softą, ir jį pardavinėja krūvai įmonių. Po to kažkuriai vienai prisireikia pakeisti algoritmą kažkokiai vienai tos sistemos funkcijai. Kadangi niekas neduoda kišti nagų prie branduolio kodo, yra galimybė jį overridinti iš MODULIŲ kodo. Problema ta, kad iki šiol to pakako tik ob_get_content(); pagalba, replace’inant HTML turinį. ŠIUO ATVEJU irgi PAKAKTŲ perrašyti HTMLą. problema yra ta, kad failų ten yra šimtai, o perrašomų html kodo eilučių būtų tūkstančiai, kadangi priklausomai nuo parametrų algoritmui, skirtingas turinys yra generuojamas. Todėl logiškiausias dalykas būtų funkcija: submit_to_code_index(‘variable_name’,'variable_value’); Kadangi failai tarpusavyje bendrauja parametrų pagalba, reiktų periimti kodo valdymą, bei pateikti naujas parametro reikšmes.

Todėl pasiskaičiau keletą įdomesnių temų stackoverflow’e apie GOTO in Php.

http://stackoverflow.com/questions/723324/php-and-the-goto-statement-to-be-added-in-php-5-3

http://stackoverflow.com/questions/1900017/is-goto-in-php-evil

Ir kaip supratau, vienintelis siūlymas naudoti GOTO yra tik debug tikslais(net patys php dev’ą tą rašė). Kitaip tariant teisingiausiai GOTO apibūdino šis komentaras:

Unless you are programming in assembler, GOTO should always be treated the same way as the life vest of the airplanes: it is good to have them available, but if you need to use them it means that you are in big trouble.

Tas pats ir pluginų rašymas atgyvenusioms sistemoms – jeigu tau nurodo – nesvarbu kaip, privalai rasti sprendimą su tuo ką turi(šiuo atžvilgiu negali keisti branduolio kodo), tokiu atveju matyt galima būtų naudoti goto, arba kažkokiu kitu būdu perimti srautą( stackoverflowe iškėliau tokį klausimą).

Beje net patys Php dev’ai savo manual’e apie GOTO( /control-structures.goto.php ) yra įdėję:

Why not goto

Why not goto

Dar vienas komentaras iš StackOverFlow’o labai į temą:

in college i always used to use goto statements when i wanted to piss off my professors, muahahaha….the programs would of course still work perfectly but i could always see their eyes twitching when they’d come across those little statements espais

:)

Kitaip tariant, nėra pateisinamos priežasties naudoti goto, bet kartais nėra kitos išeities, jeigu nenori būtu ‘tuoju, kuris perkurs neteisingai veikiančią sistemą iš pagrindų‘. Tegu tai daro kiti :) .

100 ir 1 priežastis kodėl MySQL >> IBM DB2. Arba kodėl protingi naudoja MySQL

2009.12.04 Xamas Komentarų: 0

[PAPILDYTAS - 2009.12.11]

Atsakom į esminį klausimą:

“Why Mysql is hundred and one time better than IBM DB2″.

Pirma:

MySQL’eriai rašo: LIMIT 12;

IBM DB2’seriai rašo: FETCH FIRST 12 ROWS ONLY;

Antra:

MySQL’eriai rašo: LIMIT 67,12

IBM DB2’seriai: nervinasi ir rašo lioliasdešimt eilučių užklausą

Trečia:

MySQL’eriai rašo:

(SELECT a FROM b WHERE c LIMIT 67,12)
UNION (SELECT a FROM b WHERE c LIMIT 111,2) ORDER BY a LIMIT 16,21

IBM DB2’seriai:

priversti pasiduoti, nes jų galvoje užklausos kodo
kiekis įgavo atžymą brain_overflow=1.

Ketvirta:

Mysql’eriai rašo:

auto_increment

IBM DB2’seriai rašo:

GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1)

Penkta:

Mysql’eriai rašo:
$man_ne_zhopa = mysql_insert_id();
IBM DB2’seriai rašo:
$i_luv_word_identity = IDENTITY_VAL_LOCAL();

Čia iš esmė tas pats, tik kad Mysql’as panaudojo savo brand’ing funkcijos pavadinimui.

Šešta:

Mysql’eriai rašo:

CREATE TABLE IF NOT EXIST agurkai

IBM DB2’seriai rašo:

Begin atomic
 if( exists(SELECT 1 FROM syscat.tables
        WHERE tabschema = 'MYSCHEMA' AND tabname = 'agurkai')
  )
then DROP TABLE MYSCHEMA.agurkai
else CREATE TABLE MYSCHEMA.agurkai;
 end if;
 End

Septinta:

Mysql’eriai rašo:

 DROP TABLE IF EXIST agurkai

IBM DB2’seriai rašo:

Begin atomic
 if( exists(SELECT 1 FROM syscat.tables
        WHERE tabschema='MYSCHEMA' AND tabname='agurkai')
  )
then DROP TABLE MYSCHEMA.agurkai;
 end if;
 End

Aštunta:

Mysql’eriai rūpinasi resursų taupymu(field2 išnaudojam int(11), su 4******…..) :

CREATE TABLE a(
 field1 bigint(11) unsigned NOT NULL,
 filed2 int(11) unsigned NOT NULL
))

IBM DB2’seriams vietos taupymas visiškai vienodai(aukštesnę užklausą db2 parašyti gausis tik taip):

CREATE TABLE a(
 field1 bigint NOT NULL,
 filed2 bigint NOT NULL
))

Devinta:

Kad netaupo vietos DB2’seriai, jau pastebėjom. Bet kad jie apskritai įgnoruoja ‘taupius’ laukelių tipus, t.y. tinyint’ą tai dar ‘protingiau’…

Dešimta:

Ignoruoja ir plačius laukelius jie, t.y. 65535′iolio TEXT’ą, bei ilgesnįjį jo brolį LONG TEXT’ą . Vietoj jų tik CLOB’ą gali pasiūlyti.

Vienuolikta:

MySQL šitas dalykas veiks:

FOREIGN KEY organizer_validation(identity_code)

O štai DB2 jau spjaudysis errorais – neva DB2 nesupranta ilgesnių nei 18 simbolių.

Dvylikta:

Mysql’e veiks ir šitas dalykas:

field3 varchar(255)

O štai DB2 šis limitas nestandartinis – ir maksimalus kuris veiks:

field3 varchar(254)

Turint omenyje kad PC viskas dvejetainiame/šešioliktainiame variante, tai MySQL’o [0-255] rodos į temą, o štai DB2 matyt kažkur kitur ;)

Trylikta:

O čia dar vienas bajeris, privertęs mane nusijuokti iš DB2 ‘developerio’ atsakymo.

Man įdomu ką IBM DB2’seriai atsakytų į klausimą – aš noriu nustatyti naują auto_incement reikšmę(tarkim prirašiau šlamšto, ir dabar vėl noriu kad skaičiuotų nuo 97). Mysql’eris parašys:

ALTER TABLE `table name` AUTO_INCREMENT=new_value;

DB2′erio pirmoji mintis:

aaaaaaaaa…………oooooooooooo……. hmmmmmmmm……????…. Nobody use that.

Ir tada duos ‘klasišką patarimą‘(paimta tiesiai iš IBM DB2 vieno iš support saitų):

What the heck are you doing that you need to do such a thing.
Either make you ID so big you'll never have to worry about it BIGINT
or DEC(31,0) if you are afraid of liability of your descendants ;-)
Or don't use identity to begin with and use a natural key.
Cheers, Serge
--
Serge Rielau
DB2 Solutions Development
IBM Toronto Lab

Jo, ilgam prajuokino. Na visad galima spręsti problemą įvairiai. Tarkim aš nežinau kokio dydžio bus duomenų masyvas mano programoje – tai velniop tuos pointerius ir ‘dynamic lists’ – susikuriame kvadratilijonį kvadratilijonuoju masyvą, išskirdami 100GB vietos harde ir galvos neskaudės. Sakyčiau būtų tikrai TOK(tobulai optimalus kodas). ;) :D :D:D

Ale linksmi žmonės dirba IBM. Vietoje pripažinimo kad FAIL tas jų DB2, pasakys ‘nafig tau to reikia:D .

————

Na bet galiausiai atsirado dar didesnis proto šviesuolis, kuris pasiūlė sukurti trigerį kuris executinis RESTART funkciją kas kuris laikas. Savo nuomonę apie trigerius(kuri yra vieša paslapis), aš išsakysiu įrašo pabaigoje.

Kitas pasiūlė nudropinti visą lentelę ir iš naujo perkurti :D .

——————-

………. Ir taip toliau :)

Tikiuosi visiems aišku “Why IBM DB2 sucks very much”.

Ir kaip pasaulyje dar gali būti žmonių kurie reikalauja programuoti šita kledaro lygio kalba.

Čia buvo retorinis pamąstymas.

—————

Pabaigai: Mano asmeninė nuomonė apie trigerius:

 sux sux sux sux sux sux sux sux sux sux sux sux sux sux sux fuck sux
 sux sux sux sux sux fuck sux sux sux sux sux sux sux sux sux sux sux
 sux sux sux sux sux sux sux sux sux sux sux sux sux sux sux fuck sux
 sux sux sux sux sux sux fuck sux sux sux sux sux sux sux sux sux sux
 sux sux sux sux sux sux sux sux sux sux sux sux sux sux sux

Beje, ar tai tik sutapimas – bet trigerį pirmą kartą ‘life ever‘ panaudojau tik universitete, kai dėl jo privalomo naudojimo tiesiog ‘užlipo’. Vienintelis atvejis kada trigeris gali būti naudojamas, tai tik tuomet kai kartu neprogramuojama pati programa – čia praktiškai trigeris leidžia interpretuoti programos kodą. Ir realybėje(teorija – gražu, realybė – kai būna iš tiesų), bet kuriam ‘newly hired software engineer’ yra daug papraščiau CTRL+F pagalba(net ir find in files atveju), išsiaiškinti ką kode reiškia dalis:

UPDATE ".DB_CLIENT."
SET client_new_orientation='".$core->validate_orientation($client['ornt'])."'
WHERE client_id=1

Nei sėdėti 2 valandas ir nesuprasti kodėl gaunami SQL_STATE errorai atlikus trivialią užklausą:

UPDATE clients SET savings_after_robery=10000.49 WHERE client_id=1

Dar mane kamuoja kažkokia mistiška nuojauta, kad per artimiausius n-metų aš jo daugiau galiu ir nebepanaudoti. :)

PS. Dar aš kartais ignoruoju ‘read more’ dalį. Todėl visą blogo įrašą šį kartą atpyliau į “excerpt’ą”.

Kategorijos: programavimas Žymos: , , , , ,

XML – Amadeus, PNR, CRS, GDS, SOAP; Python VS Php

2009.11.24 Xamas Komentarų: 7

Prieš kelis mėnesius maniau kad apie XML’ą žinau didžiąją dalį ir ten nieko naujo būti negali. xml.gz kūrimus/eksportavimus/nuskaitymus laikiau sudėtingesne užduotimi.
Tačiau, kaip sakome, technologijos ir reikalavimai vietoje nestovi.

Todėl visai nenustebau gavęs requirement listą su reikalavimais:

  • Įsisavininti ir tinkamai panaudoti SOAP duomenų perdavimo šifravimą vykdant prisijungimus per XML.
    Pilnai įsisavinti Amadeus sistemos sąsajos kvietimus ir panaudojimus.
  • Suprogramuoti ir automatizuotai įvykdyti(sheduled cronjobs) P.N.R.(part of <– CRS) transakcijos importus automatizuotų modulių pagalbą.
  • Naudoti GDS sitemų gražinamą informaciją tiesioginės transakcijos būtu.

* Tiems, kas nežino:
PNR - Passenger Name Record
CRS – Computer reservations system
GDS – Global Distribution Systems

Dar vienas dalykas kuris mane kiek nudžiugino yra tai, kad vis dėl to iš universiteto naudos kažkiek yra. Iki universiteto UML diagramų paišyti ir jų skaityti tikrai papildomų pastangų mokytis nedariau. Turėjau galima sakyti tik pačius pagrindus, būtinus suprasti reikalavimus.

O štai dabar jau turbūt gerą pusmetį pastebiu kad visi projektai kuriuos kuruoju/programuoju ar dalyvauju realizuojant/programuojant eina su milžiniškomis *.pdf dokomentacijomis:

  • prieš metus-pora 80 proc. atvejų jos būdavo 1-5 A4 puslapių dydžių, be UML diagramų, ir tik 20 proc. turėdavo primityviais diagramas, būtinas suprasti reikalavimams.
  • pastarąjį pusmetį dokomentacijų dydžiai vis augo jau geometrine progresije. Ir pastaruosiuose projektuose vien dokomentacijoms perskaityti reikia skirti keleta dienų, kadangi jų dydžiai pradėjo viršyti 100-140 puslapių.

Na ir čia jau turbūt nenuostabu, kad visi tie ‘docummentation’ai kupini sekų, būsenų, ER, klasių(class), veiklos(activity), objektų(objects) ir netgi diegimo(deployment) diagramų.

Todėl dabar jau turbūt užtikrintai galiu sakyti, neįsisavinus UML’o praktiškai nieko stambesnio nesuprogramuosi, nes requirementus ir realizaciją aprašo matomai specialūs UML ‘profai’, kurių atrodo kiekvienoje stambesnėje įmonėje yra net po keletą.

Na o iš viso to seka, kad funkcinis programavimas tampa praktiškai neįmanomas norint teisingai realizuoti reikalavimus. Viskas praktiškai seka tik per objektus.

———-

Python:

Vis dažniau pastaraisiais mėnesiais į mano valgiaraštį patenka prieskonis ‘Python’. Todėl visai nenustembu kad Gūglas gražina 28 milijonus rezultatų su fraze ‘Python VS Php’.

Vienas žmogelis kaip argumetą ‘why the php is the greatest programming language in the world’, pateikia šias eilutes:

$a = 'var'; $b = 'iable';
$variable = 'var';
echo ${$a.$b};
$filter = array("name", "email");
foreach($filter as $v) $$v = $_POST[$v];

Šaunu, ar ne? :) Nedaugelis programavimo kalbų gali pasigirti tokia realizacija :)

Pitonu paskutinės dvi eilutės būtų realizuojamos taip:

post = {'name': 'ijoshua', 'email': 'spam@example.com', 'extra': 'data'}
filter = ['name', 'email']
for k in filter: locals()[k] = post[k]
print name, email

Kuri programavimo kalba yra geresnė, atsakymai ir ginčai turbūt būtų beprasmiai, tačiau bendrai ką pastebėjau, tai, jeigu žmogus programuoja Php, jis yra linkęs po kiek metų išmokti ir Python(o jeigu tiksliau, tai Ruby on Rails programavimą, na bet Python turbūt būtų geriausias jų atstovas). Ir būna nemažai atveju netgi taip, kad tas programuotojas pereina nuo Php į Python.
Tačiau visi Python’instai kažkodėl labai dažnai pasisako prieš Php, ir nė nebando pažinti šios programavimo kalbos subtilybių.

Python(ir viso ruby on rails) privalumas yra tas, kas jis pasižymi geresniu skaitomumu nei Php. Ten nebėra kabučių print’e, kabliataškių eilutės pabaigoje, nebeliko ir laužtinių skliaustų {}. Praktiškai kodas turėtų išties gebėti būti rašomas ir skaitomas greičiau. Bet ne visada praktika atitinka tikrovę.

Tačiau,

  • Python’as turi kur kas ribotesnį funkcijų sąrašą, metodų, operatacijų sąrašą nei Php.
  • Kitas dalykas, nors ir sakoma kad Python turi tokį pat gerą documentation’ą, tačiau aš visgi tikrai pastebėčiau, kad bendro internete išplatinto ‘example’ kodo, bei tutorial’u atžvilgiu, bei ypač DAUGIAKALBIŠKUMO šitiems dalykams(Php LT doc’as interneto platybėse yra tikrai didžiulis) atžvilgiu Php yra geresnėje situacijoje.
  • Trečias dalykas, visgi vėl tie patys Python naudotojai pripažysta, kad Php web terpėj kai kuriais atžvilgiai tikrai yra paprastesnis – pvz. sql prisijungimu ir pan. Tačiau Python’as dar yra plačiai taikomas Desktop programoms ir sisteminiam script’inimui, ko nėra Php atveju.
  • Python’as praktiškai turėjo sujungti C++ ir Php į kažką vieną, Ruby on Rails pagrindu. Kadangi Python’u suprogramuotas Jūtūbas, tai galima būtų sakyti, kad jiems tai neblogai ir pavyko.
  • Php kompiliavimo/vykdymo laikas yra geresnis nei Ruby on Rails atveju, t.y. naudojant pvz. Python. Tačiau jeigu labai aktualus greitis tai tam pasitelkiamas ASM arba išvis tiesiog 0/1 kodas.

 

Na bet tai kol kas tik teoriją. Phyton teks išmokti iki kitos vasaros, lygiai taip pat kaip teko mokytis C# praėjusį šių metų pavasarį. Kaip sakoma nuo reikalavimų nepabėgsi – jeigu jau kartą teko rašyti WWW tinklapį C#(.NET)’u ir tą padaryti pavyko sakyčiau, kaip pirmą kartą dirbus konkrečiai su C# (.NET), tai matyt turėtų pavykti ir Phyton’u.

Na, nors projekto su Python’u end-line’as dar už bene pusmečio, tačiau jau šiandien parašiau pirmąsias 70 eilučių Python kodu. Liko dar 9930.  Aišku antrąjį skaičių primečiau kreivai iš akies, bet +-~ kažkas tokio :D .

Tad skirtumas tarp studentų besimokančių Python’ą universitete ir darbe matyt tiktais vienas – čia tau dar ir sumoka už tai kad tai išmoktum :).
Apie universitetines elgetos dydžio stipendijas nekalbu. Nors, tiesa sakant, turbūt per gerai pasakiau – tiksliau būtų ‘Prienų bobutės pensijos dalis išskaičiavus pragyvenimo išlaidas’. Taip, galbūt ir atsiras smerkiančiųjų, tačiau manau 95 proc. studentų pasirinktų ‘darbas+studijos(5-8 pažym.)’, vietoje ‘tik studijos 9-10 balų pažymais+stipendija’… Svarbiausiai, kad pirmajam atvejui nereiktų pridėti prie sąrašo “-X dalykų kartojimas” :D . Nes tada jau kuo toliau tuo labiau gaunasi ‘tas ant to’.

Apie indų programerius dirbančius už 2 baksus per valandą

2009.11.16 Xamas Komentarų: 4

Kadangi turbūt niekam nepaslaptis, kad turiu polinkį į Php, ir visos kitose programavimo kalbose(funkcinėse, objektinėse, skriptinėse) stengiuosi emuliuoti Php galimybes (C++’e nesugebu apsieti be explode();),

tai šiandien negalėjau apsiieiti be dar vienos labai šaunios Php funkcijos – tai print_r();. Jos esmė ta, kad priešingai nei kitų prog. kalbų kurėjai, kurie neturi kažko panašaus į print_r(), print_r nuosekliai išprintina n’tai masyvo, objektų sarašo visus elementus rekursiškai – užtenka paduoti seką į parametrus :) .

Taigi šios idėjos vedamas, susiradau alternatyvą print_r(); bene populiariausiai skriptine kalbai – javascript.

Po to kai programa į downtime’ą keletui minučių pasiuntė visą dedikuotą servą, atsidaręs skripto autoriaus puslapį kažkodėl nenustebau – Bandula Binny Bandulay iš Indijos :) . Nebūtų non-sense’as, jeigu ne faktas – kad šito Binny’io source kodas yra pirmoje pozicijoje Google :D DD.

/**
* Function : dump()
* Arguments: The data - array,hash(associative array),object
*    The level - OPTIONAL
* Returns  : The textual representation of the array.
* This function was inspired by the print_r function of PHP.
* This will accept some data as the argument and return a
* text that will be a more readable version of the
* array/hash/object that is given.
*/
function dump(arr,level) {
 var dumped_text = "";
 if(!level) level = 0;
//The padding given at the beginning of the line.
 var level_padding = "";
 for(var j=0;j<level+1;j++) level_padding += "    ";
if(typeof(arr) == 'object') { //Array/Hashes/Objects
  for(var item in arr) {
   var value = arr[item];
  
   if(typeof(value) == 'object') { //If it is an array,
    dumped_text += level_padding + "'" + item + "' ...\n";
    dumped_text += dump(value,level+1);
   } else {
    dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
   }
  }
 } else { //Stings/Chars/Numbers etc.
  dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
 }
 return dumped_text;
}

Norint užlenkti visą sistemą užteko ją pabandyt :D :

alert(dump(document.getElementById("xc_obj").childNodes));

Moralas tas – jeigu jau dedi sūrsą, kuris gūglėj bus pirmoj pozicijoj, bent jau jį patikrink.

Nes jeigu tokie pat išminčiai būtų rašę kokį TinyMCE, ar PhpExcel, tai beieškodamas klaidų ir užmiršti kam tau to skripto reikėjo, būtų galima…

(dalyje plačiau – įmečiau pilnai gerai veikiantį kodą).

Skaityti toliau