<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog om webudvikling &#187; Programmering</title>
	<atom:link href="http://www.nielsgamborg.dk/wordpress/category/programmering/feed" rel="self" type="application/rss+xml" />
	<link>http://www.nielsgamborg.dk/wordpress</link>
	<description>Niels Gamborgs online notesbog</description>
	<lastBuildDate>Wed, 13 Jul 2011 22:25:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>setAttribute og Internet Explorer</title>
		<link>http://www.nielsgamborg.dk/wordpress/programmering/setattribute-og-internet-explorer.htm</link>
		<comments>http://www.nielsgamborg.dk/wordpress/programmering/setattribute-og-internet-explorer.htm#comments</comments>
		<pubDate>Sat, 08 Jan 2011 12:19:29 +0000</pubDate>
		<dc:creator>Niels</dc:creator>
				<category><![CDATA[Programmering]]></category>

		<guid isPermaLink="false">http://www.nielsgamborg.dk/wordpress/?p=904</guid>
		<description><![CDATA[Hvis du bruger JavaScript metoden setAttribute til at manipulere DOM’en, skulle det være muligt at tilføje alle attributter til ethvert element i DOM’en. Dette er dog ikke tilfældet med Internet Explorer 7 og ældre IE browsere, hvor du hverken kan bruge style attributten eller class attributten. Den gamle IE begrundelse for ikke at kunne tilføje [...]


No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Hvis  du bruger JavaScript metoden setAttribute til at manipulere DOM’en, skulle det være muligt  at tilføje alle attributter til ethvert element i DOM’en. Dette er dog  ikke tilfældet med Internet Explorer 7 og ældre IE browsere, hvor du  hverken kan bruge style attributten eller class attributten.</p>
<p>Den  gamle IE begrundelse for ikke at kunne tilføje class attributten til DOM  elementer gennem setAttribute i IE 6 og IE7, var at class er et reserveret ord i JavaScript.<span id="more-904"></span></p>
<h3>Tilføje class attribute i Internet Explorer</h3>
<p>Hvis man vil tilføje en class attribute i  IE6 0g IE7  kan man i stedet bruge:</p>
<p>element.setAttribute(&#8216;className&#8217;,'minklasse&#8217;);</p>
<p>Denne løsning giver dog ekstra arbejde, da du så skal til at detektere, hvilken browsere, der besøger dit website, da ovenstående ikke giver nogen mening i hverken Firefox eller IE8. Der vil du få en attribut ved navn &#8216;className&#8217; og værdien &#8216;minklasse&#8217;.</p>
<p>I stedet kan du bruge:</p>
<p>element.className = &#8216;minKlasse&#8217;;</p>
<p>Den hæfter class atributten på elementet, og samtidig med at den navngiver den. Og det virker cross browser.</p>
<h3>Style attribute i Internet Explorer</h3>
<p>Jeg  kender ikke begrundelsen for, hvorfor man ikke kan bruge style  attributten. Men hvis du har brug for at tilføje en inline style med native JavaScript, kan du i stedet bruge .style syntaksen:</p>
<p>element.style.cssText = styleText</p>
<p>eller mere konkret:</p>
<p>element.style.backgroundColor = “#333333”;</p>
<p>Dnne metode vorker også på tværs af alle browsere. Du kan se en diskussion af emnet her:</p>
<p><a href="http://www.quirksmode.org/bugreports/archives/2005/03/setAttribute_does_not_work_in_IE_when_used_with_th.html">http://www.quirksmode.org/bugreports/archives/2005/03/setAttribute_does_not_work_in_IE_when_used_with_th.html</a></p>
<h3>Add class og add style i jQuery</h3>
<p>Hvis man bruger et JavaScript library vil dette selvfølgelig håndtere browser forskelligheder for dig. I jQuery bruges .addClass(&#8220;min klasse&#8221;) for at tilføje class&#8217;es og css metoden .css( &#8220;display&#8221;, &#8220;none &#8220;) for at tilføje styles.</p>
<p>Hvorfor så bøvle med det selv, når f.eks. jQuery fikser det så let? Hvis man kun skal bruge en enkelt eller 2 metoder fra jQuery kan man spare rigtig mange kilobyte og ikke mindst et ekstra http-request ved at gøre tingene selv. Og så er det da også meget sjovere.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.nielsgamborg.dk/wordpress/programmering/setattribute-og-internet-explorer.htm/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Navnegenerator</title>
		<link>http://www.nielsgamborg.dk/wordpress/programmering/navnegenerator.htm</link>
		<comments>http://www.nielsgamborg.dk/wordpress/programmering/navnegenerator.htm#comments</comments>
		<pubDate>Sun, 08 Aug 2010 08:31:00 +0000</pubDate>
		<dc:creator>Niels</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[generator]]></category>
		<category><![CDATA[navn]]></category>
		<category><![CDATA[navnegenerator]]></category>

		<guid isPermaLink="false">http://www.nielsgamborg.dk/wordpress/?p=858</guid>
		<description><![CDATA[Jeg har fået et par henvendelser om,  hvordan man laver en navnegenerator. Derfor denne guide til, hvordan du kommer i gang. Tutorialen er henvendt til begyndere. En navnegenerator er god at starte med, hvis man vil lege med programmering. Man kommer hurtigt i gang med at kode, får et brugbart og sjovt resultat, samtidig med [...]


No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Jeg har fået et par henvendelser om,  hvordan man laver en<strong> navnegenerator</strong>. Derfor denne guide til, hvordan du kommer i gang. Tutorialen er henvendt til begyndere.</p>
<p>En navnegenerator er god at starte med, hvis man vil lege med programmering. Man kommer hurtigt i gang med at kode, får et brugbart og sjovt resultat, samtidig med at man arbejde med nogle basale ting indenfor programmering. Navnegeneratoren er meget simpel, så den er let at eksperimentere og arbejde videre med.</p>
<p>Navnegeneratoren er skrevet i JavaScript, og kan derfor afvikles i en browser. For et live eksempel se f.eks. min <a title="Business name generator" href="http://online-generator.com/name-generator/business-name-generator.php">business name generator</a>.<span id="more-858"></span></p>
<h3>Navnegenerator script</h3>
<p>Her er først navnegenerator scriptet i sin helhed:</p>
<blockquote><p>function generator(){<br />
// Tilføj dine egne ord. Vær omhyggelig med at overholde syntaksen.<br />
var adjectives = ["Cool","Masked","Bloody","Lame"]<br />
var animals = ["Hamster","Moose","Lama","Duck"]</p>
<p>// Tilfældige tal genereres<br />
var randomNumber1 = parseInt(Math.random() * adjectives.length);<br />
var randomNumber2 = parseInt(Math.random() * animals.length);<br />
var name = adjectives[randomNumber1] + &#8221; &#8221; + animals[randomNumber2];</p>
<p>alert(name); //Slet eller udkommentér denne linje, når nedenstående virker.</p>
<p>//Hvis der allerede er et navn bliver det fjernet<br />
if(document.getElementById(&#8220;result&#8221;)){<br />
document.getElementById(&#8220;placeholder&#8221;).removeChild(document.getElementById(&#8220;result&#8221;));<br />
}<br />
// Et div element bliver lavet for at kunne vise det genererede navn.<br />
//Navnet tilføjes en tekst-node. Tekstnoden tilføjes til pladsholderen.<br />
var element = document.createElement(&#8220;div&#8221;);<br />
element.setAttribute(&#8220;id&#8221;, &#8220;result&#8221;);<br />
element.appendChild(document.createTextNode(name));<br />
document.getElementById(&#8220;placeholder&#8221;).appendChild(element);<br />
}</p></blockquote>
<p>Men lad os pille koden fra hinanden og se på de enkelte dele hver for sig</p>
<h3>Navne og ordlister</h3>
<p>Det vigtigste element i en navnegenerator er selvfølgelig ordlisterne. Det er ud fra disse lister af ord, at navnene genereres. Jo flere ord eller navne du tilføjer til ordlisterne, des større variation i det endelige navn. Ordlisterne gemmes i Arrays. Arrays er kort fortalt variabler, der kan indeholde mange elementer. I vores tilfælde er disse elementer ord.</p>
<blockquote><p>var adjectives = ["cool","masked","bloody","lame"];<br />
var animals = ["hamster","moose","lama","duck"];</p></blockquote>
<p>For at  hente data ud array&#8217;et bruger vi  array-navnet med en tæller i en firkant-parentes som parameter. I programmering tæller man næsten altid fra nul.</p>
<p>Så adjectives[0] returner cool og animals[1] giver moose.</p>
<h3>Tilfældige navne</h3>
<p>For at vælge <strong>tilfældige navne</strong> og ord fra ordlisterne bruger vi JavaScripts indbyggede random funktion. Math.random giver os  tilfældige tal mellem 0 og 0.9999999999999.</p>
<p>I vores tilfælde skal vi bruge et tilfældigt tal mellem 0 og 3, da vi har 4 elementer i hvert array. Derfor ganger vi random funktionens tal med 4. Resultatet er et tal mellem o og 3.9999999999996. Men i stedet for selv at skulle tælle antallet af elementer i array&#8217;et,  får vi JavaScript til at gøre det med lenght-funktionen.</p>
<p>Endelig bruger vi JavaScript funktionen parseInt() til at runde vores tal ned til det heltal (integer), vi skal bruge til at hente navnene ud af vores 2 arrays.</p>
<p>Det lyder måske en smule kompliceret, men kodemæssigt, er det ret simpelt.</p>
<blockquote><p>randomNumber1 = parseInt(Math.random() * adjectives.length);<br />
randomNumber2 = parseInt(Math.random() * animals.length);</p></blockquote>
<h3>Visning af navnet</h3>
<p>Den simpleste metode til at vise navne generatorens resultat er med alert funktionen. Jeg bruger dog udelukkende alert() til at tjekke det genererede navn, fordi en alert box er meget irriterende at bruge i længden.</p>
<p>I stedet vil vi bruge 7 ekstra linjer på at integrere, dit tilfældige navn i websiden på en mere naturlig måde.</p>
<p>Inden vi går i gang, skal du lave et tomt div-tag i din HTML side, der hvor du gerne vil have dit tilfældige navn vist.  Dette div tag fungerer som en pladsholder for det genererede navn:</p>
<blockquote><p>&lt;div id=&#8221;placeholder&#8221;&gt;&lt;/div&gt;</p></blockquote>
<p>Og her er de 7 linjer ekstra kode, der skriver resultatet på websiden:</p>
<blockquote><p>if(document.getElementById(&#8220;result&#8221;)){<br />
document.getElementById(&#8220;placeholder&#8221;).removeChild(document.getElementById(&#8220;result&#8221;));<br />
}</p>
<p>element = document.createElement(&#8220;div&#8221;);<br />
element.setAttribute(&#8220;id&#8221;, &#8220;result&#8221;);<br />
element.appendChild(document.createTextNode(name));<br />
document.getElementById(&#8220;placeholder&#8221;).appendChild(element);</p></blockquote>
<p>I denne kodeblok sker følgende:</p>
<ol>
<li>Der tjekkes om der allerede findes et resultat (navn). Hvis ja, bliver det fjernet fra placeholderen</li>
<li>Så bliver der skrevet et nyt div element med id&#8217;en result, til at vise det nye resultat</li>
<li>Navnet bliver tilføjet div tagget som en text node.</li>
<li>Tilsidst bliver elementet (div-tag med indeholdende text node) hæftet på placeholderen i HTML&#8217;en.</li>
</ol>
<p>Når denne del fungerer, kan du fjerne alert funktionen fra scriptet, da navnet nu bliver skrevet direkte i HTML&#8217;en.</p>
<h3>Sæt navnegeneratoren sammen</h3>
<p>Scriptet kan du enten inkludere i toppen af dit HTML dokument eller placere i et eksternt script. Så er generator funktionen klar til at blive kaldt fra din HTML side.</p>
<p>Jeg kalder altid scriptet 2 steder. Første gang med en onload event i body tagget. Så bliver navne generator koden afviklet, når siden loader første gang.</p>
<blockquote><p>&lt;body onload=&#8221;generator()&#8221;&gt;</p></blockquote>
<p>Jeg kalder selvfølgelig også generator-funktionen fra en knap, så man kan lave nye navne med et klik.</p>
<blockquote><p>&lt;input type=&#8221;button&#8221; value=&#8221;Generér navn&#8221; onclick=&#8221;generator()&#8221; /&gt;</p></blockquote>
<h3>Lav din egen navne generator</h3>
<p>Med scriptet er det let at lave din egen personlige  navne generator. Valget af ord i ordlisterne afgør om din navne generator laver babynavne, piratnavne, kodenavne eller noget helt fjerde.</p>
<p>Generatoren kan selvfølgelig også bruges til andre ting. Hvad med at lave en slogan-generator, avisoverskrifter  eller besynderlige lovforslag fra Dansk Folkeparti? Kun din fantasi sætter grænserne.</p>
<p>Smid endelig en kommentar og et link, hvis du får bakset en sjov eller interessant navne generator sammen. <img src='http://www.nielsgamborg.dk/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Navnegenerator ressourcer</h3>
<p>Se alle mine egne <a title="Navnegeneratorer" href="http://online-generator.com/">navnegeneratorer</a>. Pt har jeg 18 forskellige navnegeneratorer til inspiration.</p>
<p>Du kan finde et fikst og færdigt  <a title="Navnegenerator-script" href="http://www.name-generators.com/name-generators/name-generator-script.htm">navnegenerator-script</a> til download på min officielle name generator blog. Scriptet er grundigt kommenteret på engelsk og sammen med denne tutorial, er det super nemt at komme i gang med at kode selv.</p>
<p>Endelig kan mit blogindlæg <a title="Make a name generator" href="http://www.name-generators.com/name-generators/how-to-make-name-generator.htm">How to make a  name generator</a> måske også hjælpe.</p>
<p><a title="Javascript hjælp og tutorials" href="http://www.w3schools.com/js/default.asp">JavaScript på w3schools</a> er et godt sted, hvis du skal bruge hjælp til javascript.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.nielsgamborg.dk/wordpress/programmering/navnegenerator.htm/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Debugging for begyndere</title>
		<link>http://www.nielsgamborg.dk/wordpress/programmering/debugging-for-begyndere.htm</link>
		<comments>http://www.nielsgamborg.dk/wordpress/programmering/debugging-for-begyndere.htm#comments</comments>
		<pubDate>Fri, 23 Apr 2010 19:03:52 +0000</pubDate>
		<dc:creator>Niels</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[parse error]]></category>

		<guid isPermaLink="false">http://www.nielsgamborg.dk/wordpress/?p=791</guid>
		<description><![CDATA[Tips til debugging Denne guide til bebugge rettet mod begyndere i programmering. Jeg vil give konkrete  tips og  idéer samlet i 3 simple trin.  Jeg bruger PHP og JavaScript eksempler, men metoderne til at debugge er universelle, og kan bruges i forbindelse med alle programmeringssprog.  Baggrunden er, at jeg i forbindelse med mit  gæstebogs script får en del henvendelser om hjælp. Basal debugging Basalt set handler [...]


No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<h3>Tips til debugging</h3>
<p>Denne <strong>guide til bebugge</strong> rettet mod begyndere i programmering.</p>
<p>Jeg vil give konkrete  tips og  idéer samlet i <strong>3 simple trin</strong>.  Jeg bruger PHP og JavaScript eksempler, men metoderne til at debugge er universelle, og kan bruges i forbindelse med alle programmeringssprog. <span id="more-791"></span></p>
<p>Baggrunden er, at jeg i forbindelse med mit  <a title="Script til gæstebog" href="http://www.nielsgamborg.dk/?p=php&amp;u=gaestebog_script">gæstebogs script</a> får en del henvendelser om hjælp.</p>
<h4>Basal debugging</h4>
<p>Basalt set handler debugging om at isolere problemer. Det gør man ved at skille tingene ad og undersøge de enkelte dele. Virker hver enkelt del, som vi forventer?</p>
<h2>3 simple trin til debugging</h2>
<ol>
<li>Tjek, dobbelt tjek og triple tjek</li>
<li>Skriv variabler ud</li>
<li>Skil koden ad</li>
</ol>
<h3>1. Tjek  - dobbelt tjek - triple tjek</h3>
<p>Start med at tjekke og dobbelt tjekke alle indtastninger, parenteser, tegn etc. Er  variabelnavne identiske?  Er  funktionskald og navne er stavet rigtigt?  Er syntaksen korrekt?  Når det er gjort, så tjek det hele en gang til&#8230;</p>
<h3>2. Skriv dine variabler ud</h3>
<p>Næste trin er at skrive dine variabler ud. Og fylde en masse print statements i din kode. Så kan du se hvilke værdier dine variabler har og hvor meget af koden, der bliver afviklet. Brug f.eks. echo i PHP og alert() i JavasScript:</p>
<blockquote><p>PHP eksempel:</p>
<p>$brugernavn = $_GET['brugernavn'];<br />
echo $brugernavn;</p>
<p>if($brugernavn == &#8220;&#8221;){<br />
echo &#8216;test1&#8242;;<br />
do something&#8230;<br />
echo &#8216;test2&#8242;;<br />
}else{<br />
do something else &#8230;<br />
echo &#8216;test3&#8242;;<br />
}</p></blockquote>
<blockquote><p>JavaScript eksempel:</p>
<p>var brugernavn = document.getElementById(&#8216;brugernavn&#8217;).value;</p>
<p>alert(brugernavn);</p>
<p>if(brugernavn.length() &lt; 3){<br />
do something &#8230;<br />
alert(&#8216;test1&#8242;);<br />
}else if{<br />
alert(&#8216;test2&#8242;);<br />
do something else &#8230;<br />
alert(&#8216;test3&#8242;);<br />
}</p></blockquote>
<p>Super debug metode til at finde ud af, hvor langt du kommer i afviklingen af koden, før det går galt. Bliver koden i  kodeblokkene afviklet, som du forventer?</p>
<h4>Hardcode dine variabler</h4>
<p>Du kan også prøve at hardcode dine variabler i stedet for at hente dem med dit script.</p>
<blockquote><p>$brugernavn = &#8220;Nikolaj&#8221;;</p></blockquote>
<p>Det er en god metode til at isolere og  afdække, om det er når du henter data eller behandler data, at du får fejl.</p>
<h3>3. Skil koden ad og simplificér den</h3>
<p>Prøv at pille koden fra hinanden og gør den enkel,  så du kan tjekke de enkelte dele. Prøv f.eks.</p>
<blockquote><p>if(2 == 2){&#8230;</p></blockquote>
<p>frem for:</p>
<blockquote><p>if(strlen(trim($_GET['brugernavn'])) &gt; 0 ){&#8230;</p></blockquote>
<p>Så får du debugget om det er dine kodeblokke eller det er de betingelser, du har sat op i if-sætningerne,  der er problemer med.</p>
<p>På samme måde kan du pille kodeblokke helt ud af for-løkker etc. Eller du kan simplificere dem ved at hardcode tallene i løkken som f.eks.:</p>
<blockquote><p>for(i=0; i&lt;5; i++;) {&#8230;</p></blockquote>
<h3>Bonus tips</h3>
<h4>2 almindelige syntaks fejl</h4>
<p>Her er 2 meget almindelige fejl, hvor fejlmeddelelserne ikke umiddelbart afslører problemet.</p>
<blockquote><p>PHP eksempel:</p>
<p>Parse error: parse error, expecting `&#8217;,&#8221; or `&#8217;;&#8221; in C:\wamp\www\test\minSide.php  on line 13</p></blockquote>
<p>Denne PHP parse error opstår, når du ikke har afsluttet <strong>den foregående</strong> linje med et semikolon.</p>
<blockquote><p>JavaScript eksempel:</p>
<p>minFunktion is not defined</p></blockquote>
<p>Denne JavaScript fejl optræder , når du forsøger at kalde en tidligere defineret funktion. Funktionen kan sagtens være defineret, men  indeholder ´f.eks. en syntaks fejl som en krølle-parantes/tuborg-parantes for meget eller for lidt.</p>
<h4>Google din fejlmeddelelser</h4>
<p>Du er helt sikkert ikke den første der har problemet. Fjern lokale navne fra din fejlmeddelser og søg på Google. Måske du kan finde hjælp til at indsnævre problemet.</p>
<h4>Værktøj til debugging</h4>
<p>JavaScript udvikling foregår bedst i en <a title="Firefox" href="http://www.mozilla.com/da/">Firefox</a> browser, fordi Firefox har gode værktøjer til debugging af JavaScript. Brug enten Firefox&#8217;s indbyggede fejlkonsol eller Firefox plugin&#8217;et <a title="Firebug addon" href="https://addons.mozilla.org/da/firefox/addon/1843">Firebug</a>. Begge giver gode og overskuelige fejlmeddelelser.</p>
<h3>Afrunding</h3>
<p>Debugging er en fast bestanddel af al programmering. Når man programmerer laver man også fejl. Heldigvis bliver man som regel bliver både dygtigere og klogere af det. Og næste gang er det nogle helt andre fejl, man laver. <img src='http://www.nielsgamborg.dk/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Kender du andre gode begynder tips, så smid endelig en kommentar.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.nielsgamborg.dk/wordpress/programmering/debugging-for-begyndere.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MooTools</title>
		<link>http://www.nielsgamborg.dk/wordpress/programmering/mootools.htm</link>
		<comments>http://www.nielsgamborg.dk/wordpress/programmering/mootools.htm#comments</comments>
		<pubDate>Sun, 08 Mar 2009 18:27:58 +0000</pubDate>
		<dc:creator>Niels</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[moo]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.nielsgamborg.dk/wordpress/?p=569</guid>
		<description><![CDATA[MooTools er et kompakt JavaScript Framework, der har vundet stor indpas de sidste par år. Jeg har i denne denne post samlet de aller bedste MooTools ressourcer. Sites der bruger MooTools Med Library Detector kan man hurtigt se, hvilke JavaScript Frameworks, forskellige sites bruger. F.eks. bruger følgende sites MooTools: http://validator.w3.org/ http://vimeo.com/ http://politiken.dk/ http://dr.dk/ Det officielle MooTools  MooTools demos. Masser af konkrete eksempler på grafiske [...]


No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p><a title="MooTools" href="http://mootools.net/">MooTools</a> er et kompakt JavaScript Framework, der har vundet stor indpas de sidste par år. Jeg har i denne denne post samlet de aller bedste MooTools ressourcer.<span id="more-569"></span></p>
<h3>Sites der bruger MooTools</h3>
<p>Med <a href="https://addons.mozilla.org/da/firefox/addon/10083">Library Detector</a> kan man hurtigt se, hvilke JavaScript Frameworks, forskellige sites bruger. F.eks. bruger følgende sites MooTools:</p>
<ul>
<li><a href="http://validator.w3.org/">http://validator.w3.org/</a></li>
<li><a href="http://vimeo.com/">http://vimeo.com/</a></li>
<li><a href="http://politiken.dk/">http://politiken.dk/</a></li>
<li><a href="http://dr.dk/">http://dr.dk/</a></li>
</ul>
<h3>Det officielle MooTools </h3>
<p><a title="MooTools demonstrationer" href="http://demos.mootools.net/">MooTools demos</a>. Masser af konkrete eksempler på grafiske effekter med MooTools. Ved eksemplerne kan du downloade eller copy-paste MooTools scripts og plugins.</p>
<p><a title="Download MooTools" href="http://mootools.net/download">Download MooTools</a>. Hent den nyeste MooTool.</p>
<p><a title="MooTools Dokumentation" href="http://mootools.net/docs/">MooTools dokumentation</a>. Den officielle MooTools dokumentation. Som sædvanlig er den officielle dokumentation en smule langhåret, men tilgengæld præcis og grundig, hvis man er inde i syntaks.</p>
<p><a title="MooTorials. MooTools dokumentation" href="http://mootorial.com/wiki/">MooTorials</a>. Grundig MooTool dokumentation, hvis du vil dykke dybere ned i MooTools.</p>
<p><a title="MooTools plugins" href="http://www.clientcide.com/js">MooTools plugins</a>. Masser af plugins til MooTools. Ikke den mest pædagogiske liste, men tilgengæld rimelig komplet.</p>
<h3>MooTools tutorials</h3>
<p>Der er færre MooTools tutorials end <a title="jQuery Tutorials" href="http://www.nielsgamborg.dk/wordpress/programmering/jquery.htm">jQuery tutorials</a>.  Her er et par af de bedste oversigter over MooTools tutorial:</p>
<ul>
<li><a title="Mootools tutorials" href="http://sixrevisions.com/javascript/mootools_tutorials_and_example/">Lær MooTools. 20 Mootols tutorials og eksempler</a>. En række MooTools tutorials, der starter helt fra bunden med introduktion til MootTools frameworket. Derefter genegåes en række emener som Ajax, JSON og en lang række grafiske effekter som sliders og show/hide. Desuden en række tutorials om CCS og MooTools, og eksempler på hvordan man laver Flash lignende effekter.</li>
<li><a title="30 MooTools Tutorials" href="http://www.consideropen.com/blog/2008/08/30-days-of-mootools-12-tutorials-day-1-intro-to-the-library/">30 dage med MooTools tutorials</a>. En grundig gennnemgang af MootTools, delt op i en række tutorials. Starter med intro til MooTools librariet, og fortsætter med emner som selectorer, funktioner, html maipulation, drag and drop og mange grafiske effekter som slide, hide og morph.</li>
</ul>
<p> </p>
<h3>MooTools cheatsheet</h3>
<p><a title="Mootools cheatsheet" href="http://mediavrog.net/blog/2008/06/11/mootools/mootools-12-cheat-sheet/">MooTools cheatsheet</a>. Et cheatsheet til Mootool, der indeholder de mest brugte kommandoer, funktioner og genveje.</p>
<h3>MooTools og de andre JavaScript Frameworks</h3>
<p><a title="MooTools og andre Frameworks" href="http://blog.creonfx.com/javascript/dojo-vs-jquery-vs-mootools-vs-prototype-performance-comparison">MooTools vs. jQuery vs. Prototype vs. Dojo</a>. Sammenligning af MooTools performance i forhold til de andre JavaScript Frameworks.</p>
<p><a title="Sammenligning af de store JavaScript Frameworks" href="http://en.wikipedia.org/wiki/Comparison_of_JavaScript_frameworks">Sammenligning af JavaScript Frameworks på wikien</a>. Kæmpe sammenligning af alle de store JavaScript Frameworks. Masser af både detaljer og teknikaliteter. </p>
<p><a title="MooTools vs. jQuery. En diskussion" href="http://www.mooforum.net/discussion/mootools-jquery-t185.html">MooTools vs. jQuery &#8211; en diskussion</a>. En diskussion af fordele af ulemper på et uofficielt MooTools forum. For og imod fra forskellige webudviklere.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.nielsgamborg.dk/wordpress/programmering/mootools.htm/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>jQuery</title>
		<link>http://www.nielsgamborg.dk/wordpress/programmering/jquery.htm</link>
		<comments>http://www.nielsgamborg.dk/wordpress/programmering/jquery.htm#comments</comments>
		<pubDate>Mon, 02 Feb 2009 16:41:39 +0000</pubDate>
		<dc:creator>Niels</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.nielsgamborg.dk/wordpress/?p=566</guid>
		<description><![CDATA[jQuery er et lille og hurtigt letvægts JavaScript library, der har vundet stor udbredelse de sidste par år. jQuery giver genveje til f.eks. DOM og CSS manipulation, AjAX, eventhandling, JavaScript Animationer og gør webudvikling både hurtigere og mere dynamisk. I denne post har samlet nogle af de bedste jQuery ressourcer og nogle exempler på, hvad man kan lave med jQuery biblioteket. Websites [...]


No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p><a title="jquery website" href="http://jquery.com/">jQuery</a> er et lille og hurtigt letvægts JavaScript library, der har vundet stor udbredelse de sidste par år. jQuery giver genveje til f.eks. DOM og CSS manipulation, AjAX, eventhandling, JavaScript Animationer og gør webudvikling både hurtigere og mere dynamisk.</p>
<p>I denne post har samlet nogle af de bedste jQuery ressourcer og nogle exempler på, hvad man kan lave med jQuery biblioteket.<span id="more-566"></span></p>
<h3>Websites der bruger jQuery</h3>
<p>Hvis man installerer Firefox addon/plugin <a title="JavaScript Library Detector til Firefox" href="https://addons.mozilla.org/da/firefox/addon/10083">Library Detector</a> og tager en hutig surftur, kan man se at mange  sites er gået over til jQuery, som deres foretrukne JavaScript Library. I Danmark er det bla. ekstrabladet, bt og de gule sider.</p>
<p>Hvis man ønsker at se en mere spektakulær brug af jQuery, må man dog vende sig mod udlandet.</p>
<p><a title="45 Jquery website eksempler" href="http://www.smashingmagazine.com/2009/01/15/45-new-jquery-techniques-for-a-good-user-experience/">45 jQuery eksempler</a> fra Smashing Magazine.</p>
<p><a title="20 websites der bruger jQuery" href="http://nettuts.com/articles/web-roundups/the-20-most-practical-and-creative-uses-of-jquery/">20 websites der bruger jQuery</a>. Oversigt og Inspiration fra nettuts.</p>
<p>På AJAX-Rain kan du finde mange <a href="http://www.ajaxrain.com/tagcloud.php?tag=jquery">hundrede eksempler på brug af jQuery</a>. Scroll ned under tagclouden, for at finde eksemplerne.</p>
<h3><a title="25 tutorials med jQuery navigation" href="http://designm.ag/tutorials/jquery-navigation/"></a>Igang med jQuery</h3>
<p>Inden man kaster sig over brugen af JavaScript Libraries, er det en fordel at have en basal forståelse af JavaScript. Ellers kan de manger funktioner og muligheder godt tage pusten fra en.</p>
<p>Her er en række gode ressourcer til at komme igang med jQuery.</p>
<p><a href="http://docs.jquery.com/Downloading_jQuery">Download jQuery</a>. Hent den sidste nye version af jQuery.</p>
<p><a title="Jquery tutorial. Den officielle" href="http://docs.jquery.com/How_jQuery_Works">Officiel jQuery tutorial</a>. jQuerys egen tutorials og dokumentation. Kan sine steder godt være lidt langhåret.</p>
<p><a title="Jquery for begyndere. Video tutorial" href="http://nettuts.com/articles/web-roundups/jquery-for-absolute-beginners-video-series/">jQuery for begyndere. Video tutorials</a>. En introduktion til jQuery for de visuelt orienterede.</p>
<p><a title="jQuery introduktion på video" href="http://www.bennadel.com/blog/1492-An-Intensive-Exploration-Of-jQuery-With-Ben-Nadel.htm">Grundig jQuery introduktion på video</a>. Super grundig video introduktion til jQuery.</p>
<p><a title="Jquery syntaks begynder tutorial" href="http://www.digital-web.com/articles/jquery_crash_course/">jQuery syntaks begynder tutorial</a>. En lidt teksttung, men grundig introduktion til den mest basale jQuery syntaks.</p>
<p><a href="http://www.ibm.com/developerworks/web/library/wa-jquery1/">Working with jQuery</a>. En introduktion til jQueryfra IBM&#8217;s developer site. Tak til Tommy Raun for linket.</p>
<h3>Flere jQuery tutorials og ressourcer</h3>
<p><a title="syntaks og programmeirng i Jquery" href="http://www.smashingmagazine.com/2008/09/16/jquery-examples-and-best-practices/">jQuery programmering, kodning og syntaks</a>. Artikel fra Smashing Magazine, der især omhandler syntaks og bedst practice for jQuery programmering.</p>
<p><a title="25 tutorials med jQuery navigation" href="http://designm.ag/tutorials/jquery-navigation/">25 jQuery navigation tutorials</a>. En række tutorials der er rettet mod brugen af jQuery i menuer og anden navigation.</p>
<p><a href="http://www.tvidesign.co.uk/blog/improve-your-jquery-25-excellent-tips.aspx">25 tips til jQuery</a>. Tips til hvordan du forbedrer din jQuery programmering. Optimer hastighed, arbejdsgange, syntaks og mange eksempler på løsning af praktiske opgaver.</p>
<p><a title="25 jQuery tutorials til webdesign" href="http://speckyboy.com/2009/03/11/25-powerful-and-useful-jquery-tutorials-for-developers-and-designers/">25 jQuery tutorials til webdesign</a>. Tutorials til webdesign relevante funktioner, som formular håndtering, validering, ikoner. Også flere grafiske tutorials.</p>
<p><a title="jQuery cheatsheet" href="http://acodingfool.typepad.com/blog/jquery-13-cheat-sheet.html">jQuery cheatsheet</a>. Et cheatsheet der indeholder de mest brugte jQuery kommandoer, funktioner og genveje.</p>
<h3>jQuery plugins</h3>
<p>jQuery har en god <a title="jquery plugin dokumentation" href="http://docs.jquery.com/Plugins/Authoring">plugin dokumentation</a>, og der findes allerede mange plugins til Jquery. Mange af de mere populære plugins er grafik plugins til jQuery.</p>
<p>Her er der masser af jQuery plugins. De fleste plugins er grafiske. Fek.s masser af slideshows, gallerier, tag clouds,  og mange andre grafiske effekter. Men der findes også mere praktiske jQuery plugins som f.eks. validerer formularer</p>
<p><a title="45 jQuery plugins" href="http://www.noupe.com/ajax/45-fresh-out-of-the-oven-jquery-plugins.html">45 jQuery plug-ins</a></p>
<p><a title="Jquery plugin eksempler" href="http://www.noupe.com/jquery/50-amazing-jquery-examples-part1.html">50 jQuery plug-ins eksempler</a></p>
<p><a title="37 inspirerende jQuery plugins" href="http://www.noupe.com/ajax/37-more-shocking-jquery-plugins.html">37 inspirerende jQuery plug-ins</a></p>
<p><a title="jQuery menu og navigation plugins" href="http://designm.ag/resources/jquery-navigation-plugins/">25 jQuery plug-ins til menu og navigation</a></p>
<p><a href="http://sixrevisions.com/resources/14-jquery-plugins-for-working-with-images/">14 jQuery plug-ins til billeder</a></p>
<p><a title="jQuery plugins. Officiel liste" href="http://plugins.jquery.com/">Komplet liste over jQuery plug-ins</a></p>
<h3>Anden jQuery inspiration</h3>
<p>Hvis du selv bruger jQuery på dit site eller kender nogle gode ressourcer eller eksempler, så sig endelig til. Så kan du få et link til din side i dette afsnit. <img src='http://www.nielsgamborg.dk/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Jeg ligger i al ubeskenhed selv ud med: <a title="Portfolio med Lightbox" href="http://nielsgamborg.dk/cv/portfolio.htm">Portfolio med Lightbox</a>. Jeg bruger lightbox librariet som er en udvidelse til jQuery på mit portfolio. Lightbox er et billedfremvisnings library.</p>
<h3>Læsernes tips og kommentarer til jQuery</h3>
<p>Tak til alle der har bidraget. <img src='http://www.nielsgamborg.dk/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://www.designcreative.dk/blog/">Kim Andersen</a> har givet det tip, at man kan lade Google opbevare jQuery scriptet. Måske man så kan være heldig at brugerens browser har cachet scriptet, og siden dermed loader hurtigere.</p>
<p>Det gøres ved at ændre sin source til js-filen fra eks.:<br />
<em>src=”js/jquery-1.3.1.min.js”<br />
</em>til:<br />
<em>src=”http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js”</em></p>
<p><strong>Konrad</strong> har peget på et rigtig interessant blogindlæg, der diskuterer jQuery og Prototype fordele og ulemper:</p>
<p><a title="Prototype vs jQuery" href="http://blog.thinkrelevance.com/2009/1/12/why-i-still-prefer-prototype-to-jquery">Why I still prefer Prototype to jQuery</a></p>
<p><strong>Tommy Raun</strong> skriver at den største fordel ved Jquery er at funktionerne virker på (næsten) alle platforme. Mange problemer med forskelle javascript versioner er løst (for IE/Firefox/Opera).</p>
<p>Se også min ressource post om <a href="http://www.nielsgamborg.dk/wordpress/programmering/mootools.htm">MooTools</a> frameworket.</p>
<p><a rel="nofollow" href="http://www.ibm.com/developerworks/web/library/wa-jquery1/"></a></p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.nielsgamborg.dk/wordpress/programmering/jquery.htm/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Problemer med Python editor IDLE</title>
		<link>http://www.nielsgamborg.dk/wordpress/webudvikling/problemer_python_editor_idl.htm</link>
		<comments>http://www.nielsgamborg.dk/wordpress/webudvikling/problemer_python_editor_idl.htm#comments</comments>
		<pubDate>Sat, 02 Aug 2008 11:19:25 +0000</pubDate>
		<dc:creator>Niels</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Webudvikling]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[idle]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[widows]]></category>

		<guid isPermaLink="false">http://www.nielsgamborg.dk/wordpress/?p=215</guid>
		<description><![CDATA[Som opfølgning på min Python Tutorial, vil jeg her beskrive, hvordan man løser et almindeligt forekommende problem, når man bruger Python editoren IDLE sammen med Windows XP.  IDLE problemet Problemet opstår, når man vil have IDLE til at afvikle ens Python script. IDLE fryser og  denne fejlmeddelse dukker op. &#8220;IDLE&#8217;s subprocess didn&#8217;t make connection. Either IDLE can&#8217;t start a [...]


No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Som opfølgning på min <a title="Python Tutorial" href="http://www.nielsgamborg.dk/wordpress/programmering/python_tutorial.htm">Python Tutorial</a>, vil jeg her beskrive, hvordan man løser et almindeligt forekommende problem, når man bruger Python editoren IDLE sammen med Windows XP. <span id="more-215"></span></p>
<h3>IDLE problemet</h3>
<p>Problemet opstår, når man vil have IDLE til at afvikle ens Python script. IDLE fryser og  denne fejlmeddelse dukker op.</p>
<blockquote><p>&#8220;IDLE&#8217;s subprocess didn&#8217;t make connection. Either IDLE can&#8217;t start a subprocess or personal firewall software is blocking the connection&#8221;</p></blockquote>
<p>Problemet er, at når IDLE åbner 2 forskellige vinduer, åbner den også 2 forskellige processer (den ene kaldet en subprocess).  Men enten kan Pyhton, IDLE eller Windows ikke få lukket processerne i takt med, at man lukker vinduerne, og det giver en konflikt, så IDLE ikke kan køre.</p>
<p>Jeg har forsøgt mig med at bruge andre editorer til Python, men IDLE er bare den bedste gratis editor, når man er Python begynder. Den er overskuelig og giver ordentlige fejlbeskeder, når man laver fejl i sine Python scripts. Og det er bøvlet at debugge Python scripts, hvis ikke man har en ordentlig fejlmeddelse.</p>
<p>Der findes 2 løsninger</p>
<h3>Den hurtige løsning</h3>
<p>Vælg kun denne løsning til af få afsluttet problemet. Vælg derefter den rigtige løsning, når du starter IDLE op igen.</p>
<ol>
<li>Åben windows jobliste med &#8220;ctrl+alt+delete&#8221;.</li>
<li>Vælg fanebladet med processer.</li>
<li>Sorter alfabetisk ved at klikke på processnavn.</li>
<li>Afslut <strong>alle </strong>forekomster af pythonw.exe. Der kan være op til 3-5 stykker.</li>
</ol>
<p>Bagefter kan du starte IDLE op igen. Løsning er dog ikke holdbar, da fejlen vil dukke op igen. Det er selvfølgelig ikke holdbart, når man lige er kommet igang med at lege med python, at man hele tiden bliver afbrudt og skal starte forfra.</p>
<h3>Den rigtige løsning</h3>
<p>Løsningen er i virkeligheden simpel:</p>
<ol>
<li>Åben IDLE fra komandolinien med parameteren &#8220;-n&#8221;.  (skriv: idle -n)</li>
</ol>
<p>Så starter IDLE op uden subprocesses og problemet er løst effektivt.  Du kan læse mere om, hvorfor IDLE vælger at kører med flere subprossesor på Pythons hjemmeside. Men så længe du bare leger med Python har det ingen praktiks betydning.</p>
<p>Hvis du som windows bruger ikke er vant til at arbejde med komandolinier får du lige opskriften her.</p>
<h3>Start IDLE uden subprocesser fra kommandolinien</h3>
<ol>
<li>Klik på Startmenuen.</li>
<li>Vælg: Kør.</li>
<li>Skriv: cmd og klik på ok.</li>
<li>Skriv cd.. og tryk på enter. ( du har nu bevæget dig et skridt opad i filsystemet).</li>
<li>Gentag punkt 4 indtil du er i roden af dit drev. (når der står c:\&gt;  (eller evt et andet bogstav)).</li>
<li>Skriv cd python25 og tryk enter (skift python25 ud med navnet på dit python bibliotek).</li>
<li>Skriv cd lib og tryk enter (du er nu i Pythons bibliotek).</li>
<li>Skriv cd idlelib og tryk enter (du er nu i IDLE mappen).</li>
<li>Skriv idle -n (der er mellemrum mellem idle og bindestregen) for at starte idle.</li>
</ol>
<p><strong>cd</strong> står for change directory. Hvis du vil se, hvilker filer og mapper der er, der hvor du står i filsystemet kan du skrive <strong>dir</strong>. Så bliver der vist en komplet oversigt.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.nielsgamborg.dk/wordpress/webudvikling/problemer_python_editor_idl.htm/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Python tutorial. En intro til Python for begyndere.</title>
		<link>http://www.nielsgamborg.dk/wordpress/programmering/python_tutorial.htm</link>
		<comments>http://www.nielsgamborg.dk/wordpress/programmering/python_tutorial.htm#comments</comments>
		<pubDate>Tue, 29 Jul 2008 09:03:16 +0000</pubDate>
		<dc:creator>Niels</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.nielsgamborg.dk/wordpress/?p=189</guid>
		<description><![CDATA[I denne Python tutorial vil jeg give en kort introduktion til Python. Tutorialen henvender sig til begyndere i Python, men en smule programmeringserfaring fra et andet sprog  vil nok gøre det lettere at følge med. Jeg har udvalgt nogle af de væsentligste karakteristika ved Python og vil i de forskellige afsnit give korte programmeringseksempler. Til slut programmerer vi en  lixberegner, der [...]


No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-193" title="python-logo" src="http://www.nielsgamborg.dk/wordpress/wp-content/python-logo.gif" alt="" width="211" height="71" />I denne <strong>Python tutorial</strong> vil jeg give en kort introduktion til Python. Tutorialen henvender sig til <strong>begyndere i Python</strong>, men en smule programmeringserfaring fra et andet sprog  vil nok gøre det lettere at følge med.</p>
<p>Jeg har udvalgt nogle af de væsentligste karakteristika ved Python og vil i de forskellige afsnit give korte programmeringseksempler. Til slut programmerer vi en  lixberegner, der vil anskueliggøre de gennemgåede emner, samt tilføje et par nye vigtige detaljer om Python.<span id="more-189"></span></p>
<h3>Start med Python</h3>
<p>Du kan downloade den seneste Python version fra <a title="Download python" href="http://www.python.org/download/">Python.org</a>. Sammen med Python bliver IDLE installeret. IDLE er en lille grafisk brugergrænseflade, du kan bruge til at skrive og afvikle dine Python programmer i. IDLE bruger syntaks highlighning, som gør det lettere at overskue koden og opdage eventuelle syntaks fejl.</p>
<p>Åben IDLE og skriv:</p>
<blockquote><p>print &#8220;Hello world&#8221;</p>
<p>OBS. Fra Python 3.0 er print blevet en funktion. Det betyder at syntaksen ved print nu er:</p>
<p>print (&#8220;Hello world&#8221;)</p>
<p>(det er kun ved print funktionen at denne tutorial bliver påvirket, af den nye syntaks.)</p></blockquote>
<p>Python vil nu udføre programmet. I dette tilfælde vil Python skrive &#8220;Hello world&#8221; på skærmen.</p>
<p>Åben bagefter et nyt vindue i IDLE,  skrive ovenstående kode igen og gem det som F.eks. &#8220;hello.py&#8221;. Så kan du vælge at køre programmet ved at taste &#8220;F5&#8243;eller vælge &#8220;Run module&#8221; fra menuen. Denne sidste metode er selvfølgelig den mest hensigtsmæssige, da du her gemmer dine Python programmer.</p>
<p>OBS. IDLE kan give problemer, når man afvikler den under Windows. Læs her hvordan du løser <a title="Problemer med Python Editor IDLE" href="http://www.nielsgamborg.dk/wordpress/webudvikling/problemer_python_editor_idl.htm">Problemer med IDLE</a>.</p>
<h3>Syntaks i Python</h3>
<p>Pythons syntaks er meget brugervenlig og logisk. Den er simpel, minimalistisk og blottet for unødige tegn, hvilket gør den let at overskue og lære. Både for erfarne programmører og begyndere.</p>
<p>Et af de bærende elementer i Pythons syntaks er indrykninger af kodeblokke. Hvor man i andre sprog udelukkende bruger indrykninger, for at bevare overblikket, er indrykninger i Python en del af syntaksen. Hvis man laver fejl i indrykningerne virker python programmet ikke efter hensigten, da Python parseren så ikke kan se, hvilke kodeblokke, der hører sammen.</p>
<p>Det kan lyde som en begrænsning, men fordelen er, at man slipper for at holde styr på parenteser og semikolonner. En ordentlig programmør laver under alle omstændigheder de korrekte indrykninger, så det eneste det kræver er en lidt mere grundig struktur i ens arbejde i starten. For begynderen vil dette arbejde med indrykninger give en fordel, når han senere vil lære andre programmeringssprog.</p>
<blockquote><pre>x = 3
if x == 3:
  print "x er lig med 3"
else:
  print "x er forskellig fra 3"</pre>
</blockquote>
<h3>Kontrolstrukturer i Python</h3>
<p>Pythons kontrolstrukturer fungerer som kontrolstrukturerne i andre sprog. Hovedforskellen er en let ændret syntaks. F.eks. skriver man i Python &#8220;elif&#8221; i stedet for &#8220;else if&#8221;. En anden væsentlig forskel er sammenligningsoperatorerne &#8220;og&#8221; og &#8220;eller&#8221;. De hedder ganske simpelt &#8220;and&#8221;  og &#8220;or&#8221;.</p>
<blockquote><pre>x = 3
y = 2
if x == 3 and y == 2:
  print "x er lig med 3, og y er lig med 2"
elif x == 3 and y != 2:
  print "x er lig med 3, og y er forskellig fra 2"
elif x !=3  and y == 2:
  print "x er forskellig fra 3, og y er lig med 2"
else:
  print "x er forskellig fra 3, og y er forskellig fra 2"</pre>
</blockquote>
<h3>Løkker i Python</h3>
<p>&#8220;For&#8221; løkker fungerer en smule anderledes i Python end vi er vant til fra f.eks. JavaScript, PHP eller Java.  &#8221;For løkken fungerer nærmere som en &#8220;foreach&#8221; løkke. Hvis vi opretter et array, som vi kalder liste kan vi gennemløbe alle elementerne i listen på følgende måde:</p>
<blockquote><pre>liste = ("Python", "PHP", "JavaScript")
for i in liste:
  print liste(i)</pre>
</blockquote>
<p>Programmet vil udskrive elementerne i listen et af gangen.</p>
<p>En anden måde at bruge &#8221;for&#8221; løkker på i Python er gennem den indbyggede &#8220;range&#8221; funktion:</p>
<blockquote><pre>for i in range(1,10):
  print i</pre>
</blockquote>
<p>Ovenstående vil skrive tallene 1-9. Default intervallet i &#8220;range&#8221;-funktionen er 1. Hvis vi ønsker et andet interval skriver vi istedet:</p>
<blockquote><pre>for i in range(1,10,2):
  print i</pre>
</blockquote>
<p>Denne programstupm vil istedet udskrive: 1, 3, 5, 7, og 9.</p>
<p>I Python kan man også bruge &#8220;while løkker&#8221;. De fungerer som i de fleste andre programmeringssprog.</p>
<h3>En lixberegner i Python</h3>
<p>Som et eksempel på et lidt mere avanceret program, vil vi nu programmere en meget simpel lixtalsberegner (læs om <a title="Lix og lixtal" href="http://www.nielsgamborg.dk/wordpress/brugervenlighed/lix_lixtal_laesbarhed.htm">lix og lixtal</a>).</p>
<p>Udover det vi har gennemgået til nu, vil vi i lixberegneren også bruge:</p>
<ul>
<li>Kommentarertegn (havelåge/hash/#) &#8211; Så kan vi kommentere direkte i koden. Det gør det lettere at bevare overblikket, når andre skal se din kode eller du senere vender tilbage til koden.</li>
<li>Bruger-input &#8211; For at gøre programmet interaktivt.</li>
<li>Import af eksterne moduler &#8211; For at få flere funktioner til rådighed, kan vi suplere Pythons indbyggede funktioner ved at importere ekstra moduler/biblioteker/pakker, der indeholder nye funktioner.</li>
<li>Definere en funktion &#8211; For at samle programmet i en kodeblok, der kan afvikles med et simpelt kald.</li>
</ul>
<p>Her er progamkoden i sin helhed:</p>
<blockquote><pre># -*- coding: cp1252 -*-

def lix():
import re # regular expression modul importeres

text =  raw_input("Kopier din tekst ind her:")

#Antal punktummer beregnes
pktArray = text.split(".")
antalPkt = len(pktArray)-1

#Antal ord beregnes
textUdenTegn = re.sub('[\.,]','',text)
textArray = textUdenTegn.split()
antalOrd = len(textArray)

#Lange ord beregnes
langeOrd = 0
for i in textArray:
  if len(i)&gt;6:
    langeOrd = langeOrd + 1

#LIX beregnes og udskrives
if antalPkt != 0 and antalOrd != 0:
  lixtal =  antalOrd/antalPkt + (langeOrd*100)/antalOrd #LIX = O/P + (L*100)/O
  print "Lixtal:",lixtal
  print "Antal ord i teksten:" ,antalOrd
  print "Antal punktummer i teksten:" ,antalPkt
  print "Antal langeord i teksten:", langeOrd
else:
 print "Lixtal kan ikke beregnes"

lix() #Tilsidst kaldes funktionen igen, så programmet ikke slutter

lix()
</pre>
<p><span style="color: #999999;">(<span style="color: #ff6600;">OBS!</span> Vær opmærksom på at du ikke kan copy-paste scriptet ind i IDLE. Python er meget følsom overfor forkerte indrykniger. Derudover bruger bloggen &#8220;dårlige&#8221; anførselstegn, der ødelægger syntaksen.)</span></p></blockquote>
<h4>De indledende øvelser</h4>
<p>Allerførst sættes en encoding. Bare accepter det forslag som IDLE selv kommer med.</p>
<p>Så definerer vi en funktion. Vi kalder den lix(). Det betyder i praksis, at man kan køre hele programmet ved at  kalde funktionen, altså ved at skrive lix(). Det vil vi benytte os af sidst i programmet.</p>
<p>Øverst i vores lix()-funktion importerer vi et Python modul, der hedder &#8220;re&#8221;. &#8221;Re&#8221; står for &#8220;regular expressions&#8221;. Det giver os mulighed for at bruge funktioner, der kan håndtere <a title="Regulære udtryk" href="http://www.nielsgamborg.dk/wordpress/programmering/regulaere_udtryk_regular_expressions.htm">regulære udtryk</a>.</p>
<h4>Tekstinput fra brugeren</h4>
<p>Og så er vi klar for alvor. Det første er at vi skal have noget tekst fra brugeren som vi kan lave beregninger på. Til det bruger vi raw_input() funktionen. Brugerens tekst gemmer vi i en variabel, som vi kalder &#8221;text&#8221;. Parameteren (det der står inde i parantesen) i raw_input()-funktionen bliver skrevet ud på skærmen.</p>
<h4>Antal punktummer beregnes</h4>
<p>Vi bruger Pythons indbyggede funktion split(), som deler en streng ved det tegn man sender med som parameter. Vi deler ved et punktum, og de enkelte dele gemmes i et array, som vi kalder liste.</p>
<p>Bagefter finder vi længden på arrayet med den indbyggede funktion len(). Parameteren er navnet på det element vi vil finde længden på. Bemærk at vi trækker 1 fra resultatet. Det er fordi, at når vi bruger split til at dele, vil der være noget på <strong>begge</strong> sider af punktummet. Også selvom dette noget er tomt. Dvs. at hvis vi deler på en tekst, der kun indeholder <strong>et</strong> punktum, vil der komme to dele (også selvom disse to dele er tomme).</p>
<h4>Antal ord beregnes</h4>
<p>Først bruger vi funktionen sub(), til at fjerne punktummer og kommaer fra teksten. Det gør vi for at undgå, at de bliver regnet med i ordets længde. Vi gør Python fortolkeren opmærksom på at funktionen findes i det importerede &#8220;re&#8221;-modul, ved at skrive &#8220;re.&#8221; foran funktionen. Parametrene i sub()-funktionen er:</p>
<ol>
<li>Det <a title="Regulære udtryk" href="http://www.nielsgamborg.dk/wordpress/programmering/regulaere_udtryk_regular_expressions.htm">regulære udtryk</a>, der skal ledes efter. I vores tilfælde punktum og komma</li>
<li>Det som det regulære udtryk skal udskiftes med. I vores tilfælde ingenting. Det betyder i praksis at tegnen fjernes fra teksten.</li>
<li>Navnet på den variabel, som funktionen skalbruges på.</li>
</ol>
<p>Derefter  beregner vi antallet af ord, på stort set samme måde som vi beregnede punktummerne.  Forskellen er her at funktionen  split() default splitter på mellemrum, når der ingen parameter er angivet. Ved at bruge den default split værdi, splitter Python kun på mellemrum <strong>mellem</strong> tegn. Ergo slipper vi her at tage højde for eksta mellemrum som kunne komme ind før, efter og inde i teksten.</p>
<h4>Lange ord beregnes</h4>
<p>Først opretter vi variablen &#8220;langeOrd&#8221; og giver den værdien nul.</p>
<p>Så løber vi med en &#8221;for&#8221;-løkke alle elementerne (altså ordene) i listen igennem. For hvert ord undersøger vi ordets længde med len() funktionen. Hvis ordet er længere end 6 bogstaver lægger vi 1 til variablen &#8220;langeOrd&#8221;.</p>
<h4>Lix beregnes og udskrives</h4>
<p>Først udersøger vi om antallet af ord og punktummer er forskelligt fra nul. Ellers kan beregningen ikke laves, da det ellers vil medføre division med nul, hvilket er en matematisk umulighed. Og det vil derfor udløse en logisk fejl, og afviklingen af vores Python program vil stoppe.</p>
<p>Derefter laver vi selve Lix beregningen. Intet nyt i det. Python beregner det v.h.a simpel matematik.</p>
<p>Så skriver vi resultaterne ud.</p>
<p>Til sidst i den sidste kodeblog kalder vi funktionen igen, så programmet ikke afsluttes, når vores beregning er foretaget.</p>
<p>Aller nederst er også et funktions kald. Det er dette funktions kald, der starter hele programmet op.</p>
<h3>Videre med python</h3>
<p>Hvis du vil videre med Python findes der flere muligheder. En af de bedste er C H Swaroops gratis online bog: &#8220;<a title="Gratis Python bog. A byt of Python" href="http://www.swaroopch.com/byteofpython/">A Byte of Python</a>&#8220;, som er en fremragende bog for begyndere. Både begyndere i Python, men også begyndere i programmering.</p>
<p>Et dansk alternativ er: &#8220;<a title="Python bog dansk. Friheden til at programmere i Python " href="http://www.linuxbog.dk/python/python/index.html">Linux &#8211; Friheden til at programmere i Python</a>&#8220;. En lidt ældre bog (2004), men nogle gange det kan være rart at læse på dansk, hvis man er begynder.</p>
<p><a title="Python Rocks" href="http://personalpages.tds.net/~kent37/stories/00020.html">Python Rocks</a> er en kort introduktion, der både fremhæver fordele ved Python og giver et kort overblik over simpel Ptyhon programmering.</p>
<p><a title="Dive into Python" href="http://diveintopython.org/">Dive into Python</a> henvender sig til mere erfarne programmører. Den gratis online bog behandler alle aspekter af Python programmering.</p>
<p>Endelig kan du også kaste dig over den officielle Python tutorial: <a title="Officiel Python tutorial." href="http://docs.python.org/tutorial/">The Python Tutorial</a> fra Python.org.</p>
<p>Hvis du  har spørgsmål eller synes jeg har sprunget for hurtigt over noget væsentligt, så smid endelig en kommentar. Så vil jeg prøve at hjælpe så godt jeg kan. <img src='http://www.nielsgamborg.dk/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.nielsgamborg.dk/wordpress/programmering/python_tutorial.htm/feed</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Regulære udtryk. Regular expressions</title>
		<link>http://www.nielsgamborg.dk/wordpress/programmering/regulaere_udtryk_regular_expressions.htm</link>
		<comments>http://www.nielsgamborg.dk/wordpress/programmering/regulaere_udtryk_regular_expressions.htm#comments</comments>
		<pubDate>Tue, 15 Jul 2008 11:31:04 +0000</pubDate>
		<dc:creator>Niels</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[regular expressions]]></category>
		<category><![CDATA[regulære udtryk]]></category>

		<guid isPermaLink="false">http://www.nielsgamborg.dk/wordpress/programmering/regulaere_udtryk_regular_expressions.htm</guid>
		<description><![CDATA[Regulære udtryk er den danske oversættelse af regular expressions (forkortes ofte RegEx) . Regulære udtryk er et meget kraftfuldt programmeringsredskab. Regulære udtryk bruges til at matche patterns, mønstre og søgeord i tekststrenge. Ofte kan samme resultater opnåes med de ordinære streng funktioner eller streng metoder, som de forskellige programmeringssprog stiller til rådighed. Men når de søgninger eller matchninger, [...]


No related posts.

Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Regulære udtryk er den danske oversættelse af regular expressions (forkortes ofte RegEx) .</p>
<p>Regulære udtryk er et meget kraftfuldt programmeringsredskab. Regulære udtryk bruges til at matche patterns, mønstre og søgeord i tekststrenge. Ofte kan samme resultater opnåes med de ordinære streng funktioner eller streng metoder, som de forskellige programmeringssprog stiller til rådighed. Men når de søgninger eller matchninger, man skal foretage bliver  komplekse, er det smart at bruge regulære udtryk.  Regular expressions kan spare os for mange liniers kode.<span id="more-155"></span></p>
<h3>Regulære udtryk . Praktisk brug</h3>
<p>Vi kan blandt andet bruge regulære udtryk til at sammenligne, redigere eller manipulere  specifikke mønstre eller tegnkarakterer i tekststrenge.<br />
Regulære udtryk kan bruges til en mængde forskellige formål, når det gælder behandling eller analyse, blandt andet:</p>
<ul>
<li>Validering af brugerinput i formular felter.
<ul>
<li>Består telefonnummer udelukkende af cifre?</li>
<li>Er der indtastet et @ i emailadressen?</li>
<li>Er der angivet et husnummer i adressen?</li>
</ul>
</li>
<li>Erstatning af tegn i brugerinput.
<ul>
<li>F.eks. fjernelse af bindestreger og mellemrum i personnumre eller telefonnumre.</li>
</ul>
</li>
<li>Manipulering at strenge fra andre kilder.
<ul>
<li>F.eks. genbrug at database data til andre formål, hvor man har behov for at fjerne visse karakterer.</li>
<li>RSS feeds, hvor man vil udelukke eller erstatte indhold i feeden.</li>
</ul>
</li>
</ul>
<h3>Regulære udtryk. En oversigt </h3>
<p>Regulære udtryk  kan deles  op i 2 typer af tegn .</p>
<ul>
<li>Almindelige tegn, der har deres pålydende værdi. Et &#8220;ø&#8221; er altså et ø, og et punktum er et punktum.</li>
<li>Metategn, der har en anden betydning end deres pålydende. Et punktum betyder f.eks.  ikke punktum, men er et jokettegn.</li>
</ul>
<h4>Almindelige tegn</h4>
<p>De almindelige tegn udtrykker som sagt deres pålydende værdi. Noget af det mest interessante ved regulære udtryk er, at man kan samle karakterene i klasser.</p>
<p>Karakterklasser defineres i firkantparanteser. F.eks. vil [abc] vil matche et af bogstaverne  a,b eller c. Det samme vil [a-c].</p>
<p>Danske karaktere i regulære udtryk er ikke noget problem. Skal man matche dansk tegnsæt med f.eks: æ, ø og å, skriver du dem bare ind i karakterklasserne. [A-ZÆØÅa-zæøå_0-9]  matcher på den måde både store og små bogstaver i det danske alfabet, underscore og ciffrene 0-9.</p>
<p>Udover de klasser vi selv kan definere, findes også en række klasser af karakterer, der allerede er defineret. Det gælder f.eks. \d som er det samme som [0-9] eller \w som er det samme som [A-Za-z_0-9] . Backslashen foran henholdsvis d og w er et escape tegn, der betyder at vi ikke skal bruge d&#8217;s eller w&#8217;s pålydende værdi.</p>
<h4>Metategn</h4>
<p>Metategn har en anden værdi end den pålydende. F.eks. betyder  ”^” undtagen, så  [^æøåÆØÅ] er altså alle tegn undtagen æøå og ÆØÅ.</p>
<blockquote><p><strong>Metategn i regulære udtryk</strong></p>
<p>. Matcher 1 vilkårlig karakter.<br />
^ Matcher starten på en linie.<br />
[^] Matcher alle karakter <strong>undtagen</strong> de nævnte.<br />
$ Matcher slutningen af en linie.<br />
? Matcher det foranstående element 0 eller 1 gang.<br />
+ Matcher det foranstående element 1 eller flere gange.<br />
* Matcher det foranstående element 0, 1 eller flere gange.<br />
| Matcher <strong>enten</strong> udtrykker før <strong>eller</strong> efter stregen.</p>
<p>Hvis man vil matche et metategns pålydende værdi skal man escape det. F.eks. vil [\?] macthe et spørgsmålstegn.</p></blockquote>
<p>De forskellige programmeringsprog benytter sig nogle gange af lidt forskellige metategn, men overordnet set er både syntaks og metategn meget lig hinanden.</p>
<h3>Regulære udtryk i JavaScript</h3>
<p>I JavaScript er indbygget flere funkioner, der benytter sig af regulære udtryk.</p>
<p>Her er et simpelt eksempel, der fjerner mellemrum og bindestreger fra en brugers input af et cpr-nummer.</p>
<blockquote><p>streng = &#8220;01 01 74-1317&#8243;;<br />
ny_streng = streng.replace(/[ -]/g, &#8220;&#8221;);</p></blockquote>
<p>JavaScripts brug af regulære udtryk bygger på regular expressions i perl, og bruger derfor samme syntaks. Matchen er pakket ind mellem 2 slashes. Det lille g bag udtrykket angiver, at tegnene i karakterklassen skal skiftes ud <strong>alle</strong> steder, de optræder i strengen. </p>
<p>Bemærk også at en bindestreg i en karakterklasse skal enten escapes med backslash, eller stå først eller sidst i klassen, for at have betydningen &#8220;bindestreg&#8221;. Ellers vil den have betydning &#8220;til&#8221; som i [0-9].</p>
<h3>Regulære udtryk i PHP</h3>
<p>I PHP er brugen af regulære udtryk indeholdt i standard bilbiotekerne og skal derfor heller ikke importeres på nogen måde.</p>
<p>Eksemplet viser, hvordan man kan strippe image-tags fra tekststrenge med regular expressions.</p>
<blockquote><p>$streng = &#8220;Et billede &lt;img src=&#8217;billede.jpg&#8217; alt=&#8217;billede &#8216;/&gt; siger mere end  tusinde ord&#8221;;<br />
$ny_streng = ereg_replace(&#8220;&lt;img[^&gt;]*&gt;&#8221;,&#8221;", $streng);</p></blockquote>
<p>Først laves en ordinær match på substrengen &#8220;&lt;img&#8221;. Dernæst er der en karakterklasse, der indeholder <strong>alle</strong> tegn  undtagen &#8220;&gt;&#8221;. &#8220;*&#8221; angiver at indholdet af karakterklassen optræder et vilkårligt antal gange. Slut i matchen optræder slut-tagget &#8220;&gt;&#8221;. Det hele erstattes af en tom streng.</p>
<p>Alternativt kan man istedet benytter preg_replace-funktionen. Preg står for &#8220;Perl regular expressions&#8221; og angiver at man i preg-replace() benytter perl syntaks for regulære udtryk. Det betyder i praksis, at matchen pakkes ind i to slashes. Udtrykket kommer derfor til at se sådan ud:</p>
<blockquote><p>$ny_streng = preg_replace(&#8220;/&lt;img[^&gt;]*&gt;/&#8221;,&#8221;", $streng);</p></blockquote>
<h3>Regulære udtryk i Java</h3>
<p>For at bruge regulære udtryk  i Java, skal man først importere  java.util.regex, hvor regular expressions metoderne findes.</p>
<p>Brugen af regulære udtryk i Java adskiller sig fra de andre sprog ved at backslash selv er et metategn, og derfor også skal escapes,  når man skal escape andre metategn. Det vil sige, at hvis man f.eks. vil escape et spørgsmålstegn skal man bruge 2 backslashes foran spørgsmålstegnet.</p>
<p>Her er et simpelt eksempel, der viser hvordan man erstatter spørgsmålstegn, udråbstegn og semikolon med punktummer.</p>
<blockquote><p>import java.util.regex.*;<br />
String streng =  &#8220;Dette er en streng? Strengen er kort!&#8221;;<br />
String ny_streng  =  streng.replaceAll(&#8220;[\\?!;]&#8220;,&#8221;.&#8221;);</p></blockquote>
<p>replaceAll()  metoden erstatter alle forekomsterne af tegnene i strengen.</p>
<h3>Regulære udtryk i Python</h3>
<p>For et bruge regulære udtryk i Python skal man først importere regular expressions/regex modulet. </p>
<p>Eksemplet fjerner paranteser, apostroffer og anføselstegn fra en streng ved at erstatte dem med en tom streng.</p>
<blockquote><p>import re <br />
streng = &#8220;Her er en (kort) &#8216;streng&#8217;.&#8221;<br />
ny_streng = re.sub(&#8220;[\(\)\'\",]&#8220;,&#8221;",streng) </p></blockquote>
<p>Bemærk alle backslashene i det regulære udtryk. De escaper karakterne, der alle er metategn.</p>
<h3>Mere om regular expression</h3>
<p>Her kan du finde mere om <a title="Regular expressions - regex" href="http://www.regular-expressions.info/">regular expressions</a> . Både regular expressions generelt og deres brug i forskellige programmeringssprog.</p>
<p>På wikien kan du også finde en fremragende oversigt over <a title="regular expressions" href="http://en.wikipedia.org/wiki/Regular_expression">regular expressions</a>.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://yarpp.org'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.nielsgamborg.dk/wordpress/programmering/regulaere_udtryk_regular_expressions.htm/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

