Ohje: simppelit patongit

Vuoden 2020 ns. koronakevät herätti henkiin joitakin uinuvia kiinnostuksiani. Yksi niistä on leivonta. Tuli perehdyttyä perinpohjaisesti esim. hapanjuurileivontaan. Siitä enemmän ehkä myöhemmin, mutta ajattelin nyt aloittaa aiheella, jonka suurin osa tuntee: patongit! Miten herkullisia onkaan parhaat patongit, mitä kaupasta saa, eikö niin? Patonkien teko on maailmalla suuri ala; harrastelijan on vaikea päästä samalle tasolle ammattimaisten patongintekijöiden kanssa.

Yritetäänkö silti jotain? Kun hankin patonkipellin, tuli tarve optimoida insinöörimäisesti: miten tehdään pienimmällä mahdollisella vaivannäöllä parhaimmat mahdolliset patongit? Tähän hommaan tarvitaan siis patonkipelti, nettikaupoissa hinta on 20€ nurkilla. Itse tilasin pellin keittiovaline.fi:stä. Sitten ne ainekset:

  • 500g jauhoja, joista vähintään noin 380g tavallisia puolikarkeita vehnäjauhoja. Koko määrä voi koostua samoista jauhoista, mutta muutaman kokeilun perusteella tuli paras tulos, kun mukana on 60g karkeita vehnäjauhoja ja 60g ruisjauhoja: tulee vähän ytyä hommaan. Spelttikin toimii erinomaisesti lisäjauhona!
  • 10g suolaa (pari teelusikallista). Suola vaikuttaa paitsi makuun, myös rapeuteen.
  • 1tl kuivahiivaa, mieluummin vajaa, kuin kukkura lusikallinen. Sitä ei tarvita paljon tähän, sillä nostatusaika on pitkä. Vaihtoehtoisesti nokare tuorehiivaa, tai…hapanjuurta!! (lisää viimeksimainitusta myöhemmin)
  • 3-4 dl vettä kädenlämpöistä vettä, 37-40 astetta, ei ole kovin tarkkaa, kunhan ei ole paljon yli 40 astetta. Mitä enemmän vettä laitetaan, sitä haastavammaksi taikinan käsittely menee, mutta saadaan toisaalta sitä ilmavampi lopputulos. Patonkipelti tukee muodon pysymistä, joten siitä ei tarvitse välittää. Kuvan patongit tehtiin 4 dl-määrään. Leipurit puhuvat hydraatiosta: 4dl tarkoittaa tässä 80% hydraatiota.

Sekoitetaan ensin kuivat ainekset keskenään, sitten lisätään vesi. Helpointa on hoitaa homma kädellä, puolen minuutin vaivaaminen riittää. Kädet sotkeutuvat tässä, mutta mitä sitten?

Laitetaan kansi taikinan päälle ja odotetaan 12(!) tuntia huoneenlämmössä. Pitkä nostatusvaihe tuo taikinaan vähän hapanjuurimaisen makumaailman. Odottaminen on vähän tylsää, joten kannattaa tässä välissä mennä töihin tai nukkumaan. Älä pelkää, vaikka taikina tuntuu tuon ajan jälkeen löysältä ja oudolta…se saattaa jopa kuplia vähän.

No niin, patonkien leivontaan. Ensin jauhotetaan pöytä reippaasti, varsinkin, jos taikina on jätetty löysäksi. Kaadetaan taikina varovasti, mieluiten leivontalastan avulla. Taikinaa kuuluu käsitellä mahdollisimman hellästi, ettei kaikki taikinan ilmakuplat puhkeaisi.

Taikina jaetaan neljään osaan ja venytellään pitkulaisiksi ihan vain roikuttelemalla ja muotoilemalla varovaisesti käsissä; ulkonäöstä ei tarvitse välittää. Kannattaa varoa käsittelemästä taikinaa liikaa ja annetaan lötkäreiden mennä sellaisiksi, kuin ne muotoutuvat. Laitetaan oliivi- tai rypsiöljyllä sivellylle patonkipellille (joka kannattaa olla oikean pellin päällä sotkujen välttämiseksi).

