Code of conduct when conducting code

"... why on earth are we doing so many projects that deliver such marginal value?" - Tom DeMarco

Creating a jquery plug-in: BubbleHints

clock March 7, 2010 15:03 by author christerdk

I have been playing with jQuery lately and I have gotten really fond of how much more one-to-one front end development has become. Earlier one had to do all kinds of tweaks to get things right, and the annoyance of that sort trial-and-error development have kept me away from doing anything really serious client side development. Sure, I've done many web applications but none with what the trendy Web 2.0 kids want today :o)

After poking around with jQuery I decided that I had to try and develop a plug-in. You know, not only using jQuery but also developing something that can be reused.

First a little history: Back in 2003 or something like that, my old time study friend and client side developer Kim, who I had a company with back in 1998-1999, handed over some client side code that my business partner at that time, Anders, and I could play with and use as we wanted. It was a nice little javascript snippent and some images which made up some client side functionality, that would show a little bubble with help text over for example an input box.

Anders and I made extensions of all the ASP.NET web controls, including the client side script and images. So, in essence, instead of using asp:textbox we used kwd:textbox, and could then write BubbleText = "whatever", and the user would get that shown. Pretty nice, and very welcomed by the end users of our applications.

So as I was playing around with jQuery I came to remember this client-side functionality and thought that it was a pity that it wasn't available on the more and more popular ASP.NET MVC platform. (Well, basically on any platform, but using it with ASP.NET MVC was my first concern). So I sat down and started investigating was needed to make a jquery plug-in.

The end result I have named BubbleHints. A bubblehint simply looks like this:

It's a standard jQuery plug-in with no ties to ASP.NET MVC and can be used on any web platform. Tested with Google Chrome, Firefox and Internet Explorer.

Check out the examples.

Download examples, plug-in and images in a zipped package.

Feedback is welcome!

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


What’s the lesson of this story?

clock February 10, 2010 19:11 by author christerdk

Not so long time ago I released an application on my mobile broadband blog called Mobile Broadband Logging Monitor. It’s purpose is to help non-techincal users diagnose and discover if they’re affected by the heavy logging problems, that some of the big mobile broadband connections softwares suffer from.

The following story is about the creation of this piece of relatively simple software, and I’d like to share some of the thought I’ve had while making it.

First, a small question. What’s the difference between the applications shown in the pictures below?

image[3]  image[3]

Ok, I was cheating for theatrical effect. The pictures are the same. Read more, and you’ll know why I asked.

The story of the software begins with the issues about mobile broadband connection clients logging way too much information. I had made plenty of blog postings on what the issues were and how to solve them, but I wanted to make a diagnostic tool for everyone to use so that they could see if they were affected or not.

So, having thought for a while creating this software for a while and while feeling inspired, I sat down and started coding. I had no formal specification for the software, as I usually have on my job, but of course, I had some goals. The software had to be able to diagnose several different types of mobile broadband software, in various versions, and display their file activity to the user. It furthermore had to display some simple statistical information, the activity pr. minute and forecasted activity pr. hour and work day.

I didn’t take long before have the famous “working protype”. Yes, I could start the app, and it would be able to diagnose HUAWEI Mobile Partner and two versions of Birdstep Techonolgy’s EasyConnect. Golden!

Now, from a feature perspective I was done. The first version of the application had these features:

* Start button – starts the monitoring of the mobile software.
* Stop button – stops the monitoring.
* If the software in question has a fix described in the blog, show a link to that blog post.
* If it is the first time the user start the aplication, show a thank-you-for-downloading web page.
* If user clicks links to blog or feedback page, show the pages accordingly.

I put the software online and people started downloading.

But from other perspectives than the (admittingly vague) requirements, I wasn’t done at all. I had created an application below the norm in many ways if this had this been in a professional context (in my opinion). The application had one window and all the logic of the application was contained in the code behind of that window. This meant lack of testibility (well, there was no testibility at all!). Also, I had ideas for adding more features and even exposing the core application logic (finding and monitoring the software) as an API for others to use.

I decided to take on refactoring the application big time, without adding any new features to the application. The goals for the application were:

* Make most of the application logic covered by non-integration unit tests.
* Following the above, to have the part of the application which interacts with the “runtime” and/or external systems made as “thin” as possible, making it very easy to code these interactions and also ensure that they behave correctly in unit tests.
* Compose the application with components, that have clear purposes and one concern pr. component only.
* To open up for injectibility and IOC, hopefully to make use of Castle Windsor or the like in the future.
* Open up for making the application Open Source and thus expose the inner workings of the application (people might be hesitant to download arbitrary software from blogs, I know I would)

