The PIT
Röster från ITM-koncernen.

ITmaskinen söker en erfaren Android-utvecklare!

February 13, 2013 11:39 by David Woxberg

Info om tjänsten finns här: http://www.itmaskinen.se/nyheter/en-erfaren-android-utvecklare-sokes/

 


Tags:
Categories: Android | Programmering
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Android och .NET (XobotOS)

May 3, 2012 15:12 by Lars Lundin

Xamarin har jobbat på ett projekt att ersätta Dalvik som är den java-baserat virtuella motorn i Android med Monos .NET
Det här öppnar prestanda ökningar för oss dotnet utvecklare som vill ge oss på Android plattformen.

http://blog.xamarin.com/2012/05/01/android-in-c-sharp/

 

http://www.idg.se/2.1085/1.446606/microsofts-sprak-kan-radda-google-vid-forlust-i-patentrattegang 


Tags:
Categories:
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Intressant seminarium om välfärdsteknologi

December 20, 2011 16:34 by David Woxberg

I onsdags deltog jag vid ett seminarium om välfärdsteknologi i riksdagen.

Seminariet gav olika perspektiv på hur den offentliga sektorn kan dra nytta av modern teknik.

En av talarna var Marie Andersson, lärare på Gotland, som berättade om hur hon använder Internet som en del av undervisningen.

Seminariet arrangerades av IT&Telekomföretagen, Sveriges Kommuner och Landsting, Christer Winbäck (fp) och Monica Green (s).

Här kan du kolla in webbplatsen Välfärdsteknologi, som ger flera praktiska exempel på hur IT kan användas i välfärden.


Tags:
Categories: Tips
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Three ways to make a mobile application

November 30, 2011 10:42 by David Woxberg
Broadly speaking, mobile applications can be created in three different ways. This article contains a brief explanation of each of the three application types.

When people talk about mobile apps, they usually refer to native applications – programs that are installed on mobile phones.

Native applications can often be faster than web applications (more on web applications below). In practice, this may mean that the user interface in a native application is more quick and responsive compared to a web application.

Native applications also open up more possibilities when it comes to accessing phone features, including hardware features (such as Bluetooth access). They are also a good option for mobile games or applications that rely heavily on 3D functionality.

Native applications can be sold or offered for free through application stores (such as the App Store). This makes it easy to distribute the applications.

While many native applications are connected to the Internet, they do not have to be. It is also technically possible to use an Internet-enabled native application in offline mode, meaning for example that the user can access data (such as text and images) that has already been downloaded to the device. However, that requires that offline mode functionality has been enabled by the application developer.

Web applications

A mobile web application is a HTML based web site that has been adapted to mobile units, such as cell phones and tablets. Mobile web applications are accessed through web browsers.

Compared to native applications, mobile web applications are generally limited when it comes to accessing and using cell phone-specific features (including hardware features, such as Bluetooth).
The biggest strength of the mobile web application is reach. Different mobile platforms (such as iPhone and Android) are based on different operating systems but most, if not all, new cell phones contain a web browser.

While all mobile browsers do not work exactly the same, they are relatively similar. This makes it possible to create a mobile web site that can be used on more than one mobile platform. This limits the amount of code that needs to be written and maintained in order to support multiple mobile platforms. Native applications can require more work in comparison since a new native application (with unique source code) needs to be created for every platform that needs to be supported.

Web browsers in new cell phones are often powerful, which means that web applications can contain beautiful and advanced user interfaces. Tools such as HTML5, CSS3 and Javascript can be used to achieve this.

Internet access is required to access a web application. Once a web application has been accessed, however, it is technically possible to access it offline if the developer has enabled offline access/offline mode (more on this below).

Wrapped web applications

There is a third alternative – wrapped web applications – that combines the power of the native application with the reach of the mobile web application. This is a native application that contains a web browser which is used to open a mobile web site.