Annetaan patonkien nousta vielä tunnin verran liinan alla. Sillä aikaa lämmitetään uuni 230 asteeseen niin, että pohjalla on jokin tyhjä astia. Leikataan terävällä veitsellä (partaterä on paras, mutta ei pakko) viillot patonkeihin pituus-suunnassa. Kun patongit on laitettu uuniin, vesiastiaan heitetään desin verran vettä niin että paistotilaan tulee ”löylyt”, ja laitetaan luukku heti kiinni. Vesihöyry tekee patonkeihin rapean pinnan. Paistetaan 22-25 minuuttia. Jäähdytetään patonkeja hetken liinan alla, ennenkuin leikataan.

Simppelit patongit – mutta makua löytyy!

Vertaapa makua viimeksi ostamaasi patonkiin. Onko kalliimpi niin paljon parempaa, että sitä kannattaa jatkossa ostaa? 🙂

Löytyi kuva vuodelta 1988

Luulin, ettei 18-vuotiaasta minusta ole juuri kuvatodisteita. Veljeni teki minut iloiseksi näyttämällä tämän kuvan minulle: olen siinä huoneessamme, jonka yhden nurkan olen vallannut harrastuksilleni: vasemmalla on ensimmäinen radioamatööriasemani (tunnukseni oli tuolloin SM4SWF), ja edessäni on muistaakseni Osborne-merkkinen  ns. PC XT, jossa oli hurjat 640kB keskusmuistia ja 20MB kiintolevy. Modernisti kaksi näyttöä, toinen mustaoranssi (VGA eli 640x480px) ja toinen värillä (CGA 320x200px).

Facebookissa kysyttiin, mistä sain tuolloin varat tällaisten laitteiden hankintaan. Töillä: olin kesäisin töissä talotehtaalla, ja juuri edeltävänä kesänä olin ollut turvesuolla. Marjanpoiminnasta sai myös rahaa. Minulla oli valtava intohimo tällaisiin asioihin. Lisäksi alakerrassa oli tasapainon vuoksi piano.

Facebookin mainoksista

Näin tänään alla olevan ikkunapesurimainoksen. Juuri, kun olin muutama päivää sitten ostanut samanlaisen. Miten tämä on mahdollista, minähän ostin omani Lidlistä, ja tämä on Clas Ohlson-mainos? No, tässä tapauksessa taustalla oli erittäin todennäköisesti puhdas sattuma; ihmisen mieli yrittää tunnistetusti löytää yhteyksiä satunnaistenkin tapahtumien välille.

Tällä tavalla voit varmistaa, miksi mikäkin Facebook-mainos näkyy sinulle: klikkaa mainoksen yläoikealta ja valitse valikosta Miksi näen tämän mainoksen:

Avautuu tällainen ikkuna:

Voiko mainoksia estää näkymästä?

Mainokset ärsyttävät usein, tiedän. Mainonta on kuitenkin syy siihen, miksi Facebookin kaltaiset palvelut ovat ilmaisia. On toki olemassa mainosten blokkausjärjestelmiä. Itselläni ei ole niistä kokemusta, enkä tiedä, miten hyvin ne toimivat Facebookin kanssa. Olen ammattinikin puolesta kiinnostunut mainostamisesta, joten annan mainosten näkyä. Mutta voin toki jonkin verran vaikuttaa siihen, millaisia mainoksia näen. Jos nimittäin törmään ärsyttäviin ja ehkä toistuviin mainoksiin, voin ylläolevasta mainoksen yläkulman valikosta valita Piilota tämä mainos. Loukkaavan mainoksen voi myös ilmiantaa Ilmianna mainos-kohdasta.

Mainokset kohdistuvat enemmän tai vähemmän tarkasti Facebook-toimintasi mukaan. En ole kovin tarkkaan ajantasalla tämänhetkisistä algoritmeista, mutta mainostaja voi kohdistaa mainoksen itsestäsi kertomien asioiden lisäksi muilla tavoin ilmaisemasi kiinnostuksiesi perusteella. Facebook on mainostajille kiinnostava alusta juuri kohdistusmahdollisuuksiensa vuoksi. Itseäni ärsyttää eniten mainokset, joita ei ole osattu kohdistaa oikein.

