Per Thykjaer Jensen

  • Her begynder notater til udvikling af en Scrum-Kanban. FormĂ„let med projektet er at udvikle en Kanban, der kan kĂžre som et plugin i WordPress. Dels for at arbejde teoretisk med IT-projektstyring – og dels for at prĂžve  muligheder med HTML5 og CSS.

    Koden herunder stammer fra W3Schools og den laver den basale funktionalitet; men lĂžsningen er ikke persistent. En persistent lĂžsning bĂžr kunne udvikles via PHP og MySQL. Sprints er:

    1. Gemmefunktion – overfĂžrer data til databasen via POST.
    2. Udvikling af ER
    3. PHP
    4. Database
    5. Integration med WordPress API
    <html>
    <head>
    <style type="text/css">
    #div1 {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;}
    #div2 {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;}
    #div3 {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;}
    .divX  {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;}
    </style>
    <script>
    function allowDrop(ev)
    {
    ev.preventDefault();
    }
    
    function drag(ev)
    {
    ev.dataTransfer.setData("Text",ev.target.id);
    }
    
    function drop(ev)
    {
    ev.preventDefault();
    var data=ev.dataTransfer.getData("Text");
    ev.target.appendChild(document.getElementById(data));
    }
    </script>
    </head>
    <body>
    
    <p>Drag the W3Schools image into the rectangle:</p>
    <div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)">Backlog</div>
    
    <div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)">Todo</div>
    
    <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">Done</div>
    
    <img id="drag1" src="img_logo.gif" draggable="true" ondragstart="drag(event)" width="336" height="69">
    
    <div id="QQ" class="DQ" draggable="true" ondragstart="drag(event)">
     Drag Queen
    </div>
    
    </body>
    </html>
  • Uden og med Hoya PL-CIR filter. Uden er til venstre.

    Test af et ny filter til Sony A290. Kontraster er markant forbedrede; men billedet bliver mÞrkere. Normalt bruges filteret til at dÊmpe en lidt for lys himmel med hvide skyer eller til at fjerne reflekser pÄ metal eller vandoverflader.

  • Flagdage

    Dannebrog
    Hvordan hejser man Dannebrog pĂ„ websiden? Med denne PHP-kode kan du hejse flaget automatisk – og se hvorfor flaget hejses.

    Jeg har ikke en flagstang; men ville gerne hejse flaget pÄ min webside. Derfor skrev jeg en PHP-sag, der viser Dannebrog og hvad vi flager for.

    Brug dannebrog pÄ din egen webside

    Du kan automatisk flage med Dannebrog pÄ din egen webside. IndsÊt denne iframe i din websides html:

     <iframe src="https://multimusen.dk/flag/flag.php" style="height=200px;"></iframe>

    Du behÞver ikke at gÞre andet end det. Siden viser kun et flag pÄ en flagdag. Hvis den er blank er det altsÄ forklaringen.

    De fÞlgende afsnit forklarer, hvordan PHP-koden virker. Hvis det lyder lidt for nÞrdet, sÄ drop resten af denne artikel.

    Klassen flagdag

    Men hvordan fungerer denne PHP-kode sÄ? FÞrst har jeg defineret en klasse, der indeholder de vigtigste funktioner (der er kun to funktioner):

    class flagDag
    {
    	// printer hvis dagen er en flagdag
    	public function dag($dato, $maaned, $hvad) {
    		$flagstang = "dannebrog.gif"; // stien til billedet af Dannebrog
    		// undersĂžger om det er en flagdag
    		if (date('m') == $maaned && date('d') == $dato) {
    			echo "<img src='" . $flagstang . "' alt='Dannebrog' width='50' height='38' >"; // kan skaleres efter behov
    			echo "<p style='font-size:smaller'>I dag flages for: " . $hvad . "</p>";
    		}
    	}
    
    	// sÄdan: plusTid('+3 weeks +5 days');
    	function fePaaske($tid, $hvad) {
    		// Denne funktion beregner dato for skĂŠve helligdage
    		$date = date("Y-m-d", easter_date()); // pÄskedag
    		$newdate = strtotime ( $tid, strtotime ( $date ) ) ; // her plus-minuses
    		$newdate = date ( 'd,m' , $newdate ); // datoen formatteres
    
    	 	return $newdate . "," . $hvad; // udskriver resultatet
    	}
    }

    Dannebrog vises ved hjĂŠlp af denne funktion:

    	public function dag($dato, $maaned, $hvad) {
    		$flagstang = "dannebrog.gif"; // stien til billedet af Dannebrog
    		// undersĂžger om det er en flagdag
    		if (date('m') == $maaned && date('d') == $dato) {
    			echo "<img src='" . $flagstang . "' alt='Dannebrog' width='50' height='38' >"; // kan skaleres efter behov
    			echo "<p style='font-size:smaller'>I dag flages for: " . $hvad . "</p>";
    		}
    	}

    Funktionen bruger $dato og $maaned til at definere datoen. $hvad er en kort beskrivelse af begivenheden. NĂ„r dagen og mĂ„neden indtrĂŠffer vises et flag (dannebrog.gif) samt den korte beskrivelse af begivenheden, fx “H.K.H. Prins Joachim”.

    Herefter var det kun et spÞrgsmÄl om at instantiere klassen:

    $ny = new flagDag(); // instantierer klassen

    … og om at definere diverse flagdage, som fremgĂ„r af kalenderen hos Danmarks-Samfundet. Flagdagen defineres sĂ„dan:

    $ny->dag(01,01,"NytÄrsdag");

    PĂ„skeproblemet

    De “kalenderfaste” flagdage var relativt simple. Det er straks vĂŠrre med pĂ„sken, der fĂžlger en relativt kompleks mĂ„nekalender. da.wikipedia.org skriver at pĂ„sken falder sĂ„dan:

    PÄskedag er den fÞrste sÞndag efter fÞrste fuldmÄne efter forÄrsjÊvndÞgn.

    Beregning af pÄskedagene krÊver altsÄ viden om jÊvndÞgn, og hvornÄr det er fuldmÄde. Heldigvis har PHP en funktion, der beregner pÄskedagen, nemlig easter_date().

    PÄ nettet fandt jeg en metode til at lÊgge tid til en dato, en den funktionalitet byggede jeg sÄ ind i denne funktion:

    	function fePaaske($tid, $hvad) {
    		// Denne funktion beregner dato for skĂŠve helligdage
    		$date = date("Y-m-d", easter_date()); // pÄskedag
    		$newdate = strtotime ( $tid, strtotime ( $date ) ) ; // her plus-minuses
    		$newdate = date ( 'd,m' , $newdate ); // datoen formatteres
    
    	 	return $newdate . "," . $hvad; // udskriver resultatet
    	}

    Kirkens pÄskedag er bestemmende for en hel rÊkke helligdage, der falder lidt forskelligt fra Är til Är. Systemet ser sÄdan ud:

    • PalmesĂžndag – sĂžndagen fĂžr pĂ„ske (pĂ„ske minus en uge)
    • SkĂŠrtorsdag – pĂ„ske sĂžndag minus 3 dage (Halv stang t. kl. 12:00)
    • 1. pĂ„skedag – pĂ„skesĂžndagen
    • 2. pĂ„skedag –  pĂ„ske sĂžndag + en dag
    • Store Bededag – 4. fredag efter pĂ„ske
    • Kristi Himmelfart – 6. torsdag efter skĂŠrtorsdag
    • 1. pinsedag –  7. sĂžndag efter pĂ„ske
    • 2. pinsedag – pinsedag + 1dag

    Julen falder heldigvis pĂ„ faste datoer, sĂ„ det er til at have med at gĂžre…

    • 1. juledag – fast dato 25.12.
    • 2. juledag – fast dato 26.12.

    Ved hjÊlp af min funktion kan man lÊgge Är, dage, uger og mÄneder til pÄskedagen. Og derfor bliver beregningen af fx. 1. pinsedag relativt simpel:

    $fPin = $ny->fePaaske("+7 weeks", "1. Pinsedag"); // 1. Pinsedag

    Men scriptet returnerer en streng og funktionen, der viser en falgdag krĂŠver to tal og en streng. En streng kan forvandles til et tal med (int); men jeg har kun brug for en del af strengen. Dagen og mĂ„neden skal isoleres ved hjĂŠlp af substring. Det leder frem til denne magiske formular, der viser flaget pĂ„ de “skĂŠve” helligdage:

    $ny->dag((int)substr($fPin,0,2), // 1. Pinsedag
    	(int)substr($fPin,3,4),
    	substr($fPin,6)
    	);

    Den ovenstÄende kode skulle skrives 8 gange, og det ligner et job for et loop. I en senere version blev denne kode derfor erstattet med et array og et loop. Koden kom til at se sÄdan ud:

    $kadosh = array(
    	$ny->fePaaske("-1 weeks", "PalmesĂžndag"), // PalmesĂžndag
    	$ny->fePaaske("-3 days", "SkĂŠrtorsdag"), // SkĂŠrtorsdag
    	$ny->fePaaske("+0 days", "1. PÄskedag"), // 1. PÄskedag (fuldmÄne efter equinox)
    	$ny->fePaaske("+1 days", "2. PĂ„skedag"), // 2. PĂ„skedag
    	$ny->fePaaske("+5 days +3 weeks", "Store Bededag"), // Store Bededag
    	$ny->fePaaske("-3 days +6 weeks","Kristi Himmelfart"), // Kristi Himmelfart
    	$ny->fePaaske("+7 weeks", "1. Pinsedag"), // 1. Pinsedag
    	$ny->fePaaske("+7 weeks +1 days", "2. Pinsedag") // 2. Pinsedag
    	);
    
    $i = 0; // looper derefter gennem kadosh-arrayet og kombinerer ny->dag med ny->fePaaske
    
    while($i <= count($kadosh))
    	{
    	$ny->dag(
    		(int)substr($kadosh[$i],0,2), // dag substring som integer
    		(int)substr($kadosh[$i],3,4), // mÄned substring som integer
    		substr($kadosh[$i],6) // hvad (pladrer strengen ud fra 6. karakter)
    		);
    	$i++;
    	};

     

    Tilbage stod at indskrive flagdatoerne i scriptet. Resultatet kan ses her. MÄske. Hvis det ikke er flagdag i dag, sÄ er siden altsÄ blank. Og det var netop meningen. Der skal kun vÊre et flag nÄr det er en flagdag.

    Debugging

    Nu fÄr vi sÄ se, om koden virker. Debugging varer et Ärs tid. Hvis multimusen.dk flager pÄ en flagdag, sÄ virker sagerne jo.

    Koden

    Herunder er PHP-koden som den sÄ ud i fÞrste omgang, inden loopet herover. Det er selvfÞlgelig den rÄ betaversion; men den kan bygges ind i et PHP-baseret website. Det forudsÊttes, at koden ligger i samme mappe som billedet af flaget.

    <?php
    /* DANSKE FLAGDAGE
    Af: Per Thykjaer Jensen
    Beskrivelse: Printer danske flagdage til en webside via PHP.
    
    Version: 0.2 Beta - flagdage.
    
    Ændringer:
    Version 0.2 - denne version kan beregne kirkelige flagdage baseret pÄ pÄskedag.
    0.11 - Dannebrog som .gif af hensyn til kompabilitet.
    Version 0.1 - basal funktionalitet. PĂ„ flagdage med fast dato vises et flag.
    
    Dato: 20120608
    Copyright: GPLv3 - se licensen her: http://www.gnu.org/copyleft/gpl.html
    */
    class flagDag
    {
    	// printer hvis dagen er en flagdag
    	public function dag($dato, $maaned, $hvad) {
    		$flagstang = "dannebrog.gif"; // stien til billedet af Dannebrog
    		// undersĂžger om det er en flagdag
    		if (date('m') == $maaned && date('d') == $dato) {
    			echo "<img src='" . $flagstang . "' alt='Dannebrog' width='50' height='38' >"; // kan skaleres efter behov
    			echo "<p style='font-size:smaller'>I dag flages for: " . $hvad . "</p>";
    		}
    	}
    
    	// sÄdan: plusTid('+3 weeks +5 days');
    	function fePaaske($tid, $hvad) {
    		// Denne funktion beregner dato for skĂŠve helligdage
    		$date = date("Y-m-d", easter_date()); // pÄskedag
    		$newdate = strtotime ( $tid, strtotime ( $date ) ) ; // her plus-minuses
    		$newdate = date ( 'd,m' , $newdate ); // datoen formatteres
    
    	 	return $newdate . "," . $hvad; // udskriver resultatet
    	}
    }
    
    $ny = new flagDag(); // instantierer klassen
    
    // FLAGDAGE
    $ny->dag(01,01,"NytÄrsdag");
    $ny->dag(05,02,"H.K.H. Kronprinsesse Mary");
    $ny->dag(06,02,"H.K.H. Prinsesse Marie");
    $ny->dag(09,04,"Danmarks besÊttelse. Der flages pÄ halv stang til kl. 12:00.");
    $ny->dag(16,04,"H.K.H. Dronning Margrethe II.");
    $ny->dag(29,04,"H.K.H. Prinsesse Benedikte.");
    $ny->dag(05,05,"Danmarks befrielse 1945.");
    $ny->dag(26,05,"H.K.H. Kronprins Frederik.");
    $ny->dag(05,06,"Grundlovsdag (1849).");
    $ny->dag(07,06,"H.K.H. Prins Joachim"); // protektor for Danmarks-Samfundet
    $ny->dag(11,06,"H.K.H. Prinsgemal Henrik.");
    $ny->dag(15,06,"Valdemarsdag og Genforeningen (1920)");
    $ny->dag(05,09,"H.K.H. Prins Joachim");
    $ny->dag(25,12,"Juledag.");
    
    // FORSVARETS FLAGDAGE
    $ny->dag(29,01,"Holmens HĂŠderstegn.");
    $ny->dag(02,02,"Kampen ved Mysunde (1864).");
    $ny->dag(11,02,"Stormen pÄ KÞbenhavn (1659).");
    $ny->dag(02,04,"Slaget pÄ Reden (1801).");
    $ny->dag(18,04,"Slaget ved DybbĂžl (1864).");
    $ny->dag(09,05,"Kampen ved Helgoland (1864).");
    $ny->dag(05,06,"Kampen ved DybbĂžl (1848).");
    $ny->dag(01,07,"Slaget i KĂžge Bugt (1677).");
    $ny->dag(06,07,"Slaget ved Fredericia (1849).");
    $ny->dag(25,07,"Slaget ved Isted 1850.");
    $ny->dag(04,10,"Stormen pÄ Frederiksstad 1850.");
    
    /* KIRKELIGE FLAGDAGE
    De "skÊve" kirkelige helligdage fÞlger en mÄnekaldender og falder et antal dage efter en bestemt fuldmÄne.
    Udgangspunktet for beregningerne er pÄskedag.
    
    Systemet ser sÄdan ud:
    
    	PalmesÞndag - sÞndagen fÞr pÄske (pÄske minus en uge)
    	SkÊrtorsdag - pÄske sÞndag minus 3 dage (Halv stang t. kl. 12:00)
    	1. pÄskedag - pÄskesÞndagen
    	2. pÄskedag -  pÄske sÞndag + en dag
    	Store Bededag - 4. fredag efter pÄske
    	1. pinsedag -  7. sÞndag efter pÄske
    	2. pinsedag - pinsedag + 1dag
    	Kristi Himmelfart - 6. torsdag efter skĂŠrtorsdag
    	1. juledag - fast dato 25.12.
    	2. juledag - fast dato 26.12.
    
    Eftersom de skÊve helligdage afhÊnger af pÄsken og mÄnen sÄ er PHPs pÄskeberegning et udgangspunkt for tidsberegningerne
    */
    
    $palmeS = $ny->fePaaske("-1 weeks", "PalmesĂžndag"); // PalmesĂžndag
    $skaerT = $ny->fePaaske("-3 days", "SkĂŠrtorsdag"); // SkĂŠrtorsdag
    $PaaD = $ny->fePaaske("+0 days", "1. PÄskedag"); // 1. PÄskedag (fuldmÄne)
    $APaaD = $ny->fePaaske("+1 days", "2. PĂ„skedag"); // 2. PĂ„skedag
    $stB = $ny->fePaaske("+5 days +3 weeks", "Store Bededag"); // Store Bededag
    $KrH = $ny->fePaaske("-3 days +6 weeks","Kristi Himmelfart"); // Kristi Himmelfart
    $fPin = $ny->fePaaske("+7 weeks", "1. Pinsedag"); // 1. Pinsedag
    $aPin = $ny->fePaaske("+7 weeks +1 days", "2. Pinsedag"); // 2. Pinsedag
    
    $ny->dag(25,12,"1. Juledag."); // helligdage med fast dato
    $ny->dag(26,12,"2. Juledag.");
    
    // Et loop gennem et array kunne ha gjort det fĂžlgende mere elegant ... nĂŠste version ...
    
    $ny->dag((int)substr($palmeS,0,2), // PalmesĂžndag
    	(int)substr($palmeS,3,4),
    	substr($palmeS,6)
    	);
    
    $ny->dag((int)substr($skaerT,0,2), // SkĂŠrtorsdag
    	(int)substr($skaerT,3,4),
    	substr($skaerT,6)
    	);
    
    $ny->dag((int)substr($paaD,0,2), // PĂ„skedag
    	(int)substr($paaD,3,4),
    	substr($paaD,6)
    	);
    
    $ny->dag((int)substr($APaaD,0,2), // 2. PĂ„skedag
    	(int)substr($APaaD,3,4),
    	substr($APaaD,6)
    	);
    
    $ny->dag((int)substr($stB,0,2), // Store Bededag
    	(int)substr($xstB,3,4),
    	substr($stB,6)
    	);
    
    $ny->dag((int)substr($KrH,0,2), // Kristi Himmelfartsdag
    	(int)substr($KrH,3,4),
    	substr($KrH,6)
    	);
    
    $ny->dag((int)substr($fPin,0,2), // 1. Pinsedag
    	(int)substr($fPin,3,4),
    	substr($fPin,6)
    	);
    
    $ny->dag((int)substr($aPin,0,2), // 2. Pinsedag
    	(int)substr($aPin,3,4),
    	substr($aPin,6)
    	);
    
    /* PRIVATE FLAGDAGE
    IndfĂžr dine private flagdage herunder
    Format: "dd,mm, begivenhed"
    eksempel $ny->dag(03,06,"test");
    */
    
    // eksempel
    // $ny->dag(27,02,"Pers fĂždselsdag");
    
    ?>

    Koden herover kan faktisk bruges til mange ting. Ved fĂ„ ĂŠndring kan den gĂžres til et WordPress plugin – og det er i denne form at jeg bruger koden nu.

  • Det kunne vĂŠre festligt, hvis min webside hejste Dannebrog pĂ„ flagdagene. Derfor har jeg eksperimenteret lidt med en PHP-sag, der viser Dannebrog og begivenheden pĂ„ flagdage.

    Resultatet ses herunder (og ja: hvis dagen i dag ikke er en flagdag, sĂ„ kan du ikke se noget herunder…).



    De kirkelige hellig- og flagdage skal beregnes via PHPs easter_date() klasse. Det er lidt mere kompliceret – de skĂŠve helligdage kommer med i den nĂŠste version. Kopier koden herunder til din webside:

    <iframe style="height: 250px;" src="https://multimusen.dk/flag/flag.php" width="320" height="240"></iframe>
  • Create WordPress widget from scratch.

    Hvordan man laver en WordPress widget – fra bunden af.

  • Erhvervsakademi Aarhus (EAK) bruger i stigende omfang sociale medier. Hjemmesiden eaaa.dk linker til Facebook, YouTube og LinkedIN. De sociale medier spiller efterhĂ„nden en vigtig rolle i organisationens kommunikation. Men hvad er sociale medier, hvordan og hvorfor skal EAK bruge dem?

    Jeg tager udgangspunkt i videnskabelige undersÞgelser af digital kommunikation pÄ sociale medier. Laswells lineÊre kommunikationsmodel sammenlignes med Nancy Baym, der arbejder med interpersonelle relationer via digitale medier. Via Sepstrups kampagneteorier vil jeg se pÄ Facebooks strategiske potentiale. FormÄlet med analysen er at opnÄ en forstÄelse af hvordan kommunikation fungerer pÄ Facebook.

    Det videnskabsteoretiske udgangspunkt er “… anvendt forskning som benytter grundforskningens resultater til at lĂžse mere specifikke problemer…” [key-4, p. 194]

    Facebook er et eksempel pÄ et af mange sociale medier. Konklusionerne fra min analyse kan med stor sandsynlighed overfÞres til andre sociale platforme. FormÄlet med analysen er derfor at undersÞge, hvordan en organisation kan positionere sig strategisk via sociale medier.

    Her kan du lĂŠse hele rapporten.

    Kilder
    [Klaus 2005] Klausen, SĂžren H.: Hvad er videnskabsteori (2005)

  • NeverSeconds. Martha Payne’s food blog – shamed her school to change the menu …

  • On the other, and we keep forgetting this, most people have no idea what they want. Ford noted that if you asked the customer what they wanted, they would say a faster horse. Sony’s Akio Morita observed that there was little point in doing customer surveys because customers have no idea what is possible. He went ahead and made the Walkman, knowing that people would buy it, even though no-one had asked for it. Great visions often live far ahead of customer desires. Sometimes it is best just to do it and then ask.

    Citat fra: How much choice should you have? | Your guide to the future.

Enable Notifications OK No thanks

We use cookies - more information

Multimusen.dk will set a few cookies from Doubleclick, Google and the Social Media plugins they ay set some cookies. Some of my pages use APIs - such as YouTube, LinkedIn, Google Fonts, Google Maps, Mapbox, Spotify, Jetpack, Twitter, Facebook &c.. Such plugins may set the odd cookie.

Close