113 dager er 3 måneder og 3 uker

Å jobbe med datoer, det være seg i mattestykker eller programmering, har jeg tidvis funnet vrient. Det er lett å finne ut hvor mange dager det er siden sommerferien var over, eller hvor mange dager det er til jul, men vi mennesker teller ikke tid i ti-tall men i måneder, uker, dager og timer. I denne posten viser jeg hvordan du kan telle ned dagene til jul, på en pen menneskevennlig måte, i PHP.
Koden i denne posten er hentet fra Aidan Lister. Det eneste jeg har gjort er å oversette months til måneder, osv.


 * @version     2.0.0
 * @link        http://aidanlister.com/2004/04/making-time-periods-readable/
 * @param       int     number of seconds elapsed
 * @param       string  which time periods to display
 * @param       bool    whether to show zero time periods
 */
function time_duration($seconds, $use = null, $zeros = false)
{
    // Define time periods
// jeg har skrevet å som å - med riktig bruk av charset er dette muligens unødvendig.
    $periods = array (
        'år'      => 31556926,
        'måneder' => 2629743,
        'uker'          => 604800,
        'dager'         => 86400,
        'timer'         => 3600,
        'minutter'      => 60,
        'sekunder'      => 1
        );
    // Break into periods
    $seconds = (float) $seconds;
    foreach ($periods as $period => $value) {
        if ($use && strpos($use, $period[0]) === false) {
            continue;
        }
        $count = floor($seconds / $value);
        if ($count == 0 && !$zeros) {
            continue;
        }
        $segments[strtolower($period)] = $count;
        $seconds = $seconds % $value;
    }
// Build the string
// dette er endret til å fungere med norske suffix
    foreach ($segments as $key => $value) {
        $segment_name = substr($key, 0, -2);
//        $segment_name = substr($key, 0, -1);
        $segment = $value . ' ' . $segment_name;
        if ($value != 1) {
//            $segment .= 's';
            $segment .= 'er';
        }
        $array[] = $segment;
    }
    $str = implode(', ', $array);
    return $str;
}
?>

Denne funksjonen kan du lime rett inn i php-dokumentet ditt, kanskje helst inn i en klasse av noe slag?

Så når funksjonen kjøres:

Funksjonen tar antall sekunder som parameter, så…
..var det de pokkers sekundene da.

$dag   = 21;     // Dagen vi teller ned til 
$maaned = 12;      // Måned vi teller ned til 
$ar  = 2009;   // Året vi teller ned til 
$tidspunkt  = 23;     // Klokken (hele timer) vi teller ned til 
$sekunder_til_noe_skjer = ((mktime ($tidspunkt,0,0,$maaned,$dag,$ar)-time(void))); // sekunder

Og funksjonen kjøres:


Resultatet er en nedteller som gir et resultat i dette formatet:

3 måneder, 3 uker, 19 timer, 26 minutter, 3 sekunder

Og slikt liker vi.

PS: jeg har også lagt koden på snipplr, og du kan lese Aidans post om koden sin her.

IndentationErrors i django med TextMate

Jeg har begynt å snuse på django, og snubla raskt over «IndentationErrors». Koden jeg jobber med er fra «komme-i-gang-totorialene» på prosjektets websider, og var ofte «feilfri». Med det mener jeg at koden ser helt lik ut som i eksemplene.

