Par programmēšanu

Vakardien pavisam nejauši mazliet iesaistījos vienā tviterdiskusijā, kas sākās ar tēzi par WordPress un beigās izvērtās pagarā diskusijā par OOP un dažnedažādu programmēšanas ietvaru (freimworku tiem, kas nav pazīstami ar latvisko terminoloģiju) imantošanu.

Izdomāju, ka man ir mazliet garāks viedoklis un tas nekādi 140 simbolos neietilpst. Tad nu tā:

Mums programmētājiem ļoti patīk diskutēt par to, ka kaut kāds viens programmēšanas veids ir labs un kaut kāds cits ir slikts, katram no mums ir ļoti spēcīgi viedokļi par vienu vai otru programmēšanas veidu un šie viedokļi mēdz atšķirties un pats smieklīgākais – mums visiem ir zināma daļa taisnības, tajā pat laikā, tas galīgi nav būtiskākais.

Galvenais mūsu darba mērķis ir atrisināt klienta problēmu. Klienta problēma var būt jebkas – kaut vai kaut kādas informācijas par sevi publicēšana internetā (arī pazīstams, kā mājaslapa). Mēs šo te viņa problēmu varam atrisināt daudzos un dažādos veidos, galvenais, ka tā tiek atrisināta. Un tālāk jau nonākam pie tā, kā tad tieši mēs izvēlēsimies veidu kā risināt viņa problēmu.

Te ir jāatcerās, ka otra būtiskākā lieta, kas mums, kā programmētājiem ir jāzin: mums ir jāspēj balansēt dažādi, atvainojos par žargonismu, treidofi.

Paskaidrošu – mēs varam lietotājam lapu uztaisīt Wordpresā, ar to viņš iegūs pazīstamu un gadiem pārdomātu lietotāja saskarni administrācijas daļā, iespēju piesaistīt lētus programmētājus uzturēšanā, bet zaudēs lapas ātrdarbībā, kā arī programmētāju produktivitātē, ja vajadzēs kaut ko ļoti, ļoti citādāku nekā Wordpresa izstrādātāji ir izdomājuši. Tāpat varam utaisīt lapu izmantojot kādu no OOP ietvariem, te ieguvumos būs tas, ka lapa nedarīs tās lietas, kas tai nav jādara, programmētājam būs vieglāk izdabāt klienta vēlmju niansēm, bet būs jāpaterē laiks pie administrācijas rīku izveides, kā arī administrācija noteikti nebūs ar tik ļoti bagātām iespējām, vai arī tās izstrāde aizņems daudz laika, kā arī būs nepieciešami programmētāji ar attiecīgā ietvara zināšanām, lai uzturētu lapu. Tik pat labi varam lapu rakstīt perlā un ieguvumos būs plašas iespējas ar dažādu tekstuālu datu manipulēšanas iespējām, tomēr nez vai kāds to pēc tam spēs uzturēt (hotja, nākotnes ienākumu nodrošināšana arī var tikt uzskatīta par plusu programmētājam) (btw, ja mums te ir kāds perla gurū, padomā varbūt tu gribi pārcelties uz Amsterdamu, mums te booking.com tādi noder). Vēl ja klientam ir vajadzība pēc megaātrdarbības, tad vispār varam visu rakstīt C vai, pasarg dievs, asemblerī, bet ticu, ka tur lielais vairums pēc plusu mīnusu izvērtēšanas ir sapratuši, ka ātrdarbības ieguvums lielākajā daļā gadījumu neatsver ieguldītās izmaksas.

Mans personīgais viedoklis ir tāds, ka OOP web izstrādē ir kruta un izcili un palīdz man ietaupīt manu dārgo izstrādātāja laiku, tomēr esmu šo laiku ieinvestējis sava OOP mikroietvara radīšanai, kas ļauj man koncentrēties uz tām lietām, kas man ir nepieciešamas, tomēr, jā, apzinos, ka manam ietvaram nav to iespēju, kas ir lielākiem ietvariem un tas nav tik ļoti notestēts kā, piemēram, kaut vai tas pats CI. Savām personīgajām vajadzībām pēc treidofu izvērtēšanas esmu izdomājis, ka tas man der. Tāpat ticu, ka Endijs ir izvērtējis plusus un mīnusus tiem PHP ietvariem, ko viņš izmanto un ir izdomājis, ka tas der viņam. Diskusijas ir ļoti forši, bet galvenais tomēr ir apmierināts klients un atalgojums par padarīto darbu mūsu kabatā.

 

