David Steinsland – informatikkstudent og webutvikler

Innlegg merket med «php»

Yr.no – vise værdata direkte på nettsiden din

| Ingen kommentarer »

Siden den norske nettbaserte værtjenesten Yr.no frigir sine værdata gratis, er det mange som er i stand til å vise været fra sin hjembygd på nettsidene sine. Men hvordan gjør dem det?

Jeg skrev for en stund tilbake siden en PHP-klasse som gjorde akkurat dette: hentet frem værdata basert på et norsk postnummer.

Funksjonen mellomlagrer værdataene i ti minutter, slik at belastningen på Yrs servere skal minimeres, og at lastetiden hos brukeren skal oppleves raskere.

Kort fortalt er det kun fem linjer med kode du bør konsentrere deg om:

define ('PATH_WEATHER_ICONS', 'img/weather/');
define ('PATH_CACHE', 'cache/');
define ('CACHE_EXPIRATION', 600);
// How many days we are going to show
define ('DAYS_TO_SHOW', 3);

// The Zip code to which place we will fetch information about
// Defaults to 5440
$zip = isset ($_GET['zip']) ? intval ($_GET['zip']) : 5440;

Først av alt må du fortelle hvilken mappe bilde-ikonene ligger i, og hvor PHP-klassen skal mellomlagre dataene. Deretter spesifiserer du hvor lenge dataene skal bli mellomlagret (600 sekunder = 10 minutter), samt hvor mange dager fremover i tid du skal vise.

Sist, men ikke minst må du spesifisere fra hvor du skal hente værdata fra. Du må endre «5440″ til det postnummeret du vil scriptet skal vise ved default. Dersom du vil se værdata fra et annet postnummer, skriver du følgende i adressefeltet:

index.php?zip=<nytt postnummer her>

Laste ned

PHP-klassen er tilgjengelig via tillegg.yr.no, og er som vanlig lisensiert under Creative Commons.

Tips

Du kan meget lett integrere PHP-klassen min med databasesettet mitt over alle norske postnummer. Slik kan du også finne ut om postnummeret brukeren ønsker å vise, faktisk finnes. Mer informasjon om databasesettet finner du i egen artikkel.

Tilbakemeldinger

Som vanlig setter jeg pris på tilbakemeldinger, som du kan dele i kommentarfeltet!

Database med Norges postnummer, poststeder, fylker og kommuner (med koordinater)

| 16 kommentarer »

Her kommer det er oversikt over absolutt alle postnummer i Norge med tilhørende fylke, kommune og poststed. Hvert postnummer har også en lengde- og breddegrad tilknyttet seg. På denne måten kan du koble opp postnummeret til f.eks Google Maps.

Databasesettet er generert med hjelp av Postnummer-dugnaden Yr.no arrangerte sommeren 2009.

Ved hjelp av lengde- og breddegradene kan du jo også regne deg frem til avstanden mellom to steder, eller finne nærmeste postkontor til en bruker.

For å få lett oversikt over alle postkoder, kjører du følgende spørring:

SELECT
z.zip, c.name as fylke, m.name as kommune, p.name as poststed, cc.comment, z.lat, z.lon
FROM `zip_codes` z
INNER JOIN zip_places p
ON p.place_id = z.place_id
INNER JOIN municipal m
ON m.municipal_id = p.municipal_id
INNER JOIN county c
ON c.county_id = m.county_id
INNER JOIN comments cc
ON cc.comment_id = z.comment_id
ORDER BY
z.zip ASC, fylke ASC, kommune ASC, poststed ASC

Med enhver sak kan det forekomme feil, så om dere kommer over noe som skulle vise seg til å være en bug: si i fra.

Oppdateringer

Versjon 1.3
- Tabellene er gjort om til InnoDb med nødvendige indekser og fremmednøkler
- Jan Mayen og Svalbard er nå plassert inn i to fylker (med samme navn), i henhold til ISO 3166-2:NO. På grunn av at områdene ikke har noe de facto fylke, måtte det gjøres slik.
- Enkelte justeringer på koordinater
- Kommunesentre for hver kommune er lagt inn

Versjon 1.2
- Jan Mayen og Svalbard har klart å falle ut fra oversikten. Det er pga. områdene ikke er del av noen fylker, og det har dermed blitt opprettet et «Svalbard og Jan Mayen»-fylke.

Last ned (versjon 1.3)

