Sivut

perjantai 19. tammikuuta 2018

Windrose: Tuulen nopeus ja suunta grafiikkana


Nyt tärppäsi, taas! Uusi työkalu: #JpGraph ja #php

Ennen vanhaan kun mietin, kuinka jonkin ongelman voisi ratkaista juuri tietyllä ohjelmointikielellä. Silloin menin kirjastoon tai kirjakauppaan. Yleensä Akateemiseen kauppaan Helsingissä. Sieltä ostin paksun manuaalin joka kertoi silloisen ongelman ratkaisusta. Ainakin antoi viitteen siitä.

Nyt tämä tiedonhankinta on helppoa. Laitan oikeat hakusanat hakukoneeseen ja kas ... minulla on saatavilla monta lähdeteosta, jotka käsittelevät juuri sinun ongelmaasi. 
Mutta ... onko tieto oikeaa?

Internet on tulvillaan valetta ja arvauksia. Yksi tyypillisistä vastauksista Q&A palstoilla (Kysymys & Vastaus) on, että kokeile tätä, ehkä se toimii. Vielä pask/%¤ .. tai huonompi vastaus on, että mitä sinä täällä kyselet, opettele itse! 
Niinhän minä teenkin ja yritin kysyä Teiltä apua!

Mutta kuten aloitin, niin joskus tärppää. Löysin Japanilaisen yhteisön kirjoittaman grafiikkakirjaston, joka on tarkoitettu PHP -kielelle. Sen avulla on varsin "helppo" tuottaa erilaista grafiikkaa: pylväitä, piirakoita, ruusuja ja muita. 
Tietysti data pitää olla oikeassa muodossa ja sitä pitää olla riittävästi. Sen jälkeen grafiikan piirtäminen onnistuu. No, periaatteessa aika hyvin.

Laitoin omalle sivulleni mittaustulokset Mikkelin sääpalvelun mittauksista: tuulen suunta ja nopeus. Se on nimeltään ns Windrose ja näyttää oheisen kuvan mukaiselta. Live dataa voi katsella osoitteessa: http://datatuki.net/fmiweb/weather_fmi.php

Tuuliruusu (Windrose) grafiikka siis kertoo mistä tuuli on puhaltanut ja miten kovaa.
Sakara "E" tarkoittaa Itätuulta (East) ja sen pituus tarkoittaa kuinka monta prosenttia tuulesta on puhaltanut idästä. Sakaran väri taas kertoo tuulen voimakkuudesta. Vaaka-akselilla on merkitty tuulen nopeudet eri väreillä.


Kolme ystävää

Tässä ovat minun kolme parasta ystävääni.
Tai parhaan ystäväni jälkeen seuraavaksi parhaat ... Jos Puolen hehtaarin metsässä perhonen räpäyttää siipiään, niin mitä tapahtuu Mikkelissä?


Iliman pilluu eli Ilmastonmuutos


Kolome kovvoo savolaesta sannoo: tulokku, pölökky ja mulukku.

Tässä asiayhteydessä kuitenkin #päästö, #vety ja #hiilidioksidi !

Joskus kauan sitten, eräs vanha ja viisas kertoi minulle: "Elekee mänkö sorkkimaan muapalloo ja lähettämmää niitä sputnikkeja taevaalle, siitä männöö taevaan kirjat sekasin". Olen vieläkin hyvin pitkälti samaa mieltä. 

Nyt on keksitty kerätä ilmakehästä talteen kaikki hiilidioksidi ja muuttaa se biopolttoaineeksi tai -tuotteiksi. Siihen prosessiin tarvitaan lisäksi vetykaasua. Ja vielä päästötöntä vetykaasua. 

Mistä näitä alkutuotteita saadaan? Ilmasta ja vedestä. Vedyn tekemiseen tarvitaan lisäksi päästötöntä sähköä. Päästöttömän sähkön tekemiseen on toistaiseksi hyvin vähän vaihtoehtoja, eikä mikään niistä kelpaa politiikoille. 

Ja sitten: mitä tapahtuu luonnolle silloin, kun ilmakehästä poistetaan liikaa hiilidioksidia polttoaineiden tarpeisiin? Muistanko oikein biologiasta, että esimerkiksi viherkasvit tarvitsevat hiilidioksidia yhteyttämiseen?

Oletetaan, että saamme poliittisen päätöksen käyttää päästötöntä sähköä (tuuli-, aurinko-, ydin-, tms energiaa) ja luvan ottaa vettä riittävästi käyttöön vedyn valmistamiseksi ja yhdistää nämä prosessit teollisuuden voimantuoton hiilidioksidipäästöihin, niin silloin ollaan oikealla jäljellä. 

Vety ja vesiongelma pitää vielä ratkaista ilman, että puututaan kehittyvien maiden puhtaan veden tarpeisiin.

Aurinkokunnan synty

Saattaa olla, että käsityksemme aurinkokunnan synnystä on täysin väärä. 
Mikäli on uskomista Eteläafrikkalaisen Johannesburgin yliopiston geologeihin. 

Vuonna 1996 egyptiläinen geologi Aly Barakat löysi aavikolta erikoisen kivenpalasen. Se ei vaikuttanut olevan peräisin maapallolta. Paljon myöhemmin selvisi, että kivi todella on avaruudesta. Sen uskottiin olevan muinaisen komeetan ydin, ensimmäinen koskaan löydetty. Annetaan sille nimeksi vaikka Hypatia.

Aurinkokunta alkoi muodostua yli 4,5 miljardia vuotta sitten, kun Aurinkoa ympäröinyt kaasu- ja pölykiekko tiivistyi planeetoiksi. Kiekko oli varsin homogeeninen eli planeettojen rakennusmateriaali oli alkuaine jakaumaltaan samanlaista.
Jos maapallon jauhaisi tomuksi, tomun koostumus olisi hyvin samanlaista kuin yleisimmissä kivimeteoriiteissa, kondriiteissa: melko paljon piitä ja pienempiä määriä hiiltä.

Hypatia sen sijaan sisältää paljon hiiltä, mutta varsin vähän piitä. Sen alkuaineiden jakauma on päinvastainen kuin aurinkokunnan kiviplaneetoilla ja asteroideilla.

”Vielä erikoisempaa on, että kiven rakenteessa on paljon tietynlaisia hiiliyhdisteitä, polyaromaattisia hiilivetyjä. Niitä oli huomattavan paljon siinä tähtienvälisessä sumussa, joka oli olemassa jo ennen kuin planeetat muodostuivat”

Minäkin uskon, että Hypatia on muodostunut jo ennen Aurinkoa ja planeettoja. Kun Hypatia, tai paremminkin se meteoriitti, josta Hypatia lohkesi, iskeytyi Maahan miljoonia vuosia sitten, kuumuus ja paine puristi sen hiilivedyt timanteiksi. Niistä muodostui suojakerros, joka on säilyttänyt kiven meidän päiviimme saakka niin, että sitä voidaan nyt tutkia. Vielä sekin erikoisuus Hypatiassa on, että se sisältää alumiinia puhtaana alkuaineena, mikä on harvinaista Maan päällä ja muualla aurinkokunnassa.

Todennäköisintä on siis, että Hypatian mineraalijyväset ovat peräisin ajalta ennen aurinkokuntaa. Seuraavaksi täytyy selvittää tarkemmin, mistä Hypatia voisi olla peräisin. Kaukana Neptunuksen takana kiertävien kivisten kohteiden koostumuksen tarkempi tuntemus voisi avata asiaa.

Mahdollisesti Hypatia tömähti Saharaan 28 miljoonaa vuotta sitten. Törmäys sulatti aavikon hiekan lasiksi, ja tuota kellertävää Libyan aavikkolasia kerätään alueelta yhä.

Mutta mutta. Tämä on vain yksi teoria. Mistä näitä tietää.
Tästä aiheesta lukaisin ensin: www.tiede.fi lehdestä.

Y2038 ongelma

Y2038 ongelma. Tämä "koodivirhe" tai ominaisuus yllättää seuraavaksi. Mutta kenet?

Juuri kun selvittiin Y2K ongelmasta (eli vuosien 1999 - 2000 vaihteesta), niin seuraava koputtaa jo ovella. 
Vuonna 2038 kaikki C -kieleen perustuvat ohjelmistot sekoavat numeeriseen ylivuotoon. 
Kuten Y2K'ta, tätä minä en ole enää selvittämässä. 

C-kielellä tai sen johdannaisilla (C++ ja C#) on kirjoitettu suurin osa käyttöjärjestelmien ytimistä ja suurin osa tietokantojen hallintaan tarkoitetuista ohjelmistoista. 

Itse ajattelin 1980 -luvulla, että on se 2000 vuosi niin kaukana, että ei siihen tarvitse varautua. 
Sieltä se kuitenkin tuli vastaan ja itse jouduin niitä paikkoja korjaamaan.

Tämän päivän koodarit toivottavasti osaavat varautua 20 vuoden tulevaisuuteen paremmin kuin minä 30 vuotta sitten.

Menestystä tulevaisuuden ennustamiseen.

Android Studio kehitystä



Jos oli aikanaan MSDN C/C++ Windows Studio kehitysympäristö massiivinen ja raskas niin ei siitä paljon häpeä Windows Phone 8+ kehitysalusta. Nyt sitten päätin kokeilla Android laitteiden ohjelmien kehitystä. Se on tunnetusti ja jostakin syystä Java ohjelmointia.

Sitä varten pitää ladata yli 700MB asennusmöhkäle Googlen palvelusta. Se asentaa Android Studion tietokoneelle. Sen jälkeen ladataan muut tarvittavat palikat dl.google.com palvelusta. Android Studio syö levytilaa asennettuna 2GB ja projektitiedostot päälle. Eikä asennusosiota voi edes valita. Se asentuu suoraan käyttäjän kotihakemistoon (home).

Tyypillinen ensimmäinen testi uudella ohjelmointikielellä on saada ohjelma tulostamaan laitteelle yksinkertainen teksti: Hello World! Sitä varten Studiossa on valmis esimerkki applikaatiosta. Se ladataan (jälleen) dl.google.compalvelusta ja yritetään kääntää se suoritettavaksi ohjelmaksi (Build). No eihän se tietenkään ensimmäisellä kerralla onnistunut. Puuttui sitä ja tätä kirjastoa ja palikoita. Niiden asennuksen jälkeen itse käännös meni läpi. Koodi näyttää virheettömältä ja ehkä toimivalta. En ole vielä pystynyt testaamaan siltä. Pitää ensin asentaa omalle Linux työkoneelle KVM virtuaalikone, jolla pystyy leikkimään vaikka puhelinta. Sillä en ajatellut ladata applikaatiota ensimmäisenä omalle puhelimelle.:-)

Mutta se alkuperäinen kirjoitelman syy: miksi näistä kehitysvälineistä tehdään niin hirvittävän raskaita ja resursseja syöviä möhkäleitä. Vähempikin riittäisi. Kuten esimerkiksi PHP/HTML5/CSS3 kehitys web-palvelimelle. Se ei vaadi kuin asianmukaisen editorin. Jos ei osaa koodata niin voi käyttää jotakin WysiWyg IDE työkalua, mutta nekin ovat tosi kevyitä käyttää.


Tämä Android SDK ottaa kaiken irti koneesta, eikä Build tapahtuman aikana juuri mitään voi tehdä kuin istua ja odotella. Toki käytössä voi olla useampi kone. Tässä kuva laitteen kuormituksesta SDK Buil yhteydessä.

PS. Android asennusohjelman esimerkki näyttää, että käytössä pitäisi olla vähintään 4- tai 6 -ytiminen 64-bit suoritin. Minulla on vain kaksi. Ehkä siinä on hitauden syy.


tiistai 13. joulukuuta 2016

MySQL tietokantojen varmistus PHP -koodilla


On aika suutarinkin rakentaa itselle omat kengät.
Tässä tapauksessa automaattinen varmistus tietyille SQL -tietokannoille.

Sitä tarkoitusta varten on maailma tulvillaan koodia, mutta niitä ei vain tule käytettyä tai ehkä ne ovat liian monimutkaisia. Pienten ja keskisuurten tietokantojen varmistamiseen löysin erään mielenkiintoisen PHP -koodin.

Tässä on pieni koodinpätkä varmistusten tekemiseen, joka käyttää backupmysql.class.php kirjastoa. Se taas löytyy otsikossa kerrotusta paikasta.

<?php
/*
 * http://coursesweb.net/php-mysql/simple-backup-mysql-database_s2
 *
 * - Using backupmysql class to create backup of all the tables in mysql database.
 * - Modify for Hotel database, JoH 30.11.2016
 *
 * cron: 0     1     *     *     *
 * wget -qO- -t 1 http://www.hotelli.fi/db/do_backup.php
 * file: date('d-m-Y'). '@'. date('h.i.s') .'.sql';
 *
 */

$host = '127.0.0.1';
$user = 'username';
$pwd = 'salasana';
 
// Set object of backupmysql class
include 'backupmysql.class.php';

// Perform the backup for all databases
makeBackup($host, $user, $pwd, 'hotelli_customers');
makeBackup($host, $user, $pwd, 'hotelli_staff');
makeBackup($host, $user, $pwd, 'hotelli_reservations');
makeBackup($host, $user, $pwd, 'hotelli_rooms');

// Do backup
function makeBackup($h, $u, $p, $db) {

    $lang ='en';        // Indice of the "lang_...json" file with texts
    $dir ='backup/';    // Folder to store the ZIP archive with SQL backup

    $bk = new backupmysql($lang, $dir);

    // Data for connecting to MySQL
    $conn_data = ['host' => $h,
                  'user' => $u,
                  'pass' => $p,
                  'dbname' => $db];
   
    $bk->setMysql($conn_data);  // Set connection
    $tables = $bk->getTables(); // Get array with all the tables in database

    // If no error
    if($bk->error === false) {
        // If tables, creates the SQL backup of all the tables
        // and saves it in ZIP archive (get succesful or error message)
        $bk_sql = (count($tables) > 0) ? $bk->saveBkZip($tables) : 'No tables in database';

        // Use BR when print out to browser
        echo $bk_sql . "<br />";
    }
        else echo $bk->error;

    // Kill or Close PDO object
    $bk = null;
  
    return;
}
?>

Siitä vaan varmistamaan!

torstai 3. marraskuuta 2016

Seurataan julkisen IP osoitteen vaihtumista



Tässä on melko lopullinen PHP koodi, joka seuraa IP -osoitteen vaihtumista julkisessa verkossa. Tämä koodi tallentaa aikaisemman IP -osoitteen ja vertaa sitä uuteen vastaavaan. Muutoksesta ilmoitetaan.

Asenna tämä scripti web -palvelimelle ja laita se Cron -taulukkoon,
niin saat joka aamu uuden raportin IP -osoitteesta tai sen vaihtumisesta.

<?php
// https://www.ipify.org/
// Check Public IP Address

define('TIMEZONE', 'Europe/Helsinki');
date_default_timezone_set(TIMEZONE);
$thisDate = date('d-m-Y H:i');

// Get current Public IP address
$n_ip = file_get_contents('https://api.ipify.org');