Sitten on se toinen puoli: myös tosi hyvät mainostajat voivat olla ärsyttäviä! Huomasin joitain kuukausia sitten joitakin toistuvia suurten verkkokauppojen mainosten osaavan näyttää todella houkuttelevia mainoksia täsmälleen kiinnostusteni perusteella. Jossain kohtaa poistin nämä mainostajat näkyvistä, kun alkoi tuntua ikävältä, että minulle tuputetaan heräteostos-haluja, vaikkei minulla ole varsinaisia tarpeita. Yksi mainostajista oli Wish, joka onkin yksi niistä tahoista, jotka ovat osoittautuneet kyseenalaisen taitaviksi täsmämainostijaksi; netissä ostaminenhan on nykyään helppoa, kun sen voi tehdä jopa parilla klikkauksella.

Jos sinua ahdistaa liikaa se, että Facebook tietää asioitasi, vaihtoehtoja ovat nämä:

  • Rajoita sitä, mitä kerrot itsestäsi Facebookissa.
  • Poista Facebookin mobiilisovellus kännykästäsi, ja käytä Facebookia vain tietokoneelta; iso osa seurannasta jää tällöin pois.
  • Ja sitten on vielä sekin, että voit tietenkin lopettaa Facebookin käytön kokonaan. Koko Facebook-tilinkin voi halutessaan poistaa. Moni someeen koukkuuntunut on kokenut helpotusta päästessään irti someriippuvuudesta. Itse en ole tuota päätöstä harkinnut, sillä Facebook on mukava osa elämääni, eikä se ole juuri aiheuttanut minulle harmeja.

Uudelleenkäynnistämisen magiaa

Koska tuttavani tietävät minut IT-alan ammattilaiseksi, puoleeni käännytään joskus tietokoneongelmissa. Omalla osaamisella auttaminen on mukavaa, ja toivonkin rakennus- ja moottorialalla olevien ystävieni ajattelevan samoin, kun kysyn heiltä apua.

Aiemmin paljastin jo yhden ”asiantuntemukseni” lähteen: Google. Nyt tulee seuraava paljastus: kun tietokoneen käynnistää uudelleen, epämääräiset ongelmat ratkeavat itsestään! Ei tietenkään aina, mutta riittävän usein, että voin väittää näin 🙂 Vasta, kun uudelleenkäynnistys ei auta, on syytä epäillä muita ongelmia.

Tarkoitan käytännössä Windows-käyttöjärjestelmällä toimivia tietokoneita. Perinteisesti ohjeistus Windows-käyttäjille on ollut, että tietokone on uudelleenkäynnistettävä vähintään kerran vuorokaudesssa. Versiosta 7 lähtien Windows on ollut stabiilimpi kuin aiemmin, mutta PC-laitteiden monimuotoisuus on vieläkin laatuhaaste ajuriohjelmistoille yms. Windows 10-maailmassa on suuri kiusaus laittaa vain läppärin kansi kiinni, kun työt on tehty…ja niin voi nykyään usein tehdäkin.

Uudelleenkäynnistäminen tulee kyseeseen viimeistän silloin, kun:

  • tietokone tuntuu normaalia hitaammalta.
  • tietokoneen tuuletin käy koko ajan kovalla; jokin ohjelma on jäänyt jumittamaan ja prosessori ”käy kuumana”. Läppäristä sen huomaa siitä, että se lämpenee.
  • jokin USB-liittimeen kytketty laite lakkaa toimimasta. Tyypillisesti kyseessä on hiiri tai näppäimistö.
  • mikä tahansa ohjelma alkaa toimia oudosti. Selaimen ollessa kyseessä, ainakin, jos kyseessä on Chrome, riittää usein selaimenkin uudelleenkäynnistys.
  • Kun netti lakkaa toimimasta. Toki ongelma voi olla myös muualla, mutta kannattaa aloittaa tutkinta vasta uudelleenkäynnistämisen jälkeen.
  • kun tietokone pyytää itse uudelleenkäynnistystä.

Se helpotuksen tunne, kun ongelmat kaikkoavat itsestään!

(En ole juuri käyttänyt Applen iMac-koneita, mutta olen ymmärtänyt, että niitä ei tarvitse uudelleenkäynnistää yhtä usein, ja yhtenä syynä lienee ainakin se, että ”Mäkkien” mahdolliset laitekokoonpanot ovat paljon rajallisemmat.)