Norske postnummer.zip, lisensiert under Creative Commons.

Tabell over alle postnummer: http://php.davidsteinsland.net/zip_codes.htm

LaTeX på nett: matematiske formler til bilder

| 2 kommentarer »

Innenfor realfagene matematikk, fysikk og kjemi skriver jeg alt av rapporter og øvinger i LaTeX, som er et typesettingssystem for dokumentproduksjon. Det er spesielt egnet for matematisk litteratur, og blir definert av den engelske Wikipedia slik:

A document-typesetting system derived from TeX and used mainly to create scientific and mathematical literature.

LaTeX er originalt skrevet for Linux, men er per i dag tilgjengelig på alle plattformer gjennom ulike distribusjoner. Personlig bruker jeg distribusjonen MikTeX med versjonsnummer 2.8. Redigeringsprogrammet jeg bruker heter LaTeX Editor — forkortet LEd.

Det er tusenvis av fordeler for å bruke LaTeX kontra såkalte What You See Is What You Get-program (Microsoft Office, OpenOffice, Lotus Symphony etc.). Den største er at i LaTeX så er det du som har kontrollen: What You See Is What You Mean.  Ting blir faktisk slik du sier det skal være!

Du har vel sett noen matematiske formler på Wikipedia? Der anvender de nemlig  LaTeX, og ser omtrent slik ut:

Det er nemlig dette jeg har tenkt å ta tak i, i denne posten: nemlig forklare deg hvordan du også kan få slike deilige formler på din nettside!

Hva må gjøres klart?

For å skrive LaTeX på PC-en din, og for at alt skal gå optimalt, krever det en rekke program som f.eks MikTeX (LaTeX-distro), LEd (redigering) og GhostScript / Ghost View (postscript-støtte). For å skrive LaTeX på nett krever jeg derimot at du kun har MikTeX installert!

PS: Jeg tar som utgangspunkt at webserveren din er din egen PC. Veldig få webhotell-leverandører som installerer LaTeX…

Last så ned siste versjon av MikTeX og installer denne på PC-en din. For din egen del er det nok lurest å velge «Basic Installer». Her vil kun de mest nødvendige pakkene bli installert (pakker kan oversettes som plugins). Om du ønsker å installere alle pakker tilgjengelig, velger du «Complete MikTeX System».

La oss begynne!

Det aller første du må gjøre rede for er følgende:

  1. Hvor installerte du MikTeX?

La oss si du installerte programmet i C:\Programfiler\MikTeX 2.8\

Da må du leite frem til miktex\bin\latex.exe og \miktex\bin\dvipng.exe.

Dersom disse programmene ikke er tilstede, vil du ikke være i stand til å gjennomføre denne guiden: prøv da å re-installere MikTeX.

Har du lokalisert programmene? Flott — da går vi videre.

Finn frem til root-mappen på serveren din (bruker du WampServer er dette C:\wamp\www\). Opprett en mappe som du kaller for «latex».
Inni den nye mappen, oppretter du så følgende mapper:

  • images
  • tmp

«Images» er mappen hvor de endelige formlene kommer til å bli plassert, og «tmp» er mappen hvor produksjonsfilene våre ligger. Når du kompilerer et dokument i LaTeX vil det bli opprettet totalt 4 filer per prosjekt. Disse er respektivt .tex, .aux, .log og .dvi. Tex-filen inneholder selve dokumentet vårt, og DVI-filen er selve outputen etter kompilering. Disse to er essensielle.

PHP-klassen

Jeg har allerede skrevet klassen ferdig, som du skal få. Før jeg overrekker den, vil jeg ta tiden til å forklare litt hva den gjør.

Det er to ting du umiddelbart må få i stand etter at du har lastet ned klassen:

- Øverst i klassen er det deklarert to variabler: _latex_path og _dvipng_path. Disse må du endre til hva du fant ut i punkt #1 (under «La oss begynne!»). Det er veldig viktig at du følger denne regelen når du endrer sti: Variabelen må være omgitt av to enkle apostrofer, og selve stien til programmene må være omgitt av gåseøyne.

Dette er fordi at dersom det er mellomrom en plass i stien (i C:\Program Files\MikTeX\ er det mellomrom i «Program Files») må teksten være omgitt av gåseøyne, som forteller at teksten skal tolkes som én sti, og ikke to.