// Current IP address in file and last modified
$ip_file = 'ip_addr.txt';
$fileDate = date('d-m-Y H:i', filemtime($ip_file));

// Get IP address from file
$content = file_get_contents($ip_file);
$ip_array = explode("\n", $content);
$c_ip = strtok($ip_array[0], '@');

// Compare Public address and fileaddress
if(strcmp($n_ip, $c_ip) == 0) {
    // No change!
    echo "Public IP address has remained the same: " . $c_ip . "@ Last changed: " . $fileDate . "\n";
} else {
    // Write NEW IP address to file
    $content = $n_ip . "@ " . $thisDate . "\n";
    file_put_contents($ip_file, $content);
    echo "Public IP address has changed: <b>" . $n_ip . "</b>@ " . $thisDate . " Last changed: " . $fileDate . " \n";   
}

?>

Avain tietokoneeseen


Avain tietokoneeseen.

Onhan se ollut jo monessa palvelimessa mukana. Eli kone ei lähde käyntiin eikä sammu ilman avainta. Mutta entäpä täydellinen käynnistymisen ja tietomurtojen estävä avain? ORWL on sellainen. Jos sen yrittää ohittaa ilman omaa avainta, niin se tuhoaa tiedot tietokoneelta eikä rosvo saa käsiinsä kuin tyhjän koneen.

Siihen tietysti tarvitaan hieman älyä, salausta ja koodia. ORWL on avointa koodia. Niin koodia! Sillä sillä koodiakin siihen tosiaan tarvitaan, ei pelkkää fyysistä avainta. Tietysti kysymys kuuluu: onko tällaiseen suojaukseen tarvetta? Minusta tietyissä palvelimissa on.

-- oo -- 
 
ORWL basic specs include Intel Skylake M3 processor, USB-C & micro HDMI ports, 8GB memory, 120GB Solid State Drive, Bluetooth, Wifi and NFC technology. Currently it supports Ubuntu 16.04, Qubes OS and Windows 10 out-of-the-box.
All you need is a monitor, keyboard and mouse to get started.
ORWL is Open Source - ORWL is totally open source.
It means that the schematic and layout files, software, firmware,
everything is up for grab if anyone wants to make one themselves or make improvements.

Log Reportico Use Count



Tässä PHP koodi, jolla voidaa laskea ja kirjata lokiin Reportico käytäjien määrä.

<?php
/*
 * Remember to remove <?php ?> tags when include Reportico
 *
 */

define('TIMEZONE', 'Europe/Helsinki');
date_default_timezone_set(TIMEZONE);

$dbfile = 'reports_all.db';
$cur_ip = getIP();
$name = "Report name";
$created = date('d-m-Y H:i:s');

if (file_exists($dbfile)) {
    $data = seekLastLine($dbfile);
    $count = (int)strpbrk($data, "0123456789");
    $count = $count + 1;
    $out = sprintf("%04d", $count);
    $data = $out . " : " . $cur_ip . " : " . $name . " : " . $created . "\n";
    $fh = fopen($dbfile, "a+");
    fwrite($fh, $data);
}
else {
    $fh = fopen($dbfile, "w");
    $data = "1 : " . $cur_ip  . " : " . $name . " : " . $created . "\n";
    fwrite($fh, $data);
    fclose($fh);
}

function seekLastLine($f) {
    $f = escapeshellarg($f); // for the security concious
    $line = `tail -n 1 $f`;
    return $line;
}

function getIP() {
  if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  elseif(isset($_SERVER['REMOTE_ADDR'])) $ip = $_SERVER['REMOTE_ADDR'];
  else $ip = "0";
  return $ip;
}
?>

Facebook editorin toimimattomuus



Olenko minä ainut tällä planeetalla, jolla Facebook editori ei hyväksy tavallista Liitä - Liimaa - Askartele toimintoa? Eli Copy - Paste tai Kopioi - Liitä?

Nimittäin, yritän kopioida tekstiä jostakin toisesta dokumentista. Vaikka Word, Writer, Kate tai toiselta www -sivulta.  Poikkeuksetta käy niin, että kun liitän tekstin Facebook editoriin ja haluan Julkaista tai Tallentaa tekstin, niin Facebook editori menee sekaisin ja ilmoittaa, että julkaisu näyttää olevan tyhjä! Kirjoita jotakin!


Ja minähän kirjoitan ja haluan liittää sitaatin toisesta kirjoituksesta - omastani - ja taas sama juttu.

Hetken jo luulin, että vika oli muotoiluissa. Otin sitten käyttöön aivan tavalliset tekstieditorit: Nano ja Gedit sekä Windows puolella Notepad.
Jotka eivät lisää tekstiin ja tiedostoon mitään muotoiluja.

Kierrätin tekstin näiden editoriohjelmien kautta ja poistin kaikki muotoilut.

Sama juttu! Ei vaan toimi.

Olen kokeillut kaikkea: Hiirellä Copy ja Paste, näpäimistöllä Ctrl-C ja Ctrl-V sekä harvemmin tunnettu vanha konsti Ctrl-Ins ja Shift-Ins


Tietääkö kukaan Facebook moderaattori ratkaisua tähän ongelmaan?

Yksi tai kaksi, mitkä tulevat mieleeni, ovat nämä rivinvaihdot.
- next line ("\n") tarkoittaa Unix ja Linux koneissa rivin vaihtoa
- next line ja carriage return yhdessä ("\nr\cr\") ovat pelkästään Windowsille varattu muoto
- sitten on vielä merkistön koodaus. Voiko sillä olla vaikutusta.
Itse käytän UTF-8 Unicode muotoa

Mutta jos kopiointi tehdään sellaisen editorin kautta, joka ei tiettävästi lisää mitään muotoiluja sisältöönsä, niin miksi näin käy?








keskiviikko 6. heinäkuuta 2016

PHP: Tarkistetaan sähköposti IMAP postilaatikosta


Monessa työpöytäympäristössä (Desktop) on käytössä saapuvan sähköpostin tarkistamiseen tarkoitettu ilmoitus. Niin sanottu Mail Notify. Tämä toimii vaikka itse sähköpostiohjelma (Outlook tai Thunderbird) ei olisikaan käynnissä.

Ainakin Ubuntu, Debian ja openSUSE sisälsivät aikoinaan tämän ominaisuuden, mutta yllätys oli, että uudesta 64 -bittisestä Ubuntusta se puuttui. Tai ainakaan se ei toiminut toivotulla tavalla.

Silloin kun joku toiminto tietokoneesta puuttuu, niin minä yleensä koodaan sen itse. Niin siis tässäkin tapauksessa. Apuun tuli PHP -kieleen ympätty ominaisuus IMAP -postilaatikon käsittelyyn. Sen avulla pystyy kirjautumaan omaan postilaatikkoon ja tarkistamaan tilanteen: paljonko laatikossa on postia ja montako kirjettä on lukematta.

Kirjoitetaan siis PHP -ohjelma joka tarkistaa postilaatikon ja ilmoittaa saapuneesta postista käyttäjälle. Se vaatii tietysti, että PHP -kielen vaatimat palikat on asennettu tietokoneelle ja ohjelma voidaan suorittaa ajastetusti vaikkapa cron -ajastuksella (Linux).

Itse PHP -ohjelma on varsin yksinkertainen. Tässä siitä listaus, joka tarkistaa kaksi postilaatikkoa:


<?php

/*
 imap_open — Open an IMAP stream to a mailbox
  All names which start with { are remote names,
  and are in the form "{" remote_system_name [":" port] [flags] "}" [mailbox_name] where:
    remote_system_name - Internet domain name or bracketed IP address of server.
    port - optional TCP port number, default is the default port for that service
    flags - optional flags, see following table.
    mailbox_name - remote mailbox name, default is INBOX

 imap_status — Returns status information on a mailbox
 Valid flags are
    SA_MESSAGES - set $status->messages to the number of messages in the mailbox
    SA_RECENT     - set $status->recent to the number of recent messages in the mailbox
    SA_UNSEEN     - set $status->unseen to the number of unseen (new) messages in the mailbox
    SA_UIDNEXT     - set $status->uidnext to the next uid to be used in the mailbox
    SA_UIDVALIDITY - set $status->uidvalidity to a constant that changes when uids for the mailbox may no longer be valid
    SA_ALL - set all of the above

*/

# MyHost imap with ssl
$myhost="{myserver.org:993/imap/ssl/novalidate-cert}";

# Google with imap
$gmailhost="{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX";

$user="username@myhost.org";
$pass="********";

$gmailuser = "user.name@gmail.com";
$gmailpass = "********";

// In crontab All commands need to reference their location eg. /usr/bin $notify_cmd = "/home/user/bin/notify-send-user.sh -U user -i info 'Sinulle on postia!' ";

// Status file. Append and clear after a month, maybe joskus?
$file = "/home/user/bin/mail/mail_status.txt";
file_put_contents( $file, "\n--- ooo ---\n\n", FILE_APPEND );

date_default_timezone_set('Europe/Helsinki');
$t=time();
file_put_contents( $file, (date("d-m-Y H:i",$t))."\n", FILE_APPEND );

# ------ Myhost Mailbox -----

if ($mbox=imap_open( $host, $user, $pass ))
  {
    file_put_contents( $file, "Host Connected\n", FILE_APPEND );
  } else
  {
    file_put_contents( $file, "Host Connection FAIL!\n", FILE_APPEND );
    exit(1);
  }

$data_unread = 0;

$status = imap_status($mbox, "{myserver.org:993}INBOX", SA_ALL);
if ($status) {
  $msgs = $status->messages;
  $data_unread = $status->unseen;   
 
  $notify_msg = "'Host: $data_unread";    // Alkaa hipsulla
  file_put_contents( $file, "Datatuki\n"."-Messages: ".$msgs."\n-Unread  : " . $data_unread . "\n", FILE_APPEND );
 
} else {
  file_put_contents( $file, "Host imap_status failed: " . imap_last_error() . "\n", FILE_APPEND );
}

imap_close($mbox);

# ------- Google Gmail Mailbox -------------

if ($mbox=imap_open( $gmailhost, $gmailuser, $gmailpass ))
  {
    file_put_contents( $file, "Gmail Connected\n", FILE_APPEND );
  } else
  {
    file_put_contents( $file, "Gmail Connection FAIL!\n", FILE_APPEND );
    exit(1);
  }

$gmail_unread = 0;

$status = imap_status($mbox, "{imap.gmail.com:993}INBOX", SA_ALL);
if ($status) {
  $msgs = $status->messages;
  $gmail_unread = $status->unseen; 
  // Append messages
  $notify_msg .= " Gmail: $gmail_unread'";  // Loppuu hipsuun
  file_put_contents( $file, "Gmail\n"."-Messages: ".$msgs."\n-Unread  : " . $gmail_unread . "\n", FILE_APPEND );
 
} else {
  file_put_contents( $file, "Gmail imap_status failed: " . imap_last_error() . "\n", FILE_APPEND );
}

imap_close($mbox);


# ------ If there is any email ------

if( $data_unread != 0 || $gmail_unread != 0 ) {
  // Sinulle on jotakin postia!
  $notify_cmd .= $notify_msg; 
  exec($notify_cmd);
  exec($play_cmd);
  } else {
    file_put_contents( $file, "Nothing to do ...\n", FILE_APPEND );
  }

?>

Että silleen.
Tämä koodi ilmoittaa kun uutta postia on saapunut.


Vaihtuva IP -osoite ... taas

Pitkästä aikaa blogia kirjoittamassa.
Mennyt vuosi meni mökillä remonttia tehdessä, siten tuli muutto uuteen kotiin ja kas vain, en huomannutkaan, että blogi oli jäänyt kirjoittamatta.

Pitäisikö kirjoittaa kuten pysäköinninvalvojahenkilö minulle huomautti: pysähtymiskieltomerkin noudattamatta jättämisestä seuraamuksena huomautusmaksu.

Kirjoitan siitä, mihin viimeksi jäin, eli IP -osoitteen vaihtumisesta.

Uuden 3G/4G tekniikan aikakaudella ei millään saa omaa IP -osoitettaan pysymään vakiona, vaan se vaihtuu ainakin kerran viikossa. Vaikka reitittimen asetuksia kuinka muuttaisi.

Siksi kirjoitin omalle Ubuntu koneelle seuraavan scriptin, joka tarkistaa IP -osoitteen koneen käynnistyksessä ja ilmoittaa minulle, jos osoite on vaihtunut.

#!/bin/bash
#
# Vertaillaan julkista IP -osoitetta
#
# Current eli nykyinen IP-osoite. Kirjoita tai lue tiedostosta
cip='109.XXX.YYY.ZZZ'
# New eli uusi IP-osoite haetaan ipify -palvelimelta
nip=$(curl -s https://api.ipify.org)
# Verrataan osoitteita kekenään
if [ "$cip" != "$nip" ]; then
  # Jos oli muuttunut, niin ilmoitetaan siitä minulle
  notify-send "Public IP address has changed!"
  exit 1;
fi

Tällä menetelmällä ainakin huomaan koska asialle pitää tehdä jotakin.


keskiviikko 22. heinäkuuta 2015

Vaihtuva IP -osoite

Vaihtuuko oma IP -osoitteesi joka kerran kun avaat uuden internet yhteyden?
Se on joskus hankalaa, jos käytät sellaisia palveluita, joihin kirjautuminen tehdään IP -osoitteen perusteella tai käyttämäsi palvelu ei muista sinun tietojasi, koska osoitteesi on vaihtunut.

Siihen tarjoaa avun Unix/Linux järjestelmän cron -ohjelma. Jälleen Wikipediaa: "Cron on ajastuspalvelu Unix-pohjaisille käyttöjärjestelmille. Nimi pohjautuu kreikan sanaan ”chronos” (χρόνος), joka tarkoittaa aikaa. Yleensä ajastimia muokataan crontab -ohjelmalla, joka ohjaa crond -daemonia, joka ajaa komennot taustalla ja tarkistaa minuutin välein, jos komentoja pitää suorittaa ja suorittaa ne. Tehtävät suoritetaan, kun aika- ja päivämääritykset täsmäävät nykyhetkeen."

Pitääksesi oman IP -osoitteesi voimassa, tulee cron -ohjelman lähettää joku kutsu internetiin, jolla yhteys avataan säännöllisesti. Silloin operaattorin ns. "Leasing time" ei mene ikinä umpeen eikä IP -osoite vaihdu jokaisella kirjautumiskerralla.

Tähän riittää yksinkertainen PING -komento, joka kutsuu vaikka google.com palvelinta tietyin väliajoin. Ajastus riippuu oman operaattorin "Leasing time" asetuksista, mutta yleensä tunnin välein tapahtuva kysely riittää. Silloin tämä kysely ei aiheuta ylimääräistä ruuhkaa operaattorin palvelimella. Monella operaattorilla tämä ajastus on yleensä jopa neljä tuntia. Tietysti yön yli sammuksissa oleva kone saa aamulla taas uuden IP -osoitteen. Siksi tämä tietysti vaatii yhden sellaisen tietokoneen, joka on käynnissä 24/7 ja siinä on oikein asennettu cron -ohjelma, mukaanlukien esimerkiksi PING -palvelua käyttävä ajastus. Tähän yleensä vaaditaan Unix/Linux kone. Se vaan on yksinkertaisinta! En väitä etteikö Windowsilla voisi tehdä saman palvelun.

Muuta mukavaa mitä Unix/Linux cron -palvelulla voi tehdä.
Tässä openSUSE /etc/crontab sisältöä.

# Update all installed packages with their newer available versions.
15 5 * * * root zypper-out-html.sh > zypper/INFO/zypper-ps.html
20 5 * * * root php zypper/poll_zypperinfo.php >/dev/null 2>&1
Nämä kaksi komentoa suorittavat openSUSE palvelimen päivityksen automaattisesti joka päivä 15(20)min yli klo 5:00 aamuyöllä ja lähettävät tiedot toiminnasta minulle sähköpostiin.

# Dump local MySQL database (every day 02:00)
0 2 * * * root mysql_dump.sh > mysql/mysql_dump.log
Tämä komento tekee varmistuksen paikallisesta MySQL tietokannasta joka yö klo 2:00 ja kirjaa tapahtumat lokitiedostoon.

# Get temperature sensor readings, write to MySQL database and create graphs
*/2 * * * * root bin/digitemp_cron.sh > bin/digitemp_cron.log 2>&1
Tämä ohjelma lukee lämpötila-antureiden tiedot (siis lämpötilat) kahden minuutin välein (*/2), tallentaa luetut arvot tietokantaan ja piirtää grafiikan

# Read weather, update database (5min) update web-site (30min).
*/5 * * * * root rrdweather/rrdweather_cron_data.sh >/dev/null 2>&1
6,36 * * * * root php rrdweather/poll_weather.php >/dev/null
Nämä ohjelmat hakevat Weather.com (USA) palvelusta Mikkelin lentoaseman säätiedot (5min välein). Tiedot tallennetaan tietokantaan ja niistä piirretään grafiikka (6min ja 36min yli tasatunnin). Miksi USA? No siksi, että pienen ja sisukkaan Suomen palvelut ovat maksullisia (Foreca tai Ilmatieteenlaitos).

tiistai 30. kesäkuuta 2015

Faktoja Linnunradasta

Faktoja Linnunradan galaksista, meidän kodistamme.

1) Linnunrata on sauvaspiraaligalaksi, läpimitaltaan noin 100.000 valovuotta. Toisin kuin tavallinen spiraali, sen spiraalissa on "sauva" yli sen keskialueen ja kaksi tai useampi haara. Haaran, jota kutsutaan kiekoksi, "paksuus" on noin 1000 valovuotta.

2) Linnunrata ei pysy paikallaan vaan se pyörii jatkuvasti ja sen haarat pyörivät siinä samalla. Oma Aurinkokuntamme kiertää oman haaransa mukana keskimäärin nopeudella 828.000 km/h. Nopeudesta huolimatta Aurinkokunnalla kestää noin 230 miljoonaa vuotta kiertää Linnunradan ympäri.