The goals for me personally was:

* To make it “right”. No bullshit.
* To make use of the many inputs I’ve had over the years, once and for all, making the software a sort of mini experiment of how it could be done in a professional situation.
* To be able to add new features in a structured way instead of the trial-and-error way that the software invited to in its current implementation.
* Not necessarily use the last tools or frameworks, but at least use sensible implemenation patterns what would make structured change easy.

Oh yes, big goals in small scale! :o)

The following are the stages of refactoring I went through with the application. If you don’t want the bloody details, I suggest you skip the description of these stages, and go directly to the “You had a question, Mr. Ostengaard?” section.

Stage 0
This was the working prototype that I started out with. I uploaded the software to Microsoft’s Codeplex. You can browse the code here.

Stage 1
In this stage I seperated a lot of the applications logic into components (ie. objects) with well defined purposes. The application only had one really structured part so far, which was about what mobile software the application supported. I could add new types of software pretty easy, even in the first edition. The rest of the application, however, was all code behind spaghetti voodoo. I started to identify the concerns of the code. You know, identifying these things in retrospect is not an easy task. I took a lot of time, and you start to see how entangled things really are when you code like this: Functionality for seaching for the software, starting / ending monitoring, UI state management, reading from configuration, handling events from directory watcher, collecting simple statistics and cross-thread UI updates. There’s was a little of everything, not much, but enough to make the identification of concerns pretty fun ;o)

I ended up creating some components and introduced interfaces for each of these, and every component got their dependencies injected (I chose the constructor strategy). You can browse the code of this stage here.

Stage 2
At this stage, efter going through the refactoring of business logic, I turned my focus on the UI. I had most of the business logic of the application seperated from the UI logic now. Not all, but almost. There was still some things, such as reading from the configuration, opening web pages and such in the UI code behind. But I was really really thirsty for more. I wanted to have the UI logic testible through unit tests in a non-integrated way too. I wanted full control over everything that the application did, at least as far as possible.

Now, when I had my own company I was involved in developing a Windows Forms application. At that time, I used a simple MVC framework to create views and sub-views and their corresponding controllers. The implementation had its forces and its drawbacks. But since then, I hadn’t done anything so structured in Windows Forms, and therefore I had some inherit mistrust for the strategy of that tiem. No need to not learn from the past, right? ;o) So, after having poked around for a while and tested some strategies, and honestly being a bit confused about which strategy to use, I ended up with the MVP pattern. Many thanks to input from Steve Bohlen on that, you have a beer waiting in Copenhagen.

But here’s an interesting thing: When you have the ambition to cover as much logic as possible in non-integrated unit tests, transforming traditional UI logic into testible code is quite an eye opener. You have to ask yourself what a dependency really is? In the case of UI logic, it’s can be the many things that you usually just take for granted in a quick-and-dirty Windows Forms application: Reading configuration files, displaying MessageBox (and child windows) and in this case also opening web pages. These simple things now became obstacles for my unit testing goals and something had to be done about them. I therefore made components to handle these things, disregarding the sense of overkill at the time. This would, hoverever, when creating unit tests, turn out to be a very good idea: Everything was injectible, everything was mockable.

You can browse the code of this stage here.

On a side note, the same is true for UI logic in .Net web applications. Traditional code behind is not very testible, so if you want to have that control over your software, similar strategies has to be taken into use.

Stage 3
At this point there were still some things in the business logic that were not covered by unit tests, especially the parts handling statistics. And to make that testable I had to control the applications sense of time. Just as writing “new SomeComponent();” is avoided in the name of injectibility and testibility, so is writing “DateTime.Now;”. If you use DateTime.Now in your code you have code that is less testable because your code is dependant on a very fluent component, namely the system time of the computer. How would you for example test a time-based statistics component when you cannot control time? It is possible in some ways, but if you want solid results and the test to run in short time, you’ll have a challange. Would you choose to have your unit tests run in real-time? That’s way too counter productive – these non-integration unit test has to be blazingly fast and give quick feedback to the developer - and because of this, time has to be encapsulated as well and made injectible. The IDateTimeContainer was introduced which contains the method GetNow() returning nothing more but DateTime.Now.

