Sivut

tiistai 30. tammikuuta 2024

 

Töpökääpiötypäkkö 
Voiko linnulla olla vieläkin hassumpi nimi?
Ei toki kuulu meidän lajistoomme. Eikä nimi varmaan lintuakaan pahenna.


Nyt tilanne on tämä:

Maailman väkiluku on Yhdistyneiden kansakuntien 15. marraskuuta 2022 julkaiseman arvion mukaan kahdeksan miljardia. 


Maapallon väestön vuosikasvu on noin 82 miljoonaa. YK:n ennusteen mukaan väkiluku saavuttaa 8,5 miljardia vuonna 2030 ja 9,7 miljardia vuonna 2050.

 

tiistai 15. marraskuuta 2022

Maailman väkiluku

 

Maailman väkiluku vuonna 2022
Yhdistyneiden kansakuntien arvion mukaan se on 7,942 miljardia. Nykytietämyksen mukaan (15.11.2022) se on jo yli 8 miljardia.

Vaan mistä näitä kukaan tietää?

Maailmassa on paljon sellaisia alueita, missä ei tarkkaa väkilukua tiedä kukaan. Esimerkiksi Yhdysvalloissa ei ole pakko rekisteröityä (saada henkilötunnusta) kuin halutessaan äänestämään, hankkimalla vakuutuksen tai pankkitilin.

 Toisaalta synkimmässä Afrikassa lienee alueita, joiden väestön määrää ei voi kuin arvailla.




 

tiistai 22. helmikuuta 2022

Noviisi vai kehitttynyt koodari?

Mikä on ero aloittelijan, keskitason ja kehittyneen ohjelmoijan välillä? Sen voi kutistaa kahteen yksinkertaiseen seikkaan:

1) Millaisia ongelmia ratkaistaan

a) Aloittelija etsii pilkkuvirheitä, mikä olikaan sort metodin nimi?

b) Keskitason tekijä osaa korjata bugeja, miettiä tietorakenteita, ja rakentaa yksinkertaisia mutta toimivia ratkaisuja.

c) Kehittynyt ohjelmoija hallitsee ongelman osaamisen, omistaa kehittyneen käsityksen parhaista toimintatavoista, ja tietää missä sudenkuopat ovat. Ongelma ei enää ole, että voiko jotain ratkaista vaan mikä on paras tapa ratkaista se.

2) Miten ne ratkaistaan

a) Aloittelijalla on hyvin rajoittunut käsitys eroista ratkaisujen välillä ja yksi parhaita tapoja oppia on antaa hänelle ongelma, johon hänen on itse etsittävä ratkaisu ja sen jälkeen käydä läpi "code review" kokeneemman ohjelmoijan opastuksella.

b) Keskitasolla ohjelmoija on jo oppinut paljon hyviä toimintatapoja, hän ymmärtää versionhallinnan ja testaamisen tärkeyden, ja aktiivisesti etsii parempia ratkaisuja.

c) Kehittyneellä tasolla se mikä vie paljon aikaa keskitasolla on suhteellisen itsestään selvää ja mutkatonta.

Sitten on tietysti vielä yksi ylempi taso, tekniikan ihmelapsia, jotka eivät enää ratkaise ongelmia vaan ovat yhtä taon kanssa.


















Lähde: Quora 14.2.2022

Tekemistä sadepäivälle

Täällä satoi vettä-räntää-lunta viikonloppuna (12. - 13.2.)
Piti siis keksiä tekemistä sisätiloissa. Ei tarvinnut kovin pitkään miettiä. Rakentelin omille sivuilleni sellaisen ajastimen, joka näyttää sivun uudelleen latautumisen ajan (Refresh). Koodatessa käytin tuttua Kopioi-Liitä menetelmää, eli var****n eikun lainasin koodia internetistä ja tein siihen omat muutokseni. 

Kuva 1) Ajastimen JavaScript koodi
Kuva 2) Lopputulos sivulla (Waiting data)

Miksi sitten JavaScript? Siksi, että ajastimen pitää toimia käyttäjän koneella selaimessa.






Vanhat palvelijat latauksessa

Akut kannattaa pitää virkeänä, koska uutisten mukaan näistä kohta maksetaan.
Näitä ei voi käyttää vakoiluun, paitsi ehkä tuota vanhaa Huawei mallia. Tuskin sitäkään.

Kaikki ovat toimintakuntoisia. Testasin laittamalla sisälle SIM-kortin ja soitin puhelun.
Vasemmalta: Nokia C2, Huawei Y-560 ja 2 x Nokia 3510i



Ei kovin mukava esimerkki

 Ei niin kovin kiva animaatio.

All Known Asteroids in the Solar System (1999-2018), eli kaikki tunnettut (löydetyt) asteroidit omassa aurinkokunnassamme vuosina 1999-2018. Ja koko ajan löydetään lisää. 

Katsokoon ken uskaltaa. (Copied from NASA)




Pientä mittakaavaa

Joku on saattanut kuulla Arecibon observatoriosta. (Arecibo Observatory). Se sijaitsee Puerto Ricossa, Karibialla. Siellä on toistaiseksi suurin yhtenäinen teleskooppiantenni (lautanen) . Tähän ei nyt lasketa mukaan näitä teleskooppiverkkoja, joita muodostetaan ympäri maapalloa olevista pienemmistä teleskoopeista. Arecibon lautasen halkaisija on 302m. Kun se pläjäytetääan tämän minun asuntoni päälle, niin kuvasta näkyy millaisen alan se peittää Leppävirran kirkonkylän raitista. Siinä jäävät kirkko, tori ja marketit lautasen alle.





tiistai 16. marraskuuta 2021

Digiboksin pelastusta

 

Viikonloppuna (vko 45/46 2021) vaihdoin digiboksia, koska vanha alkoi sekoilemaan. Vanhassa boksissa oli kuitenkin tallenteita, jotka halusin vielä katsoa.
Tiesin, että jos vaihdan kiintolevyn vanhasta uuteen boksiin, niin levy alustetaan automaattisesti. Joten piti saada tallenteet siirrettyä muualle.
Onnistuin kopioimaan tallenteet tietokoneelle, mutta niiden siirtäminen uuteen boksiin ei enää onnistunut, vaikka boksit olivat samaa merkkiä ja mallia. Toiminto ei yksinkertaisesti ollut sallittu, eli kirjoittaminen suoraan boksin kiintolevylle ei onnistunut.

Sitten syttyi lamppu (päässä). Ajattelin, että kokeilen erästä juttua:
* muunnan digiboksin tallenteet (rec) tietokoneen ymmärtämään muotoon (mp4, mpeg, avi, tms.)
* sen jälkeen teen niistä DVD-levyn, jota voin katsella tavallisella DVD-soittimella tai siirtää ne tabletille ja katsoa sieltä käyttäen televisiota näyttönä (ChromeCast).

Ja tässä tulee se hauskin osuus, josta minä pidän erityisesti:
Linuxin perinteinen komento 𝐟𝐟𝐦𝐩𝐞𝐠 osasi tehdä muunnoksen. (ffmpeg = A complete and 𝐟𝐫𝐞𝐞 solution to record, convert and stream audio and video).

Ja mikä vielä parempaa:
Linux 𝐃𝐞𝐯𝐞𝐝𝐞 is a 𝐟𝐫𝐞𝐞 tool to create video CDs and DVDs that can be played in home DVD players. 
 
Mutta kuten edellä kirjoitin, voin yhtä hyvin siirtää MP4 tiedostot tabletille ja katsella ne sitä kautta. Koska ei niitä enää sen jälkeen tarvitse säilyttää. Käyttäen Suomen kielen vanhaa modusta agressiivi, voin kirjoittaa, että "(pl) vittume mitään siirtoa tarvitaan, poltetaan DVD".
 
