<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="rss.xsl" type="text/xsl"?>
<rss version="2.0">
   <channel>
      <title>Lars Gunthers blogg på keryx.se</title>
      <link>http://www.keryx.se/blogg.php</link>
      <description>Lars Gunthers tankar om allt möjligt</description>
      <language>sv-se</language>
      <pubDate>Thu, 13 Oct 2011 18:00:48 +0200</pubDate>
      <lastBuildDate>Thu, 13 Oct 2011 18:00:48 +0200</lastBuildDate>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs>
      <generator>PHP-skript frï¿½n Keryx (www.keryx.se)</generator>
      <managingEditor>gunther@keryx.se (Lars Gunther)</managingEditor>
      <webMaster>webmaster@keryx.se (Lars Gunther)</webMaster>
      <copyright>Lars Gunther</copyright>      <item>
         <title>Vad är diskreta domskript?</title>
         <link>http://www.keryx.se/blogg-69</link>
         <description>&lt;p&gt;För betygen A-C i &lt;a href=&quot;http://www.skolverket.se/forskola_och_skola/gymnasieutbildning/2.2954/amnesplaner_och_kurser_for_gymnasieskolan_2011/subject.htm?subjectCode=WEB&amp;amp;courseCode=WEBWEU01#anchor_WEBWEU01&quot;&gt;kursen Webbutveckling 1&lt;/a&gt; så står det
&lt;q&gt;I produkten infogar eleven enkla diskreta domskript.&lt;/q&gt;  Så kan det bli när reglerna förbjöd mig
använda engelska. Annars hade det stått &lt;q&gt;unobtrusive DOM-scripts&lt;/q&gt;. Jag skall här försöka reda ut
de tre nycklarna som finns för att förstå skrivningen, vilket enklast görs bakifrån genom att vi
tittar på orden (3) DOM-skript, (2) diskreta och (1) infogar.&lt;/p&gt;
&lt;h2&gt;Testa dig själv&lt;/h2&gt;
&lt;p&gt;Finn (minst) fem fel (utöver att koden inte är komplett). &lt;/p&gt;

&lt;pre class=&quot;codeblock&quot;&gt;
&amp;lt;div id=&quot;a&quot;&amp;gt;Lorem ipsum.&amp;lt;/div&amp;gt;
&lt;span class=&quot;error&quot; id=&quot;er_btn&quot;&gt;&amp;lt;button onclick=&quot;hideme()&quot;&amp;gt;Dölj&amp;lt;/button&amp;gt;&lt;/span&gt;

&amp;lt;script &lt;span class=&quot;error&quot; id=&quot;er_langattr&quot;&gt;language=&quot;javascript&quot;&lt;/span&gt;&amp;gt;
&lt;span class=&quot;error&quot; id=&quot;er_comment&quot;&gt;&amp;lt;!--// Dölj från gamla webbläsare&lt;/span&gt;
function hideme() {
    &lt;span class=&quot;error&quot; id=&quot;er_global&quot;&gt;the_div = document.getElementById(&quot;a&quot;);&lt;/span&gt;
    the_div.style.display=&quot;none&quot;;
}
--&amp;gt;
&amp;lt;/script&amp;gt;
&lt;span class=&quot;error&quot; id=&quot;er_noscript&quot;&gt;&amp;lt;noscript&amp;gt;Din webbläsare måste stödja JavaScript
för att denna sida skall fungera.&amp;lt;/noscript&amp;gt;&lt;/span&gt;
&lt;/pre&gt;

&lt;p&gt;Du kan också titta på det &lt;a href=&quot;http://keryx.se/lab/domscript/icke-diskret.html&quot;&gt;kompletta kodexemplet&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;DHTML&lt;/h2&gt;
&lt;p&gt;JavaScript i kombination med CSS salufördes under 90-talet under namnet 
&lt;a href=&quot;http://www.webstandards.org/action/dstf/definitions/&quot;&gt;DHTML&lt;/a&gt;. Och till allra största delen var det av ondo.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Man blandade ihop olika slags kod: HTML, CSS och JavaScript blandades huller om buller.&lt;/li&gt;
  &lt;li&gt;HTML användes fortfarande till att styra utseendet.&lt;/li&gt;
  &lt;li&gt;Skripten ändrade i dokumenten med metoden &lt;code&gt;document.write&lt;/code&gt; som är en mardröm ur varje
  tänkbar aspekt. Metoden borde aldrig ha uppfunnits enligt Brendan Eich (språkets upphovsman).&lt;/li&gt;
  &lt;li&gt;Programkoden var oftast ostrukturerad och grötig. Globala variabler användes och ett skript kunde skriva över variablerna från ett annat skript.&lt;/li&gt;
  &lt;li&gt;Olika webbläsare hade olika DOM-funktioner och för att skilja mellan Netscape och
  Internet Explorer så &lt;q&gt;sniffade&lt;/q&gt; man efter vilken det var och &lt;q&gt;forkade&lt;/q&gt; (förgrenade)
  koden för att hantera skillnaderna. Ibland nöjde sig utvecklarna med att bara stödja den ena och
  uppmanande besökarna att byta webbläsare om de använde &lt;q&gt;fel&lt;/q&gt;.&lt;/li&gt;
  &lt;li&gt;Om JavaScript inte fanns i webbläsaren eller inte var aktiverat så fick man ofta meningslösa meddelande genom &lt;code&gt;&amp;lt;noscript&amp;gt;&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Man hade tabeller i tabeller i tabeller ner till 7-8 nivåer för layout och ramar för att skapa layout.
  Och &lt;a href=&quot;http://en.wikipedia.org/wiki/Spacer_GIF&quot;&gt;spacer-gif-bilder&lt;/a&gt;.
  (Om du inte vet vad jag pratar om är du en lyckans ost!)&lt;/li&gt;
  &lt;li&gt;Man hade popups och popups och fler popups&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Resultatet var måttligt roande:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Sidornas kod blev svår eller omöjlig att felsöka och underhålla.&lt;/li&gt;
  &lt;li&gt;Koden var sällan robust och framtidssäker. Nya versioner av webbläsare kunde innebära att den slutade fungera.&lt;/li&gt;
  &lt;li&gt;Mindre vanliga och nya webbläsare, som Opera och sedan Firefox och Safari exkluderades i onödan.&lt;/li&gt;
  &lt;li&gt;Användarvänligheten på sidorna förbättrades sällan utan blev snarare sämre. Meningslösa animeringar och löjliga skrollande effekter irriterade användarna.&lt;/li&gt;
  &lt;li&gt;Sidorna tog onödigt lång tid att ladda och blev tröga att använda.&lt;/li&gt;
  &lt;li&gt;Sidornas tillgänglighet förstördes och sökmotorerna kom att indexera dem dåligt och ranka dem lågt.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Till utvecklarnas försvar skall det sägas att man inte hade mycket att jobba med. Webbläsarna hade groteska buggar,
ofullständiga implementeringar och lanserade proprietära tekniker i syfte att just tvinga utvecklarna att utveckla
för den egna webbläsaren. Men ärligt talat så berodde det främst på att sidorna utvecklades av utvecklare som saknade
nödvändig kompetens och att de som hade kompetensen inte tyckte webbutveckling var &lt;q&gt;fint&lt;/q&gt; nog.&lt;/p&gt;
&lt;p&gt;Begreppet DHTML är namnet som användes för att beskriva katastrofen.&lt;/p&gt;

&lt;h2&gt;Standardernas segertåg&lt;/h2&gt;
&lt;p&gt;De fyra viktigaste standarderna som en webbsida bygger på är:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;HTML&lt;/li&gt;
  &lt;li&gt;CSS&lt;/li&gt;
  &lt;li&gt;EcmaScript&lt;/li&gt;
  &lt;li&gt;DOM&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Under slutet av 90-talet började äntligen medvetenheten om att följa standarder vinna ett visst fotfäste.
Från och med HTML 4 har vi haft en ganska stabil bas att stå på för HTML-koden. Under år 2003 kom det stora
genombrottet för CSS-baserad layout. Inte minst genom att Netscape Navigator försvunnit från marknaden.
Då slapp vi skilja mellan &lt;code&gt;&amp;lt;layer&amp;gt;&lt;/code&gt; och &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; och kunde använda i vart fall merparten av CSS 1.&lt;/p&gt;
&lt;p&gt;Att &lt;q&gt;använda standarder&lt;/q&gt; blev ofta en synonym för att använda CSS för designen, men i själva verket
var det tre saker som standardbaserad utveckling bestod av:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Att inte använda proprietär kod.&lt;/li&gt;
  &lt;li&gt;Att skriva validerande och semantisk HTML.&lt;/li&gt;
  &lt;li&gt;Att separera designen från innehållet och använda CSS för den.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Men JavaScript förblev ett bekymmer. Skillnaderna mellan DOM-standarderna, som nu började implementeras i
Opera och Firefox och Microsofts egen DOM i Internet Explorer förblev stora.
Det var i den här situationen som bl.a. Web Standards Project DOM Scripting Task Force identifierade en
möjlig väg att börja använda skript på ett vettigt sätt. Först behövdes ett nytt namn som signalerade det nya tänkandet.&lt;/p&gt;

&lt;h2&gt;(3) DOM-skript&lt;/h2&gt;
&lt;blockquote lang=&quot;en&quot;&gt;&lt;p&gt;Only the adoption of unobtrusive DOM scripting will do away with outdated, uninformed,
and inaccessible development methods. Only the adoption of unobtrusive DOM scripting will allow JavaScript, and thus web development in general, to attain its full potential.&lt;/p&gt;
&lt;p style=&quot;text-align: right&quot;&gt;&lt;small&gt;&lt;a href=&quot;http://www.webstandards.org/action/dstf/manifesto/&quot;&gt;The
DOM Scripting Manifesto&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Så som ordet här används handlar det om mer än att rent tekniskt använda DOM-funktioner. Det handlar
om att ha en helhetslösning för välskriven kod, god praxis, användbarhet, och tillgänglighet.
JavaScript skall användas för att förbättra en webbplats användbarhet, men med undantag för regelrätta
applikationer som Google Docs, så skall den fungera på en basnivå även om JavaScript inte har aktiverats i
webbläsaren. Precis som man kan se om HTML-koden är bra om man kör 
&lt;a href=&quot;http://naked.dustindiaz.com/&quot;&gt;&lt;q&gt;naket&lt;/q&gt;&lt;/a&gt;, så skall ingen funktionalitet vara omöjlig att använda utan skript.&lt;/p&gt;

&lt;p&gt;Fler än man tror saknar JavaScript: Det kan vara användare som blockerar det av säkerhetsskäl, företag som
strippar ut skript i sina proxies och mobilsurfare som använder Opera Mini pga hög kostnad för överförd data eller dålig bandbredd.&lt;/p&gt;

&lt;p&gt;Däremot finns det ingen  absolut ingen  som använder en så gammal webbläsare att skripten måste döljas
från dem med HTML-kommentarer. Det finns fortfarande guider som föreslår att du använder dem, trots att det
inte behövts på snart 15 år. Det &lt;a href=&quot;blogg-69#er_comment&quot;&gt;var ett av felen&lt;/a&gt; i kodexemplet ovan.&lt;/p&gt;

&lt;p&gt;JavaScript bör infogas som &lt;a href=&quot;http://en.wikipedia.org/wiki/Progressive_enhancement&quot;&gt;progressive enhancement&lt;/a&gt;.
Då behövs ingen fallback med &lt;code&gt;&amp;lt;noscript&amp;gt;&lt;/code&gt;.
&lt;a href=&quot;blogg-69#er_noscript&quot;&gt;Noscript-koden&lt;/a&gt; ovan hade även ett dåligt innehåll, men rätt utfört behövs alltså inte noscript-taggarna alls!&lt;/p&gt;

&lt;h3&gt;Andra viktiga principer för DOM-skript&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;Man bör koda för standarder först, och hantera enskilda webbläsares brister bara när det behövs.&lt;/li&gt;
  &lt;li&gt;I stället för att browsersniffa så bör man kapacitetsdetektera eller bug-detektera. Kan Jquery kan du!&lt;/li&gt;
  &lt;li&gt;All kod bör vara &lt;q lang=&quot;en&quot;&gt;self contained&lt;/q&gt; och inte förpesta den globala namnrymden med globala symboler.
  Såväl funktionen hideme som &lt;a href=&quot;blogg-69#er_global&quot;&gt;variabeln the_link i koden ovan&lt;/a&gt; bryter mot denna princip.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;(2) Diskreta = Unobtrusive&lt;/h2&gt;
&lt;p&gt;Det ord jag ville använda i kursplanen, men som definitivt inte finns på svenska är
&lt;q lang=&quot;en&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Unobtrusive_JavaScript&quot;&gt;unobtrusive&lt;/a&gt;&lt;/q&gt;.
Jag skrev en uppsats &lt;a href=&quot;http://keryx.se/lab/domscript/sv/icke-inkraktande-javaskript-1.1.pdf&quot;&gt;(PDF)&lt;/a&gt;
om detta på Högskolan Väst för ett par år sedan och myntade då själv begreppet diskreta skript.&lt;/p&gt;
&lt;p&gt;Ett skript som är &lt;q&gt;diskret&lt;/q&gt; tränger sig inte på (&lt;span class=&quot;error&quot; lang=&quot;en&quot;&gt;obtrude&lt;/span&gt;), utan är helt separerat från HTML och CSS-koden.
Det styr inte designen, men kan aktivera ändringar och animeringar. Detta kräver några saker:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Allt bruk av &lt;code&gt;document.write&lt;/code&gt; måste upphöra! Du vinner dessutom prestanda och en
  massa andra fördelar, så förlusten är inte tung att bära.&lt;/li&gt;
  &lt;li&gt;Alla &lt;a href=&quot;http://www.quirksmode.org/js/events_early.html&quot;&gt;inline event handlers&lt;/a&gt; måste bort.
  De har flera nackdelar. Dels så inkräktar de på HTML-koden och är alltså lika illa att 
  använda som inline CSS. Dels så tolkas de som eval. Och &lt;a href=&quot;http://xkr.us/js/eval&quot;&gt;eval is evil&lt;/a&gt;  av en mängd skäl,
  inte minst prestanda och scoping &lt;a href=&quot;http://perfectionkills.com/understanding-delete/&quot;&gt;som kan lura de bästa&lt;/a&gt;. 
  Dessutom förutsätter de ofta globala symboler för att fungera. Alla dessa problem finns i kodexemplet ovan. (target)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Var skall skripten placeras?&lt;/h2&gt;
&lt;p&gt;Först och främst gäller samma regel som för CSS: Skripten skall placeras i egna filer, externt, och
laddas in via src-attributet. Det är grundregeln som bara får brytas om du arbetar på expertnivå och måste
trycka ut några mikrosekunders bättre prestanda ur din webbplats.&lt;/p&gt;
&lt;p&gt;När webbläsare ser en vanlig script-tagg med src-attribut, så avbryter de tolkningen av sidan,
hämtar hem skriptet  vilket tar tid  och tolkar skriptet  vilket tar ännu mer tid. Sedan fortsätter de tolka resten av HTML-koden.&lt;/p&gt;
&lt;p&gt;Av det här skälet är det bäst att placera skripten allra
&lt;a href=&quot;http://developer.yahoo.com/performance/rules.html#js_bottom&quot;&gt;&lt;strong&gt;sist&lt;/strong&gt;&lt;/a&gt; i body-elementet,
precis före dess sluttagg. Då har man dessutom fördel av att hela DOM-strukturen hunnit laddas in i datorns
minne och är åtkomlig för skripten. Man kan ju inte göra en &lt;code&gt;getElementById(&quot;a&quot;)&lt;/code&gt; innan elementet med id=&quot;a&quot; har lästs in.&lt;/p&gt;
&lt;p&gt;Alternativet är att placera skripten i head-delen av dokumentet och sedan aktivera dem med en händelse, men det har några nackdelar:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Man kan få parallell nedladdning av skripten genom
    &lt;a href=&quot;https://developer.mozilla.org/En/HTML/Element/Script&quot;&gt;attributen async eller defer&lt;/a&gt;,
    men de stöds inte ännu av alla webbläsare och måste betraktas som överkurs på en nybörjarkurs.&lt;/li&gt;
  &lt;li&gt;Man kan använda händelsen &lt;q&gt;load&lt;/q&gt;, men den triggas först när också alla bilder och all annan media laddats ner, vilket ofta är för sent.&lt;/li&gt;
  &lt;li&gt;Man kan använda händelsen &lt;a href=&quot;https://developer.mozilla.org/en/Gecko-Specific_DOM_Events&quot;&gt;DOMContentLoaded&lt;/a&gt;, men den stöds ännu bara i vissa webbläsare.&lt;/li&gt;
  &lt;li&gt;Man kan trigga skripten genom &lt;q&gt;pollning&lt;/q&gt;, vilket definitivt är överkurs på gymnasienivå, eller på 
  &lt;a href=&quot;http://interact.webstandards.org/curriculum/front-end-development/dom-scripting-1?comp&quot;&gt;grundläggande högskolenivå&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Däremot kan man använda sig av färdiggjorda expertlösningar i form av kodbibliotek som Jquery, Motools eller YUI. Vilket för oss till sista steget.&lt;/p&gt;

&lt;h2&gt;(1) Eleven skall &lt;em&gt;infoga&lt;/em&gt; skript&lt;/h2&gt;

&lt;p&gt;För kursen Webbutveckling 1 förväntas inte eleverna skriva några egna längre skript.
Däremot bör de kunna &lt;strong&gt;infoga&lt;/strong&gt; väl valda skript som &lt;strong&gt;andra&lt;/strong&gt; utvecklat.
Kanske vill de ha en slideshow för sina bilder och då kan den JQuery baserade lösningen
&lt;a href=&quot;http://nivo.dev7studios.com/&quot;&gt;Nivo slider&lt;/a&gt; vara lösningen. Kanske vill de ha en enkel visa/dölj effekt, eller en rullgardinsmeny.&lt;/p&gt;

&lt;p&gt;När elever väljer en lösning så måste de kunna bedöma kvalitén eller ställa rätt frågor. De måste
i vart fall ha såpass mycket terminologi och förståelse med sig så att de kan söka på nätet eller ställa
rätt frågor på ett forum. Dessutom bör de känna igen de viktigaste varningstecknen på
&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.dynamicdrive.com/&quot;&gt;dåliga DHTML-liknande&lt;/a&gt; lösningar.&lt;/p&gt;

&lt;p&gt;Slutligen behöver de känna igen mönstret för hur man fäster händelser på objekt. Här visar jag hur
man kan göra om koden från det dåliga exemplet ovan och lägger till en aning överkurs. Jag gör mitt skript
självexekverande, så att inte en enda symbol läggs till den globala namnrymden.&lt;/p&gt;

&lt;h2&gt;Hur skall det då göras?&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://keryx.se/lab/domscript/diskret.html&quot;&gt;Så här kan man göra i ren JavaScript&lt;/a&gt; när
man löser samma sak som i det dåliga exemplet:&lt;/p&gt;

&lt;pre class=&quot;codeblock&quot;&gt;
&amp;lt;div id=&quot;a&quot;&amp;gt;Lorem ipsum dolor sit amet.&amp;lt;/div&amp;gt;
&amp;lt;!-- Knappen infogas med javascript --&amp;gt;

&amp;lt;script&amp;gt;
// Ja detta borde vara externt men ligger här
// för att spara lite möda för dig kära läsare
(function () {
    &quot;use strict&quot;;
    var the_div = document.getElementById(&quot;a&quot;);
    // Med var-deklarationen görs variabeln lokal
    var btn = document.createElement(&quot;button&quot;);
    btn.innerHTML = &quot;Dölj texten&quot;;
    btn.onclick = function () {
        // Anonym funktion för enstaka ad hoc bruk
        // DOM 0 event handler är enklast för nybörjare
        // Inre funktion kommer åt variabel från
        // yttre funktion
        the_div.style.display=&quot;none&quot;;
    }
    // Av utrymmesskäl gör vi det osäkra antagandet
    // att the_div har efterföljande syskon
    the_div.parentNode
        .insertBefore(btn, the_div.nextSibling);
    
})(); // self executing closure
&amp;lt;/script&amp;gt;
&lt;/pre&gt;

&lt;p&gt;Några ytterligare kommentarer:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Vi använder &lt;q&gt;use strict&lt;/q&gt; för att hålla skriptet rent från somliga dåliga delar av JavaScript-standarden, som aldrig borde ha uppfunnits.&lt;/li&gt;
  &lt;li&gt;Knappen hoppar runt lite, men det kan lösas om detta exempel vore &lt;q&gt;på riktigt&lt;/q&gt;.&lt;/li&gt;
  &lt;li&gt;HTML-koden validerar (nästan) för både den dåligt skrivna sidan. Men
  &lt;a href=&quot;http://www.jshint.com/&quot;&gt;JSHint&lt;/a&gt; larmar om problem för den dåliga skriptkoden.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;http://keryx.se/lab/domscript/diskret-jquery.html&quot;&gt;Så här kan man göra i JQuery&lt;/a&gt;
 och detta är vad jag förväntar mig att elever skall kunna:&lt;/p&gt;