The native application is basically a wrapper for the mobile web site. If properly done, the mobile web site can be re-used again and again within different application wrappers. For example, the same mobile web site can be wrapped in a native iPhone application and in a native Android application. This limits the amount of code that needs to be written and maintained in order to support multiple mobile platforms.

Wrapped web applications can be distributed through application stores. In addition, they have the same access to phone features (such as bluetooth access) as regular native applications do.

Since a wrapped mobile application is largely based on web technology, it can be a bit slower than a native application.

A wrapped mobile application does not necessarily need to be connected to the Internet. Web pages and other resources can be placed locally in the app which makes it possible for the user to access them without the application ever being connected to the Internet.

Offline mode

Many mobile applications are connected to the Internet. But mobile app users do not always have Internet access. Therefore, apps often contain a so-called offline mode, meaning that mobile applications that require Internet access to fully function can be used to some extent even when the Internet connection is missing.

More specifically, offline mode can mean that certain functions are only available when the application is connected to the Internet. It can also mean that content that has already been downloaded, such as text and images for a news article, is saved in a local database that belongs to the application, making it possible for the user to read the article offline.

Offline mode can also be enabled in web applications. There are different ways of doing this, including the following HTML5-related features:

  • Specified resources such as HTML pages can be cached on the device.

  • Data can be saved in a database on the device.

  • Data can be saved on the user’s cell phone in key-value pairs.
However, since different mobile web browsers do not always work the same way, it is hard to guarantee that the three methods mentioned above will work in all mobile web browsers.


Tags:
Categories: Android | iPhone | Mjukvara | Mobilt | Teknik
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Mockup-program

October 20, 2011 16:12 by Stefan Karlsson

 

Vill slå ett slag för programmet Pencil som är ett gratis mockup-program (GPL-licens med möjlighet att donera till utvecklarna om man vill) . Programmet kan köras som vanlig stand-alone på linux och windows, eller som en addin till firefox.

När du varit ute hos kund och fått en massa input och snabbt måste ta fram ett underlag på program, gränssnitt, programflöde osv så är detta perfekt!

Visst, man kan skapa ett formulär i visual studio och börja koda en prototyp, men problemet med det är att man ofta lägger in för mycket tid och funktionalitet i prototypen och helt plötsligt så har den fått ett eget liv och i slutändan så sitter man och kodar produktionskod i prototypen. Och då är det inte lätt att kasta bort den och börja koda från början. Nackdelen med det är att man fortsätter koda på något som från början inte var meningen att vara något annat än en prototyp.

Ett annat problem med prototyper skrivna direkt i programmeringsverktyget är att kunden måste installera programmet för att se det. Du kan inte lätt skicka prototypen till 100 personer och få dessa förstå vad som ska göras (installeras, kanske avinstallera föregående prototyp osv), dessutom kanske inte alla 100 personerna har rätt att installera programvara på sin dator, många företag har nedlåsta miljöer i verkstäder, kassor osv.

Man kan gå andra vägen och göra bilder i photoshop och skicka ut, men dessa bilder förklarar bäst gränssnittet, inte programflöde m.m.

Därför är detta mockup-program riktigt bra. Du kan göra dina mockup-bilder, länka knappar m.m. till andra bilder. Snabbt göra om, modifiera osv utan att ens riskera att fastna i att överprogrammera en prototyp.

I programmet så finns det en massa färdiga GUI-kontroller (fler finns att ladda ner) som bara är att dra ut och börja använda för att skapa ditt mockup:

image

Väljer man t.ex. en datalista så populeras den automatiskt med demodata. Men man kan lätt ändra det mesta:

image

 

Det går att ladda ner nya kollektioner av kontroller och shapes och det finns olika export-templates att ladda ner också. En av dessa är riktigt bra, templaten heter GUI Prototyping 800x580. Om man laddar ner den och installerar den via Tools / Manage Export Template… så får man en möjlighet att välja den templaten när man exporterar till “Single web page”:

