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: cv@ihk.dk 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=" </p> </font> </blockquote> </body> </html> res/drawable/judlogo.png res/layout/about.xml <?xml version="1.0" encoding="utf 8"?> <ScrollView xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dip"> <TextView android:id="@+id/about_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/about_text" /> </ScrollView> res/layout/afb_list_item.xml <?xml version="1.0" encoding="utf 8"?> <LinearLayout xmlns: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=" 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=" 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" parent="@android:attr/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 name="android:textappearance">@android:style/textappearance.small</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 name="android:textcolor">@android:color/white</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=" <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

Portal Registration. Check Junk Mail for activation . 1 Click the hyperlink to take you back to the portal to confirm your registration

Portal Registration. Check Junk Mail for activation  . 1 Click the hyperlink to take you back to the portal to confirm your registration Portal Registration Step 1 Provide the necessary information to create your user. Note: First Name, Last Name and Email have to match exactly to your profile in the Membership system. Step 2 Click on the

Læs mere

IBM Network Station Manager. esuite 1.5 / NSM Integration. IBM Network Computer Division. tdc - 02/08/99 lotusnsm.prz Page 1

IBM Network Station Manager. esuite 1.5 / NSM Integration. IBM Network Computer Division. tdc - 02/08/99 lotusnsm.prz Page 1 IBM Network Station Manager esuite 1.5 / NSM Integration IBM Network Computer Division tdc - 02/08/99 lotusnsm.prz Page 1 New esuite Settings in NSM The Lotus esuite Workplace administration option is

Læs mere

Help / Hjælp

Help / Hjælp Home page Lisa & Petur www.lisapetur.dk Help / Hjælp Help / Hjælp General The purpose of our Homepage is to allow external access to pictures and videos taken/made by the Gunnarsson family. The Association

Læs mere

- 1 - Tredjepartstjenester