Näin teet ”aidon” uudelleenkäynnistyksen Windows 10:ssä

Tämän vinkin löysin netistä: mikäli jokin osa Windows 10:ssä toimii huonosti, normaali uudelleenkäynnistäminen ei tapahdu ”pohjia myöten”, ellet pidä Shift-näppäintä pohjassa samalla, kun klikkaat kuvan Käynnistä uudelleen-nappia.

Mikäli käytät pöytätietokonetta, saat täydellisen uudelleenkäynnistämisen sammuttamalla tietokoneen ja pitämällä virrat pois muutaman sekunnin ajan. Kannettavalla tietokoneella eli läppärillä vastaava onnistuu vain, jos siitä saa irrotettua akun.

Asenna aina päivitykset!

Kun Windows pyytää sinua asentamaan päivityksiä, asenna ne mahdollisimman pian. Päivityksiä ei tarvitse asentaa kiireen keskellä, kesken työpäivän, mutta älä jätä asennuksia roikkumaan pitkäksi aikaa. (Toivottavasti tunnistat, mitkä pyynnöt tulevat Windowsilta, ja mitkä mahdollisilta roskaohjelmilta/viruksilta…pitäisikö tästäkin kirjoittaa?)

Moveniumin tarina jatkuu

Meidän markkinointitiimissä näytettiin uusinta Visma Movenium-mainosta, joka komeilee tänään mm. Iltalehden etusivulla:

Myönnän auliisti, että jossain vähän läikähti, kun näin tuon mainoksen. Jotain ylpeyttä kai, kaikesta siitä, mitä ja ketä tähän hommaan liittyi ja liittyy. Koodasin tuon tuotteen eka version kesällä 2005, ja nyt ollaan tässä pisteessä. Pitkä tarina on takana, ja kaikesta päätellen myös edessä.

Visma (Visma Software Oy) on tuonut koko tuon homman ympärille käsittämättömän paljon lisävoimaa ja rakennetta: tuote on kasvanut kaikilla osa-alueilla aivan uusiin mittasuhteisiin. Sanoisin joulukuussa 2016 tapahtunutta yrityskauppaa todella onnistuneeksi!

Moveniumin teknisestä alustasta on poikinut myös yleinen työajanseurantatuote: Visma Entry.

Täällä kerroin aiemmin työhistoriastani.

P.S. Tämä tuote elää myös Ruotsissa, tuotteen nimi on siellä Visma Construction Suite.

Näin lisäät vieraskieliseen Youtube-videoon suomenkielisen tekstityksen

Jos kielitaitosi on puutteellinen, monet Youtuben videoista voivat jäädä ymmärtämättä. Nykyään tähän on kuitenkin olemassa ratkaisu: ellei videota ole tekstitetty suomeksi, Youtuben ns. automaattinen tekstitys toimii usein vähintään melko hyvin.

Automaattisen tekstityksen päälle laittaminen eka kertaa voi kuitenkin olla vähän konstikasta. Koitan tässä näyttää kuvakaappauksilla, miten asia hoidetaan. Nämä esimerkit on tehty tietokoneruudulla; jostain syystä en saanut tätä asiaa toimimaan puhelimen Youtube-sovelluksessani.

1. Klikkaa videon alaoikealla olevaa hammasratasta
2. Valitse Tekstitykset avautuvasta valikosta

3. Mikäli tekstitys-toiminto ei ole käytössä, valitse kieli, joka valikossa avautuu. Jostain syystä tämä pitää tehdä näin, älä kysy minulta miksi 🙂

4. Kun olet valinnut ensimmäisen kielen, klikkaa sitä. Avautuu uusi valikko.

5. Valitse automaattinen käännös (mikäli tosiaan valikossa ei ole varta vasten suomeksi tehtyä käännöstä). Kielilista avautuu.

6. Valitse avautuvasta listasta Suomi.

Noin! Tekstityskieli on nyt vaihtunut suomeksi. Älä ihmettele, jos kieli tuntuu kömpelöltä; kyseessä on tosiaan käännös, joka tapahtuu automaattisesti ”lennossa”. Sen laatu riippuu alkuperäisen kielen lausunnan laadusta jne.

Koronaprojekti: Osterivinokkaiden kasvatus