In this stage a new project was included in the solution. Until now the business logic had been contained in the same project as the UI, but with 100% seperation. Now I moved the logic into its own project (API), to ensure this seperation fully and also to make the core logic available without any relation to the UI.

You can browse the code of this stage here.

Final product
After going through all these stages I still had an application with no new features. But it was much better structured and had the qualities that I wanted: thoroughly tested through unit tests, and open for structured and controlled change. 

New versions
After this rearrangement of code I have relesed a new edition of the software. Change was adding a new child window to the mani window. The child window and its related presenter, and even the changes in the presenter for the main window, was added with ease. It was really a joy doing that in a controlled invironment.

You had a question, Mr. Ostengaard?
Now, the headline of this blog post asked “What’s the lesson of this story?" I ask because I actually want your input on what part of this whole story you think is the actual success story. I can think of some viewpoints, maybe you can think of others.

* One viewpoint could be that creating a “working prototype”, like I basically did here, is fair enough, as long as you have enough dicipline to throw the original code away or a least invest a proper amount of time restructuring it before adding new features. 

* Another viewpoint could be that things has to be thoroughly analyzed and components identified (whatever that means) before going into development. That would mean getting many of the benefits from unit tests and structured change from the early beginning. But it also means that the customer has to pay more up front and wait longer before gettign return on investment. (I’m not going to go into numbers here.)

* A third viewpoint could be not to focus so much on unit testing and other forms of control and feedback at all, and just fulfill the requirements and have testers assert that the requirements have been fulfilled. When the application get past these tests, the release is considered a success.

I ask the question above and put forward these three examples of viewpoints, because I am surrounded with people who carries (roughly) one of these three viewpoints and discussions often about this often occur. Some will say that the early release is the way for success (early business value), others will say the pre-study and analysis must be done, and others simply don’t have a clue about structured and quality-oriented application production (or simply don’t have it as a business goal).

The first viewpoint is good for early business value, I agree, but the problem with this strategy is that the application is born with a quite large techincal debt. But I have never heard about a customer (or software consultant house for that matter), who would pay for 4-10 times as much time as it took to create the original version to (re-)make it into a structured application and this without gaining basically any new features for that money. Have you? And if that doesn’t happen, all you have done is lured yourself and taken the first step in following the third viewpoint, where technical debt is not considered bad. But to me, the third strategy can never be the way to go. It will end up in a system, that carries so many problems, that change in the end will be seen as evil. Change will be avoided. It’s on a death march...

I hope that you can see, that I am, in most cases, a proponent of the second viewpoint. I can live with the first viewpoint, if actions are taken to rearrange the software. Unfortunately I do believe that many people start out by going with the first strategy, then skipping/postponing the restructuring, only to later find themselves trapped far into to third strategy with almost no possibility of returning.

And if you still wonder about the pictures, the difference between the two applications lies in the quality of the implementation and openness to change in the future. One sucks, one doesn’t.

Tell me something from your part of the world… :-)

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


How to fix the Google Feedburner and Yahoo Pipes problem yourself

clock November 18, 2009 18:57 by author christerdk

If you have tried to use the Google Feedburner service and the Yahoo Pipes together you have probably experienced the “Error 999”, which means that Google Feedburner does not consume the feed provided by Yahoo Pipes. In other words, your RSS feed stalls although there’s new content from the pipe to expose.

I ran into this error myself and hoped for a resolution between the two parts. However, it seems that people have been experiencing this since the beginning of 2009, and I’ve just been spared until the beginning of November. And apparently the progress has stalled totally between the two camps, so nothing is really happening to solve this issue for their users. So I’ve tried some things, and the solution/fix/hack is actually quite simple. It does, however, have prerequisites: You’ll need to have a little programming done and a place to put the program.

The normal Google Feedburner/Yahoo Pipes setup looks like this:

Request flow: Google Feedburner –> [Get RSS] –> Yahoo Pipes
Response flow: Yahoo Pipes -> [Returns Pipes mashup RSS content] -> Google Feedburner

To fix the problem, you need something like this:

Request flow: Google Feedburner –> [Get RSS] –> Intermediary service –> [Get RSS] –> Yahoo Pipes 
Response flow: Yahoo Pipes -> [Returns Pipes mashup RSS content] -> Intermediary service -> [Returns Pipes mashup RSS content] -> Google Feedburner 

The setup above means the Google Feedburner will be able to consume the Yahoo Pipes feed indirectly instead of directly. My personal intermediary service is placed here on christer.dk. Now, the only thing that the service has to do is to consume the Yahoo Pipes feed and forward its content. Here is what you do (in inline asp.net c# 3.5 code).

   1:  <%@ Page Language="C#" %>
   2:  <script runat="server">
   3:      protected void Page_Load(object sender, EventArgs e)
   4:      {
   5:   
   6:          System.Xml.XmlReader reader = System.Xml.XmlReader.Create("[YAHOO PIPE RSS URL HERE]");
   7:          System.ServiceModel.Syndication.Rss20FeedFormatter formatter = new System.ServiceModel.Syndication.Rss20FeedFormatter();
   8:          formatter.ReadFrom(reader);
   9:          reader.Close();
  10:   
  11:          using (System.Xml.XmlWriter writer = System.Xml.XmlWriter.Create(Response.OutputStream))
  12:          {
  13:              System.ServiceModel.Syndication.Rss20FeedFormatter outputformatter = new System.ServiceModel.Syndication.Rss20FeedFormatter(formatter.Feed);
  14:              outputformatter.WriteTo(writer);
  15:              writer.Flush();
  16:          }
  17:          Response.End();
  18:      }
  19:  </script>

Place this code in an asp.net aspx-page or create a similar logic on a different platform and expose it on a server. Then reconfigure your Feedburner feed to retrieve the RSS content from your new service.

That’s it. I hope it helps you like it helped me. :-)

[Update]: Seems that my layout isn’t very code friendly! ;-) Here's the asp.net code to download: RSS.zip (453,00 bytes)

[Update two] I've clarified the request / response flow description above.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Jaoo 2009 day 3

clock October 7, 2009 17:32 by author christerdk

Everything good comes to an end, they say. It fits the JAOO 2009 Conference. Even though wish that JAOO had been longer, so that I could spend more time getting to know all the great and creative people there, I also realize that the time has come to start digesting and hopefully putting into use some of the ideas that we were presented during this three day conference.

In other words, with the ending of JAOO 2009 I hope new and better things will arise from it, directly or indirectly. Maybe a customer with a REST-oriented project will drop by, or maybe some of the new acquaintances in my network will be starting up projects and a collaboration could emerge. You never know…

First session of the day was a session held by Linda Rising on Guiding your personal life - “plan driven” or “agile”. The talk was about, among a lot of other things, the difference in the perceived benefits from drinking beverages containing caffeine and actual benefits of taking proper breaks and nap during the day. All this in relation to work. One of her main messages was that although we feel better and brighter from drinking coffee or coke, is has significant impact on how we think, which in the end has drawbacks on the work delivered. Furthermore, it was the message that we as humans are not made for using our energy in a linear fashion 8 hours a day, but more in pulses, where we first use energy (for example in a 90 minute pulse) and then take a proper break to get new energy. This, of course, opposed to just continuing without a break and keeping fatigue away by drinking more and more coffee. Her statements were followed up by test results made on groups of people, and showed the difference in how things learned were internalized.

I most definitely could relate her message, as I’d say I’m very much a person who needs time to take new information and consume it by not working with it directly. I have to let it sink in. And it’s not new to me get new my ideas in places far away from where I’m “expected” to get them. I not able to conjure up ideas at my work desk all the time. It sometimes happen when I’m sitting alone, thinking about something else, in the shower or just at the coffee machine, no, errrr…. I mean, at the water fountain ;-) I think I’ll try to take some of the ideas she presented, and try to experiment with them in my work life, hopefully together with my colleagues. And also, the Pomodoro technique was brought forward again, a technique I learnt some time ago, but got away from using...

Mary Poppendiecks presentation Deliberate Practice in Software Development was excellent. It touched a subject very dear to me, namely the development of talent within an organization. Her speech was not about the, in my opinion, often misunderstood and misguided classical IT career path development we see so often, where developers are expected to become architects, who then should become project managers, business managers and so on. No, this was about developing experts through mentoring and finding the right challenges for the employee. The message was also, that developers right out from school not necessarily can be thought of as experts, and neither can experts developers in a domain that is new to them. We all need mentoring all the time, and so even the mentors also have mentors. Through long and wide experience will experts emerge… (again, this is just a few things of the points made)

As a person with 10+ years of experience in development, architecting, consulting and 4 years of running a business, this has much value to me. I have never believed in the classical career path that having to become a project manager is the only way for developer to advance in their career, however, that idea is unfortunately rooted very deeply in many companies. Let’s start a revolution and start mentoring! :-)

