Mercurial

Zoals is te lezen heb ik gekozen om Mercurial te gaan gebruiken als versiebeheer systeem voor eigen code.
Na installatie had ik al vrij snel een nieuwe repository gemaakt met daarin m’n code. Je start gewoon de command prompt op, gaat naar de map welke in het versiebeheer systeem moet komen. Tikt het volgende in:

hg init
hg add
hg com -m "Initial commit"

3 commando’s, dat is alles wat gedaan moet worden om je code in een nieuwe repository te plaatsen. Een redelijk goede guide is hier te vinden: https://mercurial.selenic.com/guide/

Omdat ik niet heel bekend was/ben met DVCS systemen heb ik eerst het een en ander ingelezen over de werking en wat de bedoeling precies is. Voor Mercurial is er een super goede tutorial geschreven door Joel Spolsky op https://hginit.com/. Hier heb ik veel informative vandaan gehaald over hoe ik moet werken met Mercurial.

Ook het hosten van je code op een server is enorm eenvoudig. In je repository tik je het volgende hg serve

Zodra dat is gedaan zal je repository gelijk op poort 8000 zijn te bereiken, dus bijvoorbeeld https://localhost:8000/. Hier was ik heel blij mee.

Toen ik klaar was om m’n repository te vullen met m’n projecten kwam ik toch een beetje bedrogen uit. Blijkbaar is het niet de bedoeling om verschillende solutions, verspreid over meerdere locaties op je systeem, in 1 repository op te slaan. Voor iedere solution is het dus van belang om een nieuwe repository te maken wanneer deze niet op 1 locatie staan. Dit gooide een beetje roet in het eten, aangezien ik had verwacht dat dit wel de bedoeling was.
Gelukkig kun je met het hg serve commando via een argument opgeven op welke poort deze dient te draaien, waardoor het mogelijk is om meer dan een repository te hosten op je systeem. Dit vond ik zelf niet een enorm fijne oplossing, maar als het niet anders kan, dan is het zo. Als hier geen alternatief voor zou zijn geweest, dan was ik waarschijnlijk weer overgestapt op een ander systeem. Gelukkig heeft Jeremy Skinner op z’n weblog gepost hoe je meerdere repositories op je Windows Server kan hosten (https://www.jeremyskinner.co.uk/mercurial-on-iis7/).
Deze tutorial heb ik dan ook stap voor stap gevolgd. Enige punt waar ik tegen aanliep was dat hij schrijft over de hgwebdir.cgi, maar die kon ik niet vinden in mijn versie van Mercurial, hier heb ik dan ook hgweb.cgi gebruikt. Deze lijkt ook prima te werken. Door het volgen van deze hele visuele tutorial heb ik nu een werkende Mercurial webserver met al m’n solutions in verschillende repositories.

Read more →

Nieuw versiebeheer systeem

Onlangs ben ik op zoek gegaan naar een beter versiebeheer system voor m’n hobby- en Vinit projecten. Zelf ben ik altijd behoorlijk tevreden geweest over Visual SourceSafe van Microsoft, hoewel niet iedereen die mening deelt (Coding Horror & High Programmer) Zelf ben ik van mening dat zo lang iets voldoet aan de eisen en wensen die je hebt dat het goed genoeg is.

Omdat SourceSafe toch wel oud begint te worden ben ik vorig jaar eens gaan kijken naar Subversion (SVN), omdat iedereen daar wel enthousiast over is/was. Na enkele projecten in SVN te hebben gezet lijkt het inderdaad wel een prima vervanger. Nadeel dat ik ondervond was dat het browsen in de verkenner enorm werd vertraagd. Tevens heb ik nogal eens ruzie bij het verwijderen, verplaatsen of hernoemen van bestanden. Dit zal allemaal vast kunnen worden ingesteld en in de handleiding staat vast ook goed uitgelegd hoe je met SVN moet werken, maar dat heb ik allemaal niet gedaan. Nog een nadeel van SVN vind ik dat in iedere map een .svn-map wordt aangemaakt. Door al deze nadelen is SVN geen geschikte keus voor versiebeheer systeem voor mij.

Op het werk gebruik ik graag Team Foundation Server (TFS) van Microsoft. Dit is een prachtig pakket, enorm uitgebreid, waardoor er een heel team mee kan werken van ontwikkelaar tot tester tot project manager. Voor mij is hier het grootste nadeel dat het (veel) geld kost. Voor een middel grote organisatie is het een klein bedrag als je kijkt wat je er voor terug krijgt, maar het is te veel voor mijn portemonee. Tevens zijn de systeem eisen redelijk hoog, zeker als je alleen maar het versiebeheer gedeelte van TFS wilt gaan gebruiken. Dan heb je eigenlijk een tank om een mug dood te schieten. Jammergenoeg valt TFS dus ook af.

Read more →

Public key token in Visual Studio

Onlangs liep ik weer tegen het probleem aan dat ik de PublicKeyToken van m’n gegenereerde assembly moest zien te vinden. Er zijn natuurlijk verschillende mogelijkheden om hier achter te komen, maar de mooiste is toch wel de tip van Jeremia Clark.

Op z’n weblog heeft hij beschreven hoe hij de token krijgt door middel van het aanmaken van een nieuw External Tools commando, de link: https://blogs.msdn.com/b/miah/archive/2008/02/19/visual-studio-tip-get-public-key-token-for-a-stong-named-assembly.aspx

Het is dus de bedoeling om een nieuw commando te maken welke sn.exe oproept.

Als argument wordt er dan -T $(TargetPath) opgegeven.

Nog even het vinkje aan zetten dat de waarde in de Output window moet komen en klaar is het. Nu kun je vanuit het Tools menu heel snel de Public Key Token achterhalen.

Read more →

UAC volledig uit en Administrator in Windows 7

Na lange tijd van ontwikkelen in virtuele machines, was ik vandaag ook weer eens bezig op m’n lokale systeem iets te ontwikkelen. Hoewel ik de UAC al eens eerder had uitgeschakeld, kon ik toch niet echt goed m’n werk doen.

Zo kon ik nog steeds niet bestanden van de Windows verkenner naar Visual Studio slepen, had ik niet voldoende rechten om websites in IIS te maken via Visual Studio en nog meer van dat soort dingen.

Wat blijkt, onder de gebruiker instellingen kun je nog wat extra’s configureren voor de beveiliging van je systeem.
Wanneer je naar je account toe gaat in het configuratiescherm, dan krijg je iets te zien wat vergelijkbaar met de volgende afbeelding:

Bij de optie Change User Account settings is ook een slider te zien. Normaal staat deze op het derde niveau van onder. Nu heb ik hem helemaal naar beneden gesleept, zoals hieronder is te zien. Na een herstart van het systeem was ik eindelijk een ’echte’ administrator op het systeem. Zonder problemen kan ik nu het hosts bestand aanpassen, websites maken vanuit VS2010, etc.

Wel jammer dat dit noodzakelijk is om een beetje fatsoenlijk te kunnen ontwikkelen op je lokale systeem, maar het is niet anders.

Read more →

Bookmarks in PDF maken

Onlangs ben ik weer begonnen met het studeren voor de nieuwe certificaten voor ASP.NET 4.0 en Sharepoint 2010. Hier zijn momenteel al enkele goede boeken die kunnen helpen met het leren van de materie, zoals:

Om m’n tablet toch weer eens goed te kunnen gebruiken, heb ik gekozen voor het pdf formaat van deze boeken. Het lezen gaat prima, echter is er 1 groot nadeel van de huidige pdf readers, namelijk dat je geen bookmarks (ezelsoren) kunt maken in een boek. Zo moet je dus zelf onthouden waar je in welk boek bent. Niet echt handig.

Gelukkig is er iemand zo goed geweest die zich hier ook aan ergerde en een mooie javascript plugin heeft geschreven voor Adobe PDF Reader. Het script is hier te vinden, inclusief de manier hoe het geinstalleerd dient te worden: https://www.aldenta.com/2006/09/15/plugin-bookmark-a-page-in-your-pdf/

Hopelijk wordt deze functionaliteit nu ook eens standaard geimplementeerd in de readers.

Read more →

Sharepoint 2010 new web application disabled

Gisteren heb ik voor het eerst sinds tijden weer een Sharepoint 2010 omgeving in elkaar gezet. Vorige keer dat ik dat had gedaan was toen Beta 2 net uit was. Ook toen liep ik al tegen een probleem aan, namelijk dat ik geen nieuwe web applicaties kon maken. Op dat moment was ik er maar van uit gegaan dat het kwam omdat het nog een beta product was of iets dergelijks.

Het lukte me gisteren nog steeds niet. Het icoon New was disabled, waardoor ik niet een nieuwe web applicatie kon maken.

Verschillende resources op internet schreven dat de DisableLoopbackCheck fix kon helpen, Internet Explorer met administrator privileges moet worden opgestart, etc. Al die dingen had ik al gedaan. Wanneer je Central Administration opstart krijg je namelijk automatisch al de UAC naar voren.

Uiteindelijk heb ik maar de UAC uitgeschakeld en opnieuw opgestart. Resultaat is dat de New knop nu wel ge-enabled is.

Beetje jammer dat je voor een Microsoft product de UAC uit moet schakelen om het goed te laten functioneren.

Read more →

Systeem account kan geen workflow starten

Na het oplossen van het probleem dat in de vorige post wordt beschreven, wist een collega van mij te vertellen dat dit wellicht te maken kon hebben met het KB artikel 947284 (https://support.microsoft.com/kb/947284).

Hier staat namelijk dat er vanaf Servicepack 1 van Sharepoint een wijziging is geweest in het security model. Het Systeem-account mag namelijk niet meer ‘declaratieve’ workflows opstarten. Wat ‘declaratief’ in deze context betekend weet ik niet, maar het lijkt er dus op dat het Systeem account helemaal geen workflows meer op mag starten.

Wanneer je code uitvoert met RunWithElevatedPrivileges, dan wordt dit onder het Systeem-account uitgevoerd, omdat dat account alle rechten zou moeten hebben op de web applicatie.

Dit had ik dus ook in mijn stuk code gedaan. Om er zeker van te zijn ben ik even ingelogd als het Application Pool account op m’n Sharepoint site. Als naam stond hier inderdaad dat ik het Systeemaccount was.
Het is dus zeker een nuttig KB om te kennen bij het schrijven van code dat afhankelijk is van workflows.

Sowieso is het handig om de best-practices te kennen voor het inrichten en configureren van een Sharepoint omgeving. Op zich wist ik namelijk wel dat deze specifieke omgeving niet echt best-practice was, maar had niet gedacht dat zoiets eenvoudigs als het starten van een workflow dan niet meer zou gaan werken.

Read more →

Automatisch workflow starten bij aanmaken item via code

Enige tijd geleden moest ik iets maken voor een klant dat vanuit een ‘gewone’ ASP.NET pagina een item aanmaakte in een Sharepoint lijst. Op zich geen probleem, zeker niet omdat er in dezelfde application pool werd gewerkt, waardoor er gewoon gebruik gemaakt kon worden van de RunWithElevatedPrivileges die Sharepoint biedt.

Dit had ik dan ook al snel voor elkaar, maar bij het testen bleek dat de workflow van de lijst niet automatisch werd gestart. Aan de lijst hing namelijk een workflow die automatisch zou moeten starten wanneer er een nieuw item in de lijst wordt aangemaakt.

Na wat zoeken ben ik er achter gekomen dat dit ’normaal’ gedrag is en er een work-around voor is, namelijk door de workflow ook zelf via code op te starten. Als je dit weet is dat op zich prima, maar ook dat levert een foutmelding op. De melding was (vrij vertaald): ‘Failed to start (retrying)’. Enkele minuten later start de workflow alsnog. Wat wel vervelend is, is dat de gebruiker dit niet kan zien, omdat de status continu hetzelfde blijft, totdat de workflow is beeindigd.

Zelf kan ik hier prima mee leven, zeker omdat ik geen alternatief had.

Vandaag kreeg ik de melding dat er nog iets anders mis ging in het formulier. Na deze melding al vrij snel opgelost te kunnen hebben, heb ik toch even verder gekeken naar dit bovenstaande probleem. Na even zoeken kwam ik langs een post op het MSDN forum waarop staat dat je de workflow ook via de Sharepoint webservices kunt gaan opstarten. Logisch, maar had niet verwacht dat dat een oplossing zou zijn.

Read more →

Nog steeds geen echte support voor GUID identity velden in EF4.0

In m’n database maak ik gebruik van een idenity veld dat bestaat uit een Guid. Deze guid wordt automatisch gegenereerd binnen SQL Server door middel van de newsequentialid() functie (dit kan uiteraard ook met newid()). Dit betekend dus dat ik in m’n code niet een guid hoef aan te maken, omdat SQL dit al zelf doet. In de op te slaan entity vul ik het ID veld dus ook niet.

Nadat het insert commando is uitgevoerd verwachtte ik dat het ID veld zou worden gevuld met de nieuw aangemaakte guid, maar niets is minder waar. Het blijft een Guid.Empty (00000000-0000-0000-0000-000000000000). In het EF1.0 werkte dit inderdaad niet, daar was helemaal geen support voor Guid identity velden. Er was echter beloofd om dit wel op te lossen in het EF4.0. Na een kleine zoektocht kom ik op allerlei pagina’s en sites die het hebben over EF1.0 en Linq-to-Sql, iets waar ik in het verleden ook al dit probleem heb gehad.

Met de ervaring die ik uit het verleden had, heb ik ook al even zelf zitten klikken en zag dat de StoreGeneratedPattern op None stond. Deze heb ik op Identity en op Computed gezet. Beide keren was dit niet de oplossing.

Read more →

Entity Framework in een N-Tier en N-layered design

Momenteel ben ik met een project bezig dat met 2 tiers werkt (de database even niet meegerekend). Er is een presentatie laag (MVP) en deze staat in verbinding met een WCF service, de 2e tier. Deze 2e tier heeft dus een service laag, maar ook een business- (BL) en een data access laag (DAL). Dit is tegenwoordig een redelijk standaard design.

Omdat ik het Entity Framework wil gebruiken (https://jan-v.nl/post/entity-framework-4.0-in-een-n-tier-applicatie-met-wcf-implementeren/) zal alleen de DAL toegang moeten hebben tot het Model. De verschillende Entities worden wel in alle projecten gelinkt (service layer, busines layer en data access layer).

Het design heb ik al een tijd goed werkend, echter toen ik het geheel wilde gaan testen liep ik tegen problemen aan. De eerste fout die ik tegen kwam was de volgende:

ArgumentException: The specified named connection is either not found in the configuration, not intented tob e used with EntityClient provider, or not valid

Dit was al snel opgelost door de connectiestring in de web.config van de service te plaatsen.

Nadat ik dat had gedaan kwam er een vervelende fout naar voren, namelijk:

MetadataException: Unable to load the specified metadata resource.

Er is hier veel over te vinden op het internet en komt er op neer dat de metadata van de edmx niet in de dll zijn meegenomen, of dat de referenties in de connectiestring niet correct zijn.

Read more →