{"id":3492,"date":"2026-06-08T11:26:10","date_gmt":"2026-06-08T09:26:10","guid":{"rendered":"https:\/\/moijari.com\/?p=3492"},"modified":"2026-06-08T17:29:00","modified_gmt":"2026-06-08T15:29:00","slug":"back-to-terttu-2-thoughts","status":"publish","type":"post","link":"https:\/\/moijari.com\/?p=3492","title":{"rendered":"Back to terttu 2: Thoughts, &#8230;"},"content":{"rendered":"\n<p>Kaikki oikeudet pid\u00e4tet\u00e4\u00e4n \u00a9. Jos haluat tukea projektia (osallistua palvelinkustannuksiin, tarjota koodausvissyn tai tulevaisuudessa maksaa palkkaa), laita muutaman euron lahjoituksesi Danske Bank tilille FI15 8312 0710 7275 83 (SWIFT:DABAFIHH), maksun saaja Jari Kuivaniemi. Kirjoita viestikentt\u00e4\u00e4n nimesi ja asuinpaikkakuntasi. Kiitokset lahjoituksestasi.<\/p>\n\n\n\n<p>Tuo edellisiss\u00e4 posteissa tehty palvelin (<a href=\"https:\/\/moijari.com:5008\/\">https:\/\/moijari.com:5008\/<\/a>) on pysynyt hyvin pystyss\u00e4.<\/p>\n\n\n\n<p>Palvelin tulostaa seuraavankaltaisen sivun:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Hello world!\n\nT\u00e4m\u00e4 on artikkelin https:\/\/moijari.com?p=2990 testiohjelma.\n\nOhjelma l\u00f6ytyy t\u00e4st\u00e4 linkist\u00e4 https:\/\/moijari.com:5008. Muutin my\u00f6s html-versiota palvelimesta, se l\u00f6ytyy linkist\u00e4 https:\/\/moijari.com:5009. Tee minulle palvelus ja painele n\u00e4it\u00e4 hetki, niin saan tarkistettua ett\u00e4 ne toimivat oikein.\n\nSeuraava kappale sis\u00e4lt\u00e4\u00e4 ressun tekemi\u00e4 satunnaisbittej\u00e4. Ne ovat t\u00e4ss\u00e4 vain tilan t\u00e4ytteeksi.\n00000 815351217487910435669192172422951946696212529\n00001 920813973742415362649994596558010088465040675\n00002 240957540572627626019678885898823975217177955\n00003 588737120498722070263736259491307364795007018\n00004 099088516044714427477581177561019219994794028\n00005 671836924618350610422165035986981986642212559\n00006 903624466108326292581456051717969002015996523\n00007 174214962253101545608670175806344579522732446\n00008 582106588595739282558149472893211536930107155\n00009 065077579202041683237466269212366696651544942\n\nDBS3 version 0.15 \u00a9, sha256(fb51c52020f4658aea34fa92a464228702888f91f21a688b72e72b6b5a9db329)<\/code><\/pre>\n\n\n\n<p>ja tulostaa seuraavankaltaisen html:n:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!doctype html&gt;\n&lt;html lang=\"fi\"&gt;\n\t&lt;head&gt;\n\t\t&lt;meta charset=\"utf-8\"&gt;\n\t\t&lt;title&gt;dbs3&lt;\/title&gt;\n\t\t&lt;meta name=\"author\" content=\"Jari Kuivaniemi\"&gt;\n\t\t&lt;meta name=\"copyright\" content=\"Jari Kuivaniemi\"&gt;\n\t\t&lt;meta name=\"format-detection\" content=\"telephone=no\"&gt;\n\t\t&lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n\t&lt;\/head&gt;\n\t&lt;body&gt;\n\t\t&lt;h1&gt;Hello world!&lt;\/h1&gt;\n\t\t&lt;p&gt;T\u00e4m\u00e4 on artikkelin\n\t\t\t&lt;a href=\"https:\/\/moijari.com?p=2990\"&gt;https:\/\/moijari.com?p=2990&lt;\/a&gt;\n\t\t\ttestiohjelma.\n\t\t&lt;\/p&gt;\n\t\t&lt;p&gt;Ohjelma l\u00f6ytyy t\u00e4st\u00e4 linkist\u00e4\n\t\t\t&lt;a href=\"https:\/\/moijari.com:5008\"&gt;https:\/\/moijari.com:5008&lt;\/a&gt;. Muutin my\u00f6s\n\t\t\thtml-versiota palvelimesta, se l\u00f6ytyy linkist\u00e4\n\t\t\t&lt;a href=\"https:\/\/moijari.com:5009\"&gt;https:\/\/moijari.com:5009&lt;\/a&gt;. Tee minulle\n\t\t\tpalvelus ja painele n\u00e4it\u00e4 hetki, niin saan tarkistettua ett\u00e4 ne toimivat oikein.\n\t\t&lt;\/p&gt;\n\t\t&lt;p&gt;Seuraava kappale sis\u00e4lt\u00e4\u00e4 ressun tekemi\u00e4 satunnaisbittej\u00e4. Ne ovat t\u00e4ss\u00e4 vain tilan\n\t\tt\u00e4ytteeksi.&lt;\/p&gt;\n\t\t&lt;code&gt;00000 913172437725583125656813961989111569116651622&lt;br&gt;\n\t\t\t00001 668091985964193551241952738289133440806661184&lt;br&gt;\n\t\t\t00002 549190318300809959223119033099901889257655218&lt;br&gt;\n\t\t\t00003 216375827226876174409310032753849534437058619&lt;br&gt;\n\t\t\t00004 412828931075417056583548732955519735473364867&lt;br&gt;\n\t\t\t00005 778209799556888690223374723126772360482730235&lt;br&gt;\n\t\t\t00006 394862247871294866478215333972664754081371156&lt;br&gt;\n\t\t\t00007 437070499366697726219758787597618390377022999&lt;br&gt;\n\t\t\t00008 894827086752475366734695623137289506478059144&lt;br&gt;\n\t\t\t00009 611628644764270179833791103311275126306740678&lt;br&gt;\n\t\t&lt;\/code&gt;\n\t\t&lt;p&gt;DBS3 version 0.15 \u00a9,\n\t\tsha256(fb51c52020f4658aea34fa92a464228702888f91f21a688b72e72b6b5a9db329)&lt;\/p&gt;\n\t&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n\n\n\n<p>Samoin ressusta on kehitin uuden version 2 &#8220;ressu2&#8221; eli t\u00e4ss\u00e4 taas kerrataan alkuper\u00e4ist\u00e4 tavoitetta: palvelimen pit\u00e4isi oppia ymm\u00e4rt\u00e4m\u00e4\u00e4n seuraavanlaisia rivej\u00e4:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>'memberid' = \"customerid\", 'memberapp' = \"customerid\"\n'memberid' = \"countryid\", 'memberapp' = \"countryid\"\n'memberid' = \"productid\", 'memberapp' = \"productid\"\n'memberid' = \"billid\", 'memberapp' = \"billid\"\n'appid' = \"country\", 'chapter' = \"header\", 'memberid' = \"countryid\"\n'appid' = \"country\", 'chapter' = \"header\", 'memberid' = \"countryname\"\n'countryid' = \"fi\", 'countryname' = \"Finland\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"companyid\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"companyname\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"companyaddress\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"companyzip\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"companycountry\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"fiscalyear\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"fiscalperiod\"\n'companyid' = \"1\", 'companyname' = \"Vene Oy\", 'companyaddress' = \"venekatu 1\", 'companyzip' = \"00500\", 'companycountry' = \"fi\", 'fiscalyear' = \"2025\", 'fiscalperiod' = \"1\"\n'appid' = \"customer\", 'chapter' = \"header\", 'memberid' = \"customerid\"\n'appid' = \"customer\", 'chapter' = \"header\", 'memberid' = \"customername\"\n'appid' = \"customer\", 'chapter' = \"header\", 'memberid' = \"customeraddress\"\n'appid' = \"customer\", 'chapter' = \"header\", 'memberid' = \"customerzip\"\n'appid' = \"customer\", 'chapter' = \"header\", 'memberid' = \"customercountry\"\n'customerid' = \"1\", 'customername' = \"Asiakas 1\", 'customeraddress' = \"asiakaskatu 1\", 'customerzip' = \"00500\", 'customercountry' = \"fi\"\n'customerid' = \"2\", 'customername' = \"Asiakas 2\", 'customeraddress' = \"asiakaskatu 2\", 'customerzip' = \"00500\", 'customercountry' = \"fi\"\n'customerid' = \"3\", 'customername' = \"Asiakas 3\", 'customeraddress' = \"asiakaskatu 3\", 'customerzip' = \"00500\", 'customercountry' = \"fi\"\n'appid' = \"product\", 'chapter' = \"header\", 'memberid' = \"productid\"\n'appid' = \"product\", 'chapter' = \"header\", 'memberid' = \"productname\"\n'appid' = \"product\", 'chapter' = \"header\", 'memberid' = \"productprice\"\n'productid' = \"1\", 'productname' = \"Vene\", 'productprice' = \"100\"\n'productid' = \"2\", 'productname' = \"Airot\", 'productprice' = \"10\"\n'productid' = \"3\", 'productname' = \"Tappi\", 'productprice' = \"5\"\n'appid' = \"bill\", 'chapter' = \"header\", 'memberid' = \"billid\"\n'appid' = \"bill\", 'chapter' = \"header\", 'memberid' = \"companyid\"\n'appid' = \"bill\", 'chapter' = \"header\", 'memberid' = \"customerid\"\n'appid' = \"bill\", 'chapter' = \"header\", 'memberid' = \"customername\"\n'appid' = \"bill\", 'chapter' = \"header\", 'memberid' = \"total\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"billid\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"billlineid\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"productid\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"productname\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"productprice\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"quantity\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"amount\"\n'billid' = \"1\", 'companyid' = \"1\", 'customerid' = \"1\", 'customername' = \"Asiakas 1\", 'total' = \"115\"\n'billid' = \"1\", 'billlineid' = \"1\", 'productid' = \"1\", 'productname' = \"Vene\", 'productprice' = \"100\", 'quantity' = \"1\", 'amount' = \"100\"\n'billid' = \"1\", 'billlineid' = \"2\", 'productid' = \"1\", 'productname' = \"Airot\", 'productprice' = \"10\", 'quantity' = \"1\", 'amount' = \"10\"\n'billid' = \"1\", 'billlineid' = \"3\", 'productid' = \"1\", 'productname' = \"Tappi\", 'productprice' = \"5\", 'quantity' = \"1\", 'amount' = \"5\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"transactionid\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"companyid\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"customerid\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"customername\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"billid\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"fiscalyear\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"fiscalperiod\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"transactionid\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"transactionlineid\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"productid\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"productprice\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"quantity\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"amount\"\n'transactionid' = \"1\", 'companyid' = \"1\", 'customerid' = \"1\", 'customername' = \"Asiakas 1\", 'billid' = \"1\", 'fiscalyear' = \"2025\", 'fiscalperiod' = \"1\"\n'transactionid' = \"1\", 'transactionlineid' = \"1\", 'productid' = \"1\", 'productprice' = \"100\", 'quantity' = \"1\", 'amount' = \"100\"\n'transactionid' = \"1\", 'transactionlineid' = \"2\", 'productid' = \"2\", 'productprice' = \"10\", 'quantity' = \"1\", 'amount' = \"10\"\n'transactionid' = \"1\", 'transactionlineid' = \"3\", 'productid' = \"3\", 'productprice' = \"5\", 'quantity' = \"1\", 'amount' = \"5\"<\/code><\/pre>\n\n\n\n<p>, palvelin kirjoittaa seuraavankaltaisen lokin:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>20250830175147UTC starting dbs3 \"DBS3 version 0.09 \u00a9\", port:5008, https\n20250830175147UTC cert       xx xx xx xx...\n20250830175147UTC private    xx xx xx xx...\n20250830175147UTC server_https_init()\n20250830175147UTC SSL_library_init()\n20250830175147UTC OpenSSL_add_ssl_algorithms()\n20250830175147UTC OpenSSL_add_ciphers()\n20250830175147UTC OpenSSL_load_error_strings()\n20250830175147UTC SSLv23_server_method()\n20250830175147UTC SSL_CTX_new()\n20250830175147UTC SSL_CTX_use_certificate_file()\n20250830175147UTC SSL_CTX_use_PrivateKey_file()\n20250830175147UTC cert       xx xx xx xx...\n20250830175147UTC private    xx xx xx xx...\n20250830175147UTC SSL_CTX_load_verify_locations()\n20250830175147UTC server_basic_socket()\n20250830175147UTC server_getaddrinfo()\n20250830175147UTC getaddrinfo()\n20250830175147UTC server_socket()\n20250830175147UTC socket()\n20250830175147UTC server_bind()\n20250830175147UTC bind()\n20250830175147UTC freeaddrinfo()\n20250830175147UTC server_listen()\n20250830175147UTC listen()\n20250830175147UTC accept()\n20250830175201UTC ========================================\n20250830175201UTC dbs_time_vars()\n20250830175201UTC fork start (parent) getpid:12334 getppid:1\n20250830175201UTC fork()\n20250830175201UTC fork end (parent) pid:12335 getpid:12334 getppid:1\n20250830175201UTC server_close()\n20250830175201UTC init_child()\n20250830175201UTC close()\n20250830175201UTC close(s)\n20250830175201UTC cert       xx xx xx xx...\n20250830175201UTC close(s)\n20250830175201UTC private    xx xx xx xx...\n20250830175201UTC https_client()\n20250830175201UTC accept()\n20250830175201UTC SSL_new()\n20250830175201UTC SSL_set_fd()\n20250830175201UTC SSL_accept()\n20250830175201UTC SSL_get_peer_certificate(), No peer certificate\n20250830175201UTC SSL_read()\n20250830175201UTC ========================================\n20250830175201UTC dbs_time_vars()\n20250830175201UTC fork start (parent) getpid:12334 getppid:1\n20250830175201UTC fork()\n20250830175201UTC fork end (parent) pid:12336 getpid:12334 getppid:1\n20250830175201UTC init_child()\n20250830175201UTC server_close()\n20250830175201UTC close(s)\n20250830175201UTC close()\n20250830175201UTC cert       xx xx xx xx...\n20250830175201UTC close(s)\n20250830175201UTC private    xx xx xx xx...\n20250830175201UTC https_client()\n20250830175201UTC accept()\n20250830175201UTC SSL_new()\n20250830175201UTC SSL_set_fd()\n20250830175201UTC SSL_accept()\n20250830175201UTC SSL_get_peer_certificate(), No peer certificate\n20250830175201UTC SSL_read()\n20250830175201UTC SSL_read(), retval 540, errno: 0, SSL_get_error(): 0, ERR_get_error(): 0\n20250830175201UTC (540 bytes)\n20250830175201UTC GET \/ HTTP\/1.1\nHost: moijari.com:5008\nSec-Fetch-Dest: document\nUser-Agent: Mozilla\/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit\/605.1.15 (KHTML, like Gecko) Version\/18.6 Mobile\/15E148 Safari\/604.1\nAccept: text\/html,application\/xhtml+xml,application\/xml;q=0.9,*\/*;q=0.8\nReferer: https:\/\/moijari.com:5008\/\nSec-Fetch-Site: same-origin\nSec-Fetch-Mode: navigate\nAccept-Language: en-GB,en;q=0.9\nPriority: u=0, i\nAccept-Encoding: gzip, deflate, br\nCookie: PHPSESSID=xx xx xx xx...\nConnection: keep-alive\n\n_registerTMCloneTable\n20250830175201UTC 1 reads, received 540 chars, read 540 total bytes, input buffer size 2048 chars, data=\"\n20250830175201UTC \"\n20250830175201UTC htmlmethod: \"GET\"\n20250830175201UTC htmlpath: \"\/\"\n20250830175201UTC htmlversion: \"HTTP\/1.1\"\n20250830175201UTC htmlfilename: \"\"\n20250830175201UTC htmlfileextension: \"\"\n20250830175201UTC htmlhost: \"moijari.com:5008\"\n20250830175201UTC htmluseragent: \"Mozilla\/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit\/605.1.15 (KHTML, like Gecko) Version\/18.6 Mobile\/15E148 Safari\/604.1\"\n20250830175201UTC htmlcookie: \"PHPSESSID=xx xx xx xx...\"\n20250830175201UTC enter dba_loop()\n20250830175201UTC entering dba_loop()\n20250830175201UTC fetching cookies\n20250830175201UTC htmlsessionid: \"\"\n20250830175201UTC htmlmode: \"\"\n20250830175201UTC htmllanguage: \"\"\n20250830175201UTC end fetching cookies\n20250830175201UTC html prettyprinter\n20250830175201UTC buffers1: 0:96 1:1423 2:0 3:0 4:116 5:0 6:0 7:0 8:0\n20250830175201UTC buffers2: 0:96 1:0 2:0 3:0 4:0 5:0 6:0 7:1539 8:0\n20250830175201UTC buffers3: 0:96 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:1624\n20250830175201UTC html prettyprinter done.\n20250830175201UTC exit dba_loop2()\n20250830175201UTC entering dba_loop2()\n20250830175201UTC exiting dba_loop2()\n20250830175201UTC buffers(ssl): 0:196SSL_write()\n20250830175201UTC  1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:1624SSL_write()\n20250830175201UTC HTTP\/1.0 200 OK\nLocation: \nServer: DBS3 version 0.09 \u00a9\nDate: Sat, 30 Aug 2025 17:52:01 GMT\nContent-Length: 1624\nSHA256: 14f9261ba8b2d0955cdcd88ce63cf1414837042ceeb56e99cbcd8f8b362a9f92\n\n\n\n20250830175201UTC &lt;!doctype html>\n&lt;html lang=\"fi\">\n\t&lt;head>\n\t\t&lt;meta charset=\"utf-8\">\n\t\t&lt;title>dbs3&lt;\/title>\n\t\t&lt;meta name=\"author\" content=\"Jari Kuivaniemi\">\n\t\t&lt;meta name=\"copyright\" content=\"Jari Kuivaniemi\">\n\t\t&lt;meta name=\"format-detection\" content=\"telephone=no\">\n\t\t&lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n\t&lt;\/head>\n\t&lt;body>\n\t\t&lt;h1>Hello world!&lt;\/h1>\n\t\t&lt;p>T\u00e4m\u00e4 on artikkelin\n\t\t\t&lt;a href=\"https:\/\/moijari.com?p=2990\">https:\/\/moijari.com?p=2990&lt;\/a>\n\t\t\ttestiohjelma. Ohjelma l\u00f6ytyy t\u00e4st\u00e4 linkist\u00e4\n\t\t\t&lt;a href=\"https:\/\/moijari.com:5008\">https:\/\/moijari.com:5008&lt;\/a>.\n\t\t&lt;\/p>\n\t\t&lt;p>Seuraava kappale sis\u00e4lt\u00e4\u00e4 ressun tekemi\u00e4 satunnaisbittej\u00e4. Ne ovat t\u00e4ss\u00e4 vain tilan\n\t\tt\u00e4ytteeksi.&lt;\/p>\n\t\t&lt;code>00000 20616874070457590523126122132497421268944884802220810261826959568&lt;br>\n\t\t\t00001 17192985807111595612468232713117700741936846802133961244101879900&lt;br>\n\t\t\t00002 02407386257484414673907086023803598802701388309148448685736962425&lt;br>\n\t\t\t00003 50279311953963128957788744672545836449370328271465324371081029118&lt;br>\n\t\t\t00004 70458842796761884608024944157410778280148696721938596935963966256&lt;br>\n\t\t\t00005 05578472692405139090352146280861261687819185840399999490749778727&lt;br>\n\t\t\t00006 42059647448790835009224071147698545710269723898238144550191259729&lt;br>\n\t\t\t00007 92523533467026772824174205506373861584249958499398660047182445533&lt;br>\n\t\t\t00008 17388179513424995966929981520791349290757431604968432604126712314&lt;br>\n\t\t\t00009 12602138335914743028665941174114691854493502124843486708760074618&lt;br>\n\t\t&lt;\/code>\n\t\t&lt;p>DBS3 version 0.09 \u00a9,\n\t\tsha256(0ff070a4dda2dc67e499d2eb5b5ddf1efce64863ad517fdf2509bdfb4955cd5b)&lt;\/p>\n\t&lt;\/body>\n&lt;\/html>\n20250830175201UTC SSL connection using TLS_AES_128_GCM_SHA256\n20250830175201UTC dbs_query_vars()\n20250830175201UTC SSL_free()\n20250830175201UTC critical_wait()\n20250830175201UTC critical_post()\n20250830175201UTC server_close(news)\n20250830175201UTC close()\n20250830175201UTC fork end (child) pid:0 getpid:12336 getppid:12334\n20250830175201UTC exit_child()\n20250830175201UTC unlink dbs3pid12336.log\n20250830175201UTC ========================================<\/code><\/pre>\n\n\n\n<p>(ehdotin teille lukijani ett\u00e4 lis\u00e4isitte tarvittavia tietoja siihen). Ajatus t\u00e4ss\u00e4 ensimm\u00e4isess\u00e4 versiossa oli m\u00e4\u00e4ritell\u00e4 maat (country), yritys (company), asiakas (customer), tuote (product), lasku(bill) ja liiketapahtuma (transaction).<\/p>\n\n\n\n<p>T\u00e4m\u00e4 oli t\u00e4ll\u00e4inen yksinkertaistettu malli, jossa sy\u00f6tet\u00e4\u00e4n lasku, ker\u00e4ill\u00e4\u00e4n sen perusteella (ei tilausta, toimitusta, ker\u00e4ily\u00e4 jne.). Samoin liiketapahtumat perustuivat yksinkertaiseen kirjanpitoon. <\/p>\n\n\n\n<p>Ajatus on ett\u00e4 n\u00e4iden perusteella voin mietti\u00e4 mit\u00e4 toimintoja terttuun tarvitaan.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>'memberid' = \"customerid\", 'memberapp' = \"customerid\"\n'memberid' = \"countryid\", 'memberapp' = \"countryid\"\n'memberid' = \"productid\", 'memberapp' = \"productid\"\n'memberid' = \"billid\", 'memberapp' = \"billid\"\n'appid' = \"country\", 'chapter' = \"header\", 'memberid' = \"countryid\"\n'appid' = \"country\", 'chapter' = \"header\", 'memberid' = \"countryname\"\n'countryid' = \"fi\", 'countryname' = \"Finland\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"companyid\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"companyname\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"companyaddress\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"companyzip\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"companycountry\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"fiscalyear\"\n'appid' = \"company\", 'chapter' = \"header\", 'memberid' = \"fiscalperiod\"\n'companyid' = \"1\", 'companyname' = \"Vene Oy\", 'companyaddress' = \"venekatu 1\", 'companyzip' = \"00500\", 'companycountry' = \"fi\", 'fiscalyear' = \"2025\", 'fiscalperiod' = \"1\"\n'appid' = \"customer\", 'chapter' = \"header\", 'memberid' = \"customerid\"\n'appid' = \"customer\", 'chapter' = \"header\", 'memberid' = \"customername\"\n'appid' = \"customer\", 'chapter' = \"header\", 'memberid' = \"customeraddress\"\n'appid' = \"customer\", 'chapter' = \"header\", 'memberid' = \"customerzip\"\n'appid' = \"customer\", 'chapter' = \"header\", 'memberid' = \"customercountry\"\n'customerid' = \"1\", 'customername' = \"Asiakas 1\", 'customeraddress' = \"asiakaskatu 1\", 'customerzip' = \"00500\", 'customercountry' = \"fi\"\n'customerid' = \"2\", 'customername' = \"Asiakas 2\", 'customeraddress' = \"asiakaskatu 2\", 'customerzip' = \"00500\", 'customercountry' = \"fi\"\n'customerid' = \"3\", 'customername' = \"Asiakas 3\", 'customeraddress' = \"asiakaskatu 3\", 'customerzip' = \"00500\", 'customercountry' = \"fi\"\n'appid' = \"product\", 'chapter' = \"header\", 'memberid' = \"productid\"\n'appid' = \"product\", 'chapter' = \"header\", 'memberid' = \"productname\"\n'appid' = \"product\", 'chapter' = \"header\", 'memberid' = \"productprice\"\n'productid' = \"1\", 'productname' = \"Vene\", 'productprice' = \"100\"\n'productid' = \"2\", 'productname' = \"Airot\", 'productprice' = \"10\"\n'productid' = \"3\", 'productname' = \"Tappi\", 'productprice' = \"5\"\n'appid' = \"bill\", 'chapter' = \"header\", 'memberid' = \"billid\"\n'appid' = \"bill\", 'chapter' = \"header\", 'memberid' = \"companyid\"\n'appid' = \"bill\", 'chapter' = \"header\", 'memberid' = \"customerid\"\n'appid' = \"bill\", 'chapter' = \"header\", 'memberid' = \"customername\"\n'appid' = \"bill\", 'chapter' = \"header\", 'memberid' = \"total\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"billid\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"billlineid\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"productid\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"productname\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"productprice\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"quantity\"\n'appid' = \"bill\", 'chapter' = \"lines\", 'memberid' = \"amount\"\n'billid' = \"1\", 'companyid' = \"1\", 'customerid' = \"1\", 'customername' = \"Asiakas 1\", 'total' = \"115\"\n'billid' = \"1\", 'billlineid' = \"1\", 'productid' = \"1\", 'productname' = \"Vene\", 'productprice' = \"100\", 'quantity' = \"1\", 'amount' = \"100\"\n'billid' = \"1\", 'billlineid' = \"2\", 'productid' = \"1\", 'productname' = \"Airot\", 'productprice' = \"10\", 'quantity' = \"1\", 'amount' = \"10\"\n'billid' = \"1\", 'billlineid' = \"3\", 'productid' = \"1\", 'productname' = \"Tappi\", 'productprice' = \"5\", 'quantity' = \"1\", 'amount' = \"5\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"transactionid\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"companyid\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"customerid\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"customername\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"billid\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"fiscalyear\"\n'appid' = \"transaction\", 'chapter' = \"header\", 'memberid' = \"fiscalperiod\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"transactionid\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"transactionlineid\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"productid\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"productprice\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"quantity\"\n'appid' = \"transactionline\", 'chapter' = \"lines\", 'memberid' = \"amount\"\n'transactionid' = \"1\", 'companyid' = \"1\", 'customerid' = \"1\", 'customername' = \"Asiakas 1\", 'billid' = \"1\", 'fiscalyear' = \"2025\", 'fiscalperiod' = \"1\"\n'transactionid' = \"1\", 'transactionlineid' = \"1\", 'productid' = \"1\", 'productprice' = \"100\", 'quantity' = \"1\", 'amount' = \"100\"\n'transactionid' = \"1\", 'transactionlineid' = \"2\", 'productid' = \"2\", 'productprice' = \"10\", 'quantity' = \"1\", 'amount' = \"10\"\n'transactionid' = \"1\", 'transactionlineid' = \"3\", 'productid' = \"3\", 'productprice' = \"5\", 'quantity' = \"1\", 'amount' = \"5\"<\/code><\/pre>\n\n\n\n<p>Perustoimintoja varten tarvitsette ainakin salasanan<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>'uname' = \"testi\", 'password' = \"testaus\", 'language' = \"en\"<\/code><\/pre>\n\n\n\n<p>My\u00f6s edellisten postien MR8 tarvitsee logon:ia, vapaasti MR8 perustui v\u00e4limuisteihin ja per\u00e4kk\u00e4istiedostoon.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kaikki oikeudet pid\u00e4tet\u00e4\u00e4n \u00a9. Jos haluat tukea projektia (osallistua palvelinkustannuksiin, tarjota koodausvissyn tai tulevaisuudessa maksaa palkkaa), laita muutaman euron lahjoituksesi Danske Bank tilille FI15 8312 0710 7275 83 (SWIFT:DABAFIHH), maksun saaja Jari Kuivaniemi. Kirjoita viestikentt\u00e4\u00e4n nimesi ja asuinpaikkakuntasi. Kiitokset lahjoituksestasi. Tuo edellisiss\u00e4 posteissa tehty palvelin (https:\/\/moijari.com:5008\/) on pysynyt hyvin pystyss\u00e4. Palvelin tulostaa seuraavankaltaisen sivun: ja&hellip; <a class=\"more-link\" href=\"https:\/\/moijari.com\/?p=3492\">Continue reading <span class=\"screen-reader-text\">Back to terttu 2: Thoughts, &#8230;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/3492"}],"collection":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3492"}],"version-history":[{"count":12,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/3492\/revisions"}],"predecessor-version":[{"id":3513,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/3492\/revisions\/3513"}],"wp:attachment":[{"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3492"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3492"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3492"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}