Tämä korona-aika on tuonut uusia tapoja hoitaa etätyöt. Minulla satunnaiset etätyöt ovat aina sujuneet, mutta nyt, kun olen koko ajan kotona, huomaan kaipaavani monipuolista työpaikkalounasta ja meinaa vähän harmittaa, kun kodin arkiruokailu on helposti vähän yksipuolista.

Tämä aika mahdollistaa tietynlaisen back-to-basics-ajattelun, joka tukee kokonaishyvinvointia: mitä, jos opettelisi tekemään laadukkaita ruokia ja saisi sitä kautta vähän hohtoa tähän arkeen? Googlesta löytyy hyvin simppelit ruokaohjeet lähes kaikkeen, mitä tulee mieleen. Monet ruuat tulevat pienellä vaivalla ja joitakin niistä voi tehdä kerralla monen päivän tarpeiksi.

Innokkaimmat voivat kok(k)eilla vähän jännienkin asioiden kanssa. Kaveri vinkkasi minulle osterivinokkaiden kasvattamisen. Tänään teimme niistä pienellä vaivalla herkullisen sienirisoton perheen lounaaksi. Ensimmäisen sienierän kasvattamiseen meni pari kuukautta, mutta olipa mukavasti merkitystä tuottava pikku projekti. Uusin innostus on hapanjuuren teko…ensi viikolla teen ehkä ensimmäiset hapanjuurileivät.

Työkin sujuu, kun tämä korona-aika ei tunnu pelkältä kärsimykseltä.

Niin, ne osterivinokkaat. Hankin aloituspaketin helsieni.fi kautta, ja kasvatin ne heidän ohjeillaan. Lisäksi sain vinkkejä http://sieniapaja.fi/ – sivuston ylläpitäjältä. Tässä on vähän kuvia kasvatusprojektista, joka kesti pari kuukautta:

Aloitusrihmasto lähti kasvamaan kahvisakassa. Lisää sakkaa vain päälle ja odotetaan sen valkenevan tällä lailla…
…kunnas ämpäri on täynnä rihmastoa. Sen jälkeen odotellaan ensimmäisten sienten pompsahtamista.
Tältä näyttää, kun ensimmäinen ”lähetys” tulee esiin. Mustat pisteet ovat kahvisakkaa, ei vaarallista 🙂
Tässä 3 päivää vanha sieni.
Korjasin 300 gramman sadon viidentenä päivänä. Sato korjattiin mahdollisesti päivän parasta-ennen-päivän jälkeen, kun odotin lakkien aukeavan, mutta nämä eivät auenneet, vaikka odotin. Erinomaista ruokasientä siitä tuli silti. Ensi kerralla olen tarkempi satopäivän kanssa.

Nörttiprojekti: Nettisivujen rankkausta iän mukaan

Töissä tuli kerran tarve järjestää lista nettisivuja sivuston teknologian vanhuuden mukaiseen järjestykseen. Koska emme löytäneet valmista palvelua/ohjelmaa, joka tämän tekisi, otin tästä itselleni pienen pähkinän purtavaksi. Tuli nimittäin tunne, ettei tuollaiseen kovin monta tuntia mene, sillä tiesin, ettei järjestelmän tarvitse olla täydellinen. Noin viiden tunnin päästä pystyin tuottamaan nettisivulistan yllättävänkin uskottavasti ikäjärjestyksessä.

Voisin näyttää, miten sen tein, jos joku innostuisi kehittämään tätä ideaa pidemmälle. Otan mielelläni vastaan kehitysehdotuksia! 🙂

Näin aloitin

Sain ajatuksen, että sivustoja voisi rankata niiden html-koodissa löytyvien tekstipätkien ja html-tägien mukaan. Web-teknologia on 1990-luvun alkuvuosien jälkeen kehittynyt kovasti, ja olen itse työskennellyt sen parissa alusta asti. Siksi ajattelin, että minulla voisi olla jonkinlainen mutu-pohjainen käsitys siitä, millä vuosikymmenellä löytyi mitäkin html-tägejä jne.

Jatkoajatuksena tuli, että tägejä voisi pisteyttää plus- ja miinuspisteillä tägien ”moderniuden” mukaan: miinuspisteitä tulee vanhoista tägeistä ja pluspisteitä uudemmista. Tein hakuammunnalla tällaisen listan tägeistä ja koitin muutaman testisivun perusteella arvioida niiden pisteytyksiä:

