<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>The Nihlénanizer</title>
        <link>http://www.nnihlen.com/blog/Default.aspx</link>
        <description>Programming, food, life and weird sports</description>
        <language>sv</language>
        <copyright>Niklas Nihlen</copyright>
        <generator>Subtext Version 2.1.0.5</generator>
        <image>
            <title>The Nihlénanizer</title>
            <url>http://www.nnihlen.com/blog/images/RSS2Image.gif</url>
            <link>http://www.nnihlen.com/blog/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Blog moved</title>
            <link>http://www.nnihlen.com/blog/archive/2012/09/16/809.aspx</link>
            <description>&lt;p&gt;I’ve been running my blog from home for many years on SubText, mainly because I liked to mess around with the bits and know how everything worked.&lt;/p&gt;  &lt;p&gt;With the kids overrunning my home office the uptime has been very sporadic. Now we’re leaving our apartment (and it’s very fast internet connection) to move to a house, it was time to go to the cloud.&lt;/p&gt;  &lt;p&gt;So, my blog from now on resides at &lt;a href="http://www.hardcoded.se"&gt;www.hardcoded.se&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;I’ve migrated all content there, though I still have a slight issue with the comments. They are there, but it look like I wrote them all.&lt;/p&gt;  &lt;p&gt;My next blog post, whenever that might be, will appear on &lt;a href="http://www.hardcoded.se"&gt;www.hardcoded.se&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Cheers&lt;/p&gt;  &lt;p&gt;Niklas&lt;/p&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/809.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2012/09/16/809.aspx</guid>
            <pubDate>Sun, 16 Sep 2012 19:27:17 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/809.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2012/09/16/809.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/809.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Goal Summary 2011</title>
            <link>http://www.nnihlen.com/blog/archive/2012/01/08/goal-summary-2011.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;Spend time with my daughter&lt;/strong&gt; – I’ve spent a lot of time with my daughter. &lt;font style="background-color: #00ff00"&gt;&lt;strong&gt;PASSED&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Be flexible&lt;/strong&gt; – Hard to measure, my wife (the project leader) has given me a lot of crap for setting a goal that’s not measurable. With two kids, both me and my wife working full time and me doing sports at a pretty high level, I have no other choice but do be flexible &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/42ae7f4f9e84_E02F/wlEmoticon-smile_2.png" /&gt;. So I’ll mark this one down as &lt;font style="background-color: #00ff00"&gt;&lt;strong&gt;PASSED&lt;/strong&gt;&lt;/font&gt;. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Lose weight&lt;/strong&gt; – this was perhaps the most important and most challenging goal for me on a personal level and I’m extremely happy to say I &lt;strong&gt;&lt;font style="background-color: #00ff00"&gt;PASSED&lt;/font&gt;&lt;/strong&gt;! Almost 12 kg (~26.5 lbs) in less of a year. The spike you see in the beginning of October is SharePoint conference in sunny California, lots of beer and food &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/42ae7f4f9e84_E02F/wlEmoticon-smile_2.png" /&gt;.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/42ae7f4f9e84_E02F/Weight%20curve%20edited_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Weight curve edited" border="0" alt="Weight curve edited" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/42ae7f4f9e84_E02F/Weight%20curve%20edited_thumb.png" width="350" height="219" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Clean up on the attic&lt;/strong&gt; – this one I have &lt;strong&gt;&lt;font style="background-color: #ff0000" color="#ffffff"&gt;FAILED&lt;/font&gt;&lt;/strong&gt; miserably.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Learn Ruby&lt;/strong&gt; – I’ve been hacking along on my ruby on rails site. Like the language a lot. I’m not all the way there yet but I see myself on track and gonna give myself a &lt;font style="background-color: #00ff00"&gt;&lt;strong&gt;PASSED&lt;/strong&gt;&lt;/font&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Git&lt;/strong&gt; – not a pro yet but getting better at it. &lt;strong&gt;&lt;font style="background-color: #00ff00"&gt;PASSED&lt;/font&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Windows Phone 7 App&lt;/strong&gt; – MS Billing stole my money when the registration process on the developer site crashed (two times!) and that made me pissed off and lose interest in the whole thing. Need to carry on this goal to 2012. &lt;strong&gt;&lt;font style="background-color: #ff0000" color="#ffffff"&gt;FAILED&lt;/font&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SharePoint Certification&lt;/strong&gt; – Had to devote my time to look for a new job so &lt;strong&gt;&lt;font style="background-color: #ff0000" color="#ffffff"&gt;FAILED&lt;/font&gt;&lt;/strong&gt; this one.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;National team in underwater rugby&lt;/strong&gt; – Made it! Played my first (and probably last) world championship. We missed the final and ended up in third place, but other than that it was an awesome experience. &lt;strong&gt;&lt;font style="background-color: #00ff00"&gt;PASSED&lt;/font&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/42ae7f4f9e84_E02F/Team%20WC11_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Team WC11" border="0" alt="Team WC11" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/42ae7f4f9e84_E02F/Team%20WC11_thumb.jpg" width="350" height="232" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Read up on running my own business&lt;/strong&gt; – did read quite a lot but decided not to go for it now due to other circumstances. &lt;strong&gt;&lt;font style="background-color: #00ff00"&gt;PASSED&lt;/font&gt;&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/42ae7f4f9e84_E02F/Empty%20Binders_4.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="Empty Binders" border="0" alt="Empty Binders" align="left" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/42ae7f4f9e84_E02F/Empty%20Binders_thumb_1.jpg" width="204" height="204" /&gt;&lt;/a&gt;Cleanout Binders&lt;/strong&gt; – Scanned seven binders in total, so I’m going to set give myself &lt;strong&gt;&lt;font style="background-color: #00ff00"&gt;PASSED&lt;/font&gt;&lt;/strong&gt; on this one to. Went through six binders and throwed away a lot of old crap and scanned the rest.&lt;/p&gt;  &lt;p&gt;So the overall a pretty good year I think. &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h2&gt;Summary&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/42ae7f4f9e84_E02F/ScoreCard2011_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="ScoreCard2011" border="0" alt="ScoreCard2011" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/42ae7f4f9e84_E02F/ScoreCard2011_thumb.png" width="270" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Six out of nine isn't half bad. Now I need to draw up some goals for 2012!&lt;/p&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/808.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2012/01/08/goal-summary-2011.aspx</guid>
            <pubDate>Sun, 08 Jan 2012 11:07:16 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/808.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2012/01/08/goal-summary-2011.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/808.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Nailing those pomodors &amp;ndash; harder than expected</title>
            <category>Productivity</category>
            <link>http://www.nnihlen.com/blog/archive/2011/09/10/nailing-those-pomodors-ndash-harder-than-expected.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Getting-in-to-pomodor_730/tomato0007_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="tomato0007" border="0" alt="tomato0007" align="left" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Getting-in-to-pomodor_730/tomato0007_thumb.png" width="240" height="192" /&gt;&lt;/a&gt;Been working for 2 weeks now after my parental leave and it has not been pleasant to a variety of reasons. If we exclude factors out of my direct control and focus on what I actyllay do (or should) control. The pomodoro technique was a real struggle. I’m all behind the theory, I was pshyced and motivated. But I just could not get those 25 minutes to work for me. There where a lot of interruptions, both externa and internal. So what do you do in this day and age when you got a problem? You tweet about it! So I did. &lt;a href="http://twitter.com/#!/emilcardell"&gt;@emilcardell&lt;/a&gt; gave me a tip working for him: do 20 pomodoros with a 10 min “break” between each.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Getting-in-to-pomodor_730/20-min-pomodoro_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="20-min-pomodoro" border="0" alt="20-min-pomodoro" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Getting-in-to-pomodor_730/20-min-pomodoro_thumb.png" width="404" height="308" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I gave it a try, thinking “big difference between 20 and 25 minutes”… But man, that made the difference for me! I managed too keep most of the 20 min pomodoros intact. Not that I didn’t have interruptions but they where mostly manageable. &lt;/p&gt;  &lt;p&gt;20 min on and 10 off, holy cow that’s ineffective you say. 3 weeks ago I would have agreed with you but today I don’t. The focus of the pomodoro makes (at least) me more effective than otherwise so over the course of a day I really think it’s a win for me.&lt;/p&gt;  &lt;p&gt;Still aiming for the 25-5 rhythm. But as they say “baby steps”.&lt;/p&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/807.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2011/09/10/nailing-those-pomodors-ndash-harder-than-expected.aspx</guid>
            <pubDate>Fri, 09 Sep 2011 23:06:12 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/807.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2011/09/10/nailing-those-pomodors-ndash-harder-than-expected.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/807.aspx</wfw:commentRss>
        </item>
        <item>
            <title>World Championship in Underwater Rugby</title>
            <category>Sports</category>
            <link>http://www.nnihlen.com/blog/archive/2011/08/11/world-championship-in-underwater-rugby.aspx</link>
            <description>&lt;p&gt;This is not a tech post at all. It’s just me plugging the World Championship in underwater rugby coming up next week. Why am I pimping it? Because I’m playing in the Swedish National Team!&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/World-Championship-in-Underwater-Rugby_13FCE/Landslag%202011_2.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Landslag 2011" border="0" alt="Landslag 2011" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/World-Championship-in-Underwater-Rugby_13FCE/Landslag%202011_thumb.jpg" width="400" height="400" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So this here comes somewhat of a link dump. The tournament starts august 15th 2011 in Helsinki, Finland. I‘ll try to do twitter updates if I can find some free wi-fi (I won't ruin myself with data roaming fees) at &lt;a href="http://twitter.com/nippe"&gt;http://twitter.com/nippe&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Check out the Swedish team: &lt;a href="http://iof3.idrottonline.se/SvenskaSportdykarforbundet/UV-rugby/Arkiv/Landslag/Herrlandslaget/2011VMbilder/"&gt;http://iof3.idrottonline.se/SvenskaSportdykarforbundet/UV-rugby/Arkiv/Landslag/Herrlandslaget/2011VMbilder/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Good introduction to underwater rugby video: &lt;a href="http://vimeo.com/26539245"&gt;http://vimeo.com/26539245&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The championship's official site: &lt;a href="http://www.uwr-finland2011.fi/"&gt;http://www.uwr-finland2011.fi/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Twitter hash-tag: &lt;a href="http://twitter.com/#!/search/realtime/%20%23uwrwc11"&gt;#uwrwc11&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Live Streaming of the games: &lt;a href="http://live.cmas.org"&gt;http://live.cmas.org&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Game schedule and results page: &lt;a href="http://www.uwr-finland2011.fi/game-schedule-results/"&gt;http://www.uwr-finland2011.fi/game-schedule-results/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/806.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2011/08/11/world-championship-in-underwater-rugby.aspx</guid>
            <pubDate>Thu, 11 Aug 2011 21:22:38 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/806.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2011/08/11/world-championship-in-underwater-rugby.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/806.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Yearly Goals - Half Time</title>
            <category>Life</category>
            <category>Productivity</category>
            <link>http://www.nnihlen.com/blog/archive/2011/07/17/yearly-goals-half-time.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Yearly-Goals---Half-Time_9A6D/mf223_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 15px 0px 3px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="mf223" border="0" alt="mf223" align="right" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Yearly-Goals---Half-Time_9A6D/mf223_thumb.jpg" width="240" height="191" /&gt;&lt;/a&gt;I’ve stopped with the monthly updates due to some non-encouraging feedback. However, half-time is big so here’s the half-time update.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Spend time with daughter&lt;/strong&gt; – on track, not much to say.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Loose Weight – &lt;/strong&gt;Also on track. I’ve been down at 90 kg and now I’m leveling out at 91-92 kg which seems to be a good weight for me. I can run without my knees hurting.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Yearly-Goals---Half-Time_9A6D/IMG_1115.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="IMG_1115" border="0" alt="IMG_1115" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Yearly-Goals---Half-Time_9A6D/IMG_1115_thumb.png" width="370" height="253" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I’ve been eating using Glycemic Index, which has worked remarkably well. Two downsides: My stomach crashed after a while so I can’t eat strict GI now and it’s damn expensive.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Clean up attic&lt;/strong&gt; – way behind. It’s such a mess I don’t even know where to start…&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Learn Ruby&lt;/strong&gt; – Coming along nicely. In hindsight I should have concentrated more on Ruby and less on Rails when starting, but I’m getting there. I’m working on a new Rails-site for my underwater rugby team as a learning project (&lt;a href="https://github.com/nippe/Pdk-Team-Site"&gt;https://github.com/nippe/Pdk-Team-Site&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Yearly-Goals---Half-Time_9A6D/Pdk-team-site-acitivites_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Pdk-team-site-acitivites" border="0" alt="Pdk-team-site-acitivites" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Yearly-Goals---Half-Time_9A6D/Pdk-team-site-acitivites_thumb.png" width="350" height="168" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Git&lt;/strong&gt; – I feel pretty confortable using git. I still get myself in jams every now and then, but I see that as a part of the learning process. So I feel done with this as a goal and the plan is just to keep using it.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Windows Phone 7 App&lt;/strong&gt; – Haven’t gotten around to this. Try to register for a developer subscription but Microsoft billing stiffed me for 300 kr (~ $50) without me getting a subscription.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SharePoint Cert&lt;/strong&gt; – Started studying a little, then summer came… &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;National Team in Underwater Rugby&lt;/strong&gt; – I MADE IT! Playing in the world championships in Helsinki august 15th to 20th.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Reading up on starting my own business &lt;/strong&gt;– this stagnated due to other factors at home, but I’m still playing around with the idea.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Clean out binders&lt;/strong&gt; – half way there scanned in 4 out of 8.&lt;/p&gt;  &lt;h2 /&gt;  &lt;h2&gt;Summary&lt;/h2&gt;  &lt;p&gt;So, to summarize. I’m pretty much on track. A few thins lag behind. I hope I’ll be able to do a push after the summer when I start working again.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Yearly-Goals---Half-Time_9A6D/Scorecard%20half%20time_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Scorecard half time" border="0" alt="Scorecard half time" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Yearly-Goals---Half-Time_9A6D/Scorecard%20half%20time_thumb.png" width="350" height="152" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/805.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2011/07/17/yearly-goals-half-time.aspx</guid>
            <pubDate>Sun, 17 Jul 2011 12:17:21 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/805.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2011/07/17/yearly-goals-half-time.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/805.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Notifications to iPhone/iPad Using Prowl and Prowlin in .NET</title>
            <category>.NET Development</category>
            <link>http://www.nnihlen.com/blog/archive/2011/06/02/notifications-to-iphone-ipad-using_prowl-and-prowlin-in-net.aspx</link>
            <description>&lt;p&gt;This post is a little coding for fun exercise showing one way to send push notifications to your iPhone/iPad from .NET. It’s also a shameless plug for the open source .Net library I written for this, called Prowlin (&lt;a title="https://github.com/nippe/Prowlin" href="https://github.com/nippe/Prowlin"&gt;https://github.com/nippe/Prowlin&lt;/a&gt;) in conjunction with &lt;a href="http://www.prowlapp.com/"&gt;Prowl&lt;/a&gt; on the iPhone.&lt;/p&gt;  &lt;p&gt;So, to demo this in a simple and efficient way I’m going to write a simple URL monitor that tries to get an url and if the response code is something else than 200 it sends a notification to the iPhone/iPad. I’m going to write it as a simple console application. If one would like to run it as a service TopShelj (&lt;a href="https://github.com/Topshelf/Topshelf"&gt;https://github.com/Topshelf/Topshelf&lt;/a&gt;) helps with that or a simple scheduled task might suffice.&lt;/p&gt;  &lt;p&gt;Scene set, lets get started. The app is simple (can be improved immensely).&lt;/p&gt;  &lt;p&gt;First, get the latest Prowlin binary from &lt;a href="https://github.com/nippe/Prowlin/downloads"&gt;https://github.com/nippe/Prowlin/downloads&lt;/a&gt; or get the source from &lt;a href="https://github.com/nippe/Prowlin"&gt;https://github.com/nippe/Prowlin&lt;/a&gt; and compile yourself. &lt;/p&gt;  &lt;p&gt;Create a console application project and add a reference to Prowlin and System.Net. And off you go:&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Net;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Prowlin.UrlMonitor&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Program&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args) {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (args.Length &amp;lt;= 0) {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;                Console.WriteLine(&lt;span class="str"&gt;"Enter URL as parameter"&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; urlToTest = args[0];&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            var request = WebRequest.Create(urlToTest) &lt;span class="kwrd"&gt;as&lt;/span&gt; HttpWebRequest;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;            WebResponse response = &lt;span class="kwrd"&gt;default&lt;/span&gt;(WebResponse);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;            &lt;span class="kwrd"&gt;try&lt;/span&gt; {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                response = request.GetResponse();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;            &lt;span class="kwrd"&gt;catch&lt;/span&gt; (WebException webException) {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                &lt;span class="kwrd"&gt;string&lt;/span&gt; message = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                &lt;span class="kwrd"&gt;switch&lt;/span&gt; (webException.Status) {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;case&lt;/span&gt; WebExceptionStatus.Timeout:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;                        message = &lt;span class="str"&gt;"Request timed out"&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;case&lt;/span&gt; WebExceptionStatus.ProtocolError:&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;                        var httpWebResponse = webException.Response &lt;span class="kwrd"&gt;as&lt;/span&gt; HttpWebResponse;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;                        message = httpWebResponse.StatusCode + &lt;span class="str"&gt;" "&lt;/span&gt; + httpWebResponse.StatusDescription;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;default&lt;/span&gt;:&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;                        message = &lt;span class="str"&gt;"Other problem"&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;                }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;                SendProwlNotification(message, urlToTest);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SendProwlNotification(&lt;span class="kwrd"&gt;string&lt;/span&gt; message, &lt;span class="kwrd"&gt;string&lt;/span&gt; url) {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;            var notification = &lt;span class="kwrd"&gt;new&lt;/span&gt; Notification&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;                                   {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;                                       Application = &lt;span class="str"&gt;"URL Monitor"&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;                                       Description = message,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;                                       Event = url + &lt;span class="str"&gt;" not available"&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;                                       Priority = NotificationPriority.High,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;                                       Url = url&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;                                   };&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;            notification.AddApiKey(&lt;span class="str"&gt;"589a2d241e6ea26a11c994af835012eb3230f39f"&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;            var prowlClient = &lt;span class="kwrd"&gt;new&lt;/span&gt; ProwlClient();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;            prowlClient.SendNotification(notification);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt;The program takes one parameter in, an URL. I don’t check if it actually is an URL in this sample.&lt;/p&gt;

&lt;p&gt;The body of the program (the main function) does the try-to-get-url logic and if that call (line 18 above) fail the catch block calls SendProwlNotification on line 36. The SendProwlNotification is very straight forward or at least I hope so.&lt;/p&gt;

&lt;p&gt;Instantiate a notification object, set properties and add one or more API Keys (used by Prowl so that notifications end up on the right phone).&lt;/p&gt;

&lt;p&gt;New up a ProwlClient and call SendNotification with the created notification. And voila! &lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/ff84ee5ac3f7_845B/IMG_1005.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="IMG_1005" border="0" alt="IMG_1005" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/ff84ee5ac3f7_845B/IMG_1005_thumb.png" width="204" height="304" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/ff84ee5ac3f7_845B/IMG_1006.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="IMG_1006" border="0" alt="IMG_1006" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/ff84ee5ac3f7_845B/IMG_1006_thumb.png" width="204" height="304" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/ff84ee5ac3f7_845B/IMG_1004.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="IMG_1004" border="0" alt="IMG_1004" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/ff84ee5ac3f7_845B/IMG_1004_thumb.png" width="204" height="304" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’ll try to get the package up on NuGet within the coming weeks.&lt;/p&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/804.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2011/06/02/notifications-to-iphone-ipad-using_prowl-and-prowlin-in-net.aspx</guid>
            <pubDate>Thu, 02 Jun 2011 21:01:07 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/804.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2011/06/02/notifications-to-iphone-ipad-using_prowl-and-prowlin-in-net.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/804.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Goals follow-up 3 of 12</title>
            <category>Life</category>
            <link>http://www.nnihlen.com/blog/archive/2011/04/04/goals-follow-up-3-of-12.aspx</link>
            <description>&lt;p&gt;Time for the third follow up on how this years goals are going. Damn time moves fast.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Spend time with my daughter&lt;/strong&gt; – going along nicely. Due to some sickness I’ve almost spent to much time with her &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/d74095cbc05c_8687/wlEmoticon-winkingsmile_2.png" /&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Loose weight&lt;/strong&gt; – Going good except around the 14th I was alone with the kids for a week and the 3 ½ yrs old became sick so no sleeping for dad. You can see the weight curve going up during that week. No sleep –&amp;gt; low blood sugar –&amp;gt; unstoppable candy cravings &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-sadsmile" alt="Sad smile" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/d74095cbc05c_8687/wlEmoticon-sadsmile_2.png" /&gt;.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/d74095cbc05c_8687/Weight%20Curve%202011-03-29.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Weight Curve 2011-03-29" border="0" alt="Weight Curve 2011-03-29" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/d74095cbc05c_8687/Weight%20Curve%202011-03-29_thumb.png" width="373" height="250" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="left"&gt;So far this year has been going pretty good:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/d74095cbc05c_8687/Weight%20Curve%202011-03-29%203%20months.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Weight Curve 2011-03-29 3 months" border="0" alt="Weight Curve 2011-03-29 3 months" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/d74095cbc05c_8687/Weight%20Curve%202011-03-29%203%20months_thumb.png" width="373" height="250" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Clean up the attic&lt;/strong&gt; – Status Q &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-sadsmile" alt="Sad smile" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/d74095cbc05c_8687/wlEmoticon-sadsmile_2.png" /&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Learn Ruby&lt;/strong&gt; – Coming along, though slowly. But I started on my little hobby project: a site for my team with some attendance rsvp’s, a wall to post on and stuff. Will put it up on github as soon as it’s something that works.&lt;/p&gt;  &lt;p&gt;I’ve gotten a little de-railed (pun intended &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/d74095cbc05c_8687/wlEmoticon-smile_2.png" /&gt;) by starting reading the RSpec Book, which is an awsome read but doesn’t really get me closer to creating a site for the team. But a really good dive in to BDD, Cucumber and such.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.pragprog.com/titles/achbd/the-rspec-book"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="RSpec book" border="0" alt="RSpec book" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/d74095cbc05c_8687/RSpec%20book_3.jpg" width="164" height="193" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Git&lt;/strong&gt; – Going good, now going through Rob Conery’s awsome git series on &lt;a href="http://www.tekpub.com"&gt;tekpub&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/d74095cbc05c_8687/tekpub_log_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="tekpub_log" border="0" alt="tekpub_log" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/d74095cbc05c_8687/tekpub_log_thumb.png" width="217" height="61" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Windows Phone 7 App&lt;/strong&gt; – All I’ve done is to locate a series of web casts on &lt;a href="http://channel9.msdn.com/Blogs/egibson/Windows-Phone-7-Jump-Start-Session-1-of-12-Introduction"&gt;channel9&lt;/a&gt; that I will use as staring point.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SharePoint Certification&lt;/strong&gt; – Haven’t started yet…&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Read up on running my own business&lt;/strong&gt; – not done much more this month.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Clean out binders&lt;/strong&gt; – Progress! Two more binders are now in PDF format! So 4 out of 8 done.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/d74095cbc05c_8687/Scorecard%20March_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Scorecard March" border="0" alt="Scorecard March" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/d74095cbc05c_8687/Scorecard%20March_thumb.png" width="369" height="224" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/803.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2011/04/04/goals-follow-up-3-of-12.aspx</guid>
            <pubDate>Mon, 04 Apr 2011 10:54:22 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/803.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2011/04/04/goals-follow-up-3-of-12.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/803.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Registering JavaScript's in your SharePoint/ASP.NET Project</title>
            <category>.NET Development</category>
            <category>SharePoint</category>
            <link>http://www.nnihlen.com/blog/archive/2011/03/11/registering-javascripts-in-your-sharepointaps.net-project.aspx</link>
            <description>&lt;p&gt;Before going on parental leave I was involved in a fairly large SharePoint project with a distributed team. A question that arose for us was how we should handle script registrations in the solution. With many developers going at it we felt we where in risk of redundant registrations or a registration left out because of miscommunication or faulty assumptions within the team.&lt;/p&gt;  &lt;p&gt;Even though we did this in SharePoint I see no reason why it shouldn’t work in a ASP.NET scenario.&lt;/p&gt;  &lt;h2&gt;Problem statement&lt;/h2&gt;  &lt;p&gt;How does any given webpart or user control know and ensure that the script it needs is registered on the page.&lt;/p&gt;  &lt;h2&gt;One possible solution&lt;/h2&gt;  &lt;p&gt;The solutions is of course many, this is the one I proposed as a solution.&lt;/p&gt;  &lt;p&gt;First step is to have a central “repository” of script keys.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Keys
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; jQuery
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Version_1_4_4_min = &lt;span class="str"&gt;"jquery-1.4.4.min.js"&lt;/span&gt;;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Easing_Version_1_3 = &lt;span class="str"&gt;"jquery.easing.1.3.js"&lt;/span&gt;;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; BxSlider_min = &lt;span class="str"&gt;"jquery.bxSlider.min.js"&lt;/span&gt;;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; UI_min = &lt;span class="str"&gt;"jquery-ui.min.js"&lt;/span&gt;;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Corner = &lt;span class="str"&gt;"jquery.corner.js"&lt;/span&gt;;

    }
}

