pronto.ee

Tomorrow will be cancelled due to lack of interest

Tallinna trammid

Tallinn jaguneb laias laastus kaheks: Ida-Tallinn ja Lääne-Tallinn mis on omavahel eraldatud raudteega. Ida-Tallinnasse mahub Kesklinn ja Ülemiste ehk siis rõhuv enamus Tallinna äripindadest. Lisaks mahuvad sinna ka Lasnamäe, Pirita, Kadrorg, Lennujaam ning valgaladena Peetri / Assaku, Maardu, Jüri ja Viimsi. Lääne-Tallinnas on peamiselt magalad: Mustamäe, Nõmme, Õismäe, Pelgulinn, Kopli, Kakumäe ja Kalamaja. Valgaladena ka Saue, Saku, Keila, Harku ja Tabasalu. Selleks, et tööd teha, peab enamus ühest Tallinnast sõitma teise Tallinnasse. Pluss loomulikult inimesed väljaspool Tallinnat kellel on Kilulinna asja ja loomulikult ühistransport + taksod kes niisama kahe Tallinna vahet saalivad. Ahjaa, loomulikult ei toonud ma ära kõiki piirkondi, ma andsin lihtsalt mõista kust poolt tuul puhub.

Selleks, et saada teisele pool raudteed on linnas vaid käputäis tuiksooni: Järveotsa tee, Pärnu mnt. küür, Endla viadukt ja Mere pst. läbi Noblessneri ja Kalamaja. Lisaks muidugi ka Paldiski mnt ja Rohu tänava viaduktid kuid need on juba pisamad ja suuresti ühesuunalised. Nende üksikute arterite kaudu tuleb iga päev sõita sadadel tuhandetel inimestel. Et asjast veel paremat aimu saada tuleks vaadata kaarti: Ülemiste järve ja mere vahel on vaid paar kilomeetrit ja see on nagu kael pea ja keha vahel. Me kõik teame mis juhtub kui kaela liigselt krookida.

Plaan eemaldada Liivalaiast trammitee ehitamisega kaks sõidurida oli just selline krookimine. Liivalaia töötab tipptundidel niigi viimasel piiril ja kui seda täiendavalt kitsendada, siis paiskaks see ummikud laiali kõrvaltänavatesse: Juhkentalisse, Veerenni, jne. See omakorda halvaks lõpuks kogu Kesklinna liikluse. Ka kiirabi, tuletõrje ja politsei liikluse. Samuti enamuse ühistranspordis jaoks. Seega ei olnud Liivalaia trammi projekti tühistamine mitte ainult mõttekas, vaid hädavajalik. Kuid mitte sellest ei tahtnud ma rääkida.

Tramm on iseenesest väga hea transpordivahend millel on oma sõidurada ja sestap võimaldab vaba liikumist ka tipptundidel. Erandiks on siinkohas Narva mnt., aga selle juurde tuleme hiljem tagasi. Teisisõnu: rohkem tramme on hea. Lihtsalt mitte Liivalaias.

Milliseid täiendavaid trammitrasse võik Tallinnas ehitada? Neid on tegelikult kaks, aga need mõlemad nõuavad n.ö. kastist väljas mõtlemist. Üks neist on ilmne: Tondi-Ülemiste otseliin. Seda on võimalik ehitada kahte moodi: kallim, kuid mõistlikum oleks Tondi lõpp-peatusest algav liin mis läheks läbi Tallinn-Väikese, mööduks Espakist ja Depost, Avala kontoritest, vangla asemele ehitatavast elamurajoonist ning mille teenuseid saaks kasutada ka Veereni elamu- ja ärikvartali inimesed. Selle lõpp oleks läbi T1-e ja Ülemiste lennujaama juures. Odavam variant oleks alustada Trammipargi juures, kuna siis poleks vaja raudtee alt/pealt läbi murda. Seal on piisavalt ruumi rööbastee jaoks ja selle järele on ka reaalne vajadus, sest see seoks Ülemiste kvartali tihedamalt magalatega ja ehk viiks Kesklinnast mingi hulga autosigi minema. Miks selle asemel kaaluti Liivalaia liini on minu jaoks müstika. Eriti kui selle jaoks oli võimalik taodelda välisrahastust.

Teine, tunduvalt drastilisem liin oleks Balti jaama sidumine Tondiga (ja koos eelneva ettepanekuga ka Ülemistega). Nimelt Balti jaam on minetamas on tähtsust keskvaksalina kuna selle funktsiooni võtab üle Ülemistesse rajatav Rail Baltica jaoks rajatav jaam. Tänu sellega tuleks tõsiselt kaaluda kas Lilleküla – Balti jaama ühendusel on üldse mingit mõtet.

Omalt poolt ma soovitaksin võtta üles sealse raudtee ning vabanevale vallile viia üle Tehnika tänav koos uue trammiliiniga, mis võtaks üle suure osa raudtee praegustest funktsioonides. Kahtlemata on kusagil paarkümmend inimest kelle jaoks on tohutult oluline saada iga päev Keilast Kalamajja, aga kas nende pärast on mõistlik seda lõiku käimas hoida? Tõenäoliselt mitte. Küll aga saaks sealtkaudu siduda Kalamaja Tondi ja Ülemiste kvartaliga mille järgi on reaalne vajadus. Miks ma räägin nii palju Ülemiste kvartalist? Sest ma kunagi töötasin seal. Ja ma elan Kesklinnas kino Kosmose piirkonnas. Ma püüdsin mõnda aega trammiga tööle sõita, aga uksest ukseni võttis üks otsa aega üle tunni. Tagasi teine tund. Kui me arvestame, et kaheksa tundi on tööpäev ja kaheksa tundi inimene magab, siis kaotasin ma tööpäeviti veerandi oma ajast ühistranspordis loksudes. Seetõttu ma ostsin omale auto kuigi ma eriti ei olnud sellest erilises vaimustuses. Aga nõnda ma võitsin päevas poolteist tundi lisaks ja saavutasin teatavat sorti vabadusele minna Marjasse trenni ja Pelgulinna bändiproovi.