Dersom stien til latex.exe på PC-en din er følgende: C:\Program Files\MikTeX 2.8\miktex\bin\latex.exe skal _latex_path være formet slik:

 $_latex_path = '"C:\Program Files\MikTeX 2.8\miktex\bin\latex.exe"';

Utover dette, skal klassen fungere ut-av-boksen (dersom du har opprettet de korrekte mappene).

Laste klassen ned

PHP5 LaTeX Renderer, lisensiert under Creative Commons.

Hvordan fungerer klassen?

I seg selv er den ganske liten, og rett frem. Det er en innebygget cache-funksjon som lagrer bildene ved hjelp av:

  • den matematiske formelen
  • tekst-størrelsen

Om du vil endre tekst-størrelse, gjør du slik:

= new LaTeX();    latex->set ('font_size', 16); // 16 is the font size, measured in "points"

Dersom du vil endre artikkel-klassen for dokumentet, gjør du slik:

$latex->set ('article_class', 'article'); 

Ved default er det «scrartcl» som fungerer som dokumentets klasse, men dette er en tilleggspakke som må installeres. Derfor kan du anvende «article» som kommer ferdig-installert via MikTeX.

… og slik setter du innholdet:

$latex->set ('tex_content', '\frac{1}{2}');

For å rendere dokumentet, og vise den endelige formelen som et bilde, gjør du slik:

$data = $latex->render ();
echo '<img src="' . $data['img'] . '" alt="' . $data['tex'] . '" />';

Klassen støtter naturligvis linking, og kan brukes slik:

= new LaTeX();    data = $latex->set ('font_size', 16)->set ('tex_content', 'ax^2 + bx + c = 0')->render ();

Dersom du ønsker å skrive ABC-formelen (som jeg viste lengre oppe i artikkelen), skriver du den slik:

 x = \frac{ -b \pm \sqrt{b^2 - 4ac}}{2a}

Flyteskjema

For de av dere som er interessert i flowcharts (meg inkludert): slik er fremgangsmåten i klassen:

Det var det!

Nå er du i bunn og grunn ferdig, og kan begynne å eksperimentere selv. Det rådes selvsagt at du har noen kunnskaper innen LaTeXs måter å skrive ting på. Om du vil lese deg opp på emnet, er det mange gode ressurser for det:

Om det er noen spørsmål om hjelp, tips til forbedringer etc, kan dette tas opp i kommentarfeltet.

PS: LaTeX uttales Lah-tek. Vil ikke høre om noen som sier det rett ut..

Wamp: Hvordan installere ffmpeg (Windows)

| 8 kommentarer »

Noen ganger kan det være ganske ålreit å kunne konvertere videoer via PHP, eller for eksempel hente ut miniatyrbilder fra en film. Da er det også ganske ålreit at ffmpeg finnes.

Med ffmpeg kan du gjøre slike ting lekende lett, men veien der til er ikke alltid like grei. Heldigvis har jeg i den sammenheng laget en liten guide til hvordan du kan gjøre det!

Før vi begynner …

Sørg for at du har:

Når du har de to punktene under kontroll er du klar til å gå videre.

Hva vi trenger

Da er tiden inne for å laste ned ffmpeg-arkivene. Last ned de to arkivene under, og plasser dem f. eks på skrivebordet ditt.

FFmpeg:  http://sourceforge.net/projects/mplayer-win32/files/FFmpeg/(last ned en .7z-fil)
FFmpeg-php: http://sergey89.ru/files/ffmpeg-php/ffmpeg-php-win32-all.zip (kun kompatibel med PHP 5.2.5)

La oss begynne

Pakk ut innholdet fra den første zip-filen, og kopier filen ffmpeg.exe til C:\ffmpeg\. Det er denne filen PHP kommer til å sende kommandoene til.

Pakk så ut innholdet fra det siste arkivet (ffmpeg-php). Her vil det være totalt 5 filer som vi trenger. Kopier filene avcodec-51.dll, avformat-51.dll, avutil-49.dll og pthreadGC2.dll og lim dem inn i: C:\WINDOWS\System32\.

Dersom du kjører et 64-bits operativsystem, må du også legge de samme filene i: C:\WINDOWS\SysWOW64\.