image

image

 

När man väljer det så skapas en mokup-html-sida där man kan testa programflödet enligt mockupen. Den kan man sedan ladda upp på webben och skicka en länk till alla som ska få komma med kommentarer på förslaget. Jag har modifierat min template så den passar mig, vilket är en trevlig möjlighet.

Här är ett exempel på mockup jag gjort: http://develop.itmaskinen.se/stefandev/gui/index.html

 

image

 

Så sluta göra prototyper! Gör mockuper istället! Din säljare, eller till och med din chef kan göra det efter ett kundbesök och sen lämna över den till dig för förfining! Winking smile

 

Over and out!

/Stefan.


Tags:
Categories:
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Välkommen på frukostseminarium om mobila lösningar!

September 22, 2011 16:04 by David Woxberg

Onsdagen den 19 oktober håller ITM Mobile ett kostnadsfritt frukostseminarium om mobila lösningar - och du är välkommen!

Klicka här för att läsa mer.


Tags:
Categories:
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Debugga på kundmaskin utan VS installerat

June 8, 2011 13:49 by Stefan Karlsson

 

Ibland så måste man felsöka i program. felsöker man i Visual Studio på sin utvecklingsdator så kör man oftast med breakpoints i kombination med att man skriver ut debuggdata till output-fönstret. Jag har sett att loggning ute hos kund är en sån sak som de flesta programmerare bygger egna lösningar för, loggning mot fil, Eventlog osv som står och fyller upp loggar 99% till ingen nytta, även om man ser flertalet som i alla fall lägger in flaggor för om det ska vara på eller avslaget.

Något vi använder oss av i stort sett dagligen (i alla fall jag) är Debug.Print() vilket skriver ut debugdata till Outputfönstret (eller motsvarande konfigurerbar eventlyssnare) i Visual Studio.

Låt oss säga att vi har ett program där man har en knapp och en listbox:

image

På olika ställen i programkoden så lägger vi in debug.print () som talar om vad som sker:

  1. Public Class Form1
  2.     Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
  3.         Debug.Print("Activated")
  4.     End Sub
  5.  
  6.     Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  7.         Debug.Print("Loading")
  8.     End Sub
  9.  
  10.  
  11.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  12.         Debug.Print("Button_click Start")
  13.         '---some code
  14.         For p As Integer = 0 To 10
  15.             ListBox1.Items.Add(p.ToString)
  16.             Debug.Print("Adding Listboxitems:" & p.ToString)
  17.         Next
  18.         Debug.Print("Button_click End")
  19.     End Sub
  20. End Class

 

När vi kör programmet och klickar på knappen så får vi i Output-fönstret se att allt går rätt till:

image

DebugView

Om du har problem på en kunddator så vill du inte installera hela visual studio för att få fram den här informationen och det behöver du inte heller, ladda bara ner programmet DebugView från Sysinternals så hookar den in och lyssnar på debug-event från alla applikationer.

På det sättet kan du köra programmet live hos kund och ändå se debug-datat, självklart så krävs det att du har en version av programmet som är kompilerat i Debug-mode. Kunden kör ju antagligen applikationen i Release-mode så du får se till att kompilera programmet i debugmode och ta med och köra på targetmaskinen.

Ovanstående debuggdata ser ut så här när jag kör programmet på samma sätt med Debugview:

image

Man kan välja att logga till fil, vilket är väldigt smidigt om man vill logga programmet under en hel dag medan kunden använder det. Man kan även logga via nätverket, så du kan köra DebugView på en klient och sen starta DebugView på en server och connecta till klienten och få upp debuggdatat där. Du kan skapa include och exclude-filter som highlightar vissa meddelanden eller filtrerar bort vissa meddelanden osv.

Detta är ett mycket värdefullt program när man vill samla debuggdata ute hos kund.

Men Releasemode då???

