Forside til eksamensprojekt

Størrelse: px
Starte visningen fra side:

Download "Forside til eksamensprojekt"

Transkript

1 Forside til eksamensprojekt INGENIØR HØJSKOLEN KØBENHAVN OOPA/MGA-T- 401 Center for Videreuddannelse Lautrupvang 15, Indgang 19 B DK Ballerup Tlf: Fax: Mail: Sæt X i rubrikken under dit fag: Underviser: Jacob Nordfalk Eksamensform: Eksamensform kan ej vælges - er udelukkende individuel eksamen Enmandsprojekt: Q Gruppeprojekt Studienr: Navn: Lise Andreasen Studienr: Navn: Titel Android Disk Usage (ADU) Fortroligt Må anvendes i undervisningen X Dato: Den studerendes underskrift Den studerendes underskrift kun ved gruppeprojekt Afleveringsfrist: Projektet skal afleveres i 3 eksemplarer senest torsdag den 9. december 2010, mellem kl og kl i sekretariatet på CV, Lautrupvang, 19b, 1. sal, 2750 Ballerup Projekter modtages IKKE i ringbind eller brevordnere - kun i mindre tilbudsmapper eller med spiralryg af hensyn til videreforsendelse til vejleder og censor.

2 Indholdsfortegnelse Android Disk Usage (ADU)...3 Indledning / forord...3 Problemformulering...3 Afgrænsning...3 Selve analysen...4 Diagrammer...4 Programmering...14 DepthSetting...14 Splash...14 StartScreen...14 About...14 Help...15 AndroidFileBrowser...15 PresentTree...15 Andet...16 Hovedkonklusion...16 Kildetekster...17 assets/gettingstarted.html...17 res/drawable/judlogo.png...17 res/layout/about.xml...17 res/layout/afb_list_item.xml...17 res/layout/help2.xml...18 res/layout/start.xml...18 res/values/arrays.xml...18 res/values/colors.xml...19 res/values/strings.xml...19 res/values/styles.xml...19 res/sml/settings.xml...20 src/org/viewcreatetestactivity/afbadapter.java...20 src/org/viewcreatetestactivity/afboption.java...21 src/org/anddev/androidfilebrowser.java...21 src/org/jasonpratt/jdu/jdudirectory...23 src/org/jasonpratt/jdu/jdufile...24 src/org/jasonpratt/jdu/progressobserver.java...25 src/org/jasonpratt/jdu/tableview.java...26 src/org/me/aduapplication/about.java...28 src/org/me/aduapplication/depthsetting.xml...28 src/org/me/aduapplication/help.java...29 src/org/me/aduapplication/presenttree.java...29 src/org/me/aduapplication/splash.java...29 src/org/me/aduapplication/splashview.java...30 src/org/me/aduapplication/startscreen.java...31 AndroidManifest.xml

