Fajl za preuzimanje | sezampadparse140.zip |
Oznaka tekuće verzije | 1.40 |
Datum | 12.06.2023 |
Autor | Dejan Ristanovic (dejanr at pcpress tacka rs) |
Status | Program je besplatan, koristite ga, umnožavajte i menjajte kako nađete za shodno. |
Sezam BBS radio je najpre u okviru časopisa Računari, od 11. novembra 1989. do 18. decembra 1995, a zatim kao samostalni sistem SezamPro od 19. decembra 1995. Radi i danas, ali je BBS deo efektivno prestao da radi 23. decembra 2009. godine, mada je realno aktivnost BBS-a opadala od 2005, kada se SezamPro fokusirao na Internet provajding odnosno AD[S]L, analogno-digitalne SezamPro linije.
Sezam sam koristio za elektronsku poštu od prvih dana, kada je pošta ostajala u okviru sistema. Kada je u februaru 1996. Internet "došao" u Srbiju, sva moja pošta je išla kroz SezamPro. Koristio sam konzolni režim za prijem i slanje poruka, kao i off-line reader SorPro za njihovo skladištenje. Vremenom to postajalo sve nekomfornije, jer su uz poruke stizale sve veće i komplikovanije datoteke, multimedija je zavladala, pa sam 2000. godine prešao na Microsoft Outlook, koji i danas koristim. Vremenom sam prešao i na drugu adresu, na svom domenu. To znači da su poruke primljene i poslate između 1989. i 2000. godine (a i kasnije, jer sam za neke liste i dalje koristio @sezampro adresu) i dalje "zarobljene" u tim starim formatima. Reklo bi se da više nikome nisu potrebne prastare poruke, ali meni neka od njih ipak povremeno zatreba. I zato sam odlučio da, u okviru ovog hobi-projekta, "oživim" stare poruke sa Sezama i SezamaPro. U ovoj fazi bavim se porukama sa SezamaPro.
SezamPro poruke su se preuzimale u konzolnom režimu, komandom nalik na mail read &. Ona je kopirala sve nove poruke u datoteku TEXTPAD koja se nalazi na korisnikovom lokalnom disku (neka vrsta tadašnjeg cloud-a). Onda se komandom pad download fajl TEXPAD arhiviran u datoteku PADxxxxx.ZIP koju je onda korisnik prenosio na svoj kompjuter ZModem protokolom. xxxxx je ovde redni broj koji je postepeno rastao, tako da je kod mene trenutno aktuelan PAD51573.ZIP.
Poruke iz PAD-ova sam unosio u off-line reader SorPro, ali sam i čuvao arhive PADxxxxx.ZIP. Trenutno imam oko 49000 PAD fajlova, koji zauzimaju oko 47 GB prostora i pokrivaju period od 27.03.1997. pa do danas. Imam i starijih fajlova, kao i gomilu PAD-ova sa prvog Sezam BBS-a, ali njih treba da prikupim jer su rasuti po nekim starim CD-ovima, pa se za sada bavim ovim što imam.
Svaki PAD fajl u sebi sadrži datoteku TEXTPAD u kojoj su poruke, kao i fajlove koji su priključeni uz te poruke, obično ZIP arhive.
Poruke u TEXTPAD-ovima su privatne poruke, poruke u grupama i poruke u konferencijama. Za sada se ne bavim porukama u konferencijama, preskačem ih.
Odlučio sam da poruke radi trajnog skladištenja (dobro, nekad sam mislio da su PAD-ovi trajno skladištenje) uvezem u program MailStore. To je odličan program za arhiviranje elektronske pošte koji već godinama koristim. Može da se instalira kao portabl program, dakle u jedan folder koji onda po želji mogu da prebacim na sledeći računar. Ima dobre opcije pretraživanja, brz je i besplatan za kućnu upotrebu.
Da bih uvezao poruke u MailStore, potrebno je da svaka poruka bude po jedan EML fajl. Dakle, cilj projekta je da se TEXTPAD fajlovi iz PADxxxxx.ZIP arhiva raspakuju, parsiraju, izvade iz njih privatne poruke i poruke u grupama, i da se svaka snimi kao poseban EML fajl.
Format Sezamove poruke je nastao u doba pre Interneta i kasnije se delimično prilagodio Internet e-mail-u. Standardna Sezamova poruka ima zaglavlje, telo poruke i (opciono) jedan fajl priključen uz poruku.
Postoje tri (zapravo četiri, kao što će se videti) tipa poruka. Prvi tip se odnosi na poruku koja je poslata sa Sezama korisniku na Sezam, iz konzolnog moda. Tipična poruka tog tipa izgleda ovako:
==============================
Vaša poruka za mdragana
Tema: Pretplata
(46759.5) Čet 27/03/1997 17:03, 145 chr
---------------------------------------------------------------------
Molim te odobri pristup korisnici babycate do 8. januara iduće godine. Classic
pretplata, beležiš kao gratis na račun PC Press-a.Pozdrav,
Dejan
-------------------------------------------------------- 46759.5 --
** Uz poruku datoteka lista.zip, 56315
Telo poruke ovde ne sadrži nikakva Internet zaglavlja, a YU slova su kodirana po rasporedu Računari, koji je Sezam koristio. To znači da su kodovi slova čćđšžČĆĐŠŽ redom 166, 169, 170, 171, 172, 174, 175, 176, 177, 178.
Drugi tip poruke je stigao sa Interneta i izgleda ovako:
==============================
Poruka od aleck@sezampro.yu
Tema: Re: Slike autora
(56690.6) Pet 09/05/1997 10:23, 567 chr (Pet 09/05/1997 12:07)
---------------------------------------------------------------------
Received: from barman.sezampro.yu by SezamPro with SMTP
Message-ID: <3372DFD0.F254629@sezampro.yu>
Date: Fri, 09 May 1997 10:26:56 +0200
From: Aleksandar Vacic <aleck@sezampro.yu>
Reply-To: aleck@sezampro.yu
Organization: PCS
X-Mailer: Mozilla 4.0b3 [en] (Win95; I)
MIME-Version: 1.0
To: dejanr@sezampro.yu
Subject: Re: Slike autora
X-Priority: 3 (Normal)
References: <0.0.655732@sezampro.yu>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bitdejanr wrote:Sad sam pogledao te slike - kuku i lele. Pa sve izgledaju kao da su
negativi. Otkud to?
-------------------------------------------------------- 56690.6 --
Ova poruka ima zaglavlje Internet poruke a naša slova su kodirana na način zadat u zaglavlju, često ISO-8859-1.
Treći tip poruke je takođe stigao sa Interenta ali njegova dužina prevazilazi maksimalnu dužinu Sezam poruke, koja je oko 32 KB teksta. Ona izgleda ovako:
==============================
Poruka od dejanr@bix.com, +0007F73D.EML 55k
Tema: Bix2
(54114.6) Čet 08/05/1997 01:37, 558 chr
---------------------------------------------------------------------
Received: from bos1h.DELPHI.com by SezamPro with SMTP
Received: from bix.com (1073744992@ns.delphi.com)
by delphi.com (PMDF V5.1-8 #22009)
with SMTP id <01IILLGYC2ZK9PMZMN@delphi.com> for dejanr@sezampro.yu; Wed,
7 May 1997 19:33:17 EDT
Received: by bix.com (CoSy3.46) id <9705071933.memo.42820@BIX.com>; Wed,
07 May 1997 19:33:33 -0400 (EDT)
Date: Wed, 07 May 1997 19:33:32 -0400 (EDT)
From: dejanr@BIX.com
Subject: Bix2
To: dejanr@sezampro.yu
Message-id: <9705071933.memo.42820@BIX.com>
X-CoSy-To: dejanr@sezampro.yu
[Message attached]
-------------------------------------------------------- 54114.6 --
** Uz poruku datoteka 0007F73D.EML, 56315
Ovde je u osnovno (sistemsko) telo poruke stavljeno samo zaglavlje Internet poruke, dok je sama poruka (sa ponovljenim zaglavljem) snimljena kao datoteka uz Sezam poruku, u EML formatu. U tom EML-u, uz zaglavlje i telo poruke, može da bude enkodirano nekoliko fajlova, što EML standard dopušta.
Četvrti tip poruke koji će se obrađivati su poruke u grupama. To su bile Sezamove privatne konferencije, koje su mogle da okupe izvestan broj korisnika (u početku 12, posle mnogo više, najzad praktično beskonačno). Poruka u grupi izgleda ovako:
===============================
Grupa uprava, od dejanr
(49323) Sre 23/04/1997 21:07, 201 chr
---------------------------------------------------------------------
Ima neki problem kod lokalnog diska. Skupio sam nekih 15 MB u pad, i sada
kada kažem A: pa DIR on kaze da nema ništa, a sa PAD DIR vidim fajlove
normalno. Sve PAD xxx naredbe rade, a one na A: ne radi.
-------------------------------------------------------- 49323 --
Poruke u grupama strogo uzevši ne spadaju u elektronsku poštu, ali sam želeo da ih ipak "oživim", ima tu zanimljivih priča, pa ću smatrati da se zapravo šalju na (fiktivnu) adresu imegrupe@sezampro.rs. Konkretna poruka bi se smatrala privatnom porukom koja se šalje na adresu uprava@sezampro.rs
Najlakše je sa porukama tipa 3. Sezamov deo poruke je tu nebitan, dovoljno je fajl uz poruku, koji je arhiviran u PADxxxxx.ZIP, a koji je već EML fajl, prekopirati među finalne EML fajlove.
Poruke tipa 2 su tek nešto komplikovanije, treba ignorisati Sezamovo zaglavlje i sve što je u telu poruke prekopirati u EML fajl.
Poruke tipa 1 i tipa 4 su komplikovane, jer treba od njih generisati EML fajl, i još u njega enkodirati datoteku koja je priključena uz poruku, ako postoji.
Prva linija zaglavlja se sastoji od znakova =. Najpre sam smatrao da ih ima 30, ali ne... Privatne poruke zaista počinju sa 30 znakova jednako, ali poruke u grupama počinju sa 31 znak =, a konferencijske poruke sa 32 znaka =
Format prve linije je prilično jasan, samo treba predvideti razne slučajeva kad ima fajla i kada ga nema.
U drugoj liniji je tema, ali ona ne mora da postoji. Kada nema teme, neme ni ove linije.
Finalna linija (treća ili, ako nema teme, druga) počinje brojem poruke u zagradi. I tu postoje razne finese. Broj je generalno 32-bitni, dakle sistem može da primi 4.2 ili 2.1 milijardi poruka, zavisno da li je označen broj ili neoznačen. Valjda je neoznačen. Ali se broj ispisuje u obliku X.Y, gde X ide od 0 do 99999, pa se onda Y uveća za 1 i tako u krug. Dakle, ako je broj poruke ispisan kao 12345.7758, to je zapravo poruka čiji je apsolutni broj 775812345. Ovakav sistem je uveden da bi čovek ipak operisao sa nekim smislenim brojem poruke, pa da može da otkuca mail reply 12345, umesto užasnog mail reply 775812345. Ako se odgovara na neku jako staru poruku, onda mora da se kuca čitav broj, ali to se em retko radi, em je lakše kucati veliki broj kao dva manja odvojena tačkom (pitajte i one što su smislili kako se navode IP adrese). Za ovu transformaciju pretvaraću brojeve u kompletne, makar imali 9 cifara, i koristiću taj broj kao identifikator poruke, dakle rezultati će biti nalik na 775812345.eml Onda ću tome dodavati ime PAD fajla u kome je poruka nađena, radi lakšeg debagovanja.
Ostatak drugog/trećeg reda je datum i vreme (sekunde nisu zabeležene) koji su kodirani na očigledan način.
U raznim vremenima sam programirao na raznim jezicima, a ozbiljnije stvari sam radio koristeći Fortran, Basic, Pascal, Clipper, C++, Visual Basic i VBA. Tu i tamo poneki asembler. Da je ovo neki posao koji treba brzo završiti, koristio bih Visual Basic ili C++. Verovatnije C++.
Ali ovo je hobi projekat, pa sam odlučio da ga iskoristim da naučim novi programski jezik, Python. Mnogo ga svi hvale, pa... što da ne.
Kako učiti novi jezik... Nekad se to radilo iz knjige. Prelistao sam nekoliko, recimo dobro deluju Automate The Boring Stuff With Python (Al Sweigart, besplatno za čitanje) i Python Cookbook (David Beazley & Brian K. Jones). Ali knjige su tako spoooore...
I onda sam video da su najbolji svetski univerziteti, među njima i naš ETF (Odsek za softversko inženjerstvo) stavili kompletne nastavne materijale na Internet. Predavanja, slajdovi, zadaci... Mogu da ih pokupim ne plaćajući školarinu, da naučim Python i još ne moram da polažem ispit. Savršeno. Što bi rekao Steve Wozniak, tamo gde najpametniji ljudi na svetu rade, vrata su otključana.
I tako, odmah sam počeo da pišem program, pa kad nešto zapne guglao rešenje. Neverovatno lepa osobina Python-a je što ima biblioteka za svaku stvar koja ti zatreba. Samo slažeš kockice (dobro, nekad sam mrzeo takav pristup programiranju, ali ako ne možeš da ih pobediš, ti im se pridruži...) Imao sam prvu verziju programa za jedan dan, barem što se tiče tipova poruka 2 i 3
Ne kačim je ovde jer je potpuno sakata. Ali raspakuje arhive, neke poruke transformiše, preskače što ne razume, pravi EML fajlove...
"Napao" sam generisanje .EML fajlova iz Sezamovih poruka (tip 1 i 4) i nešto ne ide. Onda sam pitao ChatGPT i on mi je napravio modul. Savršen. Radi šta treba. Bravo ChatGPT!
Evo kako je to teklo:
Ja: write a python program that transformes text file to eml message
On: Here's a Python program that reads a text file and converts it to an EML message. This program uses the email module in Python to create an EML message. The program reads the contents of the input text file, creates a MIME message with the text as the body and the text file as an attachment, and writes the message to the output file. Note that the email.utils.formataddr function is used to format the sender and recipient email addresses in a way that is RFC compliant. The _subtype argument in the MIMEApplication constructor is used to determine the file type of the attachment based on the file extension.
[I sad tu ide kod.]
Probam ja, radi, ali puca kad naiđe neko naše slovo. Reko' dal' sad da krpim... ma 'ajde da probam opet sa njim da diskutujem.
Ja: it works with ascii. but when I have some non-ascii character, it returns 'charmap' codec can't decode byte 0x90 in position 106: character maps to <undefined>
On: To handle non-ASCII characters in the input text file, you can specify the encoding when opening the file using the encoding parameter. For example, if the input text file is encoded in UTF-8, you can open it like this... [pa sad tu neki primer] And when writing the EML message to the output file, you can open the file in binary mode and specify the encoding in the open function. For example, to encode the output as UTF-8, you can open the file like this [pa opet primer] Here's the updated code:
[I sad tu ide kod.]
Super, radi to i sa našim slovima, ali ja bih sad da mogu i da dodam ZIP fajl uz poruku.
Ja: that works great. But could you make it attach a zip file to the message?
On: Sure! Here's the updated code that adds a zip file as an attachment to the message. This code opens the zip file in binary mode and creates a MIMEApplication object with the binary data and the zip subtype. It then adds the attachment to the message and writes the message to the output file. Make sure to replace 'files.zip' with the filename of the zip file you want to attach.
[I sad tu ide kod.]
Vidim da on osim što ugradi ulazni tekst fajl u telo poruke, on ga pridoda uz nju i kao ulaz.txt. To mi je već bilo jasno kako da ispravim, ali kad me je krenulo 'ajde da pitam njega:
Ja: great. But i want only files.zip to be attached to the eml message, not input.txt
On: Sure, you can remove the code that attaches input.txt to the message. Here's the updated code that only attaches files.zip. This code creates the message without attaching any text file, and only attaches files.zip to the message. Make sure to replace 'files.zip' with the filename of the zip file you want to attach.
[I sad tu ide kod.]
E to nije valjalo, jer je sada poruka "prazna".
Ja: you did not understand me. I want the input.txt to form the message, but not be attached to the message. only files.zip should be attached to the message
On: I apologize for the confusion. Here's the updated code that creates the message from input.txt but only attaches files.zip. This code reads the text file input.txt and creates the message from its contents. It then attaches files.zip to the message and writes the message to the output file. Make sure to replace 'input.txt' and 'files.zip' with the filenames of your input text file and zip file, respectively.
Ja: thank you, this was just what I needed. It works perfectly
On: You're welcome! I'm glad it works for you. If you have any more questions or run into any issues in the future, feel free to ask!
Dakle, ovo je revolucija u programiranju. Dobro, za ono što znam kako da napravim, lakše mi je da sam pišem nego da njemu objašnjavam. Ali kad nešto ne znam, ovo je otkrovenje. Najzad evo i koda.
import os
import email.utils
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplicationdef text_to_eml(input_file, zip_file, output_file):
# Read the text file
with open(input_file, 'r', encoding='utf-8') as f:
text = f.read()
# Create the MIME message
message = MIMEMultipart()
message['From'] = email.utils.formataddr(('Sender Name', 'sender@example.com'))
message['To'] = email.utils.formataddr(('Recipient Name', 'recipient@example.com'))
message['Subject'] = 'Text file converted to EML message'
# Add the text file to the message
message.attach(MIMEText(text))
# Add the zip file as an attachment
with open(zip_file, 'rb') as f:
attachment = MIMEApplication(f.read(), _subtype='zip')
attachment.add_header('Content-Disposition', 'attachment', filename=os.path.basename(zip_file))
message.attach(attachment)
# Write the EML message to the output file
with open(output_file, 'wb') as f:
f.write(message.as_bytes())
# Example usage
text_to_eml('input.txt', 'files.zip', 'output.eml')
Koji je MORON smislio da u ovom
Python-u postoji
znak za početak bloka koda
iza IF / petlje (dvotačka),
a nema znak za kraj bloka koda,
nego gleda kako si uravnao linije? Nikad ništa gluplje nisam video u
istoriji programiranja. Mislim, možda je jedino gluplje kako C tretira
stringove. | |
I kako dođoše do toga da se ne
deklarišu promenljive? Pa i bejzik je tako počeo, pa su posle ipak dodali
kad su shvatili koliko to smanjuje broj bagova i problema kasnije... | |
Zašto
nema normalnu FOR - NEXT petlju, nego ove gluposti sa range? | |
I zašto je sve malim slovima, a
imena True i False moraju da počnu velikim? Smislio sam da na početku
programa napravim dve promenljive
true=True
i
false=False
pa onda mogu da kucam normalno malim slovima. | |
I kakva je logika da od prvog do trećeg slova u stringu kucam ime[0:3]? Pa ili [1:3], ili [0:2], otkud [0:3]?? |
Program radi za prastare PAD-ove, ali puca kod novih. Gledao, gledao... i vidim da je pre par meseci, cca 1. februara, desni broj u ID-u poruke:
==============================
Vaša poruka za
funny@pcpress.info,
+30123411.EML 17284k
Tema: TikTok cirkus
(50332.10013) Pet 24/03/2023 05:33,
769 chr (Pet 24/03/2023 05:34)
---------------------------------------------------------------------
pretrčao 10000. Dakle, na SezamuPro je razmenjeno preko milijardu poruka od 1995. Šteta što niko nije obeležio jubilej :)
Ko li je poslao milijarditu poruku... (odbijam da verujem da je bila neki spam :))
Glupi Python ne ume tek tako da učita tekst fajl. Ne, nego mora da pametuje. Ima neki encoding, i kod rasporeda Računari po svojoj pameti pomeri slova đ, Ć, Ž. Mislio sam da fajl učitavam kao binarni pa da se mučim sa konverzijom, ali može i jednostavnije - uz malu pomoć debagera, pročitao sam u koje kodove šalje ta tri slova, pa dodao te kodove u konverzioni string.
I sad možete da kažete "ko vam je kriv,
zašto ste koristili nestandardni raspored?". Samo zato što tada još nije bilo
standardnog, raspored Računari je stariji i od Python-a i od kodne strane 1250 i
od Unicode-a...
Verzija je, reklo bi se, operativna. Kako se koristi? Pa ne može biti jednostavnije: na početku programa zadate imena foldera, gde je šta, i onda otkucate python sezampadparse. Posle u LOG-u gledajte šta (ni)je uspelo.
Do sada sam kucao programe u UltraEdit-u pa kompajlirao sa python ime.py. Ali ne mogu zauvek tako, treba mi dibager. Probao u Visual Studio Code, ali nešto me zeza... Pa prebacio u Visual Studio Pro. Kad ga već plaćam da koristim, a i navikao sam na njegov dibager.
U principu radi, radi i dibager, ali editor baš i nije zgodan za Python. Kažu da treba naprosto preći u PyCharm. Možda za sledeći projekat.
Ona priča o milijarditoj poruci od 21/04/2023 ima i svoju tamniju stranu. Vodila se sada mala diskusija o tome u Sezam konferenciji na Sezamu (da, i dalje je aktivna, samo što ima "malo" manje poruka i korisnika nego u srećna vremena) i ispostavlja se da kada otkucaš, recimo u slučaju ove konkretne poruke,
mail reply 50332.10013
Sezam kaže "Nedostaje broj poruke." Očito nije bio spreman na više od milijadu poruka, barem što se konzolnog režima tiče.
I dalje može da se kaže mail reply 50332 i to će raditi, ali ne možeš da odgovoriš na poruku od ranije, koja je recimo 20923.10012, ne možeš ni da je čitaš komandom itd. Sezam pamti poruke 40 dana (koliko da im se da parastos :)) i za to vreme kroz sistem po sadašnjem stanju stvari prođe cca 3.5 miliona poruka, znači trenutno su raspoložive poruke od x.10011 do x.10047 i direktnim mail read/download komandama možeš da pristupiš samo do zadnjih 100,000. Naravno i dalje mogu da se pokupe sa mail read /a, mail download /a itd.
Vrlo zanimljivo iskustvo kako softver "zabajaćuje" kad ga ne održavaš. Prosto stoji, ništa se ne menja, i odjednom jedna po jedna funkcionalnost biva oštećena... samim protokom vremena.
Sve skoro pa da radi. Samo je teško debagovati... imam reda 47000 PADxxxxx.ZIP fajlova i onda jedino mogu da pustim neku manju količinu PAD-ova da se konvertuje, pa da gledam još 100x veću gomilu nastalih .EML-ova, klikćem neke od njih po random principu i tragam za greškama.
Evo recimo šta danas otkrih: kad Sezam pakuje u svoju poruku neki e-mail stigao sa Net-a, desi se da se u zaglavlju nađe nešto kao:
Received: from Gilead.org.il
(localhost [127.0.0.1])
by leeor.math.technion.ac.il (8.12.11/8.12.11) with SMTP id m0958Qe4010231;
i kad je ovaj drugi red dugačak tačno 79 karaktera (plus tu dođe CR/LF), onda u zaglavlju Sezamove poruke piše:
Received: from Gilead.org.il
(localhost [127.0.0.1])
by leeor.math.technion.ac.il (8.12.11/8.12.11) with SMTP id m0958Qe4010231;
Wed, 9 Jan 2008 07:08:26 +0200 (IST)
Dakle pojavi se prazan red u okviru zaglavlja, a pošto se zaglavlje završava praznim redom, onda Outlook kad otvaram taj EML fajl ne dobije informaciju od koga je poruka, za koga je itd., ali zato počne sa X redova "đubreta" koje je činilo zaglavlje.
Zanimljivo je da Sezamov POP klijent nije pravio taj prazan red, jer se poruka normalno ispisivala, ali izgleda da greši telnet klijent koji je generisao taj TEXTPAD.
Tako da program koji parsira mora da ima neku semi-inteligenciju da proceni gde se stvarno završava zaglavlje, što i nije baš trivijalno. Moraće verzija 1.3.
Ispravljen je problem sa praznim redom u zaglavlju poruke. Probao sam na priličnom broju PAD-ova i deluje da radi. Sutra ću pustiti čitavu onu silasiju od 40 GB, pa šta bude.
Svašta se zanimljivo dešavalo kad sam suočio program sa realnošću... kad od nečega što radi lepo na test primerima dođete do obrade stvarnih podataka (PAD-ova) sakupljanih tokom tri decenije, čuvanih po raznim diskovima i DVD-ovima... Ovde pominjem samo par karakterističnih primera koje sam zapamtio, bilo je i drugih nevolja, šteta što nisam vodio dnevnik :)
Oštećene arhive Neki PAD-ovi neće da se raspakuju, prijavljuju grešku. Teško je razumeti u čemu je problem. To je nekad prenošeno modemom, možda je dolazilo do grešaka u komunikaciji (zmodem protokol bi trebalo da popravlja takve greške, ali ko će ga znati). Ili je možda sam fajl oštećen na hard-disku ili nekom od CD-ova na kojima je čuvan. Nije takvih grešaka bilo mnogo, tako da sam problematične arhive pregledao ručno. Negde je to bio potpuno neupotrebljiv binarni sadržaj, pa sam obrisao fajlove, a drugde se sadržaj mogao delimično opraviti nekim od alata za rad sa arhivama, pa bi eventualno stradala samo jedna datoteka čija je kontrolna suma (checksum) loša.
TEXTPAD koji nestaje Ovo je bilo najzabavnije. Dešavalo se da program prijavi da u nekoj arhivi nema fajla TEXTPAD, što ne bi bilo neobično jer je povremeno bilo PAD-ova sa nekim drugim sadržajem, ali sam taj slučaj predvideo, pa po raspakivanju arhive proverim da li je nastao fajl TEXTPAD pre nego što počnem da ga obrađujem. Kao da je fajl postojao kada arhivu raspakujem, ali ga nema kada ga treba obrađivati. Dibager isprva nije pomagao. Zaista fajl postoji, a onda nestane. Najzad sam shvatio - obriše ga antivirus softver koji je aktivan na mom računaru, NOD32. A zašto bi ga obrisao? Pa, zato što u tekstu postoji neki kompjuterski virus. Otkud virus u tekst fajlu? Na Sezamu se pričalo o virusima (pozdrav za kolegu Kriss-a :), slati su tekstovi za časopis PC o virusima, pa je tu bilo i nekih primera... Ili su stvarno virusi stizali u elektronskoj pošti. Imalo je smisla obrisati poruke sa virusima iz TEXTPAD-a a sačuvati samo one "zdrave", ali to i nije tako jednostavno, jer je NOD32 brz i beskompromisan, a nekako mi se ne sviđa pomisao da ga isključim, a na disku stoje zaraženi fajlovi. Najzad sam te arhive prenosio u Windows Sandbox, tamo ih editovao pa zdrav deo vraćao na glavni računar. Ovo je odnelo mnogo sati rada.
Naša slova Bilo je još problema sa našim slovima u Subject-ima poruka i drugde... Da sada ovo radim ponovo, učitavao bih fajl kao binarni pa ga onda procesirao kako mi je zgodno, ne razmišljajući o Python-ovoj Unicode "pameti".
I sad možete da kažete "ko vam je kriv, zašto ste koristili nestandardni raspored?". Samo zato što tada još nije bilo standardnog - raspored Računari je stariji i od Python-a i od kodne strane 1250 pa i od samog Unicode-a.
Vreme izvršavanja Python nije brz jezik, to je sigurno. Ali najzad, radim ovo jednokratno... Sad bi lepo bilo da kažem da sam ga pustio da glođe i otišao da gledam neki film, ali nije moglo tako. Povremeno su nailazile greške. Tako da sam morao da sedim za računarom i za to vreme na tabletu gledam neke tiktok-e i gluposti. Multitasking - dva računara :)) Nisam baš merio, ali potrajala je obrada negde dva sata efektivnog procesiranja PAD-ova i puno sati prekida zbog pokušaja da shvatim u čemu je problem i onda ispravljanja grešaka.
Neprijatno sam iznenađen što vidim da Windows i dalje nije spreman za rad za puno fajlova u jednom folderu. Kada smo 1996. godine Frle, Paja i ja pravili CD uz knjigu Internet, imali smo oko 50,000 fajlova (puno malih sličica kada smo krolovali tadašnji Web) i bila je veeeeelika muka to spakovati na CD. Sada imam u jednom folderu oko 520,000 .EML fajlova nastalih iz sačuvanih TEXTPAD-ova, i ispada da je veeeeeelika muka sa tim operisati. Windows Explorer se izgubi. Total Commander u suštini radi, ali svaka operacija se čeka po minut i više, i treba da budeš jako strpljiv da slučajno ne pritisneš neki taster koji će onda biti interpretiran kako ne treba. Jeste 500,000 fajlova dosta, ali zaboga, prošlo je od tog Internet CD-a skoro 30 godina, šta je sa onim Murovim zakonom... Ipak mi pola miliona ne deluje kao toliko veliki broj, obzirom na to da računar ima 128 GB memorije, NVMe i brz procesor.
Sa druge strane, Novel Netware se još 199x snalazio i sa kompletnim fajlovima uz Sezamovu poštu, kojih je mislim bilo više od ovoga što ja radim. Takođe, kažu kolege da se Linux znatno bolje snalazi sa pola miliona fajlova u folderu.
Huge respect za MailStore. On može da podnese fajl sa 600,000 poruka. Uvoz traje, radio sam iz par puta, možda ukupno 20 minuta. Možda i nešto više. Sada se kroz tu silasiju poruka relativno lako kreće. Sačeka se da napravi listu, to traje možda 20 sekundi kad startuješ program. Onda kroz listu ideš ko kroz sir :) Radi i pretraživanje, brže no što sam očekivao.
Za kraj, pala mi je na pamet još jedna ideja. Naime, nemam ja pola miliona poruka za 20 godina. Mislim, aman, ko bi mogao da ima pola miliona poruka? Nešto od toga su liste koje čuvam, ali je dobar deo spam. Dakle, imam folder sa 500k+ poruka, kako da obrišem spam? Pitao sam mog novog prijatelja ChatGPT-ja, i on kaže da instaliram SpamAssassin, to je servis koji prepoznaje spam, a onda da napišem Python skript (tj. on mi ga je napisao) koji će koristeći taj servis da profiltrira poruke.
SpamAssasin treba instalirati na Linux-u, gde je džabe. Za Windows ima neka verzija koja se plaća, što mi nije bila namera. Dakle, Linux Subsystem for Windows. Ali đavola, na njega nije instaliran systemd, a SpamAssasin baš traži systemd. Uz malu pomoć kolega, naučio sam da systemd može da se shvati kao services.exe na Windows-u, način da se pokreću servisi. Windows u subsistemu za Linux to po default-u ne uključuje, da bi ubrzao podizanje sistema. Ali se on može uključiti (i treba ga uključiti) na način koji zavisi od izabrane distribucije Linux-a. Recimo, za moj Ununtu treba kreirati ili editovati fajl /etc/wsl.conf i tamo staviti systemd=true u sekciji [boot]. Kad sam to uradio mogao sam da instaliram SpamAssasin, ali je bilo nekih problema sa pozivanjem iz Python-a i onda sam odustao usled nedostatka vremena. Ostaje možda za neku drugu priliku.
Ostaje mi da arhiviram razne faze na 100 GB "kamene" (M-DISC) Blu-ray diskove i napravim par kopija... To su oni diskovi što čuvaju podatke cca 1000 godina.
I to bi otprilike bilo to. Hvala što ste pratili ovaj blog, preuzmite finalnu verziju programa i... vidimo se nekom sledećom prilikom :)