MeteoLV

Vakardien mans labs draugs/pudelesbrālis/dzirdītājs un biedrs dažos kopprojektos @mrserge uztaujāja man vai nevaru viņam palīdzēt ar patreizējo meteoroloģisko datu dabūšanu no meteo.lv lapas. Paskatījos, ieraudzīju, ka varu gan. Visi vajadzīgie dati ir smuki pieejami skaistā un sakarīgā JSON dokumentā.

Tik tālu viss labi skaisti un burvīgi. Vienīgais mīnuss ir tāds, ka tie gudrinieki, kuri veidoja meteo.lv lapu (gan jau atbilstoši klienta vēlmēm) bija izdarījuši daudz ko, lai apgrūtinātu šo te datu ieguvi – proti, šajā gadījumā tie bija izdomājuši, ka pirms datu atrādīšanas pārbaudīs vai eksistē kaut kāds cepums, kuru uzseto kaut kādā atsevišķā lapā; attiecīgi datu ieguve iespējama čerez diviem redirektiem un akceptējot cepumus.

Saprotams, ka, ņemot vērā faktu, ka jebkurus datus, kurus var atvērt parasts interneta pārlūks, var atvērt arī izmantojot cURL, tad nav jau tā, ka šis apgrūtinājums būtu baigi lielais. Tas vienīgi var atbaidīt salīdzinoši iesācēja līmeņa koderus (es te šobrīd tikai par php koderiem runāju, ja nu kas), kuri a) nezin par cURL b) neprot to lietot.

Te, protams, es izdomāju mazliet vispārīgi paspļaudīties par šo tēmu tviterī:

Šķiet, vienīgā valsts/pašvaldības iestāde, pret kuru man šajā jautājumā jau ilgus gadus ir cieņa, ir Latvijas Banka un tās viegli pieejamie valūtas kursi.

Pēcāk, kad biju apskatījis Sergeja paveikto, izdomāju, ka šo te meteo datu iegūšanu vajadzētu uztaisīt maksimāli vienkāršu un padalīties ar citiem cilvēkiem.

Rezultātā tapa mans pirmais githubā esošais mikroprojektiņš: MeteoLV. Būšu tikai priecīgs, ja tas kādam izrādīsies noderīgs.

Ok, tātad tu gribi sev uztaisīt meteolapu

Būtībā viss ir vienkārši lapa ir te, kods ir te, nekādi paskaidrojumi tālāk neseko, vai ne?

Rright. Tālāk visi neprogrammētāji aiziet skatīties radara bildi un tālāk nelasa. Ar pārejiem strādāsim.

Būtībā jau, lai uztaisītu šādu servisu neko daudz nevajag. Pāris stundas un gatavs. Tiesa, neveiksmes gadījumā (ir reāli lietaina diena/s)  var gadīties, ka vajadzēs vairāk, bet par visu pēc kārtas.

Tātad ko mēs gribam panākt – well, būtībā to, ko var redzēt augstākminētajā saitē – t.i. uz google maps (vai kādas citas kartes) projicēti nokrišņi (vai kāda cita informācija, tas pat nav būtiski, bet šeit mēs apskatīsim tieši nokrišņu radaru).

Kā to dara?

Step 1. Apzinam nokrišņu radaru lapas. Ņemot vērā, ka LVĢMC lapa tagad to piedāvā kā maksas pakalpojumu, tad to atmetam, paliek igauņi un lietuvieši.

Step 2. Iegūstam bāzes attēlus katram no šiem radariem. Šeit ir atruna par to, ka ja ir skaidrs laiks, tad ir mazāk jāiegulda darbs un ir nepieciešami mazāk attēli, lai novāktu nost visu info.

Step 3. Uztaisam skriptiņu, kas iegūst attiecīgos jaunākos attēlus. Ja ir nepieciešams proxy – izmantojam cUrl.

