Galaksija Nova 3-2023

Poštanski vremeplov

Kućni računari i nisu tako stari, postali su popularni tek sredinom osamdesetih. Nije od tada prošlo ni četrdeset godina, tek jedan trenutak u ljudskoj istoriji. A opet, već se javljaju ozbiljni problemi kad treba iskoristiti nešto što ste nekad (u)radili. Recimo, pročitati staru elektronsku poštu...

Dejan Ristanović

Elektronsku poštu sam prvi put upoznao 1983. godine, na Elektrotehničkom fakultetu gde smo dobili priliku da koristimo VAX VMS računare. E-mail je tada bio tek kuriozitet, pošto smo mogli da šaljemo poruke samo drugim korisnicima istog računara, dakle kolegama i eventualno profesorima. Nešto kasnije fakultet se povezao na JUPAK mrežu, pa su poruke mogle da se šalju i na nekoliko sistema u Sloveniji, a onda je nakratko proradila i veza sa EARN-om odnosno BITNET-om, pa su poruke mogle da se šalju i širom sveta. Tu je već postalo jasno da je elektronska pošta otkriće veka, ali je zadovoljstvo trajalo kratko, pošto su nas zbog sankcija naprosto "odsekli". Poruke iz tog vremena, zajedno sa svim ostalim stvarima koje sam radio na VAX-u, su iščezle zajedno sa mojim studentskim nalogom, kada sam završio fakultet. Doduše, prepisao sam kompletan sadržaj na 8-inčnu disketu koju pobožno čuvam, ali nemam na čemu da je učitam i prebacim sadržaj na PC. Ako neko ima ideju kako to uraditi...

Pošta iz BBS dana

Elektronsku poštu sam počeo ozbiljno da koristim 1989. godine, kada smo osnovali Sezam BBS. Inicijalno je to bila pošta u okviru samog Sezama, ali su praktično svi ljudi koje znam bili tu, pa je čitav posao tekao kroz elektronsku poštu. Za poruke koje sam razmenjivao sa strancima koristio sam nalog na američkom sistemu BIX, BBS-u časopisa BYTE. Vremenom se Sezam povezao sa YU Internetom, a onda je uspostavljana i povremena veza sa "velikim Internetom", od koga smo tada bili odsečeni zbog sankcija. Važnije poruke iz tog vremena sačuvao sam u tekst fajlovima, koje bi trebalo malo "pročešljati" i transformisati, kako bi se ta "arheologija" modernizovala. Biće i to valjda jednog dana.

Kada smo 1995. godine osnovali SezamPro, povezivanje sa Internetom je bila glavna "misija i vizija" (mada tada nismo znali da koristimo tu frazu), a elektronska pošta je postala osnova poslovanja. Sve što se radilo je, ovako ili onako, prolazilo kroz elektronsku poštu. Sezam je imao svoj sistem za rad sa poštom – konzolno bi se logovali, čitali poruke on-line ili ih snimali u TEXTPAD datoteke, pa ih prenosili na kućni računar i tu skladištili u off-line reader-u koji je specijalno napisan za Sezam i zvao se SorPro.

U početku je to bilo veoma zgodno, ali su vremenom poruke postajale sve duže, u njima su se nalazili dokumenti, multimedija i sto čuda sa kojima se SorPro baš i nije snalazio. Zato sam 2000. godine prešao na Microsoft Outlook koji i danas koristim, ali sam poruke još neko vreme arhivirao kroz Sezamove mehanizme, na koje sam navikao. Čak i kada sam sa @sezampro.rs adrese prešao na adresu na svom domenu @ristanovic.com, mnogi su mi i dalje pisali na Sezam adresu, pa su te poruke ostale "zarobljene" u starim formatima.

Reklo bi se da poruke od pre 20+ godina više nikome nisu ni potrebne, ali nije baš tako. Kada su mi nekadašnji partneri predložili novi konsultantski angažman, trebalo je da pronađem ponude koje sam slao 1997. godine, što me je baš namučilo. I zato sam odlučio da, kad se nađe vremena, realizujem hobi-projekat kroz koji bih "oživeo" stare poruke sa SezamaPro i preveo ih u neki format pogodan za pretraživanje korišćenjem modernih alata.

Hobi-projekat počinje

Za početak se trebalo prisetiti kako su stvari funkcionisale. 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 je komandom pad download fajl TEXTPAD 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. Šta će se desiti kada dođem do PAD99999.ZIP? Nemam pojma, pitajte me za dvadesetak godina.

Poruke iz PAD-ova sam unosio u off-line reader SorPro, ali sam čuvao i arhive PADxxxxx.ZIP. Trenutno imam oko 49000 PAD fajlova, koji zauzimaju oko 47 GB prostora i pokrivaju period od 27.03.1997. 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. 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 aplikacija, 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 da se svaka snimi kao poseban EML fajl. Zvuči jednostavno.

Šta i kako transformisati?

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.

Tip 1: Poruka nastala na Sezamu, upućena korisniku Sezama
==============================
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
Tip 2: Poruka pristigla sa Interneta u ugrađena u telo standardne Sezam poruke
==============================
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   --
Tip 3: Poruka pristigla sa Interneta koja je bila predugačka da bi je sistem ugradio u telo standardne Sezam poruke
==============================
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

 

Postoje tri tipa poruka koje ilustruje slika 1. Prvi tip se odnosi na poruku koja je poslata sa Sezama korisniku na Sezam, iz konzolnog moda. 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. Ova poruka ima zaglavlje Internet poruke a naša slova su kodirana na način opisan u Internet zaglavlju, često ISO-8859-1.

Treći tip poruke je takođe stigao sa Interneta ali njegova dužina prevazilazi maksimalnu dužinu Sezam poruke, koja je oko 32 KB teksta. Ovde je u osnovno (sistemsko) telo poruke stavljeno 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.

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 su komplikovane, jer treba od njih generisati EML fajl, i još u njega enkodirati datoteku koja je priključena uz poruku, ako ta datoteka postoji.

Dekodiranje zaglavlja

Prva linija Sezamovog zaglavlja se sastoji od znakova =. Najpre sam smatrao da ih ima 30, ali ne... Privatne poruke zaista počinju sa 30 znakova jednakosti, 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 uz poruku i kada ga nema. U drugoj liniji je tema poruke (Subject), ako je zadata. Kada nema teme, neme ni ove linije. Finalna linija (treća ili, ako nema teme, druga) počinje brojem poruke u zagradi. I tu počinju finese. Broj je generalno 32-bitni, dakle sistem može da primi 4.2 milijarde poruka, 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 broja 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 nadovezati 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.

Izbor programskog jezika

U raznim vremenima sam programirao na raznim jezicima, a ozbiljnije stvari sam radio koristeći Basic, Pascal, Clipper, C++, Visual Basic i VBA. Tu i tamo poneki asembler. Da je ovo posao koji treba brzo završiti, koristio bih Visual Basic ili Visual C++. Ali ovo je hobi projekat, pa sam odlučio da ga iskoristim da naučim novi programski jezik, Python. Python je osmislio Guido van Rossum još krajem osamdesetih. Ime ne potiče od zmije, nego od serije Monty Python's Flying Circus. Programski jezik je poslednjih godina postao izuzetno popularan, kao neka vrsta "novog bejzika", prilagođenog komunikaciji sa Internetom.

Kako (na)učiti novi programski jezik? Nekad se učilo iz knjige. Prelistao sam nekoliko, 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 spore... 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 posle da polažem ispit. Savršeno. Što bi rekao Steve Wozniak, tamo gde rade najpametniji ljudi na svetu, vrata su otključana.

I tako sam odmah počeo da pišem program, pa kad nešto zapne guglao rešenje. Ključni adut Python-a je što postoji biblioteka za svaku stvar koja može da zatreba. Samo slažete kockice. Dobro, priznajem da sam nekad 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.

Uz malo (veštačke) pameti

Trebalo je još obaviti najteži deo posla, generisanje .EML fajlova iz Sezamovih poruka (tip 1). Nije išlo. Pade mi na pamet da, umesto da se sam mučim, pitam nekoga ko zna sve – veštačku inteligenciju. Recimo ChatGPT. I on mi je zaista napravio potreban modul. Savršen. Bravo za ChatGPT!

Evo kako je to tekao razgovor sa veštačkom inteligencijom. Iako ChatGPT može da komunicira sa korisnikom na srpskom, komunikacija na engleskom daje bolje rezultate pa smo pričali na tom jeziku, a ovde sam razgovor preveo na srpski, naravno pomoću Google Translate servisa – ko još prevodi na stari način.

Ja: Napiši Python program koji transformiše tekstualnu datoteku u EML poruku

On: Evo Python programa koji čita tekstualnu datoteku i konvertuje je u EML poruku. Ovaj program koristi modul email u Python-u da kreira EML poruku. Program čita sadržaj ulazne tekstualne datoteke, kreira MIME poruku sa tekstom kao telom i tekstualnom datotekom kao prilogom i upisuje poruku u izlaznu datoteku. Imajte u vidu da se funkcija email.utils.formataddr koristi za formatiranje adresa pošiljaoca i primaoca na način koji je usklađen sa RFC standardom. Argument _subtipe u konstruktoru MIMEApplication se koristi za određivanje tipa datoteke priloga na osnovu ekstenzije datoteke.

[I sad tu ide kod]

Probam ga, program radi, ali puca kad naiđe neko naše slovo. I sad da li da sam nešto krpim ili... ma bolje da pričam sa ChatGPT-om!

Ja: Ovo radi sa ASCII porukama. Ali kada imam neki ne-ASCII karakter, on vraća poruku 'charmap' codec can't decode byte 0x90 in position 106: character maps to <>

On: Da biste rukovali znakovima koji nisu ASCII, možete izabrati enkodiranje kada otvarate datoteku navodeći parametar enkodiranja. Na primer, ako je ulazna tekstualna datoteka enkodirana u UTF-8, možete je otvoriti ovako... [pa sad tu neki primer]. Kada upisujete u izlaznu datoteku, možete je otvoriti u binarnom režimu i navesti enkodiranje u funkciji open. Na primer, da biste enkodirali izlaz kao UTF-8, možete otvoriti ovu datoteku [pa opet primer] Evo ažuriranog koda.

[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: Radi odlično. Molim te proširi program tako da omogući da u izlaznu datoteku upišem i neku ZIP arhivu.

On: Naravno! Evo ažuriranog koda koji dodaje ZIP datoteku kao prilog poruci. Ovaj kod otvara ZIP datoteku u binarnom režimu i kreira objekat MIMEApplication sa binarnim podacima i ZIP podtipom. Zatim dodaje prilog poruci i upisuje poruku u izlaznu datoteku. Obavezno zamenite 'files.zip' imenom ZIP datoteke koju želite da priključite.

[I sad tu ide kod]

Vidim da on, osim što ugradi ulazni tekst fajl u telo poruke, pridoda ulazni fajl i kao input.txt. To mi je već bilo jasno kako da ispravim, ali kad me je krenulo, da ipak pitam njega:

Ja: Odlično. Ali želim da samo files.zip bude priključen EML poruci, a ne i input.txt.

On: Naravno, možete ukloniti kod koji priključuje fajl input.txt. Evo ažuriranog koda koji prilaže samo file.zip.

[I sad tu ide kod]

To već nije valjalo, jer je sada poruka "prazna".

Ja: Nisi me razumeo. Želim da input.txt čini telo poruke, ali da ne bude priključen uz poruku. Samo files.zip treba priključiti uz poruku.

On: Izvinjavam se zbog zabune. Evo ažuriranog koda koji kreira poruku iz input.txt i priključuje files.zip.

Ja: Hvala, ovo mi je bilo potrebno. Radi savršeno.

On: Nema na čemu! Drago mi je što radi. Ako imate još pitanja ili naiđete na bilo kakve probleme u budućnosti, slobodno pitajte!

Sve u svemu, ovo je revolucija u programiranju. Dobili smo asistenta koji zna sve, koji je pročitao sva uputstva, proučio sve tutorijale i koji nas u nekoliko koraka dovede do cilja. 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. Kod koji je napisala veštačka pamet je na slici 2.

import os
import email.utils
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
def 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')

Program vs. realnost

I tako sam došao do prve verzije programa koja je lepo radila... na test primerima. A onda sam je suočio sa stvarnim padovima i... kuku lele. Možete samo misliti šta se dešava sa podacima (PAD-ovima) skupljanim tokom tri decenije i na kakva se sve čuda naiđe. Pomenuću samo nekoliko karakterističnih primera.

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 ih obrisao, a drugde se 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 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. Ali je fajl postojao kada arhivu raspakujem, ali ga nema kada ga treba obrađivati.

Bila je to zagonetka koja je zahtevala korišćenje "teže artiljerije", odnosno alata zvanog dibager. Do tada sam kucao programe u UltraEdit-u pa ih kompajlirao i izvršavao komandom python ime.py. Onda sam probao da čitav razvoj prebacim u Visual Studio Code, ali nekako nije išlo pa sam prešao u Visual Studio Pro. Kad ga već plaćam da ga koristim, a i navikao sam na njegov dibager. Dibager je radio, ali je editor malo nezgrapan za Python. Kažu da treba naprosto preći u PyCharm.

Dibager isprva nije pomogao. 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, 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. Najzad sam te arhive prenosio u Windows Sandbox (virtuelni Windows-u-Windows-u kome virusi ne mogu ništa, pošto se sve briše nakon zatvaranja programa), tamo ih editovao pa zdrav deo vraćao na glavni računar.

Naša slova Python neće da učita tekst fajl takav kakav je. Mora da pametuje – da "razume" kakav je encoding izabran za slova koja nisu po ASCII-ju. Ako je tekst koji se učitava enkodiran po rasporedu Računari, Python 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ć dibagera, 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 pa i od samog Unicode-a...

Milijarda Kako je testiranje teklo tako je grešaka bilo sve manje, proleti i po 10 hiljada PAD-ova a da u dnevniku aplikacije nema novih poruka. A onda, kada se obrada sasvim približila kraju, svaki TEXTPAD ne valja! Pogledam šta je, i ispostavlja se da su brojevi poruka dobili cifru više, recimo (50332.10013). Očito je SezamPro nedavno, po nekom mom grubom proračunu oko 1. marta 2023. godine, primio milijarditu privatnu poruku. Ko li ju je poslao (odbijam da poverujem da je to bio neki spam)? Ja sam lako prepravio moj parser, ali sam posle primetio da Sezamov konzolni jezik nije spreman za tako velike brojeve poruka, pa tako mail read 50332.10013 daje poruku o grešci. Zanimljiv dokaz da 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.

Na kraju priče

Kroz nekoliko pokušaja, obradio sam svih 50 hiljada PAD-ova i proizveo skoro pola miliona EML fajlova. Python svakako nije brz jezik, tako da je obrada svega toga trajala gotovo 2 sata, ali dobro, to se radi samo jednom. Takođe konstatujem da Windows, čak ni na brzom računaru, nije spreman da ima pola miliona fajlova u jednom folderu. Sve su operacije užasno spore, ali je zapravo potrebna samo jedna operacija: selektovati sve te fajlove i prevući ih u MailStore. Tek taj uvoz potraje, ali najzad dobijem veliku arhivu sa svom svojom starom privatnom poštom, spremnom za sve vrste pretraživanja.

Da li je takva arhiva garancija za budućnost? Svakako da nije, ko zna da li će je čitati računari koje ćemo koristiti za 10 ili 20 godina. Ali sačuvaću je, zajedno sa onim starim PAD-ovima, na "kamenom" Blu-ray disku kapaciteta 100 GB (M DISC), pošto je predviđeni rok trajanja takvih diskova više stotina, možda i 1000 godina. Napraviću nekoliko kopija, naravno.

I tako dođoh do kraja ovog (meni) zanimljivog hobi-projekta. Nešto sam uradio, nešto i naučio, a možda bude još doživljaja kad nađem vremena da pažljivije analiziram nastalu MailStore arhivu. Već na prvi pogled sam primetio da među porukama ima mnogo spam-a, pa pomišljam da na kućni server instaliram Spam Assassin servis i da napišem Python program koji će pobrisati svu tu nepotrebnu poštu, čime će se arhiva verovatno skratiti na četvrtinu sadašnjih dimenzija. A opet, šta ako tom prilikom obriše i nešto što sam želeo da čuvam? Pozivam vas da pratite dalje doživljaje na blogu ovog projekta, dejanristanovic.com/sezampadparse. Odatle možete da preuzmete i tekuću verziju Python programa – slobodna je za kopiranje i upotrebu.