Rankdata.xlsx

Nyt tarvitaan vielä ohjelma, joka lukee listan nettiosoitteista ja tuon Rankdata.xlsx:n. Nettiosoitelista (tässä Yritykset.xlsx) sisältää kolme saraketta:

Y-tunnusYritys WWW-osoite
1234567-8Yritys Oyhttp://www.yritys.fi

Koska työympäristöni oli tuota tehdessä Windows ja halusin päästä nopeasti liikkelle, päätin käyttää koodauskielenä minulle hyvin tuttua Perliä. (En vielä tuolloin ollut opetellut Pythonia, joka olisi nykyisin valintani tällaiseen). Latasin läppärilleni ActivePerlin ja aloin koodata. Muistin, että 2000-luvun alussa Professional Tester-lehteen kirjoittamassani artikkelissa, on valmiita pätkiä copy-pastettavaksi, joten hyödynsin tietenkin sitä. (Kai tiesit, että kaikki koodaajat copy-pastettavat ratkaisuja, tyypillisesti googlettamalla? 🙂 )

Jouduin asentelemaan Perliin lisämoduleja, jotta sain sen kutsumaan nettisivuja. En enää muista, oliko ActivePerlissä oma lisäosien lataamisohjelma, vai hainko niitä CPANista.

Ohjelmastani ei tullut mitenkään kovin kaunis, mutta sain sen kyllä toimimaan. Tässä on koko koodi:

use LWP::UserAgent;
use Spreadsheet::ParseXLSX;
use Spreadsheet::WriteExcel;

my $parser = Spreadsheet::ParseXLSX->new;

#
# Read the input data  from rankdata.xlsx into the @data hash
#
my @data;
my $excel = $parser->parse("rankdata.xlsx");
foreach my $sheet (@{$excel -> {Worksheet}}) {
 	$sheet -> {MaxRow} ||= $sheet -> {MinRow};     
	foreach my $row (1 .. $sheet -> {MaxRow}) {
         
		$sheet -> {MaxCol} ||= $sheet -> {MinCol};         
		$data[$row]{"tag"} = lc($sheet -> {Cells}[$row][0]->{Val});
		$data[$row]{"points"} = $sheet -> {Cells}[$row][1]->{Val};
	}
}

#
# Read the company info to the @companies hash
#
my @companies;
$excel = $parser->parse("Yritykset.xlsx");
foreach my $sheet (@{$excel -> {Worksheet}}) {
 
 	$sheet -> {MaxRow} ||= $sheet -> {MinRow};
        
	foreach my $row (1 .. $sheet -> {MaxRow}) {
         
	        $sheet -> {MaxCol} ||= $sheet -> {MinCol};
        
                $companies[$row]{"businessid"} = $sheet -> {Cells}[$row][0]->{Val};
                $companies[$row]{"company"} = $sheet -> {Cells}[$row][1]->{Val}; 
		$companies[$row]{"url"} = $sheet -> {Cells}[$row][2]->{Val};
		$companies[$row]{"points"} = 0;
		
	} 
}

# Open excel file for writing and write headers
my $workbook = Spreadsheet::WriteExcel->new('Output.xls');
$worksheet = $workbook->add_worksheet();
$format = $workbook->add_format();
$format->set_bold();

