<?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>David Gustafsson &#187; Programmering</title>
	<atom:link href="http://www.techonomics.se/category/teknik/programmering/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.techonomics.se</link>
	<description>&#62; Det viktiga samspelet mellan teknik och ekonomi</description>
	<lastBuildDate>Sun, 23 Oct 2011 21:24:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Hitta ett optimalt polygon som omsluter slumpmässiga komplexa punkter &#8211; Konvext hölje</title>
		<link>http://www.techonomics.se/teknik/hitta-ett-optimalt-polygon-som-omsluter-slumpmassiga-komplexa-punkter-konvext-holje/</link>
		<comments>http://www.techonomics.se/teknik/hitta-ett-optimalt-polygon-som-omsluter-slumpmassiga-komplexa-punkter-konvext-holje/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 20:27:10 +0000</pubDate>
		<dc:creator>David Gustafsson</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Teknik]]></category>
		<category><![CDATA[Convex Hull]]></category>
		<category><![CDATA[Konvext hölje]]></category>
		<category><![CDATA[matlab]]></category>
		<category><![CDATA[Polygon]]></category>

		<guid isPermaLink="false">http://www.techonomics.se/?p=599</guid>
		<description><![CDATA[Inledning
I sommar jobbar jag på en teknikavdelning i Västerås. Jag har jobbat på samma företag och på ungefär samma kontor under tre raka somrar. Arbetet är väldigt tekniskt, roligt och utmanande. Till skillnad från många andra sommarjobb på kontor har jag hittat ett där jag får ansvar och får jobba med vanliga arbetsuppgifter. Konkret så [...]]]></description>
			<content:encoded><![CDATA[<h2>Inledning</h2>
<p>I sommar jobbar jag på en teknikavdelning i Västerås. Jag har jobbat på samma företag och på ungefär samma kontor under tre raka somrar. Arbetet är väldigt tekniskt, roligt och utmanande. Till skillnad från många andra sommarjobb på kontor har jag hittat ett där jag får ansvar och får jobba med vanliga arbetsuppgifter. Konkret så jobbar jag med att utveckla verktyg för att förenkla beräkningsarbete med hjälp av till största delen MatLab, GUI-programmering och Java. Den nya objektorienterade stilen i MatLab gör koden betydligt mer tydlig än för några år sedan.</p>
<h2>Problemet</h2>
<p>Här om dagen ställdes jag inför en liten utmaning. Förenklat gick det ut på att hitta ett polygon som omsluter en samling med komplexa punkter som ligger spridda i planet. Till en början hittade jag inte funktionen som gör detta i MatLab, vilket förstås var konstigt. Jag bestämde mig därför för att hitta en egen algoritm. I detta inlägg skall jag beskriva min algoritm.</p>
<div id="attachment_602" class="wp-caption aligncenter" style="width: 592px"><a href="http://www.techonomics.se/upLoads/2010/07/Brevbilaga.png"><img class="size-full wp-image-602  " title="Konvext hölje" src="http://www.techonomics.se/upLoads/2010/07/Brevbilaga.png" alt="Konvext hölje" width="582" height="527" /></a><p class="wp-caption-text">Figur 1. Exempel på konvext hölje.</p></div>
<h2>Min Alogritm</h2>
<p>Jag ska beskriva min algoritm med hjälp av figur 2. Till att börja med skall jag förklara svårigheten med att hitta höljet. Grejen är att alla punkter ligger osorterade i en struktur. Om punkterna sorteras kring en centrumpunkt kan man använda deras ordning och avståndet från centrum för att lösa problemet. Det tar dock minst O(n log(n)) att göra en linjär sortering. Min algoritm jobbar på den osorterade listan och tar säkert ännu mer tid; jag har inte härlett något bevis.</p>
<p>Tanken är i alla fall att börja med min punkten i x-led och därefter hitta den punkt till vilken k värdet blir maximalt. dvs räkna ut:</p>
<p><strong>max(k_i) = (y_min &#8211; y_i)/(x_min &#8211; x_i) för i = [alla punkter]. </strong>Detta ger dig punkten p_2.</p>
<p>Alla punkter med mindre y-värde än X_min kan uteslutas. Alla punkter med mindre x-värde än p_2 kan också uteslutas för vidare genomläsning.</p>
<p>k_2 hittas sedan genom att hitta den punkt som minimerar:</p>
<p><strong>k_1 &#8211; </strong><strong>(y_1 &#8211; y_i)/(x_1 &#8211; x_i) för i = [alla icke uteslutna punkter]</strong></p>
<p>På samma sätt hittas k_a generellt genom:</p>
<p><strong>min(k_a-1 &#8211; </strong><strong>(y_a-1 &#8211; y_i)/(x_a-1 &#8211; x_i)) för i = [alla icke uteslutna punkter]</strong></p>
<p>Uträkningen görs för övre halvan av polygonen tills man kommer till punkten som är maximal i x-led. Därefter görs samma algoritm för den undre halvan av polygonen.</p>
<div id="attachment_603" class="wp-caption aligncenter" style="width: 564px"><a href="http://www.techonomics.se/upLoads/2010/07/Fit-polygon-fig2.png"><img class="size-full wp-image-603 " title="Fit polygon fig2" src="http://www.techonomics.se/upLoads/2010/07/Fit-polygon-fig2.png" alt="Algoritm för konvext hölje" width="554" height="394" /></a><p class="wp-caption-text">Figur 2. Algoritm för konvext hölje.</p></div>
<h3>Prestanda</h3>
<p>Prestandan av algoritmen beror på hur många punkter som hamnar i polygonet. Jag gör lika många linjärsök i listan som det blir punkter i polygonet. Det innebär att komplexiteten är O(N*antalet sök). Antalet punkter i det optimala polygonet blir mellan 10 och 25 beroende på dina slumppunkter. Algoritmen är alltså relativt snabb.</p>
<h3>Kod</h3>
<p>Koden är inte publik.</p>
<h2>MatLabs lösning &#8211; convex hull</h2>
<p>Min algoritm gör samma sak som MatLabs funktion <strong><a title="Convex hull" href="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/delaunaytri.convexhull.html">convhull</a>. Convex hull </strong>är alltså det Engelska ordet för en omslutande polygon eller ett konvext hölje. En annan bra resurs är <a href="http://en.wikipedia.org/wiki/Convex_hull_algorithms">http://en.wikipedia.org/wiki/Convex_hull_algorithms</a> som förklarar att den teoretiska minimum tiden för att hitta ett konvext hölje är av storleksordningen O(n log(n)).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techonomics.se/teknik/hitta-ett-optimalt-polygon-som-omsluter-slumpmassiga-komplexa-punkter-konvext-holje/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Matlab Image Resizer</title>
		<link>http://www.techonomics.se/teknik/programmering/matlab-image-resizer/</link>
		<comments>http://www.techonomics.se/teknik/programmering/matlab-image-resizer/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 10:29:59 +0000</pubDate>
		<dc:creator>David Gustafsson</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[applikation]]></category>
		<category><![CDATA[förminska bilder]]></category>
		<category><![CDATA[matlab]]></category>
		<category><![CDATA[resize images]]></category>

		<guid isPermaLink="false">http://www.techonomics.se/?p=562</guid>
		<description><![CDATA[Jag har skrivit ett litet program för matlab som förminskar bilder. Detta eftersom jag inte hittade den funktionen på något enkelt sätt någonstans. Det bör bli ganska många bilder i Sydney/Australien under utbytesåret som måste laddas upp. Vi har begränsningar på vår uppkoppling där vi bor så det går inte att ha bilder på 5 [...]]]></description>
			<content:encoded><![CDATA[<p>Jag har skrivit ett litet program för matlab som förminskar bilder. Detta eftersom jag inte hittade den funktionen på något enkelt sätt någonstans. Det bör bli ganska många bilder i Sydney/Australien under utbytesåret som måste laddas upp. Vi har begränsningar på vår uppkoppling där vi bor så det går inte att ha bilder på 5 Mb per styck. Efter att jag blivit klar med programmet i det utförande det nu har såg jag dock att det går smidigt att redigera många bilder samtidigt med ett officeprogram. Hur som helst så fungerar programmet bra.</p>
<h2>Syfte</h2>
<p>Programmet syftat till att enkelt förminska alla bilder i en mapp.</p>
<h2>Varför?</h2>
<p>Eftersom det är jobbigt att editera och förminska var bild för sig när många bilder skall fixas.</p>
<h2>Vad krävs för att köra programmet?</h2>
<p>Det krävs att du har en licens på matlab runtime. Är du student som jag skall det inte vara några problem, annars är det tyvärr nog inte gratis.</p>
<h2>Användning</h2>
<p>WYSIWYG.</p>
<h2>Ansvar</h2>
<p>Jag tar inget ansvar för att någonting fungerar.</p>
<p><a href='http://www.techonomics.se/upLoads/2009/07/imageresizer.rar'><br />
<h2>Ladda ner ImageResizer</h2>
<p></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.techonomics.se/teknik/programmering/matlab-image-resizer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Matlab Gui med guihandles</title>
		<link>http://www.techonomics.se/teknik/programmering/matlab-gui-med-guihandles/</link>
		<comments>http://www.techonomics.se/teknik/programmering/matlab-gui-med-guihandles/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 16:54:06 +0000</pubDate>
		<dc:creator>David Gustafsson</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[guihandles]]></category>
		<category><![CDATA[matlab]]></category>

		<guid isPermaLink="false">http://www.techonomics.se/?p=550</guid>
		<description><![CDATA[Jag har jobbat med ett beräkningsprogram i Matlab. Tanken med detta är att det skall vara användarvänligt och effektivt att göra vanliga beräkningar för vissa typer av anläggningar. I detta program har jag använt mig av en hel del grafiska komponenter som uipanel, uitree och uicontrol.
Många författare av tutorials för Matlab GUI rekommenderar att använda [...]]]></description>
			<content:encoded><![CDATA[<p>Jag har jobbat med ett beräkningsprogram i Matlab. Tanken med detta är att det skall vara användarvänligt och effektivt att göra vanliga beräkningar för vissa typer av anläggningar. I detta program har jag använt mig av en hel del grafiska komponenter som <strong>uipanel</strong>, <strong>uitree</strong> och <strong>uicontrol.</strong></p>
<p>Många författare av tutorials för Matlab GUI rekommenderar att använda Matlabs inbyggda funktion (eller jag kanske ska kalla det för toolbox (?)) som heter guide. Skriv:</p>
<blockquote><p>&gt;&gt;guide</p></blockquote>
<p>I kommandofönstret och du får upp ett fönster där det går att placera och konfigurera komponenter i en figur. Detta har sina fördelar för enkla snabba applikationer. Dock har det stora problem om du vill skriva seriösa program. Detta eftersom det är svårt att ha kontroll på dina grafiska objekt. De bakas in i den exporterade figuren med ändelsen fig.</p>
<h2>Placera dina komponenter själv</h2>
<p>Jag har skrivit mitt program utan att använda <strong>guide</strong>. Det är lätt att skapa och placera ut komponenter. Som ni kan se nedan, krävs en bit kommando en massa kodning. Föreställa sig hur biffiga koderna för spel som <a href="http://www.pokerstars.se/">poker</a> och andra tillämpningar där det finns en mångfald av verksamheter. Anyway, tillbaka till att skriva program utan att använda <strong>guide</strong>. Detta görs genom att ange hantag till fönstret figuren skall skapas i samt positionen i fönstret. Givetvis kan även andra parametrar som färg eller callback konfigureras, precis som inifrån guide. Jag har skrivit mina program som Matlab objekt och använt strategin att lägga ut komponenterna i konstruktorn genom att anropa en utläggningsfunktion, förslagsvis med namnet init gui. Jag sparar mina objekt internt i klassen i en struktur som har tag i alla handtag till komponenterna. Denna struktur initierar jag när jag lägger ut komponenterna. </p>
<blockquote>
<pre>classdef aClassName &lt; handle
   properties
      handleToGui;
   end
   methods
      function obj = aClassName(varargin)
         ...
         obj.initGui();
         ...
      end
      ...
      function fig = initGui(Obj)
         Obj.handleToGui.fig = figure(...);
         Obj.handleToGui.otherComponentName = ...
         ...
      end
   end
end % classdef</pre>
</blockquote>
<h2>Matlabs function guihandles</h2>
<p>Matlab har en funktion som heter guihandles. Den är ganska smidig på många sätt och jag ska förklara varför. Anledningen är att du inte behöver bry dig om att lägga dina komponenter direkt i en struktur när du placerar ut dem eftersom guihandles(parent), ger en struktur med handtag till alla barn (children) som finns i figuren. Genom att kalla på denna kan du initiera <strong>handleToGui</strong> efter att alla komponenter lagts ut. Denna blir då en struktur med fieldnames givet till de taggnamn (<strong>Tag</strong>) komponenterna har givits.</p>
<h2>Problem med Matlabs function guihandles</h2>
<p>Det finns dock en risk med detta som jag tror att Matlab inte har tänkt på. Alternativt är det så att jag och andra har använt funktionen alltför oförsiktigt. Det är nämligen så att gui handles ger handtag till alla grafiska komponenter i figuren. Om du har olika klasser för olika delar av ditt program, t.ex. en separat klass som hanterar en viss typ av plottyta i en del av programmet och en annan klass som gör en liknande uppgift på ett annat ställe kan dessa förstöra för varandra om båda använder guihandles. Guihandles i en subkomponent ger handtagen till hela huvudfiguren (inklusive andra subkomponenter som ligger i den). Om den andra subkomponenten har samma taggnamn på någon komponent kommer dessa att sammanblandas när den aktuella komponenten anropar vad den tror är sin komponent.</p>
<h2>Använd inte Matlabs function guihandles</h2>
<p>Objektorienterad programmering är för mig en programmeringsmetod för att skapa god struktur. Detta genom att låta varje objekt (klass) sköta sina uppgifter internt och endast kommunicera genom bestämda gränssnitt med omgivningen. Globala variabler som <strong>guihandles</strong> ger är livsfarligt. I begreppsvärlden strävar man med andra ord efter låg <strong>coupling</strong>, hög <strong>cohesion </strong>och väl avgränsade<strong> moduler</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techonomics.se/teknik/programmering/matlab-gui-med-guihandles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Formatera Google AdSense</title>
		<link>http://www.techonomics.se/teknik/formatera-google-adsense/</link>
		<comments>http://www.techonomics.se/teknik/formatera-google-adsense/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 20:29:34 +0000</pubDate>
		<dc:creator>David Gustafsson</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Teknik]]></category>
		<category><![CDATA[adSense]]></category>
		<category><![CDATA[counter]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.techonomics.se/?p=543</guid>
		<description><![CDATA[Jag har lagt till google annonser till techonomics.se för att göra verksamheten vinstdrivande. Ännu har det inte gett något resultat, men vi får se.
Frågan är hur du lyckas med att få en annons i de tre första inläggen på din blogg? Det är nämligen så att du som AdSense-användare bara får har tre annonser per [...]]]></description>
			<content:encoded><![CDATA[<p>Jag har lagt till google annonser till <a href="http://techonomics.se">techonomics.se</a> för att göra verksamheten vinstdrivande. Ännu har det inte gett något resultat, men vi får se.<br />
Frågan är hur du lyckas med att få en annons i de tre första inläggen på din blogg? Det är nämligen så att du som AdSense-användare bara får har tre annonser per html-sida. Har du flera poster på framsidan i din blogg kan det vara läge att visa annonser på de tre högsta.<br />
Lösningen är att editera index.php (eller liknande) där dina inlägg listas. Skapa en räknare, <code>$counter = 1;</code> i början av filen i en tagg: . Därefter lägger du in din annons där while loopen lägger ut innehållet av dina poster och räknar upp <code>$counter =  $counter +1 ;</code>. Gör ett test att <code>$counter &lt;= 3</code> när du lägger in annonsscriptet.</p>
<p>Så här ser koden ut mer i detalj:</p>
<blockquote>
<pre>&lt;?php
get_header();
$counter = 1;
?&gt;</pre>
<pre>...</pre>
<pre>&lt;?php if (have_posts()) : while (have_posts()) : the_post(); ?&gt;</pre>
<pre>...</pre>
<pre>&lt;div class=""storycontent""&gt;
&lt;?php
if ($counter &lt;= 3) {
echo('
&lt;Din AdSense annons&gt;
');
}
$counter = 1 + $counter;</pre>
<pre>?&gt;</pre>
<pre>...</pre>
</blockquote>
<p>Självklart kan en formatering göras, t.ex. med css, för att fixa en bra placering av annonsen. Skapa då en div med klassen annons som har rätt formatering och lägg den runt annonsen.<br />
Något annat som är bra är att ge varje inlägg en annons. I mitt tema heter ett enskilt inlägg single.php. Här behöver du inte bry dig om någon counter, det räcker med att lägga ut en annons!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techonomics.se/teknik/formatera-google-adsense/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Matlab programmering</title>
		<link>http://www.techonomics.se/teknik/programmering/matlab-programmering/</link>
		<comments>http://www.techonomics.se/teknik/programmering/matlab-programmering/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 11:35:29 +0000</pubDate>
		<dc:creator>David Gustafsson</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[david gustafsson]]></category>
		<category><![CDATA[matlab]]></category>
		<category><![CDATA[matlabprogrammerare]]></category>

		<guid isPermaLink="false">http://www.techonomics.se/?p=538</guid>
		<description><![CDATA[Jag har arbetat med ett Matlab-program under mitt sommarjobb. Styrkan med Matlab är att det är ett väldigt enkelt språk som håller en högre abstraktionsnivå än till exempel java. Till det skall läggas att språket är mycket enkelt när det gäller att utföra beräkningar, lösa differentialekvationer, numeriska räkningar, simuleringar osv. En nackdel, som följer av [...]]]></description>
			<content:encoded><![CDATA[<p>Jag har arbetat med ett Matlab-program under mitt sommarjobb. Styrkan med Matlab är att det är ett väldigt enkelt språk som håller en högre abstraktionsnivå än till exempel java. Till det skall läggas att språket är mycket enkelt när det gäller att utföra beräkningar, lösa differentialekvationer, numeriska räkningar, simuleringar osv. En nackdel, som följer av den höga abstraktionsnivån, är dock att det går ganska långsamt. Det gäller att noga tänka sig för när man kodar.</p>
<p>Matlab bygger från och med version 2008a på java. Det går att köra de flesta funktioner i java genom Matlabfunktionen (det finns även andra funktioner i samma genre):</p>
<blockquote>
<pre>javaMethodEDT('Class or object of class', 'method name', ..., Params)</pre>
</blockquote>
<p>Från och med Matlabs 2008 version går det också att skapa klasser och objekt, vilket förenklar väldigt och skapar struktur. Syntaxen är ganska långt ifrån java och mycket är ärvt från tidigare Matlabversioner, vilket till en början gör det lite krångligt. Jag skall i en artikelserie presentera lite tips och trix vid Matlabprogrammering.</p>
<ul class="unIndentedList">
<li> Jag kommer att gå igenom GUI i form av bland annat träd och kontroller. Dessa hanteras genom Matlabfunktionerna uicontrol och uitree, vilka är en omskrivning av javas komponenter <strong>JTree</strong> och <strong>JButton</strong>, <strong>JTextField</strong> osv. I samband med detta tar jag också upp utläggning av komponenter, som kan ske manuellt och med Matlabs inbyggda programvara <strong>Guide</strong>.</li>
<li> Jag kommer att ta upp matlabs <strong>get och set metoder</strong>, som är lite krångliga men mycket bra vid arbete med objekt.</li>
<li> Jag går igenom Matlabs funktioner för att <strong>spara objekt</strong> och förklarar varför det är klokare att spara data i from av datastrukturer.</li>
<li> Slutligen tänkte jag också ta upp så kallade <strong>Callbacks </strong>och funktionen <strong>ode45</strong>, som är bra vid lösning av differentialekvationer. Ode45 kan bland annat användas för att simulera dynamiska system av olika slag. Ett exempel är kraftnätets beteende vid olika förhållanden.</li>
</ul>
<p>Jag ser mig nu som en <strong>duktig Matlabprogrammerare</strong> med erfarenhet från två projekt. För mer information om mig och mina uppdrag, vänligen ta kontakt vid <a href="mailto:david@techonomics.se">david@techonomics.se</a>. Jag har f-skatt och fakturerar per uppdrag eller tar betalt per timme.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techonomics.se/teknik/programmering/matlab-programmering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CBSE &#8211; komponentbaserad programvaruutveckling</title>
		<link>http://www.techonomics.se/intressen/cbse-komponentbaserad-programvaruutveckling/</link>
		<comments>http://www.techonomics.se/intressen/cbse-komponentbaserad-programvaruutveckling/#comments</comments>
		<pubDate>Sun, 10 May 2009 17:59:03 +0000</pubDate>
		<dc:creator>David Gustafsson</dc:creator>
				<category><![CDATA[Intressen]]></category>
		<category><![CDATA[Programmering]]></category>
		<category><![CDATA[CBSE]]></category>
		<category><![CDATA[google maps]]></category>
		<category><![CDATA[gps]]></category>
		<category><![CDATA[komponentbaserad programvaruutveckling]]></category>
		<category><![CDATA[Software engineering]]></category>

		<guid isPermaLink="false">http://www.techonomics.se/?p=484</guid>
		<description><![CDATA[I programvaruutveckling (eng. Software Engineering) finns det i huvudsak tre olika processmodeller för utveckling:
Vattenfallsmodellen, evolutionär- och komponentbaserad utveckling.
Vattenfallsmodellen identifierar olika faser som gås igenom vid alla utvecklingsprojekt. Dessa består av kravspecifikation, design, implementation och enhetstest, integration och acceptanstest samt utveckling. Samtliga steg gås igenom sekventiellt och leverabler i form av rapporter presenteras när varje steg [...]]]></description>
			<content:encoded><![CDATA[<p>I programvaruutveckling (eng. Software Engineering) finns det i huvudsak tre olika processmodeller för utveckling:</p>
<blockquote><p>Vattenfallsmodellen, evolutionär- och komponentbaserad utveckling.</p></blockquote>
<p>Vattenfallsmodellen identifierar olika faser som gås igenom vid alla utvecklingsprojekt. Dessa består av kravspecifikation, design, implementation och enhetstest, integration och acceptanstest samt utveckling. Samtliga steg gås igenom sekventiellt och leverabler i form av rapporter presenteras när varje steg är avslutat. Det sker alltså ingen iteration mellan faserna och management kan enkelt styra processen. Detta har klara fördelar men också nackdelar i en föränderlig miljö.</p>
<p>Den andra konceptuella utvecklingsmodellen är evolutionär utveckling. Den består av samma faser som vattenfallsmodellen med skillnaden att dessa gås igenom i flera inkrement. Efter varje version är kunden med och tar fram nya krav till nästa version som sedan designas, implementeras och valideras. Modellen kan användas för att utveckla färdiga system samt för prototyper till kravspecifikation. Även varianter på evolutionär utveckling finns. Exempel är iterativ utveckling där kraven är färdiga och faserna därefter gås igenom i flera steg iterationer. Ett annat exempel är spiralmodellen där mycket frihet råder.</p>
<p>Den tredje huvudmodellen för programvaruutveckling är komponentbaserad utveckling (CBSE). Denna utvecklingsgren går ut på att återanvände färdiga så kallade COTS produkter, commercial of the shelf. Processen har går igenom följande steg; kravspecifikation, komponentsökning, kravanpassning till de komponenter som hittas, val av komponenter, integration av komponenter samt validering mot krav. Att använda CBSE minimerar ledtider och kostnader, minskar risker för projekthaveri och ökar pålitligheten eftersom komponenten testats tidigare. Nackdelar är att koden oftast inte kan inspekteras eftersom komponenten ofta kommer i ett kompilerat format. Detta ger sämre kontroll för underhåll och vad som ska ske i framtida versioner. Utöver att komponenter är körbara (kompilerade) är de standardiserade, oberoende av annat, har gränssnitt (requires och provides) och är väl dokumenterade.</p>
<p>Jag arbetar en del med java och skall sommarjobba med matlab. Att använda en vattenfallsmodell är då på grund av arbetets omfattning helt omöjligt. I sommar har jag en månad på mig för att sätta ihop ett matlab program som skall grafiskt skall kunna användas för beräkningar av olika eklektiska system. Att göra detta från ruta ett hade krävt tid för att lära sig hur allt ska fungera, bygga funktioner, krav, arkitektur osv. Jag kommer att utgå från funktioner som redan finns och min uppgift är att göra gränssnittet för att slå in dessa funktioner så att de går att använda på ett bättre sätt. Komponentbaserad utveckling..</p>
<div class="wp-caption alignleft" style="width: 211px"><img title="Min gps klocka" src="http://media.webon.com/150721/203x122-11325.jpg" alt="GPS klocka" width="201" height="122" /><p class="wp-caption-text">GPS-klocka</p></div>
<p>Jag har länge funderat på olika privata projekt. Jag började lite på en flash applikation för att kunna presentera häftiga diagram från data ur en databas, men kom snabbt fram till att det inte intresserade mig. Jag har länge funderat på att skapa mitt eget program för gps hantering. Det jag använder nu är fokuserat på träning och har vissa bra funktioner, men jag tror att jag skulle kunna skapa något mycket bättre. Idéen är att skriva programmet i java för att kunna använda det både lokalt och via en applet på nätet. Programmet skall kombinera vanlig gps hantering i skogsmiljö samt träning med gps likt min gps-klocka (←).</p>
<p>Jag tror att jag behärskar de flesta av de tekniker som kommer att behövas för att skapa applikationen. Jag har nylighen hittat <a title="En komponent för gps hantering i kartor" href="http://today.java.net/pub/a/today/2007/10/30/building-maps-into-swing-app-with-jxmapviewer.html">en mycket bra öppen komponent för gps kartor</a> som jag kommer att använda. Komponenten omsluter (wrapper) javascript, som används för att programmera till de flesta kartor som till exepel <a title="Google maps" href="http://maps.google.com">google maps</a>, med java. <a title="Bra resurs för google maps GWT" href="http://claudiushauptmann.com/tutorial-google-maps-with-java-gwt-and-eclipse.html">Claudius Hauptmann</a> är en annan bra resurs som skrivit ett par artiklar om programmering till google maps.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techonomics.se/intressen/cbse-komponentbaserad-programvaruutveckling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Översätt din blog</title>
		<link>http://www.techonomics.se/teknik/programmering/oversatt-din-blog/</link>
		<comments>http://www.techonomics.se/teknik/programmering/oversatt-din-blog/#comments</comments>
		<pubDate>Thu, 02 Apr 2009 17:23:18 +0000</pubDate>
		<dc:creator>David Gustafsson</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[översättning]]></category>
		<category><![CDATA[translator]]></category>
		<category><![CDATA[Word press]]></category>

		<guid isPermaLink="false">http://www.techonomics.se/?p=440</guid>
		<description><![CDATA[För att få min wordpressblogg på olika språk har jag använt ett häftigt tillägg. Det är mycket kompakt och består av några hundra rader kod. Tillägget tillämpar dock google-translators mycket kraftfulla algoritm. Nu finns techonomics på alla möjliga språk. Jag utnyttjar bara de allra vanligaste (Kinesiska, Engelska, Spannska och Tyska), om du vill finns det [...]]]></description>
			<content:encoded><![CDATA[<p>För att få min wordpressblogg på olika språk har jag använt ett häftigt tillägg. Det är mycket kompakt och består av några hundra rader kod. Tillägget tillämpar dock google-translators mycket kraftfulla algoritm. Nu finns techonomics på alla möjliga språk. Jag utnyttjar bara de allra vanligaste (Kinesiska, Engelska, Spannska och Tyska), om du vill finns det dock möjlighet till 41 olika översättningar! Lite besviken är jag dock att det inte finns Franska?</p>
<p>Jag kan Engelska och en del Spanska och tycker översättningen blir riktigt bra. Prova själva bredvid mina flikar!</p>
<p>Jag är ganska dålig på css så jag lyckas inte få flaggorna att ligga som jag vill i både firefox och IE samtidigt. Till saken hör att flaggorna måste placeras innanför &#8221;divven&#8221; till mina flikar. Någon kanske kan hjälpa mig?</p>
<p>Intresserad? Ladda ner tillägget på http://nothing2hide.net</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techonomics.se/teknik/programmering/oversatt-din-blog/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>JAVA spel: Snake och GOLD</title>
		<link>http://www.techonomics.se/teknik/programmering/java-spel-snake-och-gold/</link>
		<comments>http://www.techonomics.se/teknik/programmering/java-spel-snake-och-gold/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 19:53:07 +0000</pubDate>
		<dc:creator>David Gustafsson</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Applet]]></category>
		<category><![CDATA[GOLD]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Snake]]></category>

		<guid isPermaLink="false">http://www.techonomics.se/?p=426</guid>
		<description><![CDATA[Snake och GOLD
Det här är en gammal laboration jag gjort i en programmeringskurs på Chalmers. Det går att spela GOLD eller Snake. Lyckas du ta alla prickar i GOLD är du riktigt duktig, eller ska jag säga tålmodig?

Jag hade tänkt skapa en highscore i min MySQL-databas för de båda spelen. Highscoren fungerar jättebra lokalt på [...]]]></description>
			<content:encoded><![CDATA[<h1>Snake och GOLD</h1>
<p>Det här är en gammal laboration jag gjort i en programmeringskurs på Chalmers. Det går att spela GOLD eller Snake. Lyckas du ta alla prickar i GOLD är du riktigt duktig, eller ska jag säga tålmodig?</p>
<p><center><applet code="Main.class" archive="http://www.techonomics.se/java/Snake_jar.jar" width="400" height="435" ></applet></center></p>
<p>Jag hade tänkt skapa en highscore i min MySQL-databas för de båda spelen. Highscoren fungerar jättebra lokalt på min dator men inte när jag exporterar JAVA koden till en applet. Av säkerhetsskäl är det tydligen svårt att kommunicera mellan databas och applet. Jag har ännu inte lösningen på problemet men arbetar på den. Om någon har någon idé om hur det kan lösas får ni gärna kommentera!</p>
<h2>Skapa koppling mellan java och databas</h2>
<p>För att skapa en koppling mellan en databas och java behöver du importera en driver. I mitt fall är org.jdbc.mysql.Driver bäst lämpad. Drivern importeras till ditt bibliotek, i eclipse genom att använda <code>build path</code> och lägga till biblioteket. När detta är gjort fungerar kontakten med databasen lokalt. För att få det att fungera i en applet måste Drivern med i .jar filen som utgör appletens kodbas. Det kan göras genom olika plugin till eclipse varav <a href="http://fjep.sourceforge.net/">Build Fat Jar</a> är ett exempel. Här är ett exempel på kod för att koppla mySQL med JAVA:</p>
<blockquote><p><code>...<br />
Connection conn = null;<br />
try {<br />
Class.forName("com.mysql.jdbc.Driver").newInstance();<br />
try {<br />
conn = DriverManager.getConnection("jdbc:mysql://mysql.din.domän.se/namn.på.din.databas, "User", "password");<br />
Statement s = conn.createStatement();<br />
if(gameModel.getName().equals("Snake"))<br />
s.executeUpdate("INSERT INTO Snake_highscore (name, score) VALUES ('" + name +<br />
"', '" + score + "')");<br />
else<br />
s.executeUpdate("INSERT INTO Gold_highscore (name, score) VALUES ('" + name +<br />
"', '" + score + "')");<br />
} catch(SQLException connectionException) {<br />
... // här får jag ett exception!!<br />
}<br />
} catch (ClassNotFoundException driverException1) {<br />
...<br />
} catch (IllegalAccessException driverException2) {<br />
...<br />
}<br />
...</code></p></blockquote>
<p>Problemet som återstår att lösa är att s.executeUpdate(&#8230;) skall fungera. I nuläget får jag ett <code>Communications link failure</code> som jag inte vet vad som orsakar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techonomics.se/teknik/programmering/java-spel-snake-och-gold/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simuleringsstudie: jämförelse mellan parallell och seriell montering</title>
		<link>http://www.techonomics.se/ekonomi/simuleringsstudie-jamforelse-mellan-parallell-och-seriell-montering/</link>
		<comments>http://www.techonomics.se/ekonomi/simuleringsstudie-jamforelse-mellan-parallell-och-seriell-montering/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 12:05:10 +0000</pubDate>
		<dc:creator>David Gustafsson</dc:creator>
				<category><![CDATA[Ekonomi]]></category>
		<category><![CDATA[Operations]]></category>
		<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Teknik]]></category>
		<category><![CDATA[löpande band]]></category>
		<category><![CDATA[parallell montering]]></category>
		<category><![CDATA[seriell sontering]]></category>
		<category><![CDATA[simulering]]></category>

		<guid isPermaLink="false">http://www.techonomics.se/?p=236</guid>
		<description><![CDATA[I vårt kandidatarbete ska vi jämföra olika typer av produktionssystem. Kategorisering av dessa har gjorts i sieriella löpande band samt i parallella system med självstyrande grupper, samt inom dessa kategorier en något mer detaljerad indelning.
Empiriska resultat har visat att balanserings-, hanterings- och systemförluster är avsevärt mycket större för seriella liner i jämförelse med den parallella [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_237" class="wp-caption alignright" style="width: 310px"><a href="http://www.techonomics.se/wp-content/uploads/2009/02/seriell.jpg"><img class="size-medium wp-image-237" title="seriell" src="http://www.techonomics.se/wp-content/uploads/2009/02/seriell-300x113.jpg" alt="Simulering av seriell montering, två stationer" width="300" height="113" /></a><p class="wp-caption-text">Simulering av seriell montering, två stationer</p></div>
<p>I vårt kandidatarbete ska vi jämföra olika typer av produktionssystem. Kategorisering av dessa har gjorts i sieriella löpande band samt i parallella system med självstyrande grupper, samt inom dessa kategorier en något mer detaljerad indelning.</p>
<p>Empiriska resultat har visat att balanserings-, hanterings- och systemförluster är avsevärt mycket större för seriella liner i jämförelse med den parallella organisationsformen. En tumregel är 40 % totala förluster för parallella systemet och 100-200 % för den seriella motsvarigheten. För att undersöka förhållandet utan behov av empirisk data kan simulering utnyttjas. <strong></strong></p>
<blockquote><p><strong>Simulering</strong> är ett sätt att, så långt som möjligt, återskapa en verklighet (Wikipedia, http://sv.wikipedia.org/wiki/Simulering, 2009-02-02)</p></blockquote>
<p>Genom att bygga en konceptuell modell av verkligheten, överföra den till en simuleringsprogramvara och sedan studera hur den beter sig, kan slutsatser dras om vilka faktorer som påverkar specifika prestationsmål. Prestationsmålen brukar också benämnas resultatvariabler.</p>
<p>Jag har gjort en konceptuell modell på en väldigt enkel fabrik. Fabriken tillverkar två olika typer av produkter som tar olika lång tid. Varje station gör en viss bestämd del av varje produkt (t.ex. monteringsstation A gör framdelen av Bil 1 och 2 och monteringsstation B bakdelen av Bil 1 och 2). Genom att göra &gt;10 observationer för respektive monteringsuppgift vid varje station kan en fördelning tas fram, utefter vilken framtida produktion kan tänkas följa med en viss signifikans α. Fördelningen används sedan av simuleringsprogrammet för att modellera ett verkligt förlopp.</p>
<div id="attachment_238" class="wp-caption alignright" style="width: 310px"><a href="http://www.techonomics.se/wp-content/uploads/2009/02/parallell.jpg"><img class="size-medium wp-image-238" title="parallell" src="http://www.techonomics.se/wp-content/uploads/2009/02/parallell-300x112.jpg" alt="Simulering av parallell montering, två stationer" width="300" height="112" /></a><p class="wp-caption-text">Simulering av parallell montering, två stationer</p></div>
<p>Efter att modellen verifierats och validerats med verkligheten kan den, förenklat, antas stämma överens med det verkliga systemet. Förändringar kan då göras med modellen, för att på så sätt enkelt kunna undersöka hur det verkliga systemet skulle betett sig. Samma fördelningar (tempo) används för det parallella systemet. Det som skiljer systemen är därmed de förluster som uppstår mellan alla steg. Det visade sig att det parallella systemet monterar 42 (±1) produkter per halvtimme gentemot 27,3 (±0,8) för det seriella systemet.</p>
<p>Om alla antaganden från den konceptuella modellen stämmer (vilket inte är säkert) samt att en del andra krav också gäller (orkar inte förklara i detalj) är allså det parallella systemet bättre!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techonomics.se/ekonomi/simuleringsstudie-jamforelse-mellan-parallell-och-seriell-montering/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Redigera Word-press tema</title>
		<link>http://www.techonomics.se/teknik/programmering/redigera-word-press-tema/</link>
		<comments>http://www.techonomics.se/teknik/programmering/redigera-word-press-tema/#comments</comments>
		<pubDate>Sun, 25 Jan 2009 16:31:35 +0000</pubDate>
		<dc:creator>David Gustafsson</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[avatar]]></category>
		<category><![CDATA[funktionsbibliotek]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.techonomics.se/?p=218</guid>
		<description><![CDATA[Jag har lagt till en author-tagg i mina inlägg (↑). För att göra det hade jag kunnat använda min bild och mail direkt, men jag valde att göra det mer dynamiskt. På sidan:
http://phpxref.ftwr.co.uk/wordpress/nav.html?_functions/index.html
hittar du alla funktioner som är fördefinierade i Wordpress.  Genom att utnyttja funktionen get_avatar på detta sett får man avatarbilden:

  &#60;?php
  [...]]]></description>
			<content:encoded><![CDATA[<p>Jag har lagt till en <em>author</em>-tagg i mina inlägg (↑). För att göra det hade jag kunnat använda min bild och mail direkt, men jag valde att göra det mer dynamiskt. På sidan:</p>
<blockquote><p><a href="http://phpxref.ftwr.co.uk/wordpress/nav.html?_functions/index.html" target="_blank">http://phpxref.ftwr.co.uk/wordpress/nav.html?_functions/index.html</a></p></blockquote>
<p>hittar du alla funktioner som är fördefinierade i Wordpress.  Genom att utnyttja funktionen get_avatar på detta sett får man avatarbilden:</p>
<blockquote>
<pre>  &lt;?php
   echo <a href="http://phpxref.ftwr.co.uk/wordpress/nav.html?_functions/index.html#get_avatar" target="_blank">get_avatar</a>( $id_or_email, $size = '96', $default = '&lt;path_to_url&gt;' );
   ?&gt;</pre>
</blockquote>
<p>För att alltid det skall vara författaren av det aktuella inlägget som hamnar i bilden använder jag funktionen</p>
<blockquote><p><code><a href="http://phpxref.ftwr.co.uk/wordpress/nav.html?_functions/index.html#get_the_author_id" target="_blank">get_the_author_id</a>()</code></p></blockquote>
<p>på platsen för <em>$id_or_email.</em></p>
<p>För att få utskrift av författarens namn och mail finns också funktioner, get_author() och get_author_email(). Funktionsbiblioteket är en guldgruva för att spara tid när du bygger ditt eget tema/modifierar någon annans!</p>
<p>(Formateringen av min <em>author</em>-tagg är därefter uppbyggd med css som läggs i style.css)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techonomics.se/teknik/programmering/redigera-word-press-tema/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

