torsdag, september 17, 2009

Iværksætteren findes endnu, gudskelov

Det er rart at se at der stadig findes rigtige iværksættere som får en god idé samt evner at få den længere end idéstadiet.
I august var Odense .Net User Group, som jeg er medlem af, på besøg hos softwarehuset ECreo hvor ejerne Casper Stendal og Anders Wind bl.a. fortalte om et joint venture som de gik ind i for et par siden, og som i dag er kendt som eKvittering
Ideen bag firmaer er egenlig død simpel: når du køber dine varer i butikken og får en kvittering så sendes en kopi af kvitteringen op på et website, så du til enhver tid kan finde den igen, hvis der kommer en reklamation eller du af en anden grund får behov for at bevise at du har købt varen.

Citybank i USA var vist en af de første som forsøgte noget lignende tilbage i 1960'erne, men de var vist en anelse for tidligt ud :-)

Nu ser det imidlertid ud til at tiden er moden til denne service, og der er vel også på tide. Jeg har ihvertfald skyndt mig at få meldt mine kreditkort til løsningen, således at jeg langt om længe får styr på alle de forbistrede kvitteringer. Hov, jeg glemte vist at nævne at forretningsmodellen er bygget således, at det er butikkerne der betaler for servicen, som almindelig forbruger er det gratis at melde sit dankort ind i ordningen.

Disclaimer: jeg har ikke penge eller andre interesser i firmaet, men jeg synes blot at det er en smadder god idé.

søndag, august 02, 2009

Updating a SPListItem on Item Added in a Document List

Yesterday a colleague of mine at Flowit was working on an Event Handler in a Document Library, and the idea was to add some information from the site to the SPListItem when a new document was added.
Since there was no need for validation it sure looked like the event to use should be the ItemAdded event, but then all hell broke loose.
When calling Item.Update() SharePoint threw an exception :
Microsoft.SharePoint.SPException: Document Locked
The document you are attempting to edit is locked and cannot be updated.

Since this happened in the ItemAdded event we had to assume that the sequence was something like:
  1. Create new SPListItem
  2. Attach document to the SPListItem
  3. Release document
We checked whether the AttachmentAdded event was triggered but is was not.
We found a posting from Jan Tielens (U2U) from back in 2004, but the solution he used was more like a hack so we really didn't liked it.

Some time ago I read some of the documentation for SPList and noted the description for SPList.SystemUpdate() :

Updates the database with changes made to the list item, without effecting changes in the Modified or Modified By fields.

Back in the day I worked a lot with systems based on optimistic concurrency control and the only reason for SystemUpdate() that I could see, was to bypass the concurrency control!!!!

But in this case that bypass proved to be very handy, as it solved the issue:
call .SystemUpdate() rather then .Update() and the ListItem is updated as planned.

Adresse Web Service - Del III - TDD i praksis

En af de almindeligste fejl i forbindelse med TDD er, at man midt i et "rød, grøn, refactor" forløb får en god idé til forbedring af designet og så straks begynder at implementere denne idé. Ergo man bliver ikke færdig med det igangværende forløb, samt at man begynder at implementere ny kode uden at skrive testen først.
Måden til at undgå dette er, at udvikleren løbende noterer idéer til nye funktioner/klasse på en TO-DO liste, og så holder fokus på det igangværende arbejde. Jeg prøvede 2-3 forskellige TO-DO programmer men for mig er løsningen nu noget så lavpraktisk som en kuglepen og en notesblok.

Codeplex' IssueTracker dækkede rigeligt behovet for at holde styr på feature requests, men samtidig var det absolut nødvendig, for den var medvirkende til at jeg holdt fokus på een feature af gangen, frem for at flagre fra det ene område til det andet.

onsdag, juni 17, 2009

Adresse Web Service - Del II

Adresse WebService-projektet er nu ved at være klar til Release 0.1.

Projektet går i alt sin enkelthed ud på at demonstrere nogle af de mange måder man kan bruge de gratis web services som du finder på http://www.ebst.dk/aws

CodePlexprojektet finder du her: AdresseWebServiceEksempler

Hvis du har spørgsmål eller kommentarer skal du være velkommen til at skrive i debatområdet på projektet, samme gælder naturligvis hvis du har ideer til en ny feaure request, dog skal disse logges i projektets Issue Tracker.

Et andet sted af interesse kunne være AWS-gruppen på digitaliser.dk.

lørdag, maj 30, 2009

XOBNI


En af mine kollegaer viste mig i denne uge en af de sjoveste (og nyttige) Add-ins til Outlook jeg nogensinde har set.


Som du kan se til venstre viser XOBNI informationer fra et hav af kilder (Outlook, Facebook, LinkedIn, Skype osv.) og det virker rigtig overbevisende.
En anden meget nyttelig funktionalitet er, at du kan se de personer som din valgte person nogensinde har skrevet til (hvor du også var med på mailen).

XOBNI ( Inbox stavet bagfra) er gratis og noget du helt klar bør overveje :-)

søndag, maj 17, 2009

Adresse Web Service - Del I

Erhvervs- og Byggestyrelsen, Kort & Matrikelstyrelsen og IT- og Telestyrelsen igangsatte i 2006 et projekt som går ud på at give adgang til de officielle adressedata ved hjælp af webservices:
• Ca. 2,4 mio. adgangsadresser (dvs. hoveddørsadresser)
• Ca. 3,0 mio. enhedsadresser (dvs. entredørsadresser inkl. evt. etage- og dørbetegnelser)
• Ca. 108.000 vejnavne samt
• 1078 postnumre og 98 kommuner

I marts 2009 fik de første udvalgte udviklere adgang til de gratis web services på http://www.ebst.dk/aws og jeg har fået kigget lidt på mulighederne.

Den første idé som falder folk ind når man snakker om adreser er, at der nu burde være mulighed for at få valideret de tusindevis af adresser som er glemt i kunder- og leverandørdatabaserne. Dette er bestemt også noget man bruge AWS til, men jeg har valgt at se mulighederne fra en anden vinkel:
Frem for at validere eksisterende data vil jeg sikre at de nye data er korrekte fra starten af.




Databaseschema til adresser

Mange har en struktur med postnummer, postdistrikt, adresse1, adresse2, evt. husnummer. Dette er en meget logisk løsning, som tilmed passer fint til den måde vi tænker på adresser på i dagligdagen.


En helt anden måde at håndtere adresser på er, at gemme de nøgler som tilhører adresserne. Det er nok kun et fåtal som kender disse nøgle:
  • kommunenummer, hver komunne har et firecifret id-nummer
  • vejkode, her tænkes på de kommunale vejkoder. Hver vej i komunnen har et firecifret id-nummer.
  • husnummer, Husnummer incl. et valgfrit bogstav

I OIO-termer hedder de hhv. MunicipalityCode,StreetCode,StreetBuildingIdentifier og er dokumenteret på http://digitaliser.dk

Når du har fået disse tre nøgler ned i databasen har du ikke alene fået en helt entydig adresse, men du har også fået adgang til at berige dine adresseoplysninger med f.eks. geokodning af selve adressen. En af basisoplysningerne på en adresse er dens Northing og Easting, hvilket er koordinatsættet for selve adressen (ikke længde- og breddegrader). Så vidt jeg husker er hverken Google Maps og Virtual Earth i stand til at bruge Northing og Easting, så de skal konverteres til Lat/Long inden da. Kort- og Matrikelstyrelsen har en konverteringsværktøj, men dette vender jge tilbage til i en af de kommende posts.

Fremfor at hente listerne med f.eks. kommunenavne og tilhørende kommunenumre direkte fra web servicen når jeg skal bruge dem, har jeg valgt en strategi hvor jeg efter behov, henter alle basisoplysningerne (kommuner, veje og husnumre) og gemmer dem i en lokal database.
Jeg arbejder pt. stadig med koden men håber på at frigive den på codeplex indenfor de nærmeste uger.

Pt. er jeg løbet ind i nogle udfordringer. Ifølge Kristian K. Hansen i Erhvervs- og Byggestyrelsen understøtter de nuværende web services ikke at man henter alle basisoplysningerne (kommuner, veje og husnumre). "Servicene er pt. ikke bygget med komplette download for øje - de er mere ment som en mulighed for at parse, validere og hente enkelte adresser. - Jeg vil dog tage dit ønske med til overvejelse i fremtidige versioner."

Jeg ser naturligvis frem til at Erhvervs- og Byggestyrelsen udvider web servicen med de nødvendige kald, så vi fremover kan arbejde med valide adressedata.

torsdag, maj 14, 2009

Adgang til dine bookmarks overalt

Da jeg i forbindelse med reinstallation af min arbejdsamaskine flere gange har mistet hele min bookmarksamling begyndte jeg at kigge efter en løsning hvor alle bookmarks blev opbevaret uden for den lokale maskine.
Den bedste løsning som jeg kunne finde var FoxMarks der, som havdet antyder, kun virker på Firefox. Konceptet er at alle bookmarks løbende synkroniseres med en central server, så jeg har adgang til dem fra en hvilken som helst maskine, blot der er installeret Firefox.
Det var som sagt situationen for godt et år siden. Fornyligt skiftede Foxmarks navn til XMarks idet løsningen nu også findes i både en safari- og IEversion, så nu har jeg nøjagtigt de samme bookmarks i både FF og IE!! Nåh ja, det hele er selvsagt gratis.

søndag, marts 15, 2009

Active Directory på 8 timer

Hos min arbejdsgiver Flowit arbejder vi via SharePoint op imod kundernes eksisterende Active Directory, og det har ofte været en blandet oplevelse. Disse AD'er har ofte mange år på bagen og været gennem mange fussioner og udspaltninger, så de kan være ret vanskelige at gennemskue.
For at klæde os bedre på til opgave entrerede vi med Global Knowledge, som i samarbejde med os sammensatte et superkoncentreret AD-kursus i firmaregi.
Det er virkelig imponerende så megen viden, som Bjørn Hansen fra Globalknowledge kunne presse ind i vore hoveder på en enkelt dag. Dette skyldes vel primært at han har en stor og bred viden om både AD og de omkringliggende teknologier. At vi så tilmed var særdeles motiverede, har vel kun gjort opgaven lettere.
Herfra skal der lyde en tak til Bjørn for en faktastisk dag, og vi er nu klar til at tackle de AD-udfordringer som helt sikkert vil komme lige rundt om hjørnet.

lørdag, januar 10, 2009

Egne underpunkter i SharePointlisters menuer

Jeg har i løbet af den sidste måneds tid kigget på hvordan man kan tilpasse menupunkterne i en SharePointliste.

I dette tilfælde ønskede man at tilføje et menupunkt til "New" sektionen på et dokumentbibliotek, således at brugeren kan vælge en dokumentskabelon fra en central liste, frem for at liste samtlige 45 skabeloner i downdown'en.



Jeg viste fra et tidligere SharePointkursus at jeg skulle ændre i featurelisten under 12'er folderen for at tilpasse menuerne.




MSDN har en glimrende artikel om emnet som jeg brugte som udgangspunkt. Resultatet af denne artikel er at du har nye menupunkter på alle de steder du kunne ønske det.

Et webcast der viser stort set det samme kan du finde her

Da kunden specifikt havde ønsket at et klik på "New" skulle aktivere det specielle menupunkt kiggede jeg på hvordan jeg kunne sikre dette. Tilsyneladende kan man ikke direkte angive hvilket af de underliggende menupunkter der aktiveres når man klikker på "New", det vil altid det første menupunkt der aktiveres.

Løsningen på dette kundeønske var i dette tilfælde at fjerne evt. contant types således at der ikke længere findes en default content type. "Allow management of content types" under "Advanced Settings" skal være slået til, for eller dukker der automatisk en default content type op.

Uden Folder






Om brugeren skal have mulighed for at skabe nye foldere er helt op til dig, det påvirker ikke den ønskede funktionalitet.


Med Folder


Jeg er endnu ikke kommet helt i mål, selv om mit nye menupunkt er det eneste under "new" så er det ikke en content type og vil derfor ikke blive aktiveret når brugeren klikker på "New". I dette tilfælde er den fundne løsning sandsynligvis tilstrækkelig idet et klik på "New" blot vil åbne den underliggende menu, hvor brugeren så kan vælge det korrekte menupunkt :-)

Af ukendte årsager indeholder artiklens eksempel ikke attributen ImageUrl som specificerer ikonet som du ønsker at vise i forbindelse med dit menupunkt, f.eks. ImageUrl="/_layouts/images/ICEML.GIF", og så ser det sådan ud.