&lt;pre class=&quot;codeblock&quot;&gt;
&amp;lt;div id=&quot;a&quot;&amp;gt;Lorem ipsum dolor sit amet.&amp;lt;/div&amp;gt;
&amp;lt;!-- Knappen infogas med javascript --&amp;gt;

&amp;lt;script&amp;gt;
(function () {
    &quot;use strict&quot;;
    var the_div = $(&quot;#a&quot;);
    var btn = $(&quot;&amp;lt;button&amp;gt;Dölj/visa texten&amp;lt;/button&amp;gt;&quot;)
    .click( function () {
        the_div.toggle(&quot;slow&quot;);
    });
    btn.insertAfter(the_div);
})(); // self executing closure
&amp;lt;/script&amp;gt;
&lt;/pre&gt;

&lt;h2&gt;Felen i det dåliga exemplet&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;blogg-69#er_btn&quot;&gt;Knappen skapades inte med JavaScript&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;blogg-69#er_btn&quot;&gt;Knappen hade en inline event handler&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;blogg-69#er_btn&quot;&gt;Inline event handlern har en underförstådd eval&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;blogg-69#er_langattr&quot;&gt;Attributet language skall inte användas&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;blogg-69#er_comment&quot;&gt;Kommentarer för att dölja skriptet är så 1995&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;blogg-69#er_global&quot;&gt;Variabeln the_div&lt;/a&gt; deklarerades inte med 
    &lt;a href=&quot;https://developer.mozilla.org/en/JavaScript/Reference/Statements/var&quot;&gt;var&lt;/a&gt; och är därför global.&lt;/li&gt;
  &lt;li&gt;(Funktionen hideme är också global, men på nybörjarnivå kan man leva med det.)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Bonustips&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;blogg-69#er_langattr&quot;&gt;Attributet language&lt;/a&gt; är ett säkert tecken på att ett skript är föråldrat.
Det var det sista felet som jag nämner i koden ovan. I HTML 4.01 och XHTML 1.x
&lt;a href=&quot;http://www.javascripttoolbox.com/bestpractices/#script&quot;&gt;så krävdes attributet type&lt;/a&gt;, men i HTML5
så är det frivilligt och det har alltid varit onödigt. Jag har inte med det i min förbättrade kod.&lt;/p&gt;

&lt;h2&gt;P.S&lt;/h2&gt;
&lt;p&gt;Min egen webbplats har inte fått något designlyft på flera år. Jag har inte tid! Vill någon göra något åt detta så kontakta mig.&lt;/p&gt;
</description>
         <pubDate>Tue, 11 Oct 2011 21:02:25 +0200</pubDate>
         <author>gunther@keryx.se (Lars Gunther)</author>
         <category domain="http://www.keryx.se/rss/kategorier.php">keryx/gunther/blogg</category>
         <guid isPermaLink="true">http://www.keryx.se/blogg-69</guid>
      </item>      <item>
         <title>Framtidens programmeringsundervisning = patterns and paradigms first (del 3)</title>
         <link>http://www.keryx.se/blogg-68</link>
         <description>&lt;p&gt;  De elever jag undervisar kommer vara aktiva i utvecklingen av olika slags mjukvara från år 2011 till kanske år 2055.
  Vi kan inte hålla på och &lt;a href=&quot;https://lists.su.se/archive/public/programming-at-mnd.su.se/msg00032.html&quot;&gt;diskutera
  som om det fortfarande vore 1993&lt;/a&gt;. Vi lärare måste blicka framåt. Jag är inte så värs bekymrad över att dagens
  elever inte lär sig assembler eller ens sorteringsalgoritmer. Ytterst få kommer jobba på den nivån. 99 % av alla utvecklare
  på morgondagens arbetsmarknad kommer jobba på en högre abstraktionsnivå.
&lt;/p&gt;
&lt;h2&gt;Sortering är inte (längre) svårt&lt;/h2&gt;

&lt;p&gt;
  Alla moderna språk har tillgång till högoptimerade bibliotek med färdiga sorteringsfunktioner. Att sortera är inte svårare
  &lt;a href=&quot;http://www.leepoint.net/notes-java/data/arrays/70sorting.html&quot;&gt;än att skriva sort&lt;/a&gt; i sin kod. Den som kan
  läsa manualen kommer alltid vinna över den som återimplementerar redan befintliga funktioner i sin egen kod.
&lt;/p&gt;
&lt;p&gt;
  &lt;img src=&quot;bilder/merge-sort-recursion-tree-mindre-viktigt.png&quot; alt=&quot;Sorteringsalgoritm - mindre viktigt&quot; width=&quot;440&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
  Varför fokuseras då sorteringsalgoritmer så mycket? För att &lt;em&gt;dagens&lt;/em&gt; lärare har fått lära sig dessa och fått
  intutat i sig att de är viktiga.
&lt;/p&gt;
&lt;p&gt;
  Ett annat exempel: Jag och mina kollegor som började med datorer på 70-talet &amp;#8211; jo, jag är så gammal &amp;#8211;
  är uppvuxna med en programmering som fokuserat frågor om maximalt nyttjande av hårdvaran.
  &lt;a href=&quot;http://en.wikipedia.org/wiki/PEEK_and_POKE&quot;&gt;Peek och poke&lt;/a&gt; blandades in i Basic för att öka farten!
  Kort sagt, vår Basic hade inslag av assembler.  Men varför skall dagens nya utvecklare gå igenom
  &lt;em&gt;våra&lt;/em&gt; utvecklingsfaser?
&lt;/p&gt;

&lt;h2&gt;Paradigmskiften&lt;/h2&gt;

&lt;p&gt;
  &lt;a href=&quot;blogg-68#crockonjs1&quot;&gt;Programmerare är ett &lt;em&gt;konservativt&lt;/em&gt;
  släkte.&lt;/a&gt; Detta säger en av mina gurus, Douglas Crockford. Det är som om varje förbättring
  i våra arbetsmetoder och vårt sätt att programmera kräver ett generationsskifte:
&lt;/p&gt;

&lt;blockquote lang=&quot;en&quot;&gt;
  &lt;p&gt;
    Who was most enraged by this suggestion [to drop goto]? Programmers. This debate went on for literally a decade,
    for two decades, for a generation, arguing about whether GOTO should be eliminated or not. Ultimately we got rid
    of it, and that was the right thing to do. I think it's not coincidental that &lt;strong&gt;it took a generation to do it&lt;/strong&gt;,
    because basically we had to come up and train a whole new set of people &lt;strong&gt;who were not stuck in the previous
    idea&lt;/strong&gt;. Again, who better should have understood the value of structuring your programs in
    such a way that they could scale better? Only programmers should understand the value of that argument, and
    &lt;strong&gt;programmers were least able to understand that argument&lt;/strong&gt;. &lt;span lang=&quot;sv&quot;&gt;(Mina betoningar.)&lt;/span&gt;
  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
  Att få en överblick om olika programmeringsparadigm och att kunna ta till sig de paradigm som kommer
  få störst betydelse i framtidens utveckling ser jag som en klart viktigare kunskap, än att återskapa
  alla algoritmer som forskades fram på 60- och 70-talen. Åtminstone inte på gymnasienivå.
&lt;/p&gt;
&lt;p&gt;
  &lt;em&gt;Somliga&lt;/em&gt; programmerare kommer behöva djup förankring i datavetenskapen, så som den presenteras på högskolan,
  men det gäller inte alla. Och speciellt inte de som kommer få jobb efter ett fjärde år på gymnasiet. &lt;em&gt;Branschen
  var mycket tydlig med detta.&lt;/em&gt; Det är &lt;em&gt;inte&lt;/em&gt; gymnasiets jobb att utbilda framtidens programmerare i klassisk
  mening. Från början var uppdraget inte ens att utbilda något annat än webbutvecklare, men &lt;a href=&quot;blogg-67&quot;&gt;som jag
  tidigare skrivit&lt;/a&gt;, så menar jag att disciplinerna konvergerar och att en sådan utgång skulle därför bli för snäv.
&lt;/p&gt;

&lt;h2&gt;Att förstå &lt;span lang=&quot;en&quot;&gt;patterns&lt;/span&gt; är viktigare algorimer&lt;/h2&gt;

&lt;p&gt;
  I det arbete jag förutser &lt;strong&gt;för gymnasieingenjörer&lt;/strong&gt;, så ingår alltså inte problemen att skapa perfekta,
  sökalgorimer optimerade simuleringsflöden eller program för &lt;span lang=&quot;en&quot;&gt;data-mining&lt;/span&gt;.  
  Däremot tror jag de kan jobba med
  &lt;a href=&quot;http://en.wikipedia.org/wiki/Internationalization_and_localization&quot;&gt;lokalisering&lt;/a&gt;, att
  &lt;a href=&quot;http://en.wikipedia.org/wiki/Test-driven_development&quot;&gt;skriva tester&lt;/a&gt; utifrån
  &lt;a href=&quot;http://java.sun.com/developer/technicalArticles/bugreport_howto/&quot;&gt;buggrapporter&lt;/a&gt;,
  &lt;a href=&quot;http://en.wikipedia.org/wiki/Porting&quot;&gt;porta&lt;/a&gt; en iOS app till Android,
  &lt;a href=&quot;http://drupal.org/&quot;&gt;skapa en webbplats med Drupal&lt;/a&gt; och
  &lt;a href=&quot;http://jquery.com/&quot;&gt;JQuery&lt;/a&gt; och
  &lt;a href=&quot;http://docs.jquery.com/Plugins/Authoring&quot;&gt;komplettera ett sådant kodbibliotek&lt;/a&gt; med några inte alltför
  komplicerade egna funktioner.
&lt;/p&gt;
&lt;svg
   width=&quot;440&quot;
   height=&quot;207&quot;
   viewBox=&quot;0 0 321 151&quot;
   id=&quot;svg7278&quot;&gt;
   &lt;!-- SVG hämtad från Wikipedia --&gt;
  &lt;defs
     id=&quot;defs7280&quot;&gt;
    &lt;filter
       id=&quot;filter6394&quot;&gt;
      &lt;feGaussianBlur
         stdDeviation=&quot;0.3875&quot;
         id=&quot;feGaussianBlur6396&quot; /&gt;
    &lt;/filter&gt;
  &lt;/defs&gt;
  &lt;g
     transform=&quot;translate(-265.21429,-845.43359)&quot;
     id=&quot;layer1&quot;&gt;
    &lt;rect
       width=&quot;90&quot;
       height=&quot;65&quot;
       x=&quot;271.55518&quot;
       y=&quot;947.85199&quot;
       transform=&quot;matrix(0.7074374,0,0,0.6415007,78.698602,338.9241)&quot;
       style=&quot;fill:#000000;fill-opacity:0.17105264;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter6394)&quot;
       id=&quot;rect6392&quot; /&gt;

    &lt;path
       d=&quot;M 346.47585,962.69799 L 332.99552,954.90599 L 346.47585,947.11399&quot;
       style=&quot;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.10000002;stroke-linejoin:bevel;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none&quot;
       id=&quot;path6676&quot; /&gt;
    &lt;path
       d=&quot;M 333.4605,954.90599 L 509.86202,954.90599&quot;
       style=&quot;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6, 6;stroke-dashoffset:0;stroke-opacity:1&quot;
       id=&quot;path6681&quot; /&gt;
    &lt;rect
       width=&quot;90&quot;
       height=&quot;65&quot;
       x=&quot;271.55518&quot;
       y=&quot;947.85199&quot;
       transform=&quot;matrix(0.7815277,0,0,0.6774108,298.7108,304.98546)&quot;
       style=&quot;fill:#000000;fill-opacity:0.17105264;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter6394)&quot;
       id=&quot;rect7872&quot; /&gt;
    &lt;rect
       width=&quot;90&quot;
       height=&quot;65&quot;
       x=&quot;271.55518&quot;
       y=&quot;947.85199&quot;
       transform=&quot;matrix(0.7446308,0,0,0.6339547,187.07127,250.37844)&quot;
       style=&quot;fill:#000000;fill-opacity:0.17105264;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter6394)&quot;
       id=&quot;rect7880&quot; /&gt;
    &lt;path
       d=&quot;M 496.33169,984.95883 L 509.81202,977.16683 L 496.33169,969.37483&quot;
       style=&quot;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.10000002;stroke-linejoin:bevel;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none&quot;
       id=&quot;path7888&quot; /&gt;
    &lt;path
       d=&quot;M 509.34704,977.16683 L 332.94552,977.16683&quot;
       style=&quot;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1&quot;
       id=&quot;path7890&quot; /&gt;
    &lt;path
       d=&quot;M 374.52257,877.70179 L 388.0029,869.90979 L 374.52257,862.11779&quot;
       style=&quot;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.10000002;stroke-linejoin:bevel;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none&quot;
       id=&quot;path7892&quot; /&gt;
    &lt;path
       d=&quot;M 387.53792,869.90979 L 301.6999,869.90979 L 301.6999,945.58279&quot;
       style=&quot;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6, 6;stroke-dashoffset:0;stroke-opacity:1&quot;
       id=&quot;path7894&quot; /&gt;
    &lt;path
       d=&quot;M 494.63414,941.37478 L 509.61587,945.61533 L 505.81276,930.51662&quot;
       style=&quot;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.10000002;stroke-linejoin:bevel;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none&quot;
       id=&quot;path7896&quot; /&gt;

    &lt;path
       d=&quot;M 509.29189,945.28179 L 454.73391,890.51384&quot;
       style=&quot;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1&quot;
       id=&quot;path7898&quot; /&gt;
    &lt;path
       d=&quot;M 348.20062,941.37478 L 333.21889,945.61533 L 337.022,930.51662&quot;
       style=&quot;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.10000002;stroke-linejoin:bevel;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none&quot;
       id=&quot;path7900&quot; /&gt;
    &lt;path
       d=&quot;M 333.54287,945.28179 L 387.85675,890.75795&quot;
       style=&quot;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1&quot;
       id=&quot;path7902&quot; /&gt;
    &lt;rect
       width=&quot;70.337494&quot;
       height=&quot;44.031704&quot;
       x=&quot;509.37564&quot;
       y=&quot;945.71582&quot;
       style=&quot;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.72760928;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1&quot;
       id=&quot;rect7874&quot; /&gt;
    &lt;text
       x=&quot;544.52649&quot;
       y=&quot;960.37836&quot;
       style=&quot;font-size:10.49006271px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial&quot;
       id=&quot;text7876&quot;
       xml:space=&quot;preserve&quot;&gt;&lt;tspan
         x=&quot;544.52649&quot;
         y=&quot;960.37836&quot;
         id=&quot;tspan7878&quot;&gt;Model&lt;/tspan&gt;&lt;/text&gt;
    &lt;rect
       width=&quot;67.016769&quot;
       height=&quot;41.207058&quot;
       x=&quot;387.79034&quot;
       y=&quot;850.0058&quot;
       style=&quot;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.68706781;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1&quot;
       id=&quot;rect7882&quot; /&gt;
    &lt;text
       x=&quot;420.97092&quot;
       y=&quot;864.6886&quot;
       style=&quot;font-size:10.49006271px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial&quot;
       id=&quot;text7884&quot;
       xml:space=&quot;preserve&quot;&gt;&lt;tspan
         x=&quot;420.97092&quot;
         y=&quot;864.6886&quot;
         id=&quot;tspan7886&quot;&gt;Controller&lt;/tspan&gt;&lt;/text&gt;
    &lt;rect
       width=&quot;63.669365&quot;
       height=&quot;41.697548&quot;
       x=&quot;269.392&quot;
       y=&quot;945.68884&quot;
       style=&quot;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.67366278;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1&quot;
       id=&quot;rect6390&quot; /&gt;

    &lt;text
       x=&quot;300.85788&quot;
       y=&quot;960.37836&quot;
       style=&quot;font-size:10.49006271px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial&quot;
       id=&quot;text6402&quot;
       xml:space=&quot;preserve&quot;&gt;&lt;tspan
         x=&quot;300.85788&quot;
         y=&quot;960.37836&quot;
         id=&quot;tspan6404&quot;&gt;View&lt;/tspan&gt;&lt;/text&gt;
  &lt;/g&gt;
&lt;/svg&gt;

&lt;p&gt;  
  För den sortens arbete är det viktigt att man förstår &lt;dfn&gt;applikationsarkitektur&lt;/dfn&gt; och 
  &lt;a href=&quot;http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29&quot;&gt;designmönster&lt;/a&gt;.
  Att kunna känna igen, använda och skapa
  &lt;dfn&gt;singletons&lt;/dfn&gt;, &lt;dfn&gt;factorymetoder&lt;/dfn&gt;, &lt;dfn lang=&quot;en&quot;&gt;active record&lt;/dfn&gt; eller en
  &lt;dfn lang=&quot;en&quot;&gt;front end controler&lt;/dfn&gt;, &lt;strong&gt;det&lt;/strong&gt; är saker &lt;em&gt;jag&lt;/em&gt; tycker är grunder!
&lt;/p&gt;

&lt;h2&gt;Historia och framtid&lt;/h2&gt;

&lt;p&gt;
  Specifikt för gymnasiets teknikprogram är att eleverna skall få helhetsbilder inom sina teknikområden. Yrkeshögskolorna
  utbildar med stor specialisering mot enskilda arbetplatser. De kan ge en utbildning som bara fokuserar exempelvis
  Flash eller &lt;abbr lang=&quot;en&quot; title=&quot;Rich Information Architecture&quot;&gt;RIA&lt;/abbr&gt;. Universitet och högskolor skall
  soms sagt fokusera på datavetenskap. Gymnasiet skall däremot ge en bredare kunskap.
&lt;/p&gt;

&lt;p&gt;
  &lt;img src=&quot;bilder/two_women_operating_eniac.gif&quot; title=&quot;2 kvinnor som sköter ENIAC. (Från Wikipedia.)&quot;
  alt=&quot;Switchboard som styr ENIAC&quot; width=&quot;440&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
  Som en konsekvens av detta tror jag på att lära eleverna historisk kunskap om hur programmeringen har utvecklats
  från Eniacs dagar till våra.
  Jag tror bara inte att vi skall låta dem i detalj &lt;em&gt;återuppleva&lt;/em&gt; historien. Men den sortens kunskap
  som Douglas Crockford framför i detta föredrag är klart väsentlig. (Föredraget inleder en serie om JavaScript,
  men handlar till 80 % om programmering i allmänhet.)
&lt;/p&gt;

&lt;object width=&quot;440&quot; height=&quot;248&quot; id=&quot;crockonjs1&quot; type=&quot;application/x-shockwave-flash&quot;
        data=&quot;http://d.yimg.com/nl/ydn/default/player.swf&quot;&gt;
  &lt;param name=&quot;movie&quot; value=&quot;http://d.yimg.com/nl/ydn/default/player.swf&quot; /&gt;
  &lt;param name=&quot;flashVars&quot; value=&quot;vid=17957562&amp;&quot; /&gt;
  &lt;param name=&quot;allowfullscreen&quot; value=&quot;true&quot; /&gt;
  &lt;param name=&quot;wmode&quot; value=&quot;transparent&quot; /&gt;
  &lt;embed width=&quot;440&quot; height=&quot;248&quot;
         allowFullScreen=&quot;true&quot;
         src=&quot;http://d.yimg.com/nl/ydn/default/player.swf&quot;
         type=&quot;application/x-shockwave-flash&quot;
         flashvars=&quot;vid=17957562&amp;&quot; /&gt;
  &lt;p&gt;
    Douglas crockford föreläser om programmeringens historia. (Flash krävs.)
    &lt;a href=&quot;http://developer.yahoo.com/yui/theater/video.php?v=crockonjs-1&quot;&gt;Källa&lt;/a&gt;
  &lt;/p&gt;
&lt;/object&gt;

&lt;p&gt;
  Om du har det allra lilla minsta intresse för programmering, så skall du lyssna på
  &lt;a href=&quot;http://developer.yahoo.com/yui/theater/video.php?v=crockonjs-1&quot;&gt;detta föredrag&lt;/a&gt; av &lt;span lang=&quot;en&quot;&gt;
  the Crock&lt;/span&gt;. Allt annat är tjänstefel!
&lt;/p&gt;

&lt;p&gt;
  Ett liknande synssätt finns i denna artikel av Gary pollice, med den talande rubriken 
  &lt;a lang=&quot;en&quot; href=&quot;http://www.ibm.com/developerworks/rational/library/oct05/pollice/index.html&quot;&gt;&lt;strong&gt;Beyond&lt;/strong&gt; an 
  objects-first approach&lt;/a&gt;.
&lt;/p&gt;

&lt;blockquote lang=&quot;en&quot;&gt;
  &lt;p&gt;
    I also noticed that people who were competent with functional languages, such as LISP, could adapt to the
    &lt;abbr title=&quot;Object Oriented&quot;&gt;OO&lt;/abbr&gt; languages and methods with greater ease than I could.
  &lt;/p&gt;
  &lt;p&gt;&amp;hellip;&lt;/p&gt;
  &lt;p&gt;
    Students who come from an objects-first program have learned the hard part of software development.
    &lt;strong&gt;They understand design principles and how to manage complexity.&lt;/strong&gt; (Min betoning.)
  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
  Nej. Våra elever måste inte vandra igenom den utveckling vi som lärare gjort. De måste inte börja med radbaserad
  imperativ programmering, för att gå vidare till strukturer och sedan objekt &amp;ndash; och stanna där!
&lt;/p&gt;

&lt;p&gt;
  Vad det sista stycket i citatet ovan illustrerar är att det svåra som måste bemästras är inte syntax eller kommandon,
  utan att kunna bygga ihop ett program, enligt en funktionell och modulär arkitektur.
&lt;/p&gt;

&lt;p&gt;
  För 2010-talet så måste vi ställa oss frågan vad kommer &lt;strong&gt;efter&lt;/strong&gt;
  &lt;abbr title=&quot;objektorientering&quot;&gt;OO&lt;/abbr&gt;? Vad för landskap skall våra elever
  vandra igenom när deras karriär kommer vara mellan år 2015 och år 2055? Historia är alltid bra, men att föra vidare
  grälen från 90-talets början mellan objektorienterad och strukturerad programmering, det känns som att utvärdera
  huruvida våra fordon skall dras av hästar eller drivas med bensinmotorer, just när vi borde leta efter något annat
  än bensin.
&lt;/p&gt;

&lt;h2&gt;Funktionell programmering&lt;/h2&gt;

&lt;p&gt;
  Gary Pollice drar en lans för &lt;a href=&quot;http://en.wikipedia.org/wiki/Aspect-oriented_programming&quot;&gt;aspektorienterad
  programmering&lt;/a&gt;. Själv tror jag att funktionell programmering kommer ta en stor del av marknaden. På minst tre sätt:
&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    Befintliga språk &lt;strong&gt;utökas&lt;/strong&gt; med funktionella möjligheter. Exempelvis har PHP 5.3 såväl
    &lt;a href=&quot;http://en.wikipedia.org/wiki/Lambda_%28programming%29&quot;&gt;lambda&lt;/a&gt; som
    &lt;a lang=&quot;en&quot; href=&quot;http://en.wikipedia.org/wiki/Closure_(computer_science)&quot;&gt;closures&lt;/a&gt;.
  &lt;/li&gt;
  &lt;li&gt;
    Tydligt funktionella språk, som 
    &lt;a href=&quot;http://en.wikipedia.org/wiki/Objective_Caml&quot;&gt;OCaml&lt;/a&gt;, 
    &lt;a href=&quot;http://en.wikipedia.org/wiki/Haskell_%28programming_language%29&quot;&gt;Haskell&lt;/a&gt;, 
    &lt;a href=&quot;http://en.wikipedia.org/wiki/Clojure&quot;&gt;Clojure&lt;/a&gt;, 
    &lt;a href=&quot;http://en.wikipedia.org/wiki/Erlang_%28programming_language%29&quot;&gt;Erlang&lt;/a&gt;,
    &lt;a href=&quot;http://en.wikipedia.org/wiki/F_Sharp_%28programming_language%29&quot; title=&quot;F sharp&quot;&gt;F#&lt;/a&gt;,
    &lt;a href=&quot;http://en.wikipedia.org/wiki/Scala_%28programming_language%29&quot;&gt;Scala&lt;/a&gt; och inte minst
    &lt;a href=&quot;http://en.wikipedia.org/wiki/Ruby_%28programming_language%29&quot;&gt;Ruby&lt;/a&gt;
    &lt;strong&gt;vinner terräng&lt;/strong&gt;. (Många av dessa kan användas i hybridläge mellan 
    &lt;abbr&gt;OO&lt;/abbr&gt; och funktionell programmering.)
  &lt;/li&gt;
  &lt;li&gt;
    &lt;strong&gt;JavaScript&lt;/strong&gt; är redan världens mest använda programmeringsspråk, och växer snabbare än något annat.
    JavaScript är baserat på Self och Scheme och i grunden alltså ett funktionellt språk, 
    &lt;a href=&quot;http://bc.tech.coop/blog/030920.html&quot;&gt;med många drag av Lisp&lt;/a&gt;,
    &lt;a href=&quot;http://www.paulgraham.com/icad.html&quot;&gt;alla funktionella språks urmoder&lt;/a&gt;.
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Ett exempel ur verkligheten&lt;/h2&gt;

&lt;p&gt;
  Jag har precis skaffat mig en &lt;a href=&quot;http://www.livescribe.com/&quot;&gt;LiveScribe penna&lt;/a&gt;. Jag älskar den!
  Men det finns inget stöd för Linux och jag är en Linuxälskare av stora mått, så när jag sökte efter ett program
  för Linux, så hittade jag 
  &lt;a href=&quot;http://dylanmtaylor.com/2011/04/09/librescribe-my-latest-and-most-challenging-project/&quot;&gt;LibreScribe&lt;/a&gt;.
  Och det här citatet:
&lt;/p&gt;

&lt;blockquote lang=&quot;en&quot;&gt;
  &lt;p&gt;
    Even small things, such as documenting functions, adding comments, ensuring source code style consistency,
    and making it easier to maintain the source code are incredibly important.
  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
  Som taget ur mina kursplaner och min idé om att &lt;a href=&quot;/blogg-64&quot;&gt;göra praktik i öppen källkodsprojekt&lt;/a&gt;:
&lt;/p&gt;
&lt;ul class=&quot;check&quot;&gt;
  &lt;li&gt;Dokumentera funktioner &amp;ndash; finns i kursen mjukvarudesign.&lt;/li&gt;
  &lt;li&gt;Kodstandarder &amp;ndash; finns i kursen mjukvarudesign.&lt;/li&gt;
  &lt;li&gt;Projektet finns på Github &amp;ndash; versionshantering finns i kursen mjukvarudesign.&lt;/li&gt;
  &lt;li&gt;Projektet skall följa riktlinjerna för &lt;a href=&quot;http://tango.freedesktop.org/Tango_Desktop_Project&quot;&gt;tango!&lt;/a&gt; i 
  gränssnittet &amp;ndash; att kunna skapa bra gränssnitt är en av mina käpphästar och har fått en kurs som obligatorisk
  förkunskap till fjärde året och en ytterligare kurs att läsa under det året.&lt;/li&gt;
  &lt;li&gt;Projektet använder &lt;a href=&quot;http://www.wxwidgets.org/about/&quot;&gt;wxWidgets&lt;/a&gt; &amp;ndash; min föreslagna kurs 
  &lt;q&gt;Mjukvarudesign 2&lt;/q&gt; innehåller just api:er som ett viktigt centralt innehåll.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  Här har vi alltså någon som efterlyser hjälp på lämplig svårighetsnivå och med konkreta uppgifter. &lt;!-- TODO --&gt; 

&lt;h2&gt;Hur kan ni hjälpa till?&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Hitta fler bra exempel på &lt;abbr title=&quot;Free and Open Software&quot;&gt;FOSS&lt;/abbr&gt;-projekt som kan ta emot bidrag
    på rätt nivå.&lt;/li&gt;
  &lt;li&gt;Tala väl om mina idéer (förutsatt att du gillar dem) för alla du möter.&lt;/li&gt;
  &lt;li&gt;Deltag i &lt;a href=&quot;http://shareanduse.ning.com/group/programmering/forum/topics/framtidens-2&quot;&gt;samtalet på Dela!&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Hitta på uppgifter, illutrationer, stolpar till föredrag och liknande, anpassat till gymnasienivå och
    &lt;a href=&quot;http://shareanduse.ning.com/group/programmering&quot;&gt;dela dem&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
         <pubDate>Sun, 22 May 2011 07:00:09 +0200</pubDate>
         <author>gunther@keryx.se (Lars Gunther)</author>
         <category domain="http://www.keryx.se/rss/kategorier.php">keryx/gunther/blogg</category>
         <guid isPermaLink="true">http://www.keryx.se/blogg-68</guid>
      </item>      <item>
         <title>Framtidens programmeringsundervisning = web first (del 2)</title>
         <link>http://www.keryx.se/blogg-67</link>
         <description>&lt;p&gt;(Detta är del 2 av 3 i en serie om programmering på gymnasiet, med anledning av ett seminarium där jag deltog för ett
par veckor sedan. Läs gärna &lt;a href=&quot;/blogg-66&quot;&gt;del 1&lt;/a&gt; först om du inte gjort det.)&lt;br /&gt;
&lt;br /&gt;
En annan av föreläsarna uttryckte följande ståndpunkt i ett samtal med mig: &lt;q&gt;För mig är webben bara ett gränssnitt.&lt;/q&gt;
Ju mer jag tänkt på kommentaren, desto tydligare kommer skillnaden mellan våra synsätt i dagen. För mig är webben en
&lt;strong&gt;revolution&lt;/strong&gt;, en &lt;a href=&quot;http://www.wirfs-brock.com/allen/posts/74&quot;&gt;&lt;q lang=&quot;en&quot;&gt;transitional&lt;/q&gt;&lt;/a&gt; teknik,
som påverkar systemens arkitektur, deras förutsättningar och möjligheter i grunden.
&lt;/p&gt;
&lt;h2&gt;Webben ändrar allt&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    Webben &lt;em&gt;demokratiserar&lt;/em&gt; data och applikationer som ingen annan teknik. Spelfält utjämnas och
    nya tekniker och idéer kan slå sig fram enklare än på någon annan plattform.
  &lt;/li&gt;
  &lt;li&gt;
    Webben har just blivit en körmiljö för applikationer av flera slag: Kontorsprogram, utvecklingsmiljöer,
    anteckningar (typ Evernote), projekthantering, konferens- och kommunikation och inte minst spel.
    Beräkning och exekvering sker för dessa applikationer till stor del i klienten, för närvarande i Flash
    men alltmer i HTML5 (med spinofftekniker).
  &lt;/li&gt;
  &lt;li&gt;
    Webben är den körmiljö som man först måste etablera sin produkt inom. Sedan kan den kanske kompletteras med
    &lt;dfn&gt;appar&lt;/dfn&gt; eller regelrätta program, men webben kommer först! Facebook hade &lt;em&gt;aldrig&lt;/em&gt; kunnat börja som
    en iPhone app.
  &lt;/li&gt;
  &lt;li&gt;
    Webbens tekniker erövrar område efter område också i systemens arkitektur. Exempelvis så används
    &lt;a href=&quot;http://sv.wikipedia.org/wiki/Representational_State_Transfer&quot;&gt;ReST&lt;/a&gt; (som bygger på &lt;abbr&gt;http&lt;/abbr&gt;)
    exempelvis för kommunikation mellan program och databaser i många &lt;abbr&gt;noSQL&lt;/abbr&gt; system. Och program skrivna
    för traditionella miljöer är ofta klienter till webbtjänster.
  &lt;/li&gt;
  &lt;li&gt;
    Webbens tekniker används alltmer inom traditionell programmering. Gränssnitt för desktop och mobiler byggs
    med deklarativa tekniker som &lt;abbr&gt;XAML&lt;/abbr&gt; eller &lt;abbr&gt;QML&lt;/abbr&gt;. Data utväxlas med &lt;abbr&gt;XML&lt;/abbr&gt; eller
    &lt;abbr&gt;JSON&lt;/abbr&gt;.
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  Samtidigt som detta händer, så plockar webbutvecklingen in alltfler verktyg, tekniker och metodik från
  &lt;q&gt;traditionell&lt;/q&gt; programmering. De två disciplinerna närmar sig helt enkelt varandra.
&lt;/p&gt;

&lt;h2&gt;Exemplet luffarschack&lt;/h2&gt;

&lt;p&gt;
  &lt;a href=&quot;./blogg-67#handelse&quot;&gt;Strunta i exemplet och hoppa till det fortsatta resonemanget&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
  Det &lt;a href=&quot;https://docs.google.com/document/d/16DR0IHz9hHDEDnDv6ZEsW4PGqfMJSsp6b3gmo_bgnAQ/edit?hl=en&amp;amp;authkey=CIuSxIcG&amp;amp;pli=1#&quot;&gt;första
  föredraget&lt;/a&gt; på träffen för programmerare hölls av André Jaoui och han visade hur han använt luffarschack
  som ett exempel för att introducera olika begrepp i undervisningen. Självklart började min hjärna genast skriva om
  hans idé till JavaScript. Du kan &lt;q&gt;&lt;span lang=&quot;en&quot;&gt;view&lt;/span&gt; sourca&lt;/q&gt; mitt
  &lt;a href=&quot;http://keryx.se/lab/luffarschack/step2.php&quot; lang=&quot;en&quot;&gt;work in progress&lt;/a&gt; för se hur det skulle kunna funka. Här visar jag bara
  själva skriptet.
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
// SVG som bakgrund kan inte detekteras
// Vi hoppas att det sammanfaller med stöd för SVG som img
&lt;a href=&quot;https://developer.mozilla.org/en/JavaScript/Guide/Functions&quot;&gt;&lt;b id=&quot;SVGSupported&quot;&gt;function SVGSupported()&lt;/b&gt;&lt;/a&gt; {
    var testImg = 'data:image/svg+xml;&lt;a href=&quot;http://sv.wikipedia.org/wiki/Base64&quot;&gt;base64&lt;/a&gt;,&lt;span title=&quot;PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNzUiIGhlaWdodD0iMjc1Ij48L3N2Zz4%3D&quot;&gt;&amp;hellip;&lt;/span&gt;';
    var img = document.createElement('img');
    img.setAttribute('src', testImg);
    var svgok = img.complete;
    // Catch annoying bug in Firefox 4 that makes SVGSupported sometimes fail
    if ( !svgok  &amp;&amp; &lt;a href=&quot;http://api.jquery.com/jQuery.browser/&quot;&gt;$.browser.mozilla&lt;/a&gt; &amp;&amp; +$.browser.version.&lt;a href=&quot;https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/slice&quot;&gt;slice(0,3)&lt;/a&gt; &amp;gt;= 2.0 ) {
        svgok = true;
    }
    return svgok;
}

if ( SVGSupported() ) {
    // Generera tabell
    var table = &lt;a href=&quot;http://api.jquery.com/jQuery/#jQuery2&quot;&gt;$(&quot;&amp;lt;table&amp;gt;&amp;lt;/table&amp;gt;&quot;);&lt;/a&gt;
    for (var i = 0; i &amp;lt; 25; i++) {
        var row = $(&quot;&amp;lt;tr&amp;gt;&amp;lt;/tr&amp;gt;&quot;);
        for (var j = 0; j &amp;lt; 25; j++) {
            var cell = $(&quot;&amp;lt;td id='&quot; + j + &quot;_&quot; + i + &quot;'&amp;gt;&amp;lt;/td&amp;gt;&quot;);
            cell.&lt;a href=&quot;http://api.jquery.com/appendTo/&quot;&gt;appendTo(row)&lt;/a&gt;;
        }
        row.appendTo(table);
        // table.&lt;a href=&quot;http://api.jquery.com/append/&quot;&gt;append(row)&lt;/a&gt;; // Alternativ syntax
    }
    $(&quot;#spelplan&quot;).append(table);

    // Vems tur är det?
    var inturn = &quot;kryss&quot;; // Global

    $(&quot;td&quot;).&lt;a id=&quot;bindclick&quot; href=&quot;http://api.jquery.com/click/&quot;&gt;click&lt;/a&gt;( &lt;b id =&quot;makemove&quot;&gt;function makemove()&lt;/b&gt; {
        if ( $(this).&lt;a href=&quot;http://api.jquery.com/hasClass/&quot;&gt;hasClass(&quot;cirkel&quot;)&lt;/a&gt; || $(this).hasClass(&quot;kryss&quot;) ) {
            &lt;a href=&quot;https://developer.mozilla.org/en/XPInstall_API_Reference/Install_Object/Methods/alert&quot;&gt;alert(&quot;upptagen&quot;)&lt;/a&gt;;
            &lt;a href=&quot;http://api.jquery.com/bind/#example-3&quot;&gt;return false&lt;/a&gt;; // Stops &lt;strong&gt;both&lt;/strong&gt; &lt;a href=&quot;https://developer.mozilla.org/en/DOM/event.stopPropagation&quot;&gt;propagation&lt;/a&gt; (bubbling) and &lt;a href=&quot;https://developer.mozilla.org/en/DOM/event.preventDefault&quot;&gt;default action&lt;/a&gt;
            // Must be &lt;a href=&quot;http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/&quot;&gt;used with care&lt;/a&gt;
        }
        inturn = (inturn === &quot;cirkel&quot;) ? &quot;kryss&quot; : &quot;cirkel&quot;; // &lt;a href=&quot;https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/Conditional_Operator&quot;&gt;Överkurs&lt;/a&gt;
        $(this).&lt;a href=&quot;http://api.jquery.com/addClass/&quot;&gt;addClass(inturn)&lt;/a&gt;;
        var winning = detect_winning_move(inturn, this);
        if ( winning) {
            alert(inturn + &quot; vann&quot;);
        }
    });
} else {
    $(&quot;#spelplan&quot;).append(&quot;Gammal webbläsare&quot;);
}
/**
 * Funktion som kontrollerar om ett vinnande drag gjorts
 *
 */
&lt;b id=&quot;detect&quot;&gt;function detect_winning_move(inturn, cell)&lt;/b&gt; {
    var directions = [
        [-1,  0], // väster
        [-1, -1], // nordväst
        [ 0, -1], // norr
        [-1,  1]  // nordost
    ]; // &lt;a href=&quot;https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Array_Literals&quot;&gt;Array literal&lt;/a&gt; som innehåller 4 andra arrayer
    var winning = false; // Sätts till true om segrande drag gjorts
    // Testa alla 4 riktningar
    var curcell   = cell.id.&lt;a href=&quot;https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split&quot;&gt;split(&quot;_&quot;)&lt;/a&gt;;
    for ( var i = 0; i &amp;lt; 4; i++ ) {
        // Gå till ena änden - börja alltid med kryssad ruta
        // Akta sig för konkatenering - vi vill ha addition -
        // så byt från sträng till Number med plustecknet
        var nextpoint = [ +curcell[0], +curcell[1] ];
        do {
            nextpoint    = [ nextpoint[0] + directions[i][0], nextpoint[1] + directions[i][1] ];
            var nextid   = &quot;#&quot; + nextpoint.&lt;a href=&quot;https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/join&quot;&gt;join(&quot;_&quot;)&lt;/a&gt;;
            var nextcell = $(nextid);
        } while ( nextcell.hasClass(inturn) );
        // Gå till andra änden och räkna antal
        var inrow = -1;
        do {
            // Byt håll = subtraktion
            nextpoint = [ nextpoint[0] - directions[i][0], nextpoint[1] - directions[i][1] ];
            nextid    = &quot;#&quot; + nextpoint.join(&quot;_&quot;);
            nextcell  = $(nextid);
            inrow++;
        } while ( nextcell.hasClass(inturn) );
        if ( console ) {
            &lt;a href=&quot;http://getfirebug.com/logging&quot;&gt;console.log(inrow&lt;/a&gt;);
        }
        if ( inrow &amp;gt;= 5 ) {
            winning = true;
        }
    }
    return winning;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
  För att dölja komplexiteten i DOM-funktionerna, vilket ligger utanför programmeringsämnet, så använder jag JQuery.
  Det första som jag märker är med vilken lätthet jag kan presentera konceptet för mina elever och få in olika moment:
&lt;/p&gt;
&lt;dl&gt;
  &lt;dt&gt;Loopar&lt;/dt&gt;
  &lt;dd&gt;Spelplanen görs som en tabell i HTML, vilken genereras med en dubbel loop.&lt;/dd&gt;
  &lt;dt&gt;Funktioner&lt;/dt&gt;
  &lt;dd&gt;
    Första funktionen är till innehållet ganska avancerad, men dess syfte är lätt att förklara. Stödjer
    webbläsaren SVG som bild? Eleven kan använda den utan att förstå exakt hur den funkar.&lt;/dd&gt;
  &lt;dd&gt;
    Kryss och cirklar som bakgrundsbilder i CSS aktiveras genom att man i funktionen
    &lt;a href=&quot;./blogg-67#makemove&quot; lang=&quot;en&quot;&gt;makeMove&lt;/a&gt; kontrollerar om rutan är ledig och i så fall
    sätter klasser på cellerna. (Alternativt skulle jag kunna göra så att kryss och cirklar sattes
    som bokstäverna x och o med en specialdesignad webfont.)
  &lt;/dd&gt;
  &lt;dd&gt;
    Funktionerna &lt;a href=&quot;./blogg-67#SVGSupported&quot;&gt;SVGSupported&lt;/a&gt; och &lt;a href=&quot;./blogg-67#detect&quot;&gt;detect_winning_move&lt;/a&gt;
    Funktionen &lt;a href=&quot;./blogg-67#makemove&quot; lang=&quot;en&quot;&gt;makemove&lt;/a&gt; definieras som en &lt;q lang=&quot;en&quot;&gt;function expression&lt;/q&gt;, också
    kallad &lt;a href=&quot;http://stackoverflow.com/questions/16501/what-is-a-lambda-function&quot;&gt;lambda&lt;/a&gt;.
    Den skulle kunna vara &lt;a href=&quot;http://en.wikipedia.org/wiki/Anonymous_function&quot;&gt;namnlös&lt;/a&gt;.
  &lt;/dd&gt;
  &lt;dt&gt;Logiska villkor&lt;/dt&gt;
  &lt;dd&gt;
    I funktionen &lt;a href=&quot;./blogg-67#makemove&quot; lang=&quot;en&quot;&gt;makeMove&lt;/a&gt; finns en logisk eller-konstruktion och en 
    &lt;a href=&quot;https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/Conditional_Operator&quot;&gt;ternär 
    operator&lt;/a&gt;. Den sista är överkurs.
  &lt;/dd&gt;
  &lt;dt&gt;Variablers räckvidd&lt;/dt&gt;
  &lt;dd&gt;
    I sin första tappning så är den variabel som håller reda på vems tur det är global: Deklarerad utanför
    men använd inuti en funktion. På enklaste nivå låter jag detta passera, men påpekar att det längre fram
    är en felkälla som bör undvikas.
  &lt;/dd&gt;
  &lt;dd&gt;
    Också buggfixen för SVGSupported bygger på en global variabel. Det skulle kunna vara en uppgift till eleverna
    att flytta in den logiken in i funktionen och göra variabeln överflödig.
  &lt;/dd&gt;
  &lt;dt&gt;Händelser&lt;/dt&gt;
  &lt;dd&gt;
    Klicka på en ruta för att sätta kryss eller cirkel &amp;ndash; en busenkel introduktion till händelsedriven
    programmering.
  &lt;/dd&gt;
  &lt;dt&gt;Namngiving&lt;/dt&gt;
  &lt;dd&gt;
    Funktionen SVGSupported inleds med en versal. Detta kan ge mig anledning till att diskutera bättre namn.
    Versal som första bokstav reserveras traditionellt i JavaScript för funktioner som skall instaniseras med
    operatorn &lt;a href=&quot;https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/new&quot; lang=&quot;en&quot;&gt;new&lt;/a&gt;.
  &lt;/dd&gt;
  &lt;dt lang=&quot;en&quot;&gt;Hoisting&lt;/dt&gt;
  &lt;dd&gt;
    Inte alla vet att JavaScript normalt tolkas i &lt;strong&gt;2 omgångar&lt;/strong&gt;. Funktions- och variabeldeklarationer
    &lt;q&gt;flyttas upp&lt;/q&gt; automatiskt, så man kan anropa en funktion innan den deklarerats. Detta kallas
    &lt;a href=&quot;http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/&quot; lang=&quot;en&quot;&gt;hoisting&lt;/a&gt;,
    och är 
    &lt;a href=&quot;http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting&quot;&gt;en smidig sak rätt använd&lt;/a&gt;.
    Det är också en felkälla för ovana programmerare eller vid arbete i team.
  &lt;/dd&gt;
  &lt;dd&gt;
    &lt;a href=&quot;http://javascript.crockford.com/&quot;&gt;Crockford&lt;/a&gt; förbjuder detta i
    &lt;a href=&quot;http://www.jslint.com/&quot; rel=&quot;nofollow&quot;&gt;JSLint&lt;/a&gt; och det finns fler stilistiska fel som man
    kan upptäcka med den sortens verktyg. (Jag rekommenderar numera &lt;a href=&quot;http://jshint.com/&quot;&gt;JSHint&lt;/a&gt;!)
  &lt;/dd&gt;
&lt;/dl&gt;

&lt;h2 id=&quot;handelse&quot;&gt;Händelsedriven programmering&lt;/h2&gt;

&lt;p&gt;
  Ett av skälen till varför undervisningen fortsätter lära ut modellen &lt;em&gt;exekvera - vänta - exekvera - vänta&lt;/em&gt;
  och data skickad via &lt;abbr&gt;STDOUT&lt;/abbr&gt; och &lt;abbr&gt;STDIN&lt;/abbr&gt; är att i traditionella språk är det ett
  jättearbete att sätta upp händelsehantering. Exempelvis måste man i Java instansiera &lt;dfn&gt;klasser&lt;/dfn&gt; som i sin 
  tur implementerar &lt;dfn lang=&quot;en&quot;&gt;interface&lt;/dfn&gt;. Detta är begrepp som eleven möter på allvar först i den sista
  kursen (Programmering C idag, Programmering 2 i Gy-11.)
&lt;/p&gt;

&lt;p&gt;
  Men i JavaScript med JQuery är det enkelt och lättbegripligt. Identifiera objektet till vilket händelsen kopplas,
  sätt en funktion som händelsehanterare. &lt;a href=&quot;./blogg-67#bindclick&quot;&gt;Klart!&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  Redan på programmering A nivå (med nuvarande kursplaner) kan man alltså skapa ett spel där två spelare
  möter varandra sittandes vid samma dator. Algoritmer för att automatiskt kontrollera om endera spelaren
  har vunnit, &lt;a href=&quot;./blogg-67#detect&quot;&gt;som i exemplet ovan&lt;/a&gt;, kan introduceras för Programmering B.
&lt;/p&gt;

&lt;p&gt;
  Programmering C (2 i Gy-11) skulle kunna introducera en enkel spelmotor för att spela mot datorn, men
  det jag verkligen ser fram emot är att skapa funktionalitet för att spela över Internet mot andra människor.
  För fjärde året har jag föreslagit en kurs i nätverksprogrammering och som en spinoff till HTML5 finns det
  en teknik som heter &lt;a href=&quot;http://en.wikipedia.org/wiki/WebSockets&quot;&gt;WebSockets&lt;/a&gt; som passar perfekt för detta.
&lt;/p&gt;

&lt;p&gt;
  Det jag försöker visa är att JavaScript funkar precis lika bra som Java för att lära ut programmering.
  JavaScript är &lt;strong&gt;inte&lt;/strong&gt; en lättversion av Java!
&lt;/p&gt;

&lt;h2&gt;Min erfarenhet av att köra Programmering A med JavaScript&lt;/h2&gt;

&lt;p&gt;
  Jag har kört kursen Programmering A med JavaScript några gånger nu. Dels med elever som inte läser webbdesign alls
  och dels med en grupp som läser kurserna parallellt. Eftersom man måste lära ut ett minimum HTML och CSS så är det 
  inte givet att det blir bättre i första fallet. Det är få timmar man har till förfogande och elever som inte direkt
  få &lt;q&gt;blodad tand&lt;/q&gt; och blir självlärande kommer sällan upp till mer än knappt G-nivå. Men jämfört med att jobba
  i konsollmiljö så är sannolikheten för att de skall tycka att kursen är kul betydligt större.
  Och då så att de blir just självlärande. För dessa tycker jag alltså att för- och nackdelar tar ut varandra.
&lt;/p&gt;

&lt;p&gt;
  För elever som läser kurserna parallellt, så funkar de som varandras förstärkning. Nästan allihop vill ha med
  JQuery-effekter och vågar använda JQuery widgets för sina inlämningsarbeten för webbdesign. Detta i sin tur
  inskärper kunskaperna om CSS-selektorer, skillnaden mellan klass och id, värdet av välskriven, semantisk HTML
  och andra moment webbdesignen.
&lt;/p&gt;

&lt;p&gt;
  Det bör tilläggas att jag lär ut en aning Java också. Jag använder &lt;strong&gt;kontrastverkan&lt;/strong&gt; mellan dessa 
  två språk, som är så väldigt olika att de utöver C-syntax och fyra bokstäver i namnet
  &lt;a href=&quot;http://stackoverflow.com/questions/245062/whats-the-difference-between-javascript-and-java&quot;&gt;knappast&lt;/a&gt; 
  har något gemensamt. Saker som jag tycker blir tydliga genom kontrasten är:
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Värdetyper och skillnaden mellan statiska och dynamiska värdesystem.&lt;/li&gt;
  &lt;li&gt;Skillnaden mellan att jobba i sekvensiella flöden och händelsedrivet.&lt;/li&gt;
  &lt;li&gt;(Längre fram:) Skillnaden mellan &lt;q&gt;klassisk&lt;/q&gt; objektorientering och funktionell programmering.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  Notera att jag &lt;strong&gt;inte&lt;/strong&gt; emulerar &lt;abbr&gt;STDOUT&lt;/abbr&gt; och &lt;abbr&gt;STDIN&lt;/abbr&gt; med
  &lt;code&gt;document.write()&lt;/code&gt;. Den metoden är &lt;strong&gt;totalförbjuden&lt;/strong&gt; på mina lektioner och jag säger åt
  mina elever att om de ser en sida som använder den, så skall de tvätta ögonen med såpa!
&lt;/p&gt;

&lt;h2&gt;Att lära sig &lt;q&gt;grunderna&lt;/q&gt;&lt;/h2&gt;

&lt;p&gt;
  Genom att börja med webben som körmiljö, så introducerar man på ett naturligt sätt flera begrepp som ofta kan 
  bli svåra att lära ut. Grundläggande begrepp och principer, som borde komma in tidigt i undervisningen!
&lt;/p&gt;

&lt;h3&gt;Applikationslogik&lt;/h3&gt;

&lt;p&gt;Tredelningen&amp;hellip;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;abbr&gt;HTML&lt;/abbr&gt; för struktur och innehåll.&lt;/li&gt;
  &lt;li&gt;&lt;abbr&gt;CSS&lt;/abbr&gt; för design och layout.&lt;/li&gt;
  &lt;li&gt;JavaScript för beteende.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
  &amp;hellip;är en naturlig introduktion till &lt;strong&gt;olika slags logik&lt;/strong&gt; och &lt;q lang=&quot;en&quot;&gt;separation of
  concerns&lt;/q&gt;. På webbservern lär jag eleverna tidigt skilja ut presentationslogiken från bearbetning och
  databashantering. I vanlig programmeringsundervisning så ser jag exempel efter exempel på hur olika slags logik
  blandas, så att när detta moment dyker upp så måste eleven lära sig av med dåliga vanor. Och elever som redan skrivit
  ganska så omfattande program tappar sugen när de inser att de måste skriva om det från grunden, då dess arkitektur
  inte håller måttet.
&lt;/p&gt;

&lt;p&gt;
  De flesta jag sätt som börjar med &lt;q&gt;vanlig&lt;/q&gt; programmering lär sig skriva spagetti-kod, där bearbetning blandas
  huller om buller med in- och utmatningar. Detta därför att metoderna för de senare är såpass avancerade att man måste
  lära sig programmera på (gymnasiets) C-nivå, innan de kan användas med någon slags behållning. Kort sagt, man behöver
  stora &lt;strong&gt;förkunskaper&lt;/strong&gt; för att kunna separera logik. Men på webben kan man börja göra det från dag noll!
&lt;/p&gt;

&lt;p&gt;
  Mitt stridsrop &lt;q&gt;webben först&lt;/q&gt; är inte nödvändigtvis detsamma som att ämnet Programmering på gymnasiet
  skall börja med JavaScript &amp;ndash; även om jag försökt göra gällande att det är ett bra val av förstaspråk
  för undervisningen. Webbutveckling och programmering kan som ämnen korsbefrukta varandra även om man jobbar
  med ett annat språk.
&lt;/p&gt;

&lt;p&gt;
  Java applets är däremot inte en möjlighet för sådan korsbefruktning. Det finns massor av vettiga saker att göra med
  Java, mängder av körmiljöer som språket är lämpligt för: Desktop, mobiler, inbäddade system, servrar&amp;hellip;
  Applets är helt enkelt bara inte en av dem.
&lt;/p&gt;

&lt;h3&gt;En bra introduktion till objekt&lt;/h3&gt;

&lt;p&gt;
  Ett av problemen som presenterades på seminariet med att lära ut &lt;q&gt;objects first&lt;/q&gt; är att studenterna inte verkar
  riktigt förstå vad de lär sig&amp;hellip; De använder klasser och objekt, men kan inte på ett tillfredsställande sätt
  förklara vad det egentligen är.
&lt;/p&gt;

&lt;p&gt;
  Jag ser två sätt på vilket en &lt;q lang=&quot;en&quot;&gt;web first&lt;/q&gt; metodik kan råda bot på detta:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;
    Dels så bekantar sig eleven tidigt med systemens arkitektur, enligt ovan, vilket gör objektens sammanhang
    tydligare. Objektorientering utan kunskaper om designmönster blir sällan annat än onödig komplexitet.
    (För fjärde året har jag föreslagit en kurs med designönster som ett av sina huvudsakliga innehåll.)
  &lt;/li&gt;
  &lt;li&gt;
    Objekt i webbmiljö blir ofta konkreta och manipulering av deras egenskaper skapar ett omedelbart visuellt
    resultat.
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
  Ett av problemen i objektorienterad programmering är att de första exemplen som eleven får lära sig är ofta väldigt
fiktiva. Klasser och arv illustreras med biologin eller fordonsindustrin:

&lt;pre&gt;&lt;code&gt;
class monkey extends Mammal {}
class sportscar extends fourwheelcar {}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
  Så gjorde jag också förut, eftersom det var vad jag hade läst mig till från andra. Nu börjar jag med:
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
   document.getElementsByTagName(&quot;h1&quot;)[0].innerHTML = &quot;Alternativ text&quot;;
   document.getElementById(&quot;foo&quot;).style.backgroundColor = &quot;fuchsia&quot;;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
  &lt;strong&gt;Resultatet syns direkt!&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
  Ett element som har &lt;dfn&gt;egenskaper&lt;/dfn&gt; som textinnehåll, bredd, höjd, färg och x/y/z position och
  &lt;dfn&gt;metoder&lt;/dfn&gt; för att finna och
  ändra på deessa gör objektorienteringen konkret och användbar. JavaScript ihop med &lt;abbr&gt;DOM&lt;/abbr&gt; funkar superbt här, 
  men för att visa eleverna ett &lt;strong&gt;väldesignat &lt;abbr&gt;api&lt;/abbr&gt;&lt;/strong&gt;, så lär jag dem relativt snabbt JQuery.
  DOM-metoderna i sin grundform är ju tyvärr rätt åbäkiga. 
  (Utvecklarna var för påverkade av Java, tror Douglas Crockford och jag, och missade
  att föra över elegansen i JavaScript till &lt;abbr&gt;DOM&lt;/abbr&gt;.)
&lt;/p&gt;

&lt;p&gt;
  &lt;a href=&quot;https://developer.mozilla.org/en/DOM/HTMLCollection&quot;&gt;Samlingar av HTML-element&lt;/a&gt; är array-liknande och ger
  mig som lärare snabbt &lt;em&gt;naturliga&lt;/em&gt; exempel på när man
  just kan använda arrayer, hur man loopar igenom dem, etc.
&lt;/p&gt;

&lt;h3&gt;Andra vinster&lt;/h3&gt;

&lt;p&gt;
  Ett av skälen till att man ofta dröjer med grafiska metoder i traditionell programmering är att det blir så komplext.
  Java Swing kan användas genom &lt;q lang=&quot;en&quot;&gt;monkey sees, monkey does&lt;/q&gt; programmering, men eleven måste läsa flera
  kurser innan det som har kodats blir begripligt. Men med JQuery kan en elev på några minuter göra detta:
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
$(&quot;#btn1&quot;).click(function () {
    $(&quot;foo&quot;).hide(&quot;slow&quot;).
});
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
  Webben är också en bra introduktion till &lt;abbr&gt;SOA&lt;/abbr&gt; och &lt;abbr&gt;SaS&lt;/abbr&gt;. Och om man lär sig 
  &lt;a href=&quot;https://developer.mozilla.org/en/xmlhttprequest&quot;&gt;XHR&lt;/a&gt; först,
  gärna med &lt;a href=&quot;http://api.jquery.com/category/ajax/&quot;&gt;JQuerys förenklade api&lt;/a&gt;,
  så kan &lt;a href=&quot;http://www.omg.org/gettingstarted/corbafaq.htm&quot;&gt;CORBA&lt;/a&gt; bli mindre avskräckande.
&lt;/p&gt;

&lt;h2&gt;Sammanfattning&lt;/h2&gt;

&lt;p&gt;
  &lt;q lang=&quot;en&quot;&gt;Web first&lt;/q&gt; är dels en &lt;strong&gt;teknisk nödvändighet&lt;/strong&gt;. Världen går åt detta håll.
&lt;/p&gt;

&lt;p&gt;
  Dels är det en &lt;strong&gt;pedagogisk möjlighet&lt;/strong&gt;. Inget att beklaga, utan en möjlighet att ta vara på.
&lt;/p&gt;

&lt;h2&gt;Epilog 1&lt;/h2&gt;

&lt;p&gt;
  Jag uppmuntrar till &lt;a href=&quot;http://shareanduse.ning.com/group/programmering/forum/topics/framtidens-1&quot;&gt;diskussion
  om denna artikel&lt;/a&gt; på &lt;a href=&quot;http://shareanduse.ning.com/group/programmering&quot;&gt;dela&lt;/a&gt;.
&lt;/p&gt;

&lt;h2&gt;Epilog 2: Finn fem fel&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;
    JavaScript är en förenklad variant av Java som nästan uteslutande används på webbsidor på samma sätt som applets.
    Ett JavaScript kan alltså bara köras inbakat i en webbsida med hjälp av en webbläsare.
  &lt;p&gt;
    &amp;hellip; Rent språkligt ligger den största skillnaden i att JavaScript inte är renodlat objektorienterat&amp;hellip;
    men du kan inte skapa egna klasser.
  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
  Citatet kommer från Erik Ronnes bok &lt;q&gt;Avancerad Pocket Java&lt;/q&gt; (Docendo läromedel) och har några år på nacken.
&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    JavaScrip är &lt;strong&gt;inte&lt;/strong&gt; en variant av Java, utan har sitt ursprung i
    &lt;a href=&quot;http://en.wikipedia.org/wiki/Self_(programming_language)&quot;&gt;Self&lt;/a&gt;,
    &lt;a href=&quot;http://en.wikipedia.org/wiki/Scheme_%28programming_language%29&quot;&gt;Scheme&lt;/a&gt; och 
    &lt;a href=&quot;http://en.wikipedia.org/wiki/Lisp&quot;&gt;Lisp&lt;/a&gt;. Fast det har fått en
    &lt;a href=&quot;http://en.wikipedia.org/wiki/C_syntax&quot;&gt;C-syntax&lt;/a&gt; likt Java.
  &lt;/li&gt;
  &lt;li&gt;
    JavaScript är inte &lt;q&gt;enklare&lt;/q&gt; i betydelsen har mindre kraft. Det är bara enklare i betydelsen har en
    smidigare och enklare syntax.
  &lt;/li&gt;
  &lt;li&gt;
    Till skillnad från Java applets, så körs JavaScript &lt;strong&gt;inte inbakat&lt;/strong&gt; i webbsidor, utan är en integrerad
    del av dem. Applets är (oftast) otillgängliga och isolerade från webbsidan. JavaScript kan göras tillgängliga
    och är en del av webbstacken.
  &lt;/li&gt;
  &lt;li&gt;
    JavaScript tillåter såväl procedurell, objektorienterad som funktionell programmering. Arv genom prototyp
    är kraftfullare än arv genom klasser. Man kan enkelt emulera klasser i JavaScript, men det är en plåga utan dess
    like att emulera prototyp i klassbaserade språk.
  &lt;/li&gt;
  &lt;li&gt;
    Jag skulle dock vilja påstå att den &lt;q&gt;största skillnaden&lt;/q&gt; är att Java har strikt typsystem och JavaScript ett
    dynamiskt typsystem.
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
  Ronne är tyvärr inte ett undantag. Den sortens desinformation har nått åtskilliga årskullar av elever. Om du inte gör
  någon annan förändring i din undervisning, så tag åtminstone med dig detta till dina elever:
&lt;/p&gt;

&lt;p&gt;
  Java och JavaScript är två skilda språk, med olika förmågor, men språkligt är Java det svagare, mindre kapabla språket,
  som dock har två andra fördelar: Det kan köras på fler olika system och det får en något högre prestanda när man
  kompilerat det. Alla andra påstådda fördelar är ljug eller personliga preferenser.
&lt;/p&gt;

&lt;h2&gt;Epilog 3: MDC och Stackoverflow&lt;/h2&gt;

&lt;p&gt;
  Utöver JQuery-manualen ocj Wikipedia, så går nästan alla länkar i min artikel till antingen
  &lt;a href=&quot;https://developer.mozilla.org/&quot;&gt;Mozilla Developer Center&lt;/a&gt;
  eller
  &lt;a href=&quot;http://stackoverflow.com/&quot;&gt;Stack Overflow&lt;/a&gt;. Det första är nätets &lt;em&gt;auktoritativa&lt;/em&gt; resurs
  om JavaScript. Det senare en plats för utbyte av frågor och svar, som
  &lt;a href=&quot;http://stackoverflow.com/questions/929999/which-to-learn-first-java-or-javascript&quot;&gt;utmärks av 
  kunniga och engagerade deltagare&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
  De &lt;strong&gt;absolut största svagheten&lt;/strong&gt; för JavaScript är att nätet vimlar av dålig information. Föråldrade
  och usla exempel finns det gott om.
&lt;/p&gt;

&lt;p&gt;
  Varningstecken på dåliga sidor:
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;document.write()&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Inline event handlers (blandar HTML och skript), typ &lt;code&gt;&amp;lt;body onload=&quot;foo()&quot;&amp;gt;&lt;/code&gt;
  &lt;li&gt;Eval&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
  Tecken på att sidorna är uppdaterade och ger bra information:
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Hänvisningar till &lt;a href=&quot;http://jshint.com/&quot;&gt;JSHint&lt;/a&gt; (eller 
    &lt;a href=&quot;http://www.jslint.com/&quot; rel=&quot;nofollow&quot;&gt;JSLint&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Begreppet &lt;q lang=&quot;en&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Unobtrusive_JavaScript&quot;&gt;unobtrusive&lt;/a&gt;&lt;/q&gt; används.&lt;/li&gt;
  &lt;li&gt;Begreppet &lt;q lang=&quot;en&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Progressive_enhancement&quot;&gt;progressive
     enhancement&lt;/a&gt;&lt;/q&gt; används.&lt;/li&gt;
  &lt;li&gt;Begreppet &lt;q lang=&quot;en&quot;&gt;&lt;a href=&quot;http://www.webstandards.org/action/dstf/manifesto/&quot;&gt;dom script&lt;/a&gt;&lt;/q&gt; används.&lt;/li&gt;
&lt;/ul&gt;
</description>
         <pubDate>Sun, 08 May 2011 14:35:47 +0200</pubDate>
         <author>gunther@keryx.se (Lars Gunther)</author>
         <category domain="http://www.keryx.se/rss/kategorier.php">keryx/gunther/blogg</category>
         <guid isPermaLink="true">http://www.keryx.se/blogg-67</guid>
      </item>      <item>
         <title>Framtidens programmeringsundervisning = user first (del 1)</title>
         <link>http://www.keryx.se/blogg-66</link>
         <description>&lt;p&gt;När jag träffade ett 50-tal programmeringslärare häromveckan blev jag påmind om att det är ett ämne med en frustrerande
spänning mellan historia och framtid. Jag tror nämligen inte att nya programmerare måste göra samma resa som jag eller
branschen i stort gjort. Jag tror inte att man måste börja procedurellt och hårdvarunära. Jag tror inte ens på
&lt;span lang=&quot;en&quot;&gt;objects first&lt;/span&gt;. Jag tror man &lt;em&gt;kan&lt;/em&gt; börja funktionellt och dynamiskt, men det är inte min
huvudpoäng. Den allra första boken man borde läsa när man lär sig programmering
skall varken behandla syntax eller problemlösning, utan &lt;strong&gt;användarnytta&lt;/strong&gt;. Börja gärna med boken
&lt;a href=&quot;http://javlaskitsystem.se/bestall/&quot;&gt;Jävla Skitsystem&lt;/a&gt;. Gå sedan in på
programmeringen som sådan. Huvudmålet med programmering är inte att lösa matematiska problem, utan användarnas problem.
&lt;/p&gt;
&lt;h2&gt;Ett inspirerande möte&lt;/h2&gt;

&lt;p&gt;
  Innan jag återkommer till frågeställningen om hur och vad som bör ingå i undervisningen i programmering, låt mig börja
  med att &lt;strong&gt;tacka Lennart Rolandsson&lt;/strong&gt; som arrangerade träffen och alla kollegor som jag verkligen
  uppskattade att träffa. Att jag dessutom fick höra mycket beröm
  för de ämnes- och kursplaner jag skrivit gjorde ju knappast saken sämre. Är du gymnasielärare
  i programmering, &lt;strong&gt;så gör det till en prioritet att komma till nästa träff!&lt;/strong&gt; Detta var den fjärde
  träffen i denna seminarieserie och intresset växer hela tiden. Efter mitt forsta deltagande förstår jag varför.
&lt;/p&gt;

&lt;p&gt;
  Lennart har skrivit ihop
  &lt;a href=&quot;https://docs.google.com/document/d/16DR0IHz9hHDEDnDv6ZEsW4PGqfMJSsp6b3gmo_bgnAQ/edit?hl=en&amp;amp;authkey=CIuSxIcG&amp;amp;pli=1#&quot;&gt;en
  sammanfattning&lt;/a&gt; av det som sades av oss föreläsare, så jag tänker inte göra om det. Mitt eget
  föredrag om &lt;a href=&quot;http://www.slideshare.net/itpastorn/programmering-metatrendermini&quot;&gt;utvecklingen i branschen&lt;/a&gt;
  finns på Slideshare och den del som behandlade &lt;a href=&quot;http://prezi.com/tlcuwfshkjmk/mjukvarudesign/&quot;&gt;det fjärde året&lt;/a&gt;
  finns på Prezi.
&lt;/p&gt;

&lt;p&gt;
  I stället skall jag utveckla mina åsikter i (troligen) &lt;strong&gt;tre blogginlägg&lt;/strong&gt;:
&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Användarens behov&lt;/strong&gt; kommer först och inte matematiken.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Webben&lt;/strong&gt; är mer än ett gränssnitt.&lt;/li&gt;
  &lt;li&gt;Det finns &lt;strong&gt;fler paradigm&lt;/strong&gt; än strukturerad och objektorienterad programmering.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
  I dessa inlägg kommer jag beskriva mitt tänkande ifrån &lt;strong&gt;tre aspekter&lt;/strong&gt;:
&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Några tankar om min grundsyn på &lt;em&gt;ämnet och branschens utveckling&lt;/em&gt;, delvis hämtade från mitt föredrag.&lt;/li&gt;
  &lt;li&gt;Hur det påverkat mina vägval när jag jobbat med &lt;dfn&gt;fjärde året&lt;/dfn&gt; på teknikprogrammet.&lt;/li&gt;
  &lt;li&gt;Vad slags &lt;em&gt;stöd&lt;/em&gt; kollegor kan ge mig för de ideer jag har om detta.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
  Och jag kommer tänka mig en slags &lt;q&gt;antagonist&lt;/q&gt; som omhuldar följande åsikter:
&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;q&gt;Riktig&lt;/q&gt; programmering är tillämpad matematik, algoritmer och annat vi lärt oss av
    &lt;a href=&quot;http://www-cs-faculty.stanford.edu/~uno/&quot;&gt;Donald Knuth&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;q&gt;Riktig&lt;/q&gt; programmering är baserad på manuellt kompilerade språk med statiska typsystem.&lt;/li&gt;
  &lt;li&gt;&lt;q&gt;Riktig&lt;/q&gt; programmering är strukturerad och/eller objektorienterad.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
  Enligt Lennarts sammanfattning från träffen, så skall en av lärarna på &lt;a href=&quot;http://www.bth.se/&quot;&gt;BTH&lt;/a&gt;
  uttryckt följande åsikt om gymnasiets programmeringsundervisning:
&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;
     skit i grafik och annat, se till att de kan programmera de mest grundläggande sakerna,
    helst i mindre i flera olika språk, men att de verkligen behärskar grunderna.
  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
  Om detta har jag en enda sak att säga:
&lt;/p&gt;

&lt;p lang=&quot;en&quot;&gt;&lt;strong&gt;Not on my watch!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;
  Jag gillar såväl Donald Knuth som matematik, men detta synsättet är för &lt;em&gt;snävt&lt;/em&gt;. Det kommer att vara dåligt
  för rekryteringen av elever till programmeringen och det kommer inte gagna industrin.
&lt;/p&gt;

&lt;h2&gt;Programmering som en del av fjärde året på Teknikprogrammet&lt;/h2&gt;

&lt;p&gt;
  När jag tänkte på det fjärde året så var ett ord viktigare än alla andra: &lt;strong&gt;Anställningsbarhet&lt;/strong&gt;. En
  klassisk programmerare med goda kunskaper om datavetenskap och algorimer behöver normalt studera ämnet i flera år. 
  &lt;em&gt;Det är &lt;strong&gt;högskolans&lt;/strong&gt; sak att få fram dessa.&lt;/em&gt;
  Jag tror inte att gymnasiet skall utgöra en lättversion av detta. Branschen var mycket tydlig att den inte såg
  möjlighet att anställa studenter med en sådan utbildning. Från början ville man därför inte ha någon annan 
  inriktning på fjärde året än webbutveckling.
&lt;/p&gt;

&lt;p&gt;
  Delvis tror jag detta beror på att få fattat hur komplex modern webbutveckling kan vara. 
  Testa dig själv med dessa frågor: 
&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    Om du vill åstadkomma asynkron nedladdning av JavaScript, men ordningen i vilken de laddas och körs är viktig,
    hur gör du det?
  &lt;/li&gt;
  &lt;li&gt;
    Vad har &lt;abbr&gt;TCP:s&lt;/abbr&gt; &lt;dfn lang=&quot;en&quot;&gt;slowstart&lt;/dfn&gt; algoritm för påverkan på frågan om man skall
    använda &lt;dfn lang=&quot;en&quot;&gt;progressive enhancement&lt;/dfn&gt; eller inte och vilka parametrar skall jag testa för att
    säkerställa bäst resultat utifrån den frågeställningen?)
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
  Annorlunda uttryckt: En webbutvecklare måste kunna programmera och en programmerare måste kunna webbutveckla.
  Och såväl utvecklongsverktyg som projektmetodik sammanfaller till stora delar mellan dessa två discipliner.
  I slutändan kom profilen att heta &lt;q&gt;mjukvarudesign&lt;/q&gt; och den rymmer såväl webb som vissa moment &lt;q&gt;ren&lt;/q&gt;
  programmering.
&lt;/p&gt;

&lt;h2&gt;Att lösa rätt problem&lt;/h2&gt;

&lt;p&gt;
  Traditionellt har kopplingen mellan programmering och tekniska beräkningar varit stark.
  Att bygga goda användarupplevelser är inte
  &lt;q lang=&quot;en&quot;&gt;computer science&lt;/q&gt; och inte lika &lt;q&gt;fint&lt;/q&gt;. Eller så kan man lära sig det &lt;q&gt;senare&lt;/q&gt;.
  Problemet med detta tänkande är att det i längden leder till dåliga produkter.
&lt;/p&gt;
  
&lt;p&gt;
  Den invändning som främst kommer fram är att man missar &lt;q&gt;grunderna&lt;/q&gt; om man börjar för tidigt med grafiska
  gränssnitt och försök att göra snygga program. Min motfråga är varför det skall anses som icke-grundläggande
  att skapa just det som användare efterfrågar?
&lt;/p&gt;

&lt;blockquote lang=&quot;en&quot;&gt;
  &lt;p&gt;
    To the user, the interface is the product.
  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
  Det köps idag in s.k. &lt;q&gt;affärssystem&lt;/q&gt; för miljardbelopp i Sverige, som inte används eller när de används så driver 
  man användarna till vansinne. Det är system skapade av programmerare som låter användarna anpassa sina rutiner till
  datan och inte tvärtom. Det är system som är så fula i estetisk bemärkelse att de kan anses vara ett
  arbetsmiljöproblem. Det är system som användarna undviker och som i extremfallet inte alls används. I stället
  används vanlig mejl och vanliga officeproduktertil sådant som de egentligen borde vara sämre på. Men på grund av sin
  &lt;em&gt;generella&lt;/em&gt; goda användbarhet så används de i stället.
&lt;/p&gt;

&lt;p&gt;
  Nu &lt;em&gt;finns&lt;/em&gt; det ett problem med frågan om gränssnitt, nämligen att den lätt reduceras till färdighet att använda ett 
  visst verktyg. Jag är allergisk mot &lt;q&gt;kurser i Dreamweaver&lt;/q&gt;. Likaså mot okunniga ASP-utvecklare som använder
  verktygen i Visual Studio utan att ha den blekaste aning om att de producerar gräslig och dåligt fungerande
  skräpkod, fylld av monstrositeter som
  &lt;a href=&quot;http://www.ironspeed.com/articles/Disable%20View%20State%20for%20a%20Page/Article.aspx&quot; lang=&quot;en&quot;&gt;viewstates&lt;/a&gt;
  och annan sörja.
  Hur man bygger en modal dialogruta i just ditt favoritverktyg är ointressant. Frågan är &lt;strong&gt;när&lt;/strong&gt; du skall
  använda modala dialoger, hur du utformar dem så att användaren inte missar dem, etc. (Hur ofta har man inte varit med
  om att dialogrutan ligger dold bakom ett fönster&amp;hellip;)
&lt;/p&gt;

&lt;p&gt;
  För att lyfta frågan om gränssnitt, så har det blivit ett eget ämne och grundkursen i gränssnittsdesign är dessutom 
  ett förkunskapskrav för fjärde året. Notera att ämnet fokuserar såväl interaktionsdesign som visuell design.
  När eleven sedan fortsätter med att konkret programmera, så är &lt;em&gt;det problem&lt;/em&gt; som han/hon har att lösa hur just en
  optimerad användarupplevelse åstadkoms.
&lt;/p&gt;

&lt;p&gt;
  Först kommer &lt;strong&gt;inte&lt;/strong&gt; flödesschema och UML-diagram. Först kommer en &lt;strong&gt;storyboard&lt;/strong&gt;!
&lt;/p&gt;

&lt;h2&gt;Exemplet WordPress&lt;/h2&gt;

&lt;p&gt;
  Jag vet inte hur många gånger jag hört erfarna programmerare klaga på Wordpress. Och vad jag förstått, så görs det
  med rätta. Ur programmeringsteknisk synvinkel så lämnar nämligen produkten mycket att önska. Under dess första tid 
  uppvisade den alla tänkbara problem:
  &lt;a href=&quot;http://en.wikipedia.org/wiki/Coupling_%28computer_programming%29&quot; lang=&quot;en&quot;&gt;tight coupling&lt;/a&gt;,
  bristande säkerhet, ineffektiva algoritmer, bristande arkitektur, etc.
  Trots detta blev produkten en succé och frågan är varför?
&lt;/p&gt;

&lt;p&gt;
  Därför att produkten, när den kom, bättre än någon annan tillgodosåg ett konkret behov. Den kunde installeras utan
  att man behövde vara alltför teknisk och den gav avändarna just de funktioner man önskade. Under &lt;q&gt;skalet&lt;/q&gt;
  var det skrot men likväl lyckades produkten då det som efterfrågades var ett bra &lt;q&gt;skal&lt;/q&gt;!
&lt;/p&gt;

&lt;h2&gt;Användarens upplevelse är grunden för allt&lt;/h2&gt;

&lt;p&gt;
  Det är rimligt att just &lt;em&gt;tekniska högskolor&lt;/em&gt; skall utbilda programmerare som är djup förankrade
  i datavetenskap och matematiskt tänkande, men det jag värjer mig mot är att &lt;em&gt;all&lt;/em&gt; programmering skall
  passas in i den mallen. 
&lt;/p&gt;

&lt;p&gt;
  Jag säger det igen: Att utveckla fungerande gränssnitt har sina egna utmaningar. Jämför en applikation som
  löser en uppgift på tre (3) sekunder, men under tiden är programmet fryst. Med &lt;span lang=&quot;en&quot;&gt;touch interface&lt;/span&gt; 
  så kanske inte ensett timglas visas, utan användaren hinner peka på skärmen flera gånger. Sedan när programmet
  reagerar så händer det en serie av oönskade händelser. I värsta fall hinner användaren inte ens se det hett
  efterlängtade resultatet, innan skärmbilden försvinner.
&lt;/p&gt;

&lt;p&gt;
  Ett annat program har kanske mindre optimerade algoritmer och uppgiften tar fem (5) sekunder att lösa, men under tiden
  fortsätter programmet att svara. Sämre &lt;q&gt;datavetenskap&lt;/q&gt;, men bättre produkt!
&lt;/p&gt;

&lt;blockquote lang=&quot;en&quot;&gt;
  &lt;p&gt;Responsiveness is more important than speed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
  Alltså, jag köper att programmering är problemlösning, men vad för slags problem skall vi lösa?
  Inte &lt;strong&gt;bara&lt;/strong&gt; det slags problem som återfinns i
  &lt;a href=&quot;http://www.csc.kth.se/contest/ioi/uppgifter.php&quot;&gt;programmeringsolympiaden&lt;/a&gt;.
  Jag tror vi gör oss en otjänst genom att stirra oss blinda på den mycket snäva definitionen av problem.
&lt;/p&gt;

&lt;p&gt;
  Jag är helt frankt mer intresserad av att se mina elever skapa användbara mobila appar, webbplatser och
  nyttoprogram, än att se dem ta medaljer i en artificiell tävling.
&lt;/p&gt;

&lt;p&gt;
  Nu har jag skrivit ett skarp blogginlägg. Jag tror diskussionen mår bra av skärpa. Men missta inte den skärpan
  för antipati. Jag uppskattar mötet med kollegor som har avvikande åsikt. Jag välkomnar sådana på 
  &lt;a href=&quot;http://shareanduse.ning.com/group/programmering/forum/topics/objects-first-eller-inte-fel&quot;&gt;Delas forum för programmering&lt;/a&gt;.
&lt;/p&gt;</description>
         <pubDate>Tue, 19 Apr 2011 13:38:57 +0200</pubDate>
         <author>gunther@keryx.se (Lars Gunther)</author>
         <category domain="http://www.keryx.se/rss/kategorier.php">keryx/gunther/blogg</category>
         <guid isPermaLink="true">http://www.keryx.se/blogg-66</guid>
      </item>      <item>
         <title>Mina tankar och resurser om gy11 kurserna</title>
         <link>http://www.keryx.se/blogg-65</link>
         <description>&lt;p&gt;  Det var en givande dag tyckte deltagarna på seminarierna om teknikprogrammet i Gy-11
  &lt;a href=&quot;http://www.grkom.se/download/18.6f444a5612dc39f158f80002750/110310_Det+nya+teknikprogrammet.pdf&quot;&gt;[PDF]&lt;/a&gt; i
  Göteborg torsdag förra veckan. Översvallande positiva reaktioner i utvärderingarna. Jättekul för Gunilla, Tibor,
  Karin och mig. Här kommer en kort rapport och utlovade länkar från mina pass. Jag kommer fortsätta bevaka
  &lt;a href=&quot;http://twitter.com/search?q=%23grgy11&quot;&gt;#grgy11&lt;/a&gt; på Twitter månaden ut. Använd den hashtaggen om ni vill föra
  diskussion utan att behöva prenumerera på mina inlägg.
&lt;/p&gt;
&lt;p&gt;
  &lt;img alt=&quot;Undertecknad i aktion&quot; src=&quot;bilder/gothenburg-march-2011.jpg&quot; width=&quot;440&quot; height=&quot;383&quot; /&gt;
&lt;/p&gt;
&lt;h2&gt;Mitt pass började här&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://prezi.com/mh0m6gahnccx/webbkurser-i-gy-11&quot;&gt;Snabb översikt om de olika webbkurserna&lt;/a&gt; på Prezi.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/itpastorn/webbteknik-i-gy11&quot;&gt;Presentation av ämnet webbteknik&lt;/a&gt; på Slideshare.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  Jag har gjort en &lt;a href=&quot;//resources/bakgrundsmaterial-webben-inofficiell.pdf&quot;&gt;PDF på 27 sidor med
  mitt bakgrundstänkande&lt;/a&gt; som jag redovisat för Skolverket. Jag lägger ut den här, så slipper ni skriva till
  myndigheten och åberopa offentlighetsprincipen. Huvudsakligen så är det samma tankar och delvis samma text som jag
  tidigare har skrivit i den här bloggen.
&lt;/p&gt;

&lt;p&gt;
  Jag har också samlat alla länkar jag tycker är av intresse på &lt;a href=&quot;http://www.delicious.com/itpastorn&quot;&gt;min
  sida på Delicious&lt;/a&gt; (vars framtid är osäker, men än så länge ligger länkarna uppe).
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.delicious.com/itpastorn/gy11&quot;&gt;gy11&lt;/a&gt; (rubbet)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.delicious.com/itpastorn/uidesign&quot;&gt;uidesign&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.delicious.com/itpastorn/webbutveckling&quot;&gt;webbutveckling&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.delicious.com/itpastorn/accessibility&quot;&gt;tillgänglighet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Något om framtidens datorlandskap&lt;/h2&gt;

&lt;p&gt;
  HTML5 demos som illustrerar nya kapaciteter i webbläsarna. Mozilla har som princip att anstränga sig för att visa
  upp webben och inte just något som bara råkar fungera i deras webbläsare, så jag koncentrerar mig på deras demon.
  Motsatsen är Apple, som browser sniffar och &lt;strong&gt;i onödan&lt;/strong&gt; stänger bort konkurrenterna från sina demos.
  Det är ett paradexempel på hur man får låga betyg enligt kunskapskraven i de nya kurserna!
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://hacks.mozilla.org/2011/03/webowonder&quot; lang=&quot;en&quot;&gt;Firefox 4 Web Demos: announcing Web O Wonder&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://demos.mozilla.org/en-US&quot; lang=&quot;en&quot;&gt;Web O'Wonder demos&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/demos&quot; lang=&quot;en&quot;&gt;Mozilla Demo Studio&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.thewildernessdowntown.com/&quot; lang=&quot;en&quot;&gt;Wilderness Downtown&lt;/a&gt; (funkar bäst i Chrome)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vad är det för nya tekniker som kommer? Allt är ju inte HTML. Mozilla har en snygg överblick.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://mozillademos.org/demos/dashboard/demo.html&quot;&gt;Mozilla HTML5 and Friends Dashboard&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  &lt;q lang=&quot;en&quot;&gt;Ubiquitous computing&lt;/q&gt; kan också kallas 
  &lt;q&gt;&lt;a href=&quot;http://www.wirfs-brock.com/allen/posts/category/post-pc-computing&quot; lang=&quot;en&quot;&gt;ambient computing&lt;/a&gt;&lt;/q&gt;.
  En demo av detta från glastillverkaren (sic!) Gorilla Glass:
  &lt;a href=&quot;http://www.youtube.com/watch?v=6Cf7IL_eZ38&quot; lang=&quot;en&quot;&gt;A day made of glass&lt;/a&gt;.
&lt;/p&gt;

&lt;h2&gt;Resurser jag nämnde&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://interactwithwebstandards.com/&quot;&gt;InterACT-boken&lt;/a&gt; som jag är medförfattare till. Sök på Google
    för länkar till Bokus, AdLibris, etc. &lt;a href=&quot;http://interactwithwebstandards.com/&quot;&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://interact.webstandards.org/&quot;&gt;InterACT-kurserna&lt;/a&gt; (kompetenstabeller och frågor.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.webstandards.org/&quot; lang=&quot;en&quot;&gt;Web Standards Project&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://shareanduse.ning.com/group/programmering&quot;&gt;Forum kring programmering&lt;/a&gt; på Dela!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bra böcker om gränssnitt och användbarhet&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://javlaskitsystem.se/bestall/&quot;&gt;Jävla Skitsystem&lt;/a&gt;.
    Följ också &lt;a href=&quot;http://javlaskitsystem.se/&quot;&gt;bloggen&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://designingwebinterfaces.com/&quot; lang=&quot;en&quot;&gt;Designing Web Interfaces&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://projectuxd.com/&quot; lang=&quot;en&quot;&gt;A Project Guide to UX Design&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Min vän Aarron Walter kommer skriva en bok om &quot;Emotional Design&quot; för webben. Till dess kan ni
    &lt;a href=&quot;http://thinkvitamin.com/design/emotional-interface-design-the-gateway-to-passionate-users/&quot;&gt;läsa en bra
    artikel&lt;/a&gt; av honom.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  Eftersom jag inte hade något manus när jag talade om gränssnittsdesign, så ger jag här bara några få exempel
  på vad jag talade om.
&lt;/p&gt;

&lt;h2&gt;Exempel på god interaktionsdesign&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://addons.mozilla.org/en-us/firefox/addon/feedly/&quot; lang=&quot;en&quot;&gt;Feedly&lt;/a&gt; är ett bättre gränssnitt för
mina nyheter på &lt;a href=&quot;http://www.google.com/reader&quot;&gt;Google reader&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Man kan stänga &lt;a href=&quot;http://www.theinvisibl.com/2009/12/08/chrometabs/&quot;&gt;flera tabbar i följd&lt;/a&gt; i
    Chrome. Denna detalj till trots, så tycker jag dock &lt;em&gt;personligen&lt;/em&gt; att Chrome &lt;em&gt;överlag&lt;/em&gt; är sämre
    på användbarhet än Firefox.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=55PnjIfC6cw&quot; lang=&quot;en&quot;&gt;App tabs&lt;/a&gt; (programflikar) +
    &lt;a href=&quot;http://www.youtube.com/watch?v=5r0TQJ-gGi0&quot;&gt;Panorama&lt;/a&gt; är en fantastisk grej för alla oss som har
    &lt;a href=&quot;http://www.flickr.com/photos/keryxgunther/5171600934/&quot;&gt;tjogtals tabbar igång samtidigt&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Begrepp jag nämnde&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Augmented_reality&quot; lang=&quot;en&quot;&gt;Augmented reality&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Geolocation&quot;&gt;Geolokalisering&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/GUI_widget&quot; lang=&quot;en&quot;&gt;Widgets&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.google.se/search?q=user+interface+conventions&quot;&gt;Konventioner&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Programvara för kursen gränssnittsdesign&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.bluegriffon.org/&quot; lang=&quot;en&quot;&gt;BlueGriffon&lt;/a&gt; är troligen det bästa alternativet till Dreamweaver
    som bygger på öppen källkod.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://addons.mozilla.org/en-us/firefox/addon/pencil/&quot; lang=&quot;en&quot;&gt;Pencil&lt;/a&gt; är ett verktyg för att skapa
    skisser och prototyper.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Material jag håller på att utarbeta&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Thelin &amp;ndash; material för kurserna Webbutveckling 1 och Webbserverprogrammering 1&lt;/li&gt;
  &lt;li&gt;Thelin &amp;ndash; kurser i juni&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Saker som jag påbörjat, men ännu inte vet hur det slutar&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DVD-läromedel för gränssnittsdesign i samarbete med Moderskeppet.&lt;/li&gt;
&lt;li&gt;Fortbildning på Högskolan Väst&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  P.S. Min blogg har inget kommentarfält. Använd &lt;a href=&quot;http://keryx.se/kontakt/&quot;&gt;kontaktformuläret&lt;/a&gt; om ni vill
  mig något eller adressera &lt;a href=&quot;http://twitter.com/itpastorn&quot;&gt;@itpastorn&lt;/a&gt; på Twitter.
&lt;/p&gt;
</description>
         <pubDate>Thu, 17 Mar 2011 20:46:02 +0100</pubDate>
         <author>gunther@keryx.se (Lars Gunther)</author>
         <category domain="http://www.keryx.se/rss/kategorier.php">keryx/gunther/blogg</category>
         <guid isPermaLink="true">http://www.keryx.se/blogg-65</guid>
      </item>      <item>
         <title>Alternativ utformning av arbetsplatsförlagt lärande</title>
         <link>http://www.keryx.se/blogg-64</link>
         <description>&lt;p&gt;Mitt konsultarbete för Skolverket har under hösten gått in i en ny fas. Nu jobbar jag med utformningen av det &lt;a href=&quot;http://www.skolverket.se/sb/d/3004/a/20397&quot;&gt;fjärde året på Teknikprogrammet&lt;/a&gt;. Närmare bestämt tittar jag på IT-profilen, med en specialisering jag föreslår skall heta &lt;dfn&gt;mjukvarudesign&lt;/dfn&gt;. I detta arbetet har jag ett &lt;strong&gt;mycket radikalt förslag&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
  OBS! På grund av min klantighet med &lt;a href=&quot;http://www.phpmyadmin.net/home_page/index.php&quot;&gt;phpMyAdmin&lt;/a&gt;
  har detta blogginläggs originlatext raderats.
  Jag återskapar det så gott jag kan från mina anteckningar. (Och jepp, numera använder jag phpMyAdmin som min CMS&amp;hellip;)
&lt;/p&gt;
&lt;p&gt;
  Det är inte alla gymnasieskolor förunnat att ha företag på orten som jobbar inom området.
  Dels av denna orsak, samt av det enkla skäl att just utveckling av mjukvara är ett område som
  lämpar sig väl för distansarbete, så kan det vara skäl att titta på en alternativ modell. 
&lt;/p&gt;
&lt;p&gt;
  En förebild till detta kan vara Googles &lt;a href=&quot;http://code.google.com/intl/sv-SE/soc/&quot; lang=&quot;en&quot; hreflang=&quot;en&quot;&gt;Summer of Code&lt;/a&gt;, 
  där universitetsstudenter får jobba med ett projekt inom öppen källkod (FOSS). Dessa projekt
  ligger på en avancerad högskolenivå och behöver skalas ner till svensk gymnasienivå, men de
  innehåller alla väsentliga delar av vad som krävs:
&lt;p&gt;
&lt;ol&gt;
  &lt;li&gt;
    Konceptet är &lt;em&gt;väldefinierat&lt;/em&gt; av Google. Medverkande parter, dvs. lärosäte,
    FOSS-projekt och student, har en &lt;em&gt;given ram&lt;/em&gt; att följa.
  &lt;/li&gt;
  &lt;li&gt;Varje student har en erfaren handledare som kan såväl tekniken som arbetsmetodiken för det öppna källkodsprojektet.&lt;/li&gt;
  &lt;li&gt;Varje student skall skriva noggrann dokumentation av sitt arbete och redogöra för dess fortlöpande utveckling i en blogg.&lt;/li&gt;
  &lt;li&gt;Projektet skall leda till ett konkret resultat.&lt;/li&gt;
  &lt;li&gt;Alla projekt granskas och godkänns av såväl lärosäte, FOSS-projekt och Google centralt, innan arbetet får påbörjas.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
  Det som utmärker dessa projekt är inte bristande ambition, utan i den mån de misslyckas så beror det
  på att ribban lagts för högt. För svensk gymnasieskolas del, så gäller det naturligtvis att finna en 
  lämplig ambitionsnivå, men rätt utfört behöver detta &lt;em&gt;inte på något sätt vara ett andrahandsalternativ&lt;/em&gt;
  jämfört med traditionellt arbete sittandes på ett kontor.
&lt;/p&gt;
&lt;p&gt;
  Nationella riktlinjer kan utformas av Skolverket och bör innehålla moment som:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Eleven förväntas arbeta på regelbundna och bestämda tider, vilket kontrolleras av skolan.&lt;/li&gt;
  &lt;li&gt;Eleven skall ha en handledare från FOSS-projektet, och får inte bidra med arbete efter eget gottfinnande.&lt;/li&gt;
  &lt;li&gt;
    Elevens arbete skall syfta till &lt;a href=&quot;http://en.wikipedia.org/wiki/Revision_control#Version_merging&quot;&gt;incheckning&lt;/a&gt;
    i det officiella projektet, av tester, buggrapporter, patchar, moduler, dokumentation, etc. 
    Eleven skall alltså inte skriva enbart på sin egen blogg eller göra arbete där projektets kod återanvänds.
    En elev skall inte bara använda en JQuery modul (som exempel) utan förbättra modulen.
  &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
  Alla berörda parter agerar utifrån ett skrivet avtal, enligt en mall som Skolverket tillhandahåller.
  Alla projekt kan bli föremål för granskning av skolinspektionen eller andra myndigheter, så att kvalitén säkerställs.
  Däremot är det nog inte realistiskt att Skolverket granskar varje enskilt projekt.
&lt;/p&gt;
&lt;p&gt;
  Att tillåta medverkan i FOSS-projekt är ett avsevärt bättre alternativ till att låta eleverna driva &lt;q&gt;egen firma&lt;/q&gt; 
  eller jobba med helt påhittade projekt, som kan bli konsekvensen av att enskilda skolor inte lyckas tillhandahålla nog
  med praktikplatser, eller att de ppga. brist på praktikplatser tvingas dra ner på antalet som går utbildningen,
  trots att elevintresse finns.
&lt;/p&gt;
&lt;p&gt;
  Detta kommer att kräva att lärare på skolan tar ett aktivt ansvar för att kvalitetskontrollera
  FOSS-projekten och den kontakt som eleven har med sin handledare, så det är inte ett sätt för skolor att 
  slippa jobb!
&lt;/p&gt;</description>
         <pubDate>Sun, 07 Nov 2010 07:16:28 +0100</pubDate>
         <author>gunther@keryx.se (Lars Gunther)</author>
         <category domain="http://www.keryx.se/rss/kategorier.php">keryx/gunther/blogg</category>
         <guid isPermaLink="true">http://www.keryx.se/blogg-64</guid>
      </item>      <item>
         <title>Kort politiskt mellanspel</title>
         <link>http://www.keryx.se/blogg-63</link>
         <description>&lt;p&gt;Ordinarie sändningar (om webbteknik) avbryts för en kort reflektion om valet. Varning för spydigheter!&lt;/p&gt;
&lt;p&gt;Sällan har så mycket korkat sagts i en valrörelse:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;USA skall utrymma sina baser i Tyskland, Japan och Sydkorea, och på Grönland!&lt;/li&gt;
  &lt;li&gt;Afghanistan åter till talibanerna! (Visste du förresten om att &lt;a href=&quot;http://www.stratfor.com/weekly/20100901_militancy_us_drawdown_afghanistan&quot;&gt;fler civila dog innan USAS:s invasion än efter&lt;/a&gt;?)&lt;/li&gt;
  &lt;li&gt;Barnen skall inte kunna tas om hand av sina föräldrar hemma, men gärna lämnas till en butler i tunnelbanan.&lt;/li&gt;
  &lt;li&gt;Om kvinnorna fortfarande ammar när deras kvoterade dagar är slut, ja då skall det användas bröstpump. (En bra bransch att vara verksam inom, i händelse av en rödgrön valseger&amp;hellip;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jag vet inte om jag skall skratta eller gråta. Detta kommenteras nog bäst av Monthy Python:&lt;/p&gt;

&lt;iframe class=&quot;youtube-player&quot; width=&quot;440&quot; height=&quot;355&quot; src=&quot;http://www.youtube.com/embed/sFBOQzSk14c&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Någon slags allvar finns det dock. Med Ohly i regeringen, så riskerar vi att se &lt;a href=&quot;http://penilla.nu/morr/118.php&quot;&gt;en helt ny (eller öststatsgammal) rättslig tradition införas&lt;/a&gt;. &lt;/p&gt;</description>
         <pubDate>Sun, 05 Sep 2010 18:34:20 +0200</pubDate>
         <author>gunther@keryx.se (Lars Gunther)</author>
         <category domain="http://www.keryx.se/rss/kategorier.php">keryx/gunther/blogg</category>
         <guid isPermaLink="true">http://www.keryx.se/blogg-63</guid>
      </item>      <item>
         <title>Tyck till om mina kursplaner och köp min bok!</title>
         <link>http://www.keryx.se/blogg-62</link>
         <description>&lt;p&gt;Nu har mitt arbete publicerats mitt arbete, för Skolverket och för Interact. &lt;a href=&quot;http://www.skolverket.se/sb/d/2986&quot;&gt;Kursplanerna för gy11&lt;/a&gt; är ute på remiss på Skolverkets webbplats. Dessutom har boken &lt;a href=&quot;http://interactwithwebstandards.com/&quot;&gt;Interact with Web Standards&lt;/a&gt; nu kommit ut till försäljning. Jag har skrivit ett av kapitlen och hjälpt till med ett och annat i övrigt. För någon månad sedan lades också kursen &lt;a href=&quot;http://interact.webstandards.org/curriculum/serve-side-dev/server-side-scripting-1?overview&quot;&gt;Server Side Scripting&lt;/a&gt; upp för Interact
&lt;/p&gt;
&lt;h2&gt;Skolverksarbetet&lt;/h2&gt;

&lt;p&gt;Sedan någon vecka så finns mina ämnes- och kursplaner i &lt;a href=&quot;http://www.skolverket.se/sb/d/3588&quot;&gt;webbteknik&lt;/a&gt; och &lt;a href=&quot;http://www.skolverket.se/sb/d/3585&quot;&gt;gränssnittsdesign&lt;/a&gt; ute på remiss. Nu behöver jag din hjälp. Gå till diskussionsforumet, försök ignorera att dess gränssnitt är horribelt, och ge konstruktiv kritik eller uttryck ditt stöd. Det sistnämnda är minst lika viktigt. Jag förväntar mig kritik från en grupp lärare som inte fortbildat sig på flera år, utan fortfarande harvar runt i Frontpage-träsket. Av detta skäl är det jätteviktigt att du som ser värdet av standarder och tillgänglighet också uttrycker ditt stöd.&lt;/p&gt;

&lt;p&gt;Mina vänner inom OWEA tittar också på kursplanerna. Låt mig citera ett mejl jag fått från &lt;a href=&quot;http://www.webteacher.ws/&quot;&gt;Virginia DeBolt&lt;/a&gt;, som är typiskt för deras feedback.&lt;/p&gt;

&lt;blockquote lang=&quot;en&quot;&gt;&lt;p&gt;I've looked at the courses that are under consideration in Sweden, and wanted to express my enthusiastic support for the inclusion of web standards. To be truly universal in reach, web education must include usability, accessibility and standards. If these courses are implemented in Sweden, it will make Swedish web education a leading example for other countries.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Är du intresserad av andra IT-relaterade ämnen, så tyck gärna till om dem också. &lt;a href=&quot;http://www.skolverket.se/sb/d/3396&quot;&gt;Programmering&lt;/a&gt; diskuteras i &lt;a href=&quot;http://www.skolverket.se/sb/d/3004/a/20181&quot;&gt;Teknikprogrammets forum&lt;/a&gt;, liksom mina ämnen, och de övriga IT-ämnena diskuteras i &lt;a href=&quot;http://www.skolverket.se/sb/d/2990&quot;&gt;Elprogrammets&lt;/a&gt; forum. Titta också gärna på &lt;a href=&quot;http://www.skolverket.se/sb/d/3869&quot;&gt;digitalt skapande&lt;/a&gt;, som diskuteras i &lt;a href=&quot;http://www.skolverket.se/sb/d/2991/a/20179&quot;&gt;Estetprogrammets forum&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Interact with Web Standards&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;http://interactwithwebstandards.com/images/interact-web-standards.png&quot; alt=&quot;Interact-boken&quot; height=&quot;200&quot; width=&quot;200&quot; /&gt;Så är jag då också författare, åtminstone till ett kapitel i boken. Jag är omåttligt stolt över resultatet. Jessi och Leslie har gjort ett helt fantastiskt jobb med designen. Innehållet är också superbt!&lt;/p&gt;

&lt;p&gt;Boken funkar utmärkt som fortbildning inför Gy11. Kapitel 1-4 kan alla läsa, även icke-webbutvecklare. Kapitel 4 (mitt kapitel) hjälper till med ämnesmål 10 (&lt;q&gt;Förståelse av hur gränssnitten finns i och påverkar vår vardag samt hur de kan användas för att förbättra den&lt;/q&gt;) i ämnet gränssnittsdesign och ämnesmål 1 (&lt;q&gt;Kunskaper om internets historia, betydelse, terminologi och grundläggande funktionalitet&lt;/q&gt;) i ämnet webbteknik.&lt;/p&gt;

&lt;p&gt;Projektmetodik (som passar båda ämnena) behandlas i kapitel 5-9. Dessa täcker dessutom kanske 50 % av stoffet för ämnet gränssnittsdesign. Kapitel 10 och framåt går igenom ungefär det man bör kunna om HTML och CSS efter kursen Webbutveckling 1.&lt;/p&gt;

&lt;p&gt;Lärare och elever på gymnasienivå har alltså stor nytta av boken, liksom högskolestudenter på A-nivå. Men dessutom fungerar den som grund- eller uppfräschningsbok för alla som är intresserade av webbdesign eller webbutveckling. &lt;a href=&quot;http://www.google.se/search?q=tolle+lege&quot; lang=&quot;la&quot;&gt;Tolle, lege!&lt;/a&gt;&lt;/p&gt;

</description>
         <pubDate>Mon, 31 May 2010 16:00:18 +0200</pubDate>
         <author>gunther@keryx.se (Lars Gunther)</author>
         <category domain="http://www.keryx.se/rss/kategorier.php">keryx/gunther/blogg</category>
         <guid isPermaLink="true">http://www.keryx.se/blogg-62</guid>
      </item>      <item>
         <title>Gy -11 webbkursernas inbördes relation</title>
         <link>http://www.keryx.se/blogg-61</link>
         <description>&lt;p&gt;I arbetet med Gy -11 så har jag föreslagit och fått respons för en kursstruktur baserad på kurser i gränssnittsdesign, (Front End) webbutveckling och webbserverprogrammering. Till detta kommer två ämnen som berörs: Digitalt skapande och programmering. Jag skall försöka reda ut hur dessa förhåller sig inbördes och hur de förhåller sig till dagens kurser. Det förslag som snart kommer ut på remiss innebär att webben ses som den huvudsakliga plattformen för all slags media. Kurserna i webbteknik kommer därför fungera som spindeln i nätet.&lt;/p&gt;
&lt;h2&gt;Relativt idag&lt;/h2&gt;

&lt;h3&gt;Dagens problem&lt;/h3&gt;

&lt;p&gt;Idag finns det en kurs som heter &lt;a href=&quot;http://www.skolverket.se/sb/d/726/a/13845/func/kursplan/id/3423/titleId/EOS1201%20-%20Digitalt%20skapande&quot; title=&quot;Dagens kursplan för digitalt skapande&quot;&gt;digitalt skapande&lt;/a&gt;, vars innehåll enligt kursplanen är till 80 % identisk med dagens ämne &lt;a href=&quot;http://www.skolverket.se/sb/d/726/a/13845/func/amnesplan/id/MUM/titleId/Multimedia&quot; title=&quot;Dagens ämnesbeskrivning för multimedia&quot;&gt;multimedia&lt;/a&gt;. Skillnaden är mer en fråga om tradition. Digitalt skapande ligger på estetiska lärares bord, medan multimedia hamnar på IT-sidan. De enda reella skillnaderna är att multimediakursen handlar om att sammanfoga text, ljud och bild, samt att förse resultatet med ett mått av interaktivitet. Om man vill skulle man kunna säga att digitalt skapande idag utgör en delmängd av multimediakursen &amp;mdash; så som det beskrivs i kursplanerna.&lt;/p&gt;

&lt;p&gt;Multimediakursen å sin sida är skriven för ett tänkande runt &lt;a href=&quot;http://en.wikipedia.org/wiki/Adobe_Director&quot;&gt;Director&lt;/a&gt; eller &lt;a href=&quot;http://en.wikipedia.org/wiki/Encarta&quot;&gt;Encarta&lt;/a&gt;, med CD-skivan som tänkt plattform. &lt;strong&gt;Dagens enda relevanta plattform är webben&lt;/strong&gt;, även om man inte nödvändigtvis gör en traditionell webbplats. Youtube-spelaren i iPhone är exempelvis ett paradexempel på webbteknik och inget annat.&lt;/p&gt;

&lt;p&gt;Ämnet webbdesign &lt;a href=&quot;blogg-60&quot;&gt;har jag sågat i tidigare inlägg&lt;/a&gt; och skall som jag skriver där delas upp i två delar, ett som fokuserar design och ett som fokuserar kod och annan teknik. Detta reflekterar verkligheten både i dagens undervisningssituation, där lärare väljer inriktning efter intresse och kompetens, och i dagens arbetsliv, där &lt;a lang=&quot;en&quot; href=&quot;http://www.456bereastreet.com/archive/200904/professional_front-end_engineering_explained/&quot;&gt;en helt ny yrkeskategori&lt;/a&gt; har uppstått på 2000-talet: &lt;a href=&quot;http://www.nczonline.net/blog/2007/08/15/what-makes-a-good-front-end-engineer/&quot;&gt;Front End Engineer&lt;/a&gt;, på svenska ofta kallad &lt;a href=&quot;http://www.google.se/search?q=gr%C3%A4nssnittsutvecklare&amp;amp;ie=utf-8&amp;amp;oe=utf-8&amp;amp;aq=t&amp;amp;rls=org.mozilla:sv-SE:official&amp;amp;client=firefox-a&quot;&gt;gränssnittsuvecklare&lt;/a&gt;. Jag undviker dock det ordet i kursplanerna för att tydliggöra skillnaderna mellan de nya ämnena.&lt;/p&gt;

&lt;p&gt;Slutligen finns det en kurs i &lt;a href=&quot;http://www.skolverket.se/sb/d/726/a/13845/func/kursplan/id/3726/titleId/DTR1211%20-%20Databashantering&quot;&gt;databashantering&lt;/a&gt;, som i alla &lt;a href=&quot;http://www.kurslitteratur.se/Item/243296&quot;&gt;läromedel&lt;/a&gt; blir en slags fördjupad officekunskap, där eleverna slösar bort sin tid med att designa formulär och rapporter i MS Access. Jag vill renodla detta till databasutveckling, som en del av webbserverprogrammering och samtidigt öppna upp för möjligheten att titta på &lt;a href=&quot;http://en.wikipedia.org/wiki/NoSQL&quot;&gt;alternativ till traditionella relationsdatabaser&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Vägen framåt&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;bilder/gy-11-kontra-idag.svg&quot; title=&quot;Följ länk (klicka) för SVG version&quot;&gt;&lt;img src=&quot;bilder/gy-11-kontra-idag.png&quot; alt=&quot;Kursstruktur jämfört med idag (förklaras i texten nedan)&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I bilden ovan synliggörs hur ämnena i dagens gymnasium relaterar till förslagen i Gy-11. Det särskiljande för multimedia kontra digitalt skapande (sammanfogning och interaktivitet) gär till webbutvecklingskursen. Resten till digitalt skapande.&lt;/p&gt;

&lt;p&gt;Lägg märke till att webbutveckling och webbserverprogrammering är kursnamn, inte ämnesnamn. De ryms båda under ämnet webbteknik.&lt;/p&gt;

&lt;p&gt;Designaspekterna av multimedia och webbdesign går till gränssnittsdesign &amp;mdash; som ju har sitt fokus på att göra attraktiva och användbara gränssnitt för just interaktion. Lägg märke till att ämnet gränssnittsdesign också är användbart för spelutveckling, gränssnitt på telefoner eller surfbrädor (slates) och annan mjukvaruutveckling.&lt;/p&gt;

&lt;p&gt;Teknikaspekterna av multimedia och webbdesign går till i webbutveckling. Detta är spindeln i nätet-kurser, där allt skall vävas samman.&lt;/p&gt;

&lt;p&gt;De användbara delarna av databashantering, alltså de som fokuserar databasteori, klient/server, normalisering, SQL, etc, går till webbserverprogrammering. Resten slipper framtidens gymnasieelever helt!&lt;/p&gt;

&lt;h2&gt;Ämnenas inbördes områden&lt;/h2&gt;

&lt;p&gt;Ett av våra uppdrag som ämnesexperter är att klargöra hur de olika ämnena avgränsas och skiljer sig från varandra. Nästa bild klargör detta förhoppningsvis:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;bilder/kursernas-relationer.svg&quot; title=&quot;Följ länk (klicka) för SVG version&quot;&gt;&lt;img src=&quot;bilder/kursernas-relationer.png&quot; alt=&quot;Kursstruktur för Gy -11 (överlappande ellipser förklaras i texten nedan)&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Som jag nu ritar ämnena så syns också den självklara överlappningen som måste finnas.&lt;/p&gt;

&lt;h3&gt;Digitalt skapande&lt;/h3&gt;

&lt;p&gt;Detta ämne handlar om att framställa digital bild, ljud och video. Det kan utgå från något inspelat/fotograferat eller skapas helt i datorn (digitalt måleri, animering, etc). Slutprodukten är enskilda bilder, animeringar, ljudklipp, etc. Kanske kan här också ingå ljud och ljuseffekter för konserter, TV-program eller &lt;a href=&quot;http://vimeo.com/4238052&quot;&gt;som offentlig konst&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Gränssnittsdesign&lt;/h3&gt;

&lt;p&gt;Frågor om färgteori, komposition, typsnitt och liknande kommer överlappa till digitalt skapande.  Dessutom kommer man att behöva anpassa bilder, ljud och video till sin produkt, så viss redigering finns också här. Men den övergripande frågan är nu hur användaren skall interagera mot det som visas. Det som visas skall kommunicera ett budskap eller en upplevelse. Här ställs frågan om hur text skrivs för att fungera på valt medium och hur den skall sammanfogas med bild, ljud och video. Vilka &lt;q&gt;widgets&lt;/q&gt; skall användas, vilken feedback skall användaren få på klick, knapptryck eller pek på skärmen. Det som skapas är en upplevelse och därför ingår också användbarhetstestning i ämnet.&lt;/p&gt;

&lt;p&gt;Slutprodukten är en prototyp som ger en realistisk grund för bedömning av designen som helhet och en guide till implementering, exempelvis i form av en stilguide till webbutvecklaren. Bygger man en webbplats så är det OK att använda Dreamweaver i grafiskt läge på den här kursen.&lt;/p&gt;

&lt;h3&gt;Webbutveckling&lt;/h3&gt;

&lt;p&gt;Fyra förkortningar summerar detta ämne: &lt;a href=&quot;http://blog.fawny.org/2010/01/29/backtherighthorse/&quot; title=&quot;You bet against HTML and you loose&quot;&gt;(X)HTML&lt;/a&gt;, CSS, DOM och ECMAScript. Här skall alltså ett gränssnitt utvecklas från prototyp till användbar produkt. Här skall eleverna koda! Validerande (X)HTML, semantisk (X)HTML, effektiv CSS, &lt;a href=&quot;http://en.wikipedia.org/wiki/Unobtrusive_JavaScript&quot;&gt;icke-inkräktande (unobtrusive) DOM-skript&lt;/a&gt;, &lt;q lang=&quot;en&quot;&gt;progressive enhancement&lt;/q&gt;, etc. Allt för att åstadkomma applikationer som fungerar både på pyttesmå skärmar med touch-gränssnitt och gigantiska skärmar med konventionell muspekare plus tangentbord, &lt;a href=&quot;http://www.nczonline.net/blog/2009/11/10/introduction-to-web-accessibility/&quot;&gt;tillgänglighet&lt;/a&gt; också för blinda, sökmotoroptimering, &lt;a href=&quot;http://www.getelastic.com/site-performance/&quot;&gt;korta nedladdningstider och minimal latens&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Här skapas inga bilder, men vi ställer frågor om hur man kan optimera dem så att de skickas så effektivt som möjligt över nätet. När är JPEG bättre än PNG? Vilka tröskelvärden skall jag ha på mina JPEG-bilder? Vilka färger skall ingå i paletten på PNG-bilderna? Är &lt;a href=&quot;http://www.sitepoint.com/blogs/2010/01/25/what-everybody-ought-to-know-about-using-svg-right-now/&quot;&gt;SVG&lt;/a&gt; eller &lt;a href=&quot;https://developer.mozilla.org/en/Canvas_tutorial&quot;&gt;Canvas&lt;/a&gt; det bättre alternativet för en viss animering?&lt;/p&gt;

&lt;p&gt;Sedan designern valt typsnitt skall webbutvecklaren få dem att funka. Skall de vara &lt;a href=&quot;https://developer.mozilla.org/en/CSS/@font-face&quot;&gt;nedladdningsbara webbfonter&lt;/a&gt;? Skall man använda någon &lt;a href=&quot;http://www.smashingmagazine.com/20&lt;09/10/22/rich-typography-on-the-web-techniques-and-tools/&quot;&gt;ersättningsteknik&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;I denna kurs skall det sväras över bristande funktionalitet i vissa webbläsare &amp;mdash; fast &lt;a href=&quot;http://ie6funeral.com/&quot;&gt;MSIE 6 kommer vara död&lt;/a&gt; till år 2014, tack och lov.

&lt;p&gt;Eftersom tekniken återverkar på designen kommer det självklart finnas viss överlappning mot gränssnittsdesignen.&lt;/p&gt;

&lt;p&gt;Slutprodukten i detta ämne kan vara en statisk webbplats, men jag ser gärna att den är en mall för Wordpress eller en annan CMS.&lt;/p&gt;

&lt;h3&gt;Webbserverprogrammering&lt;/h3&gt;

&lt;p&gt;Hade jag fått använda engelska skulle denna kurs heta &lt;q&gt;Server Side Scripting&lt;/q&gt;. Jag förutspår att PHP och .NET med VB kommer bli de två mest förekommande undervisningsvarianterna. JSP, Ruby on Rails, Python, JavaScript på servern, etc, är naturligtvis alternativ. I första kursen bygger eleven en enkel &lt;a href=&quot;http://sv.wikipedia.org/wiki/Inneh%C3%A5llshanteringssystem&quot;&gt;CMS&lt;/a&gt;, eller anpassar en befintlig CMS till egna önskemål. Det sistnämnda innebär &lt;em&gt;inte&lt;/em&gt; att skriva mallar och CSS till Wordpress &amp;mdash; det är ju Front End utvecklarens uppgift! För de lägre betygen tillåts det att eleven bygger dynamiska &lt;q&gt;påhäng&lt;/q&gt; som kontaktformulär och gästböcker på en i övrigt statisk webbplats.&lt;/p&gt;

&lt;p&gt;I den andra kursen skapar eleven en mer multifunktionell CMS, som helst bör erbjuda en webbtjänst eller hämta sin egen information från en sådan.&lt;/p&gt;

&lt;h3&gt;Programmering&lt;/h3&gt;

&lt;p&gt;Det förslag som nu legat ute på remiss i ämnet programmering talar om att skapa mjukvara med användbara gränssnitt. Här finns alltså en viss nödvändig överlappning.&lt;/p&gt;

&lt;p&gt;När dessa gränssnitt skapas, så kan det mycket väl vara så att man använder &lt;a href=&quot;http://en.wikipedia.org/wiki/Declarative_programming&quot;&gt;deklarativ&lt;/a&gt; eller funktionell programmering, helt eller delvis med rena webbtekniker. Också där finns det alltså en överlappning. Likaså sker ju de mer avancerade inslagen i webbutvecklingen med hjälp av programmering. Jag tänker främst på JavaScript, men också ActionScript för Flash eller JavaFX kan dyka upp här.&lt;/p&gt;

&lt;p&gt;(Kursen webbutveckling 2 tillåter att man fokuserar på insticksprogram, med sina skriptspråk. Även om jag är en anhängare av standarder inser jag att dessa fortfarande kommer ha sina nischer.)&lt;/p&gt;

&lt;p&gt;Att webbserverprogrammering överlappar med det allmänna programmeringsämnet är självklart. Många moment kommer vara identiska, just för att man programmerar i båda ämnena! Skillnaden är att ämnet programmering fokuserar mer på allmän programmeringsteori, algoritmer och att den inte får fokusera på webbläsaren eller webbservern som enda körmiljö.&lt;/p&gt;

&lt;p&gt;Den kanske mer dolda överlappningen mellan dessa två ämnen är att man i programmering 2 kan implementera ett API mot en webbtjänst, på hög nivå eller på socket-nivå.&lt;/p&gt;

&lt;h2&gt;Om detta haft mer genomarbetad webbfunktionalitet&amp;hellip;&lt;/h2&gt;

&lt;p&gt;Så skulle jag i kursen gränssnittsdesign tittat på bilden ovan och funderat på några frågor som:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Hur kan jag göra ellipserna och deras text tydligare? Fler färger? (Nu skrevs detta för tryck från början.)&lt;/li&gt;
  &lt;li&gt;Typsnittet i ellipserna&lt;/li&gt;
  &lt;li&gt;Kanske skulle förklaringarna jag skrivit om ämnena  och om överlappningarna  dyka upp som en förklarande text när man klickar/pekar.&lt;/li&gt;
  &lt;li&gt;Då måste den klickbara utan markeras när muspekaren hovrar.&lt;/li&gt;
  &lt;li&gt;Och varje klickbar punkt skall kunna kommas åt via tabbtangenterna fär de som inte kan styra en mus.&lt;/li&gt;
  &lt;li&gt;Har jag nog kontrast för användare med nedsatt syn eller nog färgavstånd för alla oss färgblinda?&lt;/li&gt;
  &lt;li&gt;Vill jag att förklarande text snyggt tonar in och ut när den aktiveras?&lt;/li&gt;
  &lt;li&gt;Vill jag ha något annat &lt;q&gt;bling&lt;/q&gt;? Kanske kan man animera bilden? Men är det något som användarna skulle uppskatta eller bara onödigt? Låt mig göra en A/B test!&lt;/li&gt;
  &lt;li&gt;Etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I kursen webbutveckling skulle jag ställt mig frågan hur detta skall bli verklighet på ett sätt som är optimalt:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Kan bilden vara SVG? Vad händer med MSIE-användarna? Skall de få en fallback genom en PNG-bild som funkar som en imagemap?&lt;/li&gt;
  &lt;li&gt;Hur kan jag få förklarande text att snyggt tona in och ut när den aktiveras? Kan jag använda &lt;a href=&quot;http://jquery.com/&quot;&gt;JQuery&lt;/a&gt; för detta eller skall jag koda allt själv?&lt;/li&gt;
  &lt;li&gt;Och hur funkar det när JavaScript är avslaget eller blockerat?&lt;/li&gt;
  &lt;li&gt;Och hur gör jag bilden begriplig för de som &lt;q&gt;ser&lt;/q&gt; den via talsyntes? Det lär ju inte räcka med ett alt-attribut, men kanske title-attribut på alla klickbara ytor?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I kursen webbserverprogrammering kanske jag hade gjort så att texten låg i en databas och att den kunde enkelt redigeras genom en redigeringsfunktion som endast är åtkomlig för behöriga användare.&lt;/p&gt;

&lt;h2&gt;Om jag hade en utbildning med spelutvecklingsprofil&lt;/h2&gt;

&lt;p&gt;Så skulle jag låta eleverna designa monster och andra karaktärer, landskap och byggnader i kursen digitalt skapande.&lt;/p&gt;

&lt;p&gt;I kursen gränssnittsutveckling hade jag funderat på frågor som hur skall figurerna röra sig? (Vad är spelidén?) Skall jag styra med accelerometern eller med knappar, eller både och? Vilken fakta skall synas på skärmen hela tiden och vilken skall finnas tillgänglig med kommando  och i så fall vilka kommandon?&lt;/p&gt;

&lt;p&gt;Om spelet skall vara webbaserat så går jag vidare till kurserna inom ämnet webbteknik för att åstadkomma detta, annars så blir det en progression till det vanliga programmeringsämnet. I båda fallen kan spelen vara multiplayer och kommer då att skicka data via sockets (HTML5) eller api:er.&lt;/p&gt;
</description>
         <pubDate>Fri, 26 Feb 2010 09:13:33 +0100</pubDate>
         <author>gunther@keryx.se (Lars Gunther)</author>
         <category domain="http://www.keryx.se/rss/kategorier.php">keryx/gunther/blogg</category>
         <guid isPermaLink="true">http://www.keryx.se/blogg-61</guid>
      </item>      <item>
         <title>Hej då webbdesign!</title>
         <link>http://www.keryx.se/blogg-60</link>
         <description>&lt;p&gt;Gymnsieskolan idag har ett ämne som heter &lt;a href=&quot;http://www.skolverket.se/sb/d/726/a/13845/func/kursplan/id/2953/titleId/DTR1210%20-%20Webbdesign&quot;&gt;webbdesign&lt;/a&gt;. Ämnesnamnet leder mångas tankar till grafisk design enbart, och många läroböcker utgår fortfarande från Frontpage. Samtidigt skall eleven kunna &lt;q&gt;satser, funktioner och syntax&lt;/q&gt; i &lt;q&gt;beskrivningsspråket&lt;/q&gt;, vilket gör att man inte kan ignorera handkodning av HTML och CSS. Det blir mer och mer klart att detta är två delvis skilda kompetenser i yrkeslivet, att olika lärare behandlar kursen med olika innehåll och att eleverna ofta förvånas över delar av innehållet. Koppla detta till undervisning som i värsta fall inte ändrats på 10 år och vi har problem, samtidigt som datorindustrin som helhet genomgår ett &lt;strong&gt;paradigmskifte&lt;/strong&gt;. Ämnet måste så i grunden ändras att kontinuiteten med dagens kurs inte är självklar. Ett första steg är att dela det i två ämnen. Med ord och filmer skall här jag försöka förklara varför och hur.
&lt;/p&gt;
&lt;p&gt;webbtekniken används alltmer till att skapa applikationer. Detta ställer två krav på kunnande som inte stod i fokus på 90-talet, när dagens kursplan skrevs. För det första måste det finnas kunnande om tekniken: HTML, CSS, JavaScript, DOM, SVG, XHR, etc. &lt;dfn&gt;Front End utveckling&lt;/dfn&gt; måste bli ett eget ämne, med fokus på teknik. Samtidigt måste designsidan utvecklas till att omfatta såväl interaktion som utseende. Faktum är att gränsen mellan att utveckla en webbapplikation och en annan slags applikation är så upplöst att det snarare går att utveckla designämnet till att omfatta &lt;em&gt;alla slags gränssnitt&lt;/em&gt;: Webbplatser, widgets, desktop-program, mobilprogram, TV-spel &amp;mdash; ja, varför inte CNC-maskiner? Jag förutspår en kraftig förändring av deras gränssnitt de närmaste åren. Bort från att omständigt koda banor för verktygen, till att beskriva det slutliga utseendet och låta datorn göra resten.&lt;/p&gt;

&lt;p&gt;Vi är också på väg in i en tid av &lt;strong&gt;total&lt;/strong&gt; datorisering (&lt;a href=&quot;http://en.wikipedia.org/wiki/Ubiquitous_computing&quot;&gt;ubiquitous computing&lt;/a&gt;, se filmer nedan), där man inte längre &lt;q&gt;sitter vid datorn&lt;/q&gt;. Datorerna bäddas in prylar och hus och vår interaktion mot dem kommer ske utan tanke på att det är just en dator vi agerar mot. Gester och tal kommer vara självklara sätt att styra vår genomdatoriserade vardag.&lt;/p&gt;

&lt;h2&gt;Gränssnittsdesign&lt;/h2&gt;

&lt;p&gt;Jag föreslår alltså att gymnasieskolan får ett nytt ämne. Webbdesign ersätts av &lt;dfn&gt;gränssnittsdesign&lt;/dfn&gt;, ett nytt ämne för en ny era inom datortekniken! Ämnet kommer bla. ha följande ledord:&lt;/p&gt;

&lt;dl&gt;
  &lt;dt&gt;Användbarhet&lt;/dt&gt;
  &lt;dd&gt;I slutändan finns det inget viktigare än att användaren kan uträtta sin uppgift, interagera på önskvärt sätt med andra användare eller finna sökt information.&lt;/dd&gt;
  &lt;dt&gt;Skönhet&lt;/dt&gt;
  &lt;dd&gt;Estetiskt tilltalande applikationer är förtroendiingivande och skapar trivsel. Undersökningar visar att en av anledningarna till att affärsapplikationer inte blir använda, utan bakom ryggen på ledningen ersatta av användarnas egna program, är att dessa är mer tilltalande estetiskt.&lt;/dd&gt;
  &lt;dt&gt;Tillgänglighet&lt;/dt&gt;
  &lt;dd&gt;Nya framsteg är ofta resultatet av forskning som ursprungligen gjordes för att hjälpa de som har funktionsnedsättningar, samtidigt kan de ironiskt nog också bli det som utestänger dessa. Man måste därför lära sig tänka på tillgängligheten från första början. &lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;Gränssnittet omfattar såväl in-enheter som ut-enheter. Såväl Playstation 3 som Nintendo Wii hade rörelsesensorer i sina kontroller, men det var Wii som utnyttjade dem till att skapa en ny spelupplevelse, och blev den överlägset mer sålda konsollen. I fråga om funktioner låg iPhone långt efter konkurrenterna, och gör så delvis än idag, men succé blev det likväl. Tack vare att man omsatte touchskärmens möjligheter i ett användarvänligt och tilltalande gränssnitt, i stället för att bara låta den ersätta musen rakt upp och ner.&lt;/p&gt;

&lt;h2&gt;Varianter&lt;/h2&gt;

&lt;p&gt;Jag tänker mig att detta ämne skall vara oberoende av körmiljö och plattform. Gymnasieskolorna kan variera det utifrån tillgänglig lärarkompetens och skolans profil. Exempel på hur det kan genomföras:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Utveckling av &lt;em&gt;prototyper&lt;/em&gt; till webbplatser, med hjälp av Dreamweaver, Expression Web eller liknande. (Frontpage är fortfarande förbjudet. Det skräpprogrammet kan inte användas ens för det grafisk webbdesign längre. Så föråldrat är det.)&lt;/li&gt;
  &lt;li&gt;Utveckling av gränssnitt för dataspel.&lt;/li&gt;
  &lt;li&gt;Utveckling av gränssnitt för mobiltelefonapplikationer.&lt;/li&gt;
  &lt;li&gt;Utveckling av gränssnitt för det intelligenta rummet, hemmet, fabriken eller staden.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Det kan låta på den första punkten som om dagens webbdesignämne trots allt lever kvar. Så här tänker jag mig skillnaderna, som är viktiga även om den ges enligt alternativ ett ovan:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Tydligt fokus på användbarhet och tillgänglighet. Ingendera aspekten syns i dagens kursplan.&lt;/li&gt;
  &lt;li&gt;Tydligt fokus på interaktion. Dagens kursplan talar om &lt;q&gt;länkar&lt;/q&gt; och &lt;q&gt;animeringar&lt;/q&gt;. Man riktigt ser framföre sig broschyrsidor med ett Flash-intro&amp;hellip;&lt;/li&gt;
  &lt;li&gt;Klargörande om att eleven inte förväntas ta fram en fullt fungerande webbplats, utan att det måste till arbete med kod och servertekniker också. (Dessa områden täcks upp av ämnena webbutveckling och webbprogrammering, i mitt förslag. Kuserna kan naturligtvis vävas in i varandra!)&lt;/li&gt;
  &lt;li&gt;Klargörande om designelement eleven förväntas känna till och kunna använda. (Mindre snömos!)&lt;/li&gt;
  &lt;li&gt;Klargörande om att produkten skall i slutändan fungera på en mängd olika slags enheter, med skärmar som varierar i storlek från någon tum, till flera meter &amp;mdash; &lt;q lang=&quot;en&quot;&gt;tabs, pads and boards&lt;/q&gt; (Mark Weiser). Redan 2011 kommer det kanske vara så att fler surfar från sin telefon än från en &lt;q&gt;dator&lt;/q&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En positiv bieffekt är att eleven befrias från kravet på att gränssnittet skall funka i alla gamla och dåliga webbläsare, för det är utvecklarens ansvar, inte designerns!&lt;/p&gt;

&lt;h2&gt;Bakgrund och inspiration&lt;/h2&gt;

&lt;p&gt;Jag har samlat på mig ett antal resurser som demonstrerar gränssnittens utveckling och betydelse, eller som beskriver övergången från dagens era (en dator per person), till morgondagens era (flera datorer per person, datorer överallt). Nedanför alla dessa filmer ger jag också fortbildningstips.&lt;/p&gt;

&lt;h3&gt;TED 2006 &amp;mdash; världen upptäcker multitouch&lt;/h3&gt;

&lt;p&gt;Jeff Han är det största namnet inom multitouch. Här presenteras konceptet första gången för en stor publik.&lt;/p&gt;

&lt;object type=&quot;application/x-shockwave-flash&quot; data=&quot;http://www.youtube.com/v/5JcSu7h-I40&amp;amp;hl=sv&amp;amp;fs=1&amp;amp;rel=0&quot; class=&quot;youtube&quot;&gt;
  &lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/5JcSu7h-I40&amp;amp;hl=sv&amp;amp;fs=1&amp;amp;rel=0&quot; /&gt;
  &lt;param name=&quot;FlashVars&quot; value=&quot;playerMode=embedded&quot; /&gt;
  &lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;
  &lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;
&lt;/object&gt;

&lt;p&gt;&lt;a href=&quot;http://www.popularmechanics.com/technology/industry/4224762.html&quot;&gt;Mer från Jeff Han&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;iPhone lanseras&lt;/h3&gt;

&lt;p&gt;Världen får sin första revolutionerande multitouchprodukt. &lt;q&gt;Kinetisk scrollning&lt;/q&gt; får allt annat att verka tråkigt.&lt;/p&gt;

&lt;object type=&quot;application/x-shockwave-flash&quot; data=&quot;http://www.youtube.com/v/DwhG6LggOQU&amp;amp;hl=sv&amp;amp;fs=1&amp;amp;rel=0&quot; class=&quot;youtube&quot;&gt;
  &lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/DwhG6LggOQU&amp;amp;hl=sv&amp;amp;fs=1&amp;amp;rel=0&quot; /&gt;
  &lt;param name=&quot;FlashVars&quot; value=&quot;playerMode=embedded&quot; /&gt;
  &lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;
  &lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;
&lt;/object&gt;

&lt;h3&gt;Microsoft plockar upp den kastade handsken&lt;/h3&gt;

&lt;p&gt;Microsoft Surface är multitouch, multiuser, multidevice. Och produktplacerad i CSI Miami.&lt;/p&gt;

&lt;object type=&quot;application/x-shockwave-flash&quot; data=&quot;http://www.youtube.com/v/-2Kn2HKCWqs&amp;amp;hl=sv&amp;amp;fs=1&amp;amp;rel=0&quot; class=&quot;youtube&quot;&gt;
  &lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/-2Kn2HKCWqs&amp;amp;hl=sv&amp;amp;fs=1&amp;amp;rel=0&quot; /&gt;
  &lt;param name=&quot;FlashVars&quot; value=&quot;playerMode=embedded&quot; /&gt;
  &lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;
  &lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;
&lt;/object&gt;

&lt;p&gt;Mer Microsoft: &lt;a href=&quot;http://gizmodo.com/5365299/courier-first-details-of-microsofts-secret-tablet&quot;&gt;Courier&lt;/a&gt;, en ny slags produkt som kanske kommer börja säljas år 2010.&lt;/p&gt;

&lt;h3&gt;Multitouch är redan här&lt;/h3&gt;

&lt;p&gt;I Mac OS X Snow Leopard, speciellt ihop med &lt;a href=&quot;http://www.apple.com/se/magicmouse/&quot;&gt;den magiska musen&lt;/a&gt; och i Windows Vista, vilket fått bl.a. &lt;a href=&quot;http://www.notebooks.com/2009/09/14/lenovo-thinkpad-t400s-and-x200t-get-multitouch-displays/&quot;&gt;Lenovo att stopp in multitouch i sina Thinkpads&lt;/a&gt;. Linuxentusiaster som jag skall inte vara oroliga. Det finns stöd för multitouch också i X:&lt;/p&gt;

&lt;object type=&quot;application/x-shockwave-flash&quot; data=&quot;http://www.youtube.com/v/olWjnfBoY8E&amp;amp;hl=sv&amp;amp;fs=1&amp;amp;rel=0&quot; class=&quot;youtube&quot;&gt;
  &lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/olWjnfBoY8E&amp;amp;hl=sv&amp;amp;fs=1&amp;amp;rel=0&quot; /&gt;
  &lt;param name=&quot;FlashVars&quot; value=&quot;playerMode=embedded&quot; /&gt;
  &lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;
  &lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;
&lt;/object&gt;

&lt;p&gt;Se också: Ett långt klipp (över en timme) med &lt;a href=&quot;http://www.youtube.com/watch?v=u5RqAz_AZSE&quot;&gt;tekniska förklaringar om multitouch och hur det implementerats i öppen källkod&lt;/a&gt;.

&lt;h3&gt;Miniräknarens dagar är räknade&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://betalabs.nokia.com/betas/view/handwriting-calculator&quot;&gt;Nokia visar ett mycket bättre gränssnitt&lt;/a&gt; än dagens knappsatser. Sätt sedan &lt;a href=&quot;http://wolframalpha.com/&quot;&gt;Wolframalphas&lt;/a&gt; svarskraft på detta och alla elever har MVG (förlåt A menar jag) på all gymnasiematematik&amp;hellip;&lt;/p&gt;

&lt;object type=&quot;application/x-shockwave-flash&quot; data=&quot;http://www.youtube.com/v/MU4sPPzuVcw&amp;amp;hl=sv&amp;amp;fs=1&amp;amp;rel=0&quot; class=&quot;youtube&quot;&gt;
  &lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/MU4sPPzuVcw&amp;amp;hl=sv&amp;amp;fs=1&amp;amp;rel=0&quot; /&gt;
  &lt;param name=&quot;FlashVars&quot; value=&quot;playerMode=embedded&quot; /&gt;
  &lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;
  &lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;
&lt;/object&gt;

&lt;h3&gt;Kommer vi i framtiden behöva kurser i CAD?&lt;/h3&gt;

&lt;p&gt;Mer på samma tema. Kommer programmen vara så intuitiva att man kan koncentrera sig på själva uppgiften? SpaceClaim MultiTouch 720p är en produkt som indikerar det senare.&lt;/p&gt;

&lt;object type=&quot;application/x-shockwave-flash&quot; data=&quot;http://www.youtube.com/v/kdkxqgbXaSI&amp;amp;hl=sv&amp;amp;fs=1&amp;amp;rel=0&quot; class=&quot;youtube&quot;&gt;
  &lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/kdkxqgbXaSI&amp;amp;hl=sv&amp;amp;fs=1&amp;amp;rel=0&quot; /&gt;
  &lt;param name=&quot;FlashVars&quot; value=&quot;playerMode=embedded&quot; /&gt;
  &lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;
  &lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;
&lt;/object&gt;

&lt;h3&gt;Luftgitarrens comeback&lt;/h3&gt;

&lt;p&gt;Guitar hero är en stor hit, men vem säger att man måste hålla något i händerna? Vem säger att vi måste röra en skärm? &lt;dfn&gt;No touch&lt;/dfn&gt; gränssnittet är inte här ännu, men det kommer!&lt;/p&gt;

&lt;object type=&quot;application/x-shockwave-flash&quot; data=&quot;http://www.youtube.com/v/6_7BzUED39A&amp;amp;hl=sv&amp;amp;fs=1&amp;amp;rel=0&quot; class=&quot;youtube&quot;&gt;
  &lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/6_7BzUED39A&amp;amp;hl=sv&amp;amp;fs=1&amp;amp;rel=0&quot; /&gt;
  &lt;param name=&quot;FlashVars&quot; value=&quot;playerMode=embedded&quot; /&gt;
  &lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;
  &lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;
&lt;/object&gt;

&lt;p&gt;Denna film hittade jag på en sida som också visar hur &lt;a href=&quot;http://procrastineering.blogspot.com/2009/10/guitar-hero-without-guitar.html&quot;&gt;tangentbord av idag kan samverka med touchskärmar&lt;/a&gt; på ett finurligt sätt. Tag gärna en titt på det med.&lt;/p&gt;

&lt;p&gt;Jag skulle vilja berätta om &lt;q lang=&quot;en&quot;&gt;augmented reality&lt;/q&gt; och &lt;a href=&quot;http://gizmodo.com/5248464/how-the-f+35-demon-helmet-looks-inside&quot;&gt;de militära tillämpningar som mycket av detta har sitt upphov inom&lt;/a&gt;, men tiden räcker inte. &lt;a href=&quot;http://en.wikipedia.org/wiki/Land_Warrior&quot;&gt;Det&lt;/a&gt; får bli sitt eget blogginlägg.&lt;/p&gt;

&lt;h2&gt;Den stora bilden&lt;/h2&gt;

&lt;p&gt;En ny era är på väg, ubiquitous computing. Xerox PARC som en gång i tiden gav oss dagens GUI är också de som &lt;a href=&quot;http://www.ubiq.com/&quot;&gt;upptäckt detta koncept&lt;/a&gt;. Men bästa introduktionen får du nog av Adam Greenfield, som också pekar på farorna. Han kallar paradigmet &lt;q lang=&quot;en&quot;&gt;everyware&lt;/q&gt;, en ordlek, bildad från orden för &lt;q&gt;överallt&lt;/q&gt; och &lt;q&gt;(hård-mjuk-)vara&lt;/q&gt;.&lt;/p&gt;

&lt;object type=&quot;application/x-shockwave-flash&quot; data=&quot;http://www.youtube.com/v/RMXox8IJvmE&amp;amp;hl=sv&amp;amp;fs=1&amp;amp;rel=0&quot; class=&quot;youtube&quot;&gt;
  &lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/RMXox8IJvmE&amp;amp;hl=sv&amp;amp;fs=1&amp;amp;rel=0&quot; /&gt;
  &lt;param name=&quot;FlashVars&quot; value=&quot;playerMode=embedded&quot; /&gt;
  &lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;
  &lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;
&lt;/object&gt;

&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=RMXox8IJvmE&quot;&gt;Titta gärna på denna film på Youtube&lt;/a&gt;, där den fortsätter igenom alla 8 delarna. &lt;strong&gt;Tiden det tar att titta är extremt välinvesterad!&lt;/strong&gt;. Här kommer också slides från Rob Manson, som mer kortfattat förklarar detta under namnet &lt;q lang=&quot;en&quot;&gt;pervasive computing&lt;/q&gt;.&lt;/p&gt;

&lt;object type=&quot;application/x-shockwave-flash&quot; data=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=pervasivecomputing-yourealreadykneedeepinit-02-091011033510-phpapp02&amp;amp;stripped_title=pervasive-computing-youre-already-knee-deep-in-it-02&quot; style=&quot;margin:0px&quot; class=&quot;slideshare&quot;&gt;
  &lt;param name=&quot;movie&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=pervasivecomputing-yourealreadykneedeepinit-02-091011033510-phpapp02&amp;amp;stripped_title=pervasive-computing-youre-already-knee-deep-in-it-02&quot; /&gt;
  &lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;
  &lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt;
&lt;/object&gt;

&lt;!--
&lt;h3&gt;Intervju med John Allsopp om webbens utveckling&lt;/h3&gt;

&lt;p&gt;En webbläsare i medicinburken? Inte så långsökt som det låter. I denna intervju (ljud enbart) förklarar min OWEA-vän John Allsopp hur webben är just själva det nät som håller allt detta samman.&lt;/p&gt;

&lt;audio src=&quot;http://mpegmedia.abc.net.au/rn/podcast/2009/09/bdn_20090930_1533.mp3&quot; autobuffer controls&gt;
&lt;a href=&quot;http://mpegmedia.abc.net.au/rn/podcast/2009/09/bdn_20090930_1533.mp3&quot;&gt;Länk att klicka på om din webbläsare inte stödjer HTML5 audio&lt;/a&gt;.
&lt;/audio&gt;
--&gt;
&lt;h3&gt;Var skall detta sluta?&lt;/h3&gt;

&lt;p&gt;Det vet vi inte, men innan våra kursplaner för Gy -11 har slutat vara i bruk, så antar Microsoft att vår värld skall ta sig ut enligt följande:&lt;/p&gt;

&lt;object type=&quot;application/x-shockwave-flash&quot; data=&quot;http://www.youtube.com/v/8Ff7SzP4gfg&amp;amp;hl=en&amp;amp;fs=1&quot; class=&quot;youtube&quot;&gt;
  &lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/8Ff7SzP4gfg&amp;amp;hl=en&amp;amp;fs=1&quot; /&gt;
  &lt;param name=&quot;FlashVars&quot; value=&quot;playerMode=embedded&quot; /&gt;
  &lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;
  &lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;
&lt;/object&gt;

&lt;p&gt;Detta skrivs på kvällen den 27 oktober. Jag har nyss tittat på TV-serien Navy CIS. I den hade de väggar med multitouch skärmar, med gränssnitt mycket snarlika vad Microsoft hade i filmen ovan. Tillämpningsprogrammen som de sedan faktiskt använder (i TV-serien) är ännu science fiction, men helt klart så indikerar detta att utvecklingen är på väg.&lt;/p&gt;

&lt;p&gt;Tillägg 5 nov: Jag har hittat denna &lt;a href=&quot;http://www.uxbooth.com/blog/the-future-of-interface-design/&quot;&gt;sida med fler exempel på nya gränssnitt&lt;/a&gt;, inklusive att använda hela kroppen eler bara hjärnan.&lt;/p&gt;

&lt;h2&gt;Fortbildning&lt;/h2&gt;

&lt;p&gt;Denna bok kan hjälpa dig en bit på vägen: &lt;a href=&quot;http://designinginterfaces.com/&quot; lang=&quot;en&quot;&gt;Designing Interfaces: Patterns for Effective Interaction Design&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://interact.webstandards.org/&quot;&gt;WaSP Interact&lt;/a&gt; kommer till våren (2010) lansera kurser för interaktionsdesign och användbarhet. Redan nu finns det en kurs om informationsarkitektur, som är ett relaterat område. Interact har ett helt spår planerat under rubriken &lt;q lang=&quot;en&quot;&gt;User Science&lt;/q&gt;.&lt;/p&gt;

&lt;h2&gt;Diskussion&lt;/h2&gt;

&lt;p&gt;Skolverkets diskussionsforum för Gy -11 är nu uppe. Använd &lt;a href=&quot;http://www.skolverket.se/sb/d/3004/a/17201&quot;&gt;Teknikprogrammets sektion&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Dessutom finns, som vanligt, följande sätt att diskutera mina tankar:&lt;/p&gt;
  
 &lt;ul&gt; 
   &lt;li&gt;Skolverkets projektplats, för mina kollegor inom det specifika arbetet.&lt;/li&gt;
   &lt;li&gt;Fortsatt kommunikation med mina svenska och internationella referensgrupper via mejl.&lt;/li&gt;

   &lt;li&gt;En tråd &lt;a href=&quot;http://www.webforum.nu/showthread.php?t=176371&quot;&gt;startad på webForum&lt;/a&gt;.&lt;/li&gt;
   &lt;li&gt;Via mejl eller &lt;a href=&quot;/kontakt.php&quot;&gt;kontaktformuläret&lt;/a&gt; på denna webbplats.&lt;/li&gt;
 &lt;/ul&gt;
  
 &lt;p&gt;Att annat sätt att hålla sig informerad är att &lt;a href=&quot;http://twitter.com/itpastorn&quot;&gt;följa mig på Twitter&lt;/a&gt;. Varje gång jag gör något relaterat till mitt arbete med Gy -11 så märker jag mina notiser på Twitter med hash-taggen &lt;a href=&quot;http://search.twitter.com/search?q=%23skolverket&quot;&gt;#skolverket&lt;/a&gt;.&lt;/p&gt; 
</description>
         <pubDate>Wed, 28 Oct 2009 06:01:45 +0100</pubDate>
         <author>gunther@keryx.se (Lars Gunther)</author>
         <category domain="http://www.keryx.se/rss/kategorier.php">keryx/gunther/blogg</category>
         <guid isPermaLink="true">http://www.keryx.se/blogg-60</guid>
      </item>   </channel>
</rss>