Hurmetta ja lurexia

maaliskuu 8, 2009

Organisoin tässä juuri videoarkistoamme ja harmikseni huomasin, että yhden sarjan hakemistossa olivat kaikki videotiedostot (jaksot) omissa alihakemistoissaan. Tapanani on kuitenkin pitää yhden sarjan jaksot kaikki samassa alihakemistossa. Yksittäisiä hakemistoja oli noin 30, joten manuaalinen työ (siirry hakemistoon -> leikkaa tiedosto -> siirry ylähakemistoon -> liitä tiedosto -> poista alihakemisto) olisi ollut liian vaivalloista. Siksipä päätin hieman muistella komentorivioppeja ja -knoppeja ja äkkiä tekaisin seuraavanlaisen onelinerin, joka hoiti koko homman hetkessä:

olli@olohuone:$ for i in `ls -d */`; do mv $i*.avi ./ && rm $i -r; done

Eli ls -d hakee hakemiston kaikki alihakemistot, joita sitten käydään for-silmukassa läpi. Kunkin alihakemiston kohdalla siirretään kaikki sen sisältämät .avi-päätteiset tiedostot nykyiseen hakemistoon ja lopuksi poistetaan alihakemisto. Lovin’ it!

lokakuu 15, 2008

Töissä päivänä eräänä huomasimme, että vuoden 2007 eduskuntavaaleja varten luomamme Naama-vaalikone kerää edelleen tuhansia kävijöitä kuukausittain, oletettavastikin tulevien kunnallisvaalien hekuman takia. Kunnallisvaaleja varten emme kuitenkaan ruvenneet Naamaa virittämään, sillä siinä olisi ollut valtava työ ja nykyiset projektit vievät kaiken aikamme. Jotenkin suuri kävijämäärä oli kuitenkin hyödynnettävä, joten ryhdyimme tuumasta toimeen ja parin päivän ponnistuksen lopputuloksen näette tässä :)

elokuu 27, 2008

Doctrine

Filed under: Ohjelmointi,Työjuttui — Olli @ 23:26

Oulurastisivustoa uudistaessani päätin ottaa härkää sarvista ja ottaa viimeinkin käyttöön valmiita työkaluja nollasta lähtemisen sijaan. Symfonyyn tutustuessani ihastuin sen käyttämään ORM:n (Propel) helppouteen ja siitä lähtien olen halunnut moista jossain projektissa käyttää. ORM (Object Relational Mapper) tarkoittaa siis relaatiotietokannan käsittelyä normaalien olioiden avulla. Hieman eri frameworkkeja tutkittuani päätin kokeilla Doctrinea, josta olen kuullut hyvää puhuttavan ja varsin hyvältähän tuo ensituntumalta vaikuttaa.

Otetaanpa esimerkkinä tuoreimpien uutisten hakeminen. Vanha koodi meni jotakuinkin seuraavasti:

<?php
$db     = DbConnector::connect();
$news   = array();
$query  = "SELECT u.id, u.otsikko AS title, u.teksti AS text, " .
              "COALESCE(s.lyhenne, 'Webmaster') AS author, " .
              "UNIX_TIMESTAMP(u.aika) AS date " .
          "FROM news u " .
          "LEFT JOIN club s ON u.seura_id = s.id " .
          "ORDER BY u.aika DESC";

$db->setLimit($limit, $offset);
$db->query($query);

while ($row = $db->fetchAssoc())
{
  $newsItem = new NewsItem();
  $newsItem->setId($row['id']);
  $newsItem->setTitle($row['title']);
  $newsItem->setText($row['text']);
  $newsItem->setDate($row['date']);
  $newsItem->setAuthor($row['author']);

  $news[] = $newsItem;
}

return $news;
?>

Ok, myönnetään, eipä tuo muutenkaan mitenkään vängästi ole toteutettu aikoinaan. Mutta sitten sama Doctrinea käyttäen (nimesin samalla taulujen kentät uudelleen):

<?php
$news = Doctrine_Query::create()
          ->from("News n")
          ->leftJoin("n.Club c")
          ->limit($limit)
          ->offset($offset)
          ->orderBy("n.news_date DESC")
          ->execute();

return $news;
?>

Hieman hommaa järkeistin myös siirtämällä ajan muotoilun ja puuttuvan nimen muotoilun näkymän puolelle, jolloin ollaan jälleen lähempänä MVC-mallia. Mutta nyt siis tuota palautettua Doctrine_Collection-tyyppistä oliota voi iteroida normaalisti taulukon tapaan, sillä se muistaakseni toteuttaa ArrayIterator-rajapinnan. Yksittäisten olioiden kenttiin pääsee käsiin seuraavilla tavoilla:

<?php
// tulostaa esim. "Olli"
echo $item->author;
echo $item->get('author');
echo $item['author'];
?>

