<?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>Mikael Brevik &#187; Høynivåspråk</title>
	<atom:link href="http://mikaelb.net/emne/hoynivasprak/feed/" rel="self" type="application/rss+xml" />
	<link>http://mikaelb.net</link>
	<description>Bloggen</description>
	<lastBuildDate>Mon, 07 Sep 2009 20:11:35 +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>Java klasse: GUIDialog</title>
		<link>http://mikaelb.net/2009/06/java-klasse-guidialog/</link>
		<comments>http://mikaelb.net/2009/06/java-klasse-guidialog/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 03:24:19 +0000</pubDate>
		<dc:creator>Mikael Brevik</dc:creator>
				<category><![CDATA[Høynivåspråk]]></category>

		<guid isPermaLink="false">http://mikaelb.net/?p=153</guid>
		<description><![CDATA[Her kommer den første i en serie av Java-koder som kan være hjelpsomme for noen. Denne klassen gjør så og si det samme som
JOptionPane.showMessageDialog() og JOptionPane.showInputDialog(), bare med mindre muligheter. Det er slik som man kan bygge ut selv. Det som er essensielt i denne koden er bakgrunnen. Gå nøye igjennom denne interne klassen, og [...]]]></description>
			<content:encoded><![CDATA[<p>Her kommer den første i en serie av Java-koder som kan være hjelpsomme for noen. Denne klassen gjør så og si det samme som</p>
<p>JOptionPane.showMessageDialog() og JOptionPane.showInputDialog(), bare med mindre muligheter. Det er slik som man kan bygge ut selv. Det som er essensielt i denne koden er bakgrunnen. Gå nøye igjennom denne interne klassen, og den skal være ganske lettforståelig.</p>
<p>Det følger også med en klasse helt i bunn som gjør at man kan bevege dialog-boksene ved å trykke hvor som helst inne i selve boksen.</p>
<p>Kodene finner du på en <a title="JavaClass: GUIDialog" href="http://mikaelb.net/javaclass-guidialog/">egen side</a>.</p>
<p><img class="size-full wp-image-155 aligncenter" title="MessageDialog" src="http://mikaelb.net/wp-content/uploads/2009/06/bilde-8.png" alt="MessageDialog" width="344" height="157" /><img class="size-full wp-image-154 aligncenter" title="InputDialog" src="http://mikaelb.net/wp-content/uploads/2009/06/bilde-7.png" alt="InputDialog" width="239" height="128" /></p>
]]></content:encoded>
			<wfw:commentRss>http://mikaelb.net/2009/06/java-klasse-guidialog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter-klienten Kvitter</title>
		<link>http://mikaelb.net/2009/06/twitter-klienten-kvitte/</link>
		<comments>http://mikaelb.net/2009/06/twitter-klienten-kvitte/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 01:59:05 +0000</pubDate>
		<dc:creator>Mikael Brevik</dc:creator>
				<category><![CDATA[Høynivåspråk]]></category>

		<guid isPermaLink="false">http://mikaelb.net/?p=138</guid>
		<description><![CDATA[
            function startGallery_2() { 
              var myGallery = new gallery($("myGallery_2"), {                  timed: false,  [...]]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript">
            function startGallery_2() { 
              var myGallery = new gallery($("myGallery_2"), {                  timed: false,         showCarousel: true,         showInfopane: true,           showArrows: true,           embedLinks: false, slideInfoZoneOpacity: 0.80, textShowCarousel: "Bilder"   });
              
              document.getElementById("myGallery_2").style.display = "block";
           }
            window.addEvent("domready", startGallery_2);
          </script>
         <div style="width: 500px; height: 550px; border:0px solid; margin:0px auto; clear:both;"><div id="myGallery_2" class="myGallery" style="display:none; width: 500px !important; height: 550px !important;"><div class="imageElement">  <h3> Vanlig visning</h3>  <p style="color: #FFF000;"> Finnes to tema. HUD eller ikke HUD.</p>  <a target="_blank" href="http://mikaelb.net/wp-content/gallery/kvitter/bilde-3.png" title="open image" class="open"></a>  <img src="http://mikaelb.net/wp-content/gallery/kvitter/bilde-3.png" class="full" />  <img src="http://mikaelb.net/wp-content/gallery/kvitter/thumbs/thumbs_bilde-3.png" class="thumbnail" /></div><div class="imageElement">  <h3> Oppdater status og søk</h3>  <p style="color: #FFF000;"> </p>  <a target="_blank" href="http://mikaelb.net/wp-content/gallery/kvitter/bilde-4.png" title="open image" class="open"></a>  <img src="http://mikaelb.net/wp-content/gallery/kvitter/bilde-4.png" class="full" />  <img src="http://mikaelb.net/wp-content/gallery/kvitter/thumbs/thumbs_bilde-4.png" class="thumbnail" /></div><div class="imageElement">  <h3> Alternativer for en \"tweet\"</h3>  <p style="color: #FFF000;"> </p>  <a target="_blank" href="http://mikaelb.net/wp-content/gallery/kvitter/bilde-5.png" title="open image" class="open"></a>  <img src="http://mikaelb.net/wp-content/gallery/kvitter/bilde-5.png" class="full" />  <img src="http://mikaelb.net/wp-content/gallery/kvitter/thumbs/thumbs_bilde-5.png" class="thumbnail" /></div><div class="imageElement">  <h3> Egenskaper</h3>  <p style="color: #FFF000;"> Egenskapene er ikke fullført. Det skal komme et valg mellom HUD-display eller ikke. </p>  <a target="_blank" href="http://mikaelb.net/wp-content/gallery/kvitter/bilde-6.png" title="open image" class="open"></a>  <img src="http://mikaelb.net/wp-content/gallery/kvitter/bilde-6.png" class="full" />  <img src="http://mikaelb.net/wp-content/gallery/kvitter/thumbs/thumbs_bilde-6.png" class="thumbnail" /></div> </div></div></p>
<p>I det siste har jeg jobbet litt med et lite prosjekt i å lage en Twitter-klient. Eneste formålet med prosjektet er læring. Ikke har jeg bruk for en twitter-klient eller bruker Twitter for den saks skyld. Men det er et ypperlig prosjekt å utføre for læringens skyld.</p>
<p>For et best mulig resultat må jeg innom flere tema som er essensielle innen programmering; minnehåndtering (profilbilder, tabell-rendering, grafikk), egne utseender med Graphics2D, Synkronisering av tråder (Concurrency), JSON, OAuth-implementering og ikke minst <strong>mye</strong> GUI-programmering.</p>
<p>Kanskje det som jeg har syns mest om er hvordan lagre lekre programmer for Mac OS plattformen i Java. Mac OS X har egentlig mange muligheter for Java når det gjelder utseende, så det er ingen grunn til at Java-programmer skal skille seg mye ut fra Cocoa-applikasjoner. Det kan vel tenke seg at det er noe unyttig å jobbe med Java til Mac OS, dersom det er en plattform-avhengig applikasjon, men ingen kunnskap er unyttig.</p>
<h2>Litt om klienten</h2>
<p>Navnet er Kvitter. Egentlig et helt tilfeldig navn fra min side. Planen var å ikke kalle det noe særlig, men siden Twitter krever at du registrerer programmet for å kunne få tilgang til OAuth, mått jeg komme opp med et navn.</p>
<p>I klienten kan man gjøre det de fleste bruker Twitter til. Lese igjennom venners statuser, legge til nye venner, fjerne venner, søke etter folk, ord eller &#8220;tags&#8221;, legge til favoritter, se hvem som har skrevet til deg, se offentlige statuser og selvfølgelig da oppdatere statusen din.</p>
<p>Klienten har bygd inn Growl-støtte som gjør at dersom det kommer nye statuser vil du få beskjed om det. Så lenge du har valgt dette selv. For å kommunisere med Growl bruker jeg AppleScript. Jeg kommer til å skrive litt mer om hvordan man kan gjøre dette via Java i en senere anledning.</p>
<h2>Lansering</h2>
<p>Trenger vi en ny Twitter-klient? Nei, egentlig ikke. Men såvidt jeg har sett er dette den første helnorske klienten som finnes. Jeg er enda ikke sikker på når lanseringen skjer, eller om det blir i det heletatt. Som nevnt har dette kun vært et lære-prosjekt fra min side, og ingenting annet. Men siden jeg har jobbet en del timer med den, så blir det sikkert muligheter for å laste ned klienten fra en mørk krok her på siden.</p>
<p>Men det viktigste, etter min mening, er at i løpet av de neste ukene kommer jeg til å gi ut mye av de kodene jeg har jobbet med. Dette inkluderer HUD-vinduer med pil (som sett på bildet) (kan brukes som &#8220;popup&#8221; for visning av info), Growl for Java, tegning av finere dialog-bokser. Det var alt jeg kom på i farten.</p>
<p>Håper på litt respons på hvordan designet på programmet er og om det er noen viktige funksjoner jeg har gått glipp av.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikaelb.net/2009/06/twitter-klienten-kvitte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java programmering på Mac</title>
		<link>http://mikaelb.net/2009/04/java-programmering-pa-mac/</link>
		<comments>http://mikaelb.net/2009/04/java-programmering-pa-mac/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 23:03:08 +0000</pubDate>
		<dc:creator>Mikael Brevik</dc:creator>
				<category><![CDATA[Høynivåspråk]]></category>

		<guid isPermaLink="false">http://mikaelb.net/?p=113</guid>
		<description><![CDATA[I det siste har det blitt en del programmering i Java på Mac-plattformen. Jeg driver for tiden med et program som skal kun kjøre på OS X. Hvorfor bruke Java? Skoleprosjekt.
Det er et par ting jeg har lært under veis. Og jeg tenkte jeg skulle poste noen lenker her som jeg har hatt god bruk [...]]]></description>
			<content:encoded><![CDATA[<p>I det siste har det blitt en del programmering i Java på Mac-plattformen. Jeg driver for tiden med et program som skal kun kjøre på OS X. Hvorfor bruke Java? Skoleprosjekt.</p>
<p>Det er et par ting jeg har lært under veis. Og jeg tenkte jeg skulle poste noen lenker her som jeg har hatt god bruk for.</p>
<h3>Apples egne dokumenter:</h3>
<ul>
<li> <a href="http://developer.apple.com/documentation/Java/Conceptual/Java14Development/index.html" target="_top">Java Development Guide for Mac OS X</a> (Mye informasjon om hvordan man kan bruke OS X bibliotek for Java, KeyChain, m.m.)</li>
<li><a href="http://developer.apple.com/documentation/UserExperience/Conceptual/AppleHIGuidelines/XHIGIntro/XHIGIntro.html#//apple_ref/doc/uid/TP30000894-TP6">Apple Human Interface Guidelines</a> (Ikke direkte Java-relatert, men viktig dersom du skal passe inn på plattformen.)</li>
<li><a href="http://developer.apple.com/technotes/tn2007/tn2196.html#//apple_ref/doc/uid/DTS10004439">New Control Styles available within J2SE 5.0 on Mac OS X 10.5</a> (Mye nyttig for å få knapper, vinduer, JRootPane, m.m., til å se &#8220;native&#8221; ut.)</li>
</ul>
<h3>Andre skriblerier:</h3>
<ul>
<li><a href="http://nadeausoftware.com/articles/2009/01/mac_java_tip_how_control_window_decorations">Mac Java tip: How to control window decorations</a> (Litt av det samme du finner i Apples dokumenter, bare mer utdypet)</li>
<li><a href="http://nadeausoftware.com/articles/java">http://nadeausoftware.com/articles/java</a> (Samme side som ovenfor bare at du finner mange poster om Java i OS X)</li>
</ul>
<p>En ting som er mangel av i Apples dokumentasjon er hvordan du bruker det innebygde QuickTime biblioteket til å benytte iSight til å hente video eller bilder. Dersom det er av noen interesse kan jeg poste et eksempel på hvordan du kan bruke iSight og andre QuickTime-baserte web-kamera til å ta bilde.</p>
<p>Senere er det også mulig jeg kommer med noen kode-eksempler på hvordan du kan lage din egen &#8220;divider&#8221; i en JSplitPane. Hvorfor lage egen divider? Den som er originalt i LAF-en (Look and feel) både til OS X og Windows er stygge, og noen ganger vinner man ikke JSplitPane UI-er som er fine nok, eller passer til programmet ditt. Senere kommer jeg med litt kode eksempler på hvordan du kan lage en JSplitPane noe lignende den du ser i OS X programmet µTorrent.</p>
<ul></ul>
]]></content:encoded>
			<wfw:commentRss>http://mikaelb.net/2009/04/java-programmering-pa-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Binærsøk i tabeller</title>
		<link>http://mikaelb.net/2008/12/binaersok-i-tabeller/</link>
		<comments>http://mikaelb.net/2008/12/binaersok-i-tabeller/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 04:17:24 +0000</pubDate>
		<dc:creator>Mikael Brevik</dc:creator>
				<category><![CDATA[Datateknikk]]></category>
		<category><![CDATA[Høynivåspråk]]></category>

		<guid isPermaLink="false">http://mikaelb.net/?p=71</guid>
		<description><![CDATA[De som har prøvd tabeller/matriser i språk som f.eks Java, vet at det ikke er like enkelt og smertefritt å anvende de som i f.eks PHP. I PHP har vi uendelig mange muligheter med matriser og vi kan stort sett gjøre hva vi vil med de, uten å tenke så veldig mye på konsekvensene. Slik [...]]]></description>
			<content:encoded><![CDATA[<p>De som har prøvd tabeller/matriser i språk som f.eks Java, vet at det ikke er like enkelt og smertefritt å anvende de som i f.eks PHP. I PHP har vi uendelig mange muligheter med matriser og vi kan stort sett gjøre hva vi vil med de, uten å tenke så veldig mye på konsekvensene. Slik er det ikke med høynivåspråk som Java, C++ osv.</p>
<p>Her har vi begrenset muligheter for hva vi kan gjøre og det er enda viktigere at det vi gjør burde være optimalisert og gå så kjapt som mulig. Det er da vi burde se på optimalisering av algoritmene vi gjør i programkodene.</p>
<p>La oss ta et eksempel om en matrise med tall, som ofte er tilfellet. Vi skal søke igjennom matrisen, og finne på hvilken indeks vi har tallet X. For nybegynnere eller late, vil det naturlige valget være en lineær fremgangsmåte. Det vil si vi starter på indeks 0 og går til lengden på tabellen og går igjennom hver eneste indeks og ser om denne passer til argumentet vi har gitt. Denne fremgangsmåten kan være effektiv dersom vi treffer på resultatet på en av de første indeksene og stopper løkken der ved å returnere resultatet. Men hva om vi ikke har et treff før helt i slutten av tabellen? Da ville man ha brukt mye unødvendig tid på å lete igjennom N antall indekser før man traff på den siste. Det må altså være en bedre måte og gjøre dette på.</p>
<p>Ta deg en 5-minutters tenkepause og prøv å tenk ut en bedre fremgangsmåte. Vi har flere måter å bruke en løkke-struktur på. Dersom vi har to nøstede løkker har vi en kvadratisk fremgangsmåte (n²), 3 nøstede løkker så er det n³ osv. Men vi har også noen bedre metoder som er raskere; det er logaritmiske fremgangsmåter. Og binærsøk, som vi skal se på nå, er en såkalt logaritmisk fremgangsmåte.</p>
<p>I steden for å søke igjennom alle indekser, kunne det ikke tenke seg at det er enklere å starte med en sortert tabell og gå til medianen for å så sjekke om medianen er høyere eller lavere enn tallet vi er ute etter? På den måten har vi halvert tabellen vi leter igjennom og har mindre data å lete igjennom. Om man gjør dette igjen, ved å sette medianen av den nye tabellen, og sjekke om den er høyere eller lavere enn tallet vi er ute etter. Sånn fortsetter vi til vi har kommet frem til tallet. Siden det dataen halveres for hver iterasjon er det en logaritimisk fremgangsmåte, og det er lett å se for seg at dette er en mye mer effektiv fremgangsmåte.</p>
<p>La oss se hvordan det blir utført i praksis. Vi starter med en sortert tabell som har verdiene, 2, 3, 6, 9, 12, 21, 24, 31, 33.</p>
<p>Siden den er sortert kan vi se på medianen (som er den midterste verdien) 12. Dersom tallet vi leter etter, 24, er over 12 vet vi at den eksisterer et sted mellom 21 og 33 (siden den ikke er 12), eller fra indeksen 5 til 8. Allerede har vi gått fra en datamengde på 9 tall til bare 4 tall. Dersom vi gjør dette igjen vil medianen bli indeksen 6 (avrundet) og den er hverken over eller under 24, men lik. Derfor har vi indeksen vår, altså 6. Som vi ser er dette en mye mer effektiv måte å lete igjennom en tabell på. Her brukte vi 2 gjennomganger fremfor 6 som ville ha vært nødvendig i en lineær fremgangsmåte.</p>
<p>Nå kan vi se på litt kode som gjør dette for oss. Du kan selv gjøre dette i ditt favorittspråk, men jeg foretrekker per dags dato Java, og vil gjøre det i dette språket.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> BinarySearch <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> binarySearch <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> heystack, <span style="color: #000066; font-weight: bold;">int</span> needle<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">int</span> low <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> high <span style="color: #339933;">=</span> heystack.<span style="color: #006633;">length</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> median<span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>low <span style="color: #339933;">&lt;</span> <span style="color: #339933;">=</span> high<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            median <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>high<span style="color: #339933;">+</span>low<span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>needle <span style="color: #339933;">&gt;</span> heystack<span style="color: #009900;">&#91;</span>median<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                 <span style="color: #666666; font-style: italic;">// Vi skal ha en større verdi, så vi halverer i lengden fra bunnen</span>
                 low <span style="color: #339933;">=</span> median<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>needle <span style="color: #339933;">&lt;</span> heystack<span style="color: #009900;">&#91;</span>median<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                 <span style="color: #666666; font-style: italic;">// Vi skal ha en mindre verdi, så vi halverer i lengden fra toppen</span>
                 high <span style="color: #339933;">=</span> median<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                 <span style="color: #666666; font-style: italic;">// Vi sitter på verdien på medianen som er lik needle, så vi har verdien vår.</span>
                 <span style="color: #000000; font-weight: bold;">return</span> median<span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #666666; font-style: italic;">// Vi fant ingenting, derfor returnerer vi -1</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Dette er en måte å gjøre det på. Vi kan også gå frem på en rekursiv måte dersom vi vil unngå en løkke.</p>
</pre>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> BinarySearch <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> binarySearch <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> heystack, <span style="color: #000066; font-weight: bold;">int</span> needle, <span style="color: #000066; font-weight: bold;">int</span> low, <span style="color: #000066; font-weight: bold;">int</span> high<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// Vi har gått for langt, og vi har ingen verdi..</span>
        <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>high <span style="color: #339933;">&lt;</span> low<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">int</span> median <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>high<span style="color: #339933;">+</span>low<span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>needle <span style="color: #339933;">&gt;</span> heystack<span style="color: #009900;">&#91;</span>median<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
             <span style="color: #666666; font-style: italic;">// Vi skal ha en større verdi, så vi halverer i lengden fra bunnen</span>
             <span style="color: #000000; font-weight: bold;">return</span> binarySearch<span style="color: #009900;">&#40;</span>heystack, needle, median<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span>, high<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>needle <span style="color: #339933;">&lt;</span> heystack<span style="color: #009900;">&#91;</span>median<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
             <span style="color: #666666; font-style: italic;">// Vi skal ha en mindre verdi, så vi halverer i lengden fra toppen</span>
             <span style="color: #000000; font-weight: bold;">return</span> binarySearch<span style="color: #009900;">&#40;</span>heystack, needle, low, median<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// Vi sitter på verdien på medianen som er lik needle, så vi har verdien vår.</span>
        <span style="color: #000000; font-weight: bold;">return</span> median<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Mange syns kanskje den rekursive metoden er bedre enn den iterasjonsmetoden, men for min del er itereringen like grei.</p>
<p>Håper dette setter litt lys på at det finnes bedre metoder å løse en ting på en den du kanskje tenker først.</pre>
]]></content:encoded>
			<wfw:commentRss>http://mikaelb.net/2008/12/binaersok-i-tabeller/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bitwise operasjoner</title>
		<link>http://mikaelb.net/2008/12/bitwise-operasjoner/</link>
		<comments>http://mikaelb.net/2008/12/bitwise-operasjoner/#comments</comments>
		<pubDate>Sat, 06 Dec 2008 00:31:20 +0000</pubDate>
		<dc:creator>Mikael Brevik</dc:creator>
				<category><![CDATA[Datateknikk]]></category>
		<category><![CDATA[Høynivåspråk]]></category>
		<category><![CDATA[bits]]></category>
		<category><![CDATA[byte]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[prosessor]]></category>

		<guid isPermaLink="false">http://mikaelb.net/?p=58</guid>
		<description><![CDATA[I feiringen av fullført datateknikk eksamen, skal jeg nå sette kunnskapene mine på en siste prøve. Jeg skal nå skriv en artikkel om bitwise-operasjoner som en gjerne bruker med et høynivåspråk som f.eks Java eller C++. Før, på en tradisjonell prosessor, ble bitwise-operasjoner gjerne brukt av en CPU i steden for addisjoner og substraksjoner. Dette [...]]]></description>
			<content:encoded><![CDATA[<p>I feiringen av fullført datateknikk eksamen, skal jeg nå sette kunnskapene mine på en siste prøve. Jeg skal nå skriv en artikkel om bitwise-operasjoner som en gjerne bruker med et høynivåspråk som f.eks Java eller C++. Før, på en tradisjonell prosessor, ble bitwise-operasjoner gjerne brukt av en CPU i steden for addisjoner og substraksjoner. Dette er som regel ikke tilfellet nå i en CPUs mer moderne form, nå som addisjon og substraksjon er like rask som bitwise-operasjoner. </p>
<p>Først litt om hva en bit og en byte er. En bit er et siffer i en binær sammenheng. Et binært tallsystem (også kjent som 2-tallsystemet) er det som blir brukt internt av en datamaskin og all data og innhold i en maskin brytes ned til binære mønster for maskinen. Her er det kun 0 og 1 (høy spenning eller lav spenning) som duger.</p>
<p>Jeg nevnte at bit var et siffer i et binært mønster. En byte (som dere kanskje kjenner igjen som en størrelsesenhet på maskinen) er en samling av slike bits. 8 bits for å være helt nøyaktig. I en byte er derfor maksimalverdien 255 i ti-tallsystemet (1111 1111 i to-tallsystemet).</p>
<p>Et ord derimot er en samling av bits uten en fast størrelse. Ord er et bitmønster i en lokasjon/linje i et minne. Et ord kan derfor være på f.eks 16 bit, 32 bit, 64 bit.</p>
<h2>Bitwise-operasjoner</h2>
<p>Vi har 6 forskjellige bitwise-operasjoner.</p>
<ol>
<li><strong>AND</strong> &#8211; &amp;</li>
<li><strong>OR</strong> &#8211; |</li>
<li><strong>XOR</strong> &#8211; ^</li>
<li><strong>NOT</strong> &#8211; ~</li>
<li><strong>RIGHT SHIFT</strong> &#8211; &gt;&gt;</li>
<li><strong>LEFT SHIFT</strong> &#8211; &lt;&lt;<em></em></li>
</ol>
<p><em>(Det du ser til høyre, etter -, er tegnene som blir brukt i høynivåspråk for disse operasjonene.)</em></p>
<h2>AND</h2>
<p>AND blir brukt til å se hvilke bits som korresponderer i et bitmønster. Her tar jeg utgangspunkt i et mønster på lengden 8 bits, altså en byte. </p>
<p>Her tar jeg utgangspunkt i tallene 133 og 203. 133 er 1000 0101 og 203 er 1100 1011.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">   <span style="color: #666666; font-style: italic;">// 1000 0101 &amp; 1100 1011</span>
   <span style="color: #cc66cc;">1000</span> <span style="color: #208080;">0101</span>
   <span style="color: #cc66cc;">1100</span> <span style="color: #cc66cc;">1011</span>
   <span style="color: #339933;">------------</span>
   <span style="color: #cc66cc;">1000</span> <span style="color: #208080;">0001</span></pre></div></div>

<p>Som du ser resulterer det i et bitmønster som har 1 hvor det er 1 på begge bytene og 0 hvor det er ulikt eller likt på 0. </p>
<p>Dette kan du f.eks bruke til å finne om en gitt bit er satt eller ikke:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Denne returnerer 0 (boolsk verdi: false) da bitverdien for 2 ikke er satt.</span>
<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">4</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span> 0x02<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h2>OR</h2>
<p>OR blir brukt til å se hvilke to bits sammenlagt har 1. Dvs dersom en av bitene på to bitmønster har 1 vil resultatet si 1. </p>
<p>Jeg tar igjen utgangspunkt i samme tall som på AND.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">   <span style="color: #666666; font-style: italic;">// 1000 0101 | 1100 1011</span>
   <span style="color: #cc66cc;">1000</span> <span style="color: #208080;">0101</span>
   <span style="color: #cc66cc;">1100</span> <span style="color: #cc66cc;">1011</span>
   <span style="color: #339933;">------------</span>
   <span style="color: #cc66cc;">1100</span> <span style="color: #cc66cc;">1111</span></pre></div></div>

<p>Som du ser blir det 1 hvor en av bitmønstrene har 1 i seg på den plassen.</p>
<h2>XOR</h2>
<p>Denne operasjonen er en &#8220;enten eller&#8221; operasjon. Den blir 1 hvis og bare hvis de to bitene er ulike. </p>
<p>Tar fortsatt utgangspunkt i samme tall.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">   <span style="color: #666666; font-style: italic;">// 1000 0101 ^ 1100 1011</span>
   <span style="color: #cc66cc;">1000</span> <span style="color: #208080;">0101</span>
   <span style="color: #cc66cc;">1100</span> <span style="color: #cc66cc;">1011</span>
   <span style="color: #339933;">------------</span>
   <span style="color: #208080;">0100</span> <span style="color: #cc66cc;">1110</span></pre></div></div>

<h2>NOT</h2>
<p>NOT-operasjonen er en måte å finne det motsatte på. Eller du kan gjerne si at du vil finne negasjonen av mønsteret.</p>
<p>Tar fortsatt utgangspunkt i samme tall som før. </p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">   ~<span style="color: #cc66cc;">1000</span> <span style="color: #208080;">0101</span>
   <span style="color: #339933;">------------</span>
   <span style="color: #208080;">0111</span> <span style="color: #cc66cc;">1010</span></pre></div></div>

<h2>LEFT SHIFT</h2>
<p>LEFT SHIFT-operasjonen flytter alle bit-verdiene ett hakk til venstre dersom noe annet ikke er gitt. Kan også flytte flere hakk til venstre dersom nødvendig.</p>
<p>Tar utgangspunkt i det første tallet gitt fra AND-operasjonen. </p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">   <span style="color: #cc66cc;">1000</span> <span style="color: #208080;">0101</span> <span style="color: #339933;">&lt;&lt;</span>
   <span style="color: #339933;">------------</span>
   <span style="color: #208080;">0000</span> <span style="color: #cc66cc;">1010</span>
&nbsp;
   <span style="color: #cc66cc;">1000</span> <span style="color: #208080;">0101</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #cc66cc;">2</span>
   <span style="color: #339933;">------------</span>
   <span style="color: #208080;">0001</span> <span style="color: #208080;">0100</span></pre></div></div>

<h2>RIGHT SHIFT</h2>
<p>Samme som forrige operasjon, bare motsatt vei. Altså til høyre.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">   <span style="color: #cc66cc;">1000</span> <span style="color: #208080;">0101</span> <span style="color: #339933;">&gt;&gt;</span>
   <span style="color: #339933;">------------</span>
   <span style="color: #208080;">0100</span> <span style="color: #208080;">0010</span>
&nbsp;
   <span style="color: #cc66cc;">1000</span> <span style="color: #208080;">0101</span> <span style="color: #339933;">&gt;&gt;</span> <span style="color: #cc66cc;">2</span>
   <span style="color: #339933;">------------</span>
   <span style="color: #208080;">0010</span> <span style="color: #208080;">0001</span></pre></div></div>

<h2>Noen ord til slutt</h2>
<p>Håper dette skriveriet kan hjelpe noen til å forstå hvordan man skal bruke bitwise-operasjoner. I alle fall hvordan de fungerer. Disse operasjonene har mange forskjellige bruksområder. For eksempel kan &#8220;shifting&#8221; brukes til å finne den mest signifikante biten i et mønster og således finne ut om verdien er negativ eller positiv. NOT kan f.eks brukes til å finne absoluttverdien av et negativt tall osv.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikaelb.net/2008/12/bitwise-operasjoner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tall datatyper i MySQL</title>
		<link>http://mikaelb.net/2008/12/tall-datatyper-i-mysql/</link>
		<comments>http://mikaelb.net/2008/12/tall-datatyper-i-mysql/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 17:33:35 +0000</pubDate>
		<dc:creator>Mikael Brevik</dc:creator>
				<category><![CDATA[Høynivåspråk]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[datatyper]]></category>
		<category><![CDATA[primitive datatyper]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://mikaelb.net/blogg/?p=31</guid>
		<description><![CDATA[I dag har jeg tenkt å gå litt på det banale, men som jeg ser mange er usikre på. Det er rett og slett kopiert direkte fra manualen til MySQL, men det er ikke sikkert alle som finner den eller er klare over det.
For enkelte er det kanskje ikke greit å vite hvilken INT-type man [...]]]></description>
			<content:encoded><![CDATA[<p>I dag har jeg tenkt å gå litt på det banale, men som jeg ser mange er usikre på. Det er rett og slett kopiert direkte fra manualen til MySQL, men det er ikke sikkert alle som finner den eller er klare over det.</p>
<p>For enkelte er det kanskje ikke greit å vite hvilken INT-type man skal ha til tider. Er det <code>TINYINT</code> jeg vil ha? Eler er det kanskje <code>SMALLINT</code>? Hvor går grensen, hvor store verdier?</p>
<p>I manuelen finner vi denne tabellen, som er en temmelig grei oversikt over hvor store verdier du kan ha på de forskjellige INT-typene</p>
<blockquote>
<table class="mceVisualAid" border="0">
<tbody>
<tr>
<td class="mceVisualAid"><span class="bold"><strong>Type</strong></span></td>
<td class="mceVisualAid"><span class="bold"><strong>Bytes</strong></span></td>
<td class="mceVisualAid"><span class="bold"><strong>Minimum Value</strong></span></td>
<td class="mceVisualAid"><span class="bold"><strong>Maximum Value</strong></span></td>
</tr>
<tr>
<td class="mceVisualAid"></td>
<td class="mceVisualAid"></td>
<td class="mceVisualAid"><span class="bold"><strong>(Signed/Unsigned)</strong></span></td>
<td class="mceVisualAid"><span class="bold"><strong>(Signed/Unsigned)</strong></span></td>
</tr>
<tr>
<td class="mceVisualAid"><code class="literal">TINYINT</code></td>
<td class="mceVisualAid">1</td>
<td class="mceVisualAid"><code class="literal">-128</code></td>
<td class="mceVisualAid"><code class="literal">127</code></td>
</tr>
<tr>
<td class="mceVisualAid"></td>
<td class="mceVisualAid"></td>
<td class="mceVisualAid"><code class="literal">0</code></td>
<td class="mceVisualAid"><code class="literal">255</code></td>
</tr>
<tr>
<td class="mceVisualAid"><code class="literal">SMALLINT</code></td>
<td class="mceVisualAid">2</td>
<td class="mceVisualAid"><code class="literal">-32768</code></td>
<td class="mceVisualAid"><code class="literal">32767</code></td>
</tr>
<tr>
<td class="mceVisualAid"></td>
<td class="mceVisualAid"></td>
<td class="mceVisualAid"><code class="literal">0</code></td>
<td class="mceVisualAid"><code class="literal">65535</code></td>
</tr>
<tr>
<td class="mceVisualAid"><code class="literal">MEDIUMINT</code></td>
<td class="mceVisualAid">3</td>
<td class="mceVisualAid"><code class="literal">-8388608</code></td>
<td class="mceVisualAid"><code class="literal">8388607</code></td>
</tr>
<tr>
<td class="mceVisualAid"></td>
<td class="mceVisualAid"></td>
<td class="mceVisualAid"><code class="literal">0</code></td>
<td class="mceVisualAid"><code class="literal">16777215</code></td>
</tr>
<tr>
<td class="mceVisualAid"><code class="literal">INT</code></td>
<td class="mceVisualAid">4</td>
<td class="mceVisualAid"><code class="literal">-2147483648</code></td>
<td class="mceVisualAid"><code class="literal">2147483647</code></td>
</tr>
<tr>
<td class="mceVisualAid"></td>
<td class="mceVisualAid"></td>
<td class="mceVisualAid"><code class="literal">0</code></td>
<td class="mceVisualAid"><code class="literal">4294967295</code></td>
</tr>
<tr>
<td class="mceVisualAid"><code class="literal">BIGINT</code></td>
<td class="mceVisualAid">8</td>
<td class="mceVisualAid"><code class="literal">-9223372036854775808</code></td>
<td class="mceVisualAid"><code class="literal">9223372036854775807</code></td>
</tr>
<tr>
<td class="mceVisualAid"></td>
<td class="mceVisualAid"></td>
<td class="mceVisualAid"><code class="literal">0</code></td>
<td class="mceVisualAid"><code class="literal">18446744073709551615</code></td>
</tr>
</tbody>
</table>
</blockquote>
<p>Dette gir en pekepinne på hvilken type man skal bruke på de forskjellige feltene når du lager en tabell. Det er ikke alt for mye optimalisering å hente på å sette feltene til lavest mulig, men som man sier: «Mange bekker små, gjør en stor å».</p>
]]></content:encoded>
			<wfw:commentRss>http://mikaelb.net/2008/12/tall-datatyper-i-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