See manööver annaks ühe võimaluse veel: raudteele üle viidud autoliikluse saaks väilade kaudu ühendada Reidi teega, mis viiks Kesklinnast, eriti Narva mnt.-lt millest me ennist rääkisime minema arvestatava osa liiklusest. Mis puudutab näiteks Pääsküla või Paldiski liini, siis saaks omavahel siduda Kitseküla ja Pääsküla peatused ning keerata jalgpallisaadioni juures Ülemiste suunale. See lihtsustaks oluliselt ka tulevikus laiarööpalise raudtee asendamist kitsarööpalisega. Balti jaamas on niikuinii plaanis enamus tehnilisest infrastruktuurist likvideerida, seega miks poolel maal pidama jääda?

Tiiger elab!

Teatavasti on ühe õige eestlase lemmiksöök teine eestlane. Või teise eestlase kätetöö. Kas te teate mitu eestlast on vaja selleks, et pirni lakke keerata? 100! Ühte kes keerab pirni ja 99-t kes vangutavad pead: “sa ikka üldse ei oska!”

Üks selline ettevõtmine mille peale sageli hammast teritatakse on Tiigrihüppe nimeline projekt, mis käivitus 1996 aastal kui toonane saadik USA-s Toomas Hendrik Ilves ja Jaak Aaviksoo (karva)palli veerema lükkasid. Ei võtnud palju aega kui president Lennart Meri omalt poolt ettevõtmisele õla alla pani ning kõik ülejäänu on juba ajalugu. Tiigrihüppe eesmärk oli populariseerida IT pädevust kui teist kirjaoskust. See projekt oli iga mõõdupuu järgi üliedukas ja selle vilju naudime me tänase päevani.

Minu jaoks on selles valguses eriti häiriv kui iga IT alase läbikukkumise järel tõmmatakse käima vana halb “Tiiger on surnud!” saag. Miks see mind häirib? Tehke üks katse: hüpake. Hüpake edasi, nii kaugele kui suudate. Proovisite? Kaugele te jõudsite? Aga miks te ei hüpanud 100 meetrit? Või terve kilomeetri? Kas te olete surnud?

Tiigrihüpe oli projekt. Selge eesmärgi, alguse, keskkoha ja lõpuga. See oli väga edukas projekt. Probleem ei ole kunagi olnud Tiigrihüppes, vaid selles, et me ei vaata enam tuleviku. Me räägime Tiigrihüppest, me räägime Skypest ja me räägime paljudest muudest asjadest mis on juba ÄRA olnud. Skype pandi kinni eelmine aasta ja tolleks hetkeks oli see juba aastaid tilgutite all olnud. Tänase päeva valguses pole see just eriline põhjus praalimiseks ning nooremad inimesed isegi ei mäleta enam sellist asja. Eeldusel muidugi, et nad seda üldse kunagi on kasutanud.

Sest teate mida? Mitte kedagi ei huvita see kes me olime ja mida me tegime. Tihtipeale ei huvita kedagi ise see mida me praegu teeme, sest juba tunni aja pärast on praegune hetk minevik, pahatihti selline mida keegi enam ei mäleta. Oluline on tulevik, plaanid, unistused, järgmised projektid. Sest mineviku ja oleviku me muuta ei saa, küll aga tuleviku.

Ehk teisisõnu. Jätke Tiiger rahule; Tiigriga on kõik hästi. Toitke teda, sügage teda kõrva tagant ja andke talle uued eesmärgid, selge alguse, keskkoha ja lõpuga. Kui selge siht silme ees, siis küllap Tiiger hüppab. Aga ärge oodake talt võimatut ja ärge nuhelge Tiigri kaela patte millega tal mingit pistmist pole. Sest siis võib tõepoolest juhtuda, et Tiiger solvub ja laseb jalga.

Millal lõpeb sõda?

Kui ukrainlastega juttu puhuda, siis paratamatult tõuseb teemaks sõda. Ja kui jutt juba sõja peale läheb, siis paratamatult jõutakse küsimuseni “kaua see veel kestab?”. Kõikide osapoolte jaoks on see sõda kestnud juba kagelt liiga kaua ja kuigi täiemahulise konflikti alguseks loetakse aastat 2022, siis tegelikult algas see kõik juba 2014 aastal. Kuid see selleks.

Millal siis ikkagi lõpeb see sõda? Kuigi arvamusi on ohtralt, domineerivad vastustes kaks numbrit: kas see aasta või viie aasta pärast, sõltuvalt sellest kaua Venemaa vastu suudab pidada. Justnimelt Venemaa, sest üldine konsensus on see, et millalgi eelmisel aastal hakkas kell tiksuma Ukraina kasuks. Hetkel hakkab Venemaale kohale jõudma, et nad ei suuda seda sõda võita. Enamgi veel, neil ei ole ka kompromissi jaoks erilisi argumente jäänud ja seda mõistab nii Venemaa ise, Ukraina, Euroopa, kui ka kõik ülejäänud maailma riigid.Venemaa kas pakib oma asjad ja laseb see aasta ise jalga või viie aasta pärast lahkub viimane okupant üle piiri jalad ees.

Ma arvan, et Venemaa pakiks hea meelega oma asjad kui poleks ühte suurt aga. Kui nad 2022 aasta oktoobris võtsid Ukraina neli oblastit oma koosseisu (lisaks juba varem kaaperdatud Krimmile), siis ei osanud nad oma halvimateski unenägudes ette näha praegust olukorda. Venemaa põhiseadus keelab riigi territooriumi loovutamise ning praegune võim ei ole suuteline seda muutma. Nad on ennast niivõrd meisterlikult nurka värvinud, et tekinud patiseisust väljumiseks peab toimuma midagi erakordselt drastilist. Ühe võimalusena nähakse hetkel Venemaa võimuladviku täieliku puhastamist. Teisena prognoositakse taktikalise tuumarelva kasutamist. Esimese variandi kasuks räägib muide Abramovitši külaskäik Kiievisse. Ametlikult käis ta kompromiss otsimas, kuid suure tõenäosusega toimus seal ka mitteametlik vestluste voor. Rahajõmmid otsivad enda jaoks väljapääsu — rottidel pole vähimatki isu uppuva laevaga põhja minna.