3 Android Disk Usage (ADU) Indledning / forord Blandt UNIX/Linux-folk er du en elsket kommando. Den giver hurtigt overblik over, hvor meget af disk-systemet, der allerede er brugt, og hvad der for alvor fylder. Der er grund til at tro, at Androidfolk kunne have tilsvarende behov (omend svaret jo nok altid vil være: det er mp3'er og videoer, der tager al pladsen). Problemformulering Skab et disk usage program, der passer til Android-miljøet, og kører korrekt. Nærmere bestemt: portér JDU 1, der er skabt i Java og kører i vindues-miljøer. Da JDU bl.a. benytter sig af mus, og har sine kommandoer fordelt i samme vindue, bliver en del af processen også at omskabe programmet til Android, der er præget af at have forskellige skærmbilleder til forskellige kommandoer. En fil-browser 2 bliver tilføjet, så den rigtige mappe kan findes, og siden tilføjes en hjælper 3, der kan lave en lidt pænere liste over mapper. Afgrænsning Fra starten af afgrænses to dele af JDU: at vise teksten i varierende størrelse, afhængig af mappens/filens størrelse, og at opdatere en progressbar, der giver vældig god mening i vindues-miljøer, men i Android enten skal droppes eller erstattes af Androids jeg arbejder mekanisme. Den oprindelige JDU blev først kraftigt beskåret, og siden blev et par klasser omdøbt. Således er JDUDirectory.java, JDUFile.java og PregressObserver.java stort set urørte i forhold til den oprindelige JDU, mens en del arbejde er foregået i TableView.java, der viser resultatet af at gennemsøge filsystemet. AfbAdapter.java og AfbOption.java er omdøbt og svagt modificeret

4 Selve analysen Diagrammer For at få lidt styr på, hvilket program jeg gerne vil lave, starter jeg med et diagram over de anvendte activities. Ud af dette kan jeg også regne ud, hvilke klasser jeg skal have i gang, der ligger bag den enkelte aktivitet. Samtidig kan jeg begynde at planlægge layouts og view. Android File Browser Present Tree Splash Start screen About Help Depth Setting AndroidFileBrowser har i sig et view, der kan erstattes af et nyt view. PresentTree er i samme situation. Derfor de 2 stiplede linjer. DepthSetting er en menu-aktivitet. Herefter planlægger jeg mine skærmbilleder. I det følgende vises skærmbilleder fra en version af programmet, det færdige program ser muligvis anderledes ud. 4

5 Uafhængigt af hvor man ellers er i programmet kan man vælge, hvilken dybde filsystemet skal vises med. Før vi går i gang, er der en splash-skærm. En enkelt mappe løber rundt på skærmen, afhængig af hvordan telefonen vender. Ved et enkelt tap kommer man videre til den egentlige startskærm. 5

6 Startskærmen skal have 3 knapper, der fører videre til hver sin nye aktivitet. Baggrundsfarven er tilpasset den blå, der senere bruges i præsentation af træet. Hjælpeskærmen træder ind foran startskærmen, og fortæller lidt om, hvordan programmet virker. Man bakker for at komme tilbage til start. 6

7 Tilsvarende fortæller About lidt om hvem der har lavet programmet. Nu er vi i gang. Vi bliver præsenteret for en liste af de mapper, der ligger i det øverste niveau af filsystemet. For hver mappe er der to muligheder: analysér denne mappe, og gå ned i denne mappe. Sidste mulighed bruges, når den mappe, der skal analyseres, ligger længere nede. 7

8 Her er der tappet på Enter /system, og den valgmulighed lyser op. Denne aktivitet genstarter nu, i /system i stedet for roden. Hvis der var blevet valgt Analyze, var vi gået videre til næste del. Her er vi i sidste trin, hvor usr er valgt som den øverste mappe, der skal analyseres, og i alt 4 niveauer vises. Hvis man fx tapper på config, bliver den den mappe, der vises yderste til venstre, og strukturen gentegnes. Hvis man er gået ned i træet, kan man komme op igen ved at tappe på den venstre mappe. Efter at have planlagt aktiviteter og skærmbilleder, går jeg i gang med klasser. Nedenstående skemaer er igen dannet efter programmeringen var gået i gang, og visse detaljer kan have ændret sig 8

9 inden det færdige program forelå. SensorEventListener View Sensorlytter + onsensorchanged(event) + onaccuracychanged(sensor, præcision) - int directorycolor - int tablebackgroundcolor - int textcolor - Paint textfont - int minfontsize int boundsx int boundsy int boundswidth int boundsheight int rectx int recty int rectwidth int rectheight SplashView Splash sview: SplashView sensormanager: SensorManager sensorlytter: Sensorlytter - oncreate(savedinstancestate) - onresume() - onpause() + boolean ontouchevent(e) + SplashView(context) + newcoords( pitch, roll ) + ondraw( g ) - paintdirectory( g, dir, depthleft, x, y, width, height ) - paintfile( g, f, x, y, width, height, rectcolor ) - paintlabel( g, name, size, x, y, width, height ) Activity For at starte godt, har vi en Splash. Udover at være en underklasse til Activity, har den også en SensorEventListener, der lægger mærke til hvordan telefonen vender. For at få tegnet noget på skærmen, er der også brug for SplashView, en underklasse til View. Den er meget i familie med TableView, og med lidt forsigtighed kunne der være noget med nedarvning fra en fælles overklasse. 9

10 Activity OnCLickListener Help StartScreen - oncreate(savedinstancestate) - oncreate(savedinstancestate) + onclick(v) About - oncreate(savedinstancestate) PreferenceActivity ListActivity DepthSetting - oncreate(savedinstancestate) + getdepth(context): int AndroidFileBrowser - DISPLAYMODE displaymode - ArrayList<String> directoryentries - File currentdirectory + oncreate(bundle icicle) - onrestoreinstancestate (Bundle icicle) - onsaveinstancestate(bundle icicle) - browsetoroot() - uponelevel() - browseto(adirectory) - fill(files) - onlistitemclick(l, v, position, id) 10

11 For at få det hele til at virke, skal der være nogle kedelige klasser: StartScreen, Help og About er der ikke så mange ben i. De er alle underklasser til Activity. 1 af dem implementerer desuden OnClickListener, så de kan fange klik: hvilken aktivitet går man videre til fra startskærmen, og hvilken dybde vælger man? DepthSetting er lidt spændende, fordi den er underklasse til PreferenceActivity og placerer information om dybden. AndroidFileBrowser er lånt andetsteds fra, og beskrives blot her. ArrayAdapter AfbOption - String name - String description AfbAdapter - ArrayList<AfbOption>: tests - LayoutInflater: minflater - int: layoutresource + getname(): String + setname(name) + getdescription(): String + setdescription(description) + AfbAdapter(Context context, int textviewresourceid, ArrayList<AfbOption> moptions) + getview(int position, View convertview, ViewGroup parent): View Senere vil jeg tale om, at jeg har brug for en adapter, der kan vise en liste over mapper. Jeg havde dog specielle behov, og var derfor også nødt til at låne en adapter, jeg kunne tilpasse. Ud af det kom der AfbOption (der kan indeholde den information, den enkelte linje i listen senere skal vise) og AfbAdapter. 11

12 JDUDirectory ProgressObserver - TreeSet subdirectories - TreeSet files + updatecurrentitem( itemname ) + needsupdate(): boolean + JDUDirectory(parent, dir, progressobserver) + getsubdirectories(): Set + getfiles(): Set - islink(file): boolean + refresh(progressobserver) + calculatesize() View JDUFile - JDUDirectory parent - File file - String name - long size - String sizestring - DecimalFormat sizeformatter + JDUFile( parent, file ) + JDUDirectory getparent() + File getfile() + String getname() + long getsize() + String getsizestring() + boolean equals( o ) + String tostring() Activity TableView - JDUDirectory root - int depth - int directorycolor - int filecolor - int tablebackgroundcolor - int tablebackgroundshadow - int tablebackgroundhighlight - int textcolor - Paint textfont - int minfontsize - HashMap areamap - HashSet listeners int boundsx int boundsy int boundswidth int boundsheight PresentTree + DEPTHCHOSEN: String + FILECHOSEN: String TableView tableview - oncreate(savedinstancestate) + boolean ontouchevent(e) + wasclicked(p) + TableView(context) + setroot( root ) + setdepth( depth ) + JDUFile getfileforlocation( p ) + ondraw( g ) - paintdirectory( g, dir, depthleft, x, y, width, height ) - paintfile( g, f, x, y, width, height, rectcolor ) - paintlabel( g, name, size, x, y, width, height ) 12

13 Nu kommer vi til de klasser, der faktisk laver alt arbejdet. Nogle klasser er overtaget stort set uændret: JDUDirectory, JDUFile og ProgressObserver, som allerede nævnt. (I praksis foretager ProgressObserver sig ikke noget længere, men det var lettere at beholde den, end at skulle skrive den ud af koden). Når JDUDirectory er klar, indeholder den data om filsystemet i et træ. Herefter omsætter TableView disse data til et view. Arbejdet med at tegne træet på skærmen foretages af metoderne paintdirectory(), paintfile() og paintlabel(). getfileforlocation() finder ud af hvilken mappe, der er blevet tappet på, og sætter derefter den rigtige handling i gang. ontouchevent() opfanger klik, og giver dem videre til wasclicked() (koden kunne effektiviseres her, ved at lægge de to metoder sammen). PresentTree modtager data om startmappe og dybde, sørger for at JDUDirectory bliver kaldt med disse parametre, og får siden TableView til at vise resultatet frem. Programmering DepthSetting En underklasse til PreferenceActivity. 3 muligheder præsenteres via settings.xml og arrays.xml. Her bruges metoder knyttet til menuer (addpreferencesfromresource(), getdefaultsharedpreferences()), så vi kan huske hvilken dybde, der blev valgt. I JDU valgte man dybde i en dropdown menu. Det vælger jeg ikke at gøre i ADU. Mest af alt fordi der ikke er behov for at kunne vælge helt op til dybde 8. Splash Denne første klasse er underklasse til Activity. Det mest interessante ved den er, at den har en SensorEventListener, der er sat op til at lytte efter, om telefonen vender og drejer. Hvis den gør det (og det gør den jo altid i en eller anden grad), vil denne information blive givet videre til SplashView. SplashView ligner den nedenfor nævnte TableView meget, og er faktisk en kannibaliseret version af samme. Med et tap kommer man videre til den rigtige startskærm. Metoden newcoords() ændrer på positionen af den kasse, der bliver tegnet på skærmen, og tegner den igen. (Lille problem lige nu: hører kun y-koordinaten?) StartScreen Denne klasse er underklasse til Activity, og implementerer OnClickListener, sidstnævnte så brugeren kan tappe på knapperne og vælge hvad der nu skal ske. Klassen indeholder en oncreate(), der via layout-filen start.xml viser 3 knapper frem og tilknytter en lytter til samme. onclick() opfanger klik, og gør noget passende afhængig af klikket. About Endnu en underklasse til Activity. En layout-fil, about2.xml, der fortæller noget om programmets oprindelse, vises. I manifestet er angivet, at denne fil vises som en dialog, dvs. henover 13

14 den bagvedliggende aktivitet, der gråes lidt ud, men ellers er synlig. Via et webview vises en htmlside. Help Gør tingene på næsten fuldstændig samme måde som About, via help.xml, dog uden webview. AndroidFileBrowser Her er tale om en underklasse til ListActivity, så der kan blive vist en liste, i dette tilfælde over mapper. oncreate() skulle gerne gemme hvilken mappe, man har fået bladet ned i, så det ikke gør noget, telefonen bliver vendt om. Dette virker i skrivende stund ikke endnu. Der er metoder, der tillader at man kan vandre rundt i filsystemet. Desuden vil metoden fill() danne en liste over de mapper, man kan se netop nu. Den bliver sandsynligvis kaldt mere end én gang undervejs. Den almindelige adapter egner sig rigtig godt til at få vist noget, der indeholder én variabel tekst pr. linje. Research viste, at hvis man skulle noget mere avanceret, skulle man tilsidesætte klassen ArrayAdapter, og lave sin egen. Jeg faldt på nettet over en adapter, der kunne det jeg havde brug for (den viste 2 tekster og 1 billede), og som kunne tilrettes mine formål. Det blev til AfbAdapter (der altså er en underklasse til ArrayAdapter) og AfbOption (der indeholder de data, en enkelt linje har brug for). Som jeg bruger AfbAdapter, lader jeg hver linje indeholde 2 stk. information, den ene ordet enten Analyze eller Enter, den anden stien til mappen. afb_list_item.xml viser en enkelt linje. onlistitemclick() er blevet væsentligt ændret. Oprindeligt skulle den blade frem til en fil, og så vise den. Jeg har brug for slet ikke at vise filer, blade frem til en mappe, og sende navnet på den videre. Desuden skal den kunne holde styr på, at hver mappe bliver vist 2 gange. Mappenavnet sendes videre via putextra(), der lader et Intent få ekstra information med. PresentTree Den sidste underklasse til Activity. Den gør ikke meget andet end at kalde TableView, og vise det resulterende View frem. Ganske kort: JDUDirectory afsøger filsystemet og skaber en datamodel af samme. Her er der behov for at skelne mellem JDUFile og JDUDirectory. Et JDUFile-objekt har et JDUDirectory som parent (en fil ligger i en mappe), mens et JDUDirectory bl.a. også har undermapper og filer. ProgressObserver er der stadig af historiske årsager, men bliver i praksis ikke brugt. TableView er ændret ganske meget, da den grafiske del er helt anderledes på Android. Der er tilføjet en ontouchevent(), for at fange tap (TableView havde en anden mekanisme til at opfange klik i vindues-miljøet). getfileforlocation() sammenligner koordinaterne med tappet med de tegnede kasser, for at finde den rigtige kasse og dermed den rigtige mappe at fokusere på fremover. ondraw() erstatter også en tidligere metode. Det er desuden her der måles på, hvor stort mit canvas er, så jeg senere kan bruge de mål, når alle kasserne skal tegnes. Så har der også været lidt roderi med, om rektangler måles på hvor bredde/høje de er, eller om der gives koordinater for nederste, højre hjørne. 14

15 Den del af koden, der tilpasser teksten til kasserne, springes helt over. Rigtig meget arbejde, der ikke beviser ret megen ny Android-viden. Andet Mit AndroidManifest.xml peger bl.a. på jdulogo.png som ikon for applikationen. Udover hvad man normalt arbejder med på Android (colors.xml, strings.xml) fulgte der en styles.xml med med afb_list_item.xml. Hovedkonklusion En af de forhindringer, der for alvor gav mig bryderier var: hvordan håndterer man et filsystem, der har symbolske links, og derfor i princippet kan have mapper i uendelig dybde? Det lykkedes ikke at finde mig en løsning, men til gengæld fandt jeg mange tegn på, at andre har haft samme problem. Metoden islink() var et af mine forsøg på at løse problemet. Andre ting har nok primært været svære, fordi, nå ja, nogle gange ser man ikke lige det, der er for næsen af en. Således er min splash-skærm ikke blevet helt færdig, fordi jeg ikke mestrer det at bruge sensorer, og jeg har en menu-skærm, der ikke vil komme frem som en menu. 15

16 Kildetekster assets/gettingstarted.html <html> <head> <title>adu Getting Started</title> </head> <body style="background color:#0089fa;"> <h1>the Absolute Basics:</h1> <blockquote> <font size=+1> <p> <b>1.</b> Click "Go!" to select a start directory. </p> <p> <b>2.</b> Wait while ADU scans the directories and files. </p> <p> <b>3.</b> Examine the resulting table, which shows how your disk space is being used <ul> <li>you can click on subdirectories to examine them in more detail, and you can click on the left most directory to expand your view one level</li> <li>if you are unhappy with the default depth of 3 (3 columns), choose menu to change it.</li> </ul> </p> <p> <b>4.</b> For more information, visit <a href="http://jasonpratt.org/software/jdu/">http://jasonpratt.org/software/jdu/</a></li> </p> </font> </blockquote> </body> </html> res/drawable/judlogo.png res/layout/about.xml <?xml version="1.0" encoding="utf 8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dip"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" /> </ScrollView> res/layout/afb_list_item.xml <?xml version="1.0" encoding="utf 8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingleft="8dip" android:paddingright="8dip" android:paddingtop="5dip" android:paddingbottom="8dip" android:orientation="horizontal" > 16

17 <TextView android:layout_width="100dip" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> res/layout/help2.xml <?xml version="1.0" encoding="utf 8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dip"> <WebView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" /> </ScrollView> res/layout/start.xml <?xml version="1.0" encoding="utf 8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent" android:layout_width="fill_parent" android:padding="30dip" android:orientation="horizontal"> <LinearLayout android:orientation="vertical" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_gravity="center"> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_gravity="center" android:layout_marginbottom="25dip" android:textsize="24.5sp" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout> res/values/arrays.xml <?xml version="1.0" encoding="utf 8"?> <resources> <string array name="listarray"> <item>2</item> <item>3</item> <item>4</item> </string array> <string array name="listvalues"> <item>2</item> <item>3</item> <item>4</item> </string array> </resources> 17

18 res/values/colors.xml <?xml version="1.0" encoding="utf 8"?> <resources> <color name="background">#ff0089fa</color> <color name="dirbackground">#ffb8d6ff</color> <color name="filebackground">#ffffe0c7</color> <color name="text">#ff000000</color> <color name="white">#fff</color> <color name="black">#000</color> <color name="red">#c6360a</color> <color name="green">#688f2b</color> <color name="orange">#f48905</color> <color name="dark_blue">#003366</color> <color name="grey">#888888</color> </resources> res/values/strings.xml <?xml version="1.0" encoding="utf 8"?> <!! Excerpted from "Hello, Android! 3e",! published by The Pragmatic Bookshelf.! Copyrights apply to this code. It may not be used to create training material,! courses, books, articles, and the like. Contact us if you are in doubt.! We make no guarantees that this code is fit for any purpose.! Visit for more book information. > <resources> <string name="app_name">adu</string> <string name="main_title">android Disk Usage</string> <string name="continue_label">continue</string> <string name="go_label">go!</string> <string name="about_label">about</string> <string name="help_label">help</string> <string name="depth_title">choose depth</string> <string name="depth_label">choose depth (tmp)</string> <string name="depth_text">the next step may take a few seconds</string> <string name="two_label">2</string> <string name="three_label">3</string> <string name="four_label">4</string> <string name="about_text">\ ADU: Android Disk Usage\nBased on JDU: Disk Usage, version 1.1, (C) 2001, Jason Pratt.\nAlso uses AndroidFileBrowser, and a special ArrayAdapter, android listview via listadapter/. Ported by Lise Andreasen. </string> <string name="help_text">\ The Absolute Basics:\n1. Click "Go!" to select a start directory. Then choose a depth.\n2. Wait while ADU scans the directories and files.\n3. Examine the resulting table, which shows how your disk space is being used\n you can click on subdirectories to examine them in more detail, and you can click on the left most directory to expand your view one level\n4. For more information, visit </string> <string name="up_one_level">..</string> <string name="current_dir">.</string> <string name="analyze_label">analyze</string> <string name="enter_label">enter</string> <string name="test_title">hello world</string> </resources> res/values/styles.xml <?xml version="1.0" encoding="utf 8"?> <! Styling file > <resources> <style name="listseparatortextviewstyle" <item name="android:layout_height">wrap_content</item> <item name="android:layout_width">fill_parent</item> <item name="android:textsize">15dip</item> <item name="android:paddingtop">2dip</item> <item name="android:paddingbottom">3dip</item> <item name="android:paddingleft">5dip</item> <item name="android:paddingright">10dip</item> <item <item name="android:shadowcolor">#111111</item> <item name="android:shadowradius">1</item> <item name="android:shadowdy">1</item> <item name="android:textstyle">bold</item> <item </style> 18

19 <style name="listviewstyle" <item </style> <style name="genericlistitemfirsttextview"> <item name="android:textsize">15dip</item> <item name="android:textstyle">bold</item> <item </style> <style name="genericlistitemsecondtextview"> <item name="android:textsize">13dip</item> <item </style> </resources> res/sml/settings.xml <?xml version="1.0" encoding="utf 8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <ListPreference android:key="listpref" android:title="adu depth" android:summary="choose the depth for the ADU presenter" /> </PreferenceScreen> src/org/viewcreatetestactivity/afbadapter.java package org.viewcreatetestactivity; import android.content.context; import android.util.log; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.arrayadapter; import android.widget.imageview; import android.widget.textview; import java.util.arraylist; import org.me.aduapplication.r; / Borrowed from android listview via listadapter/ / public class AfbAdapter extends ArrayAdapter<AfbOption> { private ArrayList<AfbOption> tests; private LayoutInflater minflater; private int layoutresource; public AfbAdapter(Context context, int textviewresourceid, ArrayList<org.ViewCreateTestActivity.AfbOption> moptions) { super(context, textviewresourceid, moptions); this.tests = moptions; this.minflater = LayoutInflater.from(context); this.layoutresource = textviewresourceid; public View getview(int position, View convertview, ViewGroup parent) { final ViewHolder holder; View v = convertview; if (v == null) { v = minflater.inflate(layoutresource, null); holder = new ViewHolder(); holder.firstline = (TextView) v.findviewbyid(r.id.directoryaction); holder.secondline = (TextView) v.findviewbyid(r.id.directoryname); v.settag(holder); else { // Get the ViewHolder back to get fast access to the TextView // and the ImageView. holder = (ViewHolder) v.gettag(); AfbOption c = tests.get(position); if (c!= null) { //loading first line holder.firstline.settext(c.getdescription()); holder.firstline.setvisibility(view.visible); //loading second line holder.secondline.settext(c.getname()); holder.secondline.setvisibility(view.visible); //todo create stringformatter return v; private static class ViewHolder { TextView firstline; TextView secondline; 19

20 src/org/viewcreatetestactivity/afboption.java package org.viewcreatetestactivity; / Borrowed from android listview via listadapter/ / public class AfbOption{ // 2 texts for a later ListActivity item private String name; private String description; public String getname() { return name; public void setname(string name) { this.name = name; public String getdescription() { return description; public void setdescription(string description) { this.description = description; src/org/anddev/androidfilebrowser.java / borrowed from Building an Android FileBrowser (list based)! (novice tutorial) / package org.anddev; import java.io.file; import java.io.ioexception; import java.util.arraylist; import android.app.listactivity; import android.content.intent; import android.os.bundle; // import android.util.log; import android.util.log; import android.view.view; import android.widget.listview; import java.util.collections; import java.util.logging.level; import java.util.logging.logger; import org.viewcreatetestactivity.afbadapter; import org.viewcreatetestactivity.afboption; import org.me.aduapplication.presenttree; import org.me.aduapplication.r; public class AndroidFileBrowser extends ListActivity { private enum DISPLAYMODE{ ABSOLUTE, RELATIVE; private final DISPLAYMODE displaymode = DISPLAYMODE.ABSOLUTE; private ArrayList<String> directoryentries = new ArrayList<String>(); private File currentdirectory; / Called when the activity is first created. / public void oncreate(bundle icicle) { super.oncreate(icicle); if (icicle == null) { currentdirectory = new File("/"); else { currentdirectory = (File) icicle.getserializable("currentdirectory"); // setcontentview() gets called within the next line, // so we do not need it here. browseto(currentdirectory); protected void onrestoreinstancestate (Bundle icicle) { // her genskabes indhold for alle views med id super.onrestoreinstancestate(icicle); protected void onsaveinstancestate(bundle icicle) { super.onsaveinstancestate(icicle); // gem indhold for alle views med id icicle.putserializable("currentdirectory", currentdirectory); 20

21 / This function browses up one level according to the field: currentdirectory / private void uponelevel(){ if(this.currentdirectory.getparent()!= null) this.browseto(this.currentdirectory.getparentfile()); private void browseto(final File adirectory){ AndroidFileBrowser.this.currentDirectory = adirectory; try { fill(adirectory.listfiles()); catch (IOException ex) { Logger.getLogger(AndroidFileBrowser.class.getName()).log(Level.SEVERE, null, ex); // create list of ittems, display them private void fill(file[] files) throws IOException { String tmpstring; this.directoryentries.clear(); ArrayList<AfbOption> m_options = null; // Add the "." and the ".." == 'Up one level' try { Thread.sleep(10); catch (InterruptedException e1) { this.directoryentries.add("."); if(this.currentdirectory.getparent()!= null) { this.directoryentries.add(".."); switch(this.displaymode){ case ABSOLUTE: for (File file : files){ if (file.isdirectory()) { this.directoryentries.add(file.getpath()); break; case RELATIVE: // On relative Mode, we have to add the current path to the beginning int currentpathstringlenght = this.currentdirectory.getabsolutepath().length(); for (File file : files){ if (file.isdirectory()) { tmpstring = file.getabsolutepath().substring(currentpathstringlenght); this.directoryentries.add(tmpstring); break; Collections.sort(directoryEntries); AfbAdapter directorylist; m_options = new ArrayList<AfbOption>(); AfbOption act_dir; int len = directoryentries.size(); for (int i = 0; i < len; ++i) { act_dir = new AfbOption(); act_dir.setname(directoryentries.get(i)); act_dir.setdescription("analyze"); m_options.add(act_dir); act_dir = new AfbOption(); act_dir.setname(directoryentries.get(i)); act_dir.setdescription("enter"); m_options.add(act_dir); // TODO deferred: list item same colors as rest of application directorylist = new AfbAdapter(this, R.layout.afb_list_item, m_options); this.setlistadapter(directorylist); // adapted to ADU protected void onlistitemclick(listview l, View v, int position, long id) { int selectionrowid = position / 2; int selectedaction = position % 2; // 0: analyze, 1: enter String selectedfilestring = this.directoryentries.get(selectionrowid); File clickedfile = null; if (! selectedfilestring.equals(".") &&!selectedfilestring.equals("..")){ switch(this.displaymode){ case RELATIVE: clickedfile = new File(this.currentDirectory.getAbsolutePath() + this.directoryentries.get(selectionrowid)); break; case ABSOLUTE: clickedfile = new File(this.directoryEntries.get(selectionRowID)); break; 21

22 if (selectedaction == 0) { // analyze Intent myintent; myintent = new Intent(AndroidFileBrowser.this, PresentTree.class); String mystring = ""; if (selectedfilestring.equals(".")) { //. mystring = selectedfilestring; else if(selectedfilestring.equals("..")){ //.. if(this.currentdirectory.getparent()!= null) { mystring = this.currentdirectory.getparentfile().getabsolutepath(); else { mystring = this.currentdirectory.getabsolutepath(); else { // not. not.. if(clickedfile!= null) { mystring = clickedfile.getabsolutepath(); myintent.putextra(presenttree.filechosen, mystring); startactivity(myintent); else { // enter if (selectedfilestring.equals(".")) { //. // Refresh this.browseto(this.currentdirectory); else if(selectedfilestring.equals("..")){ //.. this.uponelevel(); else { // not. not.. this.browseto(clickedfile); src/org/jasonpratt/jdu/jdudirectory / JDU: Disk Usage Copyright (c) Jason Pratt Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. / package org.jasonpratt.jdu; import android.util.log; import java.io.file; import java.io.ioexception; Jason Pratt / public class JDUDirectory extends JDUFile { protected java.util.comparator filecomparator = new java.util.comparator() { public int compare( Object o1, Object o2 ) { if( (o1 instanceof JDUFile) && (o2 instanceof JDUFile) ) { long size1 = ((JDUFile)o1).getSize(); long size2 = ((JDUFile)o2).getSize(); if( size1 < size2 ) { return 1; else if( size1 > size2 ) { return 1; else { return 0; return 0; // if it's not a File, don't bother ; protected java.util.treeset subdirectories = new java.util.treeset( filecomparator ); protected java.util.treeset files = new java.util.treeset( filecomparator ); public JDUDirectory( JDUDirectory parent, java.io.file dir, ProgressObserver progressobserver ) { super( parent, dir ); refresh( progressobserver ); 22

23 public java.util.set getsubdirectories() { return subdirectories; public java.util.set getfiles() { return files; // TODO problem if start directory is / /proc /sdcard /sys / borrowed from / private static boolean islink(file file) { try { if (!file.exists()) return true; else { String cnnpath = file.getcanonicalpath(); String abspath = file.getabsolutepath(); return!abspath.equals(cnnpath); catch(ioexception ex) { System.err.println(ex); return true; //islink synchronized public void refresh( ProgressObserver progressobserver ) { if( (progressobserver!= null) && progressobserver.needsupdate() ) { progressobserver.updatecurrentitem( getfile().getabsolutepath() ); java.io.file dir = getfile(); subdirectories.clear(); files.clear(); java.io.file[] children = dir.listfiles(); if( children!= null ) { for( int i = 0; i < children.length; i++ ) { // if (!islink(children[i])) { if( children[i].isdirectory() ) { subdirectories.add( new JDUDirectory( this, children[i], progressobserver ) ); else { // not a directory if( children[i].isfile() ) { files.add( new JDUFile( this, children[i] ) ); else { System.err.println( "Not a directory or a file: " + children[i].getabsolutepath() ); // isfile // //!islink if( (progressobserver!= null) && progressobserver.needsupdate() ) { progressobserver.updatecurrentitem( getfile().getabsolutepath() ); calculatesize(); public void calculatesize() { size = 0; for( java.util.iterator iter = subdirectories.iterator(); iter.hasnext(); ) { JDUDirectory d = (JDUDirectory)iter.next(); size += d.getsize(); for( java.util.iterator iter = files.iterator(); iter.hasnext(); ) { JDUFile f = (JDUFile)iter.next(); size += f.getsize(); src/org/jasonpratt/jdu/jdufile / JDU: Disk Usage Copyright (c) Jason Pratt Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23

24 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. / package org.jasonpratt.jdu; Jason Pratt / public class JDUFile { protected JDUDirectory parent; protected java.io.file file; protected String name; protected long size = 1; protected String sizestring; protected java.text.decimalformat sizeformatter = new java.text.decimalformat( "#0.00" ); public JDUFile( JDUDirectory parent, java.io.file file ) { this.parent = parent; this.file = file; if( file!= null ) { this.name = file.getname(); this.size = file.length(); public JDUDirectory getparent() { return parent; public java.io.file getfile() { return file; public String getname() { if( name == null ) { // delayed lookup name = file.getname(); return name; public long getsize() { if( size == 1 ) { // delayed lookup size = file.length(); return size; public String getsizestring() { if( sizestring == null ) { // create on demand getsize(); // ensure size is up to date if( size < 1024 ) { sizestring = sizeformatter.format( size ) + " bytes"; else if( size < 1024L1024L ) { sizestring = sizeformatter.format( ((double)size)/((double)1024) ) + " KB"; else if( size < 1024L1024L1024L ) { sizestring = sizeformatter.format( ((double)size)/((double)1024l1024l) ) + " MB"; else if( size < 1024L1024L1024L1024L ) { sizestring = sizeformatter.format( ((double)size)/((double)1024l1024l1024l) ) + " GB"; else { sizestring = sizeformatter.format( ((double)size)/((double)1024l1024l1024l1024l) ) + " TB"; return sizestring; public boolean equals( Object o ) { if( o instanceof JDUFile ) { return ((JDUFile)o).getFile().equals( file ); else { return file.equals( o ); public String tostring() { if( file == null ) { return "null"; else { return file.getabsolutepath(); src/org/jasonpratt/jdu/progressobserver.java / JDU: Disk Usage Copyright (c) Jason Pratt Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), 24

25 to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. / package org.jasonpratt.jdu; Jason Pratt / public interface ProgressObserver { public void updatecurrentitem( String itemname ); public boolean needsupdate(); src/org/jasonpratt/jdu/tableview.java / JDU: Disk Usage Copyright (c) Jason Pratt Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. / package org.jasonpratt.jdu; import android.content.context; import android.graphics.canvas; import android.graphics.color; import android.graphics.paint; import android.graphics.point; import android.graphics.rect; import android.graphics.typeface; // import android.util.log; import android.view.motionevent; import android.view.view; Jason Pratt / public class TableView extends View { // private static final long serialversionuid = L; protected JDUDirectory root; protected int depth = 3; protected int directorycolor = Color.argb(255, 200, 230, 255 ); protected int filecolor = Color.argb(255, 255, 240, 215 ); protected int tablebackgroundcolor = Color.argb(255, 96, 96, 96 ); protected int tablebackgroundshadow = Color.argb(255, 32, 32, 32 ); protected int tablebackgroundhighlight = Color.argb(255, 196, 196, 196 ); protected int textcolor = Color.argb(255, 0, 0, 0); protected Paint textfont = new Paint(); // "SansSerif", Font.PLAIN, 14 ); protected int minfontsize = 4; protected java.util.hashmap areamap = new java.util.hashmap(); protected java.util.hashset listeners = new java.util.hashset(); protected int boundsx, boundsy, boundswidth, boundsheight; public boolean ontouchevent(motionevent e) { if (e.getaction() == MotionEvent.ACTION_DOWN) { Point p = new Point(1, 2); p.x = (int) e.getx(); p.y = (int) e.gety(); this.wasclicked(p); return true; 25

26 public void wasclicked(point p) { JDUFile f = getfileforlocation( p ); if( f instanceof JDUDirectory ) { JDUDirectory d = (JDUDirectory)f; if( TableView.this.root == d ) { if( d.getparent()!= null ) { TableView.this.setRoot( d.getparent() ); invalidate(); else { TableView.this.setRoot( d ); invalidate(); ////////////////// // Constructor ////////////////// public TableView(Context context) { super(context); setbackgroundcolor(tablebackgroundcolor); ////////////// // utility ////////////// public void setroot( JDUDirectory root ) { JDUDirectory oldroot = this.root; this.root = root; //firerootchanged( oldroot, root ); invalidate(); public void setdepth( int depth ) { this.depth = depth; invalidate(); public JDUFile getfileforlocation( Point p ) { // relate click to directory if( (p.x >= boundsx) && (p.x < boundswidth+boundsx) && (p.y >= boundsy) && (p.y < boundsheight+boundsy) ) { for( java.util.iterator iter = areamap.keyset().iterator(); iter.hasnext(); ) { // could be done more efficiently Rect bounds = (Rect)iter.next(); if( bounds.contains( p.x + boundsx, p.y + boundsy) ) { Object o = areamap.get( bounds ); if( o instanceof JDUFile ) { return (JDUFile)o; else { return null; return null; //////////////// // Painting //////////////// public void ondraw( Canvas g ) { super.ondraw(g); if( (root!= null) && (depth > 0) ) { areamap.clear(); boundsx = this.getleft(); boundsy = this.gettop(); boundswidth = this.getright() boundsx; boundsheight = this.getbottom() boundsy; paintdirectory( g, root, depth, boundsx, boundsy, boundswidth, boundsheight ); //paintdirectory( g, root, depth, bounds.x, bounds.y, bounds.width, bounds.height ); protected void paintdirectory( Canvas g, JDUDirectory dir, int depthleft, int x, int y, int width, int height ) { if( (width > 1) && (height > 1) ) { // TODO if painting dir with no subdirs... int columnwidth = width/depthleft; Paint rectcolor = new Paint(); rectcolor.setcolor(directorycolor); paintfile( g, dir, x, y, columnwidth, height, rectcolor ); areamap.put( new Rect( x, y, x + columnwidth, y + height ), dir ); if( depthleft > 1 ) { int subx = x + columnwidth; int suby = y; int subwidth = width columnwidth; 26

27 for( java.util.iterator iter = dir.getsubdirectories().iterator(); iter.hasnext(); ) { JDUDirectory subdir = (JDUDirectory)iter.next(); long subheight = ((long)heightsubdir.getsize())/dir.getsize(); if( subheight < 2 ) { break; paintdirectory( g, subdir, depthleft 1, subx, suby, subwidth, (int)subheight ); suby += subheight; for( java.util.iterator iter = dir.getfiles().iterator(); iter.hasnext(); ) { JDUFile subfile = (JDUFile)iter.next(); long subheight = ((long)heightsubfile.getsize())/dir.getsize(); if( subheight < 2 ) { break; rectcolor.setcolor(filecolor); paintfile( g, subfile, subx, suby, subwidth/(depthleft 1), (int)subheight, rectcolor ); areamap.put( new Rect( subx, suby, x + subwidth/(depthleft 1), y + (int)subheight ), subfile ); suby += subheight; protected void paintfile( Canvas g, JDUFile f, int x, int y, int width, int height, Paint rectcolor ) { if( (width > 1) && (height > 1) ) { Paint edgecolor = new Paint(); edgecolor.setcolor(textcolor); // text and edge should be same color g.drawrect(x, y, x+width, y+height, edgecolor); g.drawrect(x, y, x+width 1, y+height 1, rectcolor); if( height >= 14 ) { String namestring = f.getname(); if( namestring.trim().equals( "" ) ) { namestring = f.getfile().getabsolutepath(); String sizestring = f.getsizestring(); paintlabel( g, namestring, sizestring, x + 3, y + 15, width 40, height 2 ); protected void paintlabel( Canvas g, String name, String size, int x, int y, int width, int height ) { Paint lettercolor = new Paint(); lettercolor.setcolor(textcolor); lettercolor.settypeface(typeface.sans_serif); lettercolor.settextsize(10); / TODO deferred: fit text Used to be stuff here that fitted the text to the window / g.drawtext(name + " " + size, x, y, lettercolor); src/org/me/aduapplication/about.java package org.me.aduapplication; import android.app.activity; import android.os.bundle; public class About extends Activity { protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.about); src/org/me/aduapplication/depthsetting.xml package org.me.aduapplication; import android.content.context; import android.os.bundle; import android.preference.preferenceactivity; import android.preference.preferencemanager; // TODO why doesn't this activity appear, when I press the menu button? public class DepthSetting extends PreferenceActivity { protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); addpreferencesfromresource(r.xml.settings); 27

28 / Get the current value of the depth option / public static int getdepth(context context) { return Integer.parseInt(PreferenceManager.getDefaultSharedPreferences(context).getString("listPref", "3")); src/org/me/aduapplication/help.java package org.me.aduapplication; import android.app.activity; import android.os.bundle; import android.webkit.webview; public class Help extends Activity { private WebView webview; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.help2); webview = (WebView) findviewbyid(r.id.web_view); webview.loadurl("file:///android_asset/gettingstarted.html"); src/org/me/aduapplication/presenttree.java package org.me.aduapplication; import android.app.activity; import android.os.bundle; // import android.util.log; import java.io.file; import org.jasonpratt.jdu.jdudirectory; import org.jasonpratt.jdu.tableview; public class PresentTree extends Activity { public static final String FILECHOSEN = "org.me.aduapplication.file" ; public static final String DEPTHCHOSEN = "org.me.aduapplication.depth" ; TableView tableview; / Called when the activity is first created. / public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); //create model of file system String filechosen = getintent().getstringextra(filechosen); JDUDirectory myjdu = new JDUDirectory( null, new File(fileChosen), null ); // create picture of model tableview = new TableView(this); int depthchosen = 3; depthchosen = DepthSetting.getDepth(this); // depthchosen = getintent().getintextra(depthchosen, 2); tableview.setdepth(depthchosen); tableview.setroot( myjdu ); setcontentview(tableview); src/org/me/aduapplication/splash.java package org.me.aduapplication; import android.app.activity; import android.os.bundle; // import android.view.view; import android.util.log; import android.hardware.sensor; import android.hardware.sensorevent; import android.hardware.sensoreventlistener; import android.hardware.sensormanager; public class Splash extends Activity { SplashView sview; SensorManager sensormanager; Sensorlytter sensorlytter = new Sensorlytter(); 28

29 / Called when the activity is first created. / public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); sview = new SplashView(this); setcontentview(sview); protected void onresume() { super.onresume(); sensormanager = (SensorManager) getsystemservice(sensor_service); sview = new SplashView(this); setcontentview(sview); for (Sensor sensor : sensormanager.getsensorlist(sensor.type_all)) { sensormanager.registerlistener(sensorlytter, sensor, SensorManager.SENSOR_DELAY_NORMAL); protected void onpause() { super.onpause(); sensormanager.unregisterlistener(sensorlytter); class Sensorlytter implements SensorEventListener { public void onsensorchanged(sensorevent event) { int sensortype = event.sensor.gettype(); if (sensortype == Sensor.TYPE_ORIENTATION) { sview.newcoords(event.values[1],event.values[2]); public void onaccuracychanged(sensor sensor, int præcision) { // ignorér men vi er nødt til at have metoden for at implementere interfaces ; // Sensorlytter slut src/org/me/aduapplication/splashview.java package org.me.aduapplication; import android.content.context; import android.content.intent; import android.graphics.canvas; import android.graphics.color; import android.graphics.paint; // import android.graphics.point; import android.graphics.rect; import android.graphics.typeface; import android.util.log; import android.view.motionevent; import android.view.view; public class SplashView extends View { protected int directorycolor = Color.argb(255, 200, 230, 255 ); protected int tablebackgroundcolor = Color.argb(255, 96, 96, 96 ); protected int textcolor = Color.argb(255, 0, 0, 0); protected int headingcolor = Color.argb(255, 255, 0, 0); protected Paint textfont = new Paint(); // "SansSerif", Font.PLAIN, 14 ); int boundsx, boundsy, boundswidth, boundsheight; int rectx, recty, rectwidth, rectheight; public boolean ontouchevent(motionevent e) { if (e.getaction() == MotionEvent.ACTION_DOWN) { Intent i = new Intent(getContext(), StartScreen.class); getcontext().startactivity(i); return true; ////////////////// // Constructor ////////////////// public SplashView(Context context) { super(context); setbackgroundcolor(tablebackgroundcolor); rectx = 1; //////////////// // Moving //////////////// 29

Gode praksisser og arkitekturer i Android-programmering. Android - praksisser og arkitekturer Copyright Lund & Bendsen A/S

Gode praksisser og arkitekturer i Android-programmering. Android - praksisser og arkitekturer Copyright Lund & Bendsen A/S Gode praksisser og arkitekturer i Android-programmering 1 Om oplægsholderen Jacob Nordfalk nordfalk@lundogbendsen.dk Instruktør for Lund&Bendsen Ekstern lektor på IHK Underviser i Java SE, Java EE, Webserverprogrammering,

Læs mere

EuroForm OCR-B Installation Guide

EuroForm OCR-B Installation Guide EuroForm OCR-B Installation Guide Dansk For HP LaserJet Printers Installation Guide NOTE The information contained in this document is subject to change without notice. EuroForm makes no warranty of any

Læs mere

Vejledning til at tjekke om du har sat manuel IP på din computer.

Vejledning til at tjekke om du har sat manuel IP på din computer. Indhold Vejledning til at, komme på nettet. (DANSK)... 2 Gælder alle systemer.... 2 Vejledning til at tjekke om du har sat manuel IP på din computer.... 2 Windows 7... 2 Windows Vista... 2 Windows XP...

Læs mere

how to save excel as pdf

how to save excel as pdf 1 how to save excel as pdf This guide will show you how to save your Excel workbook as PDF files. Before you do so, you may want to copy several sheets from several documents into one document. To do so,

Læs mere

RentCalC V2.0. 2012 Soft-Solutions

RentCalC V2.0. 2012 Soft-Solutions Udlejnings software Vores udvikling er ikke stoppet!! by Soft-Solutions RentCalC, som er danmarks ubetinget bedste udlejnings software, kan hjælpe dig med på en hurtigt og simple måde, at holde styr på

Læs mere

Transformering af OIOXML til OIOUBL og OIOUBL til OIOXML

Transformering af OIOXML til OIOUBL og OIOUBL til OIOXML Microsoft Development Center Copenhagen, July 2010 OIOXML / OIOUBL Microsoft Dynamics C5 Transformering af OIOXML til OIOUBL og OIOUBL til OIOXML Indledning Indledning... 3 Anvendelse af værktøjet... 3

Læs mere

Backup Applikation. Microsoft Dynamics C5 Version 2008. Sikkerhedskopiering

Backup Applikation. Microsoft Dynamics C5 Version 2008. Sikkerhedskopiering Backup Applikation Microsoft Dynamics C5 Version 2008 Sikkerhedskopiering Indhold Sikkerhedskopiering... 3 Hvad bliver sikkerhedskopieret... 3 Microsoft Dynamics C5 Native database... 3 Microsoft SQL Server

Læs mere

Terese B. Thomsen 1.semester Formidling, projektarbejde og webdesign ITU DMD d. 02/11-2012

Terese B. Thomsen 1.semester Formidling, projektarbejde og webdesign ITU DMD d. 02/11-2012 Server side Programming Wedesign Forelæsning #8 Recap PHP 1. Development Concept Design Coding Testing 2. Social Media Sharing, Images, Videos, Location etc Integrates with your websites 3. Widgets extend

Læs mere

Overfør fritvalgskonto til pension

Overfør fritvalgskonto til pension Microsoft Development Center Copenhagen, January 2009 Løn Microsoft Dynamics C52008 SP1 Overfør fritvalgskonto til pension Contents Ønsker man at overføre fritvalgskonto til Pension... 3 Brug af lønart

Læs mere

Webshop integration for DanDomain

Webshop integration for DanDomain Microsoft Development Center Copenhagen, December 2009 Factsheet F Microsoft Dynamics C5 2010 Webshop integration for DanDomain Indholdsfortegnelse Indledning... 3 Eksport af varer til webshoppen... 4

Læs mere

Android 2.x CodeJam. Android CodeJam 2.x Copyright Lund & Bendsen A/S

Android 2.x CodeJam. Android CodeJam 2.x Copyright Lund & Bendsen A/S Velkommen Android 2.x CodeJam 1 Om oplægsholderen Jacob Nordfalk nordfalk@lundogbendsen.dk Instruktør for Lund&Bendsen Ekstern lektor på IHK Underviser i Java SE, Java EE, Webserverprogrammering, OOAD,

Læs mere

Introduktion til ActionScript, fortsat

Introduktion til ActionScript, fortsat Introduktion til ActionScript, fortsat Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling

Læs mere

Microsoft Dynamics C5. Nyheder Kreditorbetalinger

Microsoft Dynamics C5. Nyheder Kreditorbetalinger Microsoft Dynamics C5 Nyheder Kreditorbetalinger INDHOLDSFORTEGNELSE Indledning... 3 Uddybning af ændringer... 4 Forbedring vedr. betalings-id er... 4 Ændringer i betalingsmåder (kreditorbetalinger)...

Læs mere

Microsoft Dynamics C5. Nyheder i 2012 Hotfix 001 Version 4.4.00.001

Microsoft Dynamics C5. Nyheder i 2012 Hotfix 001 Version 4.4.00.001 Microsoft Dynamics C5 Nyheder i 2012 Hotfix 001 Version 4.4.00.001 INDHOLDSFORTEGNELSE Anvendelse af aktionslister... 3 Kopiering af aktionslister... 4 Aktionsliste oversigt... 4 XML Udbakke... 5 Microsoft

Læs mere

Umiddelbare kommentarer til Erhvervsministerens redegørelse vedr. CIBOR 27/9-2012 Krull, Lars

Umiddelbare kommentarer til Erhvervsministerens redegørelse vedr. CIBOR 27/9-2012 Krull, Lars Aalborg Universitet Umiddelbare kommentarer til Erhvervsministerens redegørelse vedr. CIBOR 27/9-2012 Krull, Lars Publication date: 2012 Document Version Pre-print (ofte en tidlig version) Link to publication

Læs mere

Hvor er mine runde hjørner?

Hvor er mine runde hjørner? Hvor er mine runde hjørner? Ofte møder vi fortvivlelse blandt kunder, når de ser deres nye flotte site i deres browser og indser, at det ser anderledes ud, i forhold til det design, de godkendte i starten

Læs mere

Userguide. NN Markedsdata. for. Microsoft Dynamics CRM 2011. v. 1.0

Userguide. NN Markedsdata. for. Microsoft Dynamics CRM 2011. v. 1.0 Userguide NN Markedsdata for Microsoft Dynamics CRM 2011 v. 1.0 NN Markedsdata www. Introduction Navne & Numre Web Services for Microsoft Dynamics CRM hereafter termed NN-DynCRM enable integration to Microsoft

Læs mere

GUIDE TIL OPRETTELSE AF SIDER OG INDHOLD I UMBRACO ONLINE BETJENING

GUIDE TIL OPRETTELSE AF SIDER OG INDHOLD I UMBRACO ONLINE BETJENING GUIDE TIL OPRETTELSE AF SIDER OG INDHOLD I UMBRACO ONLINE BETJENING DANSKE BEDEMÆND august 2014 v1.4 1 P a g e INDHOLDSFORTEGNELSE Adgang... 3 Overordnet om Umbraco... 4 Højreklik muligheder i oversigten...

Læs mere

Factsheet. Microsoft Dynamics C5 Version 2008. eindkomst

Factsheet. Microsoft Dynamics C5 Version 2008. eindkomst Factsheet Microsoft Dynamics C5 Version 2008 eindkomst Indholdsfortegnelse Indledning... 3 Opsætning inden ibrugtagning... 3 Dan fil til eindkomst... 4 2 FACTSHEET EINDKOMST FOR MICROSOFT DYNAMICS C5 VERSION

Læs mere

Microsoft Dynamics C5. Privat hotfix vedr. Timer indberettet i felt 200

Microsoft Dynamics C5. Privat hotfix vedr. Timer indberettet i felt 200 Microsoft Dynamics C5 Privat hotfix vedr. Timer indberettet i felt 200 INDHOLDSFORTEGNELSE En forløbelig afklaring... 3 Tilpasning af lønopsætningen... 3 Rettelser til kommafil... 3 Backup af lønopsætningen...

Læs mere

% &$ # '$ ## () %! #! & # &, # / # 0&. ) 123 45 / & #& #

% &$ # '$ ## () %! #! & # &, # / # 0&. ) 123 45 / & #& # !"$!!"$ % &$ '$ () %! %"!" & * function &+! & &, --.& / 0&. ) 123 45 / & & & 6 Sub CalcVecProduct() * &3.5 & 2 &6 / 7$ & & & "%&$&"! 2 " $ " 8 $ & $/ $ $" 9&6 Sub test() streng_y = "det her går " streng_y

Læs mere

Microsoft Dynamics C5 2012 Service pack 2. Vejledning i forbindelse med ændring af Momsloven pr. 1.7.2014

Microsoft Dynamics C5 2012 Service pack 2. Vejledning i forbindelse med ændring af Momsloven pr. 1.7.2014 Vejledning i forbindelse med ændring af Momsloven pr. 1.7.2014 Microsoft Dynamics C5 2012 Service pack 2 Juni 2014 Indholdsfortegnelse Introduktion 3 Opsætning i C5 3 Som sælger: 3 Som køber: 6 OIOUBL

Læs mere

Aalborg Universitet. Banker i Danmark pr. 22/3-2012 Krull, Lars. Publication date: 2012. Document Version Pre-print (ofte en tidlig version)

Aalborg Universitet. Banker i Danmark pr. 22/3-2012 Krull, Lars. Publication date: 2012. Document Version Pre-print (ofte en tidlig version) Aalborg Universitet Banker i Danmark pr. 22/3-2012 Krull, Lars Publication date: 2012 Document Version Pre-print (ofte en tidlig version) Link to publication from Aalborg University Citation for published

Læs mere

Nyhedsbrev løn. Microsoft Dynamics C5 2012 Service pack 1 Hotfix 5 & 2010 Service pack 2 Hotfix 3. Ferie 2014

Nyhedsbrev løn. Microsoft Dynamics C5 2012 Service pack 1 Hotfix 5 & 2010 Service pack 2 Hotfix 3. Ferie 2014 Microsoft Dynamics C5 2012 Service pack 1 Hotfix 5 & 2010 Service pack 2 Hotfix 3 Ferie 2014 Marts 2014 Contents Overførsel af ferieoplysninger pr. 01/05-2014 3 Overførsel af feriepenge på fratrådte funktionærer

Læs mere

Opsætning af Backup. Hvis programmet registreres korrekt vises nedenstående skærmbillede. Genstart herefter programmet.

Opsætning af Backup. Hvis programmet registreres korrekt vises nedenstående skærmbillede. Genstart herefter programmet. Opsætning af Backup Dette er en guide til opsætning af backup med Octopus File Synchronizer. Det første der skal ske er, at programmet skal registreres (programmet kan dog bruges i 30 dage, hvis det ikke

Læs mere

Morten Juul Nielsen Produktchef Microsoft Danmark

Morten Juul Nielsen Produktchef Microsoft Danmark Morten Juul Nielsen Produktchef Microsoft Danmark Er du, din organisation og dit datacenter klar til Skyen? Dynamisk Datacenter & Cloud Computing System Center Suiten med fokus på Service Manager Next

Læs mere

Installation af Oracle 10g Release 2 database

Installation af Oracle 10g Release 2 database Installation af Oracle 10g Release 2 database Oracle 10g database indeholder databasesoftware, enterprise manager, SQL*Plus m.m., HTML DB (i dag kendt som Application Express) og tilhørende HTTP Server

Læs mere

QUICK START Updated: 18. Febr. 2014

QUICK START Updated: 18. Febr. 2014 QUICK START Updated: 18. Febr. 2014 For at komme hurtigt og godt igang med dine nye Webstech produkter, anbefales at du downloader den senest opdaterede QuickStart fra vores hjemmeside: In order to get

Læs mere

Web Admin 5.5. Brugsvejledning for Domain admin. Copyright 2003 Gullestrup.net

Web Admin 5.5. Brugsvejledning for Domain admin. Copyright 2003 Gullestrup.net Web Admin 5.5 Copyright 2003 Gullestrup.net Log ind på systemet Start med at gå ind på http://mailadmin.gullestrup.net i din browser. Indtast din Email Adresse samt Password, som du tidligere har modtaget

Læs mere

Citation for published version (APA): Kirkeskov, J. (2012). Mangelfuld radonsikring kan koste dyrt. Byggeriet, 10(2), 32-32.

Citation for published version (APA): Kirkeskov, J. (2012). Mangelfuld radonsikring kan koste dyrt. Byggeriet, 10(2), 32-32. Aalborg Universitet Mangelfuld radonsikring kan koste dyrt Kirkeskov, Jesper Published in: Byggeriet Publication date: 2012 Document Version Forfatters version (ofte kendt som postprint) Link to publication

Læs mere

Google App Engine. Google App Engine som platform. Claus Myglegaard Vagner og Jacob von Eyben

Google App Engine. Google App Engine som platform. Claus Myglegaard Vagner og Jacob von Eyben GoogleAppEngine GoogleAppEnginesomplatform ClausMyglegaardVagnerogJacobvonEyben Abstract CloudcomputingerenteknologidervinderfremidengenerelleITinfrastruktur. SocialemediersåsomLinkedIn,TwitterogFacebookharøgetbehovetfor

Læs mere

Microsoft Development Center Copenhagen, December 2009. Factsheet. Microsoft Dynamics C5 2010. Web Services

Microsoft Development Center Copenhagen, December 2009. Factsheet. Microsoft Dynamics C5 2010. Web Services Microsoft Development Center Copenhagen, December 2009 Factsheet Microsoft Dynamics C5 2010 Web Services Indhold Indledning... 3 Integration til Krak... 4 Krak på debitor og kreditor... 4 Krak på løn...

Læs mere

TimeStamper Guide til fejlretning

TimeStamper Guide til fejlretning TimeStamper Guide til fejlretning for version 2.01 Copyright 2002-2013 www.timestamper.dk LICENSVEJLEDNING ver A09.doc ANSVARSFRASKRIVELSE: I ingen tilfælde skal udvikleren og/eller dets respektive leverandører

Læs mere

Video obligatorisk øvelse

Video obligatorisk øvelse Video obligatorisk øvelse Denne obligatoriske øvelse går ud på at bearbejde en video og lægge den ud på jeres hjemmeside. Arbejdet med videoen laves i Windows Movie Maker, der findes i start-menuen under

Læs mere

Databaseadgang fra Java

Databaseadgang fra Java Databaseadgang fra Java Grundlæggende Programmering med Projekt Peter Sestoft Fredag 2007-11-23 Relationsdatabasesystemer Der er mange databaseservere Microsoft Access del af Microsoft Office MySQL god,

Læs mere

WT-1011RC Programmer User Guide

WT-1011RC Programmer User Guide WT-1011RC Programmer User Guide Firmware Version 1.9 Note: 1. Information in this manual is subject to change without notice and does not represent a commitment of manufacturer. 2. Manufacturer shall not

Læs mere

www.cfufilmogtv.dk Tema: Pets Fag: Engelsk Målgruppe: 4. klasse Titel: Me and my pet Vejledning Lærer

www.cfufilmogtv.dk Tema: Pets Fag: Engelsk Målgruppe: 4. klasse Titel: Me and my pet Vejledning Lærer Me and my pet My dogs SVTV2, 2011, 5 min. Tekstet på engelsk Me and my pet er en svenskproduceret undervisningsserie til engelsk for børn i 4. klasse, som foregår på engelsk, i engelsktalende lande og

Læs mere

Factsheet. Microsoft Dynamics C5 Version 2008. Web Services

Factsheet. Microsoft Dynamics C5 Version 2008. Web Services Factsheet Microsoft Dynamics C5 Version 2008 Web Services Indhold Indledning... 3 Integration til Krak... 4 Krak på debitor og kreditor... 4 Krak på løn... 8 Krak Datavask... 9 Integration til KOB... 10

Læs mere

Sådan opretter du en elektronisk aflevering

Sådan opretter du en elektronisk aflevering Sådan arbejder du med opgaver i Gradebook/karakterbog Denne vejledning indeholder en detaljeret beskrivelse af hvordan du bruger gradebook/karakterbogen når du vil arbejde med opgaver og give karakterer

Læs mere

Indhold Opsætning Anvendelse Fejlfinding Status-LED Tillæg. Trådløs forstærker. Brugervejledning. HEOS Amp

Indhold Opsætning Anvendelse Fejlfinding Status-LED Tillæg. Trådløs forstærker. Brugervejledning. HEOS Amp Indhold Opsætning Anvendelse Fejlfinding Status-LED Tillæg Trådløs forstærker Brugervejledning HEOS Amp Indhold Opsætning Anvendelse Fejlfinding Status-LED Tillæg INDLEDNING 4 FØR DU GÅR I GANG 5 Systemkrav

Læs mere

BILAG 8.1.B TIL VEDTÆGTER FOR EXHIBIT 8.1.B TO THE ARTICLES OF ASSOCIATION FOR

BILAG 8.1.B TIL VEDTÆGTER FOR EXHIBIT 8.1.B TO THE ARTICLES OF ASSOCIATION FOR BILAG 8.1.B TIL VEDTÆGTER FOR ZEALAND PHARMA A/S EXHIBIT 8.1.B TO THE ARTICLES OF ASSOCIATION FOR ZEALAND PHARMA A/S INDHOLDSFORTEGNELSE/TABLE OF CONTENTS 1 FORMÅL... 3 1 PURPOSE... 3 2 TILDELING AF WARRANTS...

Læs mere

Bookingmuligheder for professionelle brugere i Dansehallerne 2015-16

Bookingmuligheder for professionelle brugere i Dansehallerne 2015-16 Bookingmuligheder for professionelle brugere i Dansehallerne 2015-16 Modtager man økonomisk støtte til et danseprojekt, har en premieredato og er professionel bruger af Dansehallerne har man mulighed for

Læs mere

Blomsten er rød (af Harry Chapin, oversat af Niels Hausgaard)

Blomsten er rød (af Harry Chapin, oversat af Niels Hausgaard) Blomsten er rød (af Harry Chapin, oversat af Niels Hausgaard) På den allerførste skoledag fik de farver og papir. Den lille dreng farved arket fuldt. Han ku bare ik la vær. Og lærerinden sagde: Hvad er

Læs mere

3 Tilføj printer "HP-GL/2 devices, ADI 4.3 - for Autodesk by HP" 5 Klik "Printer ikonet" - Print/Plot configuration

3 Tilføj printer HP-GL/2 devices, ADI 4.3 - for Autodesk by HP 5 Klik Printer ikonet - Print/Plot configuration Plot filer fra AutoCad 14. 1 Åben Autocad 14 2 Klik "Filer" og vælg "Printer setup" 3 Tilføj printer "HP-GL/2 devices, ADI 4.3 - for Autodesk by HP" 4 Klik "Ok" 5 Klik "Printer ikonet" - Print/Plot configuration

Læs mere

Mindmapping med FreeMind. En Introduktion til programmet FreeMind

Mindmapping med FreeMind. En Introduktion til programmet FreeMind En Introduktion til programmet FreeMind Jan Leffers 2006 Indholdsfortegnelse Indledning...2 Hvad er et mindmap...2 Mindmap guidelines...3 Download og installation...3 Kom hurtigt i gang...4 Det første

Læs mere

Software Design (SWD) Spørgsmål 1

Software Design (SWD) Spørgsmål 1 Spørgsmål 1 Unified Process Du skal give en beskrivelse af Unified Process. Beskrivelsen skal indeholde forklaring på følgende begreber: Phase Iteration Discipline Activity Milestone Artifact Spørgsmål

Læs mere

Weebly- vejledning. Lav din egen hjemmeside let og smertefrit

Weebly- vejledning. Lav din egen hjemmeside let og smertefrit 1 Weebly- vejledning Lav din egen hjemmeside let og smertefrit 1. Gå ind på flg. adresse: www.weebly.com 2. Opret dig som bruger (gratis): 2 3. Kom godt i gang: For at komme i gang med 1. side skal du

Læs mere

Subject to terms and conditions. WEEK Type Price EUR WEEK Type Price EUR WEEK Type Price EUR WEEK Type Price EUR

Subject to terms and conditions. WEEK Type Price EUR WEEK Type Price EUR WEEK Type Price EUR WEEK Type Price EUR ITSO SERVICE OFFICE Weeks for Sale 31/05/2015 m: +34 636 277 307 w: clublasanta-timeshare.com e: roger@clublasanta.com See colour key sheet news: rogercls.blogspot.com Subject to terms and conditions THURSDAY

Læs mere

Microsoft Dynamics C5. Tillæg til YearEnd 2012.

Microsoft Dynamics C5. Tillæg til YearEnd 2012. Microsoft Dynamics C5 Tillæg til YearEnd 2012. TILLÆG TIL ÅRSAFSLUTNING 2012 NY KOMPLET KOMMAFIL Rettelserne til kommafilen vedr. fri telefon der kom i begyndelsen af januar i år, var desværre ikke kommet

Læs mere

Projekt i Programmering C Menu til hjemmeside.

Projekt i Programmering C Menu til hjemmeside. Projekt i Programmering C Menu til hjemmeside. 10-12-2004 Holstebro HTX Bent Arnoldsen Synopsis. Projektet her er en menu til hjemmesider, som er lavet så den er let at tilrette, når man tilføjer eller

Læs mere

PDFmaps på smartphones

PDFmaps på smartphones PDFmaps på smartphones Kort udbyder - en enkel og (gratis) mulighed for at stille orienteringskort til rådighed på iphone/ipad og Android Bruger - en enkel og (gratis) mulighed for at downloade og anvende

Læs mere

Byg web sider. Introduktion:

Byg web sider. Introduktion: Introduktion: Du kender nu nogle enkle HTML tags, så nu er det på tide, at du kommer i gang med at lave din første side! Når du har nogle HTML-sider klar skal du have dem lagt op, så dine venner kan se

Læs mere

Licensbetingelser VAX NemHandel

Licensbetingelser VAX NemHandel VAX NemHandel Copyright 2013 mysupply ApS. Alle rettigheder forbeholdes. Enhver gengivelse eller anvendelse af dette dokument eller dele deraf er uanset formål, ikke tilladt uden forudgående skriftlig

Læs mere

Rentemarkedet. Markedskommentarer og prognose. Kilde, afdækning Dato 12. august 2014

Rentemarkedet. Markedskommentarer og prognose. Kilde, afdækning Dato 12. august 2014 Rentemarkedet Markedskommentarer og prognose Kilde, afdækning Dato 12. august 2014 Rentemarkedet DKK siden august og fremover 2.5 2 1.5 1 0.5 August 2013 NU Vores forventning til renteniveauet om 1 år

Læs mere

RIGSPOLITIET. Vejledning i konvertering. fra. Word -dokument. til. PDF-fil. på politi.dk. Rigspolitiets websektion

RIGSPOLITIET. Vejledning i konvertering. fra. Word -dokument. til. PDF-fil. på politi.dk. Rigspolitiets websektion RIGSPOLITIET Vejledning i konvertering fra Word -dokument til PDF-fil på politi.dk Rigspolitiets websektion Indledning Da vi skal leve op til kravene om tilgængelighed på Internettet, skal alle tekster

Læs mere

PDFmaps på smartphones

PDFmaps på smartphones PDFmaps på smartphones Kort udbyder - en enkel og (gratis) mulighed for at stille orienteringskort til rådighed på iphone/ipad og Android Bruger - en enkel og (gratis) mulighed for at downloade og anvende

Læs mere

Bornholms Regionskommune Rapportering

Bornholms Regionskommune Rapportering Bornholms Regionskommune Rapportering Materialet er udarbejdet til Bornholms Regionskommune og bedes behandlet fortroligt Rapporten er udarbejdet den 12. august 2014. Dealer Pernille Linnerup Kristensen

Læs mere

DDD Runde 2, 2015 Facitliste

DDD Runde 2, 2015 Facitliste DDD Runde 2, 2015 Facitliste Søren Dahlgaard og Mathias Bæk Tejs Knudsen Opgaver og løsninger til 2. runde af DDD 2015. 1 4. 19. februar, 2015 linetest DK v1.0 Line Test Sigurd er begyndt i gymnasiet og

Læs mere

Application form - au pair (please use block capial letters when filling in the form)

Application form - au pair (please use block capial letters when filling in the form) Application form - au pair (please use block capial letters when filling in the form) Au Pairs International Sixtusvej 15, DK-2300 Copenhagen S Tel: +45 3284 1002, Fax: +45 3284 3102 www.aupairsinternational.com,

Læs mere

ExpressShipper BRUGERVEJLEDNING

ExpressShipper BRUGERVEJLEDNING ExpressShipper BRUGERVEJLEDNING Ver. 1.7 Marts 2015 INDHOLD 1 SHIPPPING MANAGER...3 1.1 Status på forsendelser... 3 2 FORSENDELSER... 4 2.1 Opret en ny forsendelse... 4 2.2 Forsendelser uden for EU (Internationale

Læs mere

2013 SP1. Konfiguration af koncernindblik. Configuration Guide

2013 SP1. Konfiguration af koncernindblik. Configuration Guide 2013 SP1 Konfiguration af koncernindblik Configuration Guide Intellectual Property Rights This document is the property of ScanJour. The data contained herein, in whole or in part, may not be duplicated,

Læs mere

Manual PowerBaze - www.powerbaze.dk

Manual PowerBaze - www.powerbaze.dk POWERBAZE Counters 1.1 Manual PowerBaze - www.powerbaze.dk POWERBAZE Counters 1.1 Manual Indhold: Oversigt Installation Konfiguration Tæller Display fanen Tæller Linier fanen Tæller Stationer fanen Tæller

Læs mere

Bilag. Resume. Side 1 af 12

Bilag. Resume. Side 1 af 12 Bilag Resume I denne opgave, lægges der fokus på unge og ensomhed gennem sociale medier. Vi har i denne opgave valgt at benytte Facebook som det sociale medie vi ligger fokus på, da det er det største

Læs mere

Stofa SmartTv. Trin for trin vejledning Arris Tv-boks

Stofa SmartTv. Trin for trin vejledning Arris Tv-boks Stofa SmartTv Trin for trin vejledning Arris Tv-boks INDHOLDSFORTEGNELSE SÅDAN TILSLUTTER DU Det indeholder pakken 3 1. Trin for trin vejledning: Sådan tilslutter du din Stofa boks 4 2. Slut din Stofa

Læs mere

Start på Arduino og programmering

Start på Arduino og programmering Programmering for begyndere Brug af Arduino Start på Arduino og programmering EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1 Start på Arduino og programmering Sidste gang (Introduktion) Programmeringssproget

Læs mere

Kriterie for at bestå: Deltagelse i undervisningstiden, udarbejdelse af e-magasin, deltagelse i fælles fremlægning.

Kriterie for at bestå: Deltagelse i undervisningstiden, udarbejdelse af e-magasin, deltagelse i fælles fremlægning. 1. E-MAGASINER (Herning) Hvem kan deltage: Studerende i Herning Kriterie for at bestå: Deltagelse i undervisningstiden, udarbejdelse af e-magasin, deltagelse i fælles fremlægning. På kurset lærer du at

Læs mere

Typo3 Manual TDC Landsklub Kommunikations setup version 2010.03.21

Typo3 Manual TDC Landsklub Kommunikations setup version 2010.03.21 Typo3 Manual TDC Landsklub Kommunikations setup version 2010.03.21 Der findes yderligere hjælp på www.typo3support.com Copyright Vision Team ApS 1 www.visionteam.dk Content Page 1 Log ind på intranettet...

Læs mere

Dagens program. Domæner. change log- screen shots hver gang I har arbejdet med themet. Arkitekturen bag en wp blog. Hvad er widgets.

Dagens program. Domæner. change log- screen shots hver gang I har arbejdet med themet. Arkitekturen bag en wp blog. Hvad er widgets. Dagens program Har alle fået? Har nogen betalt for meget? Hav jeres koder klar Domæner change log- screen shots hver gang I har arbejdet med themet. Arkitekturen bag en wp blog Hvad er widgets Hvad er

Læs mere

Bornholms Regionskommune

Bornholms Regionskommune Bornholms Regionskommune Rapportering Rapport udarbejdet den 9. januar 2014 Dealer Pernille Linnerup Kristensen Indhold Ordforklaring side 3 Kommentarer til risiko side 4 Nøgletal til risikostyring side

Læs mere

BILAG 8.1.F TIL VEDTÆGTER FOR EXHIBIT 8.1.F TO THE ARTICLES OF ASSOCIATION FOR

BILAG 8.1.F TIL VEDTÆGTER FOR EXHIBIT 8.1.F TO THE ARTICLES OF ASSOCIATION FOR BILAG 8.1.F TIL VEDTÆGTER FOR ZEALAND PHARMA A/S EXHIBIT 8.1.F TO THE ARTICLES OF ASSOCIATION FOR ZEALAND PHARMA A/S INDHOLDSFORTEGNELSE/TABLE OF CONTENTS 1 FORMÅL... 3 1 PURPOSE... 3 2 TILDELING AF WARRANTS...

Læs mere

Servlets, Tomcat & BlueJ

Servlets, Tomcat & BlueJ Servlets, Tomcat & BlueJ Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 05.october 2007 Hvad er Servlets: For at forstå det, må vi først få styr på to begreber, nemlig statiske og dynamiske hjemmesider

Læs mere

Miniprojekt2011. Formålet er at lære og indlære god objektorienteret programudvikling og programmering med Java, samt undervejs at opfylde studiekrav.

Miniprojekt2011. Formålet er at lære og indlære god objektorienteret programudvikling og programmering med Java, samt undervejs at opfylde studiekrav. Miniprojekt2011 Projektbeskrivelse Der skal fremstilles en lille java application på PC, hvor brugeren kan foretage interaktioner med en simpel database på disken via et grafisk brugerinterface. Formålet

Læs mere

Guide til, hvordan du tilføjer en GIPPLER- fane til din Facebook side

Guide til, hvordan du tilføjer en GIPPLER- fane til din Facebook side Guide til, hvordan du tilføjer en GIPPLER- fane til din Facebook side Bemærk! Vi bruger i denne guide både Facebook og en applikation på Facebook for, at lave din GIPPLER- fane. Vi kan af naturlige årsager

Læs mere

Transaktionen er gennemført i forkert valuta

Transaktionen er gennemført i forkert valuta Transaktionen er gennemført i forkert valuta Er beløbet er hævet i en forkert valuta, har du mulighed for at gøre indsigelse. Før du kan gøre indsigelse, skal du selv have kontaktet forretningen. Det er

Læs mere

Montage bjælkeklipper BM 5001R Art. No. 112870. Assembly scythe mower BM 5001R Art. No. 112870

Montage bjælkeklipper BM 5001R Art. No. 112870. Assembly scythe mower BM 5001R Art. No. 112870 Montage bjælkeklipper BM 5001R Art. No. 112870 Assembly scythe mower BM 5001R Art. No. 112870 Løsdele pose pakket, afdækninger, skaftkonsol, skaft højre og venstre. Lose parts plastic bag, covers, handle

Læs mere

WINDCHILL THE NEXT STEPS

WINDCHILL THE NEXT STEPS WINDCHILL THE NEXT STEPS PTC/user, 4. marts 2015 Jens Christian Jensen, Econocap Agenda Windchill the next steps Bliv opdateret og inspireret til at se hvor Windchill kan hjælpe dig med andet end blot

Læs mere

Hosted Exchange. Setup guide for e-mail clients & mobile devices. Date: 2011-09-13. Version: 15. Author: SBJ/ANB. Target Level: Customer

Hosted Exchange. Setup guide for e-mail clients & mobile devices. Date: 2011-09-13. Version: 15. Author: SBJ/ANB. Target Level: Customer Hosted Exchange Setup guide for e-mail clients & mobile devices Date: 2011-09-13 Version: 15 Author: SBJ/ANB Target Level: Customer Target Audience: End User Language: en-us Page 1 of 35 LEGAL INFORMATION

Læs mere

Enkel guide til mytnt-brugere mytnt Quick Guide mytnt enkelt og hurtigt. TNT Curve Positive orange/g

Enkel guide til mytnt-brugere mytnt Quick Guide mytnt enkelt og hurtigt. TNT Curve Positive orange/g Enkel guide til mytnt-brugere mytnt Quick Guide mytnt enkelt og hurtigt TNT Curve Positive orange/g TNT Curve Positive orange/g 2. Log på mytnt 3. Send en forsendelse 4. Udfyld oplysninger om forsendelse

Læs mere

BACK-END OG DATA: ADMINISTRATION HVAD ER DE NYE MULIGHEDER MED VERSION 7.1? STEFFEN BILLE RANNES, 4. FEBRUAR 2015

BACK-END OG DATA: ADMINISTRATION HVAD ER DE NYE MULIGHEDER MED VERSION 7.1? STEFFEN BILLE RANNES, 4. FEBRUAR 2015 BACK-END OG DATA: ADMINISTRATION HVAD ER DE NYE MULIGHEDER MED VERSION 7.1? STEFFEN BILLE RANNES, 4. FEBRUAR 2015 SAS VISUAL ANALYTICS 7.1 ADMINISTRATOR Mulighed for at udføre handlinger på flere servere

Læs mere

Tillæg. Indhold. Trådløs signalforstærker. Brugervejledning. HEOS Extend

Tillæg. Indhold. Trådløs signalforstærker. Brugervejledning. HEOS Extend Trådløs signalforstærker Brugervejledning HEOS Extend INDLEDNING 3 FØR DU GÅR I GANG 4 Systemkrav 4 Netværkskrav 4 Krav til kontrolenhed 5 Lær din Extend at kende 6 Knapper 7 Bagpanel 8 Strømforsyning

Læs mere

Projektledelse i praksis

Projektledelse i praksis Projektledelse i praksis - Hvordan skaber man (grundlaget) for gode beslutninger? Martin Malis Business Consulting, NNIT mtmi@nnit.com 20. maj, 2010 Agenda Project Governance Portfolio Management Project

Læs mere

Introduktion til Flash, fortsat

Introduktion til Flash, fortsat Introduktion til Flash, fortsat Kaspar Rosengreen Nielsen kaspar@interactivespaces.net Dagens program Opsamling på sidste forelæsning. Vi vil beskæftige os med følgende emner i dagens forelæsning: Komponenter

Læs mere

Database for udviklere. Jan Lund Madsen PBS10107

Database for udviklere. Jan Lund Madsen PBS10107 Database for udviklere Jan Lund Madsen PBS10107 Indhold LINQ... 3 LINQ to SQL og Arkitektur... 3 O/R designere... 5 LINQ Den store introduktion med.net 3.5 er uden tvivl LINQ(udtales link): Language-INtegrated

Læs mere

Hosted Exchange. Setup guide for e-mail clients & mobile devices. Date: 2014-06-02. Version: 15. Author: SBJ/ANB. Target Level: Customer

Hosted Exchange. Setup guide for e-mail clients & mobile devices. Date: 2014-06-02. Version: 15. Author: SBJ/ANB. Target Level: Customer Hosted Exchange Setup guide for e-mail clients & mobile devices Date: 2014-06-02 Version: 15 Author: SBJ/ANB Target Level: Customer Target Audience: End User Language: en-us Page 1 of 42 LEGAL INFORMATION

Læs mere

Spil Master Mind. Indledning.

Spil Master Mind. Indledning. side 1 af 16 Indledning. Spillet som denne rapport beskriver, indgår i et større program, der er lavet som projekt i valgfaget programmering C på HTX i perioden 9/11-98 til 12/1-99. Spillet skal give de

Læs mere

Microsoft Outlook 2010

Microsoft Outlook 2010 Microsoft Outlook 2010 Export & import med.pst filer Date: 2010-11-11 Version: 1 Author: Anders Bendtsen Target Level: Customer Target Audience: End User Language: da-dk Page 1 of 10 LEGAL INFORMATION

Læs mere

Bornholms Regionskommune Rapportering

Bornholms Regionskommune Rapportering Bornholms Regionskommune Rapportering Materialet er udarbejdet til Bornholms Regionskommune og bedes behandlet fortroligt Rapporten er udarbejdet d. 3 marts 2015. Lars Kruse Brixler Indhold Ordforklaring

Læs mere

Billeder på hjemmeside

Billeder på hjemmeside Billeder på hjemmeside Indholdsfortegnelse Emne 1. Billedredigering (Microsoft Picture Manager) Side 3 a. Komprimer billeder b. Beskæring af billeder 3 9 2. Billeder og tekst ved hjælp af en skabelon (Template

Læs mere

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004 Genbrugelige komponenter og designmønstre i Java Jacob Nordfalk Ingeniørhøjskolen i København Nykøbing F itvisioncenter 24. februar 2004 Program Om Jacob Nordfalk introduktion (ikke-teknisk del) Komponentbaseret

Læs mere

POSitivitiES Positive Psychology in European Schools HOW TO START

POSitivitiES Positive Psychology in European Schools HOW TO START POSitivitiES Positive Psychology in European Schools HOW TO START POSitivitiES Positive Psychology in European Schools PositivitiES er et Comenius Multilateral europæisk projekt, som har til formål at

Læs mere

Opret en formular i Dreamweaver

Opret en formular i Dreamweaver Opret en formular i Dreamweaver. Åben det html-dokument hvor du vil have din formular skal være på. 2. Klik i det felt (DIV eller tabel) hvor du vil have din formular skal være. Du kan se du er i feltet

Læs mere

Afbestillingsforsikring

Afbestillingsforsikring Afbestillingsforsikring Sygdomsafbestillingsforsikring ved akut sygdom, ulykke. Da afbestilling på grund af akut sygdom, ulykke m.m. ikke fritager deltagerne for betaling, kan det anbefales, at der tegnes

Læs mere

Trolling Master Bornholm 2013

Trolling Master Bornholm 2013 Trolling Master Bornholm 2013 (English version further down) Tilmeldingen åbner om to uger Mandag den 3. december kl. 8.00 åbner tilmeldingen til Trolling Master Bornholm 2013. Vi har flere tilmeldinger

Læs mere

Web- og serverprogrammering

Web- og serverprogrammering Web- og serverprogrammering Arkitekturer i webprogrammer - dag 6 Model-View-Controller-arkitukturen Flerlags-arkitekturer Læsning: WJSP 10 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html

Læs mere

Masters Thesis - registration form Kandidatafhandling registreringsformular

Masters Thesis - registration form Kandidatafhandling registreringsformular Masters Thesis - registration form Kandidatafhandling registreringsformular Godkendelse af emne for hovedopgave af vejleder og undervisningskoordinator. Læs venligst retningslinjerne sidst i dette dokument

Læs mere

Hyper-V på Windows 8 64 Bit. Indhold. Vejledning i brug af Hyper-V på en Windows 8 maskine

Hyper-V på Windows 8 64 Bit. Indhold. Vejledning i brug af Hyper-V på en Windows 8 maskine Hyper-V på Windows 8 64 Bit Vejledning i brug af Hyper-V på en Windows 8 maskine Indhold Hyper-V på Windows 8 64 Bit... 1 Installation... 2 Vejledning trin for trin... 2 Etablering af Netværk... 5 Opret

Læs mere

Det Naturvidenskabelige Fakultet. Introduktion til Blackboard (Øvelser) Naturvidenskabeligt Projekt 2006 Prøv at forske

Det Naturvidenskabelige Fakultet. Introduktion til Blackboard (Øvelser) Naturvidenskabeligt Projekt 2006 Prøv at forske Det Naturvidenskabelige Fakultet Introduktion til Blackboard (Øvelser) Naturvidenskabeligt Projekt 2006 Prøv at forske Indholdsfortegnelse Introduktion til Blackboard Content System...3 Øvelse 01 individuel:

Læs mere

Opstart. I gang med Dreamweaver. Læs mere om...

Opstart. I gang med Dreamweaver. Læs mere om... Generelle bemærkninger Programmet Dreamweaver har været på markedet i nogle år efterhånden. Den seneste version hedder Dreamweaver CS5, og programmet er på engelsk. Dreamweaver er en såkaldt grafisk editor,

Læs mere

Citation for published version (APA): Byrge, C., & Hansen, S. (2009). Den Kreative Platform Spillet [2D/3D (Fysisk produkt)].

Citation for published version (APA): Byrge, C., & Hansen, S. (2009). Den Kreative Platform Spillet [2D/3D (Fysisk produkt)]. Aalborg Universitet Den Kreative Platform Spillet Sørensen, Christian Malmkjær Byrge; Hansen, Søren Publication date: 2009 Document Version Pre-print (ofte en tidlig version) Link to publication from Aalborg

Læs mere