- 1 - Tredjepartstjenester Tredjepartstjenester Hvis du bruger tredjepartstjenester gennem PRODUKTET, er brugen af tjenesterne underlagt betingelserne herunder. Når du skaber adgang til og/eller henter tredjepartsindhold (som tekst,

Læs mere

Løsning af skyline-problemet

Løsning af skyline-problemet Løsning af skyline-problemet Keld Helsgaun RUC, oktober 1999 Efter at have overvejet problemet en stund er min første indskydelse, at jeg kan opnå en løsning ved at tilføje en bygning til den aktuelle

Læs mere

Slutrapport vedrørende Den Danske Maritime Fond, projekt no : Opdatering af emissionsbeslutningsstøttesystem.

Slutrapport vedrørende Den Danske Maritime Fond, projekt no : Opdatering af emissionsbeslutningsstøttesystem. Slutrapport vedrørende Den Danske Maritime Fond, projekt no. 2016-108: Opdatering af emissionsbeslutningsstøttesystem. Slutrapport Harry B. Bingham Hans Otto Kristensen Rapport 2017 Af Copyright: Forsidefoto:

Læs mere

Vejledning til det digitale eksamenssystem. Heilesen, Simon. Publication date: Document Version Peer-review version

Vejledning til det digitale eksamenssystem. Heilesen, Simon. Publication date: Document Version Peer-review version Vejledning til det digitale eksamenssystem Heilesen, Simon Publication date: 2014 Document Version Peer-review version Citation for published version (APA): Heilesen, S. (2014). Vejledning til det digitale

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

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller Upload fil Upload fil skal ses som et alternativ til at indsende tællefiler vedhæftet til mails Upload fil kan være en hurtigere og mere håndholdt måde at få data ind i Mastra på. Man starter med via Gennemse

Læs mere

4000 Generation Vejeceller Single Point Vejecelle SPSXL. Applikationer. Unikke Fordele

4000 Generation Vejeceller Single Point Vejecelle SPSXL. Applikationer. Unikke Fordele 4000 Generation Vejeceller Single Point Vejecelle SPSXL Unikke Fordele Udviklet og produceret i Danmark Fremstillet i rustfrit stål 1.4542 (17-4 PH) Robust kapacitiv teknologi Høj overlast tolerance (op

Læs mere

StarWars-videointro. Start din video på den nørdede måde! Version: August 2012

StarWars-videointro. Start din video på den nørdede måde! Version: August 2012 StarWars-videointro Start din video på den nørdede måde! Version: August 2012 Indholdsfortegnelse StarWars-effekt til videointro!...4 Hent programmet...4 Indtast din tekst...5 Export til film...6 Avanceret

Læs mere

Google Cloud Print brugermanual

Google Cloud Print brugermanual Google Cloud Print brugermanual Anvendte symboler i denne manual Denne manual bruger følgende symboler. Bemærk! Disse er advarsler og begrænsninger til korrekt drift. Det anbefales stærkt, at du læser

Læs mere

User Manual for LTC IGNOU

User Manual for LTC IGNOU User Manual for LTC IGNOU 1 LTC (Leave Travel Concession) Navigation: Portal Launch HCM Application Self Service LTC Self Service 1. LTC Advance/Intimation Navigation: Launch HCM Application Self Service

Læs mere

Boligsøgning / Search for accommodation!

Boligsøgning / Search for accommodation! Boligsøgning / Search for accommodation! For at guide dig frem til den rigtige vejledning, skal du lige svare på et par spørgsmål: To make sure you are using the correct guide for applying you must answer

Læs mere

Eksempler SPSX Single Point Vejeceller Generation Vejeceller Single Point Vejecelle SPSX. Applikationer. Unikke Fordele

Eksempler SPSX Single Point Vejeceller Generation Vejeceller Single Point Vejecelle SPSX. Applikationer. Unikke Fordele 4000 Generation Vejeceller Single Point Vejecelle SPSX Unikke Fordele Udviklet og produceret i Danmark Fremstillet i elektropoleret rustfrit stål 1.4542 (17-4 PH) Robust kapacitiv teknologi Høj overlast

Læs mere

Skærmtilpasning. Version 4.2. Administratorvejledning

Skærmtilpasning. Version 4.2. Administratorvejledning Skærmtilpasning Version 4.2 Administratorvejledning Januar 2016 www.lexmark.com Indhold 2 Indhold Historik over ændringer... 3 Oversigt...4 Konfiguration af programmet...5 Adgang til Embedded Web Server...

Læs mere

DK - Quick Text Translation. HEYYER Net Promoter System Magento extension

DK - Quick Text Translation. HEYYER Net Promoter System Magento extension DK - Quick Text Translation HEYYER Net Promoter System Magento extension Version 1.0 15-11-2013 HEYYER / Email Templates Invitation Email Template Invitation Email English Dansk Title Invitation Email

Læs mere

Project Step 7. Behavioral modeling of a dual ported register set. 1/8/ L11 Project Step 5 Copyright Joanne DeGroat, ECE, OSU 1

Project Step 7. Behavioral modeling of a dual ported register set. 1/8/ L11 Project Step 5 Copyright Joanne DeGroat, ECE, OSU 1 Project Step 7 Behavioral modeling of a dual ported register set. Copyright 2006 - Joanne DeGroat, ECE, OSU 1 The register set Register set specifications 16 dual ported registers each with 16- bit words

Læs mere

University Colleges. Sådan kan du hjælpe dit barn med lektierne! Kristensen, Kitte Søndergaard. Publication date: 2011

University Colleges. Sådan kan du hjælpe dit barn med lektierne! Kristensen, Kitte Søndergaard. Publication date: 2011 University Colleges Sådan kan du hjælpe dit barn med lektierne! Kristensen, Kitte Søndergaard Publication date: 2011 Document Version Tidlig version også kaldet pre-print Link to publication Citation for

Læs mere

Hvordan vælger jeg dokumentprofilen?

Hvordan vælger jeg dokumentprofilen? Hvordan vælger jeg dokumentprofilen? Valget af OIOUBL profil i en konkret dokumentudveksling vil bl.a. afhænge af, hvilke OIOUBL profiler den anden part i udvekslingen understøtter. Et konkret eksempel

Læs mere

E-PAD Bluetooth hængelås E-PAD Bluetooth padlock E-PAD Bluetooth Vorhängeschloss

E-PAD Bluetooth hængelås E-PAD Bluetooth padlock E-PAD Bluetooth Vorhängeschloss E-PAD Bluetooth hængelås E-PAD Bluetooth padlock E-PAD Bluetooth Vorhängeschloss Brugervejledning (side 2-6) Userguide (page 7-11) Bedienungsanleitung 1 - Hvordan forbinder du din E-PAD hængelås med din

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

United Nations Secretariat Procurement Division

United Nations Secretariat Procurement Division United Nations Secretariat Procurement Division Vendor Registration Overview Higher Standards, Better Solutions The United Nations Global Marketplace (UNGM) Why Register? On-line registration Free of charge

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

3D NASAL VISTA 2.0

3D NASAL VISTA 2.0 USER MANUAL www.nasalsystems.es index index 2 I. System requirements 3 II. Main menu 4 III. Main popup menu 5 IV. Bottom buttons 6-7 V. Other functions/hotkeys 8 2 I. Systems requirements ``Recommended

Læs mere

The purpose of our Homepage is to allow external access to pictures and videos taken/made by the Gunnarsson family.

The purpose of our Homepage is to allow external access to pictures and videos taken/made by the Gunnarsson family. General The purpose of our Homepage is to allow external access to pictures and videos taken/made by the Gunnarsson family. Formålet med vores hjemmesiden er at gøre billeder og video som vi (Gunnarsson)

Læs mere

Aalborg Universitet. Borgerinddragelse i Danmark Lyhne, Ivar; Nielsen, Helle; Aaen, Sara Bjørn. Publication date: 2015

Aalborg Universitet. Borgerinddragelse i Danmark Lyhne, Ivar; Nielsen, Helle; Aaen, Sara Bjørn. Publication date: 2015 Aalborg Universitet Borgerinddragelse i Danmark Lyhne, Ivar; Nielsen, Helle; Aaen, Sara Bjørn Publication date: 2015 Document Version Også kaldet Forlagets PDF Link to publication from Aalborg University

Læs mere

3D NASAL VISTA TEMPORAL

3D NASAL VISTA TEMPORAL USER MANUAL www.nasalsystems.es index index 2 I. System requirements 3 II. Main menu 4 III. Main popup menu 5 IV. Bottom buttons 6-7 V. Other functions/hotkeys 8 2 I. Systems requirements ``Recommended

Læs mere

SPECIALTRYKKERIETS KUNDE WEBPORTAL KOM GODT I GANG

SPECIALTRYKKERIETS KUNDE WEBPORTAL KOM GODT I GANG SPECIALTRYKKERIETS KUNDE WEBPORTAL KOM GODT I GANG Jeg håber du får fornøjelse af vores nye værktøj. WebApproval skal gøre det nemmere og mere sikkert for dig at godkende din tryksager. Har du spørgsmål,

Læs mere

Vores mange brugere på musskema.dk er rigtig gode til at komme med kvalificerede ønsker og behov.

Vores mange brugere på musskema.dk er rigtig gode til at komme med kvalificerede ønsker og behov. På dansk/in Danish: Aarhus d. 10. januar 2013/ the 10 th of January 2013 Kære alle Chefer i MUS-regi! Vores mange brugere på musskema.dk er rigtig gode til at komme med kvalificerede ønsker og behov. Og

Læs mere

Software 1 with Java. Recitation No. 7 (Servlets, Inheritance)

Software 1 with Java. Recitation No. 7 (Servlets, Inheritance) Software 1 with Java Recitation No. 7 (Servlets, Inheritance) Servlets Java modules that run on a Web server to answer client requests For example: Processing data submitted by a browser Providing dynamic

Læs mere

Status på det trådløse netværk

Status på det trådløse netværk Status på det trådløse netværk Der er stadig problemer med det trådløse netværk, se status her: http://driftstatus.sdu.dk/?f=&antal=200&driftid=1671#1671 IT-service arbejder stadig med at løse problemerne

Læs mere

FIST-GPS3 I N S T A L L A T I O N S I N S T R U K S

FIST-GPS3 I N S T A L L A T I O N S I N S T R U K S FIST-GPS3 I N S T A L L A T I O N S I N S T R U K S GPSTF-patchbakker monteret med prætermineret kabel UDARBEJDET I SAMARBEJDE MED TDC Indhold 1 General information 2 Kit indhold 3 Montering af skuffer

Læs mere

IBM WebSphere Operational Decision Management

IBM WebSphere Operational Decision Management IBM WebSphere Operational Decision Management 8 0 45., WebSphere Operational Decision Management 8, 0, 0. Copyright IBM Corporation 2008, 2012. ........... 1 1:........ 2....... 3 Event Runtime...... 11...........

Læs mere

Mandara. PebbleCreek. Tradition Series. 1,884 sq. ft robson.com. Exterior Design A. Exterior Design B.

Mandara. PebbleCreek. Tradition Series. 1,884 sq. ft robson.com. Exterior Design A. Exterior Design B. Mandara 1,884 sq. ft. Tradition Series Exterior Design A Exterior Design B Exterior Design C Exterior Design D 623.935.6700 robson.com Tradition OPTIONS Series Exterior Design A w/opt. Golf Cart Garage

Læs mere

Microsoft Dynamics C5. version 2012 Service Pack 01 Hot fix Fix list - Payroll

Microsoft Dynamics C5. version 2012 Service Pack 01 Hot fix Fix list - Payroll Microsoft Dynamics C5 version 2012 Service Pack 01 Hot fix 001 4.4.01.001 Fix list - Payroll CONTENTS Introduction... 3 Payroll... 3 Corrected elements in version 4.4.01.001... 4 Microsoft Dynamics C5

Læs mere

Before you begin...2. Part 1: Document Setup...3. Part 2: Master Pages Part 3: Page Numbering...5. Part 4: Texts and Frames...

Before you begin...2. Part 1: Document Setup...3. Part 2: Master Pages Part 3: Page Numbering...5. Part 4: Texts and Frames... InDesign Basics Before you begin...................2 Part 1: Document Setup................3 Part 2: Master Pages................ 4 Part 3: Page Numbering...............5 Part 4: Texts and Frames...............6

Læs mere

Aalborg Universitet. Undersøgelse af miljøvurderingspraksis i Danmark Lyhne, Ivar; Cashmore, Matthew Asa. Publication date: 2013

Aalborg Universitet. Undersøgelse af miljøvurderingspraksis i Danmark Lyhne, Ivar; Cashmore, Matthew Asa. Publication date: 2013 Aalborg Universitet Undersøgelse af miljøvurderingspraksis i Danmark Lyhne, Ivar; Cashmore, Matthew Asa Publication date: 2013 Document Version Peer-review version Link to publication from Aalborg University

Læs mere

Bilag J - Beregning af forventet uheldstæthed på det tosporede vejnet i åbent land Andersen, Camilla Sloth

Bilag J - Beregning af forventet uheldstæthed på det tosporede vejnet i åbent land Andersen, Camilla Sloth Aalborg Universitet Bilag J - Beregning af forventet uheldstæthed på det tosporede vejnet i åbent land Andersen, Camilla Sloth Publication date: 2014 Document Version Også kaldet Forlagets PDF Link to

Læs mere

Citrix CSP og Certificate Store Provider

Citrix CSP og Certificate Store Provider Project Name Document Title TDC Citrix Citrix og Certificate Store Provider Version Number 1.0 Status Release Author jkj Date 5-10-2006 Trademarks All brand names and product names are trademarks or registered

Læs mere

Mandara. PebbleCreek. Tradition Series. 1,884 sq. ft robson.com. Exterior Design A. Exterior Design B.

Mandara. PebbleCreek. Tradition Series. 1,884 sq. ft robson.com. Exterior Design A. Exterior Design B. Mandara 1,884 sq. ft. Tradition Series Exterior Design A Exterior Design B Exterior Design C Exterior Design D 623.935.6700 robson.com Tradition Series Exterior Design A w/opt. Golf Cart Garage Exterior

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

Shared space - mellem vision og realitet. - Lyngby Idrætsby som case

Shared space - mellem vision og realitet. - Lyngby Idrætsby som case Downloaded from orbit.dtu.dk on: Jan 27, 2017 Shared space - mellem vision og realitet. - Lyngby Idrætsby som case Brinkø, Rikke Publication date: 2015 Document Version Peer-review 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

Det er muligt at chekce følgende opg. i CodeJudge: og

Det er muligt at chekce følgende opg. i CodeJudge: og Det er muligt at chekce følgende opg. i CodeJudge:.1.7 og.1.14 Exercise 1: Skriv en forløkke, som producerer følgende output: 1 4 9 16 5 36 Bonusopgave: Modificer dit program, så det ikke benytter multiplikation.

Læs mere

DET KONGELIGE BIBLIOTEK NATIONALBIBLIOTEK OG KØBENHAVNS UNIVERSITETS- BIBLIOTEK. Index

DET KONGELIGE BIBLIOTEK NATIONALBIBLIOTEK OG KØBENHAVNS UNIVERSITETS- BIBLIOTEK. Index DET KONGELIGE Index Download driver... 2 Find the Windows 7 version.... 2 Download the Windows Vista driver.... 4 Extract driver... 5 Windows Vista installation of a printer.... 7 Side 1 af 12 DET KONGELIGE

Læs mere

Aalborg Universitet. Økonomisk ulighed og selvværd Hansen, Claus Dalsgaard. Publication date: 2011

Aalborg Universitet. Økonomisk ulighed og selvværd Hansen, Claus Dalsgaard. Publication date: 2011 Aalborg Universitet Økonomisk ulighed og selvværd Hansen, Claus Dalsgaard Publication date: 2011 Document Version Tidlig version også kaldet pre-print Link to publication from Aalborg University Citation

Læs mere

Privat-, statslig- eller regional institution m.v. Andet Added Bekaempelsesudfoerende: string No Label: Bekæmpelsesudførende

Privat-, statslig- eller regional institution m.v. Andet Added Bekaempelsesudfoerende: string No Label: Bekæmpelsesudførende Changes for Rottedatabasen Web Service The coming version of Rottedatabasen Web Service will have several changes some of them breaking for the exposed methods. These changes and the business logic behind

Læs mere

PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU

PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU OUTLINE INEFFICIENCY OF ATTILA WAYS TO PARALLELIZE LOW COMPATIBILITY IN THE COMPILATION A SOLUTION

Læs mere

Shooting tethered med Canon EOS-D i Capture One Pro. Shooting tethered i Capture One Pro 6.4 & 7.0 på MAC OS-X 10.7.5 & 10.8

Shooting tethered med Canon EOS-D i Capture One Pro. Shooting tethered i Capture One Pro 6.4 & 7.0 på MAC OS-X 10.7.5 & 10.8 Shooting tethered med Canon EOS-D i Capture One Pro Shooting tethered i Capture One Pro 6.4 & 7.0 på MAC OS-X 10.7.5 & 10.8 For Canon EOS-D ejere der fotograferer Shooting tethered med EOS-Utility eller

Læs mere

Setup Guide Do It Now Work Smarter

Setup Guide Do It Now Work Smarter Setup Guide Do It Now Work Smarter Best Practice Education +45 4070 3035 um@bestpractice.dk Indbakke: Fjern læserude og første linje i mails 1. Vælg Vis (View) i Startside menuen 2. Vælg Læserude (Reading

Læs mere

Vejledning til Sundhedsprocenten og Sundhedstjek

Vejledning til Sundhedsprocenten og Sundhedstjek English version below Vejledning til Sundhedsprocenten og Sundhedstjek Udfyld Sundhedsprocenten Sæt mål og lav en handlingsplan Book tid til Sundhedstjek Log ind på www.falckhealthcare.dk/novo Har du problemer

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

IBM WebSphere Operational Decision Management

IBM WebSphere Operational Decision Management IBM WebSphere Operational Decision Management 8 0 29., WebSphere Operational Decision Management 8, 0, 0. Copyright IBM Corporation 2008, 2012. ........... 1 :......... 1 1: Decision Center....... 3 1

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

GUIDE TIL BREVSKRIVNING

GUIDE TIL BREVSKRIVNING GUIDE TIL BREVSKRIVNING APPELBREVE Formålet med at skrive et appelbrev er at få modtageren til at overholde menneskerettighederne. Det er en god idé at lægge vægt på modtagerens forpligtelser over for

Læs mere

On the complexity of drawing trees nicely: corrigendum

On the complexity of drawing trees nicely: corrigendum Acta Informatica 40, 603 607 (2004) Digital Object Identifier (DOI) 10.1007/s00236-004-0138-y On the complexity of drawing trees nicely: corrigendum Thorsten Akkerman, Christoph Buchheim, Michael Jünger,

Læs mere

DANSK INSTALLATIONSVEJLEDNING VLMT500 ADVARSEL!

DANSK INSTALLATIONSVEJLEDNING VLMT500 ADVARSEL! DANSK INSTALLATIONSVEJLEDNING VLMT500 Udpakningsinstruktioner Åben indpakningen forsigtigt og læg indholdet på et stykke pap eller en anden beskyttende overflade for at undgå beskadigelse. Kontroller at

Læs mere

DANMARKS TEKNISKE UNIVERSITET

DANMARKS TEKNISKE UNIVERSITET DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler

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

Brug sømbrættet til at lave sjove figurer. Lav fx: Få de andre til at gætte, hvad du har lavet. Use the nail board to make funny shapes.

Brug sømbrættet til at lave sjove figurer. Lav fx: Få de andre til at gætte, hvad du har lavet. Use the nail board to make funny shapes. Brug sømbrættet til at lave sjove figurer. Lav f: Et dannebrogsflag Et hus med tag, vinduer og dør En fugl En bil En blomst Få de andre til at gætte, hvad du har lavet. Use the nail board to make funn

Læs mere

Basic statistics for experimental medical researchers

Basic statistics for experimental medical researchers Basic statistics for experimental medical researchers Sample size calculations September 15th 2016 Christian Pipper Department of public health (IFSV) Faculty of Health and Medicinal Science (SUND) E-mail:

Læs mere

Brugsanvisning. Installation Manual

Brugsanvisning. Installation Manual Manual size: 148 x 210 mm 175g copper paper(铜版纸印刷) UNIVERSAL BIL TAGBAGAGEBÆRER Brugsanvisning UNIVERSAL CAR ROOF RACK Installation Manual Model no. 10889 Tak fordi du valgte dette produkt, som vi håber

Læs mere

Syddansk Universitet. Notat om Diabetes i Danmark Juel, Knud. Publication date: 2007. Document Version Også kaldet Forlagets PDF. Link to publication

Syddansk Universitet. Notat om Diabetes i Danmark Juel, Knud. Publication date: 2007. Document Version Også kaldet Forlagets PDF. Link to publication Syddansk Universitet Notat om Diabetes i Danmark Juel, Knud Publication date: 27 Document Version Også kaldet Forlagets PDF Link to publication Citation for pulished version (APA): Juel, K., (27). Notat

Læs mere

Aktiv lytning - som kompetence hos ph.d.-vejledere

Aktiv lytning - som kompetence hos ph.d.-vejledere Downloaded from orbit.dtu.dk on: Oct 09, 2016 Aktiv lytning - som kompetence hos ph.d.-vejledere Godskesen, Mirjam Irene; Wichmann-Hansen, Gitte Publication date: 2012 Document Version Også kaldet Forlagets

Læs mere

Splunk Cookbook Lab Workshop

Splunk Cookbook Lab Workshop Splunk Cookbook Lab Workshop Cookbook Lab 1 1. Splunk installation 2. First time login 3. Set the port-number to port 80. a. Please select menu Manager System settings General settings b. Change port from

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 Tidlig version også kaldet pre-print Link to publication from

Læs mere

Bemærk, der er tale om ældre versioner af softwaren, men fremgangsmåden er uændret.

Bemærk, der er tale om ældre versioner af softwaren, men fremgangsmåden er uændret. Check dine svar på: https://dtu.codejudge.net/02101-e18/ Exercise 1: Installer Eclipse og Java. Dette kan f.eks. gøres ved at følge instuktionerne i dokumentet eclipse intro.pdf som ligger under Fildeling

Læs mere

Uforudsete forsinkelser i vej- og banetrafikken - Værdisætning

Uforudsete forsinkelser i vej- og banetrafikken - Værdisætning Downloaded from orbit.dtu.dk on: Dec 17, 2015 - Værdisætning Hjorth, Katrine Publication date: 2012 Link to publication Citation (APA): Hjorth, K. (2012). - Værdisætning [Lyd og/eller billed produktion

Læs mere

Vejledende løsninger

Vejledende løsninger Roskilde Universitetscenter side 1 af 8 sider Vejledende løsninger Opgave 1 Spørgsmål 1.1 a = b - a; b = b - a; a = b + a; Opgaven har flere løsninger. En anden løsning er: a = b + a; b = a - b; a = a

Læs mere

South Baileygate Retail Park Pontefract

South Baileygate Retail Park Pontefract Key Details : available June 2016 has a primary shopping catchment of 77,000 (source: PMA), extending to 186,000 within 10km (source: FOCUS) 86,000 sq ft of retail including Aldi, B&M, Poundstretcher,

Læs mere

Danskernes Rejser. Christensen, Linda. Publication date: 2011. Link to publication

Danskernes Rejser. Christensen, Linda. Publication date: 2011. Link to publication Downloaded from orbit.dtu.dk on: Jan 07, 2016 Danskernes Rejser Christensen, Linda Publication date: 2011 Link to publication Citation (APA): Christensen, L. (2011). Danskernes Rejser Technical University

Læs mere

Engelsk. Niveau D. De Merkantile Erhvervsuddannelser September Casebaseret eksamen. og

Engelsk. Niveau D. De Merkantile Erhvervsuddannelser September Casebaseret eksamen.  og 052431_EngelskD 08/09/05 13:29 Side 1 De Merkantile Erhvervsuddannelser September 2005 Side 1 af 4 sider Casebaseret eksamen Engelsk Niveau D www.jysk.dk og www.jysk.com Indhold: Opgave 1 Presentation

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

KUNDE-WEBPORTAL KOM GODT I GANG

KUNDE-WEBPORTAL KOM GODT I GANG Specialtrykkeriet Arco KUNDE-WEBPORTAL KOM GODT I GANG Vi håber du får fornøjelse af vores nye værktøj. WebApproval skal gøre det nemmere og mere sikkert for dig at godkende din tryksager. Har du spørgsmål,

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

IFDB-M-SP-U24-NN-1-DK02

IFDB-M-SP-U24-NN-1-DK02 IFDB-M-SP-U24-NN-1-DK02 I N S T A L L A T I O N S V E J L E D N I N G IFDB-M Udarbejdet i samarbejde med TDC 1 Generelt IFDB-M er en indendørs vægboks til Riserkabler med plads til 24 splidsninger. Et

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

% &$ # '$ ## () %! #! & # &, # / # 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

Aktivering af Survey funktionalitet

Aktivering af Survey funktionalitet Surveys i REDCap REDCap gør det muligt at eksponere ét eller flere instrumenter som et survey (spørgeskema) som derefter kan udfyldes direkte af patienten eller forsøgspersonen over internettet. Dette

Læs mere

Microsoft Development Center Copenhagen, June Løn. Ændring

Microsoft Development Center Copenhagen, June Løn. Ændring Microsoft Development Center Copenhagen, June 2010 Løn Microsoft Dynamics C5 20100 Ændring af satser r på DA-Barsel Contents Nye satser på DA-barsefra DA-Barsel...... 3 Brev 6 2 Nye satser på DA-barsel

Læs mere

Fang Prikkerne. Introduktion. Scratch

Fang Prikkerne. Introduktion. Scratch Scratch 2 Fang Prikkerne All Code Clubs must be registered. Registered clubs appear on the map at codeclubworld.org - if your club is not on the map then visit jumpto.cc/ccwreg to register your club. Introduktion

Læs mere

Brugeradfærd i idræts- og kulturhuse - Målinger med RFID teknologi Suenson, Valinka

Brugeradfærd i idræts- og kulturhuse - Målinger med RFID teknologi Suenson, Valinka Aalborg Universitet Brugeradfærd i idræts- og kulturhuse - Målinger med RFID teknologi Suenson, Valinka Publication date: 2011 Document Version Accepteret manuscript, peer-review version Link to publication

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

QUICK START Updated:

QUICK START Updated: QUICK START Updated: 24.08.2018 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 started

Læs mere

Titel: Barry s Bespoke Bakery

Titel: Barry s Bespoke Bakery Titel: Tema: Kærlighed, kager, relationer Fag: Engelsk Målgruppe: 8.-10.kl. Data om læremidlet: Tv-udsendelse: SVT2, 03-08-2014, 10 min. Denne pædagogiske vejledning indeholder ideer til arbejdet med tema

Læs mere

Forskning og udvikling i almindelighed og drivkraften i særdeleshed Bindslev, Henrik

Forskning og udvikling i almindelighed og drivkraften i særdeleshed Bindslev, Henrik Syddansk Universitet Forskning og udvikling i almindelighed og drivkraften i særdeleshed Bindslev, Henrik Publication date: 2009 Document version Final published version Citation for pulished version (APA):

Læs mere

Vina Nguyen HSSP July 13, 2008

Vina Nguyen HSSP July 13, 2008 Vina Nguyen HSSP July 13, 2008 1 What does it mean if sets A, B, C are a partition of set D? 2 How do you calculate P(A B) using the formula for conditional probability? 3 What is the difference between

Læs mere

Titel: Hungry - Fedtbjerget

Titel: Hungry - Fedtbjerget Titel: Hungry - Fedtbjerget Tema: fedme, kærlighed, relationer Fag: Engelsk Målgruppe: 8.-10.kl. Data om læremidlet: Tv-udsendelse: TV0000006275 25 min. DR Undervisning 29-01-2001 Denne pædagogiske vejledning

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

Struktur for samkøring af Family Tables og Top Down Design under brug af Wildfire 5.0/Creo 1.0

Struktur for samkøring af Family Tables og Top Down Design under brug af Wildfire 5.0/Creo 1.0 Downloaded from orbit.dtu.dk on: Jan 10, 2017 Struktur for samkøring af Family Tables og Top Down Design under brug af Wildfire 5.0/Creo 1.0 Christensen, Georg Kronborg Publication date: 2012 Document

Læs mere

Uheldsmodeller på DTU Transport - nu og fremover

Uheldsmodeller på DTU Transport - nu og fremover Downloaded from orbit.dtu.dk on: Jan 20, 2019 på DTU Transport - nu og fremover Hels, Tove Publication date: 2011 Document Version Også kaldet Forlagets PDF Link back to DTU Orbit Citation (APA): Hels,

Læs mere

Freefly B-Række Regler

Freefly B-Række Regler Freefly B-Række Regler Freefly B-Rækken er skabt til at imødekomme både nye og erfarende freeflyere, og præsentere dem for konkurrence elementet. Der konkurreres efter FAI regler, men der forekommer dog

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

Trængselsopgørelse Københavns Kommune 2013

Trængselsopgørelse Københavns Kommune 2013 Downloaded from orbit.dtu.dk on: Dec 21, 2017 Trængselsopgørelse Københavns Kommune 2013 Rasmussen, Thomas Kjær; Aabrink, Morten; Nielsen, Otto Anker Publication date: 2014 Document Version Publisher's

Læs mere

Multiple-level Top-down design of modular flexible products

Multiple-level Top-down design of modular flexible products Downloaded from orbit.dtu.dk on: Mar 16, 2019 Multiple-level Top-down design of modular flexible products Christensen, Georg Kronborg Publication date: 2015 Link back to DTU Orbit Citation (APA): Christensen,

Læs mere