&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Paths
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; jQuery
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Version_1_4_4_min = &lt;span class="str"&gt;"/_layouts/BrandX/js/jquery-1.4.4.min.js"&lt;/span&gt;;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Easing_Version_1_3 = &lt;span class="str"&gt;"/_layouts/BrandX/js/jquery.easing.1.3.js"&lt;/span&gt;;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; BxSlider_min = &lt;span class="str"&gt;"/_layouts/BrandX/js/jquery.bxSlider.min.js"&lt;/span&gt;;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; UI_min = &lt;span class="str"&gt;"/_layouts/BrandX/js/jquery-ui.min.js"&lt;/span&gt;;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Corner = &lt;span class="str"&gt;"/_layouts/BrandX/JS/jquery.corner.js"&lt;/span&gt;;
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt;Then some sort of centralized registration logic/service.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ClientScriptService
{
    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; _scriptTagTemplate 
          = &lt;span class="str"&gt;"&amp;lt;script type=\"text/javascript\" src=\"{0}\"&amp;gt; &amp;lt;/script&amp;gt;"&lt;/span&gt;;

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; EnsureClientScript(Page page, &lt;span class="kwrd"&gt;string&lt;/span&gt; scriptKey, &lt;span class="kwrd"&gt;string&lt;/span&gt; scriptPath, Type callerType)
    {
        ClientScriptManager scriptManager = page.ClientScript;

        &lt;span class="kwrd"&gt;if&lt;/span&gt; (scriptManager.IsClientScriptBlockRegistered(scriptKey) == &lt;span class="kwrd"&gt;false&lt;/span&gt;)  {
            scriptManager.RegisterClientScriptBlock(callerType, 
                                scriptKey,
                                &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(_scriptTagTemplate, scriptPath));
        }
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt;The effect being that each web part ensures its own script dependencies.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Page_Load(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e) {
    ClientScriptService.EnsureClientScript(&lt;span class="kwrd"&gt;this&lt;/span&gt;.Page, 
         Scripts.Keys.jQuery.Version_1_4_4,   
         Scripts.Paths.jQuery.Version_1_4_4,
         &lt;span class="kwrd"&gt;this&lt;/span&gt;.GetType());
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt;My thought with this was to use it consistently throughout the portal so for example the master page contains a server control registering scripts that is used throughout the portal. For example:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MasterPageScriptRegistrations : WebControl
{
    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; CreateChildControls() {
        &lt;span class="kwrd"&gt;base&lt;/span&gt;.CreateChildControls();

        ClientScriptService.EnsureClientScript(&lt;span class="kwrd"&gt;this&lt;/span&gt;.Page, 
            Scripts.Keys.jQuery.Version_1_4_4_min,
            Scripts.Paths.jQuery.Version_1_4_4_min, 
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.GetType());

        ClientScriptService.EnsureClientScript(&lt;span class="kwrd"&gt;this&lt;/span&gt;.Page, 
            Scripts.Keys.jQuery.Easing_Version_1_3,
            Scripts.Paths.jQuery.Easing_Version_1_3, 
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.GetType());

        &lt;span class="rem"&gt;/* ... */&lt;/span&gt;
    }
}&lt;/pre&gt;

&lt;p&gt;So what do you think? Good/bad? Am I making a hen of a feather? I really appreciate feedback (either here in the comments or by email to niklas.nihlen[at]gmail.com).&lt;/p&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/802.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2011/03/11/registering-javascripts-in-your-sharepointaps.net-project.aspx</guid>
            <pubDate>Fri, 11 Mar 2011 14:11:39 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/802.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2011/03/11/registering-javascripts-in-your-sharepointaps.net-project.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/802.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Goals follow-up 2 of 12</title>
            <category>Life</category>
            <link>http://www.nnihlen.com/blog/archive/2011/02/28/goals-follow-up-2-of-12.aspx</link>
            <description>&lt;p&gt;Time for the second follow up on how this years goals are going.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Spend time with my daughter&lt;/strong&gt; – Spot on! She is actually “helping” me write this post. She also decided not to sleep a night for time being so the time we spend together is a little to much for my taste &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/5dc0647674a5_90D2/wlEmoticon-winkingsmile_2.png" /&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Loose weight&lt;/strong&gt; – Is going ok. Actually thought I would start loosing more faster when turning up the knob on work out. Maybe I need to start eat well to..&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/5dc0647674a5_90D2/Weight%20Curve%20Feb.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Weight Curve Feb" border="0" alt="Weight Curve Feb" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/5dc0647674a5_90D2/Weight%20Curve%20Feb_thumb.png" width="376" height="252" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Clean up the attic&lt;/strong&gt; – Status Q &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-sadsmile" alt="Sad smile" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/5dc0647674a5_90D2/wlEmoticon-sadsmile_2.png" /&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Learn Ruby&lt;/strong&gt; – Moving along nicely. Almost read “Rails for .NET Developers” and started playing around a little.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.pragprog.com/titles/cerailn/rails-for-net-developers"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 3px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Rails_for_net_devs_cover" border="0" alt="Rails_for_net_devs_cover" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/5dc0647674a5_90D2/Rails_for_net_devs_cover_3.jpg" width="132" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Git&lt;/strong&gt; – Progress! I’ve managed to get myself in to a half day workshop with &lt;a href="http://ambientideas.com/"&gt;Matthew McCullough&lt;/a&gt;. Awesome stuff, I learned a lot. I also put up my first &lt;a href="https://github.com/nippe/TrayWeek"&gt;repository at github&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/5dc0647674a5_90D2/github-logo_4.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="github-logo" border="0" alt="github-logo" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/5dc0647674a5_90D2/github-logo_thumb_1.png" width="129" height="129" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Windows Phone 7 App&lt;/strong&gt; – Haven’t gotten around to it yet.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Read up on running my own business&lt;/strong&gt; – On track. Attended seminars in writing a business plan and budgeting.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Clean out binders&lt;/strong&gt; – Still sorting PDF’s from the the binders I scanned in January. So still only 25% done.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;I know your reaction to this. Oh no you didn’t! Yes I did. I went ahead and created a scorecard! Guess my years at Microsoft indoctrinated me some &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/5dc0647674a5_90D2/wlEmoticon-smile_2.png" /&gt;.&lt;/p&gt;              &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/5dc0647674a5_90D2/Scorecard%20Feb_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Scorecard Feb" border="0" alt="Scorecard Feb" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/5dc0647674a5_90D2/Scorecard%20Feb_thumb.png" width="260" height="185" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/801.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2011/02/28/goals-follow-up-2-of-12.aspx</guid>
            <pubDate>Mon, 28 Feb 2011 11:41:39 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/801.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2011/02/28/goals-follow-up-2-of-12.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/801.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Using Polar ProTrainer on Multiple Computers (using dropbox)</title>
            <category>Sports</category>
            <category>Productivity</category>
            <category>Computing</category>
            <link>http://www.nnihlen.com/blog/archive/2011/02/11/using-polar-protrainer-on-multiple-computers-using-dropbox.aspx</link>
            <description>&lt;p&gt;I use &lt;a href="http://www.polar.fi/en/products/training_software/polar_protrainer_5"&gt;Polar ProTrainer 5&lt;/a&gt; to track all my physical training (running, underwater rugby, crossfit and so on). I also have multiple computers and want to be able to access and sync my watch from anyone of them. When I travel in my work that becomes extra important.&lt;/p&gt;  &lt;p&gt;So here is how I solved it.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/8bb857abdede_97E5/Diagram_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Diagram" border="0" alt="Diagram" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/8bb857abdede_97E5/Diagram_thumb.png" width="218" height="240" /&gt;&lt;/a&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;h2&gt;IR Stick&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/8bb857abdede_97E5/irda_usb_240x298_4.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="irda_usb_240x298" border="0" alt="irda_usb_240x298" align="left" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/8bb857abdede_97E5/irda_usb_240x298_thumb_1.jpg" width="140" height="126" /&gt;&lt;/a&gt;First of all I had to get a IR USB stick after upgrading my last computer to 64-bit. The only one I found that supports 64-bit  was Polar’s own. Very expensive, but it works. Polars info about the IrDA adapter can be found &lt;a href="http://www.polar.fi/en/products/accessories/IrDA_USB_Adapter"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h2&gt;Dropbox&lt;/h2&gt;  &lt;p&gt;You need a &lt;a href="http://www.dropbox.com"&gt;dropbox&lt;/a&gt; account.&lt;/p&gt;  &lt;p&gt;I located my personal folder &lt;strong&gt;&lt;em&gt;C:\Program Files (x86)\Polar\Polar ProTrainer\Niklas Nihén&lt;/em&gt;&lt;/strong&gt; it might be under compability files (Vista and later) &lt;strong&gt;&lt;em&gt;C:\Users\username\AppData\Local\VirtualStore\Program Files (x86)\Polar\Polar ProTrainer&lt;/em&gt;&lt;/strong&gt;. Then I copied that to my Dropbox folder.&lt;/p&gt;  &lt;h2&gt;ProTrainer&lt;/h2&gt;  &lt;p&gt;Then I installed Polar ProTrainer 5 on my new computer. When installed you’re promted to create a new User. Ther I chosed to create a &lt;strong&gt;&lt;em&gt;New Person&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/8bb857abdede_97E5/NewPerson02_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="NewPerson02" border="0" alt="NewPerson02" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/8bb857abdede_97E5/NewPerson02_thumb.png" width="300" height="335" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then I selected &lt;strong&gt;&lt;em&gt;Add Existing Person…&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/8bb857abdede_97E5/NewPerson03_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="NewPerson03" border="0" alt="NewPerson03" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/8bb857abdede_97E5/NewPerson03_thumb.png" width="349" height="314" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; Then I browsed to my pdd-file from the “old” copied profile.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/8bb857abdede_97E5/NewPerson04_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="NewPerson04" border="0" alt="NewPerson04" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/8bb857abdede_97E5/NewPerson04_thumb.png" width="372" height="209" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I was up and running. Then I installed Polar ProTrainer on my other computer and added the profile in exactly the same manner.&lt;/p&gt;  &lt;p&gt;Viola! I can sync my watch with any of the computers and it shows up on all of them. Probably not at all supported by Polar but it works for me &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/8bb857abdede_97E5/wlEmoticon-smile_2.png" /&gt;. Hopefully this helps someone else that faces the same challenge. &lt;/p&gt;  &lt;p&gt;Happy running!&lt;/p&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/800.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2011/02/11/using-polar-protrainer-on-multiple-computers-using-dropbox.aspx</guid>
            <pubDate>Fri, 11 Feb 2011 11:18:44 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/800.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2011/02/11/using-polar-protrainer-on-multiple-computers-using-dropbox.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/800.aspx</wfw:commentRss>
        </item>
        <item>
            <title>You say Tomato, I say Pomodoro</title>
            <category>Productivity</category>
            <link>http://www.nnihlen.com/blog/archive/2011/02/01/you-say-tomato-i-say-pomodoro.aspx</link>
            <description>&lt;p&gt;I’ve been playing around a little with the Pomodoro technique to see if I can increase my productivity (and effectively). &lt;/p&gt;  &lt;p&gt;For you that haven’t heard about the Pomodoro technique is a way of using an egg timer to focus you’re self in 25 minutes intervals. Read more about it at &lt;a href="http://www.pomodorotechnique.com"&gt;www.pomodorotechnique.com&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I’m by no means an expert on the Pomodoro technique, I’m just getting started. But it really appeals to me because I usually have problems focusing at one thing at the time.&lt;/p&gt;  &lt;p&gt;What’s the first thing I do when starting to get into a new technique? Yep, you guessed it. Check out the tools! So this post won't focus on doing the Pomodoro technique, there’s others that does that so much better than me, but on the tools available. I will focus on windows with some mentioning of web and iPhone tools.&lt;/p&gt;  &lt;p&gt;I was trying to find a desktop tool to run on Windows 7. I stumbled upon &lt;a href="http://getconcentrating.com/"&gt;Concentrate&lt;/a&gt; of Mac OS and got really jealous. So I started on a little endeavor to se what's available in the Windows world. This is not in any way a complete guide. Just stuff I managed to sniff out.&lt;/p&gt;  &lt;h2&gt;Windows&lt;/h2&gt;  &lt;h3&gt;Pomodoro – MillSquareSoftware&lt;/h3&gt;  &lt;p&gt;This pomodoro tool is avaliable at &lt;a title="http://www.millsquaresoftware.com/pomodoro.html" href="http://www.millsquaresoftware.com/pomodoro.html"&gt;http://www.millsquaresoftware.com/pomodoro.html&lt;/a&gt;. It’s pretty good. It has a task list that you can work from. I don’t think it saves stats on interruptions and such. Visually it’s not that appealing. Looks like a small little winforms app which isn't that sexy. But with my limitied testing it does the job.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Pomodoroon-Windows_9C47/Pomodor%20MillSquareSoftware_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Pomodor MillSquareSoftware" border="0" alt="Pomodor MillSquareSoftware" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Pomodoroon-Windows_9C47/Pomodor%20MillSquareSoftware_thumb.png" width="240" height="169" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;Pomodario&lt;/h3&gt;  &lt;p&gt;Pomodario is an &lt;a href="http://get.adobe.com/air/"&gt;Adobe Air&lt;/a&gt; app that is available for download from &lt;a title="http://code.google.com/p/pomodairo/" href="http://code.google.com/p/pomodairo/"&gt;http://code.google.com/p/pomodairo/&lt;/a&gt;. Somehow very many pomodoro apps seems to be Adobe Air apps. I’m not thrilled about Adobe Air and would rather have something more Windowsiy. That said pomodario is actually my Pomodoro app of choice so far.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Pomodoroon-Windows_9C47/pmodario_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="pmodario" border="0" alt="pmodario" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Pomodoroon-Windows_9C47/pmodario_thumb.png" width="173" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It has a nice interface keeping track of interruptions and such. Remember the first time I tried it I nearly shat myself when the alarm bell went of. Luckily the volume is adjustable. Pomodario also has a nice statistics function.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Pomodoroon-Windows_9C47/Pomodario%20statistics_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Pomodario statistics" border="0" alt="Pomodario statistics" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Pomodoroon-Windows_9C47/Pomodario%20statistics_thumb.png" width="244" height="182" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Focus Booster&lt;/h3&gt;  &lt;p&gt;Focus Boster can be downloaded from &lt;a title="http://www.focusboosterapp.com" href="http://www.focusboosterapp.com"&gt;http://www.focusboosterapp.com&lt;/a&gt;. It two is an Adobe Air app. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Pomodoroon-Windows_9C47/FocusBooster_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="FocusBooster" border="0" alt="FocusBooster" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Pomodoroon-Windows_9C47/FocusBooster_thumb.png" width="240" height="29" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;They way I understand FocusBooster is that its just the timer, no tasklist, logging of interruptions and such.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;Tomatoday&lt;/h3&gt;  &lt;p&gt;I don’t have Tomatoday naild down yet. Seem promesing but unmature. It’s a SilverLight app available at &lt;a title="http://www.tomatoday.dk/" href="http://www.tomatoday.dk/"&gt;http://www.tomatoday.dk/&lt;/a&gt; that can be runned in or out of browser.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Pomodoroon-Windows_9C47/Tomatoday%20Timer%20OutOfBrowser_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Tomatoday Timer OutOfBrowser" border="0" alt="Tomatoday Timer OutOfBrowser" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Pomodoroon-Windows_9C47/Tomatoday%20Timer%20OutOfBrowser_thumb.png" width="240" height="40" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It has a task list but that does not seem to be connected to the timer what I can see (but again this can be to my lack of understanding).&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Pomodoroon-Windows_9C47/Tomatoist%20Active%20Inventory_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Tomatoist Active Inventory" border="0" alt="Tomatoist Active Inventory" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Pomodoroon-Windows_9C47/Tomatoist%20Active%20Inventory_thumb.png" width="190" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So not I favorite of mine, but I think it might be if development continues.&lt;/p&gt;  &lt;h3&gt;Dinner Timer&lt;/h3&gt;  &lt;p&gt;This is not a Pomodoro app per se. But what is a pomodoro but a kitchen timer. So if you do all the other stuff on paper this will probably work fine, haven’t tried it myself. Available from &lt;a title="http://www.dinnertimer.com/" href="http://www.dinnertimer.com/"&gt;http://www.dinnertimer.com/&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Pomodoroon-Windows_9C47/Dinner%20Timer_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Dinner Timer" border="0" alt="Dinner Timer" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Pomodoroon-Windows_9C47/Dinner%20Timer_thumb.png" width="240" height="221" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h2&gt;Web&lt;/h2&gt;  &lt;p&gt;For web the one I found was &lt;a href="http://tomatoi.st/"&gt;Tomatoist&lt;/a&gt; which is great. But it doesn’t work for me. I loose it in a tab somewhere so it becomes more of a distraction than a productivity helper.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Pomodoroon-Windows_9C47/Tomatoist%20Screen%20Shot_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Tomatoist Screen Shot" border="0" alt="Tomatoist Screen Shot" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Pomodoroon-Windows_9C47/Tomatoist%20Screen%20Shot_thumb.png" width="240" height="130" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;iPhone&lt;/h3&gt;  &lt;p&gt;There is a lot of options here, the one I’ve tried and liked the most is &lt;a href="http://itunes.apple.com/us/app/mypomodoro-lite/id348764250?mt=8"&gt;myPomodoro Lite&lt;/a&gt;. It’s pretty good in my opinion, the thing that disturbs me is the single taskness of the iPhone. If you want to change playlist in iPod/Spotify –&amp;gt; the timer pauses.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Pomodoroon-Windows_9C47/iPhone%20Pomodoro%202.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="iPhone Pomodoro 2" border="0" alt="iPhone Pomodoro 2" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Pomodoroon-Windows_9C47/iPhone%20Pomodoro%202_thumb.png" width="160" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Pomodoroon-Windows_9C47/iPhone%20Pomodoro%203.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="iPhone Pomodoro 3" border="0" alt="iPhone Pomodoro 3" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Pomodoroon-Windows_9C47/iPhone%20Pomodoro%203_thumb.png" width="164" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;Summary&lt;/h3&gt;  &lt;p&gt;My favorite so far is Pomodario. It’s simple to use and tracks simple statistics. Do you have any other favorites?&lt;/p&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/799.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2011/02/01/you-say-tomato-i-say-pomodoro.aspx</guid>
            <pubDate>Tue, 01 Feb 2011 22:06:32 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/799.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2011/02/01/you-say-tomato-i-say-pomodoro.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/799.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Goals follow-up 1 of 12</title>
            <link>http://www.nnihlen.com/blog/archive/2011/02/01/goals-follow-up-1-of-12.aspx</link>
            <description>&lt;p&gt;As my friend &lt;a href="http://johannorrman.wordpress.com/2011/02/01/personligamal-2011-sammanfattning-av-januari/"&gt;Johan&lt;/a&gt; points out, the first month of 2011 has reached its end. So how am I doing against the &lt;a href="http://www.nnihlen.com/blog/archive/2011/01/13/goal-post-2011.aspx"&gt;original goals&lt;/a&gt;?&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Spend time with my daughter&lt;/strong&gt; - Hell yeah! We’re still in a finding-the-routine phase, but it’s awesome.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Goals-followup-1-of-12_10A06/HilmaAndMe.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="HilmaAndMe" border="0" alt="HilmaAndMe" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Goals-followup-1-of-12_10A06/HilmaAndMe_thumb.jpg" width="200" height="260" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Lose weight&lt;/strong&gt; – getting there. My problem is that when I turn up the knob on exercise I become so incredible hungry all the time..&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Goals-followup-1-of-12_10A06/Weigh%20Curve%202011-02-01.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Weigh Curve 2011-02-01" border="0" alt="Weigh Curve 2011-02-01" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Goals-followup-1-of-12_10A06/Weigh%20Curve%202011-02-01_thumb.png" width="394" height="263" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Clean up on the attic&lt;/strong&gt; – baby steps. I’ve gone through all cables (can you believe I hade 4 boxes of the stuff).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Learn Ruby&lt;/strong&gt; – managed to install ruby and rails both Windows and on a Ubuntu box and create a basic scaffold app. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Git&lt;/strong&gt; – Nope, not yet.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Windows Phone 7 App&lt;/strong&gt; – Nope, not yet.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SharePoint Certification&lt;/strong&gt; – Nope, not yet.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Read up on running my own business&lt;/strong&gt; – Get started, attended a introduction seminar at &lt;a href="http://www.nyforetagscentrum.org"&gt;Nyföretagscentrum&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Cleanout Binders&lt;/strong&gt; – Yep, doin’ it! I had 16 binders to start with. My goal is to get rid of at least 8. So far I have eliminated 2. So 25% done. But that’s not true, I haven't sorted the 40-50 pdf-files the 2 binders resulted in.&lt;/p&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/798.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2011/02/01/goals-follow-up-1-of-12.aspx</guid>
            <pubDate>Tue, 01 Feb 2011 18:23:52 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/798.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2011/02/01/goals-follow-up-1-of-12.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/798.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Goal Post 2011</title>
            <category>Life</category>
            <link>http://www.nnihlen.com/blog/archive/2011/01/13/goal-post-2011.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Goal-Post-2011_1486E/SOCCER_NET__2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="SOCCER_NET_" border="0" alt="SOCCER_NET_" align="left" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Goal-Post-2011_1486E/SOCCER_NET__thumb.jpg" width="260" height="200" /&gt;&lt;/a&gt;So, this is the thing to do I have understood. To write up a “goal post” in the beginning of the year. I don’t mean a goal post as in the picture but a post about my goals. I know you got that straight up, but I still had to be the smart ass &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Goal-Post-2011_1486E/wlEmoticon-winkingsmile_2.png" /&gt;. Here it goes:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Spend time with my daughter&lt;/strong&gt; – I’m starting this year with an extensive parental leave with my 1+ year daughter, the goal here is to give her a lot of time and make sure I am the favorite parent &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Goal-Post-2011_1486E/wlEmoticon-winkingsmile_2.png" /&gt;. Which leads to my next goal:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Be flexible&lt;/strong&gt; – after the summer both me and my wife will be working with two kids in day care. Have no idea how that’s gonna pan out so I might have to reduce working time a little. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Lose weight&lt;/strong&gt; – not that I feel particularly overweight but my knees hurt when I intensify my running and that’s no fun at all. I thing my best performing weight is 85-90 kg (187-198 pounds) and I’m now at 100 kg (220 pounds).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Clean up on the attic&lt;/strong&gt; – I have a lot of old deprecated stuff that can be thrown away.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Learn Ruby&lt;/strong&gt; – in the PragProg fashion of learning a new language a year (which I have not done so far) I’m going to get into Ruby and Ruby on Rails. My learning project is to create a site for my underwater ruby team where players can accept training invitations and such (think I’ll put it on github)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Git&lt;/strong&gt; – Get my head around distributed version control systems starting with Git. Tekpub here I come.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Windows Phone 7 App&lt;/strong&gt; – Nothing fancy, just want to build basic app to get my head around how tis done.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SharePoint Certification &lt;/strong&gt;– Not that I think certifications really say that much about a persons skill, but we got it in our goals at work and for me it’s a bit of an ego boast to pass one.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;National team in underwater rugby&lt;/strong&gt; – this is a tough one. I’ll decide in March if I’m going to try to get into the team. Has to do with what the family says about it too. It takes time from home to get in the team.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Read up on running my own business&lt;/strong&gt; – a thought I’ve been playing with for a while that I need to get more facts about before making a decision about it. Maybe hit some seminars on the topic as well.&lt;/p&gt;    &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Goal-Post-2011_1486E/Binders_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="Binders" border="0" alt="Binders" align="right" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Goal-Post-2011_1486E/Binders_thumb.jpg" width="260" height="239" /&gt;&lt;/a&gt;&lt;strong&gt;Cleanout Binders&lt;/strong&gt; – I’ve got a lot of old irrelevant papers in binders. That has to be processed and thrown away or scanned. My goal is to get rid of half the binders at least.&lt;/p&gt;        &lt;p&gt;Well that’s it I think.&lt;/p&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/797.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2011/01/13/goal-post-2011.aspx</guid>
            <pubDate>Thu, 13 Jan 2011 21:57:14 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/797.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2011/01/13/goal-post-2011.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/797.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Getting Stated Unit Testing Your SharePoint Code with Moles</title>
            <category>SharePoint</category>
            <link>http://www.nnihlen.com/blog/archive/2011/01/02/getting-stated-unit-testing-your-sharepoint-code-with-moles.aspx</link>
            <description>&lt;p&gt;This is something that’s been on the back burner for a while for me. I haven’t gotten around to trying it out until now. I just want to apologize up front for the code as images in this post, not proud of that but some circumstances led to that, sorry.   &lt;br /&gt;&lt;/p&gt;  &lt;h2&gt;Short Intro&lt;/h2&gt;  &lt;p&gt;Moles is a isolation framework from MS Research (the almighty Peli de Helux, once Mr. MBUnit). It enables you to “mock” otherwise un-mockable objects like SPContext, SPWeb and so on.&lt;/p&gt;  &lt;p&gt;Read more about it here: &lt;a title="http://research.microsoft.com/en-us/projects/pex/" href="http://research.microsoft.com/en-us/projects/pex/"&gt;http://research.microsoft.com/en-us/projects/pex/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And this white paper: &lt;a href="http://research.microsoft.com/en-us/projects/pex/pexsharepoint.pdf"&gt;Unit Testing SharePoint Foundation with Microsoft Pex and Moles&lt;/a&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;h2&gt;Install Moles Visual Studio Plug-in&lt;/h2&gt;  &lt;p&gt;Moles is distributed as a plug-in to Visual Studio, the 64-bit version (SharePoint 2010 is 64-bit only) can be download from this location: &lt;a title="http://visualstudiogallery.msdn.microsoft.com/en-us/22c07bda-ffc9-479a-9766-bfd6ccacabd4" href="http://visualstudiogallery.msdn.microsoft.com/en-us/22c07bda-ffc9-479a-9766-bfd6ccacabd4"&gt;http://visualstudiogallery.msdn.microsoft.com/en-us/22c07bda-ffc9-479a-9766-bfd6ccacabd4&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Install it in god old Next * n –&amp;gt; Finish manner.   &lt;br /&gt;&lt;/p&gt;  &lt;h2&gt;Generate Moles&lt;/h2&gt;  &lt;p&gt;Next step is to generate Moles from the Assemblies containing the classes you want to isolate/mock. Crack open your SharePoint project after you installed the plug-in. Expand your references and locate the reference that you want to generate Moles from, I chose Microsoft.SharePoint.Publishing in the image below, but as you can see I’ve already done it for Microsoft.SharePoint. Right-click it and select &lt;strong&gt;&lt;em&gt;Add Moles Assembly&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Getting-Stated-Unit-Testing-Your-SharePo_7125/Moles%2001%20Add%20Moles%20Assebmly-blured_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Moles 01 Add Moles Assebmly-blured" border="0" alt="Moles 01 Add Moles Assebmly-blured" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Getting-Stated-Unit-Testing-Your-SharePo_7125/Moles%2001%20Add%20Moles%20Assebmly-blured_thumb.png" width="400" height="308" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now Build your project and let’s have a look at what changes the Moles framework done to your project.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Added a .moles file&lt;/li&gt;    &lt;li&gt;Added a .moles.dll assembly to the MolesAssemblies directory&lt;/li&gt;    &lt;li&gt;Added a reference to the .moles.dll assebmly&lt;/li&gt; &lt;/ol&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Getting-Stated-Unit-Testing-Your-SharePo_7125/Moles%2002%20Changes%20in%20Project_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Moles 02 Changes in Project" border="0" alt="Moles 02 Changes in Project" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Getting-Stated-Unit-Testing-Your-SharePo_7125/Moles%2002%20Changes%20in%20Project_thumb.png" width="369" height="589" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This next step is only valid if you’re using Team Foundation Server. In order for this to work on the TFS build server (anyway, the way we got it working), you need change the build action of the &lt;strong&gt;&lt;em&gt;&amp;lt;Assembly name&amp;gt;.moles&lt;/em&gt;&lt;/strong&gt; file from &lt;strong&gt;&lt;em&gt;Moles&lt;/em&gt;&lt;/strong&gt; to &lt;strong&gt;&lt;em&gt;None&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Getting-Stated-Unit-Testing-Your-SharePo_7125/Moles%2003%20Change%20Build%20Action_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Moles 03 Change Build Action" border="0" alt="Moles 03 Change Build Action" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Getting-Stated-Unit-Testing-Your-SharePo_7125/Moles%2003%20Change%20Build%20Action_thumb.png" width="353" height="340" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And you’re set to go do some testing.   &lt;br /&gt;&lt;/p&gt;  &lt;h2&gt;Writing Tests&lt;/h2&gt;  &lt;p&gt;First off, let's have a look at a method we want to get tested.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Getting-Stated-Unit-Testing-Your-SharePo_7125/Moles%2004%20InitializeView%20Method_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Moles 04 InitializeView Method" border="0" alt="Moles 04 InitializeView Method" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Getting-Stated-Unit-Testing-Your-SharePo_7125/Moles%2004%20InitializeView%20Method_thumb.png" width="916" height="285" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As we can see it takes a SPWeb object as a parameter and calls web.Site.RootWeb on it. (It passes this to the CountryRepository, but we don't have to care about that here - it's also mocked :)).&lt;/p&gt;  &lt;p&gt;So we need to get our test started. Some initial points:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Getting-Stated-Unit-Testing-Your-SharePo_7125/Moles%2006%20Test%20start_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Moles 06 Test start" border="0" alt="Moles 06 Test start" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Getting-Stated-Unit-Testing-Your-SharePo_7125/Moles%2006%20Test%20start_thumb.png" width="404" height="192" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Use the HostType attribute to indicate that it's a Mole-test&lt;/li&gt;    &lt;li&gt;Trap default behaviours&lt;/li&gt;    &lt;li&gt;Create your Moles. Note that the objects starts with M + the original object name. SPWeb -&amp;gt; MSPweb, SPSite -&amp;gt; MSPSite and so on.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Next step is to set up behavior for the moles. Remember from above web.Site.RootWeb. so the first spweb returns an spsite that returns a spweb (RootWeb). Hooking up behaviors for properties is done by the original property name plus Get/Set. Hooking up the Site property on a SPWeb object hence becoms spweb.SiteGet. The image below illustrates this and how to build the command chain.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Getting-Stated-Unit-Testing-Your-SharePo_7125/Moles%2007%20Moles%20Setup_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Moles 07 Moles Setup" border="0" alt="Moles 07 Moles Setup" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Getting-Stated-Unit-Testing-Your-SharePo_7125/Moles%2007%20Moles%20Setup_thumb.png" width="278" height="62" /&gt;&lt;/a&gt;&lt;/p&gt;            &lt;p&gt;That done we can now call InitializeView with our Moled spweb and get a predictable controlled execution:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Getting-Stated-Unit-Testing-Your-SharePo_7125/Moles%2008%20Call%20InitializeView_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Moles 08 Call InitializeView" border="0" alt="Moles 08 Call InitializeView" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Getting-Stated-Unit-Testing-Your-SharePo_7125/Moles%2008%20Call%20InitializeView_thumb.png" width="384" height="46" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now let's look at the test as a whole. Worth noticing is that there is a few &lt;a href="http://code.google.com/p/moq/"&gt;Moq&lt;/a&gt; mocks in this test also to isolate the thing I want tested.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Getting-Stated-Unit-Testing-Your-SharePo_7125/Moles%2009%20Whole%20test_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Moles 09 Whole test" border="0" alt="Moles 09 Whole test" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Getting-Stated-Unit-Testing-Your-SharePo_7125/Moles%2009%20Whole%20test_thumb.png" width="678" height="478" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="left"&gt;Hope this post can lower the hurdle for some to get into unit testing your SharePoint code.&lt;/p&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/796.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2011/01/02/getting-stated-unit-testing-your-sharepoint-code-with-moles.aspx</guid>
            <pubDate>Sun, 02 Jan 2011 21:42:53 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/796.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2011/01/02/getting-stated-unit-testing-your-sharepoint-code-with-moles.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/796.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Quick SharePoint Tip: Remove SharePoint Solutions</title>
            <category>SharePoint</category>
            <link>http://www.nnihlen.com/blog/archive/2010/11/26/quick-sharepoint-tip-remove-sharepoint-solutions.aspx</link>
            <description>&lt;p&gt;
    When working in a development environment you’re bound to get it dirty or
    someone else on the team make major refactoring's. You need do clean up and make
    a clean deploy. Here’s a simple way to retract and un-install all SharePoint
    Farm Solutions using PowerShell (haven’t tried this with sandboxed solutions).&lt;/p&gt;
&lt;p&gt;
    Retract All&lt;/p&gt;
&lt;pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;    courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Get-SPSolution | &lt;span style="color: #0000ff"&gt;
        foreach&lt;/span&gt; { Uninstall-SPSolution -Identity $_.Name -Confirm:$&lt;span style="color: #0000ff"&gt;false&lt;/span&gt; -AllWebApplications }&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;
    Remove All&lt;/p&gt;
&lt;pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;    courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Get-SPSolution | 
&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; { Remove-SPSolution -Identity $_.Name -Confirm:$&lt;span style="color: #0000ff"&gt;false&lt;/span&gt; -Force }
&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;That's it&lt;/p&gt;
&lt;img src="http://www.nnihlen.com/blog/aggbug/795.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2010/11/26/quick-sharepoint-tip-remove-sharepoint-solutions.aspx</guid>
            <pubDate>Fri, 26 Nov 2010 07:12:34 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/795.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2010/11/26/quick-sharepoint-tip-remove-sharepoint-solutions.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/795.aspx</wfw:commentRss>
        </item>
        <item>
            <title>A bit of fun with OData</title>
            <category>Productivity</category>
            <category>.NET Development</category>
            <category>Office</category>
            <link>http://www.nnihlen.com/blog/archive/2010/10/27/a-bit-of-fun-with-odata.aspx</link>
            <description>&lt;p&gt;So this post has really no big point. I started out by the fact that I’m a heavy user of Tasks in Outlook, as I have eluded to earlier: &lt;a title="http://www.nnihlen.com/blog/archive/2009/05/22/adding-outlook-tasks-fast-using-launchy-with-a-little-programming.aspx" href="http://www.nnihlen.com/blog/archive/2009/05/22/adding-outlook-tasks-fast-using-launchy-with-a-little-programming.aspx"&gt;http://www.nnihlen.com/blog/archive/2009/05/22/adding-outlook-tasks-fast-using-launchy-with-a-little-programming.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Much of my personality comes form being an athlete (and a geek) and as the mentality from that is to always improve you’re self. But that’s kinda hard if you don’t have any measurements. So on that note bundled up with a growing curiosity for for OData I sat down and came up with the following scheme.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/OutLookTaskStats_01_2.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="OutLookTaskStats_01" border="0" alt="OutLookTaskStats_01" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/OutLookTaskStats_01_thumb.jpg" width="374" height="373" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So the idea is to import the task data from Outlook into a a database and then expose it as an OData service to for example &lt;a href="http://www.powerpivot.com/"&gt;Excel PowerPivot&lt;/a&gt; to play with the data and maybe try out the ASP.NET charting components.&lt;/p&gt;  &lt;h2&gt;Import&lt;/h2&gt;  &lt;p&gt;I created a simple database schema:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/DB%20Design_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="DB Design" border="0" alt="DB Design" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/DB%20Design_thumb.png" width="405" height="221" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The import is at this stage a very brute force thing. I figured you run it seldom, the amount of data isn’t that big and so on. So I went for the very ugly generate-SQL-statements-and-run-them-using-ADO.NET approach. I delete the data every time and recreate it. Not very elegant but works for the moment. I guess the next step here would be to use the C and U in the OData CRUD promise. But that will have to go into vNext.&lt;/p&gt;  &lt;p&gt;So here it is in all its ugliness:&lt;/p&gt;  &lt;pre class="brush: csharp; tab-size: 3;"&gt;using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Reflection;
using Microsoft.Office.Interop.Outlook;
using Exception = System.Exception;

namespace OutlookTaskStatistics.Importer
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var categoriesHt = new Hashtable();

            Application olApp;
            NameSpace ns = null;
            SqlConnection conn = null;

            try
            {
                olApp = new Application();
                ns = olApp.GetNamespace("mapi");

                ns.Logon("Outlook", Missing.Value, false, true);

                MAPIFolder taskFolder =
                    olApp.Session.GetDefaultFolder(OlDefaultFolders.olFolderTasks);


                conn = new SqlConnection(ConfigurationManager.ConnectionStrings["OutlookStatsDB"].ConnectionString);
                conn.Open();

                using (SqlCommand truncateCmd = new SqlCommand("TRUNCATE TABLE TasksCategories; DELETE FROM Tasks; DELETE FROM TasksCategories", conn))
                {
                    truncateCmd.ExecuteNonQuery();
                    //truncateCmd.CommandText = "DELETE FROM Tasks";
                    //truncateCmd.ExecuteNonQuery();
                }


                var cmdGetCategories = new SqlCommand("SELECT * FROM Categories", conn);
                categoriesHt = GetCategoriesHashTable(cmdGetCategories);

                int i = 0;

                foreach (object taskItem in taskFolder.Items)
                {
                    var ti = taskItem as TaskItem;


                    if (ti.Categories != null)
                    {
                        string[] taskCategories;
                        taskCategories = GetTaskCategories(ti);

                        foreach (string taskCategory in taskCategories)
                        {
                            if (!categoriesHt.ContainsKey(taskCategory.Trim()))
                            {
                                var updateCategoriesCmd =
                                    new SqlCommand("INSERT INTO Categories (CategoryName) VALUES (@catName)", conn);
                                var catNameParameter = new SqlParameter("@catName", SqlDbType.VarChar, 50);
                                catNameParameter.Value = taskCategory.Trim();
                                updateCategoriesCmd.Parameters.Add(catNameParameter);
                                updateCategoriesCmd.ExecuteNonQuery();

                                categoriesHt = GetCategoriesHashTable(cmdGetCategories);
                            }
                        }
                    }

                    string insertTasksStatement =
                        "INSERT INTO Tasks (TaskId, Subject, CreateTime, StartDate, DueDate, CompletedDate, Complete, Importance) " +
                        "VALUES (@entryId, @subject, @createDate, @startDate, @dueDate, @completedDate, @completed, @importance)";

                    var cmd = new SqlCommand(insertTasksStatement, conn);

                    var paramTaskId = new SqlParameter("@entryId", SqlDbType.VarChar, 140);
                    paramTaskId.Value = ti.EntryID;

                    var subjrectParam = new SqlParameter("@subject", SqlDbType.VarChar);
                    subjrectParam.Value = ti.Subject;

                    var createaionParam = new SqlParameter("@createDate", SqlDbType.SmallDateTime);
                    cmd.Parameters.Add(createaionParam);
                    if (DateSeemsSane(ti.CreationTime))
                    {
                        createaionParam.Value = ti.CreationTime;
                    }
                    else
                    {
                        createaionParam.Value = DBNull.Value;
                    }

                    var startDateParam = new SqlParameter("@startDate", SqlDbType.SmallDateTime);
                    cmd.Parameters.Add(startDateParam);
                    if (DateSeemsSane(ti.StartDate))
                    {
                        startDateParam.Value = ti.StartDate;
                    }
                    else
                    {
                        startDateParam.Value = DBNull.Value;
                    }

                    var dueDateParam = new SqlParameter("@dueDate", SqlDbType.SmallDateTime);
                    cmd.Parameters.Add(dueDateParam);
                    if (DateSeemsSane(ti.DueDate))
                    {
                        dueDateParam.Value = ti.DueDate;
                    }
                    else
                    {
                        dueDateParam.Value = DBNull.Value;
                    }

                    var completeDateParam = new SqlParameter("@completedDate", SqlDbType.SmallDateTime);
                    cmd.Parameters.Add(completeDateParam);
                    if (DateSeemsSane(ti.DateCompleted))
                    {
                        completeDateParam.Value = ti.DateCompleted;
                    }
                    else
                    {
                        completeDateParam.Value = DBNull.Value;
                    }

                    var completedParam = new SqlParameter("@completed", SqlDbType.Bit);
                    completedParam.Value = ti.Complete;

                    var importanceParam = new SqlParameter("@importance", SqlDbType.VarChar);

                    switch (ti.Importance)
                    {
                        case OlImportance.olImportanceLow:
                            importanceParam.Value = "Low";
                            break;
                        case OlImportance.olImportanceHigh:
                            importanceParam.Value = "High";
                            break;
                        default:
                            importanceParam.Value = "Normal";
                            break;
                    }

                    cmd.Parameters.Add(paramTaskId);
                    cmd.Parameters.Add(subjrectParam);
                    cmd.Parameters.Add(completedParam);
                    cmd.Parameters.Add(importanceParam);

                    cmd.ExecuteNonQuery();

                    if (ti.Categories != null)
                    {
                        string[] taskCategories = GetTaskCategories(ti);

                        foreach (string taskCategory in taskCategories)
                        {
                            string stmt =
                                "INSERT INTO TasksCategories (TaskId, CategoryId) VALUES (@taskId, @catId)";

                            var categoryTaskCmd = new SqlCommand(stmt, conn);

                            categoryTaskCmd.Parameters.Add(new SqlParameter("@taskId", ti.EntryID));
                            categoryTaskCmd.Parameters.Add(new SqlParameter("@catId",
                                                                            (int) categoriesHt[taskCategory.Trim()]));
                            categoryTaskCmd.ExecuteNonQuery();
                        }
                    }

                    i++;
                    if(i % 100 == 0)
                    {
                        Console.Write(i.ToString());
                    }
                    else
                    {
                        Console.Write(".");
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                throw;
            }
            finally
            {
                if (conn != null)
                {
                    if (conn.State != ConnectionState.Closed)
                    {
                        conn.Close();
                    }
                }
                ns.Logoff();
            }
        }


        private static string[] GetTaskCategories(TaskItem ti)
        {
            string[] taskCategories;
            if (ti.Categories.IndexOf(';') &amp;gt; 0)
            {
                taskCategories = ti.Categories.Split(';');
            }
            else
            {
                taskCategories = ti.Categories.Split(',');
            }
            return taskCategories;
        }


        private static bool DateSeemsSane(DateTime dateToCheck)
        {
            if (dateToCheck.Year &amp;gt;= 1900 &amp;amp;&amp;amp; dateToCheck.Year &amp;lt; 4501)
            {
                return true;
            }
            else
            {
                return false;
            }
        }


        private static Hashtable GetCategoriesHashTable(SqlCommand cmdGetCategories)
        {
            var categoriesHt = new Hashtable();
            SqlDataReader categoryReader = cmdGetCategories.ExecuteReader();
            while (categoryReader.Read())
            {
                categoriesHt.Add(categoryReader[categoryReader.GetOrdinal("CategoryName")],
                                 categoryReader[categoryReader.GetOrdinal("CategoryId")]);
            }
            categoryReader.Close();

            return categoriesHt;
        }
    }
}&lt;/pre&gt;

&lt;h2&gt;Exposing OData&lt;/h2&gt;

&lt;p&gt;Next step is to expose the data as a OData service. &lt;/p&gt;

&lt;h3&gt;Entity Framework Model&lt;/h3&gt;

&lt;p&gt;First of all we got to put a layer on top of the database that WCF Data Services (previously known as Astoria) understands, namely Linq to SQL or Entity Frame. I decided to go with EF here, so I right clicked in the solution tree and selected Add –&amp;gt; New Item… And then selected ADO.NET Entity Data Model. &lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/Create%20Entity%20Model_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Create Entity Model" border="0" alt="Create Entity Model" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/Create%20Entity%20Model_thumb.png" width="413" height="398" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select Generate From Database&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/Generate%20From%20DB_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Generate From DB" border="0" alt="Generate From DB" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/Generate%20From%20DB_thumb.png" width="237" height="219" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next step is to chose what DB to generate from and give the enties a name space:&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/Create%20Entity%20Model%2002_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Create Entity Model 02" border="0" alt="Create Entity Model 02" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/Create%20Entity%20Model%2002_thumb.png" width="408" height="364" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then select what tables (or sprocs/views for that matter) should be included in the model.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/Create%20Entity%20Model%2003_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Create Entity Model 03" border="0" alt="Create Entity Model 03" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/Create%20Entity%20Model%2003_thumb.png" width="408" height="364" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hit Finish and my result looked like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/Entity%20Model_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Entity Model" border="0" alt="Entity Model" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/Entity%20Model_thumb.png" width="388" height="284" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;OData Service&lt;/h3&gt;

&lt;p&gt;Next thing to do is to expose the model as OData. First up we create an OData Service or as Visual Studio (and Microsoft Marketing) likes to put it – WCF Data Service. (I you bingle that you probably wanna put “Astoria” in the search to).&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/Add%20OData%20Service_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Add OData Service" border="0" alt="Add OData Service" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/Add%20OData%20Service_thumb.png" width="344" height="414" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;When it’s created the xxx.svc.cs file will pop up in Visual Studio, here you’ll need to make two changes (or more if you want to lock down the data a little more then “ReadAll”). As I tried to show in the image below I tell the DataService to be of OutlookTaskStatsEntities and I set the Entity Access Rule to apply to “*”, that is all entites.&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/Service%20Config_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Service Config" border="0" alt="Service Config" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/Service%20Config_thumb.png" width="420" height="132" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ok, now we’re done, lets try it! F5 and hit the TaskStats.svc with a browser:&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/OData%20Service%20Started_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="OData Service Started" border="0" alt="OData Service Started" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/OData%20Service%20Started_thumb.png" width="411" height="260" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Looks good, now we can drilldown using the URL if we want to. For example &lt;a title="http://localhost:36277/TaskStats.svc/Categories(2)" href="http://localhost:36277/TaskStats.svc/Categories(2)"&gt;http://localhost:36277/TaskStats.svc/Categories(2)&lt;/a&gt; shows me the category “Personal”.&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/Category%20XML_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Category XML" border="0" alt="Category XML" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/Category%20XML_thumb.png" width="418" height="253" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;Excel PowerPivot&lt;/h2&gt;

&lt;p&gt;Ok, now we have the data out of Outlook and exposed as OData. Next step in my plan is to get it into Excel and I’m going to use PowerPivot for excel for that. If you don’t have the plug-in installed go get it from &lt;a href="http://www.powerpoivot.com"&gt;www.powerpoivot.com&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Fire up Excel and start PowerPivot.&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/PowerPivot%20Start_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="PowerPivot Start" border="0" alt="PowerPivot Start" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/PowerPivot%20Start_thumb.png" width="403" height="134" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s fetch the (o)data by hitting the “From Data Feeds” button.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/PowerPivot%20Open%20Feed_4.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="PowerPivot Open Feed" border="0" alt="PowerPivot Open Feed" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/PowerPivot%20Open%20Feed_thumb_1.png" width="417" height="90" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And the wizard kicks off. First step enter the service URL:&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/PowerPivot%20Open%20Feed%202_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="PowerPivot Open Feed 2" border="0" alt="PowerPivot Open Feed 2" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/PowerPivot%20Open%20Feed%202_thumb.png" width="410" height="419" /&gt;&lt;/a&gt;&lt;/p&gt;



























&lt;p&gt;After that we decide what data to import.&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/PowerPivot%20Open%20Feed%203_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="PowerPivot Open Feed 3" border="0" alt="PowerPivot Open Feed 3" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/PowerPivot%20Open%20Feed%203_thumb.png" width="412" height="421" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The import succeeds (hopefully).&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/PowerPivot%20Open%20Feed%204_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="PowerPivot Open Feed 4" border="0" alt="PowerPivot Open Feed 4" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/PowerPivot%20Open%20Feed%204_thumb.png" width="413" height="422" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And we have the data in Excel.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/PowerPivot%20Imported%20Data_4.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="PowerPivot Imported Data" border="0" alt="PowerPivot Imported Data" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/PowerPivot%20Imported%20Data_thumb_1.png" width="411" height="582" /&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Here is where my current skillset fails me and I really have to get better at massaging this data in Excel, maybe I should ask some of my BI centric customers for help :). Anyway here’s a little example of a first view of the data. I chose to create a Pivot diagram.&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/Create%20Pivot%20Diagram%2001_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Create Pivot Diagram 01" border="0" alt="Create Pivot Diagram 01" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/Create%20Pivot%20Diagram%2001_thumb.png" width="195" height="319" /&gt;&lt;/a&gt;&lt;/p&gt;





&lt;p&gt;After adding some axis and slicers here’s what I got:&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/PowerPivot%20Data_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="PowerPivot Data" border="0" alt="PowerPivot Data" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/A-bit-of-fun-with-OData_9EA9/PowerPivot%20Data_thumb.png" width="420" height="269" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p align="center"&gt; &lt;/p&gt;

&lt;h2&gt;Summary&lt;/h2&gt;

&lt;p&gt;I think the points I want to drive with this post is:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Show a way to access data in Outlook&lt;/li&gt;

  &lt;li&gt;I hope I’ve shown in this post that it is relatively simple to expose you model as OData. This is of course a greatly simplified example where I don’t really care about security. &lt;/li&gt;

  &lt;li&gt;Have a look at PowerPivot&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Next up I’m going to consume the OData from Linq and see if I can do some fun statistics and graphics, but that’s another post.&lt;/p&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/794.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2010/10/27/a-bit-of-fun-with-odata.aspx</guid>
            <pubDate>Wed, 27 Oct 2010 14:06:38 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/794.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2010/10/27/a-bit-of-fun-with-odata.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/794.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Upgrade Your SharePoint Server 2010 License to Enterprise in Pictures</title>
            <category>SharePoint</category>
            <link>http://www.nnihlen.com/blog/archive/2010/10/18/upgrade-your-sharepoint-server-2010-license-to-enterprise-in-pictures.aspx</link>
            <description>  &lt;p&gt;This post is very basic and probably not needed for most. But I got the question so I figure I’ll put it out there and hopefully it might help someone.&lt;/p&gt;  &lt;p&gt;It’s mostly just a bunch of pictures showing you how to go about this task.&lt;/p&gt;  &lt;h2&gt;Before&lt;/h2&gt;  &lt;p&gt;First lets look at the present state. Available WebParts:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/01%20WebPart%20Gallery%20Before_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="01 WebPart Gallery Before" border="0" alt="01 WebPart Gallery Before" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/01%20WebPart%20Gallery%20Before_thumb.png" width="541" height="316" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As seen above, no  Business Data web parts. Available Shared Applications:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/02%20Service%20Apps%20before_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="02 Service Apps before" border="0" alt="02 Service Apps before" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/02%20Service%20Apps%20before_thumb.png" width="249" height="284" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h2&gt;Do it&lt;/h2&gt;  &lt;p&gt;Here we go. To perform the task, go to Central Administration and follow the steps below. Make sure you got your product key from MSDN or wherever kind of license you’re running.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/03%20Upgrade%20Link_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="03 Upgrade Link" border="0" alt="03 Upgrade Link" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/03%20Upgrade%20Link_thumb.png" width="167" height="249" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/04%20Enable%20Ent%20Feat%20Link_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="04 Enable Ent Feat Link" border="0" alt="04 Enable Ent Feat Link" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/04%20Enable%20Ent%20Feat%20Link_thumb.png" width="571" height="87" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/05%20Enter%20Key_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="05 Enter Key" border="0" alt="05 Enter Key" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/05%20Enter%20Key_thumb.png" width="759" height="312" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/06%20Ent%20upgrade%20complete_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="06 Ent upgrade complete" border="0" alt="06 Ent upgrade complete" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/06%20Ent%20upgrade%20complete_thumb.png" width="761" height="127" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/07%20Enable%20on%20all%20sites_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="07 Enable on all sites" border="0" alt="07 Enable on all sites" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/07%20Enable%20on%20all%20sites_thumb.png" width="763" height="196" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/08%20Status_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="08 Status" border="0" alt="08 Status" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/08%20Status_thumb.png" width="765" height="134" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/08.1%20Status_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="08.1 Status" border="0" alt="08.1 Status" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/08.1%20Status_thumb.png" width="767" height="127" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/08.2%20Status_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="08.2 Status" border="0" alt="08.2 Status" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/08.2%20Status_thumb.png" width="765" height="74" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h2&gt;Result&lt;/h2&gt;  &lt;p&gt;Now there is a few more web parts available&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/09%20WP%20Gallery%20After_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="09 WP Gallery After" border="0" alt="09 WP Gallery After" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/09%20WP%20Gallery%20After_thumb.png" width="773" height="216" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And also a bunch of Shared Applications:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/10%20Shared%20Apps%20After_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="10 Shared Apps After" border="0" alt="10 Shared Apps After" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/1991bde9465f_C462/10%20Shared%20Apps%20After_thumb.png" width="267" height="346" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/793.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2010/10/18/upgrade-your-sharepoint-server-2010-license-to-enterprise-in-pictures.aspx</guid>
            <pubDate>Mon, 18 Oct 2010 11:47:43 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/793.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2010/10/18/upgrade-your-sharepoint-server-2010-license-to-enterprise-in-pictures.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/793.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Introduction to Deploying Solutions on top of SharePoint 2010</title>
            <category>SharePoint</category>
            <link>http://www.nnihlen.com/blog/archive/2010/10/09/792.aspx</link>
            <description>&lt;p&gt;
	This introduction does not talk about how to deploy SharePoint itself but rather
	solutions on top of SharePoint that leverages the platform. For SharePoint deployment
	check out the technet docs on it.&lt;/p&gt;
&lt;p&gt;
	In most cases there is four ways to deploy functionality and configuration to a
	SharePoint platform&lt;/p&gt;
&lt;p&gt;
	 &lt;/p&gt;
&lt;table style="color: #000000" border="0" cellspacing="0" cellpadding="2" width="421"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td valign="top" width="200"&gt;
				&lt;font size="1"&gt;&lt;strong&gt;Browser&lt;/strong&gt;&lt;/font&gt;
			&lt;/td&gt;
			&lt;td valign="top" width="219"&gt;
				&lt;font size="1"&gt;Apply settings and perfom administrative taskt through the web ui of
					Central Admin and site settings.&lt;/font&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td valign="top" width="200"&gt;
				&lt;font size="1"&gt;&lt;strong&gt;stsadm&lt;/strong&gt;&lt;/font&gt;
			&lt;/td&gt;
			&lt;td valign="top" width="219"&gt;
				&lt;p&gt;
					&lt;font size="1"&gt;Stsadm is a command line tool that lives in C:\Program Files\Common Files\Microsoft
						Shared\Web Server Extensions\14\bin&lt;/font&gt;&lt;/p&gt;
				&lt;p&gt;
					&lt;font size="1"&gt;Stsadm perfomes administrative operations of a wide spectrum.&lt;/font&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td valign="top" width="200"&gt;
				&lt;font size="1"&gt;&lt;strong&gt;PowerShell&lt;/strong&gt;&lt;/font&gt;
			&lt;/td&gt;
			&lt;td valign="top" width="219"&gt;
				&lt;font size="1"&gt;Starting with the 2010 release of SharePoint PowerShell is supported
					as an out of the box administrative and automation tasks.&lt;/font&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td valign="top" width="200"&gt;
				&lt;font size="1"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;/font&gt;
			&lt;/td&gt;
			&lt;td valign="top" width="219"&gt;
				&lt;font size="1"&gt;Almost everything that can be done by the options listed above can be
					done through code and wise versa.&lt;/font&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;
&lt;h2&gt;
	Scenario&lt;/h2&gt;
&lt;p&gt;
	&lt;br /&gt;
	Let’s start out with a scenario. The developer has created some SharePoint
	artifacts in Visual Studio 2010 using the SharePoint tooling. All deployment has
	been local through Visual Studio’s menu options or just by using F5.&lt;/p&gt;
&lt;p&gt;
	&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/01%20VS%20SP%20Tooling_2.png"&gt;
		&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px;&amp;#xD;&amp;#xA;			display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px;&amp;#xD;&amp;#xA;			padding-top: 0px" title="01 VS SP Tooling" border="0" alt="01 VS SP Tooling" width="335" height="256" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/01%20VS%20SP%20Tooling_thumb.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
	To get a feeling of what has to be done every deployment we can have a look at Visual
	Studios default configuration.&lt;/p&gt;
&lt;p&gt;
	&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/03%20VS%20Deploy%20Steps_2.png"&gt;
		&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px;&amp;#xD;&amp;#xA;			display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px;&amp;#xD;&amp;#xA;			padding-top: 0px" title="03 VS Deploy Steps" border="0" alt="03 VS Deploy Steps" width="240" height="188" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/03%20VS%20Deploy%20Steps_thumb.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
	Now it’s time to deploy to another box, like the Consolidated Development
	Environment.
	&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;
	Packaging&lt;/h2&gt;
&lt;p&gt;
	Every time you deploy with Visual Studio a Windows SharePoint Package (called WSP’s)
	is created and deployed.
&lt;/p&gt;
&lt;p&gt;
	&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/01.1%20VS%20Deployment_2.png"&gt;
		&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px;&amp;#xD;&amp;#xA;			display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px;&amp;#xD;&amp;#xA;			padding-top: 0px" title="01.1 VS Deployment" border="0" alt="01.1 VS Deployment" width="618" height="264" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/01.1%20VS%20Deployment_thumb.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
	The same package is used for deployment to other boxes to. You find the package
	in the projects bin directory in the folder corresponding to your build configuration.&lt;/p&gt;
&lt;p&gt;
	&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/02%20WSP%20Location_4.png"&gt;
		&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px;&amp;#xD;&amp;#xA;			display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px;&amp;#xD;&amp;#xA;			padding-top: 0px" title="02 WSP Location" border="0" alt="02 WSP Location" width="618" height="104" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/02%20WSP%20Location_thumb_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
	The WSP package contains the stuff from the Visual Studio. Examples are:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Dlls – for GAC or \bin deployment &lt;/li&gt;
	&lt;li&gt;Safe controls entries for web.config – will keep track of these types of changes
	&lt;/li&gt;
	&lt;li&gt;SharePoint specific folders – deploys stuff to the 14-hive to folders like
		Layouts, Images, …
		&lt;br /&gt;
		&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/01.2%20VS%20SP%20Folders_4.png"&gt;
			&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px;&amp;#xD;&amp;#xA;				display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px;&amp;#xD;&amp;#xA;				padding-top: 0px" title="01.2 VS SP Folders" border="0" alt="01.2 VS SP Folders" width="240" height="209" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/01.2%20VS%20SP%20Folders_thumb_1.png" /&gt;&lt;/a&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	To gain a greater understanding of what is deployed through the wsp packages you
	can have a look at the manifest file for the package. Look in &lt;strong&gt;pkg&lt;/strong&gt;
	folder in the file system and navigate down to manifest.xml.&lt;/p&gt;
&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px;&amp;#xD;&amp;#xA;	background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 550px;&amp;#xD;&amp;#xA;	padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid;&amp;#xD;&amp;#xA;	padding-top: 5px"&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;		courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;&lt;span style="color: #0000ff"&gt;
			&amp;lt;?&lt;/span&gt;xml version="1.0" encoding="utf-8"&lt;span style="color: #0000ff"&gt;?&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;&lt;span style="color: #0000ff"&gt;
		&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Solution&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"http://schemas.microsoft.com/sharepoint/"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SolutionId&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"321c78d2-61cc-4a3c-9551-2a0cf3f83a3f"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;SharePointProductVersion&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"14.0"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;  &lt;span style="color: #0000ff"&gt;
		&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Assemblies&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;    &lt;span style="color: #0000ff"&gt;
		&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Assembly&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Location&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Nihlen.SharePoint.Web.dll"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;DeploymentTarget&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"GlobalAssemblyCache"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;  &lt;span style="color: #0000ff"&gt;
		&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Assemblies&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;  &lt;span style="color: #0000ff"&gt;
		&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TemplateFiles&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;    &lt;span style="color: #0000ff"&gt;
		&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TemplateFile&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Location&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Images\Nihlen\additional_arrow.png"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;    &lt;span style="color: #0000ff"&gt;
		&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TemplateFile&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Location&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Images\Nihlen\arrow_down.png"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;    &lt;span style="color: #0000ff"&gt;
		&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TemplateFile&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Location&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Images\Nihlen\arrow_down_active.png"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;    &lt;span style="color: #0000ff"&gt;
		&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TemplateFile&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Location&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Images\Nihlen\button_buy.png"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;    &lt;span style="color: #0000ff"&gt;
		&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TemplateFile&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Location&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Images\Nihlen\button_search.gif"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;    &lt;span style="color: #0000ff"&gt;
		&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TemplateFile&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Location&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Layouts\Nihlen\CSS\base.css"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;    &lt;span style="color: #0000ff"&gt;
		&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TemplateFile&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Location&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Layouts\Nihlen\CSS\Coromant.css"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;    &lt;span style="color: #0000ff"&gt;
		&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TemplateFile&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Location&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Layouts\Nihlen\CSS\demo.css"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;    &lt;span style="color: #0000ff"&gt;
		&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TemplateFile&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Location&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Layouts\Nihlen\CSS\reset.css"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;    &lt;span style="color: #0000ff"&gt;
		&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TemplateFile&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Location&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Layouts\Nihlen\CSS\style.css"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;    &lt;span style="color: #0000ff"&gt;
		&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TemplateFile&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Location&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Layouts\Nihlen\ErrorPage.aspx"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;  &lt;span style="color: #0000ff"&gt;
		&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;TemplateFiles&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;  &lt;span style="color: #0000ff"&gt;
		&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;FeatureManifests&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;    &lt;span style="color: #0000ff"&gt;
		&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;FeatureManifest&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Location&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Nihlen.SharePoint.Web_PageArtifacts\Feature.xml"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;    &lt;span style="color: #0000ff"&gt;
		&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;FeatureManifest&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Location&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Nihlen.SharePoint.Web_RootWebTemplate\Feature.xml"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;    &lt;span style="color: #0000ff"&gt;
		&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;FeatureManifest&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Location&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Nihlen.SharePoint.Web_Web\Feature.xml"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;  &lt;span style="color: #0000ff"&gt;
		&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;FeatureManifests&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;&lt;span style="color: #0000ff"&gt;
		&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Solution&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt; &lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;
	So first thing you need to is to gather the WSP’s and copy them up to a server
	in the SharePoint farm. The don’t need to be distributed to all machines in
	the farm, this is handled by the wsp deployment framework within SharePoint. I usually
	use the box running Central Admin for this task, no real reason really – just
	habit.&lt;/p&gt;
&lt;p&gt;
	You can gather up the WSP’s manually or do as I do an use a simple PowerShell
	script for this task. It’s dead simple:&lt;/p&gt;
&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px;&amp;#xD;&amp;#xA;	background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 550px;&amp;#xD;&amp;#xA;	padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid;&amp;#xD;&amp;#xA;	padding-top: 5px"&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;		courier new&amp;quot; , courier, monospace; font-size: 10px"&gt;$trgPath = Read-Host "
&lt;span style="color: #8b0000"&gt;Enter target path&lt;/span&gt;"
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 10px"&gt;&lt;span style="color: #0000ff"&gt;
		get&lt;/span&gt;-childitem C:\Projects\Nihlen\Main\Source -Recurse -Include *.wsp | &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt;-&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; -process{copy-item $_.FullName -destination $trgPath}&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;
	When you got the WSP-files up on the server, use remote desktop to connect to the
	server.&lt;/p&gt;
&lt;p&gt;
	 &lt;/p&gt;
&lt;h2&gt;
	Add Solution (wsp)&lt;/h2&gt;
&lt;p&gt;
	First time out, you need to add the solution to SharePoint and make it aware that
	the package exists. To see what solution packages are added to your farm, crack
	open Central Administration and navigate to &lt;strong&gt;System Settings&lt;/strong&gt; and
	then &lt;strong&gt;Manage Farm Solutions&lt;/strong&gt; under &lt;strong&gt;Farm Management&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;
	&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/04%20CA%20Manage%20Farm%20Solutions_2.png"&gt;
		&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px;&amp;#xD;&amp;#xA;			display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px;&amp;#xD;&amp;#xA;			padding-top: 0px" title="04 CA Manage Farm Solutions" border="0" alt="04 CA Manage Farm Solutions" width="640" height="348" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/04%20CA%20Manage%20Farm%20Solutions_thumb.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
	If your dealing with a clean environment there is a text there explaining that there
	are no solutions deployed, but if there are some solutions deployed, they will show
	up there in a list with some info about them.&lt;/p&gt;
&lt;p&gt;
	 &lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/05%20Farm%20Solutions_4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px;&amp;#xD;&amp;#xA;		display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px;&amp;#xD;&amp;#xA;		padding-top: 0px" title="05 Farm Solutions" border="0" alt="05 Farm Solutions" width="634" height="114" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/05%20Farm%20Solutions_thumb_1.png" /&gt;&lt;/a&gt;
	&lt;br /&gt;
&lt;/p&gt;
&lt;h3&gt;
	Web UI&lt;/h3&gt;
&lt;p&gt;
	There is no way to add a solution using the web user interface.
	&lt;br /&gt;
&lt;/p&gt;
&lt;h3&gt;
	stsadm
&lt;/h3&gt;
&lt;p&gt;
	Stsadm is the “old” way of doing this, but it’s still fully supported.
	Here’s how you do it.&lt;/p&gt;
&lt;p&gt;
	&lt;font face="Courier New"&gt;&lt;strong&gt;stsadm -o addsolution -filename &amp;lt;solution file name&amp;gt;
		[-lcid] &amp;lt;language&amp;gt;&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
	So for example:&lt;/p&gt;
&lt;p&gt;
	&lt;font face="Courier New"&gt;&lt;strong&gt;stsadm –o addsolution –filename Nihlen.SharePoint.Web.wsp
		&lt;br /&gt;
	&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;h3&gt;
	PowerShell&lt;/h3&gt;
&lt;p&gt;
	Using PowerShell for deployment is pretty straight forward. First of all you need
	to load up the commandlets for SharePoint. This can be done in two ways. The first
	option is to simply run the SharePoint Management Console form the start menu and
	they are loaded for you right off the bat.&lt;/p&gt;
&lt;p&gt;
	&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/06%20SharePoint%202010%20Management%20Shell_2.png"&gt;
		&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px;&amp;#xD;&amp;#xA;			display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px;&amp;#xD;&amp;#xA;			padding-top: 0px" title="06 SharePoint 2010 Management Shell" border="0" alt="06 SharePoint 2010 Management Shell" width="307" height="137" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/06%20SharePoint%202010%20Management%20Shell_thumb.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
	If you’re running an ordinary PowerShell prompt or script you have to add
	it yourself.&lt;/p&gt;
&lt;p&gt;
	&lt;font face="Courier New"&gt;&lt;strong&gt;Add-PSSnapin Microsoft.SharePoint.Powershell&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;
	When you’ve taken one of the approaches described above you can get cracking
	on adding the solution to the farm. This is done with the Add-SPSolution commandlet.
	Example:&lt;/p&gt;
&lt;p&gt;
	&lt;strong&gt;&lt;font face="Courier New"&gt;Add-SPSolution E:\Deploy\2010-10-01_01\Nihlen.SharePoint.Web.wsp&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
	There is of course a few other parameter to play with if you like: &lt;a title="http://technet.microsoft.com/en-us/library/ff607552.aspx" href="http://technet.microsoft.com/en-us/library/ff607552.aspx"&gt;http://technet.microsoft.com/en-us/library/ff607552.aspx&lt;/a&gt;
	&lt;br /&gt;
&lt;/p&gt;
&lt;h3&gt;
	Code&lt;/h3&gt;
&lt;p&gt;
	Using code this can be done by using the &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spsolutioncollection.aspx"&gt;
		SPSolutionCollection&lt;/a&gt; on the &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spfarm.aspx"&gt;
			SPFarm&lt;/a&gt; object.&lt;/p&gt;
&lt;p&gt;
	SPFarm.Local.Solutions.Add(“E:\Deploy\2010-10-01_01\Nihlen.SharePoint.Web.wsp”);&lt;/p&gt;
&lt;p&gt;
	That said, this approach is very seldom used.&lt;/p&gt;
&lt;p&gt;
	 &lt;/p&gt;

	&lt;h2&gt;
		Installing Solution (wsp)&lt;/h2&gt;
	&lt;p&gt;
		Now when you solution(s) are added to the farms solution store you can install them.
		This also can be done in a couple of different ways.
		&lt;br /&gt;
	&lt;/p&gt;
	&lt;h3&gt;
		Web UI&lt;/h3&gt;
	&lt;p&gt;
		When the solutions is added to the solution store it can be accessed via Central
		Administration (&lt;strong&gt;System Settings&lt;/strong&gt; –&amp;gt; &lt;strong&gt;Manage Farm Solutions&lt;/strong&gt;.
		You can click on the package name and get deployment options.&lt;/p&gt;
	&lt;p&gt;
		&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/07%20CA%20Solution%20Deployment_4.png"&gt;
			&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px;&amp;#xD;&amp;#xA;				display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px;&amp;#xD;&amp;#xA;				padding-top: 0px" title="07 CA Solution Deployment" border="0" alt="07 CA Solution Deployment" width="618" height="333" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/07%20CA%20Solution%20Deployment_thumb_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;
		 &lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/08%20CA%20Deploy%20Solution_4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px;&amp;#xD;&amp;#xA;			display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px;&amp;#xD;&amp;#xA;			padding-top: 0px" title="08 CA Deploy Solution" border="0" alt="08 CA Deploy Solution" width="615" height="384" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/08%20CA%20Deploy%20Solution_thumb_1.png" /&gt;&lt;/a&gt;
		&lt;br /&gt;
	&lt;/p&gt;
	&lt;h3&gt;
		Stsadm&lt;/h3&gt;
	&lt;p&gt;
		stsadm –o deploysolution has a few parameters to play with.&lt;/p&gt;
	&lt;p&gt;
		&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/09%20Stsadm%20deploysolution%20help_2.png"&gt;
			&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px;&amp;#xD;&amp;#xA;				display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px;&amp;#xD;&amp;#xA;				padding-top: 0px" title="09 Stsadm deploysolution help" border="0" alt="09 Stsadm deploysolution help" width="423" height="288" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/09%20Stsadm%20deploysolution%20help_thumb.png" /&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;
		Many of these parameters depends on how the features within the solution is scoped.
		In the example below there are only farm scoped features, hence no use of the –url
		or –allcontenturls parameters.  So a simple example could be:&lt;/p&gt;
	&lt;p&gt;
		&lt;font face="Courier New"&gt;&lt;strong&gt;stsadm -o deploysolution -name Nihlen.sharepoint.wsp 
			-immediate –allowgacdeployment&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
	&lt;p&gt;
		&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/10%20stsadm%20deploysolution%20cmd_4.png"&gt;
			&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px;&amp;#xD;&amp;#xA;				display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px;&amp;#xD;&amp;#xA;				padding-top: 0px" title="10 stsadm deploysolution cmd" border="0" alt="10 stsadm deploysolution cmd" width="550" height="100" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/10%20stsadm%20deploysolution%20cmd_thumb_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;h3&gt;
		PowerShell&lt;/h3&gt;
	&lt;p&gt;
		The equivalent in PowerShell is the &lt;a target="_blank" href="http://technet.microsoft.com/en-us/library/ff607534.aspx"&gt;
			Install-SPCommandlet&lt;/a&gt;. So to do the same thing as
	&lt;/p&gt;
	&lt;p&gt;
		&lt;strong&gt;&lt;font face="Courier New"&gt;Install-SPSolution "Nihlen.SharePoint.wsp"
			–GACDeployment
			&lt;br /&gt;
		&lt;/font&gt;&lt;/strong&gt;
	&lt;/p&gt;
	&lt;h2&gt;
		Activating Features&lt;/h2&gt;
	&lt;p&gt;
		Next step in the deployment process is to activate features. There is a lot of logic
		that ends up encapsulated in SharePoint Features. One example is custom web.config
		changes.&lt;/p&gt;
	&lt;p&gt;
		Visual Studio 2010 defaults to auto activating of features.&lt;/p&gt;
	&lt;p&gt;
		&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/11%20VS%20Activate%20Feature%20on%20Default_4.png"&gt;
			&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px;&amp;#xD;&amp;#xA;				display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px;&amp;#xD;&amp;#xA;				padding-top: 0px" title="11 VS Activate Feature on Default" border="0" alt="11 VS Activate Feature on Default" width="353" height="345" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/11%20VS%20Activate%20Feature%20on%20Default_thumb_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;
		This is all god for development purposes but for deployment to other environments 
		(UAC, Prod, …) I prefer a much more granular control over what what gets
		executed when. So my recommendation is to turn this off.&lt;/p&gt;
	&lt;p&gt;
		Let’s have a look at how we can activate features.
		&lt;br /&gt;
	&lt;/p&gt;
	&lt;h3&gt;
		Web UI&lt;/h3&gt;
	&lt;p&gt;
		Where in the UI you activate features depends on how they are scoped.&lt;/p&gt;
	&lt;p&gt;
		&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/12%20Feature%20Scope%20in%20VS_2.png"&gt;
			&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px;&amp;#xD;&amp;#xA;				display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px;&amp;#xD;&amp;#xA;				padding-top: 0px" title="12 Feature Scope in VS" border="0" alt="12 Feature Scope in VS" width="428" height="145" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/12%20Feature%20Scope%20in%20VS_thumb.png" /&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;table style="color: #000000" border="0" cellspacing="0" cellpadding="2" width="422"&gt;
		&lt;tbody&gt;
			&lt;tr&gt;
				&lt;td valign="top" width="200"&gt;
					&lt;font size="1"&gt;&lt;strong&gt;Farm&lt;/strong&gt;&lt;/font&gt;
				&lt;/td&gt;
				&lt;td valign="top" width="220"&gt;
					&lt;font size="1"&gt;Activation is performed under Central Admin (&lt;strong&gt;System Settings&lt;/strong&gt;
						–&amp;gt; &lt;strong&gt;Mange Farm Features&lt;/strong&gt;)&lt;/font&gt;
				&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
				&lt;td valign="top" width="200"&gt;
					&lt;font size="1"&gt;&lt;strong&gt;Web Application&lt;/strong&gt;&lt;/font&gt;
				&lt;/td&gt;
				&lt;td valign="top" width="220"&gt;
					&lt;font size="1"&gt;This is scoped for a Web Application and is activated/deactivated in
						Central Administration under &lt;strong&gt;Application Management &lt;/strong&gt;–&amp;gt;
						&lt;strong&gt;Manage Web Applications&lt;/strong&gt;, select a web application and chose &lt;strong&gt;
							Manage Features&lt;/strong&gt; in the ribbon.&lt;/font&gt;
				&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
				&lt;td valign="top" width="200"&gt;
					&lt;font size="1"&gt;&lt;strong&gt;Site&lt;/strong&gt;&lt;/font&gt;
				&lt;/td&gt;
				&lt;td valign="top" width="220"&gt;
					&lt;font size="1"&gt;Is Site Collection scoped. Point browser to your site. Enter &lt;strong&gt;
						Site Actions&lt;/strong&gt; –&amp;gt; &lt;strong&gt;Site Settings&lt;/strong&gt; and make sure you’re
						on the top level (otherwise click Go to top level site settings) and click on &lt;strong&gt;
							Site collection features&lt;/strong&gt;&lt;/font&gt;
				&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
				&lt;td valign="top" width="200"&gt;
					&lt;font size="1"&gt;&lt;strong&gt;Web&lt;/strong&gt;&lt;/font&gt;
				&lt;/td&gt;
				&lt;td valign="top" width="220"&gt;
					&lt;font size="1"&gt;Scoped to a single SharePoint web. Enter Site settings on that web and
						chose &lt;strong&gt;Manage site features&lt;/strong&gt; (in the Site Actions section)&lt;/font&gt;
				&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;
	&lt;p&gt;
		 &lt;/p&gt;
	&lt;p&gt;
		So, this is what it could look like this:&lt;/p&gt;
	&lt;p&gt;
		&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/13-Activate-featur-web-UI.png"&gt;
			&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px;&amp;#xD;&amp;#xA;				display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px;&amp;#xD;&amp;#xA;				padding-top: 0px" title="13 Activate featur web UI" border="0" alt="13 Activate featur web UI" width="523" height="67" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/13-Activate-featur-web-UI_thumb.png" /&gt;&lt;/a&gt;
		&lt;br /&gt;
	&lt;/p&gt;
	&lt;h3&gt;
		Stsadm&lt;/h3&gt;
	&lt;p&gt;
		Activating a feature using stsadm is also dependent on the scope, but that just
		makes some of the parameter vary.&lt;/p&gt;
	&lt;p&gt;
		&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/14%20Stsadm%20activate%20feature%20help_2.png"&gt;
			&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px;&amp;#xD;&amp;#xA;				display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px;&amp;#xD;&amp;#xA;				padding-top: 0px" title="14 Stsadm activate feature help" border="0" alt="14 Stsadm activate feature help" width="521" height="181" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/14%20Stsadm%20activate%20feature%20help_thumb.png" /&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;
		Example:&lt;/p&gt;
	&lt;p&gt;
		&lt;font face="Courier New"&gt;&lt;strong&gt;stsadm -o activatefeature -name Nihlen.SharePoint.Examples_Feature1
			-url &lt;a href="http://sp2010:3001"&gt;http://sp2010:3001&lt;/a&gt;
			&lt;br /&gt;
			&lt;br /&gt;
		&lt;/strong&gt;&lt;/font&gt;
	&lt;/p&gt;
	&lt;h3&gt;
		PowerShell&lt;/h3&gt;
	&lt;p&gt;
		PowerShell’s corresponding commandlet is &lt;a target="_blank" href="http://technet.microsoft.com/en-us/library/ff607803.aspx"&gt;
			Enable-SPFeature&lt;/a&gt;.&lt;/p&gt;
	&lt;p&gt;
		Enable-SPFeature -identity Nihlen.SharePoint.Examples_Feature1 -URL &lt;a href="http://sp2010:3001"&gt;
			http://sp2010:3001&lt;/a&gt;&lt;/p&gt;
	&lt;h2&gt;
		Retraction&lt;/h2&gt;
	&lt;p&gt;
		When deploying to test and UAC environments and deploying before the first go live
		version I usually recommend full retraction and re-deploying every time. Handling
		upgrades is a whole different ballgame by itself.
		&lt;br /&gt;
		&lt;br /&gt;
	&lt;/p&gt;
	&lt;h2&gt;
		Summary&lt;/h2&gt;
	&lt;p&gt;
		So to try to tie this post up. User PowerShell when possible.  The steps are:&lt;/p&gt;
	&lt;p align="center"&gt;
		&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/15%20Deployment%20Cycle_2.png"&gt;
			&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px;&amp;#xD;&amp;#xA;				display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px;&amp;#xD;&amp;#xA;				padding-top: 0px" title="15 Deployment Cycle" border="0" alt="15 Deployment Cycle" width="416" height="286" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/Windows-Live-Writer/Introduction-to-Deploying-Solutions-on-T_12697/15%20Deployment%20Cycle_thumb.png" /&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;
		Here’s an sample PowerShell script doing it:&lt;/p&gt;
	&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px;&amp;#xD;&amp;#xA;		background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 550px;&amp;#xD;&amp;#xA;		padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid;&amp;#xD;&amp;#xA;		padding-top: 5px"&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;			courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Add-PSSnapin Microsoft.SharePoint.Powershell -erroraction SilentlyContinue
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;		courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;&amp;lt;# -- Processing script arguments -- #&amp;gt;
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;function End {
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;	Write-Host "&lt;span style="color: #8b0000"&gt;-- Finished step: &lt;/span&gt;" $args[0]  -ForegroundColor blue
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;}
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;		courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;function Begin {
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;	Write-Host "&lt;span style="color: #8b0000"&gt;-- Beginning step: &lt;/span&gt;" $args[0]  -ForegroundColor blue
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;}
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;		courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;function WriteStatus {
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;	Write-Host "&lt;span style="color: #8b0000" /&gt;" $args[0]  -ForegroundColor green
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;}
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;		courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;cls
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;		courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;$deployUrl = Read-Host "
&lt;span style="color: #8b0000"&gt;Enter the web application url&lt;/span&gt;"
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;#$dropPath = Read-Host "
&lt;span style="color: #8b0000"&gt;Path to folder containing WSP files&lt;/span&gt;"
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;$p = Get-Item .\
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;$dropPath = $p.FullName
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;		courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;			courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;$task = "&lt;span style="color: #8b0000"&gt;
				Uninstalling Solution Nihlen.SharePoint.Web.wsp&lt;/span&gt;"
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Begin $task
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Uninstall-SPSolution -Identity "
&lt;span style="color: #8b0000"&gt;Nihlen.SharePoint.Web.wsp&lt;/span&gt;" -Confirm:$&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;End $task
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;		courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;$task = "&lt;span style="color: #8b0000"&gt;
			Uninstalling Solution Nihlen.SharePoint.wsp&lt;/span&gt;"
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Begin $task
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Uninstall-SPSolution -Identity "
&lt;span style="color: #8b0000"&gt;Nihlen.SharePoint.wsp&lt;/span&gt;" -Confirm:$&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;End $task
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;		courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Read-Host "&lt;span style="color: #8b0000"&gt;
			Verify in Central Admin that packages are uninstalled/retracted and then hit enter&lt;/span&gt;"
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;		courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;$task = "&lt;span style="color: #8b0000"&gt;
			Remove Solution Nihlen.SharePoint.Web.wsp&lt;/span&gt;"
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Begin $task
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Remove-SPSolution -Identity "
&lt;span style="color: #8b0000"&gt;Nihlen.SharePoint.Web.wsp&lt;/span&gt;" -Force -Confirm:$&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;End $task
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;		courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;$task = "&lt;span style="color: #8b0000"&gt;
			Remove Solution Nihlen.SharePoint.wsp&lt;/span&gt;"
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;		courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Begin $task
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Remove-SPSolution -Identity "
&lt;span style="color: #8b0000"&gt;Nihlen.SharePoint.wsp&lt;/span&gt;" -Force -Confirm:$&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;End $task
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;		courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Read-Host "&lt;span style="color: #8b0000"&gt;
			Verify remove ok, and hit enter to restart IIS&lt;/span&gt;"
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;		courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;$task = "&lt;span style="color: #8b0000"&gt;
			Restarting IIS&lt;/span&gt;"
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Begin $task
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Write-Host "&lt;span style="color: #8b0000"&gt;
		Not running at the moment&lt;/span&gt;"
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;#Restart-Service W3SVC,WAS -force
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;#Start-Service W3SVC,WAS 
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;End $task
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;		courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;$task = "&lt;span style="color: #8b0000"&gt;
			Adding wsp Nihlen SharePoint Core&lt;/span&gt;"
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;$fileName = $dropPath + "
&lt;span style="color: #8b0000"&gt;\Nihlen.SharePoint.wsp&lt;/span&gt;"
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Begin $task
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Add-SPSolution $fileName 
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;End $taks
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;		courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;			courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;				courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;$fileName = $dropPath +  "
&lt;span style="color: #8b0000"&gt;\Nihlen.SharePoint.Web.wsp&lt;/span&gt;"
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;$task = "&lt;span style="color: #8b0000"&gt;
		Adding wsp Coromant Web: &lt;/span&gt;" + $fileName
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Begin $task
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Add-SPSolution $fileName
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;End $taks
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;		courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;			courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;				courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;$task = "&lt;span style="color: #8b0000"&gt;
					Installing wsp Nihlen SharePoint Core&lt;/span&gt;"
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Begin $task
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Install-SPSolution "
&lt;span style="color: #8b0000"&gt;Nihlen.SharePoint.wsp&lt;/span&gt;" -GACDeployment #-AllWebApplications   #-WebApplication $deployUrl -GACDeployment
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;End $taks
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;		courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;			courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;$task = "&lt;span style="color: #8b0000"&gt;
				Installing wsp Coromant Web&lt;/span&gt;"
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Begin $task
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Install-SPSolution "
&lt;span style="color: #8b0000"&gt;Nihlen.SharePoint.Web.wsp&lt;/span&gt;" -GACDeployment #-WebApplication $deployUrl 
&lt;/pre&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;End $taks
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;		courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Read-Host "&lt;span style="color: #8b0000"&gt;
			Veriry that packages are installed/deployed in Central Admin and hit enter for feature
			activation&lt;/span&gt;"
&lt;/pre&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;	courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;		courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;
&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas, &amp;quot;&amp;#xD;&amp;#xA;			courier new&amp;quot; , courier, monospace; font-size: 9px"&gt;Enable-SPFeature -url $url -identity WebTeplatesFeature&lt;/pre&gt;
&lt;/pre&gt;

&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;
&lt;/pre&gt;

&lt;p&gt;
	This script is a first draft so don’t see it as something final.&lt;/p&gt;
&lt;p&gt;
	//Niklas&lt;/p&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/792.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2010/10/09/792.aspx</guid>
            <pubDate>Sat, 09 Oct 2010 21:12:09 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/792.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2010/10/09/792.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/792.aspx</wfw:commentRss>
        </item>
        <item>
            <title>TrayWeek &amp;ndash; Delivering Business Value to Myself</title>
            <category>.NET Development</category>
            <category>Productivity</category>
            <link>http://www.nnihlen.com/blog/archive/2010/09/15/790.aspx</link>
            <description>&lt;p&gt;In Sweden, I don’t know why, we’re very week number centric. Questions like the ones listed below are not uncommon:&lt;/p&gt;  &lt;p&gt;- “What weeks will you have vacation”    &lt;br /&gt;- “Can you be done by week 42?”&lt;/p&gt;  &lt;p&gt;What I have to do then is to switch into Outlook, Ctrl+2 my way to the calendar and switch to monthly view where I have week numbers enabled.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/WindowsLiveWriter/TrayWeekDeliveringBusinessValuetoMyself_15083/MonthlyViewWWeeknumbers_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="MonthlyViewWWeeknumbers" border="0" alt="MonthlyViewWWeeknumbers" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/WindowsLiveWriter/TrayWeekDeliveringBusinessValuetoMyself_15083/MonthlyViewWWeeknumbers_thumb.png" width="389" height="301" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;As you can imagine this really upsets a productivity-geek-wannabe as me. So, Visual Studio to the rescue (as always ;)). I wrote a little application which sole purpose in life is to show me what week it is in the system tray.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/WindowsLiveWriter/TrayWeekDeliveringBusinessValuetoMyself_15083/TrayWeekwArrow_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="TrayWeekwArrow" border="0" alt="TrayWeekwArrow" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/WindowsLiveWriter/TrayWeekDeliveringBusinessValuetoMyself_15083/TrayWeekwArrow_thumb.png" width="94" height="146" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;As always I googled it with bing first and found some good inspiration and how-to info. I found a &lt;a href="http://www.codeproject.com/KB/cs/Tray_CalendarNet.aspx"&gt;good article on CodeProject&lt;/a&gt; wich showed me pretty much how to do what I wanted.&lt;/p&gt;  &lt;p&gt;Here the specifics.&lt;/p&gt;  &lt;p&gt;I created a Console Application project in Visual Studio and got rid of the default stuff.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/WindowsLiveWriter/TrayWeekDeliveringBusinessValuetoMyself_15083/TrayWeekSolution_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="TrayWeek Solution" border="0" alt="TrayWeek Solution" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/WindowsLiveWriter/TrayWeekDeliveringBusinessValuetoMyself_15083/TrayWeekSolution_thumb.png" width="262" height="280" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I then created the TrayWeekApplicationContext class which inherits from ApplicationContext. From there I do everything. In the Constructor I hook up timer, update event, context menu and NotifyIcon. The timer ticks once an hour, after all how often am I going to stare at the thing Sunday evening at midnight?&lt;/p&gt;  &lt;pre class="brush: csharp;"&gt;        private NotifyIcon _notifyIcon;
        private IContainer _components;
        private Timer _timer;
        private ContextMenuStrip _contextMenu; 


        public TrayWeekApplicationContext()
        {
            _components = new Container();
            _notifyIcon = new NotifyIcon(_components);

            _notifyIcon.Visible = true;
            
            UpdateUi();

            //Set timer to redraw
            _timer = new Timer();
            _timer.Elapsed += TimerElapsed;
            _timer.Interval = 60*60*1000; //Hourly update
            _timer.Enabled = true;
            _timer.Start();

            //Initialize context menu
            InitContextMenu();
        }&lt;/pre&gt;

&lt;p&gt;The interesting stuff (if you call it that, it’s not rocket science directly) happens in the UpdateUi() method:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;private void UpdateUi()
{
    Graphics graphics;
    Font font;

    Image image = TrayWeekResources.date;

    using (graphics = Graphics.FromImage(image))
    {
        int weekNo = DateHelper.GetCurrentWeekNumber(DateTime.Now);
                
        font = new Font("Lucida Console", 18, FontStyle.Regular);
        SizeF size = graphics.MeasureString(weekNo.ToString(), font);
        Point startingPoint = CalculateStartingPoint(size);

        graphics.DrawString(weekNo.ToString(), font, Brushes.GhostWhite, startingPoint);

        SetBaloonTip(weekNo);

        _notifyIcon.Icon = ImageToIcon(image);
    }
}&lt;/pre&gt;

&lt;p&gt;Here you can se how I get an icon and draw the text upon it. And that’s about that. &lt;/p&gt;

&lt;p&gt;You can download the Visual Studio 2010 project &lt;a href="http://nnihlen.com/blog/Files/TrayWeek.zip"&gt;here&lt;/a&gt;. And be aware, there is a lot of hard coded stuff, such as Swedish localization, that should be promoted to a settings dialog or retrieved from Regional Options.&lt;/p&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/790.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2010/09/15/790.aspx</guid>
            <pubDate>Wed, 15 Sep 2010 20:49:23 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/790.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2010/09/15/790.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/790.aspx</wfw:commentRss>
        </item>
        <item>
            <title>FileNotFoundExceptoin when writing SharePoint 2010 code in Visual Studio</title>
            <category>.NET Development</category>
            <category>SharePoint</category>
            <category>Note to Self</category>
            <link>http://www.nnihlen.com/blog/archive/2010/09/14/789.aspx</link>
            <description>&lt;p&gt;This is more of a note to self, how could I forget again, I’m an idiot post than anything else. So here it goes, if you’re writing a app that is supposed to do anything with SharePoint and get FileNotFoundException when trying to new up a SPSite object.&lt;/p&gt;  &lt;p&gt;SPSite site = new SPSite(“http://myDevSite”);&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/WindowsLiveWriter/FileNotFoundExceptoinwhenwritingSharePoi_1199F/SPSite-FileNotFound.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="SPSite-FileNotFound" border="0" alt="SPSite-FileNotFound" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/WindowsLiveWriter/FileNotFoundExceptoinwhenwritingSharePoi_1199F/SPSite-FileNotFound_thumb.png" width="382" height="157" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Chanses are you’re Platform Target is set to "x86”. Change that to “Any CPU” or “x64” and you should be good to go.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/WindowsLiveWriter/FileNotFoundExceptoinwhenwritingSharePoi_1199F/PlatformTarget_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="PlatformTarget" border="0" alt="PlatformTarget" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/WindowsLiveWriter/FileNotFoundExceptoinwhenwritingSharePoi_1199F/PlatformTarget_thumb.jpg" width="244" height="146" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is only a SharePoint 2010 issue, not 2007.&lt;/p&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/789.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2010/09/14/789.aspx</guid>
            <pubDate>Tue, 14 Sep 2010 18:01:36 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/789.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2010/09/14/789.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/789.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Accessing Built In SharePoint fields</title>
            <category>.NET Development</category>
            <category>SharePoint</category>
            <link>http://www.nnihlen.com/blog/archive/2010/02/25/786.aspx</link>
            <description>&lt;p&gt;When you’re accessing built in SharePoint fields (such as Title) from code, do you go:&lt;/p&gt;  &lt;pre class="brush: csharp; ruler: false;"&gt;	listItem["Title"] = xVar;
	listItem[0] = xVar;&lt;/pre&gt;

&lt;p&gt;Don’t! Have a look at &lt;a href="SPBuiltInFieldId "&gt;SPBuiltInFieldId&lt;/a&gt; that keeps tracks of the Id’s for the built in fields for you:&lt;/p&gt;

&lt;pre class="brush: csharp; ruler: false;"&gt;	string title = myListItem[SPBuiltInFieldIds.Title];&lt;/pre&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/786.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2010/02/25/786.aspx</guid>
            <pubDate>Thu, 25 Feb 2010 13:57:08 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/786.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2010/02/25/786.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/786.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Dumping SPList Items to a Feature</title>
            <category>.NET Development</category>
            <category>SharePoint</category>
            <link>http://www.nnihlen.com/blog/archive/2010/01/13/785.aspx</link>
            <description>&lt;p&gt;I’ve been working for a while on a project and filled up the Site Collection Images list with a lot of images get the user experience going in my virtual dev environment. When we got access to the customer environment I wasn't in the mode to manually upload all the images again. So I wrote the following little console application that dumps out the content from the Site Collections Images list. The output from the app is:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Feature.xml&lt;/strong&gt; - file containing the feature def and all elements &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;images.xml&lt;/strong&gt; – file containing the Module with the images &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Images folder&lt;/strong&gt; – folder containing all the image files from the list &lt;/li&gt;
&lt;/ul&gt;
&lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/WindowsLiveWriter/DumpingListItemstoaFeature_FEF3/Feature_Structure_2.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="Feature_Structure" border="0" alt="Feature_Structure" width="260" height="199" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/WindowsLiveWriter/DumpingListItemstoaFeature_FEF3/Feature_Structure_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Then I copied the generated artifacts to my solution and built the wsp package. This code might not be very useful as is but will perhaps make a point on how this technique can be used.&lt;/p&gt;
&lt;p&gt;Before going in to the code one note is worth making is that everything is hard coded, including the guid ID. I know it beforehand so I could do that, if you’re adopting this to something more generic you probably want to generate the ID during runtime.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;The code otherwise is pretty simple. Open the list, loop over it and generate a Feature.xml and an elements.xml file and dump all the files into a folder.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Here’s the code:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;pre class="brush: csharp; ruler: true;"&gt;
using System; 
using System.IO; 
using System.Text; 
using Microsoft.SharePoint; 
namespace ReverseSiteCollectionImages { 
    internal class Program { 
        private static void Main(string[] args) { 
            using (var site = new SPSite("http://stockholm:666")) { 
                SPList siteCollectionImagesList = site.RootWeb.Lists["Site Collection Images"]; 
                var featureBuilder = new StringBuilder(); 
                var imagesBuilder = new StringBuilder(); 
                
                //Init feature XML 
                featureBuilder.AppendLine(" "); 
                featureBuilder.AppendLine(" "); 
                featureBuilder.AppendLine("&lt;elementmanifests&gt; "); 
                featureBuilder.AppendLine("&lt;elementmanifest location="\&amp;quot;images.xml\&amp;quot;/"&gt; "); 
                
                //Init Elements XML 
                imagesBuilder.AppendLine("&lt;elements xmlns="\&amp;quot;http://schemas.microsoft.com/sharepoint/\&amp;quot;"&gt;"); 
                imagesBuilder.AppendLine( "&lt;module name="\&amp;quot;Images\&amp;quot;" url="\&amp;quot;SiteCollectionImages\&amp;quot;" path="\&amp;quot;Images\&amp;quot;" rootwebonly="\&amp;quot;TRUE\&amp;quot;"&gt; "); 
                
                //Itterate over images in list 
                foreach (SPListItem item in siteCollectionImagesList.Items) { 
                    //Write xml to feature.xml and elements.xml 
                    featureBuilder.AppendLine("&lt;elementfile location="\&amp;quot;Images\\&amp;quot;" +="" item[="FileLeafRef" ]="" /&gt;"); 
                    imagesBuilder.AppendLine("&lt;file url="\&amp;quot;&amp;quot;" +="" item[="FileLeafRef" ]="" name="\&amp;quot;&amp;quot;" type="\&amp;quot;GhostableInLibrary\&amp;quot;" /&gt;"); 
                    
                    //Get the file... 
                    SPFile file = item.File; 
                    Stream stream = file.OpenBinaryStream(); 
                    
                    if (Directory.Exists(".\\Images") == false) { 
                        Directory.CreateDirectory(".\\Images"); 
                    } 
                    
                    //... and persist it to disk 
                    using (var fileStream = new FileStream(".\\Images\\" + item.Name, FileMode.Create, FileAccess.Write)) { 
                        int Length = 256; 
                        var buffer = new Byte[Length]; 
                        int bytesRead = stream.Read(buffer, 0, Length); 
                        
                        while (bytesRead &amp;gt; 0) { 
                            fileStream.Write(buffer, 0, bytesRead); 
                            bytesRead = stream.Read(buffer, 0, Length); 
                        } 
                    } 
                } 
                
                //Finish up xml 
                imagesBuilder.AppendLine(" &lt;/module&gt; "); 
                imagesBuilder.AppendLine("&lt;/elements&gt;"); 
                featureBuilder.Append("&lt;/elementmanifest&gt;&lt;/elementmanifests&gt; "); 
                featureBuilder.Append(" "); 
                
                //Flush xml files to disk 
                using (var featureWriter = new StreamWriter(".\\Feature.xml", false)) { 
                    featureWriter.Write(featureBuilder.ToString()); 
                    featureWriter.Flush(); 
                } 
                
                using (var imagesWriter = new StreamWriter(".\\images.xml", false)) { 
                    imagesWriter.Write(imagesBuilder.ToString()); 
                    imagesWriter.Flush(); 
                } 
            } 
        } 
    } 
}
&lt;/pre&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/785.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2010/01/13/785.aspx</guid>
            <pubDate>Wed, 13 Jan 2010 16:30:47 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/785.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2010/01/13/785.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/785.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Good Write-up on ULS Viewer</title>
            <category>SharePoint</category>
            <link>http://www.nnihlen.com/blog/archive/2010/01/12/784.aspx</link>
            <description>&lt;p&gt;Every now and then I get a gig where I go in to a customer to help sort out an exiting problem with their SharePoint environment (get us engaged early in the projects folks, that eliminates quite a bunch of these panic engagements). When trying to get a grip on a existing environment I use a couple of tools, one of which is &lt;a href="http://code.msdn.microsoft.com/ULSViewer"&gt;ULS Viewer&lt;/a&gt;. (Then name says it all :)).&lt;/p&gt;  &lt;p&gt;Jie Li has a good write-up on using ULS Viewer for trouble shooting over on his blog, &lt;a href="http://blogs.msdn.com/opal/archive/2009/12/22/uls-viewer-for-sharepoint-2010-troubleshooting.aspx"&gt;check it out.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;(And of course it’s the &lt;a href="javascript:window.location.href='http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=ULSViewer&amp;amp;DownloadId=7483';"&gt;official documentation&lt;/a&gt; available at &lt;a href="http://code.msdn.microsoft.com/ULSViewer"&gt;http://code.msdn.microsoft.com/ULSViewer&lt;/a&gt;)&lt;/p&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/784.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2010/01/12/784.aspx</guid>
            <pubDate>Tue, 12 Jan 2010 05:16:52 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/784.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2010/01/12/784.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/784.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Neat Trace Writer Trick</title>
            <category>.NET Development</category>
            <category>Computing</category>
            <category>SharePoint</category>
            <category>Productivity</category>
            <link>http://www.nnihlen.com/blog/archive/2009/10/17/783.aspx</link>
            <description>&lt;p&gt;This is one that my colleague &lt;a href="http://blogs.msdn.com/mattlind/default.aspx"&gt;Mattias&lt;/a&gt; showed me. When I code SharePoint solutions I’m always to put in some diagnostics logging just so that I can turn it on and se what happens. There is (as always) a couple of options here. Write to the ULS logs, which I guess is the preferred way to do it and then use &lt;a href="http://technet.microsoft.com/en-us/library/cc288649.aspx"&gt;event throttling&lt;/a&gt; to turn it on and off. However sometimes its just a bit to much work. So, here’s the trick.&lt;/p&gt;
&lt;p&gt;Sprinkle Trace.Writer's in your code where it makes sense. So for example i might want do put the following code somewhere:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;pre class="brush: csharp; ruler: true;"&gt;System.Diagnostics.Trace.Write("Feature myAwsomeFeature is installed");&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Running normally this don’t generate any output. The way I was aware of before to get at this output was to hook up a &lt;a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.tracelistener.aspx"&gt;Trace Listener in the config file&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now to the trick, at least in my book since I didn’t know about it.&lt;/p&gt;
&lt;p&gt;Download &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx"&gt;DebugView&lt;/a&gt; from TechNet. Unpack and fire it up. I had to enable Global Win32 Capturing:&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/WindowsLiveWriter/NeatTraceWriteTrix_F290/DebugViewCaptureOptions_2.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="DebugViewCaptureOptions" border="0" alt="DebugViewCaptureOptions" width="244" height="164" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/WindowsLiveWriter/NeatTraceWriteTrix_F290/DebugViewCaptureOptions_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Then it’s just to lean back and watch your eminent Trace Writes roll by:&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/WindowsLiveWriter/NeatTraceWriteTrix_F290/DebugView_2.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="DebugView" border="0" alt="DebugView" width="354" height="137" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/WindowsLiveWriter/NeatTraceWriteTrix_F290/DebugView_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;It’s probably like most things in my life. Everybody else already know about it, but I think it is neat! And by the way, this is of course not tied to SharePoint in any way.&lt;/p&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/783.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2009/10/17/783.aspx</guid>
            <pubDate>Sat, 17 Oct 2009 07:39:01 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/783.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2009/10/17/783.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/783.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Multiple Exchange Servers in Outlook 2010</title>
            <category>Computing</category>
            <category>Productivity</category>
            <link>http://www.nnihlen.com/blog/archive/2009/09/06/multiple-exchange-servers-in-outlook-2010.aspx</link>
            <description>&lt;p&gt;In my role as a consultant I’ve many a times been at a customer for months in a row. What happens then (at least for me) is I get a Exchange account at the customer, I have one at my employer and after a while I’m starting to get skitsofrentic. Either I run one in Outlook and the other in Outlook Web Access and forwarding meetings across to keep the calendars in sync. Another option is to have multiple mail-profiles for outlook to use. Doesn’t matter how you twist and turn it, you’ll always end up with a mess… Until soon.&lt;/p&gt;  &lt;p&gt;It really warmed my heart when I read this &lt;a href="http://blogs.msdn.com/outlook/archive/2009/08/25/multiple-exchange-accounts-in-outlook-2010.aspx"&gt;post&lt;/a&gt; at the &lt;a href="http://blogs.msdn.com/outlook/"&gt;Office Outlook Team blog&lt;/a&gt;. In Outlook 2010 you can have multiple Exchange servers simultaneously!&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/WindowsLiveWriter/MultipleExchangeServersinOutlook2010_C98D/MultiExchangeInOutlook_2.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="MultiExchangeInOutlook" border="0" alt="MultiExchangeInOutlook" src="http://www.nnihlen.com/blog/images/www_nnihlen_com/blog/WindowsLiveWriter/MultipleExchangeServersinOutlook2010_C98D/MultiExchangeInOutlook_thumb.gif" width="222" height="414" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="left"&gt;Just pure awesomeness!&lt;/p&gt;&lt;img src="http://www.nnihlen.com/blog/aggbug/782.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Niklas Nihlen</dc:creator>
            <guid>http://www.nnihlen.com/blog/archive/2009/09/06/multiple-exchange-servers-in-outlook-2010.aspx</guid>
            <pubDate>Sun, 06 Sep 2009 12:19:59 GMT</pubDate>
            <wfw:comment>http://www.nnihlen.com/blog/comments/782.aspx</wfw:comment>
            <comments>http://www.nnihlen.com/blog/archive/2009/09/06/multiple-exchange-servers-in-outlook-2010.aspx#feedback</comments>
            <wfw:commentRss>http://www.nnihlen.com/blog/comments/commentRss/782.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>