Generated by All in One SEO v5.0.0.1, this is an llms.txt file, used by LLMs to index the site. # KajBonfils.com Building software development teams ## Sitemaps - [XML Sitemap](https://kajbonfils.com/sitemap.xml): Contains all public & indexable URLs for this website. ## Posts - [What is good code?](https://kajbonfils.com/2019/01/what-is-good-code/) - How to create a common language to allow a team to take ownership of code quality - [Download Free Pester Cheat Sheet](https://kajbonfils.com/2016/05/download-free-pester-cheat-sheet/) - I recently started testing my PowerShell scripts using the Pester framework. The documentation on GitHub is excellent but I was missing a cheat sheet that can be printed and used as a reference while learning. So I created it. Download Pester-cheat-sheet 1.0.1 here and share it in your office. If you like it, please give a heads - [The layered architecture of architects vs. the onion](https://kajbonfils.com/2016/01/the-layered-architecture-of-architects-vs-the-onion/) - Early involvement of architects in the agile process is very important. Organising the architects around the development team vs. as a hierarchy can help - [Non-Functional Requirements - The basis of your software architecture](https://kajbonfils.com/2016/01/non-functional-requirements-the-basis-of-your-software-architecture/) - How do we make a conscious decision on which architecture to choose? The answer is Non-Functional requirements? - [It's not in our scope.... It's the other team!](https://kajbonfils.com/2015/11/its-not-in-our-scope-its-the-other-team/) - Scope blaming is a common anti-pattern for professional teams. Every team blame the other team for not implementing a feature. - [Tabbed Page icons are case sensitive](https://kajbonfils.com/2014/07/tabbed-page-icons-case-sensitive/) - I have just spend most of an hour to make the app I'm currently doing work on my devices. I have been working in the simulator during development, and everything has been great, but when i deployed to my iPhone, the app just stopped working. I didn't close down, but it didn't load completely either. - [Passed the certification exam](https://kajbonfils.com/2014/06/passed-certification-exam/) - I just passed the Mobile Developer Certification Exam - but just barely with 80% correct answers. The exam contained a lot of questions about compilation, garbage collection etc. as well as some more general questions regarding software development. Xamarin has chosen ExamBuilder as the software provider for the exams. I had a lot of problems - [Onion architecture with Xamarin and PCL](https://kajbonfils.com/2014/05/onion-architecture-with-xamarin-and-pcl/) - Over the short history of Xamarin, there has been a bunch of different ways to share code between platforms, when using Xamarin to create IOS, Android and Windows Phone applications. At first, there were only simple ways to share code, like file linking where the developer had to drag and drop files from one code - [Studyguide for Xamarin Mobile Developer exam](https://kajbonfils.com/2014/05/studyguide-for-xamarin-mobile-developer-exam/) - I have collected the links to additional information provided in each of the session videos. If any links are missing, please add them in the comments. The link collection can be used as a studyguide for Xamarin Mobile Developer Exam. XAM101 Intro to Mobile / Kickstart http://docs.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications/ AND101 Intro to Android with Xamarin Studio http://docs.xamarin.com/guides/android/getting_started/ - [Review of Xamarin 140: Intro to Cross-Platform Mobile Development](https://kajbonfils.com/2014/03/review-xam-140-intro-to-cross-platform-mobile-development/) - Im just about to join a session on Xamarin University, XAM 140: Intro to Cross-Platform Mobile Development. I spend last night reading through the course material made available by Xamarin University. And basically this course is about two things: 1) Learning how to reference a shared assembly 2) Learning how to link to a shared file - [Strongly typed databinding in WinForms - aka. no more magic strings!](https://kajbonfils.com/2013/07/strongly-typed-databinding-in-winforms-aka-no-more-magic-strings/) - I've been working on a WinForms project for a while and I'm getting progressively more tired of the magic strings used when doing databinding. (See MSDN documentation here) The problem is that the datamember of the datasource being bound to the control is a plain old System.String: e.g: lblName.DataBindings.Add("Text", myViewEntity, "UserName"); I can live with - [Testing private members with PrivateObject and PrivateType](https://kajbonfils.com/2012/10/testing-private-members-with-privateobject-and-privatetype/) - I'm currently working on a legacy project that has been ported from Visual Studio 2010 to Visual Studio 2012. The project uses the Visual Studio 2010 feature that allowed to access private members through some automatically generated code. In Visual Studio 2012, this causes a warning when compiling: This task to create private accessor is - [Why are my clients always wasting their money on me?](https://kajbonfils.com/2011/08/why-are-my-clients-always-wasting-their-money-on-me/) - Update 2011/08/31: I've had a lot of response from other freelancers with similar experiences. They suggested a few extra issues which have been added below. Thanks. ----------------------------- As a freelancer / contractor, I startup on new projects or new clients every 6 months or so. I usually get the job through an agent after an - [Developer pc](https://kajbonfils.com/2011/05/developer-pc/) - Its been two years since my last blog post. I havent died, but even though im still breathing, its been a coupple of busy years. Another kid, a new house etc have taken all my time. But things are looking brighter and im starting to get more tech focused again. Thia blog post is about - [TechEd day 4](https://kajbonfils.com/2009/05/teched-day-4/) - Day 4 on TechEd is going to be spend on the following program:Test driven developmentCustom features that enabled users to develop rate and share content with moss 2007. -No budget for tools - hot tools on a limited budgetMS silverlight on sharepoint architectural and development patternsDesign patterns in the real world.net on linux and macI - [TechEd Day 3 followup](https://kajbonfils.com/2009/05/teched-day-3-followup/) - Day 3 went off with the Zen of Architechture by Juval Lowy... se other post.After that breathtaking session, I went for a certification session. The concept is basically that a guy spends 1 hr telling you how to pass a certification test. What is necessary to know, what isn't. I attended a session covering the - [The Zen of Architecture](https://kajbonfils.com/2009/05/the-zen-of-architecture/) - Listened to The Zen of Architecture by Juwal Lowy... He has some very interesting points. Everything can be found in the iDesign.net website. Read and learn.I think the principles makes sence, but it might be a little over engineered for the relatively small projects that im handling. If i implemented his thoughts, I would spend - [TechEd 2009 Day 3](https://kajbonfils.com/2009/05/teched-2009-day-3/) - I didn't make it to the blog yesterday, but I will try to put a little info on later about the stuff that happened. Today is going to be an exiting day. There is so many sessions I would like to follow but too little time: Slot 1: Zen of architecture - with Juwal Lowy... - [First day at Tech Ed 2009](https://kajbonfils.com/2009/05/first-day-at-tech-ed-2009/) - The TechEd conference of 2009 is kicked off. I am attending with two colleagues from D60, Thomas Garp and Henrik Drachman. The stored procedure panel I really had high expectations to this one. Finally we were going to end the battle between the T-SQL and SP guys. The panel discussed the various problems with both - [Nerdy joke.](https://kajbonfils.com/2009/02/nerdy-joke/) - Its early morning and a long day is ahead... I thought this might start me up in a decent way: A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?' - [Code markup in Tech blogging](https://kajbonfils.com/2008/10/code-markup-in-tech-blogging/) - Anybody who knows a good tool for tech blogging - especially for making code markup? Often it is necessary to include a peace of code in this blog, but the result looks awful. The only posible way to make some kind of format is to encapsulate the code in blocks. An alternative way is - [Language confusion in Moss](https://kajbonfils.com/2008/07/language-confusion-in-moss/) - I had yet another Moss confusion this morning. I have installed an English Moss and then configured the server with a Danish language pack. When i opened up a site directly from my development server, everything was displayed nicely in danish. The top bar greated me with a "Velkommen Kaj" (I guess even US/UK readers - [Memoryleak finally found](https://kajbonfils.com/2008/05/memoryleak-finally-found/) - I have had a long time bug in a website, causing memory to leak. I have really tried everything to ensure that all objects were disposed etc. But nothing helped. In the end, I handled it by recycling the process IIS process when the memorylevel was to high. IT IS NOT A GOOD OPTION... But - [](https://kajbonfils.com/2008/04/84/) - Composite Control Event in ASP.NETThis blog describes the different events that are relevant for rendering a composite control. It is very important to use these events correctly if you want the correct results. Even small mistakes in the use of the events can cause problems later on with events etc. Writing a composite control is - [System.DirectoryServices.AccountManagement namespace](https://kajbonfils.com/2008/04/system-directoryservices-accountmanagement-namespace/) - The AccountManagement namespace is part of the .Net 3.5 framework, and provides an easy way to access and modify directory services.I used to have my own ADHelper library that encapsulated the methods in System.DirectoryServices namespace.Recently, i had to find out if a user was member of a specified group. This was possible, but it took - [Clean up the Using blog in Visual Studio 2008](https://kajbonfils.com/2008/03/clean-up-the-using-blog-in-visual-studio-2008/) - When you create a new class, its normally filled with using statements in the top. Usually you only use one or two of these statements. Visual Studio 2008 has a great feature for cleaning up the code:Right click somewhere in the editorSelect "Organise Usings"Select "Remove and Sort"This removes unused Usings and stort them. You can - [?? operator](https://kajbonfils.com/2007/09/operator/) - I just discovered a new Operator in .Net 2.0...the ?? operator.One of the most anoing things to do when retrieving data, is checking for null values:string myValue = dataReader.IsDBNull(2) ? string.Empty : dataReader.GetString(2);But the ?? operator makes it a lot easier:string myValue = dataReader.GetString(2)??string.Empty;Why didn't anybody tell me about this before?????Read more here : http://msdn2.microsoft.com/en-us/library/ms173224(VS.80).aspx - [Sorting a List object using different sort criterias](https://kajbonfils.com/2007/08/sorting-a-list-object-using-different-sort-criterias/) - I have often had a list of objects that i need to sort. This can easyly be done through a SortedList, but this will only sort on the provided key. I would like to descide if i want to sort by my object.Property1 or object.Property2, ascending or descending etc. Also the SortedList give me problems - [How to avoid Code Analysis CA1002](https://kajbonfils.com/2007/08/how-to-avoid-code-analysis-ca1002/) - I recently made some code like this:public class MenuItem { private List _subItems; public List SubItems { get { return _subItems;} } ... ...}This caused Code Analysis to throw a CA1002 warning - Do not expose generic lists.(see ms help: http://msdn2.microsoft.com/en-us/library/ms182142(VS.90).aspx)The help didn't help much, but i solved it pretty simply by making a class - [Export of Sharepoint Profile properties](https://kajbonfils.com/2005/02/export-of-sharepoint-profile-properties/) - I have to export the properties from on Sharepoint environment to another (from development to production).In my development environment, i create the properties i need directly in the Sharepoint administration interface. When everything is approved, i export the properties directly in the SQL server. This is done by copying part of the contents from Profile ## Pages - [Books](https://kajbonfils.com/books/) - This is not books that I wrote, but definitely something that inspired me. Clean Code and Clean Coder by Robert C. Martin These books should be mandatory reading for all software developers. Whenever I start a new task as Team Lead, I require that the entire team reads these books. They provide a common foundation - [Contact](https://kajbonfils.com/contact/) - Please get in touch using one of the following channels Twitter: @KajBonfils Email: kaj@kajbonfils.com Linkedin: https://dk.linkedin.com/in/kajbonfils KajBonfils.com Enighedsvej 7 3000 Helsingør Denmark Vat no: DK30337956 - [Courses](https://kajbonfils.com/courses/) - I'm providing courses in various areas, mainly around Legacy Code and Writing quality code. The courses are held on demand and typically at the company site. The maximum number of participants are 12 people. I'm setting this limit to make sure that all participants are actively involved and gain the greatest benefit. How I'm teaching - [About](https://kajbonfils.com/sample-page/) - Kaj is on a mission! A mission to make software systems survive, allowing them to continue to give value to the company that has invested so much energy and money. Kaj has been working with computers since he was 11 years old. He wished a Commodore 64 for Christmas, but as his parents had no ## Testimonials - [Commodore PC1](https://kajbonfils.com/testimonial/commodore-pc1/) - Commodore released the PC1 in the mid 80's. It featured a 4.77 mHz Intel 8088 processor. (Note that they included the decimals in the clock speed!. It's not 4. It's not 5. It is 4.77. It was mounted with 512kb of memory and a 5,25" floppy disk (360kb on each side) and was delivered with a ## Categories - [Uncategorized](https://kajbonfils.com/category/uncategorized/) - [Dev](https://kajbonfils.com/category/dev/) - [Agile Team](https://kajbonfils.com/category/agile-team/) - [Architecture](https://kajbonfils.com/category/architecture/) - [DevOps](https://kajbonfils.com/category/devops/) ## Tags - [.Net](https://kajbonfils.com/tag/net/) - [Blogging](https://kajbonfils.com/tag/blogging/) - [Class Review](https://kajbonfils.com/tag/class-review/) - [Code Markup](https://kajbonfils.com/tag/code-markup/) - [Conference](https://kajbonfils.com/tag/conference/) - [Consulting](https://kajbonfils.com/tag/consulting/) - [Cross Platform Development](https://kajbonfils.com/tag/cross-platform-development/) - [Data binding](https://kajbonfils.com/tag/data-binding/) - [Database](https://kajbonfils.com/tag/database/) - [Developer PC](https://kajbonfils.com/tag/developer-pc/) - [Exam](https://kajbonfils.com/tag/exam/) - [Forms](https://kajbonfils.com/tag/forms/) - [Hardware](https://kajbonfils.com/tag/hardware/) - [Icons](https://kajbonfils.com/tag/icons/) - [IOS](https://kajbonfils.com/tag/ios/) - [Joke](https://kajbonfils.com/tag/joke/) - [Onion Architecture](https://kajbonfils.com/tag/onion-architecture/) - [PCL](https://kajbonfils.com/tag/pcl/) - [Reflection](https://kajbonfils.com/tag/reflection-2/) - [Sharepoint](https://kajbonfils.com/tag/sharepoint/) - [Study guide](https://kajbonfils.com/tag/study-guide/) - [Tabbed Page](https://kajbonfils.com/tag/tabbed-page/) - [TechEd](https://kajbonfils.com/tag/teched-2/) - [Unit Testing](https://kajbonfils.com/tag/unit-testing/) - [Winforms](https://kajbonfils.com/tag/winforms-2/) - [Xamarin](https://kajbonfils.com/tag/xamarin/) - [Xamarin University](https://kajbonfils.com/tag/xamarin-university/) - [Professionalism](https://kajbonfils.com/tag/professionalism/) - [Antipattern](https://kajbonfils.com/tag/antipattern/) - [Architecture](https://kajbonfils.com/tag/architecture/) - [Non functional Requirements](https://kajbonfils.com/tag/non-functional-requirements/) - [Organisation](https://kajbonfils.com/tag/organisation/) - [Architects](https://kajbonfils.com/tag/architects/) - [DevOps](https://kajbonfils.com/tag/devops/) - [Pester](https://kajbonfils.com/tag/pester/) - [Powershell](https://kajbonfils.com/tag/powershell/) - [Cheat-Sheet](https://kajbonfils.com/tag/cheat-sheet/) - [team](https://kajbonfils.com/tag/team/) - [clean code](https://kajbonfils.com/tag/clean-code/) - [tech team](https://kajbonfils.com/tag/tech-team/) - [uncle bob](https://kajbonfils.com/tag/uncle-bob/) - [code quality](https://kajbonfils.com/tag/code-quality/) ## Stats Types - [view](https://kajbonfils.com/wpa-stats-type/view/) - [Chrome](https://kajbonfils.com/wpa-stats-type/chrome/) - [Windows](https://kajbonfils.com/wpa-stats-type/windows/) - [Android](https://kajbonfils.com/wpa-stats-type/android/) - [unknown](https://kajbonfils.com/wpa-stats-type/unknown/) - [Safari](https://kajbonfils.com/wpa-stats-type/safari/) - [Macintosh](https://kajbonfils.com/wpa-stats-type/macintosh/) - [Linux](https://kajbonfils.com/wpa-stats-type/linux/) - [iPhone](https://kajbonfils.com/wpa-stats-type/iphone/) - [event](https://kajbonfils.com/wpa-stats-type/event/)