Lõpetuseks. Kui Euroopa ja Ameerika poleks sõja alguses Ukrainat tagasi hoidnud ja tarninud sinna relvi mida nad praegu tarnivad, oleks konflikt juba ammu läbi olnud. Ma loodan, et see on praeguseks kõigile selge ja selle reha otsa enam ei komistata. Samuti ma loodan, et Venemaa ise suudab selle olukorra kuidagi lahendada, see poleks seal esimene kord kus lahtise akna all tee joomine on ootamatu lahenduse toonud. Senikaua aga pole meil muud teha kui istuda ja oodata. Ja võimaluse korral igati Ukrainlasi toetada.

Kuidas leida vaenlasi ja olla oma ettevõtmistes edutu

Aegade algusest alates on inimesed mõistnud, et kõigile kõike ei jagu ja sestap peab keegi alati ilma jääma.Või vähemalt saama vähem kui isu. Selline asi viis tihtipeale tülini mida sai lahendada ühte, teist või kolmandat viisi. Tähtsamastes küsimustes mis puudutas suuremaid hulki taandus selline tüli suures plaanis kahe leeri vaheliseks. Kahe leeri, mida lihtsuse huvides sai nimetada meie ja nemad. Et asi kohemaid nugade (mõõkade, püstolite, rakettide) peale ei läheks leiutati kunst nimega diplomaatia mis võimaldas erinevatel osapooltel leida ühine pind, jagada asju ja leppida kokku järjekorras. Püüti leida viise kus nii meile kui neile jääks natuke. Alati see ei õnnestunud. Enamasti siiski õnnestus. Meie ja nende vahele oli võimalik tekitada mõistmine.

Viimastel aastakümnetel on tekkinud aga uut tüüpi vastasseis: vastasseis õige ja vale vahel. Suuresti on selles süüdi sotsmeedia millest diplomaatia on täielikult tasalülitatud. Inimesed said kogu ilmarahvale rääkida mida aga sülg suhu tõi ilma, et oleks pidanud hoolitsema oma sõnade tagajärgede eest. Kui vaja leiti omale toetajaid, tekkisid kõlakojad ja lõpuks oli tõde ainult sellepärast tõde, et keegi lihtsalt tahtis nii.

Erinevalt meie ja nende vahel ei ole õigel ja valel ühist pinda. Sel hetkel kui me süüdistame kedagi milleski mis taandub absoluutväärtustele taandub kogu vaidlus ühe poole täielikult võidule ja teise täielikule kaotusele. Näiteks kui teemaks on genotsiid ei saa me leida kõigile vastuvõetavat kompromissi kus maha tapetakse ainult poolt rahvast. Kui me süüdistame kedagi korruptsioonis, siis me ei saa me leppida kokku, et olgu: sina varasta poole vähem ja meie omalt poolt paneme tasakaalu huvides samuti mõned asjad vasakule. See on eriti ohtlik kuna õige on tihti õige ainult sellepärast, et keegi usub, et see on õige ja vale ainult sellepärast vale, et keegi usub nii. Mida tähendab usub? See tähendab seda, et ta on selles absoluutselt kindel, ilma igasuguse vaidlusruumita.

Ja see ongi viinud ühiskonna kihistumisele ning kompromissitusele millest suures plaanis kaotavad kõik, sest isegi võitja jaoks pole võidu hind pahatihti taskukohane. Eriti kui õige ei pruugigi olla õige ja vale vale. Sest igas heas on kurjust ja igas kurjuses headust, mis paraku pole silmale koheselt hoomatav. Seda enam, et tee põrgusse on peaaegu alati sillutatud sõnadega “ma tahtsin ju ainult head”.

Nissan Ariya, pool aastat hiljem

Tumehall Nissan Ariya

Minu eelmine auto sai viis aastat vanaks ja sestap tekkis plaan oma sõiduvahendit kaasajastada. Pärast suuremat vaagimist ja proovisõite jäi sõelale Nissan Ariya. Õigupoolest jäi sõelale kaks autot: Nissan ja Tesla Y, aga pärast mõningastkaalumist otsustasin seekord võimaluse Nissanile anda. Otsustavaks argumendiks jäi siinkohas tõik, et Nissanil on Eestis esindus ning Teslal pole.

Oma loomult ei ole ma autoinimene. Enamus numbrid ei ütle mulle suurt midagi ja isegi kui ütlevad ei lähe mulle suuremat korda. Määravaks faktoriks oli, on ja jääb minu jaoks see tunne kas antud auto on minusuguse inimese jaoks tehtud või mitte. Ariya seda kahtlemata oli, isegi üksjagu rohkem kui Tesla.

Kui kellelgi tekkis küsimus, et miks just elektrikas, siis selleks oli mul tegelikult koguni neli põhjust:

Esiteks oli mul autot vaja linnasõidu jaoks. Elektriauto n.ö. magus punkt on kusagil 40-50 km/h vahel — see on kiirus mil sõiduki kütusekulu on kõige väiksem. Näiteks mul eelmisel autol mis sõitus surnud dinosaurustega oli see kusagil 80-90 vahel. Ühe eelis on ilmselgelt linnas, teisel maanteel. Ma teen 90% oma sõitudest linnas, seega polnudki siin väga midagi mõelda.

Teiseks argumendiks oli, et nii umbes 5 aasta pärast mil ma plaanin järgmist sõidukit soetada on elektriauto müümime ilma igasuguse kahtluseta lihtsam.

Kolmandaks ma proovisin enne ostu erinevaid sõidukeid ja no ei ole midagi parata, elektrikad jätsid mulle tükk maad parema mulje.

Neljandaks on kütuse päritolu. Rõhuv osa traditsioonilisest kütusest tuleb tänapäeval ühest või teisest riigist kuhu suunas ma ei tahaks mitte ühtegi senti teele panna. Ma ei ole eriline eetikaetalon, aga isegi mul jookseb kusagil piir.

Aga.

Ma tegelikult mõtlesin, et ma kirjutan siin mõned punktid mida oleks tahtnud teada enne kui ma uue auto ostsin. Ehk läheb lähheb kellelgi veel neid vaja.