Da gjenstår det én fil igjen, og det er: php_ffmpeg.dll.  Dette er utvidelsefilen for PHP; denne må du plassere i C:\wamp\bin\php\php5.2.5\ext\ som da er PHPs mappe over utvidelser. Siste punktet du må gjøre er å endre PHPs konfigurasjonsfil, php.ini. Denne kan du nå på to måter:

  • Trykke på Wampserver-ikonet i Tray, klikke på PHP og så velge php.ini
  • Gå til C:\wamp\bin\php\php5.2.5\

Åpne konfigurasjonsfilen i en teksteditor (f. eks Notepad), og bla ned til du kommer til «Windows extensions». Her kommer det opp en liste over mange ulike utvidelser; lag en ny linje, og lim inn følgende kode:

extension=php_ffmpeg.dll

Nå trenger du bare starte Wampserver om igjen, ved å trykke på Wampserver-ikonet i tray og deretter velge «Restart all services».

Nå kan du åpne din favoritt-nettleser, og lime inn følgende adresse:

http://localhost/?phpinfo

Dersom installasjonen har vært vellykket, vil du kan kunne finne ffmpeg på den listen (se bilde).

Sluttord

Nå er det bare til å sette i gang med å konvertere videoer, hente ut stillbilder, lyd eller hva det måtte være. Du kan teste installasjonen ved å kjøre følgende kode:

<?php
    $clip = 'clip.mp4'; // Which video to extract from
    $frame = '00:00:10'; // ... and at which frame
    $dimensions = '640x480'; // Image dimensions (width x height)
    $output = 'myscreen.png'; // path to captured image

    $command = 'C:\ffmpeg\ffmpeg.exe -y -i ' . $clip . ' -vframes 1 -ss ' . $frame . ' -an -vcodec png -f rawvideo -s ' . $dimensions . ' ' . $output;
    exec ($command);
?>

Den vil hente ut et bilde fra videoen clip.mp4 ti sekunder ut i filmen, og lagre bildet som myscreen.png. Legg spesielt merke til at vi må spesifisere fulle stien til hvor vi har plassert ffmpeg.exe-filen. De fleste plasser på Internett, så står det som regel bare «ffmpeg», istedenfor full sti; slik må du ikke gjøre det!

Du kan også teste installasjonen ved å skrive denne koden:

<?php
    echo shell_exec ('C:\ffmpeg\ffmpeg.exe -formats');
?>

Om du har innspill, kommentarer eller lignende, så er du velkommen til å kommentere artikkelen!
Video som viser hva jeg gjør — i dårlig kvalitet — er å se under:

Synkronisert nettprat (Live Chat Script)

| 2 kommentarer »

På forhånd: dette er mer en reklamasjonspost enn guide til hvordan en lager det.

Av de produktene jeg har solgt til eller utviklet for kunder, er det én gjengganger som ligger desidert på toppen. Det er nettpraten jeg snakker om. Med tanke på at den ikke utnytter databaser, og krever minimalt med konfigurering, er det i mange hjerter denne tjenesten har falt.

For min egen del er det også veldig lett. Dersom en kunde kommer med en forespørsel til noe han/henne vil ha annerledes, er jobben nærmest gjort på minuttet.

Noen notatverdige funksjonaliteter er som følger:

  • Mulighet for å bruke nettpraten som en privat chat (med to deltagere), eller som en gruppesamtale
  • Brukerne kan endre navn fritt — selvsagt til navn som ikke eksisterer fra før
  • Liste over aktive deltagere (brukere som har skrevet noe den siste timen)
  • Uttrykksikoner og autolinking av nettadresser
  • Hver ukedag før egen fil hvor samtalene føres, noe som i praksis fører til at konversasjonene blir tilbakestilt hver midnatt
  • Spamsikkert da det følger med et Quiz-spørsmål som deltagere er nødt til å svare på
  • Mulighet for å la nye samtaler komme på toppen eller bunnen
  • Dersom noe blir skrevet mens en bruker ikke har nettpraten fokusert, vil det komme en animasjon i tittellinjen som forteller brukeren at det er kommet nye meldinger

Prisen er heller ikke høy, og er ment for å dekke de timene jeg har lagt ned i prosjektet. Utsalgsprisen ligger på 600 kroner, og om ekstra funksjonalitet er ønskelig, vil det blir lagt på timepris.

Du kan selv teste ut praten så mye du vil på følgende adresse:
http://trunk.davidsteinsland.net/chat/

Om det er noe du lurer på — skriv en kommentar, eller send meg en E-post.