Koska tallenteet ovat suurikokoisia tiedostoja, niiden muuntaminen yksitellen kestää. Kirjoitin siis pienen komentoriviohjelman (Bash), joka muuntaa kaikki hakemistossa olevat tallenteet toiseen muotoon ja tallentaa ne uuteen hakemistoon:
#!/𝚋𝚒𝚗/𝚋𝚊𝚜𝚑
𝚏𝚘𝚛 𝚒 𝚒𝚗 *.𝚛𝚎𝚌; 𝚍𝚘
𝚏𝚏𝚖𝚙𝚎𝚐 -𝚒 "$𝚒" 𝚖𝚙𝟺/"${𝚒/.𝚛𝚎𝚌/.𝚖𝚙𝟺}"
𝚍𝚘𝚗𝚎
 
Jätin tietokoneen tekemään töitä ja menin nukkumaan.
Nyt kun olen pystyssä (en välttämättä hereillä), niin tietokoneelta löytyvät kaikki vanhat tallenteet uudessa muodossa.
Koodaaminen on kivaa, varsinkin kun se ei maksa mitään!
Tykkää
Kommentti
Jaa


lauantai 23. lokakuuta 2021

Hash baby Hash

In this case, "hash" means messing up passwords. Sorry, but this is the English version. Nerds and half of the world do understand.

But how to hash passwords on a website? As a developer, I must know how to store passwords securely. For the following reasons:
1) Many web attacks aim at stealing your users’ passwords. If passwords are stolen, I must make sure the attacker cannot decrypt them.
2) Today’s strict privacy regulations require sensitive data, like passwords, to be protected. Failing to comply can result in fines.
3) Password security is one of the basic security features my clients expect from me.
4) If I know how to do it properly, my reputation will improve and my clients will trust me.

So, are legacy MD5 and SHA hashes secure? Short answer: No!

Back in the day, passwords were stored using an MD5 or SHA1 hash.
Like this: 
$𝘩𝘢𝘴𝘩 = 𝘮𝘥5($𝘱𝘢𝘴𝘴𝘸𝘰𝘳𝘥);

However, this technique is not safe enough. For two reasons:
1) MD5 and SHA algorithms 𝐚𝐫𝐞 𝐭𝐨𝐨 𝐰𝐞𝐚𝐤 for today’s computational power.
2) Simple, not-salted hashes are vulnerable to “𝐫𝐚𝐢𝐧𝐛𝐨𝐰 𝐭𝐚𝐛𝐥𝐞𝐬” and dictionary attacks.

If an attacker steals an MD5 or SHA hash, he or she can easily find out the original password too. In other words, these hashes are almost as insecure as plain text passwords.

The solution is to use a PHP 𝐬𝐞𝐜𝐮𝐫𝐞 𝐡𝐚𝐬𝐡𝐢𝐧𝐠 𝐟𝐮𝐧𝐜𝐭𝐢𝐨𝐧:
$𝘩𝘢𝘴𝘩 = 𝘱𝘢𝘴𝘴𝘸𝘰𝘳𝘥_𝘩𝘢𝘴𝘩($𝘱𝘢𝘴𝘴𝘸𝘰𝘳𝘥, 𝘗𝘈𝘚𝘚𝘞𝘖𝘙𝘋_𝘉𝘊𝘙𝘠𝘗𝘛);

The password_hash() function creates a secure hash of your password. The result hash from password_hash() is secure because:
1) It uses a 𝐬𝐭𝐫𝐨𝐧𝐠 𝐡𝐚𝐬𝐡𝐢𝐧𝐠 𝐚𝐥𝐠𝐨𝐫𝐢𝐭𝐡𝐦.
2) It adds a 𝐫𝐚𝐧𝐝𝐨𝐦 𝐬𝐚𝐥𝐭 to prevent rainbow tables and dictionary attacks.

Once you have the password hash, you can save it directly in the database.

To verify the password provided by a remote user, you need to use the password_verify() function.

Important:
You cannot just compare two different hashes to see if they match.
The reason is that password_hash() creates 𝐬𝐚𝐥𝐭𝐞𝐝 𝐡𝐚𝐬𝐡𝐞𝐬.

Salted hashes include a random string, named “salt”, as a protection against rainbow tables and dictionary attacks. Therefore, every hash will be different even if the source password is the same.

Note:
password_verify() only works with hashes created by password_hash(). You cannot use it to check a password against a MD5 or SHA hash.