Akujäägi ärevus (range anxiety) ei ole tegelikult teema. Päriselt ka, ma olen sõitnud oma Ariyaga risti ja rästi läbi kogu Eesti, käinud kaks korda Leedus ja võin kinnitada — mul ei ole korda tekkinud isegi servast tunnet, et võiks kuhugile tee peale ripakile jääda. Kui kusagil on elekter on seal võimalik vajaduse korral sõidukit laadida. Ja kiirlaadimisjaamu on praeguseks juba jalaga segada.

Mis viib meid punkti juurde, et tanklad ei ole samuti teema. Kui kodus laadijat pole, siis saab laadida enam-vähem suvalise supermarketi parklas. Ja kuna poodi on iga paari päeva tagant ikka asja, siis tähendab see seda, et aku on enam-vähem jooksvalt täis. Ma olen poole aasta jooksul spetsiaalselt autot laadinud vaid nii umbes 5-6 korda, enamus neist nende kahe Leedu sõiduga seoses mida ma ennist mainisin.

Laadimiseks piisab mobiilirakendustest. Alguses on see pisut tüütu, kuid praeguseks on mul kõikide olulisemate laadijate rakendused olemas. Nende kvaliteet küll kõigub veidi, kuid suures plaanis töötavad nad sarnaselt: lisad om kaardi makseviiside hulka, sõidad laadimisjaama juurde, viskad kaabli külge ja klikid laadimise käima. Mingeid kaarte, lepinguid ja muud jura pole tegelikult vaja. Kui sul peaks olema elektritarbimise leping mõne tarnijaga, siis saad veel alet kah.

Aeglasem laadimine on odavam, teinekord koguni poole odavam. Lisaks kogu see soga laadimiskiiruste kohta pole eriti oluline: esiteks olen ma poole aasta jooksul sattunud laadima vist kokku 3 korda kohas kus mul õnnestus kolmekohaline laadimiskiirus kätte saada. Kohti kus TEOREETILISELT on selline kiirus on olnud kümneid ja kümneid. Teiseks kusagil 40kW juures on laadimine väidetavalt kõige akut säästvam. Kui sul kiiret poole, siis pole mõtet ka akut piinata.

Laadijaid on meie kandis kokku kolme sorti: CHAdeMO, mis on sama hästi kui surnud, aga kuna see on kasutuses vanematel ja endiselt väga levinud Nissan Leafidel, siis neid veel ära ei kaotata. Praktiliselt kõik uuemad autod on CCS2 ühendusega ja nende jaoks on ka rõhuv enamus laadijaid on selle jaoks mõeldud. Eksisteerib ka Type 2 mis on CCS2-e alamosa (ma üldistan siin pisut, aga suures plaanis on see nii). Praktikas tähendab see seda, et kui autol on CCS pesa, siis võtab see vastu ka Type 2-e.

Elektriautode distants on üllatavalt hea. Näiteks ametlikult lubab Nissan, et Ariya sõidudistants täisakuga on 450km. Praktikas oli see talvel nii umbes 400km ja suvel kuni 600km. See viimane oli ikka väga suur üllatus; selgus näiteks, et ma sain Kaunasest Tallinnasse ühe laadimisega.

Mis distantsi maanteesõidul puutub, siis elektrisõidukite puhul hoiab akut kokku kui mõne suurema sõiduki tuules liikuda. Kusjuures see kokkuhoid on päris raju: 10-20%.

Ma kirjutan oma kogemustest ilmselt veel. Hetkel on mul endale sellega seoses ainult üks etteheide: oleks ma teadnud kui äge sõiduk see on, oleks ma Ariya juba aasta varem ostnud.

PHP: sizeof vs count vs empty

PHP

PHP on praeguseks juba võrdlemisi eakas programmeerimiskeel / infrastruktuur, selle esimene ametlik versioon ilmus 8. juuni, 1995. Pea kolme aastakümne jooksul on see toonud leiva lauale mitmele põlvkonnale tarkvaraarendajatest, PHP põhine WordPress on de facto kodulehtede ehitamise kullastandard ning tegemist on ideaalse platvormiga algajale. Kuid sellel on ka mitu suurt viga ja üks neist on see, et asju on võimalik teha mitut moodi. Ning tavaliselt on üks neist selgelt parem.

Järgnev artikkel võrdleb üsna tüüpilist stsenaariumit kus programmil on vaja teada enne andmete töötlemist kas massiivis üldse on andmeid. Selleks on mitu võimalust. Esimese hooga suutsin ma leida viis erinevat viisi seda teha ja kirjutasin nende võrdlemiseks kiire testskripti:

<?php

$data1 = ['one', 'two', 'three'];
$data2 = array_fill(0, 1000000, 'something');
$functions = ['e', 'c', 's', 'x', 'y'];
$times = 10000000;

echo phpversion() . "\n";

foreach ($functions as $f) {
    echo "Function: $f small\n";
    $start = microtime(true);
    for ($i = 0; $i < $times; $i++) {
        $f($data1);
    }
    echo 'Time elapsed: ' . (microtime(true) - $start) . "\n";
    echo "Function: $f big\n";
    $start = microtime(true);
    for ($i = 0; $i < $times; $i++) {
        $f($data2);
    }
    echo 'Time elapsed: ' . (microtime(true) - $start) . "\n";
}

function e(array $data)
{
    return empty($data);
}

function c(array $data)
{
    return count($data) > 0;
}

function s(array $data)
{
    return sizeof($data) > 0;
}

function x(array $data)
{
    return (bool)$data;
}

function y(array $data)
{
    return $data !== [];
}

Ettetõttavalt tuleb erinevad variandid on isoleeritud eraldiseisvatesse funktsioonidesse mis ei ole just kõige tõhusam viis seda teha, kuid kuna sellega kaasnev ballast on kõikide võimaluste jaoks sama, siis ei ole see probleem. Allpool on tulemused:

5.6.40-pl17-zoneos
Function: e small
Time elapsed: 0.68565702438354
Function: e big
Time elapsed: 0.67864203453064
Function: c small
Time elapsed: 1.0022921562195
Function: c big
Time elapsed: 0.99124312400818
Function: s small
Time elapsed: 1.0054261684418
Function: s big
Time elapsed: 1.0156378746033
Function: x small
Time elapsed: 1.2238240242004
Function: x big
Time elapsed: 12.408221960068
Function: y small
Time elapsed: 0.86892318725586
Function: y big
Time elapsed: 0.8515739440918
7.4.33
Function: e small
Time elapsed: 0.18914604187012
Function: e big
Time elapsed: 0.18664002418518
Function: c small
Time elapsed: 0.20966601371765
Function: c big
Time elapsed: 0.20747518539429
Function: s small
Time elapsed: 0.20873785018921
Function: s big
Time elapsed: 0.20844912528992
Function: x small
Time elapsed: 0.19939112663269
Function: x big
Time elapsed: 0.20096492767334
Function: y small
Time elapsed: 0.21982216835022
Function: y big
Time elapsed: 0.21845602989197
8.4.1
Function: e small
Time elapsed: 0.17859983444214
Function: e big
Time elapsed: 0.1792311668396
Function: c small
Time elapsed: 0.19513893127441
Function: c big
Time elapsed: 0.19733500480652
Function: s small
Time elapsed: 0.19513511657715
Function: s big
Time elapsed: 0.1961989402771
Function: x small
Time elapsed: 0.17471885681152
Function: x big
Time elapsed: 0.17510986328125
Function: y small
Time elapsed: 0.21288394927979
Function: y big
Time elapsed: 0.21385288238525

Nagu näha viisin ma testid läbi kolme erineva PHP versiooniga (5.6, 7.4 ja 8.4). Tulemused on järgnevad:

Kõige kiirem viis on tüübi vahetamine (castimine) (bool)$data meetodil (praktikas kasutatakse seda nõnda: if ($arrayData) {...}). Aga. Kui andmete hulk on vähegi tõsine, siis PHP 5.6 ei suuda seda hallata ning sestap muutub antud meetod selle versiooni puhul (ilmselt kehtib see ka eelnevate versioonide kohta) hoopis drastiliselt aeglasemaks. Et skript üldse mõistliku aja sees oma toimetamise lõpetaks kärpisin ma selle versiooni puhul suure massiivi elementide arvuks 100. Kõikidel muudel versioonidel on suures massiivis 1000000 elementi.

Paneme asjad järjekorda, kiiremast aeglasemaks:

  1. Tüübi vahetamine
  2. empty()
  3. count()
  4. sizeof()
  5. Tühja massiiviga võrdlemine

Nagu ma ennist mainisin pole PHP 5.6-s tüübi vahetamine mõistlik. Õnneks on see versioon juba nõnda vana, et kui keegi seda reaalselt praktikas kasutab, siis on kiirus kogu asja juures kõige väiksem mure.

empty() funktsioon on kohe järgmine. Seda on mõttekas kasutada näiteks siis kui mängu tulevad callback / callable funktsioonid.

count() sisaldab endas lisafunktsionaalsust, kuna ta võimaldab teada saada ka mitu elementi on massiivis. See teeb selle pisut aeglasemaks.

sizeof() on count() funktsiooni alias. See on veidike aeglasem kui count() kuna sisaldab endas sisemist suunamist.

Massiivide võrdlemine ei ole üleüldse hea mõte. Pealegi nagu näha on see kõige aeglasem viis teada saamaks, et andmeid pole.

Aga miks kõik see? Me räägime ju sekundi murdosadest? Ühest küljest ei olegi. Teisest küljest natuke siit ja natuke sealt ning sellest tingituna on mõned veebirakendused kiiremad kui teised, ei vaja nõnda jämedat rauda ehk siis hoiavad nõnda kokku inimeste aega ja raha.

Ning siin on üks tahk veel — see aitab hinnata programmeerija kompetentsust. Kui ta on teadlik nendest nüanssidest, siis tähendab see seda, et ta on viitsinud süveneda, aru saada ning optimeerib oma käekirja ka väikestes detailides, rääkimata suurtest.

Suur jalutuskäik Minskisse

See jutt on jätkuks eelmisele postitusele (Suur jalutuskäik Moskvasse).

Nagu ma seal mainisin oli sõjakäik Moskvasse plaanis juba ammu; võimalik, et esimesed sammud selleks astuti juba eelmine aasta. Asjaga rohkem kursis olevad inimesed märkavad kohe, et see paistab olevat seotud plaaniga liita 1. juulil seniajani üsna isepäiselt majandanud Vene eraarmeed ametlike relvajõududega. Tõenäoliselt see panigi paika kuupäeva, kuid samas tekitab küsimuse: kumb oli enne kas muna või kana? Kas marsi käivitas see korraldus või oli hoopis see korraldus ellu kutsutud selle marsi vältimiseks? Suure tõenäosusega ongi põhjus viimases, sest see paistab olevat uisapäisa vastu võetud otsus pidurdamaks protsessi mis oli selleks hetkeks juba käivitunud.

Kuid, nagu ütleb telepoe mees, pole see veel kõik.

Prigožini poolt läbi viidud (suuresti retooriline) küsitlus andis tulemuseks, et vaid 1-2% ta sõduritest on üldse huvitunud ametlike relvajõududega liitumisest. Seda kinnitab ka nuppude paiklemine laual: esiteks ei läinud ta üksused mitte laiali, vaid taandusid baasidesse mis asusid paari suurema sõjaväelennuvälja vahetus läheduses. Teiseks suundus Prigožin Lukašenko kutsel Minskisse. Mitte Aafrikasse oma operatsioone kontrollima vaid Minskisse. Ning vahepeal ilmnes ka kolmas nüanss: Wagner on avanud uue baasi Asipovičys, linnakeses mis asub Minskist saja kilomeetri kaugusel kagus, paarisaja kilomeetri kaugusel nii Venemaast kui Ukrainast. Seal asub / asus päris mitu sõjaväebaasi, millest vähemalt üks on praeguseks juba suletud. Linnakeses elab hetkel mingi 30000 elaniku ehk siis kui Wagner sinna sisse kolib kahekordistub selle elanike arv.

Aga mida see kõik tähendab?

Praeguses hetkel on Valgevene relavjõududes isikkoosseisu kokku vaid pisut rohkem kui Wagneril. Meediast läbi jooksnud 25000 oli vaid see kogus mis tegutses Ukrainas ja Doni äärses Rostovis. Üle kogu Venemaa on värbamise ja väljaõppega seotud veel umbes teist sama palju inimesi. Kui nüüd kõik asjaga seotud tegelased Valgevenesse saabuvad muutub Lukašenko piirkonnas oluliseks tegijaks. Tähelepanuks nii palju, et kui kellelegi tundub see justkui plaanina Ukrainat teiselt poolt rünnata, siis selleks polnud kogu seda tsirkust vaja: suure tõenäosusega antakse hoopis Venemaale mõista, et Wagnerist on Valgevene julgeoleku jaoks enam kui küll ning riigis asuvatel Vene väeosadel on nüüd aeg oma kohvrid pakkida ja jalga lasta. Ehk teisisõnu: Lukašenka värbas omale just massiivse eraarmee, tehes seda näilise abikäe egiidi all.

Mis on loomulikult pelk fassaad. Venemaa on näidanud ennast nõrgana, Valgevene on näidanud ennast sõltumatuna ja Lukašenka käes on kaart mis pikemas perspektiivis võib teda rahvusvahelise ülduse silmis vähemalt osaliselt rehabiliteerida. Sest kes ikka hakkab kandma vimma mehe vastu kes kriitilisel hetkel poolt vahetas ja Putini bussi alla viskas.

Lõpetuseks niipalju, et see kõik ei ole päevade, vaid pigem nädalate küsimus. Aga. Šoigu on taaskord tsiviilriietuses, Putini koosolekutel on tema liitlaste näod hallid, Ukraina rindel valitseb kaos ja Lukašenka muheleb vurru.

Ning Asipovičys ei ole Rostov Doni ääres, see asub poole lähemal.

Suur jalutuskäik Moskvasse

Nagu Eesti iseseisvusega seotud pühadel ikka tähistati Venemaal meie Võidupüha sootuks imelikul moel: Wagneri eraarmee ninamees ja endine kriminaal Jevgeni Prigožin teatas, et Venemaa on minetanud igasuguse tõsiseltvõetavuse, Ukraina sõda on vaid pelk kattevari korruptsioonile ning süüdlasi on vaja nuhelda. Tema sõnavõtt sisaldas kas pahategijate nimesi: kaitseminister Sergei Šoigu ja vägede ülemjuhataja Valeri Gerasimov kelle ebakompetentsuse kontole kirjutas ta muu hulgas ka mitu tuhat Bahmuti all langenud sõdurit mida siis avalikkuse eest on usinasti varjatud. Sestap murdis ta paljuvõsast korraliku vitsa, ajas sõjamehed kokku ja võttis Moskva tee jalge alla.

Nii möödus päev, erinevad osapooled vahed viisakusi, alla lasti 7 lennumasinat ja äkitselt sekund enne Kremli tornide paistma hakkamist teatas sõjapealik, et tal ärkas ootamatult südametunnistus ning kaastunne oma kaasmaalaste vastu. Ehk teisisõnu: pärast Valgevene diktaatori Aleksandr Lukašenka südantlõhestava sisuga telefonikõnet otsustas sõjakäigu sinnapaika jätta, vitsa kraavi visata ja naaberriigi juhile Minskisse külla minna. Selline sündmuste käik oli sedavõrd ootamatu, et isegi kogenud analüütikud ei osanud seda oodata.

Mis seal siis toimus?

Seda mis tegelikult toimus saame me arvatavasti teada alles aastate pärast kui siiski. Ometigi võib siinkohas teha mõningasi oletusi.

Eelmise aasta augusti lõpus (mis juhtumisi langeb kokku Eesti Taasiseseisvumispäevaga), said venelased mitmes suuremas kokkupõrkes oluliste lüüasaamiste osaliseks ja olid sunnitud Harkivi alt taanduma Oskili jõe taha ja kohati veelgi kaugemale. Ukrainlased vabastasid ulatuslike territooriume ning Venemaa koorekihile hakkas jõudma kohale kohale kurb kuid vääramatu tõsiasi: seda sõda ei ole tõenäoliselt võimalik võita. Putin, soovimata näidata välja nõrkust vahetas operatsiooni juhte ning andis korralduse pingutusi kahekordistada. Oodatud edu asemel kaotasid nad hoopis Dnepri jõe läänekalda ühes Hersoniga.

Ma arvan, et sündmuste alguse leiabki just sealt. Venemaa rahva jõukam osa kaotas tänu sanktsioonidele, majanduslangusele, natsionaliseerimisele ja varade külmutamisele ühtekokku triljoneid eurosi, lisaks vabaduse reisida ja ajada piiritagust äri. Kui lisada siia juurde kahjud mida kandsid Venemaal tegutsevad õhtu- ja hommikumaa ettevõtted on tegemist läbi aegade majanduslikult ühe halvima ettevõtmisega mida saab siduda ühe konkreetse inimesega — eriti arvestades sellega kuivõrd väike oli kogu ettevõtmise mastaap näiteks Teise Ilmasõjaga. Kuigi Vladimir Putin oli ja paljuski endiselt on Venemaal populaarne, ei saa temagi selliseid möödapanekuid endale lõputult lubada.

Ometigi jättis ta kasutamata võimaluse väita, et nõunikud on teda petnud, raputada omale pähe tuhka ja taanduda endiste piiride taha. Häving jätkus, kahjum suurenes ja Ukraina rahvusvahelised partnerid selle asemel, et tüdineda hakkasid lisaks tavarelvastusele tarnima tanke, õhutõrjesüsteem ning hetkel käib jutt isegi lennkitest.

Ühel või teisel viisil ei saanud Venemaa eliit enam sündmuseid käed rüpes vaadata. Aga mida teha?

Lääneriikidel on selliste asjade tarbeks tööriist nimega kodanikuühiskond ja vabad valimised, mis paraku Venemaal ei toimi: sealsed valimised on kaugel vabadusest ja isegi kui need valimised oleks vabad puudub seal kodanikuühiskond. Praktikas tähendab see seda, et inimesed ei mõista oma tegude tagajärgi ning massiivse propagandamasina tõttu oleks Putin ühel või teisel viisil tagasi valitud. See viimane oleks välistanud näiteks revolutsiooni rääkimata sellest, et revolutsioonid on läbi ajaloo peaaegu alati halva hullemaks teinud. Ehk teisisõnu, ainuke võimalus vahetada välja tagumik mis Kremli tugitoolidel troonib oleks olnud sõjaväeline riigipööre ja hunta.

Kuid hunta eeldab omakorda sõjaväe juhtkonna toetust. Aimates sündmuste sellist arengut on Putin äärmiselt ettevaatlikult hoolitsenud selle eest, et võim kuuluks vaid käputäiele inimestest kes on talle üdini lojaalsed. Ehke teisisõnu enne sõjavälise riigipöörde algust on tarvis välja vahetada sõjaväe võimuladvik, sest vastasel korral oleks paratamatult alanud kodusõda — isegi kui õnnestub veenda piisavat madalama taseme juhte, ei ole võimalik veenda neid kõiki ning mida potentsiaalsed liitlased tegelikult teevad oleks saanud näha alles siis kui tankid Moskva tänavatel veerevad. Selline asi juba juhtus korra 1991 aasta augustis ja viis muu hulgas Eesti iseseisvuse väljakuulutamiseni.

Sestap oli vandenõulastel vaja näidata Putini totaalset võimetust, juhtkonna otsustusvõimetust ning süsteemi üldist nõrkust. Saatuse tahtel leidsin nad sobiva olukorra tekitamiseks vajaliku isiku Wagneri juhi Jevgeni Prigožini näol. Kuigi olles endine kriminaal ja praegune maailma kõige ebafotogeenilisem tegelane oli selge, et tegemist on Venemaal populaarse isikuga. Wagner oli ainuke rühmitus mis suutus Ukrainas edu saavutada ning Prigožin oma maalähedaste ja kohati vulgaarsete maneeridega oli vene lihtinimesele arusaadav. Tema populaarsus hakkas ohustama isegi Putini positsioone mis tähendas seda, et ta oli sunnitud hoidma eemal kõrghoonetest akendest ning loobuma tee joomisest. Oli ainult aja küsimus mil ta oleks oma kurva lõpu leidnud.

Ma ei hakka siinkohas pajatama sündmustest mis viisid ta sellesse punkti kus ta praegu on, kuid suures plaanis on tema huvid sellises mängus samasugused nagu kõikidel ülejäänutelgi — elada kaua, olla rikkad ja omada võimalust seda rikkust nautida. On ebaselge kas ta oli kogu plaaniga juba algusest peale seotud või tehti talle hiljem pakkumine millest ta keelduda ei saanud, kuid selge on see, et tema kanda jäi kogu ettevõtmise kõige nähtavam ja samas ka kõige ohtlikum roll: hävitada täielikult Vene armee juhtkonna reputatsioon. Kuna tal ei olnud selleks hetkeks enam midagi kaotada alustas ta operatsiooniks ette valmistamisega: ta värbas lisaks vangidele ka Wagnerile lojaalseid sõdureid keda säästeti hakklihamasinast. Kas te teate, et Wagneriga liitumise ajal tuleb täita küsitlusleht kus muu hulgas päriti, et kas liituja on valmis vajaduse korral osalema operatsioonides Vene territooriumil? Te võite juba oletada milliseid inimesi ta varuks hoidis.

Sealkohas oli veel üks oluline detail: kuna venelaste võit ei ole praeguseks ajaks enam võimalik tuleb kasutada soodsat võimalust see konflikt lõpetada. Hetkel oli selleks soodne olukord: Ukraina oli just alustanud pealetungi, mis sidus Vene armee kõik vabad ressursid. Sestap tegi Prigožin seda mida oleks pidanud tegema Putin: ta teatas, et teda ja rahvast on petetud ning ilma igasuguse väljavaateta edule on surnud või sandistunud sadu tuhandeid venelasi; piisavalt, et iga venelane tunneks vähemalt paari kolme isiklikult. Samuti toonitas ta, et pea kõik süüdistused Ukraina aadressil on fabritseeritud. See ei tulnud nagu välk selgest taevast, ta on seda teemat laiendanud juba mitu kuud. See suurendas tema populaarsust veelgi ning oli avapauguks tema Suurele Jalutuskäigule.

Lukašenka sõnumitoojana oli huvitav, kuid mitte üllatuslik. Ta on jätnud endast pisut kohtlase mulje, kuid samas on ta üsna oskuslikult laveerinud Venemaa surve eest ühineda “erioperatsiooniga”. Ta suutis muu hulgas ka osavalt vältida 9. mai pidustusi teeseldes (arvatavasti) haigust. Ta on juba mõnda aega otsinud võimalust enda Venemaast distantseerimiseks ning olgem ausad — üks asi on paista kohtlane ja teine asi on olla reaalselt kohtlane. Kui sa tahad olla diktaator, siis viimane variant ei ole lihtsalt võimalik. Seega …

Igal juhul oli selge, et kui Wagner oli just Moskvasse jõudmas ütlesid Kremli asjapulkade närvi ülesse. Üheks tingimuseks oli arvatavasti Šoigu ja Gerasimovi erru saatmine ning asendamine vandenõulaste jaoks sobilike inimestega. Üheks neist pakutakse Sergei Suvorikinit kes määrati selle aasta alguses Ukraina operatsiooni juhtima ja kelle üks esimesi korraldusi oli Hersoni loovutamine. Surovikin on Wagneris ärihuvid ning ühes sellega on ta suuresti Prigožiniga samas paadis.

Mis edasi saab?

Kui sõjaväe juhtimine on siirdunud sobivate inimeste kätte hakataks järjest paljastama möödapanekuid Ukrainas, milles loomulikult on süüdi eelnev juhtkond. Putin leiab ennast peatselt koduarestist ning sõjavägi võtab võimu üle. Suure tõenäosusega pole huntal vähimatki huvi pidada kurnavat ja samas mõttetut sõda ning pärast lühikesi kuid intensiivseid läbirääkimisi annavad nad hõivatud territooriumid vabatahtlikult Ukrainale tagasi. Venemaa endas sees nihkub võim ja raha endiste vandenõulaste kätte; see annab võimaluse tuvastada kes selles mängus tegelikult osalesid. Prigožin loobub mingil hetkel Venemaal tegutsemisest ning viib oma ärid valdavalt Aafrikasse üle, esindades seal Vene huve. Võimalik, et 10-15 aasta pärast naaseb ta duumasaadiku või kubernerina Vene poliitikasse.

Kuid enne paleepööret on Wagneril arvatavasti veel oma roll täita, seega ma ei oleks üllatunud kui paari nädala pärast näeme kas Prigožin või tema armeed või mõlemad uuesti ringi asjatamas.

PHP 8.0: Muudatus funktsioonis strrpos()

PHP

Nüüd kus PHP 7.x-i enam parketikõlbulikuks ei peeta ilmneb, et mitte kõik rakendused ei taha uuemate PHP versioonidega toimida. Mitte alati ei ole nende põhjus üheselt selge ning töö käigus ilmnevad siin ja seal pooldokumenteeritud muudatused mis võivad lohakale arendajale kaika valusal kombel kordaratesse torgata. Üheks selliseks funktsiooniks on strrpos().

Selleks, et asja olemusest aru saada tuleb vaadata kõigepealt funktsiooni signatuuri ja pöördumisväärtuseid. Php.net ütleb selles kohta nii:

strrpos(string $haystack, string $needle, int $offset = 0): int|false

Returns the position where the needle exists relative to the beginning of the haystack string (independent of search direction or offset).

Returns false if the needle was not found.

Enne PHP 8.0-t töötas see funktsioon nõnda, et kui $offset läks string piiridest välja (tavaliselt oli selle põhjuseks tühi $haystack) oli pöördumisväärtuseks false. Alates PHP 8.0-st on tulemuseks hoopis:

Fatal error:  Uncaught ValueError: strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

Ehk siis tulemuseks on kriitiline viga ning koodi edasi töötlemine lõpetatakse. Ühest küljest on see halb, sest dokumentatsioon seda situatsioon ei kata. Teisest küljest on see mõistetav, sest strrpos() on lõppeks ikkagi funktsioon ning hea tava näeb PHP-s ette, et küllalt ressursimahukaid funktsioone ei kasutata tuvastamaks kas andmeid on võimalik töödelda või mitte. Igal juhul oleks korrektne lahendus kontrollida if lausega ega string juhtumisi pole tühi. Alternatiivse variandina võib try / catch-iga püüda kinni \ValueError ja jätkata nii nagu algne kood ette nägi. See viimane lahendus läheb loomulikult vastuolla heade tavadega, kuid teinekord on oluline lihtsalt kood käima saada.

Siinkohas oleks paslik märkida, et \ValueError on uuendus mis toodi sisse PHP 8.0-s. Ehk siis sellepüüdmine ei toimi varasemate PHP-dega. Kui kood peab olema ka tagurpidi ühilduv peaks kasutama kas \Exception-it või klassi polyfillimist:

if (!class_exists('\ValueError')) {
    class ValueError extends \Error {
    }    
}

Ahjaa, märkuseks niipalju veel, et kuigi algne teemapüstitus puudutas ühte konkreetset funktsiooni mõjutab see muudatus veel teisigi, näiteks strpos(), range(), array_rand() ja võib-olla midagi veel on samuti selles muudatusest mõjutatud.

PHP 8.3: json_validate()

Kuigi PHP 8.3 ei ilmu just homme (hetkel on see planeeritud selle aasta 23. novembriks) on aeg hakata kaema sellega kaasnevaid uuendusi. Esimeseks neist saab olema uus funktsioon json_validate().

PHP

JSON (JavaScript Object Notation) on avatud andmestandard mida on juba aastaid kasutatud andmete vahetamiseks ning salvestamiseks, mis on õhuke ning minimaalselt ressurssi nõudev ja ühes sellega päris paljudes kontekstides praeguseks asendanud XML-i. Praeguseks on nii, et kui mingid asjad peavad veebis omavahel andmeid vahetama, siis tavaliselt kasutavad nad selleks JSON formaati. Asjale muidugi aitab kaasa ka nüanss, et JSON on enam-vähem inimloetav, andmete kontrollimiseks ei ole seetõttu vaja eraldi tööriistu.

Samas on PHP-s JSON-ga seotud üks väike kuid tülikas probleem: nimelt selleks, et kontrollida andmeformaadi õigsust pidi varem andmed json_decode() abil objektiks konverteerima. Kui andmemahud olid piisavalt suured, siis tõstis see andmevahetuskihi jaoks nõudeid protsessorile või töötlemisajale, mis näiteks AWS-i puhul kippus kiiresti reaalseteks kuludeks muutuma. Sestap siis json_validate(), mille eesmärk on vaid andmeid kontrollida.

Funktsiooni signatuur näeb välja selline:

/**  
 * Validates a given string to be valid JSON.
 * 
 * @param string $json String to validate  
 * @param int $depth Set the maximum depth. Must be greater than zero.  
 * @param int $flags Bitmask of flags.  
 * @return bool True if $json contains a valid JSON string, false otherwise.  
 */  
function json_validate(string $json, int $depth = 512, int $flags = 0): bool {  
}

Kes tahab sellest funtksioonist rohkem teada saada vaadaku siia ja kui kedagi beaks huvitama bitmaski väärtused, siis selle info leiab siit.

Märkuseks veel niipalju, et seda funktsioon on võimalik polyfillida, ehk siis koodi on võimalik teha vanemate PHP versioonidega ühilduvaks kasutade järgmist meetodit:

if (!function_exists('json_validate')) {  
  function json_validate(string $json, int $depth = 512, int $flags = 0): bool {  
    if ($flags !== 0 && $flags !== \JSON_INVALID_UTF8_IGNORE) {  
      throw new \ValueError('json_validate(): Argument #3 ($flags) must be a valid flag (allowed flags: JSON_INVALID_UTF8_IGNORE)');  
    }  

    if ($depth <= 0 ) {  
      throw new \ValueError('json_validate(): Argument #2 ($depth) must be greater than 0');  
    }  

    \json_decode($json, null, $depth, $flags);  

    return \json_last_error() === \JSON_ERROR_NONE;  
  }  
}

See lahendus on hetkel PHP 8.0 ühilduv ning kui \ValueError asendada näiteks \Exception-ga, siis töötab see isegi PHP 7.3-ga. Sestap võib selle funktsioni juba praegu oma koodi lisada.

Pages:1234567...146