Av prestandaskäl så tas alla debug.print-anrop bort när man kompilerar programmet i releasemode. Vill man ändå kunna få sådan information via DebugView när man har programmet i releasemode så är det bara att ändra debug.Print() till Trace.WriteLine(), då kommer du att få dessa meddelanden oavsett om det är i debug eller releaseläge på programmet.

Av prestandaskäl kan det vara bra att inte peppra programmet med tusentals Trace.WriteLine, men har man problem med ett program så kan det verkligen vara värt att lägga in dessa rader på ställen man misstänker att det finns problem.

Det är ju smidigt att bara starta DebugView, köra programmet och i DebugView få ut interna data som programmet använder sig av för att se varför man får t.ex. diffar eller error.

Over and out / Stefan


Tags:
Categories:
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Tre nyheter på itmaskinen.se

May 30, 2011 17:23 by David Woxberg

I dag har tre nyhetstexter lagts upp på itmaskinen.se: 


Tags:
Categories: OnlineEvent
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

ITM Mobile på event

May 13, 2011 16:26 by David Woxberg

I går deltog ITM Mobile vid Stockholm Summit on Service Innovation in Cities på Kistamässan. Det var ett bra event!

Här finns information:

http://www.amiando.com/livinglabsglobalstockholm.html


Tags:
Categories:
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

LINQ-tips

April 21, 2011 09:39 by Stefan Karlsson

Satt precis med ett litet projekt där jag laborerade med data från en GPS-puck. Datat skickade jag till en listbox för att se vad som kom från GPS-pucken:

image

Jag ville kunna spara datat till en fil och började då, precis som jag gjort 1000-tals gånger tidigare, att göra en loop som loopade igenom alla items i listboxen för att skriva ner datat till en fil. Det går självklart att göra på massor av olika sätt, nedan är de två vanligaste.

'Gammal metod 1, FOR EACH/NEXT
Dim FileContent1 As String = ""
For Each i As String In ListBox1.Items
    FileContent1 &= i & vbCrLf
Next
IO.File.WriteAllText(Application.StartupPath & "\gpsdata.txt", FileContent1)

'Gammal metod 2, FOR/NEXT
Dim FileContent2 As String = ""
For p As Integer = 0 To ListBox1.Items.Count - 1
    FileContent2 &= ListBox1.Items(p) & vbCrLf
Next
IO.File.WriteAllText(Application.StartupPath & "\gpsdata.txt", FileContent2)

 

Men så kom jag och tänka på LINQ.
Det borde gå att göra ett LINQ-fråga som skapar en array av listitems som gör att jag kan skriva ner allt till en fil med endast en rad kod. Genom att använda IO.File.WriteAllLines som tar en array av strängar och skapa en LINQ-fråga som returnerar en array av strängar från listboxens items så borde det alltså fungera, jag provade med nedanstående kod:

IO.File.WriteAllLines(filename, (From p As String In ListBox1.Items Select p).ToArray)

 

Vilket fungerade hur bra som helst! Men LINQ-frågan går att korta ner, “Select p” är vedertaget i LINQ-frågan så man behöver inte ange det, vilket gör att vi kan korta ner raden till detta:

IO.File.WriteAllLines(filename, (From p As String In ListBox1.Items).ToArray)

 

Slutsats

LINQ är häftigt, det är rent ut sagt sexigt! Men tänk på att det ibland kan vara svårt att förstå LINQ-kod, så även om den gör koden kompaktare så kan den även göra koden svårare att läsa i vissa fall, samt att man får tänka på LINQs “late evaluation”-teknik som kan ställa till det i andra sammanhang. Men i det här sammanhanget så tycker jag att LINQ gör koden mer lättläst och tar bort onödiga rader kod.

Det finns ett talesätt: Varje rad kod du INTE skriver är en rad du inte kan få en bugg i.

Over and out / Stefan


Tags:
Categories: .Net | LINQ | Tips
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed