måndag, augusti 27, 2012

Llama help me do my timesheet

I have to share my experience of connecting Llama to the Time Recording – Timesheet app making my Android phone help my remember how many hours I have spent at work. Just by keeping the phone in my pocket.

The open Android platform, at it’s best. Using one app to control another unrelated app.

To follow this instruction, first make yourself generally familiar with Llama.

In Llama I create an event:

  1. Name: Check in
  2. Condition: Enter Area: Work
    and Wi-Fi Network Connected: (my work network)
  3. Action – Android intent
    • Intent send mode: Broadcast
    • Action: com.dynamicg.timerecording.CHECK_IN

And then

  1. Name: Check out
  2. Condition: Leave Area – Work
  3. Action: Android intent
    1. Intent send mode: Broadcast
    2. Action: com.dynamicg.timerecording.CHECK_OUT

So when I connect to the Wi-Fi at work in the morning, Llama sends a message, that is received by Time Recording, checking me in. Then in the afternoon when I leave work a new message is sent to check me out. 

You might have to try different tricks to filter false check in or check out, but this works for me.

Here you can find some more info about available intents in Time Recording.

torsdag, mars 04, 2010

Performance nightmare

22 to 0.3 seconds!

I found a simple solution to a very common problem. While profiling I found that remove in this little method took a lot of the time.
   public void MovePropertyFirst(IProperty property)
{
properties.Remove(property);
properties.Insert(0, property);
}

The reason was, that it's time consuming to compare the properties by equality, for complex types. I think that in most(?) cases we want to delete the very same instance we supply as parameter to the remove method.

So I implemented a ReferenceEquals based remove, and by that I cut the time spent in remove by about 72 times!

public static bool RemoveFrom<T>(this IList<T> list, T itemToRemove)
{
if(list.Count == 0)
return false;
int index = 0;
foreach (var item in list)
{
if (ReferenceEquals(item, itemToRemove))
{
list.RemoveAt(index);
return true;
}
index++;
}
Debug.Assert(false, "Item to delete not found");
//equality based fall back
return list.Remove(itemToRemove);
}

torsdag, september 03, 2009

I made my first real Git commit's and push tonight. And I made it as a contribution to Git#. I had a great time, making a test fixture of 5 tests pass.

onsdag, november 05, 2008

Mer från PDC; Oslo

Följande sessioner om Oslo tittade jag på:

TL23 A Lap around "Oslo"
TL27 "Oslo": The Language (M)
TL18 "Oslo": Customizing and Extending the Visual Design Experience (Q)
TL28 "Oslo": Repository and Models

Och trots min envishet, så är jag inte så säker på att jag blev så mycket klokare av det. Javisst, om du har behov av att skapa en DSL, så blir detta nog M-delen ett rent lätt och bra sätt. Men det är en bit kvar till att jag tror att det blir "The Way" att bygga applikationer, Q som det visuella verktyget heter är byggt på Oslo-sättet, och är fullt customizerbart för att användas som visuellt verktyg för din egen app, för att lyckas med det bör du nog ha varit med i teamet som byggde Q. Oslo är bara en CTP på ett ambitiöst halvårsgammalt projekt. Spännande, titta gärna, men det är långt kvar till något färdigt.

En del av tanken bakom Oslo projektet är att applikationer som SharePoint och Microsoft Dynamics ska "out of the repository business".

Mer från PDC; TL51 Research: Contract Checking and Automated Test Generation with Pex

Denhär sessionen var kanon, jag missade ett par minuter i början, och har inte Spec# helt aktuellt, men som jag fattade det är Contract Checking-delen det som kommer in i C#4.0 från spec#, mycket trevligt, det kan ju aldrig skada att få ytterligare en möjlighet att uttrycka sina intentioner. men precis som t ex när man skriver unittester så är det viktigt att välja rätt saker att styra upp betendet kring, annars kan det snärja dig längre fram.

Sen kommer PEX som ett imponerande extra verktyg. Det hjälper dig att kolla om du under alla omständigheter håller vad du lovar i både kontrakt och asserts. Jag tvivlar på att jag kommer att använda PEX dagligen, men i en del sammanhang kan det absolut vara till hjälp.

Sessionen som helhet rekommenderas varmt.

Mer från PDC; PC54 Mono and .NET

Den här sessionen gav en underhållande inblick i nuvarande status för Monoprojektet. Bl a annat visade Miguel features som Anders Hejlsberg förhandsvisade för C# 5.0, och som han då kallade compiler as a service. Som eval i JavaScript.

Mer från PDC; TL58 Research: Concurrency Analysis Platform and Tools for Finding Concurrency Bugs

Har en stund över innan det mer intensiva valvakandet börjar i New York, så jag skriver några korta rader om ytterligare saker som fångade mitt intresse lite extra på PDC. Som en hjälp att söka i djungeln av sessioner.
Concurrency Analysis Platform and Tools for Finding Concurrency Bugs, rekommenderas varmt, hjälp för att hitta concurrency buggar genom att köra ditt testprogram med olika schedulering av trådarna i förhållande till varandra. Något som är mycket svårt att få fram på egen hand, ger dessutom möjlighet att debug'a den kombination som framkallade ett fallerat testfall. Både för native kod och för .NET.
Hmm, jag gör så att jag beskriver en session per post.

tisdag, oktober 28, 2008

PDC 08 keynote tisdag

Massor av spännande saker visades, jag rapar upp ett litet urval av det som råkade fastna:
Som gammal MFC-programmerare blir man ju lite sugen på att skapa en ny MFC-app o se hur det ser ut med den nya ribbonskontrollen...
Släpps idag bl a en ribbonkontroll till WPF. Och en VisualStateManager, så man kan hantera visual state på samma sätt som i Silverlight.
Fortsätter om en stund, dax att rusa till nästa session.

C# 4.0

Från PDC08 måndagen
Anders Hejlsberg höll en bra session om nyheterna i C# 4.0.
Jag tar och sliter ut min favorit från det han sa:
Dynamic den nya statiska typen i C# 4.0, fantastiskt trevlig i många sammanhang. Som object, men man kan anropa alla tänkbara metoder på den, det kompilerar, sen kan det naturligvis bli runtimefel. På så sätt kan man slipper en massa casts. Men man får o andra sidan ingen intellisence.

Med detta kommer en rad olika bindings mot olika språk. Mot .NET objekt så används .NET bindingen, som via reflection anropar invoke på metoden, alltså inget magiskt nytt, men snyggare och renare syntax.

Det finns även bindings mot COM, IronRuby, JavaScript, IronPython, så nu plötsligt blir det samma rena syntax oavsett språk :o)

dynamic game = GetGame(); //Game kan vara ett COM-objekt eller t ex ett
game.Play(); // JavaScripts-objekt

måndag, oktober 27, 2008

Nyheter i .NETs typsystem

Första vanliga sessionen på PDC, en usel presentation, men ett intressant ämne. Det handlade om att bädda in interface i det konsumerande assemblyt. Om man som i talarens exempel ska automatisera excel via COM-interrop så är interropassemblyt 1,2 MB, men med den nya kompilatorswitchen slipper man deploya det stora interropassemblyt utan får istället en kopia av de lilla man använder i sitt eget assembly. I hans lilla exempel blev det 2 kB. Så det var nummer ett: inbäddning av typer. Den andra delen var typekvivalens eller type equivalence. Detta gör att om interfacet ändras så kan man ändå använda de gemensamma delarna. Gissningsvis har detta även kommit för att bättre kunna stödja dynamiska språk, walks like duke, sounds like a duke, it must be a duke...
Sammanfattningsvis, mycket kortfattat, så får vi verktyg för att hantera system där klient- och server-kod utvecklas och deployas oberoende av varandra. Trevligt. BTW, på keynoten annonserade Microsoft sin nya serviceplattform, Azure, men det kan ni säkert läsa om någon annanstans.

First day of PDC

OK now I have finished the pre conference. This was about WCF. Juval Löwy tried to convince us that we should use WCF for all classes, that WCF is not about communication, but it's the new way of programming. Interesting. Ron Jacobs finished with some demos about how easy it is to make RESTful services with WCF 3.5.

onsdag, augusti 13, 2008

PDC and TestAutomationFx


Great, I'm going to PDC this fall :o)
BTW, the user interface toolkit integrated in Visual Studio that I mentioned before, is now released, TestAutomationFx, test it.