3) Linnunrata sisältää yli 200 miljardia tähteä ja riittävästi pölyä ja kaasua toiseen mokomaan muutamaan miljardiin.

4) Aurinkokuntamme sijaitsee noin 30.000 valovuoden päässä Linnunradan keskustasta ja noin 20 valovuotta galaksin tason yläpuolella.

5) Yli puolet löydetyistä tähdistä ovat vanhempia kuin 4,5 miljardia vuotta vanha Aurinkomme.

6) Linnunradan yleisimmät tähdet ovat punaisia kääpiöitä, viileitä tähtiä jotka ovat noin kymmenesosa Auringon massasta.

7) Vielä 1920-luvulla tähtitieteilijät luulivat, että maailmankaikkeuden kaikki tähdet löytyvät Linnunradalta. Vasta Edwin Hubble löysi erikoisen tähden nimeltä Cepheid variable, jonka avulla hän pystyi mittamaan etäisyyksiä avaruudessa
ja huomasi, että aikaisemmin tähtisumuksi [Nebula] kutsutut kohteet olivatkin toisia galakseja.

8) Noin miljardin vuoden kuluttua Linnunrata törmää naapurigalaksiin [Andromeda]. Nämä kaksi galaksia lähestyvät toisiaan nopeudella 112 km/s. Silloin syntyy paljon uutta materiaa, josta taas syntyy uusia tähtiä.