The last session of today was Philippe Krutchen’s The Representation of Architectural Knowledge, wherein he presented his ideas about the necessity of capturing decisions during development of a system. He went through the history of architectural representation, types of diagrams and methods, and the main idea was basically that they presented a model at a certain place in time, but that we could not get answers from the diagrams about why the architecture is as it is. By capturing decisions as well, we would, in the future, be able to get better answers to questions about the architecture than “I can’t remember, but I remember that is was because of something important...” (haven’t we all heard that one?) (again again, this is just a few things of the points made)

The question of why a thing was done as it was is not a question asked seldom by software developers. If you’re lucky, you can answer it yourself through the paradigms used or get the answer from the developer who made it, because he/she is still a part of your team (and can remember!). In such case the need for decision documentation would be low. But when the timespan between the making of the system (or a part of it) and when the question is asked is counted in months or years, well, then you could be in need of such documentation (so, in other words, you’ll basically always need it). Who haven’t tried sitting with code, thinking “why on earth did they do like this”? You have the notion that there’s some hidden significance, maybe from the patterns of the code, but the answer is not clear. In such case I’d love to have full structured documentation… (How about you, Henrik? ;-)

Pictures from the day:

DSC00500 DSC00501

More books… mmmMMMmmm…

DSC00502

Linda Rising…

DSC00503 DSC00504 DSC00505 DSC00506

Samples from Linda’s presentation…

DSC00508

Michael T. Nygard…

DSC00510

Mary Poppendieck on Dedication… all good things, but notice the last remark.

DSC00511 DSC00512

Philippe Krutchen – a very intelligent, animated and funny presenter.

DSC00513

Decisions visualized…

Now I’m heading home for Malmö, Sweden to my girlfriend, from who I need a big hug. :o)

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Jaoo 2009 day 2

clock October 6, 2009 15:30 by author christerdk

When I entered the JAOO venue today I didn’t really know which track I wanted to follow. This problem was not caused by of lack of interesting topics, no, it was more the other way around. There were several tracks to which I could relate very easily, such as Business Drivers and Challenges or Developer Tools. However, today I chose to take on something, I’ve heard (read: gotten preached) a lot about, but hadn’t personally had any good primers on yet.

I therefore attended three sessions about REST. First it was Extending the Reach of your SOA with REST by Rachel Reinitz, then it was REST - Theory vs Practice by Subbu Allamaraju & Mike Amundsen and then How to Sell REST to Your Boss by Anne Thomas-Manes. The good thing about these sessions was that they were based on reason and real-life experience and weren’t just some fanatical half-religious hype-speak. And that was precisely what I was looking for.

Had a interesting lunch with Martin Klose from Dussefdorf, Germany, who is starting up a new business together with his brother. We talked far and wide, about doing “good”, proactive business and finding out what you like and are good at and doing it. It seems to be on the minds of many people today – is it maybe a subconscious reaction to the crisis and the things it brings? Hm. Anyways, I hope to hear more from this guy and his new business adventure.

[Update evening]

Even ended with meeting up with my old time friend from my computer science studies, Mark Walker, who lives in Århus. We went down town and ate a nice dinner and of course talked geek as much as possible. ;-)

After dinner I needed to grab something from the nearest 7-Eleven store. Right after doing so, we unfortunately got at glimpse af the darker side of things, as a drunk guy came up to us and started blurting out weird stuff. He was friendly at first, but at some point he just totally flipped over, and mumbled something more or less like “I can carve your guts out so easy, even without touching you”. Of course we were stunned by such a remark, and everything came to a standstill. I don’t want to get into details, but the situation was disarmed using diplomacy and no-one got hurt. But still, what a bummer…

[Update afternoon]

Some pictures from today…

DSC00492 

Simon Peyton-Jones on the functional programming language Haskell.

DSC00493

Books books… want them all!

DSC00494

DSC00495

DSC00496

Rachel Reinitz from IBM on REST.

DSC00499

Subbu Allamaraju & Mike Amundsen on REST (on picture: Mike).

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Jaoo 2009 day 1

clock October 6, 2009 00:05 by author christerdk

Phew… what a day. I got up at the worst of hours this morning to get to Århus and attend the JAOO 2009 conference. This is my first time at this conference, and it started out very good. The speakers are amazing, the subjects are interesting and whole setup is solid. Today I have attended…

Had the pleasure to meet and talk with…

  • Peter Guldbæk, consultant who I studied computer science with.
  • Anders Faulbøll, consultant, who I went to high school with.
  • Jørgen Larsen, professional networker, a previous colleague.
  • Philip Kron, CEO, previous business partner.
  • Adrian Kosmaczewski, iPhone development expert from Switzerland, who I also met in Copenhagen 1½ month ago to a JAOO iPhone developer meetup.

After all that, there was beer with exhibitioners and then the dinner and JAOO party.

Below are some pictures…. they give a small insight to the journey and the sessions mentioned above.

DSC00479

Waiting in Kastrup airport.

DSC00480

Travelling by train…

DSC00481

At the Google stand (I solved one of their puzzles and won a t-shirt… hoot hoot!)

DSC00482

Barry Boehm keynote…

DSC00483

Michael Feathers’ Working with Legacy Code…

DSC00484 DSC00485

Billy Newport, Distinguished Engineer, from Extreme Scalability division at IBM.

DSC00486

Keith Braithwaite …

DSC00487

Martin Fowler…

DSC00488

Staying sharp after almost falling asleep ;-) I’m happier than I look!

DSC00489

Gerard Meszaros on developing better unit tests…

DSC00490 DSC00491

JAOO dinner and party…

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Attending JAOO 2009

clock October 5, 2009 05:30 by author christerdk

I’m so happy! I’m going to attend the JAOO 2009 conference in Århus!!!

Attending the JAOO conference is something I’ve wanted to do for a loooooong long long time, but somehow haven’t had the chance to do. Either I’ve been to busy or with no company who wants to sponsor (the price will leave you bleeding if you pay using personal, taxed money, in my opinion, so a professional company sponsor is warranted).

Then, by a lucky strike, I win a competition and I am handed a free pass for the conference. Oh yes! Crazy! There are sessions by Michael Feathers, Martin Fowler and Michael T. Nygard, just to name a few, and I’m really looking forward to attending them. 

So, as the happy camper I am, I’m now leaving for JAOO! :-)

More on twitter

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Behaviour Driven Design source code from alt.net Code Camp

clock August 31, 2009 08:32 by author christerdk

Here's my groups (Björn, Patrik and me) source code from the Behaviour Driven Design session. It might not mean a lot for people who didn't attend, but we figured we'd put it out anyways.

Download here: BDDWorkshop.zip (14,62 kb)

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Attending alt.net Öresund August 30th Code Camp

clock August 30, 2009 20:33 by author christerdk

It has been a long time since I’ve been so much in the nerdy mood as today. I’ve been coding Microsoft Word (read: writing documentation) for almost 3 months now, so when I got a hint about the alt.net Öresund event today I knew that I had to attend and defy any of my normal Sunday traditions. No sleepy Sunday. No long brunch with Lydia. No café latte on some easy going café. Instead, it was all about getting dirty with code, brewed coffee and and Coca Cola. The meetup style was relaxed and open, and we got through, among other things, Behaviour Driven Design / Unit testing (with pair programming), the Command / Query pattern and SharpArchitecture. The event had sponsored lunch (thank you Microsoft Sweden!) and after-nerding beer (thank you Know It!).

Here are a few pictures from the event:

IMG_6698 IMG_6699 IMG_6701 IMG_6702 IMG_6703 IMG_6704 IMG_6705 IMG_6706 IMG_6707 IMG_6708 IMG_6709

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


A talk on iPhone development

clock August 29, 2009 16:06 by author christerdk

Had the pleasure of seeing Adrian Kosmaczewski perform an excellent and enthusiastic presentation about iPhone development Thursday evening. Although I’m a senior developer on the Microsoft .Net platform, I’m a complete iPhone novice. It was therefore nice to attend this sort of “brain dump”-session, where we were given a brief walkthrough of the history of Objective-C, introduction to the development environment and then got into some example code. It sure made me consider writing my first “Hello iPhone”-application, unfortunately, I need to find someone to sponsor me a Mac. Anyone? ;-)

The event was a free JAOO event organized by Trifork, held at Telenor in Copenhagen. Below are a few pictures from the demonstration:

IMG_6679 IMG_6665

IMG_6666

IMG_6667 IMG_6668

IMG_6669

IMG_6670

IMG_6671

IMG_6672

IMG_6674

IMG_6675

IMG_6676

IMG_6677

IMG_6678

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


About the author

Someone should write something witty about me here, but no-one volunteers... ;-)

Check out my mobile broadband user blog as well! Lots of goodies, fixes and solutions!

Sign in