Step 4. Apstrādājam jauniegūtos attēlus ar imagemagick. Būtībā mūs interesē šādas lietas
– izvākt lieko informāciju no igauņu attēla (cropojam).
– novākt fonu atstājot tikai nokrišņus.
– kompresēt attēlu, lai tas aizņem mazāk vietas.


#pieņemam, ka $src un $dst ir mainīgie, kas satur pilnu ceļu uz failu
#$base savukārt ir pilns ceļš uz augstāk minēto attēlu, kurš satur tikai fonu
#igauņu attēla cropošana -> dst attēls ir 558x558 px un kvadrāta kreisais augšējais stūris ir 1,81
convert $src -crop '558x558!+1+81' $src
#novācam nost fonu
convert $src $base -compose ChangeMask -composite $dst
#png attēla saspiešana -> samazinam uz 256 krāsām, saglabājot caurspīdību
convert $dst -fuzz 10% -colors 256 -transparent none $dst

Step 5. Saprotamies ar interesējošā kartes provaidera API dokumentāciju.

Step 6. Izmantojot saprasto API liekam lapā tik iekšā karti. Tāpat  attiecīgajai kartei taisam overlay objektu.

Step 7. Paga, paga – a kādās koordinātēs mums ir jāliek tas overlay? Nu – šeit ir tāds moments, ka darbojamies методом научного тыка. T.i. ar lineāla, acumēra un tamlīdzīgām palīdzībām mēģinam saprast kādas tieši ir tās koordinātes kartes dienvidrietumu un ziemeļaustrumu stūriem. Protams, gan jau vieglāks veids būtu bijis overlayā likt puscaurspīdīgu base karti, bet man nakts vidū bija slinkums to izdomāt, turklāt ar Gudgesa/aproksimācijas metodi veiktie koordināšu pieņēmumi bija pietiekami precīzi, lai pēc tam tos mazliet pielabojot trāpītu apmēram pareizi.

Step 8. Atceramies, ka google mapos un radaru kartēs, lai arī karšu projekcijas ir līdzīgas, tās tomēr nav identiskas, līdz ar to, ja vien negribās veikt kaut kādu vēl attēlu transformēšanu, ir jāsamierinās, ka visās vietās precīzi virsū viss nebūs.

Step 9. Ā, būtībā šeit mums būtu jāizdomā veids kā uzzināt, kurš ir jaunākais attēls un rādīt to. Viena ideja ir tāda, ka attēlu nosaukumā tiek ietverta laika informācija, pie tam tādā veidā, ka jebkurš jaunāks attēls ir alfabētiski kārtojot “lielāks” par iepriekšējo. (ISO datuma formāts Y-m-d H:i ir tam labi piemērots). Rezultātā, lai atrastu jaunāko attēlu var vienkārši izmantot glob, un paņemt pēdējo masīva elementu.

Step 10. Teorētiski šajā mirklī mēs esam iemanījušies dabūt jaunāko bildi uz ekrāna. Vēl varētu pielikt animāciju – t.i. būtu jāielādē iepriekšējās x bildes un tās pārmaiņus jārāda. Ir vairāki varianti kā to darīt, bet idejiski, ja prot ielādēt jaunāko, tad iepriekšpēdējās ielāde ir triviāla. Manā gadījumā tas notiek tā, ka pie animācijas pogas nospiešanas tiek uzsākta iepriekšējo bilžu ielāde, kad tās visas ir ielādētas (sataisīti visi pārējie overlayi), tad tiek palaista funkcija, kas ar setTimeout palīdzību sevi izsauc ik pēc sekundes.

Step 11. Papildus foršumam, kartei būtu pašai jāspēj ielādēt jaunākā bilde, ja tā tiek turēta vaļā pietiekami ilgu laiku. Būtībā te arī ir vienkārši – mums ir zināms, kāds taimstamps ir pēdējai bildei, ik pa minūtei (sākumā) veicam pieprasījumu, kas mums atgriež jaunākās bildes failneimu (taimstampu) un salīdzinam šos – ja ir jaunāks, tad iemetam to animācijas masīva sākumā, un nomainam aktuālo bildi uz to. Pēc tam optimizācijas nolūkos var veikt pieprasījumus tikai reizi attēlu atjaunināšanas laikā (15 min)

 