$worksheet->write(0,0, "Business ID",$format);
$worksheet->write(0,1, "Company",$format);
$worksheet->write(0,2, "URL",$format);
$worksheet->write(0,3, "Points",$format);
$worksheet->write(0,4, "Size",$format);
$worksheet->write(0,5, "Other",$format);
$worksheet->write(0,6, "Tags",$format);
#
# Loop all companies, call URLs, determine points, write result to Output.xls
#
my $ua = LWP::UserAgent->new;
for my $c (1 .. $#companies) {  
 	print "Analyzing ".$companies[$c]{"url"}."...";
	my $req = HTTP::Request->new(GET => $companies[$c]{"url"});

	my $resp = $ua->request($req);
	if (!$resp->is_success) {
    	$companies[$c]{"error"} = "Error ".$resp->code.". ";
    	if (!$resp->code == 500) {
    		$companies[$c]{"points"} = -100;
    	}
	}
	else {
		$companies[$c]{"error"} = "";
	}

	# Loop the http response
	$companies[$c]{"tags"} = "";
	$page_content = lc($resp->as_string);
	$companies[$c]{"size"} = length($page_content);
	my @lines = split /\n/, $page_content;
	foreach my $line (@lines) {	
		# Check with tag data	
		for my $i (1 .. $#data) {   
			if ( index($line, $data[$i]{"tag"}) > 0 && !$data[$i]{"found"}) {
	    		$companies[$c]{"points"} += $data[$i]{"points"};
	    		$companies[$c]{"tags"} = $companies[$c]{"tags"}.", ".$data[$i]{"tag"};
	    		
	    		print $companies[$c]{"tags"}.";";
	    		$data[$i]{"found"} = 1;
			}
		}
		
	
	}
	print $companies[$c]{"error"};
	
	# Penalize small pages
	if ($companies[$c]{"size"} < 5000) {
		$companies[$c]{"points"} -= 30;
	}
	elsif ($companies[$c]{"size"} < 10000) {
		$companies[$c]{"points"} -= 15;
	}
	
	$worksheet->write($c,0, $companies[$c]{"businessid"});
	$worksheet->write($c,1, $companies[$c]{"company"});
	$worksheet->write($c,2, $companies[$c]{"url"});
	$worksheet->write($c,3, $companies[$c]{"points"});
	$worksheet->write($c,4, $companies[$c]{"size"});
	$worksheet->write($c,5, $companies[$c]{"error"});
	$worksheet->write($c,6, $companies[$c]{"tags"});
	print $companies[$c]{"points"}." points. ";
	print "Done.\n $c.";
	
	# Reset "tag found" status for the next page in loop
	for my $i (1 .. $#data) {
		$data[$i]{"found"} = 0;
	}
}
print "Analyze completed.";

Ylläoleva ohjelma tuotti noin 20 minuutissa (kävi siisläpi 1700 nettiosoitetta) Excel-tiedoston, jossa nettisivut olivat saaneet rankkauksia sen mukaan, mitä sivulta löytyi (yritystiedot poistettu ennen kuvakaappauksen ottamista…ymmärrätte varmaan).

Ei mitenkään kaunista, mutta siivoilin listan käsin ja järjestelin sen Points-sarakkeen mukaana ja muutama pistokoe todisti, että olin onnistunut hankkeessani melko hyvin.

Mitä opin?

  • Perl on vanha ohjelmointikieli ja teknologia, opin sen 1990-luvulla. Oli esim. vaikea saada SSL-modulia toimimaan; sitä tarvittiin https-suojattujen sivujen tutkimiseen. Myöhemmin tajusin, että esim. modernilla Pythonilla tuo ohjelma olisi ollut kaikin puolin kätevämpi tehdä, sillä se kommunikoi sujuvammin nykyrajapintojen kanssa.
  • Kaikki sivustot eivät päästäneet skriptiä läpi, sillä ne tunnistivat sen todennäköisesti ”robotiksi” User Agent-tiedon perusteella. Myöhemmin testasin User Agentin feikkaamista (sai nettisivut luulemaan systeemiäni Chrome-selaimeksi) ihan hyvällä menestyksellä. Tässä Perl-koodinpätkä siihen:
    $ua->agent(”Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36”);

Vielä yksi asia!

Varomaton nettisivujen tutkiminen tällaisella ”robotilla” voidaan hyvällä syyllä pitää vähän kyseenalaisena puuhana. Kannattaa olla tarkkana, ettei vahingossa kehitä vaikkapa silmukkaa, joka pommittaa jotain tiettyä nettisivua kutsuilla. Sellaista voisi kutsua jonkinlaiseksi alkeelliseksi palvelunestohyökkäykseksi. Nykyiset nettisivut eivät tällaisesta yleensä kyykähdä, mutta onhan vastuuton robottien käyttö kiusantekoa ja sotkee ainakin ”pommituskohteiden” nettisivu-kävijätilastoja.

Asiakaskokemus, data ja tosielämä, osa 2: asiakkaan tunnistaminen