Lähteet:
* Nola Taylor Redd, SPACE.com Contributor
* http://www.space.com/19915-milky-way-galaxy.html…
* http://www.space.com/15665-edwin-powell-hubble.html
* http://www.space.com/15590-andromeda-galaxy-m31.html

Kuva: Brad Goldpaint. Yöllinen näkymä Linnunradalle, Mount Shasta, California




sunnuntai 28. kesäkuuta 2015

IPCC ilmastopaneeli

Vaikka IPCC:n ilmastopaneelin tilastoista en pidäkään, koska ne ovat osin virheellisiä. Niin olisipa 1980 -luvulla ollut tiedossa nyt ilmastomalleissa käytettävät matemaattiset ja tilastolliset menetelmät:
1) Kalman -suodatin (siis Mr. Kalman kehittämä analysointimalli
2) Gosset (salanimi Student) T-testi.

Näillä pystytään analysoimaan ja ennustamaan muitakin fysikaalisia suureita kuin ilmaston käyttäytymistä. Esimerkiksi lämpötilojen mittaamiseen ja analysointiin erilaisissa tapauksissa. Ei olisi tarvinnut soveltaa koeajotuloksia virtausoppiin lämmönsiirtimien mitoittamisessa.

Nämä kaksi herraa ovat kehittäneet "yksinkertaiset" kaavat ja mallit eri mittaustulosten käsittelyyn. Esimerkiksi maapallon keskilämpötilan kehittymistä voidaan ennustaa ja analysoida näillä malleilla. Näillä malleilla olisi voinut ja myös voi laskea koeajotulosten perusteella lämpötilojen käyttäytymistä koeajopisteiden ulkopuolella ja vieläpä tarkasti.