Nekas vairak tur arī īsti nav. (Ja neskaita to momentu, kas saucās ko darīt, kad tev uzklūp viss Latvijas internets). Veiksmi savu meteodienestu izveidē!

P.S.

Protams, ka tur ir vēl visādas milions lietas un sīkumi, ko varētu izdarīt tā, lai ir vēl daudz foršāk, protams, ka tieši tie arī ir tas, pie kā tiek pavadīts vislielākais laiks. Bet nu jā – te tādā tipiskā startup variantā ir izstāstīts, kā ātri tikt pie MVP :)

 

 

 

 

CREATE TABLE (blah blah)

Ir gadījies tak dzīvē rakstīt kādu CREATE TABLE steitmentu? Nav? Nu ja šķiet, ka arī nebūs, tad atā, uz redzēšanos, lasi nākamo rakstu, vai kaut ko pavisam citu.

Tagad, kad esam palikuši tikai mēs, gīki, runāsim (čukstus) tālāk.

Tātad situācija sekojoša. Tu esi prātīgs cilvēks tu savus tabulas izveides skriptus glabā, bet nezināmu iemeslu dēļ pienāk diena, kad nezināmu iemeslu dēļ (vadības, pašinciatīvas, vai kāda cita motivātora vadīts) nākas nomainīt DBPS (nu tur MySQL:u uz Postgresu, vai otrādi), vai arīdzan vienkārši pēkšņi pienāk brīdis, kad tev viens un tas pats ir jāuztur uz abiem (kas ir nepatīkamāk), vai arī tu vienkārši proti rakstīt CREATE TABLE priekš postgresa/mysql (lieko izsvītro pats), bet tagad vajag sročna priekš tā otra.

So we have a problem. Jo, kaut arī abi tjipa saprot, tjipa to pašu SQL:u, tomēr katram ir savi datu tipi un citas savas niansītes. Ko nu? Var protams lasīt dokumentāciju un attiecīgos pieprasījumus konvertēt ar roku (kas principā laikam ir jebkurā gadījumā forši un ieteicami), bet mēs taču esam slinki cilvēki un galu galā ir takš izdomāti arī datori un tā, kas visādas mehāniskas darbības prot izdarīt mūsu vietā.

Kur gadījies, kur ne – talkā nāk šīsdienas problēmas risinājums. Izvēlamies to dialektu uz kuru gribās to visu nokonvertēt, ierakstam pašu SQL pieprasījumu un nospiežam vienu podziņu. Teorētiski tev būtu jāsaņem (vismaz 80% vienkāršo gadījumu) nokonvertēts SQL pieprasījums, kuru tad nu vari barot iekšā savai DBPS un cerēt uz to, ka tabula izveidosies.

Ja nu gadījumā ietrāpījies starp tiem 20%, kuriem nekas nesanāca, bet proti kodēt php un šo to saproti no tā, kāpēc tieši varēja nesanākt (vai arī tu gribi, lai tur būtu pie atbalstītajām bāzēm arī, teiksim, SQLite vai Orāklis), vai arī vienkārši gribi šito figņu izmantot savā php kodā, tad dodies uz bitu spaini.

Lai nu kā, būšu ļoti priecīgs, ja kādam (vēl bez manis paša) šis izrādīsies noderīgs.

xls faili iekš php

Kodē php? Profesionāli? Tad šitais, visticamāk, priekš tevis. Pārējie turpina lasīt delfus/fizmatus/nombri/whatever.

Tādad esi takš saskāries iekš specnēm ar prasībām no sērijas “eksportēt uz MS Excel izveidoto sarakstu ar informāciju…”? Neesi – aha – jauniņais, nekas, gan jau saskarsies. Nu vo, es arī biju savā pieredzē saskāries reizes daudz. Katru reizi mani mocīja tāda nepatika pret pārējo kolēģu piedāvātajiem variantiem, taču internets neko labāku nepiedāvāja, tad nu tika veidoti dažādi tur xml:i ar .xls extensionu, kuru tad tjipa excelis saprot, vai arī .csv faili, vai arī tika izmēģināts tas PEARa brīnums

Bet tagad pavisam nesen atkal vienā projektiņā uzpeldēja vajadzība ģenerēt xls failus (nu tur tā ar vairākiem šītiem un visām pārējām izvirtībām), un gribējās vēlreiz uzmest aci internetiem vai nav kaut kas pa šo laiku mainījies dzīvē. Un kā izrādās – ir.

