Saaga skandien korjauksesta

Kas noin, Pinserin ääkkösongelma on nyt korjattu, tavallaan. Korjaukseen liittyi jonkin verran kiroilua, vähän häkkeröintiä, mietiskelyä tietokoneiden eroista ja elämänfilosofinen opetus. 

Alla seuraa pitkä ja hyvin nörtähtävä tarina. Toivottavasti viihdyt sen parissa.

Alkuperäinen ongelma oli siis se, että Pinserin kaikessa sisällössä olevat ääkköset noudattavat vanhaa 8-bittistä iso-latin-standardia. Jossain vaiheessa ympäröivä maailma oli siirtynyt uuteen utf-8-merkistöön, mutta en ollut koskaan jaksanut päivittää Pinserin tietokantaa koska tiesin sen tulevan olemaan hankalaa. Vuosi vuodelta kirjoituksia ja kommentteja kertyi enemmän eikä merkistömuunnos tuntunut ajankohtaiselta. Nyt kuitenkin jälleen yksi ohjelmisto (tällä kertaa Posterous) suostui käyttämään vain uudenaikaisia ääkkösiä ja siten sotki Pinserin tekstejä.

Oli tullut aika uudistaa Pinserin kirjoitukset, kommentit ja sivupohjat uuden vuosituhannen merkistöstandardiin. Tervetuloa, UTF-8.

Aiemmin ehdin kysyä lukijoilta neuvoja mahdollisimman vaivattomaan muutokseen ja sain joukon hyviä vastauksia. Mikään valmis ratkaisu ei kuitenkaan olisi tullut toimimaan koska a) Pinserin tietokanta sisältää muutakin kuin Pinserin tietoa eikä sitä parane muokata tässä vaiheessa ja b) suurin osa ohjeista oli tehty pari vuotta vanhoille WordPressin versioille ja jossain kaukaisen foorumin pimeimmässä nurkassa todettiin lakonisesti että jos ohjeita käyttää 2009-malliseen WordPressiin, tietokanta todennäköisesti tuhoutuu. 

Tiesin tämän todeksi, sillä tuhosin Pinserin tietokannan pari kuukautta sitten eräällä tällaisella palikalla. Kaikista kommenteista katosivat sekä ääkköset, että kaikki ääkkösten jälkeen tulevat tekstit. Jouduin pyytämään internet-operaattoriltani koko tietokannan hätäpalautusta (koska en tietenkään ollut ottanut varmuuskopioita).

Merkistömuunnos täytyi tehdä siis käsin. Kaikki automaattiset operaatiot olivat tuomittuja päättymään katastrofiin tavalla tai toisella. Käärin hihat, kaivoin WordPressin sivuilta ohjeet ja aloin hommiin.

Verkossa näkee usein lyhyitä tarinoita joissa tietokoneiden käyttöjärjestelmiä käytetään arkipäivän ilmiöiden vertauskuvina, hieman liioitellen ja stereotyyppisiä asioita korostaen. Esimerkiksi näin: 

"Windowsin tapa hoitaa blogien ääkkösongelma olisi tukea kaikkia ääkkösformaatteja maailman loppuun asti. Kymmenet ja taas kymmenet ohjauspaneelit takaavat sen, että oikea asetus löytyy lopulta. Sitten blogi hidastuisi ja alkaisi kaatua 10 kertaa päivässä.

Linuxin tapa hoitaa blogin ääkkösongelmat on todeta, että kaikki asiat ovat korjattavissa muutamalla tarkasti valitulla SQL-lauseella, konvertointiskriptillä ja lähdekoodin puukottamisella. Referenssitietokannasta löytyy kyllä kaikki tarvittava tieto. Jos joku ohje ei toimi, se on vähän vanha ja sinun täytyy itse viritellä sitä.

Macin tapa hoitaa ääkkösongelma olisi se, että jonain kauniina päivänä kaikki ääkköset muuttuvat uudenlaisiksi. Macin käyttäjä ei kuitenkaan huomaa sitä, vaan hän jatkaa höyryävän latten siemailua kuin mitään ei olisi tapahtunut. Jos katsoo oikein läheltä, Ä-kirjaimen pilkut kimaltelevat ehkä hieman aiempaa kirkkaammin."

Pinseri sijaitsee Linux-palvelimella. Tiedossa oli siis konvertointia ja puukottamista. Ohjeessa neuvottiin konvertoimaan ensin tietokannan taulujen muutettavat kentät yhdestä tietotyypistä toiseen. Kun pääsin kohtaan "toista tätä kunnes kaikki on muutettu", tajusin äkkiä että muutettavia kenttiä ei ole yksi tai kaksi, vaan kymmeniä. Kaikkia ei tarvinnut tosin muuttaa, vaan kombinaatioiden joukossa oli viitisen oleellista muutettavaa. Ohjeessa ei tietenkään kerrottu mitä nämä olivat. No, otin selvää.

Sitten tuli taas mutkia matkaan. Tietokanta ilmoitti noin puolet muokkauksista tehtyäni että korjausoperaatiota ei voi suorittaa fulltext-indeksoiduille kentille. Koska minua ei kiinnostanut alkaa purkaa kenttien hakuindeksejä, päätin lopettaa ohjeen käyttämisen siihen paikkaan ja kokeilla jotain muuta. 

Jäljellä oli vielä viimeinen oljenkorsi: ohjesivun lopussa kerrottiin että "voit aina yrittää häkkeröidä erästä vähän sinnepäin olevaa pluginia". Rivien välissä kerrottiin lisäksi: "älä kysy meiltä, miten se tapahtuu".

No, olenhan pitkän linjan häkkeri, joten hain pluginin ja katsoin sen sisään. Se tosiaankin oli häkkeröitävissä. Aloin miettiä miten pluginia voisi käyttää hyväkseen Pinserin vanhojen kirjoitusten, kommenttien ja sivupohjien korjaamisessa.

Ja sitten yhtäkkiä koin valaistumisen.

Joskus taannoin jossain haastattelussa minulta kysyttiin, miten kauan aion jaksaa blogata. Vastasin että periaatteenani on harrastaa asioita niin kauan kuin harrastaminen on hauskaa.

Tämä ei ollut enää hauskaa. Minä olen nykyään Mac-käyttäjä. Minua ei kiinnosta tippaakaan konvertoida merkistöjä toisiksi monimutkaisilla tietokantaoperaatioilla. Haluan että blogini toimii ilman jatkuvia ongelmia.

Katsoin uudelleen pluginia ja mietin että voisinko Pinserin muuttamisen sijasta muuttaa ulkopuolista maailmaa. Entäpä jos konvertoin kaikki ulkomaailmasta tulevat ääkköset Pinserin vaatimaan formaattiin? Kävi ilmi, että se ei ollut lainkaan vaikeaa. 

Niinpä Pinseri käyttää siis edelleen iso-latin1 -merkistöä. Jos joku ulkopuolinen taho yrittää syöttää siihen utf-8-merkkejä, häkkeröimäni plugin muuttaa merkit takaisin antiikkiseen formaattiin. Kaikki on taas hyvin.

Me loppukäyttäjät näemme ruudullamme oikeanlaisia ääkkösiä ja voimme siemailla rauhassa lattea.

äöäöäöäöäöäå.

Posted via email from Samin Posterous-sivut

10 thoughts on “Saaga skandien korjauksesta

  1. Ja jos nyt käy niin että jossain RSS-syötteessä tai muualle upotetussa blogisisällössä ääkköset eivät ole kunnossa, palataan asiaan joskus myöhemmin :)

  2. Pari edellistä harjoitusta WordPressin ja latin1-> utf8 konvertoinnin kanssa meni jokseenkin seuraavasti. Helppo tapahan tämä ei ole, mutta toimivaksi todettu.
    Ongelmatapauksia ovat olleet sellaiset asennukset, jossa kantatyypit ovat mukamas latin1, mutta sisältö onkin utf8 dataa.

    1. phpmyadminilla wp_* tauluista “structure+data+drop tables” -exportti latin1 muodossa omalle koneelle.
    2. Omalla koneella Hyvällä Tekstieditorilla parit search&replacet kannan tietotyyppien muuttamiseksi (ne create table-kohdat) ja merkistökonvertointi (eli pelkkä tiedoston tallennus utf8 muodossa).
    3. Valmis tiedosto takaisin phpmyadminin importilla utf8-muodossa.
    4. ???
    5. Profit

  3. Toni: …ja jos phpmyadminia ei ole..? (itse asiassa en ole koskaan edes tutkinut onko Nebulassa sellaista)

  4. Enpä edes tiedä mikä on cPanel (selvennykseksi todettakoon että olen vanhan polven komentorivimiehiä).

  5. Ellei Tonin mainitsemaa phpMyAdminia ole muuten valmiiksi saatavilla (hieman epäilen ettei tosiaan ole Nebulan tapauksessa), sen voi toki varsin helposti itsekin asentaa omaan kotisivutilaansa (kunhan poistaa sen sitten käytön jälkeen ellei ole aikomusta suojata/ylläpitää sitä jatkossa kunnolla).

    Toinen vaihtoehto on ehta mysqldump komentoriviltä ja sitten Tonin muiden neuvojen mukaan, tosin vain tiettyjen taulujen dumppaamiseen pitää hieman jaksaa nähdä vaivaa – koko tietokanta olisi paljon helpompi käsitellä.

    Vaikka tuo nyt oikeasti tuntuukin ikävältä urakalta, olen itse ehdottomasti sitä mieltä että nykynetissä elämä on paljon helpompaa kun tuon merkistön vain jaksaa kerran laittaa kuntoon.

    P.S. Nyt tuon korjauksenkin jälkeen satunnainen osa tekstikappaleista (mm. kappaleet 1, 5, 8 ja 13) päättyy omassa RSS-lukijassani (NetNewsWire 3.2b28) merkkiin ‘Â’, eli jotain häikkää tuolla edelleen on.

  6. P.S. Nebulassa kello näyttää olevan ihan poskellaan, viestini ajaksi tuli 0:10 kun oman koneen kello näyttää 1:55.

  7. Tuohon Â-kirjaimeen kiinnitin itsekin huomiota. Tosin se on helppo filtteröidä pois, kunhan selvitän vain mikä on sen merkkikoodi UTF-8:ssa. Sitten kun jaksan ;)

    Mysqldumpin editointia harkitsin itsekin, mutta sekin meni sinne epähauskan puolelle. Sorry :)

Leave a Reply

Your email address will not be published. Required fields are marked *