There are ways you can still add hash protection, but I may write about them a second time.

You can read more in the PHP manual

lauantai 18. syyskuuta 2021

Koodarin kujanjuoksu

Kyllä on vanhan koodarin elämä tehty hankalaksi. 

Sen lisäksi, että pitää tietää tai tunnistaa millä selaimella käyttäjä ohjelmaa suorittaa, niin jokaisessa ohjelmointikielessä on omat kummallisuudet niinkin yksinkertaiseen asiaan kuin päivämäärien käsittelyyn. Lasketaan vaikka esimerkiksi kahden päivämäärän välinen päivien lukumäärä.

Näin se tehdään Bash komennoilla:

#!/bin/bash
CDATE=`date -d "Sep 30" +%j`
TODAY=`date +%j`
DAYS=$(($CDATE - $TODAY))
echo $DAYS # Näytetään lopputulos


Näin se toimii Python kielellä:

#!/usr/bin/env python3
from datetime import date
f_date = date(2021, 9, 18)
l_date = date(2021, 9, 30)
delta = l_date - f_date
print(delta.days)  # Näytetään lopputulos


Ja näin PHP kielellä:

<?php
$date1=date_create("2021-09-18");
$date2=date_create("2021-09-30");
$diff=date_diff($date1, $date2);
echo $diff->format("%R%a days");  // Näytetään lopputulos
?>

Ja kuuluisasta internetistä on turha hakea apua tai vastauksia. Se on täynnä täysin luokattomia kommentteja, jotka kuuluvat suurinpiirtein: "En tiedä toimiiko tämä, mutta kokeile"
Olen huomannut, että internetissä on sentään muutama sellainen taho, joiden kirjoittamat esimerkit ja oppaat jopa toimivat. Yksi niistä on IBM.

"Joskus muinoin" kun oppaat painettiin kirjan muotoon, niin julkaisijalla oli sentään jonkinlainen vastuu esimerkkien toiminnasta. Siksi olen laatinut ja kerännyt esimerkkejä aivan itse ja kirjoittanut niistä oman tietokannan.

Tätä opasta täydennän aina tarpeen mukaan.








Entiseen aikaan riitti se, että ensin valittiin ohjelmointikieli. Esimerkiksi M$ yhtiön tuotteista Visual Studio (Basic, C, C++, C#). Tämän jälkeen piti tietää mihin ympäristöön ohjelma asennetaan (M$ DOS, Windows 3.x, 95, 98, NT, XP). Sen jälkeen koodattiin niin vimmatusti ja muodostettiin lähdekoodista tietokoneella suorittava versio (EXE).
Oliko se sitten helpompaa, päätelkää itse!


maanantai 13. syyskuuta 2021

Päivitysten suloinen kirous

Ei, miksi näin. Aina! 

Näin kehittäjänä minua ottaa päähän (lue: h****aa) se, että joka kerta kun käyttämäni ohjelmiston versio päivittyy, niin uusi versio sotkee minun omat muokatut asetukset. 

Aatelkaapa ite: jos lähdette metsään kaatamaan puita sillä vanhalla tutuksi tulleella sahalla. Olet juuri saanut viilattua vanhan ketjun kuntoon, niin sitten tulee sahaan päivitys ja ketju vaihtuu. Lisäksi uudessa päivityksessä jokaiselle puulajille pitää käyttää erilaista ketjua. Ei muuta kuin kauppaan ostamaan uusia ketjuja! 

No, miksi päivittää jos kaikki toimi? Tämä vanha kysymys on aiheellinen jokaisessa päivityksessä. Mutta monessa järjestelmässä ja työkalussa päivitystä ei voi helposti estää, se tehdään automaattisesti. Tai sitten menetät joitakin ominaisuuksia, jotka eivät enää toimi vanhassa versiossa. 

Viimeksi tämä tapahtui Firefox selaimen uudessa 92.0 versiossa. Käytän etupäässä neljää eri selainta, olosuhteiden pakosta. Firefox on yksi niistä, sekä Linuxissa että Windowsissa.