Feilmeldingene på testserveren (http://localhost:8000, etter python manage.py runserver) sier:

...
unexpected indent (admin.py, line 16)
Exception Type: IndentationError
Exception Value: unexpected indent (admin.py, line 16)
...

Problemet er at innrykkene (indent, som lages ved å trykke på tab-tasten, ⇥ på mactastaturet, ↹ på standard tastatur) som kommer med ved å kopiere koden fra tutorialen ikke er «det samme» som det innrykket et trykk på tab-tasten gir. Så lenge alle innrykker laget på samme måte, så skal det visstnok gå bra, men det løser ikke problemet.

Slik får du TextMate til å lage «myke innrykk».

Løsningen er å la redigeringsverktøyet lage mye innrykk (soft tabs). Jeg benytter textmate, så her er framgangsmåten for det.

soft tabs i django

«Soft tabs» gjør at koden ser pen ut, men uten å lage «IndentationErrors».

Som du kan se av bildet har jeg Python Django bundlen installert (dette er nok ikke nødvendig, dog). Til høyre for dette valget vises «Tab Size», som jeg satt til 4. Dette avstanden i et trykk på tab-tasten, målt i mellomrom, tror jeg. Underst i denne dropdown-menyen finnes «Soft Tabs (Spaces)» som gjør at når tab-knappen trykkes inn, så skrives ikke et normal innrykk, men nå 4 mellomrom.

Og så forsvant alle tilfellene av IndentationError etter denne endingen.

Fremtidens medier

Framtidens medier ligger på nett, i flere betydninger. Først og fremst ligger Eirik Solheims foredrag på nett. Både hos nrkbeta og på vindkast.uib.no.

Nrkbeta ber om tilbakemelding om hvordan embed-koden deres fungerer, så her tester jeg den.

Fremtidens Medier UiB 2009 Del 1 . Det er 4 deler. Alle kan nåes både hos nrkbeta & uib.

For de som vil vite mer om hvordan videoen ble filmen og redigert kan lese om det her. Kurt George «tengil» Gjerde forklarer.

nrkbata ber om hjelp til å teste embed-kode, men også uib tilbyr dette. Slenger derfor med del 2 fra uib litt lenger nede.

UiB bruker object-html-elementet, som er mer vanlig. Den likner mer på det youtube tilbyr. Nrkbeta har skrevet en egen sak, som bare er en lenke til et javascript, med parametrene høyde og bredde på filmen. javascriptet skriver så avspiller-koden til websiden din. Når siden lastes. Du kan lese detaljene her. I stedet for et object-element så får vi et embed-element. Object-koden som uib tilbyr gjetter jeg på at er noe flash spytter ut automatisk, da den er over flere linjekoder og ser stygg og fæl ut.

Denne problematikken kan du lese mer om på alistapart.com
.
Når jeg trykker lagre her, så får vi se om det betyr noe i virkeligheten. Det er uansett sjeldent at jeg gjør annet med slik kode annet enn copy/paste. Men joa, noen ganger kan det være like greit å slanke ut unødvendige elementer, jeg ser for meg at enkelte av parametrene som ligger med uib (flash) sin kode, kan fjernes.

Vell. Det funket ikke. UiB sin object-kode strippes ut av wordpress. Jeg må altså finne ut hvordan jeg omgår dette…

Etter å ha forsøkt ulike kombinasjoner, så fant jeg ut av at ved å fjerne litt «white space» (mellomrom mellom noen parametre i obcjet-taggen), så fungere likevel UiBs avspiller. Men ikke ved direkte copy/paste. Så: pass på at det er ikke er mer enn et mellomrom mellom hver av prametrene/attributtene. Når dette var på plass ble object-koden ikke strippet bort.

Det vi ser over er del 2 av Eirik Solheims forelesning om fremtidens medier, fra uibs server vindkast.uib.no

Erfaringene

  • nrkabetas kode fungerte «ut av boksen», men den tar litt mere plass. Det grå området under videoen, med kontroll-knapper, ser ikke veldig bra ut. Den legger også automatisk inn to lenker under videoen, som gjør at bildeteksten min ser malplassert ut. Lenkene går dog til relevante og nyttige steder (til websiden der videoen kommer fra, og direktelink til videofilen.).
  • UiBs kode funket ikke «ut av boksen», men avspilleren ser litt bedre ut (litt viemo?).

Bilder i wordpresskommentarer.

Si det med bilder!

Jeg har irritert meg over at det ikke funker å legge inne bilder i kommentarene i wordpress. Det er greit at det er «skrudd av» for folk flest av sikkerhets-hensyn, men jeg sjekker alle kommentarene som dukker opp i bloggen, og ser gjerne gjennom koden også. I denne posten viser jeg deg hvordan du kan tillate bilder i kommentarene i en wordpress-blogg.

Praktica

Jeg vil tro at det skal funke å klippe/lime rett fra flickr nå, da både a-taggen og img-taggen er lovlig.

Dette er en av fordelene med fri programvare, wordpress er open source. Fri programvare. Dette betyr at jeg kan selv tilpasse wordpress til mine behov.

Slik tillater du bilde-tagger i wordpress:

Åpne og rediger filen kses.php som vist under. kses.php ligger i /wp-includes/ som du finner i roten.

Rediger inn:

$allowedtags = array(
'a' => array(
'href' => array(),
'title' => array(),
'rel' => array()),
'img' => array(
'src' => array(),
'alt' => array(),
'width' => array(),
'height' => array()),
'abbr' => array('title' => array()),

enklere, putt inn:

'img' => array(
'src' => array(),
'alt' => array(),
'width' => array(),
'height' => array()),

mellom arrayen for ‘a’ og ‘abbr’.

Denne koden fant jeg på forumet til wordpress, og det er skrevet av carthik.

Dette bør du vite:

  • kses.php er en fil som ligger i en del av filsystemet som ikke skånes ved oppdateringer. Det betyr at du lett kan overskrive denne filen når du oppdaterer, uten å være klar over det.
  • Det finnes mer sexy måter å gjøre dette på, f.eks. å skrive en plugin som overstyrer tilatte tagger i denne arrayen fra en fil i /plugins/-mappen. Det er helt klart mye lurere.
  • Dette er «skrudd av» av sikkerhetshensyn, dette bør du kun gjøre om du føler at du har sånn nogen lunde teknisk kontroll, og stålkontroll på innholdet i bloggen din.

Men altså nå kan du kommentere i bilder på stavelin.com!

Kjære Surfer

Hvis du gjør meg en tjeneste, så skal jeg fortelle deg hvordan surfing kan bli enda hyggeligere.

Verdensveven, som fylte 20 år sist mandag, er bygget av noen få ulike måter å beskrive innholdet på.

Teksten, bildene, lyden, videoen og animasjonene vi ser er beskrevet i et markup-språk. Dette språket, som alle andre språk, har endret seg noe de siste 20årene. Det som ”hovedmål” på Internett i dag er xhtml, det er det vi lærer bort til studenter og bruker når vi lager websider. xHtml ”ligger rundt” innholdet, slik at nettleseren din vet hva den skal vise fram.


<p> p betyr paragraf, eller avsnitt på norsk, og forteller nettleseren at det er en avsnitt med tekst som skal vists</p>

Teksten pakkes inn i en p med slike kråketegn for å viste hvor avsnittet starter og slutter. En overskrift pakkes inn i en h (for header), et element i en liste i li (list item) og så videre.

Xhtml brukes til å beskrive det vi skal vise frem, men hvordan dette skal se ut beskrives i et annet ”språk”, CSS. Cascading Style Sheets eller (kaskaderende) stil-ark på norsk. Det er CSS som bestemmer om teksten skal være blå eller rød, hva slags font-type som skal brukes og hvordan bakgrunnen på websiden skal se ut. Og mange andre ting. Dette betyr at når en side skal ha nytt design, så kan vi i teorien kun skrive ny CSS. Dette er kjempebra, for da kan det samme innholdet vises fram på mange ulike måter. Det er også bra fordi da skiller vi fra hverandre det som skal vises fram, og hvordan det pressenteres. Se for eksempel hvor mange ulike måter denne websiden kan se ut: www.csszengarden.com


p {
color: red;
}

Koden over er css og forteller nettleseren at alle avsnitt skal ha rød tekst.

Alle kan lære html & css. Det er ganske enkelt, det er veldig nyttig og super morsomt.

w3schools.com er et fint sted å starte hvis du vil lære mer.

Nå har vi både beskrevet hva som skal vises fram, og hvordan det skal se ut. Mange wesider har også noen kule effekter. Kanskje du kan dra-og-slippe et element, se en meny som oppfører seg lekent, se et slideshow eller liknende. For å få til slike gøye ting bruker vi ofte enda et språk, javascript.

Javascript er litt mer komplisert enn xhtml og css, men fortsatt ikke vanskeligere enn at en hobbyist kan lage mye flott med det.

For å kunne se disse fine tingene vi lager med disse teknologiene med de krøkkete navnene, så trenger vi en nettleser. En browser. Et surfebrett. Det finnes mange å velge mellom, og det finnes mange virkelig spennende. Om du ikke vet hvilken nettleser du har, eller er usikker på om den er morderne og bra, følg med nå:

For at vi som elsker webben, og vil lage nye og spennende ting på nett skal få til å lage ting som fungerer for alle, så må du bruke en nettleser som leser riktig.

Nettleserne må lese vår CSS, xhtml og javascript likt. Så likt som mulig, slik at alle nettleserne forstår hva vi mener. For å bli enige om dette fant noen opp et sett skriveregler. Vi kaller dem webstandarder, en forklaring på hvordan nettlesere skal tolke koden vi skriver. Vi har et eget organ til å sørge for at det er futt i dette prosjektet, de heter w3c.

Her ser du logoen til tre kjente nettlesere, Firefox, IE8 og Opera

Her ser du logoen til tre kjente nettlesere, Firefox, IE8 og Opera.

Hvis alle nettleserne bare støtter disse, så kan de ellers være så fancy som de vil. Så fancy som du vil ha det. Valg er nettleser kan være ganske personlig, du må finne en du liker. En som snakker det språket som gjelder på internett i dag.

Webben har som sakt nylig fylt 20år, og som alle andre 20åringer så snakker webben et helt annet språk enn da den var 2. Den snakker et ganske annet språk i dag, enn i 2001. I 2001 var nettleseren IE6 ny, og siden den gang har vi fått mange mange oppdateringer i webspråkene, og nye nettlesere og nye bedre måter å gjøre ting på.

Det er på tiden å kaste IE6 i søpla, slapp av, koden er resirkulert og kom ut mye penere etterpå

Det er på tiden å kaste IE6 i søpla. Slapp av, koden er resirkulert og kom ut mye penere etterpå. Bildet er smuglånt av spigotdesign.com

IE6 var en flott nettleser 2001. I dag er IE6 utdatert og hører hjemme på museum.
Så du må gjøre meg en tjeneste: ikke bruk IE6. Bruk noe annet, så lover jeg at vi skal jobbe hard for at internett blir enda mer spennende og morsom i framtiden.

Litt usikker på hva du har å velge i?

  • Opera (den norske)
  • Firefox (min favoritt, den frie)
  • Flock (den sosiale)
  • Chrome (laget av google)
  • Safari (laget av Apple, fancy)
  • IE8 (etterfølgeren til IE6, nesten samme ikon)

Med en av disse får du garantert en bedre opplevelse når du surfer. Mange av disse kan også mye annet. De har faner, de er tryggere, de er penere, de har innstikk (plugins) og de kan tilpasses ditt bruk. Se for eksempel hvor mange innstikk det finnes til Firefox.

Får ikke installere programmer på maskinen du jobber på sier du?

Det er ikke alle nettlesere som trengs å installeres, se for eksempel denne lekre saken her fra Opera. Den kan du kjører rett fra skrivebordet, eller fra en minnepinne, slik at du alltid har en nettleser for handen.

Har vi en deal?

PS: det foregår nå en norsk kampansje for å få folk til å slutte å bruke IE6. Du kan lese mer hos tekniskbeta.no, Aftenposten, BT og dagsavisen. Børge holder trådene samlet i denne saken som vokser seg større og større.

Anders Brenna i TU har også delt en presentasjon med info på saken: