Recent posts

#11
Jostain syystä en ole itse saanut noita esille. Mihin kohtaan näyttöä ne tulevat?

--Ere
#12
Terve

Ajan MLInvoicea TrueNAS Scale ElectricEel palvelimen Dockerissa.
MLInvoicen päivityksen jälkeen tulee laskun täyttönäkymässä pari virhettä, muuten toimii hienosti.
Miten tämän saisi korjattua?

Deprecated
: strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated in
/usr/local/mlinvoice/translator.php
on line 68

Deprecated
: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in
/usr/local/mlinvoice/htmlfuncs.php
on line 789

-Markus
#13
Hei,

Mulla pyöri ideat tuon asian suhteen siihen malliin, että kaipaisin tietoa haluatko jatkaa jollain tapaa eteenpäin... kuten aikaisemmin mainitsin niin nykyisellään on toinen laskutusohjelma käytössä, ettei voi sanoa että olisi oma lehmä ojassa ;) ... sanotaan että intressini on puhtaasti kehityksessä ja luodakseen hyvää laskutusohjelmaa, joksi ohjelman aikoinaan koin ja jos joskus tarvetta niin kallistun kyllä tämän ohjelman puoleen uudelleen. Osoitteiston kehityksen intressi on siinä, että muistan miten paljon googlen haku auttoi siihen, että ei tarvinnut kaivella enää postinumerotietoja ja kaupunkinimiä vaan laskun kirjoittamiseen käytetty aika oli mahdollisimman minimaalinen / suoraviivainen.

Ajatuksena oli semmoinen, että voin <määrittelemättömän ajan> aikaa hostaa tiedoston jakoa (todennäköisesti google storages / s3 tai jos käy hintavaksi niin laitan omalle palvelimelle (molemmat on/ollut käytössä ja sen pohjalta veikkaan että pienet summat kun datan määräkin on pieni)), josta saisi noukittua aika ajoin päivitetyt valmiit sqlite tiedostot. PHP:n päässä sqlitet voisi lukea -> mysql pariin tauluun, jotka aina uusien tullessa pudotetaan pois ja jyrätään uudet takaisin. Yksi lisätaulu, jossa voisi olla tieto milloin kaupunki on aina päivitetty, jolloin voidaan tehdä vertailua että onko kaupunkien päivitykselle tarvetta. Postilta tulee joka lauantai uudet tiedot, mutta itse ajattelin että riittää todennäköisesti 3 kk / 6kk sykli ihan hyvin. Se mikä oli huomion arvoista oli se, että kun kokeilin tehdä tietokannan missä oli laajennettu pääkaupunkiseutu niin tietokannan koko oli ~2 megan luokkaa. Tuommoista määrää selaa aika vikkelään jo. Varmaan jo ihan raspberrypiilläkin.

Ajattelin tehdä tuon ihan avoimena koodin pätkänä niin joku voi halutessaan ajaa tota tiheämpään jos tykkää.  Tällöin tosin asetus sivusta olisi hyvä päästä säätämään tarvittaessa nouto url.

/index.json
/latest.json
/fi/Helsinki.db
/fi/... (309 kaikkiaan)
/sv/Helsingfors.db
/sv/... (309 kaikkiaan)

index.json tiedostosta voisi luoda asetus sivun, joka listaa olemassa olevat kaupungit. Jotenkin veikkaan että useammalla on aika paikallista toimintaa, joten tuommoista 20 megan juttua lienee turha pyöritellä. Sivuhuomautus osoitteistosta puuttuu Ahvenanmaa, Posti ei tarjoa sitä.
index.json sisältö olisi jotakuinkin seuraavanlaista [{ name: "Helsinki", file: "Helsinki.db", "size": <byte> },...]
Asetukset sivulla olisi tuosta tehty <checkbox> {{ name }} ( {{ size }} ), jokainen voisi ruksittaa mitkä kaupungit haluaa laskutukseen mukaan ja näkisi paljonko nuo vie suurinpiirtein tilaa. Tilan vienti heittää hiukan jos noi ajetaan samaan tietokantaan kaikki.... en tiedä oisko tuota sizeä edes pakko näyttää :) Toki "presetit" olisi kivoja, jossa olisi "Uusimaa" tai "Pääkaupunkiseutu", "Tampereen seutu" valmiina, mutta menee aika käsitöiksi.

latest.json sisältäisi vain tiedon milloin viimeinen päivitys on tehty { updated: "2024-11-24" } ... tai voin pyörittää nuo päiväykset myös mlinvoicen päiväysformaattiin (joka on tietokannassa) niin ei tarvitse lukea kovin montaa eri formaattia.

<kaupunki>.db tiedostosta löytyy kyseisen kaupungin taulut. Taulut menevät näin
Taulu address: id, address. id primary key ja address (unique) katuosoite
Taulu loc: even_odd, min, max, zip, city, address_id
Tämä on hiukan improvisoitu, koska postin data on hiukan vajaa näiden osalta.
even_odd on triggeri min ja maxille, ovatko parittomia tai parillisia.
even_odd on joko true = parillinen, false = pariton, null = ei kumpikaan
min ja max saattavat puuttua, koska lyhyillä kaduilla niitä ei ole, saattaa myös olla että osassa puuttuu pelkästään toinen, jolloin päädyin skripteissäni ratkaisuun että feikataan jokainen tyhjä min = 0, max = 500. Pitkillä kaduilla nuo toimivat ihan, esim mannerheimintieltä löytyy tietyt numeron pätkät tietylle postiosoitteelle.
zip = esim. 00750
city = esim. Helsinki
address_id = foreign key ( address_id ). Sama kadunnimi voi olla esim. Helsingissä ja Vantaalla, jolloin loc taulusta tulee kaikki vaihtoehdot, mutta address taulusta vain se ainukainen.

-Juho

#14
MLInvoice Discussion / MLInvoice 2.3.1 released
Last post by Ere Maijala - 22.11.24 - klo:20:58
Hi,

MLInvoice 2.3.1 has been released. This version contains only bug fixes including a major one: invoice repeat interval was not saved correctly. See the change log at https://labs.fi/mlinvoice_features.eng.php#changelog for more information on the changes.

The new version can be downloaded from https://labs.fi/files/mlinvoice-2.3.1.zip.

BR,
Ere
#15
Hei!

MLInvoice 2.3.1 on nyt julkaistu. Tässä versiossa on vain virheenkorjauksia, mukaanlukien yksi merkittäväkin: laskun muokkauksessa toistuvuus ei tallentunut oikein. Tarkemmat tiedot löytyvät muutoslokista sivulta https://labs.fi/mlinvoice_features.php#changelog.

Uusi versio on ladattavissa osoitteesta https://labs.fi/files/mlinvoice-2.3.1.zip.

t. Ere
#16
Mielenkiintoinen idea! Julkisen palvelun toteuttaminen tältä pohjalta olisi tietysti mahdollista, mutta tuo pääsyoikeuksien jakelu on hieman haastava. Ts. kun kukaan ei maksa mitään ja kuka tahansa voi käyttää softaa, niin ei ole kovin helppoa päätellä, kenellä pitäisi olla pääsy palveluun. :)

Tokihan tuota varten voisi vaikka tehdä toiminnon, jolla matskut voisi tuoda suoraan MLInvoicen tietokantaan, niin voisi paikallisesti pyöritellä, jos vain kapasiteettia riittää...
#17
Toistuvien laskujen käsittelyyn on tulossa parannuksia, mutta menee vielä hetki...

--Ere
#18
Sori, että spämmään... sitä vain, että osoitetiedoista löytyy sittenkin oma osoite. Eli lienee ihan kattava. Voinee myös veikata että Googlen Suomen osoitetiedot voivat olla peräisin kyseisestä tiedostosta.
#19
Jos jotakuta  kiinnostaaa niin kellotin huvikseni tuon skriptin...


KELLOTUS

tehty komennolla:
time python3 main.py init1
time python3 main.py init2


kone cpu: i5-8250U CPU @ 1.60GHz muisti: 8064MiB

init1
real    14m29.425s
user    3m40.542s
sys    7m14.921s

init2:

real    39m4.497s
user    5m41.111s
sys    20m15.272s
#20
MLInvoiceen liittyvä keskustelu / Osoitteet automaattisesti?
Last post by ioxo - 21.11.24 - klo:17:00
Hei,

Aikoinaan oli hyvin integroitu Googlen osoitehaku, joka oli enemmän kuin kätevä.

Posti jakaa avoimena datana osoitetietoja. En tiedä miten kattava tieto on kun omaa osoitetta ei sieltä löytynyt ja olen kumminkin asunut  ~8 vuotta samassa osoitteessa, mutta muuttaessa oli uusi (katu).

Tein pythonilla skriptin, joka hakee uusimman datan ja parsii sen sqlite3 tietokantaan. Tietokantaa voi käyttää pienimuotoiseen hakuun. Tuon ei ole tarkoitus olla kokonainen versio vaan pieni demo. Se että kehitänkö sitä edelleen niin saa nähdä :). PHP lienee nopeampi kieli (ajettavana) kuin python. Skriptillä voi myös pyörittää pienimuotoista api serveriä, jolla saa etsittyä dataa ja katsottua miten nopea datan haku on. Aluksi olin tekemässä Go:lla tuota, mutta se ei oikein tykännyt isosta tekstitiedostosta (kursori ei pysynyt rivin alkupisteessä).

Pieni huomio semmoisesta, että postin data on pakattuna noin ~5megaa, purettuna noin 100megaa, sqlite tietokannassa ~16megaa. Tietokantaan ajo kannattaa tehdä tehokkaalla koneella (normi pöytäkone lienee tarpeeksi tehokas).

Tuon osoitejutun pystyy myös pitämään erillisenä palveluna ja vaikka sqlite:llä (esim jos käyttää dockeria), koska tietoja pelkästään luetaan. Myös aika löyhällä tietoturvalla, ainoa haitta on että tuolla voi kuormittaa palvelinta, mutta jollain X-API headerillä tuon saisi rajattua...


Semmoinen vinkki kun tekee osoitehaun. Haun pystyy tekemään esim. "Manner" tai sitten "20 Manner", jälkimmäinen tekee nopeamman täsmäiskun postinumerolle. Tämä vinkki vitosena että jälkimmäinen toimii myös navigaattorissa (ainakin waze) :).

'Check it out' osoitteesta:

https://gist.github.com/ioxo/ad3a0252f705498bb8fe79c03ad7b3ed

-Juho