Aloitin tämän sarjan tällä artikkelilla, jossa koitan kuvata tilannetta, jossa yritykset saattavat olla siinä vaiheessa, kun haluavat saada datansa hallintaan.

Unohdetaan hienot sanat ja korkealentoiset ajatukset tässä vaiheessa; yritysdatan järjestely on perustaltaan puhdasta maalaisjärkeä. Ensiksi meidän on saatava kuntoon se tärkein asia:

Meidän on tiedettävä asiakkaamme. Kaikilla sidosryhmillä tulee olla pääsy varmaan ja luotettavaan tietoon siitä, ketkä ovat juuri tällä hetkellä asiakkaitamme. Lisäksi on oltava yksiselitteinen paikka, mistä tieto löytyy.

Kaikki siitä eteenpäin rakennetaan tuolle pohjalle, joten tuon perustan on oltava mahdollisimman vankka; on tärkeää, että tieto eli data pysyy aina oikeana; sillä siihen tulee voida luottaa. Järjestelmällä ei ole väliä, data voi olla vaikka Google Sheetissä, kunhan siihen voi aina luottaa päätöksentekotilanteissa.

Aluksi tarvitsemme perustiedon, jonka varaan kaikki rakentuu: nykyasiakkaamme, eli ne, jotka ovat juuri nyt asiakkaitamme. Sitä varten tarvitsemme prosessit asiakkuuden alkuvaiheeseen ja loppuvaiheeseen.

Niin, ohimennen, ketkä ovat nykyasiakkaitamme? Laskuttaja tarjoaa siihen luonnollisesti listaa viimeksi laskutetuista asiakkaista. Mutta voimmeko olla varmoja, että kaikkia asiakkaita on laskutettu (ja oikein)? Voimme, jos voimme seurata tehtyjä kauppoja aukottomasti laskutukseen asti.

Mistä siis aloitetaan?

Yrityksillä on tyypillisesti eri ohjelmistot toiminnoissaan: myyjillä on oma järjestelmänsä ja laskutuksella omansa jne. Ei tehdä vielä tässä vaiheessa ongelmaa mahdollisista ohjelmistojen yhteensopivuusongelmista, vaan aloitetaan:

  • Varmistetaan viimeistään kaupanteon yhteydessä, ettei asiakashallinnasta löydy kyseistä yritystä tuplana. Jotku meistä pitävät kauniista sanoista, joten he puhuvat duplikaateista.
  • Määritellään asiakkuuden tila asiakashallinnassa yksiselitteisesti, eli tiedämme, ketkä ovat asiakkaita, ja ketkä eivät vielä…tai enää.
  • Huolehditaan siitä, että kaikki sidosryhmät näkevät asiakastiedot. Mikäli kaikilla ei ole pääsyä master-tietoon esimerkiksi puuttellisten käyttöoikeuksien vuoksi (joidenkin asiakashallintajärjestelmien käyttäjäkohtaiset maksut voivat tuntua kalliilta), voi löytyä käteviä tapoja ylläpitää reaaliaikaista asiakaslistaa automaattisesti jossain muualla.

Tuohon viimeksi mainittuun voisin tarjota kuuman ja halvimmillaan jopa ilmaisen vinkin: Tutustukaapa Zapieriin ja siihen, miten se yhdistyy järjestelmiin, kuten Google Sheet. Pääset vauhtiin ilman kovin suuria nörttäilytaitoja.

Tarvitsemme asiakashallintaan myös sen numeron, jolla asiakas tunnistetaan laskutusjärjestelmässä; asiakkuuden tunnistenumeron. Se tiedetään tosin yleensä vasta siinä vaiheessa, kun asiakasta on laskutettu ensimmäisen kerran. Tämän numeron avulla voimme jatkossa seurata kyseisen asiakkaan laskutuksen kehitystä. Laskutustietojen ei useinkaan tarvitse olla yhtä reaaliaikaisia, kuin monet muut tiedot: esim. käsipelillä hoidettava siirtotiedoston käsittely on oikein kelvollinen tapa yhdistää laskutustiedot asiakastietoihin.

Kas, kirjoitin jo kaksi artikkelia tästä aiheesta, enkä ole vielä päässyt käytäntöön. Toivottavasti tilanne paranee seuraavassa artikkelissa. Sanoinko jo, että olen käytännön mies? 🙂