Eksistē tāds viens brīnumjauks projektiņš ar nosaukumu PHPExcel, kurš kā izrādās, ne tikai prot ģenerēt korektus .xls failus, bet suportē vēl visādus brīnumus no sērijas .xlsx (office 2007), rūtiņu mērdžošanu, formatēšanu, formulas, pat attēlu embedēšanu.

I mean, just look at this:

Protams, šis nav quick and dirty almost excel failu ģenerators, bet jebkurā gadījumā dārgo php developeri: es tev šo brīnumu rekomendēju, tici man, tavs klients/projvads/whatever būs tev pateicīgs.

Nošārē vienādojumu

Sveiks manu mīļo matemātiķi, es zinu, ka tu vienmēr esi ar skaudību raudzījies uz s – galu galā viņiem ir iespējas ar saviem sacerējumiem dalīties daudzos un dažādos veidos – viņiem ir tur visādi servisi aļa paste.php.lv, nemaz nerunājot par tādiem koda šārēšanas pasākumiem kā tur teiksim github, kuros ar savu kodu var pazīmēties jau dziļākos ūdeņos.

Bet tev? Vot uzrakstīji tu ūberkrutu un skaistu vienādojumu (nu, nejau obligāti vienādojumu, tur teiksim formulu, vai vienkārši kaut ko skaistu ar matemātiskiem simboliem) un? Sēž viņš tavā kladē, nu varbūt, ja paveicas, vari uzrakstīt to uz tāfeles, vai (šis ir parasti rezervēts pasniedzējiem un matemātisku darbu aizstāvētājiem) ierakstīt to prezentācijā.

Protams, ja esi ūbermatemātiķis, tad jau tu noteikti publicējies visādos tur  zinātniskos žurnālos, bet tos jau lasa tāds šaurs cilvēku loks, un teiksim, savai mammai tu kopiju diezin vai aizsūtīsi.

Bet tas viss mainās šodien. Tev tagad arī savs webserviss, ar kura palīdzību vari zīmēties starp saviem draugiem, radiem un paziņām, nemaz nerunājot par nejaušiem svešiniekiem. Tev tagad tiek piedāvāts vienādojumu šārēšanas serviss, kurš gan (pagaidām) atrodas pavisam sarežģīti uzminamā adresē – https://ramuuns.com/tex.html nu jau atrodas pavisam svaigi skaistā adresē: http://mathtex.im

Ko tad tu tur vari darīt – lūk ko – vari ierakstīt savu matemātisko veidojumu iekš TEXa, ierakstīt tam kādu nosaukumu, kuru tu pats atcerēsies (lai varētu pēc tam sameklēt), un nospiest podziņu saglabāt. Pretī tu iegūsi unikālu adresi savam vienādojumam, kuru tu vari likt iekšā savā blodziņā, vai arī gluži vienkārši saiti uz pašu bildīti, kuru arī vari likt turpat.

Tāpat vari apskatīties, ko tad pārējie ir saveidojuši, kā arī mēģināt sameklēt to, kas tevi interesē (meklētājs NAV pārlieku inteliģents un meklē tikai vienādojuma nosaukumā).

Paldies par uzmanību un lai labi rakstās vienādojumi.

JS code assist in JS

Gribēju tev manu dārgo lasītāj izstāstīt par savu šīsnedēļas naktsprojektu. Nē, nē, nejau to, kur līdz turpat trijiem naktī tiek nostāvēts Ļeņingradā, jo sarunas ar Uldi, Andri un Aneti ir foršas – par to lai Andris uzraksta Luckānismā.

Es te par citu savu izklaidi – Math.js un tā testēšanas un izmantošanas konsoli.

Viss sākās ar to, ka pirmdien (laikam, kaut gan iespējams arī otrdien) izdomāju, ka jāpieliek konsolei megafīča – grafiku zīmēšana – domāts darīts – samedīju internetos vienu koda gabalu, kur ar canvas tiek zīmēti funkciju grafiki. Godīgi nospēru šo kodu, pielāgoju to savām vajadzībām un sāku gūgletõlkā zīmēties.

A tur man pretī – a tu, bļe scuko, helpu uztaisi – a to fig var saprast, ko vispār iekš tās tavas konsoles var un ko nevar. Es, protams, kā jau parasti normāli koderi atbild uz jūzeru rekvestiem – šāvu pretī – da nah – un vispār visa šitā figņa ir tīri manām vajadzībām un es tjipa atceros visu, ko var un ko nevar.

Bet, tomēr savā būtībā jusdamies koderis sajutu sevī čallendžu – a moš tomēr kaut kādu code assist rīku var uzmeistarot, nu tur tjipa no sērijas funkcijām autocomplete. Un tad atcerējos par vienu lielisku JS īpašību – for property in object ciklus – takš var uztaisīt, ka atpazīstam kaut kādu sarakstīto teksta gabaliņu un tad nočekojam vai rakstītais teksts ir kaut kāda propertija sākums. Domāts darīts.

Eku interesantais kods:


//tekstārejai ar idu #js_execute, pieliekam eventu pie pogu nospiešanas
//saprotams, ka izmantojam jQuery
$('#js_execute').keydown(function(e){
    if ( e.shiftKey && e.keyCode == 32) {
        e.preventDefault();
        window.getJsExecSelection(this.selectionStart);
        return false;
    }            
});

window.getJsExecSelection = function(ro){
    var el =$('#js_execute')[0];
    var text = $('#js_execute').val().substr(0,ro);
    var GlobalObjs = ['Math','window','document','navigator','isFinite',
    'isNaN','Number','parseFloat','parseInt','Infinity','NaN','undefined'];
    
    function getSuggestion(objs,i,parentObj) {
        if ( objs.length - 1 == i ) {
            //suggestion here
            if ( i == 0 ) {
                for ( var k = 0; k<GlobalObjs.length; k++ ) {
                    if ( GlobalObjs[k].match('^'+objs[i]) ) {
                        var htext = GlobalObjs[k].substr(objs[i].length);
                        $('#js_execute').val(text+htext+textAfter);
                        el.selectionStart = ro;
                        el.selectionEnd = ro+htext.length;
                        return;
                    }
                }
            } else {
                for ( var item in parentObj ) {
                    if ( item.match('^'+objs[i]) ) {
                        var htext = item.substr(objs[i].length);
                        $('#js_execute').val(text+htext+textAfter);
                        el.selectionStart = ro;
                        el.selectionEnd = ro+htext.length;
                        return;
                    }
                }
            }
            if ( i == 1 && parentObj == Math ) {
                var MathProps = ['E','LN2','LN10','LOG2E','LOG10E','PI','SQRT1_2','SQRT2',
                                'abs','acos','asin','atan','atan2','ceil','cos','exp','floor',
                                'log','max','min','pow','random','round','sin','sqrt','tan'];
                for ( var k = 0; k< MathProps.length; k++ ) {
                    if ( MathProps[k].match('^'+objs[i]) ) {
                        var htext = MathProps[k].substr(objs[i].length);
                        $('#js_execute').val(text+htext+textAfter);
                        el.selectionStart = ro;
                        el.selectionEnd = ro+htext.length;
                        return;
                    }
                }
            }
        } else {
            //get the current obj
            if ( i == 0 ) {
                for ( var k = 0; k<GlobalObjs.length; k++ ) {
                    if ( objs[i] == GlobalObjs[k] ) {
                        return getSuggestion(objs,i+1,eval(GlobalObjs[k]));
                    }
                }
            } else {
                for ( var k in parentObj ) {
                    if ( k == objs[i] ) {
                        return getSuggestion(objs,i+1,parentObj[k]);
                    }
                }
            }
        }
    }
    var textAfter = $('#js_execute').val().substr(ro);
    var lastToken = text.match(/[a-zA-Z][a-zA-Z0-9\.]*$/);
    if ( lastToken != null ) {
        var objs = lastToken.toString().split('.');
        
        getSuggestion(objs,0,null);
        
    }
    
}