1980-luvulla joutui soveltamaan virtausoppia ja laskemaan tietyillä kaavoilla lämmönsiirtimen ominaisuudet muissa pisteissä: virtaama + lämpöteho.

Mitä on ilmastonmuutos?


Maapallon lämpötila on noussut 1880 -luvun alusta tähän päivään noin 0,85℃ Eli sinä aikana kun joitakin järkeviä mittauksia on voitu tehdä. Silti lämpötilan mittauksissa on paljon epävarmuutta. Tuohon aikaan (siis 1880) ainoat mittaukset tehtiin rahtilaivoissa, jotka rahtasivat tavaraa ympäri maailman meriä. Silloin meriveden lämpötilan mittaus tehtiin heittämällä saavi laidan yli ja kun se nostettiin takaisin laivaan niin siitä mitattiin lämpötila, näin saatiin joku arvio meriveden lämpötilasta. Mutta!! Jos se laiva käytti puista saavia tai purjekankaista saavia, niin saatiin eri tulos. Elikkä: Jos IPCC:n ilmastopaneelin arviot ja ennustukset nojaavat 1880 -luvun mittauksiin, niin ne saattavat olla pahasti pielessä.

Toinen juttu kokonaan on CO2 määrä. Merivesi, jota maapallolla on noin 75% pinta-alasta, kehittää CO2 ja metaani kaasua enemmän kuin me ihmiset edes ymmärrämme laskea. Meret ja muut lätäköt tuottavat ilmaston CO2 pitoisuudesta yli 95% Mukaanlukien vielä suurempi ilmastomyrkky: Metaani. Metaanin määrä tietysti kasvaa sitä enemmän, mitä enemmän me varastoimme yhdyskuntajätettä kaatopaikoille. Se on taivaallisen totta. Mutta yhtä totta on se, että metaania vapautuu maailman meristä enemmän kuin CO2 kaasua.

Sitten on Hiili (C). Hiili ja muut Hiilen yhdisteet ovat meidän sivilisaatiomme huippu. On sanottu ja sanotaan se nyt vielä, että ihminen ja maapallo toimivat hiilen eri yhdisteiden voimalla. Ilman Hiilen eri yhdisteitä meitä ei olisi edes olemassa. On sanottu ja todistettu, että maapallon elämä perustuu hiilen eri yhdisteille. Jos toisella planeetalla olisi jotakin elämää, niin se ei todennäköisesti perustu Hiilen eri yhdisteisiin.- Vaan kokonaan muuhun kemiaan.

Joten, jos me poltamme voimalaitoksissa 9.000,000,000,000 tonnia hiiltä vuodessa, niin se riittää meille vielä 50 vuotta. Mutta kysymys kuuluu: mitä sitten? Joku yhtye lauloi "Uraani halkeaa ja tuottaa meille valkeaa" Mutta sekään ei ole ratkaisu. Uraanista saadaan kyllä energiaa, mutta sen jätökset ovat ongelma. Ei meille, mutta tuleville sukupolville, noin 30,000 vuoden päähän. Muistaako kukaan mikä on Uraanin Isotoopin 235 puoliintumisaika. Suurinpiirtein 4,48 miljardia vuotta.

Mutta se ratkaisu! Se olisi ei fissio vaan fuusio reaktori.
"Fuusioreaktorin sanotaan olevan turvallisempi kuin nykyisin käytössä olevat fissioon perustuvat ydinreaktorit. Ydinfuusio tuottaa suuria energiamääriä fuusioituvaa ainekiloa kohden, ja fuusioituva aine vety on maailmankaikkeuden yleisin alkuaine!" Mutta kuinka ihmiskunta oppii valjastamaan tämän sama voiman, jota koko maapallo käyttää: Aurinko!

Minusta ei ilman sotia. Koko meidän planeettamme on aina ja ikuisesti tapellut energian saamista vastaan. Sotaa tarvitaan, jotta saadaan uutta tekniikkaa ja energiaa käyttöön. Valitettavasti.

Seuraava III -maailmansota tullaan käymään puhtaasta vedestä. Ei energiasta, koska energia on jo loppunut ja ihmiset ovat oppineet kehittämään energiaa Auringosta. Mutta vesi loppuu!!