Ja mikäli viiteavaimet ovat kunnossa, myös vierastaulujen kenttien käsittely onnistuu helposti:

<?php
echo $item->Club->name; // tulostaa esim. "Oulun Tarmo"
?>

Näppärää, eikö? Kovin suuria kommentteja en Doctrinesta vielä näin parin tunnin testailun perusteella osaa esittää, mutta vaikuttaa ihan hyvältä. Pienenä haittapuolena tuo käyttämäni 0.11-versio ei osaa lisätä relaatioita luomilleen malleille, kun mallit luodaan käyttämällä jo olemassa olevaa tietokantaa. Esimerkiksi YML-tiedostoista homma onnistuu ongelmitta, mutta nyt eri olioiden (tai taulujen) suhteet täytyy lisätä luokkiin manuaalisesti.

Jatkanpa tutustumista.

huhtikuu 25, 2008

Kiroilua Apachen kanssa

Filed under: Ohjelmointi — Olli @ 19:33

Olen viime päivät työstänyt pienimuotoista päivitystä oulurastisivustolle ja pari päivää tehtyäni muutokset suoraan tuotantoversioon, päätin viimein siirtää koko roskan kehitysympäristöön omalle koneelle. Pari päivää sitten koneelle pätkähti myös tuore versio Ubuntusta, 8.04 LTS (Hardy Heron) ja sen seurauksena Apache sanoi jostain syystä sopimuksensa irti. Aikani sen kanssa tapeltuani päätin asentaa koko roskan uudelleen, sillä apt-get tekee siitä jopa hauskaa.

Tein oulurastiprojektille oman VirtualHostin kopioimalla default-tiedoston hakemistosta /etc/apache2/sites-available/ samaan hakemistoon uudella nimellä ja säädin sen asetukset kuntoon ja enabloin koko roskan. Sivusto käyttää hyväkseen Apachen mod_rewrite-mokkulaa siistien osoitteiden vuoksi ja jostain syystä pyynnöt tyyliin http://oulurastit/kalenteri/ ohjautuivat tiedostoon http://oulurastit/kalenteri.php ja samoin kävi muidenkin sivujen kohdalla. Pari tuntia asetustiedostoja ja Apachen dokumentaatiota tutkittuani bongasin kopioidusta VirtualHostin asetustiedostosta päällä olevan MultiViews-option, joka teki tuon edellämainitun tempun. Eli mikäli tuo asetus on päällä, Apache koittaa löytää suunnilleen sinne päin olevan tiedoston ja ohjaa pyynnön siihen. Siispä miinus MultiViews-direktiivin eteen ja homma jatkuu.

helmikuu 13, 2008

Otos-kävijäseurantajärjestelmän hallintakäyttöliittymän luokkien koodia refaktoroidessani vastaan tuli seuravanlainen koodirimpsu aiheuttaen ilmeisesti väsymyksestä johtuen pienen sisäisen naurunremakan:

coords.each(function (point)
{
  point.x = factor * point.x > maxX ? maxX : factor * point.x;
  point.y = factor * point.y > maxY ? maxY : factor * point.y;
});

”Max Factor – The make-up of make-up artists”

helmikuu 3, 2008

Uutta leiskaa pukkaa vanhan WordPressin syövereistä löydetyn väliaikaisen tilalle. Juosten kustu on puoliksi tehty, eikä parin tunnin näppäilyn jälkeen mitään nättiä voi odottaakaan, joten saa nyt kelvata ainakin tovin. Pientä graafista kikkailua tämä vielä kaipailisi ja tietysti jonninverran fantsuja JavaScript-kökkäreitä Prototypellä ja Scriptaculouksella höystettynä, mutta ne saa nyt vähäksi aikaa jäädä muhimaan.

Pinja on rockVaikka otsikko toista sanookin, valkoinen taitaa olla nykyään taas uusi valkoinen ja tuo tummanpuhuvan taustan aikakausi alkaa jo pikkuhiljaa olla ohitse. Tai oikeastaan värikäs on uusi valkoinen ja valkoinen lienee uusi musta. Niin se homma vain etenee. J on tämän viikonlopun taas reissussa, joten Nellan ja Pinjan seurassa on mennyt tämä päivä. Pinjalla on kirjaimellisesti tapana kerätä energiaa uudella parketilla juosten, joten sohvalla pötkötellään yleensä karvat pystyssä :)

Ja loppuun vielä kunnianosoitus WordPressin automaattitallennukselle. Compiz-fusion laittoi äsken kesken kirjoituksen koko X:n niin juntturaan, että ainoastaan reset-nappulan painaminen sai koneen taas pystyyn. WordPress oli kuitenkin tallentanut kirjoitetun tekstin hieman aikaisemmin, joten eipä tarvinnut kirjoittaa koko rimpsua uudelleen. Kyllä tekniikka on hienoa.

Powered by WordPress