Dažas piezīmes šī te koda sakarā:

  • Kā redzams, tad autocomplete tiek izsaukts nospiežot Shift + space (pirmajā variantā bija, ka tas notiek automātiski ar taimerīti, bet praksē lietojot šādu variantu nākas saskarties ar dažādām problēmām.)
  • Šis kods, ne sūda nestrādās uz IE (kas gan ir kinda pohuj – kanvasi arī nestrādā, turklāt vispār ir takš arī normāli pārlūki mūsdienās atrodami)
  • Nav nekādas iespējas normāli tikt klāt pie globālajiem objektiem/funkcijām, līdz ar to tie ir jādefinē, kā arī jāapstrādā atsevišķi.
  • Tāpat, kā izrādās, tad oriģinālās metodes/propertijus nevar dabūt arī valodas objektiem – (aļa tur Math/Array/String, etc.) līdz ar to, ja tādus gribās – tad tie arī ir jādefinē atsevišķi. Savukārt DOM objektu propertijus šis autocomplete māk atrast pavisam lieliski.
  • Vēl, kas ir kruta – ja tiek piedefinēts jauns propertijs, kādam no esošajiem objektiem, nu tur teiksim window objektam uztaisam propertiju blahblahblah (window.blahblahblah = 5), tad arī šo propertiju varēs dabūt iekš autocomplete.
  • Protams, ir visādas, lietas, kā šo pasākumu varētu sarežģīt un uztaisīt vēl lietojamāku – nu tur parādās kautkāds popups ar visiem objekta propertijiem, kuri atbilst dotā stringa sākumam, kurus tad attiecīgi var izvēlēties ‘n shit.

Pretspama rīki

Sēžu te tagad un rakstu specifikāciju vienam projektiņam un izdomāju papētīt kādi tad eksistē komentāru pretspama rīki.

Pirmkārt jau eksistē CAPTCHAs, bet tās ir tik lietotājam nedraudzīgas, turklāt praksē nestrādājošas, ka nav īpaši jēgas tās apskatīt, galu galā, kuram tad patīk zīlēt tos burtiņus iekš tām bildītēm, nemaz nerunājot par tiem nenozīmīgajiem interneta lietotāju procentiem, kuri tās nespēj saskatīt.

Līdz ar to pievērsos filtriem.

Protams, vienmēr pastāv iespēja rakstīt savu filtru, bet – kuram gan tādām lietam ir laiks. Ok, paņemam jau gatavu filtru risinājumu, bet tur atkal sastopamies ar to problēmu, ka spama/labo komentāru datu bāze ir principā jābūvē pašam un filtrs arī jāapmāca pašam.

Neder.

Tātad daram ko – atceramies, ka iekš WP ir tāds brīnumjauks plugins ar nosaukumu Akismet. Attiecīgā brīnuma wikipēdijas lapā apskatam konkurentus. Un tā izveidojas neliels sarakstiņš.

  1. Akismet
    Pats laikam vispopulārākais spamfiltrs blogu pasaulē. Strādā. Piedāvā API, kas to ļauj viegli integrēt ar jebko. Vienīgais mīnuss tāds, ka nav par velti komerciāliem mērķiem
  2. Mollom
    Piedāvā pašu velnu, tai skaitā kaptčas un vēlsazinko, arī par bezmaksu, vienīgi bezmaksai ir tāda nelaime, ka ir limits – 100 pieprasījumi dienā. (plus vēl tas, ka tie bezmaksas pieprasījumi stāv rindā aiz maksas pieprasījumiem)
  3. Defensio
    Šis variants jau ir komerciāliem mērķiem draudzīgāks – proti, ja tu taisi pats savus API pieprasījumus, tad pirmie 15K mēnesī ir par bezmaksu, tālāk nākamie 35K ir par 20$ (kas nav īpaši daudz) pēc tam ik pa 15K + 15$
  4. TypePad Antispam
    Savukārt šis ir mans favorīts – pirmkārt izmanto Akismeta API (kas nozīmē to, ka gatavu kodu principā atrast ir līdz bezgalībai vienkārši) otrkārt ir pilnīgi bezmaksas un bez visādiemtur ierobežojumiem.
    Vienīgais mīnuss šim brīnumam ir tāds, ka projekts ir samērā jauns, kas nozimē, ka filtrs varētu būt vēl tāds diezgan apmācāms, bet šo problēmu var labot tikai laiks.

A jūs jaunieši – ko izmantojat? Ko iesakāt?