<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Edument blog - Development and mentorship</title>
	<atom:link href="http://blog.edument.se/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.edument.se</link>
	<description>Besides helping you solve specific problems, our knowledgeable consultants act as mentors.</description>
	<lastBuildDate>Fri, 18 Nov 2011 07:49:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.edument.se' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/e7573b0d047a0116de12fd875011732e?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Edument blog - Development and mentorship</title>
		<link>http://blog.edument.se</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.edument.se/osd.xml" title="Edument blog - Development and mentorship" />
	<atom:link rel='hub' href='http://blog.edument.se/?pushpress=hub'/>
		<item>
		<title>Nordic Perl Workshop 2011</title>
		<link>http://blog.edument.se/2011/05/10/nordic-perl-workshop-2011/</link>
		<comments>http://blog.edument.se/2011/05/10/nordic-perl-workshop-2011/#comments</comments>
		<pubDate>Mon, 09 May 2011 22:19:49 +0000</pubDate>
		<dc:creator>carl</dc:creator>
		
		<guid isPermaLink="false">http://blog.edument.se/?p=612</guid>
		<description><![CDATA[The Nordic Perl Workshop is an annual event that the Nordic countries take turns hosting. This year&#8217;s workshop will take place in Malmö, Sweden. The companies Edument and Informator have graciously agreed to sponsor the event. Perl is a modern scripting language with a vibrant developer community, active core developers, and just massive amounts of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.edument.se&amp;blog=13504730&amp;post=612&amp;subd=edument&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img src="http://conferences.yapceurope.org/npw2011/npw2011-logo.png" style="float:right;">The <a href="http://conferences.yapceurope.org/npw2011/">Nordic Perl Workshop</a> is an annual event that the Nordic countries take turns hosting. This year&#8217;s workshop will take place in Malmö, Sweden. The companies Edument and Informator have graciously agreed to sponsor the event.</p>
<p><a href="http://www.perl.org/">Perl</a> is a modern scripting language with a vibrant developer community, active core developers, and just <a href="http://www.cpan.org/">massive amounts of modules</a>. Perl source code drives companies, web pages, IRC bots, and parts of the Internet infrastructure. However, much has happened since the first release of Perl in 1987; as a way to celebrate that, the theme of the workshop this year is &#8220;Perl in 2011&#8243;.</p>
<p><a href="http://edument.se/">Edument</a> is a newly started company in the Skåne region in southern Sweden, providing consultancy, education, and development mentorship. <a href="http://www.informator.se/">Informator</a> is a well-established provider of education in the Nordic countries. Their joint sponsoring of the event means that the attendees will have a lovely venue close to the station, with a nice view of the <a href="http://www.worldtravelimages.net/Malmo_Dockan.html">Malmö harbour area</a>.</p>
<p>The event is arranged by <a href="http://www.edument.se/konsulter/jonathan-worthington.html">Jonathan Worthington</a> and <a href="http://www.edument.se/konsulter/carl-masak.html">Carl Mäsak</a>, both of them Edument employees who also happen to be core developers in the Perl 6 community.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/edument.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/edument.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/edument.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/edument.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/edument.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/edument.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/edument.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/edument.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/edument.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/edument.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/edument.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/edument.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/edument.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/edument.wordpress.com/612/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.edument.se&amp;blog=13504730&amp;post=612&amp;subd=edument&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.edument.se/2011/05/10/nordic-perl-workshop-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2d9d4815e8e5927a4e04cdea13ca1e36?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">carl</media:title>
		</media:content>

		<media:content url="http://conferences.yapceurope.org/npw2011/npw2011-logo.png" medium="image" />
	</item>
		<item>
		<title>Trying out CQRS and Event Sourcing for a day</title>
		<link>http://blog.edument.se/2011/05/04/trying-out-cqrs-and-es-for-a-day/</link>
		<comments>http://blog.edument.se/2011/05/04/trying-out-cqrs-and-es-for-a-day/#comments</comments>
		<pubDate>Wed, 04 May 2011 00:48:19 +0000</pubDate>
		<dc:creator>carl</dc:creator>
		
		<guid isPermaLink="false">http://blog.edument.se/?p=588</guid>
		<description><![CDATA[Last Friday, Jonathan Worthington and I (Carl Mäsak) decided to get our feet wet with CQRS and event sourcing. The toy project we settled on: a simple but realistic web site for two-player board games. In this post, I summarize how things went. Architect meets domain expert Since there were only the two of us, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.edument.se&amp;blog=13504730&amp;post=588&amp;subd=edument&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Last Friday, <a href="http://www.edument.se/konsulter/jonathan-worthington.html" title="Jonathan Worthington">Jonathan Worthington</a> and I (<a href="http://www.edument.se/konsulter/carl-masak.html" title="Carl Mäsak">Carl Mäsak</a>) decided to get our feet wet with CQRS and event sourcing. The toy project we settled on: a simple but realistic web site for two-player board games.</p>
<p>In this post, I summarize how things went.</p>
<h2>Architect meets domain expert</h2>
<p><img style="float:right;" src="http://masak.org/carl/go-board.jpg" alt="" /></p>
<p>Since there were only the two of us, I took the role of the domain expert, and Jonathan took the role of the architect. He expertly teased a model out of me. We arrived at two aggregate roots: <code>Player</code> and <code>Game</code>. Easy enough.</p>
<h2>Design: commands and events</h2>
<p>Using an <a href="http://www.learnvisualstudio.net/content/videos/2501_walkthrough_creating_an_xsd_schema.aspx">inept but sufficient schema tool</a>, we drew up the <a href="https://github.com/jnthn/hex/commit/e46c2c1a6fb5b5ed180867928441b558a37be3ff">commands and events</a> we figured we needed. These were as follows:</p>
<pre><code>RegisterPlayerCommand
ActivatePlayerCommand
InvitePlayerCommand
AcceptInvitationCommand
RejectInvitationCommand
(no StartGameCommand)
PlaceStoneCommand
SwapPlayerColorsCommand
ResignGameCommand
TimeOutGameCommand

PlayerRegisteredEvent
PlayerActivatedEvent
PlayerInvitedEvent
GameStartedEvent
InvitationRejectedEvent
StonePlacedEvent
GameWonEvent
PlayerColorsSwappedEvent
GameResignedEvent
GameTimedOutEvent</code></pre>
<p>For each command and event, we took a moment to model through what data we needed to send along. It gave us an appreciation for one of the ways in which commands and events differ: on the inside.</p>
<p>There was a moment of joyful insight as we realized that we had gotten this far into the design of the system and not once talked about state. Quite a<br />
refreshing change.</p>
<p>Being the one with the &#8220;domain expert&#8221; knowledge, I kept unwillingly slipping back into the role of the client. Otherwise we&#8217;d have gotten some things wrong, which wouldn&#8217;t have shown up until the next &#8220;meeting with the client&#8221;. Jonathan remarked: &#8220;There&#8217;s got to be a lesson in here somewhere.&#8221;</p>
<p>(Afterwards, we&#8217;ve changed two things in the above model: we eventually realized that we would need an <code>InvitationAcceptedEvent</code> after all. The reason we originally figured we&#8217;d be able to do without it is that we noticed that it would fire off a <code>GameStartedEvent</code>, and that would be enough. But no, it needs to fire off both, otherwise the <code>Invitation</code> would still be open. The other thing we realized was that a better name for <code>InvitePlayerCommand</code> and <code>PlayerInvitedEvent</code> would be <code>MakeInvitationCommand</code> and <code>InvitationMadeEvent</code>. That way, all the commands and events contain in their names the aggregate that they are acting on &#8212; which makes a lot of sense.)</p>
<h2>Commands, events, test framework</h2>
<p>We wrote our <a href="https://github.com/jnthn/hex/blob/2e4b876537c1eb3c1459ccb19e11bbcc225048d3/t/gameplay.t">first test</a>, and the necessary classes to go with it.</p>
<h2>Infrastructure</h2>
<p>Our goal now was to get enough of the system running for our first test to fail. That took a few hours, partly due to the fact that we were figuring out how to fit everything together.</p>
<p>The wiring is like this: The test contains a &#8216;given&#8217; list of events, a &#8216;when&#8217; command, and a &#8216;then&#8217; list of events or an exception. The test fixture creates an aggregate root to do the testing on, and loads it up with the events from the &#8216;given&#8217; part. Aggregate roots have <a href="https://github.com/jnthn/hex/blob/master/lib/Hex/AggregateRoot.pm">a special flag</a> on the <code>apply_event</code> method for applying events without having them register as changes to be committed. That&#8217;s all the concession to testing that&#8217;s needed. Quite neat.</p>
<p>The test fixture then sends the command to a <a href="https://github.com/jnthn/hex/blob/master/lib/Hex/EventAggregator.pm">bus-like thing</a>. This triggers the right <a href="https://github.com/jnthn/hex/blob/master/lib/Hex/CommandHandlers/Game.pm#L32">command handler</a>, which does the required validation and then calls a <a href="https://github.com/jnthn/hex/blob/master/lib/Hex/AggregateRoot/Game.pm#L104">method on the aggregate</a>. That&#8217;s the command part of things.</p>
<p>Now, the method on the aggregate is just a thin wrapper for <a href="https://github.com/jnthn/hex/blob/master/lib/Hex/AggregateRoot.pm#L28">applying an event</a>. The event is mapped through a <a href="https://github.com/jnthn/hex/blob/master/lib/Hex/AggregateRoot/Game.pm#L48">lookup table</a> (our workaround for the lack of method overloading in Perl 5) to an <a href="https://github.com/jnthn/hex/blob/master/lib/Hex/AggregateRoot/Game.pm#L72">apply-event method</a>. Note that on the way, we visited the same <code>apply_event</code> method as when we prepared the aggregate with the &#8216;given&#8217; events. This time the generated events <em>are</em> saved, though&#8230; and that&#8217;s exactly what we&#8217;re then using to check against the &#8216;then&#8217; events. (Or, if we got an exception, the test fixture captures that and compares it with whatever was expected.)</p>
<p>It&#8217;s quite a simple system, though it took us a few hours to understand and get running. Still not too bad for our first attempt.</p>
<h2>Getting the first test to pass</h2>
<p>Trying to get the test we&#8217;d written at the beginning of the day to pass, we realized that we were still missing one component: a repository to store the aggregate in while we were testing it. We settled on writing a <a href="https://github.com/jnthn/hex/blob/master/lib/TestRepository.pm">test repository</a>, with a total capacity of one (1) aggregate.</p>
<p>After that, things fell into place quickly. We got our event wired up, and the test passing. Thus, we entered into the next phase&#8230;</p>
<h2>Ping-pong pair programming</h2>
<p>By the looks of the commit log, that&#8217;s where I became unconscious and Jonathan kept on hacking. <code> <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </code> But what really happened is that we paired up over Jonathan&#8217;s keyboard and started hacking in earnest.</p>
<p>Ordinary pair programming has a &#8220;driver&#8221; and a &#8220;navigator&#8221;. In <a href="http://www.c2.com/cgi/wiki?PairProgrammingPingPongPattern">ping-pong pair programming</a>, the idea<br />
is for the two people to alternate by taking turns writing a test for the other to implement. This was the first time we tried that, and it went very smoothly. Definitely something to try again. In regular pair programming, the navigator can sometimes doze off. But doing things this way, both of us were engaging with the process of writing code and tests, even when we weren&#8217;t in the role of driver.</p>
<p>We got through eight such cycles of ping and pong. At this point, things were really effortless: all the groundwork was already made, and now that we were finally implementing state in our aggregates, there were no longer any obstacles left. A very weird feeling; the aggregate was its own little world, merely responding to commands and events as they came flying by. Coding was effortless, not least because we managed to time it with the Ballmer Peak. <code> <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </code> Mmm, beer.</p>
<p>We surprised each other a bit by turning what appeared to be quite tricky tests into excessively simple bits of implementation. Things generally required <em>less</em> wiring up than we expected. (Again, because object state wasn&#8217;t the driving component, leaving us free to structure the innards of an aggregate any which way we wanted.)</p>
<p>One thing we also discovered is that we generally had to write fewer tests than &#8220;usual&#8221;. Each new test covered a bit more ground than we expected, and we often didn&#8217;t bother to write a test because we already knew it was going to pass. We&#8217;re not sure whether that&#8217;s (a) a good thing, and we shouldn&#8217;t worry, (b) a bad thing that&#8217;s going to cost us in the future, or just (c) a sign that we knew too much about the implementation. Guess more practice with this way of testing will tell.</p>
<p>All in all, a happy first day with CQRS and event sourcing in actual practice.</p>
<h2>Attribution</h2>
<p><a href="http://www.flickr.com/photos/luisbg/2094497615/in/photostream/">go</a> is Copyright © 2007 by <a href="http://www.flickr.com/photos/luisbg/">luisbg</a>.</p>
<h2>The author</h2>
<p><a href="http://www.edument.se/konsulter/carl-masak.html"><img style="float:right;" src="http://www.edument.se/images/konsulter/Large/carl-masak.png" alt="" /></a></p>
<p><strong>Carl Mäsak</strong> has a passion for software and software process. He works as an architect and programming mentor at Edument. He likes to work on healing systems in need of an architecture, or to help introduce order into a chaotic domain. On his spare time, he rides a bike, cooks food, and writes music. Not necessarily all at the same time.</p>
<h2>Upcoming CQRS events</h2>
<p>Edument will arrange a <a href="http://www.edument.se/events/">Software Architecture &#8211; Community Day</a> in Malmo, Gothenburg and Stockholm.</p>
<p>Edument will also host a <a href="http://www.swenug.se/events/skaane-cqrs">CQRS evening event</a> with <a href="http://www.swenug.se">Swenug</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/edument.wordpress.com/588/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/edument.wordpress.com/588/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/edument.wordpress.com/588/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/edument.wordpress.com/588/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/edument.wordpress.com/588/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/edument.wordpress.com/588/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/edument.wordpress.com/588/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/edument.wordpress.com/588/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/edument.wordpress.com/588/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/edument.wordpress.com/588/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/edument.wordpress.com/588/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/edument.wordpress.com/588/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/edument.wordpress.com/588/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/edument.wordpress.com/588/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.edument.se&amp;blog=13504730&amp;post=588&amp;subd=edument&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.edument.se/2011/05/04/trying-out-cqrs-and-es-for-a-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2d9d4815e8e5927a4e04cdea13ca1e36?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">carl</media:title>
		</media:content>

		<media:content url="http://masak.org/carl/go-board.jpg" medium="image" />

		<media:content url="http://www.edument.se/images/konsulter/Large/carl-masak.png" medium="image" />
	</item>
		<item>
		<title>Fitting AOP into the paradigm jigsaw</title>
		<link>http://blog.edument.se/2011/03/02/fitting-aop-into-the-paradigm-jigsaw/</link>
		<comments>http://blog.edument.se/2011/03/02/fitting-aop-into-the-paradigm-jigsaw/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 13:00:24 +0000</pubDate>
		<dc:creator>edument</dc:creator>
		
		<guid isPermaLink="false">http://blog.edument.se/?p=548</guid>
		<description><![CDATA[As one of the core contributors to a compiler for a new language, I often find myself needing to explain new concepts and ideas to other developers. Over time, I&#8217;ve gradually found an approach that tends to work. First, where does the concept fit on the language feature or paradigm map? Second, what is the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.edument.se&amp;blog=13504730&amp;post=548&amp;subd=edument&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As one of the core contributors to a compiler for a new language, I often find myself needing to explain new concepts and ideas to other developers. Over time, I&#8217;ve gradually found an approach that tends to work. First, where does the concept fit on the language feature or paradigm map? Second, what is the problem that it is aimed at, and how are other perhaps more familiar solutions weak? And then &#8212; with that critical foundation laid &#8212; what does the new concept actually do to help? Recently, I was asked to speak about Aspect Oriented Programming at the .Net Community Day. I&#8217;ve known about AOP for years and discussed it with developers before, but this was a nice opportunity for me to spend a while thinking about how best to go about explaining it. So I set about coming up with the AOP answers for my three questions. There are a bunch of titles that we tend to put before the word &#8220;programming&#8221;. &#8220;Object Oriented Programming&#8221;, &#8220;Functional Programming&#8221;, &#8220;Declarative Programming&#8221; and &#8220;Generic Programming&#8221; are just some examples. They&#8217;re all paradigms, but the amount they try to answer differs. The first three I listed &#8212; OOP, FP and DP &#8212; will happily jostle for pride of place in a language, seeking to be its &#8220;core paradigm&#8221;, and posing a challenge to language designers who see value in all of them. Of course, some languages do decide to just follow a single paradigm: regexes are happily declarative, and Java has admitted little into the language that isn&#8217;t squarely inside the OO box. However, most of the popular and expressive general purpose languages out there today embrace multiple of these &#8220;core paradigms&#8221;, recognizing that solving every programming task with a single paradigm is like doing every garden task with a lawnmower. At the same time, there are paradigms that simply seek to deal with a very particular set of issues. Generic programming is one of them: it deals with the situations where we want to use the same piece of code with different types, in a strongly typed way. This idea actually cross-cuts the &#8220;core paradigms&#8221;; generics are simply a case of parametric polymorphism, which one finds in functional languages. This is the kind of place that AOP sits. It&#8217;s not pitching itself as a successor to &#8212; or even a competitor of &#8212; any of our familiar core paradigms. Instead, it takes a problem and proposes an approach for solving it. So what&#8217;s the problem? In any complex code base, there are cross-cutting concerns &#8212; things that we need to do in many places that are incidental to the core logic. For example, logging and exception handling and reporting are generally things that a piece of code does in addition to the task that it really exists to perform. Of course, we factor as much of the logging and reporting code out as we can, but generally we find ourselves doomed to repeat similar-looking bits of cross-cutting logic in many places. Even if it&#8217;s just a call to the logger, or a catch block, it ends up duplicated. Duplicated code is generally a bad sign. For one, it inhibits future refactoring; if we decide to switch logging library, this is now a change in many places. Since we have mentioned the logging library in many places, we have many pieces of our code that are closely coupled to it &#8212; something that goes against our general preference for code that is loosely coupled. We also run into challenges when we want to install new cross-cutting concerns into our software &#8212; there&#8217;s so many places to change! Aspect Oriented Programming is aimed at these kinds of challenges. It introduces the concept of join points &#8212; places in our code that we could add some functionality &#8212; and advice &#8212; the functionality that we want to incorporate. It provides a mechanism to write the cross-cutting functionality in one place and have it &#8220;inserted&#8221; into the join points. A common reaction is, &#8220;wow, magical&#8221;, but if we cast our eyes back over programming history, it&#8217;s really not so surprising. Once upon a time there was just assemblers. Repeating regular sequences of instructions was tiring, so macro systems were created. These &#8220;magically&#8221; got substituted for a sequence of instructions, with some parametrization thrown in to make them more powerful. A little further on, named and callable subroutines allowed for real re-use of code. We raised the abstraction bar: &#8220;you don&#8217;t have to worry about what this bit of code does, just call it like this&#8221;. Then came OO. Here things got really magical: invoking one of these method things leaves you with no idea what bit of code is going to be called! It could come from that familiar bit of code you wrote yesterday, or it could come from a subclass that&#8217;s going to be written in 10 years time. Over the years, we&#8217;ve evolved ways to manage complexity in software, many of them hanging off increasingly non-linear or loosely coupled flow of control. We&#8217;ve coped with the increasiging complexity in our paradigms and programming style, because they more than pay themselves back by decreasing complexity in the software we produce using them. AOP&#8217;s concept of join points and advice is giving us a little more conceptual overhead in exchange for a more maintainable and less coupled implementation of our cross-cutting concerns. Looking to the future, I think it&#8217;s important to remember that where we are with any paradigm today is almost certainly some way from the ideal. We&#8217;ve learned a lot about object oriented programming over the decades that it has existed, and continue to do so. Multiple inheritance has generally been marked down as a bad idea, and the emergence of traits in Smalltalk (also known as roles in Perl 6) has made some &#8212; myself included &#8212; question whether we&#8217;d be better off dropping inheritance altogether in favor of flattening composition. AOP has only had 15 years of lessons learned so far, and I&#8217;ve no doubt we&#8217;ve got a long road to walk from here. However, that being the case shouldn&#8217;t stop us embracing AOP today. After all, the ongoing journey of the object oriented paradigm isn&#8217;t something that stops us from using it. The critical question is, &#8220;does this help me deliver higher quality, more maintainable software&#8221; &#8212; and I think there are a bunch of use cases where today&#8217;s implementations of AOP help us to do so. About The Author <a href="http://edument.files.wordpress.com/2011/02/foto_jonathan.jpg"><img class="aligncenter size-medium wp-image-549" title="SONY DIGITAL CAMERA" src="http://edument.files.wordpress.com/2011/02/foto_jonathan.jpg?w=225&#038;h=300" alt="" width="225" height="300" /></a> Jonathan Worthington is an architect and programming mentor at Edument. He works to help development teams improve their software architecture and work more efficiently, following best practices. He is also one of the core developers of the Rakudo Perl 6 compiler, where his work focuses on the implementation of object oriented language features and the type system. In his free time, he enjoys hiking in the mountains, good beer and curry.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/edument.wordpress.com/548/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/edument.wordpress.com/548/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/edument.wordpress.com/548/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/edument.wordpress.com/548/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/edument.wordpress.com/548/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/edument.wordpress.com/548/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/edument.wordpress.com/548/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/edument.wordpress.com/548/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/edument.wordpress.com/548/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/edument.wordpress.com/548/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/edument.wordpress.com/548/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/edument.wordpress.com/548/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/edument.wordpress.com/548/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/edument.wordpress.com/548/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.edument.se&amp;blog=13504730&amp;post=548&amp;subd=edument&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.edument.se/2011/03/02/fitting-aop-into-the-paradigm-jigsaw/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d5672f6ed14358105634e92de300dfc7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">edument</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2011/02/foto_jonathan.jpg?w=225" medium="image">
			<media:title type="html">SONY DIGITAL CAMERA</media:title>
		</media:content>
	</item>
		<item>
		<title>.NET Community Day</title>
		<link>http://blog.edument.se/2011/02/25/net-community-day/</link>
		<comments>http://blog.edument.se/2011/02/25/net-community-day/#comments</comments>
		<pubDate>Fri, 25 Feb 2011 11:22:12 +0000</pubDate>
		<dc:creator>edument</dc:creator>
				<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://blog.edument.se/?p=558</guid>
		<description><![CDATA[.NET Community Day som hölls både i Göteborg den 10/2 och i Stockholm 11/2 hade en väldig framgång! Med talare i världsklass lyckades vi få fulla lokaler av kunskapshungriga deltagare. Vi fick ta lärdom av talare så som Mark Seemann, Jonathan Worthington, Hadi Hariri och Dag könig om både gammalt som nytt inom .NET världen. Inte nog [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.edument.se&amp;blog=13504730&amp;post=558&amp;subd=edument&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>.NET Community Day som hölls både i Göteborg den 10/2 och i Stockholm 11/2 hade en väldig framgång!<br />
Med talare i världsklass lyckades vi få fulla lokaler av kunskapshungriga deltagare. Vi fick ta lärdom av talare så som Mark Seemann, Jonathan Worthington, Hadi Hariri och Dag könig om både gammalt som nytt inom .NET världen.</p>
<p>Inte nog med det så lanserades även nya kurser och utbildningar som kunde bokas direkt på plats av våra kunder. Exempel på dessa kurser är:<br />
<a href="http://www.informator.se/utbildningar/systemutveckling/webb/web-security-for-developers.aspx">Web Security for Developers</a><br />
<a href="http://www.informator.se/utbildningar/metoder-och-modeller/arkitektur/software-architecture.aspx">Software Architecture</a><br />
<a href="http://www.informator.se/utbildningar/systemutveckling/applikation/dotnet-och-visual-studio/using-aspdotnet-mvc-in-the-real-world-from-start-to-finish.aspx">Using ASP.NET MVC in the real world: From start to finish</a></p>
<p>Vi tackar alla som deltog denna gång och ser redan fram emot nästa!</p>
<p><span style="text-align:center; display: block;"><a href="http://blog.edument.se/2011/02/25/net-community-day/"><img src="http://img.youtube.com/vi/pherUEzdJow/2.jpg" alt="" /></a></span><br />
(för att se Part: 2,3,4 o.s.v klicka in er på YouTube där resterande finns!)</p>
<p>&nbsp;</p>
<p><a href="http://edument.files.wordpress.com/2011/02/182603_10150091657269480_302181839479_6160418_7547960_n.jpg"><a href="http://edument.files.wordpress.com/2011/02/180972_10150091673499480_302181839479_6160503_1466239_n.jpg"><a href="http://edument.files.wordpress.com/2011/02/176492_10150092085259480_302181839479_6165053_202443_o.jpg"><a href="http://edument.files.wordpress.com/2011/02/176409_10150092093869480_302181839479_6165245_3945329_o.jpg"><img class="alignnone size-full wp-image-575" title="176409_10150092093869480_302181839479_6165245_3945329_o" src="http://edument.files.wordpress.com/2011/02/176409_10150092093869480_302181839479_6165245_3945329_o.jpg?w=640&#038;h=480" alt="" width="640" height="480" /></a><a href="http://edument.files.wordpress.com/2011/02/176261_10150092093954480_302181839479_6165249_6201273_o.jpg"><img class="alignnone size-full wp-image-574" title="176261_10150092093954480_302181839479_6165249_6201273_o" src="http://edument.files.wordpress.com/2011/02/176261_10150092093954480_302181839479_6165249_6201273_o.jpg?w=640&#038;h=480" alt="" width="640" height="480" /></a><a href="http://edument.files.wordpress.com/2011/02/176051_10150092094094480_302181839479_6165254_627151_o.jpg"><img class="alignnone size-full wp-image-573" title="176051_10150092094094480_302181839479_6165254_627151_o" src="http://edument.files.wordpress.com/2011/02/176051_10150092094094480_302181839479_6165254_627151_o.jpg?w=640&#038;h=480" alt="" width="640" height="480" /></a><a href="http://edument.files.wordpress.com/2011/02/176000_10150091205404480_302181839479_6155646_1921245_o.jpg"><img class="alignnone size-full wp-image-572" title="176000_10150091205404480_302181839479_6155646_1921245_o" src="http://edument.files.wordpress.com/2011/02/176000_10150091205404480_302181839479_6155646_1921245_o.jpg?w=640&#038;h=480" alt="" width="640" height="480" /></a><a href="http://edument.files.wordpress.com/2011/02/175865_10150092085124480_302181839479_6165047_804293_o.jpg"><img class="alignnone size-full wp-image-571" title="175865_10150092085124480_302181839479_6165047_804293_o" src="http://edument.files.wordpress.com/2011/02/175865_10150092085124480_302181839479_6165047_804293_o.jpg?w=640&#038;h=387" alt="" width="640" height="387" /></a><a href="http://edument.files.wordpress.com/2011/02/175839_10150091253674480_302181839479_6156280_5841221_o.jpg"><img class="alignnone size-full wp-image-570" title="175839_10150091253674480_302181839479_6156280_5841221_o" src="http://edument.files.wordpress.com/2011/02/175839_10150091253674480_302181839479_6156280_5841221_o.jpg?w=640&#038;h=480" alt="" width="640" height="480" /></a><a href="http://edument.files.wordpress.com/2011/02/175491_10150091199964480_302181839479_6155555_7675678_o.jpg"><img class="alignnone size-full wp-image-569" title="175491_10150091199964480_302181839479_6155555_7675678_o" src="http://edument.files.wordpress.com/2011/02/175491_10150091199964480_302181839479_6155555_7675678_o.jpg?w=640&#038;h=480" alt="" width="640" height="480" /></a><a href="http://edument.files.wordpress.com/2011/02/175469_10150091268029480_302181839479_6156421_2343726_o.jpg"><img class="alignnone size-full wp-image-568" title="175469_10150091268029480_302181839479_6156421_2343726_o" src="http://edument.files.wordpress.com/2011/02/175469_10150091268029480_302181839479_6156421_2343726_o.jpg?w=640&#038;h=853" alt="" width="640" height="853" /></a><a href="http://edument.files.wordpress.com/2011/02/172104_10150091218879480_302181839479_6155765_6913287_o.jpg"><img class="alignnone size-full wp-image-567" title="172104_10150091218879480_302181839479_6155765_6913287_o" src="http://edument.files.wordpress.com/2011/02/172104_10150091218879480_302181839479_6155765_6913287_o.jpg?w=640&#038;h=480" alt="" width="640" height="480" /></a><a href="http://edument.files.wordpress.com/2011/02/171807_10150092085194480_302181839479_6165051_3335591_o.jpg"><img class="alignnone size-full wp-image-566" title="171807_10150092085194480_302181839479_6165051_3335591_o" src="http://edument.files.wordpress.com/2011/02/171807_10150092085194480_302181839479_6165051_3335591_o.jpg?w=640&#038;h=480" alt="" width="640" height="480" /></a><a href="http://edument.files.wordpress.com/2011/02/171521_10150092085344480_302181839479_6165056_7428613_o.jpg"><img class="alignnone size-full wp-image-565" title="171521_10150092085344480_302181839479_6165056_7428613_o" src="http://edument.files.wordpress.com/2011/02/171521_10150092085344480_302181839479_6165056_7428613_o.jpg?w=640&#038;h=853" alt="" width="640" height="853" /></a><a href="http://edument.files.wordpress.com/2011/02/170537_10150092085364480_302181839479_6165057_5363139_o.jpg"><img class="alignnone size-full wp-image-564" title="170537_10150092085364480_302181839479_6165057_5363139_o" src="http://edument.files.wordpress.com/2011/02/170537_10150092085364480_302181839479_6165057_5363139_o.jpg?w=640&#038;h=480" alt="" width="640" height="480" /></a><img class="alignnone size-full wp-image-576" title="176492_10150092085259480_302181839479_6165053_202443_o" src="http://edument.files.wordpress.com/2011/02/176492_10150092085259480_302181839479_6165053_202443_o.jpg?w=640&#038;h=313" alt="" width="640" height="313" /></a><img class="alignnone size-full wp-image-578" title="180972_10150091673499480_302181839479_6160503_1466239_n" src="http://edument.files.wordpress.com/2011/02/180972_10150091673499480_302181839479_6160503_1466239_n.jpg?w=500&#038;h=375" alt="" width="500" height="375" /></a><a href="http://edument.files.wordpress.com/2011/02/180698_10150091753879480_302181839479_6161656_5089699_n.jpg"><img class="alignnone size-full wp-image-577" title="180698_10150091753879480_302181839479_6161656_5089699_n" src="http://edument.files.wordpress.com/2011/02/180698_10150091753879480_302181839479_6161656_5089699_n.jpg?w=500&#038;h=375" alt="" width="500" height="375" /></a><img class="alignnone size-full wp-image-579" title="182603_10150091657269480_302181839479_6160418_7547960_n" src="http://edument.files.wordpress.com/2011/02/182603_10150091657269480_302181839479_6160418_7547960_n.jpg?w=500&#038;h=375" alt="" width="500" height="375" /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/edument.wordpress.com/558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/edument.wordpress.com/558/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/edument.wordpress.com/558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/edument.wordpress.com/558/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/edument.wordpress.com/558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/edument.wordpress.com/558/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/edument.wordpress.com/558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/edument.wordpress.com/558/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/edument.wordpress.com/558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/edument.wordpress.com/558/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/edument.wordpress.com/558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/edument.wordpress.com/558/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/edument.wordpress.com/558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/edument.wordpress.com/558/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.edument.se&amp;blog=13504730&amp;post=558&amp;subd=edument&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.edument.se/2011/02/25/net-community-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d5672f6ed14358105634e92de300dfc7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">edument</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2011/02/176409_10150092093869480_302181839479_6165245_3945329_o.jpg" medium="image">
			<media:title type="html">176409_10150092093869480_302181839479_6165245_3945329_o</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2011/02/176261_10150092093954480_302181839479_6165249_6201273_o.jpg" medium="image">
			<media:title type="html">176261_10150092093954480_302181839479_6165249_6201273_o</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2011/02/176051_10150092094094480_302181839479_6165254_627151_o.jpg" medium="image">
			<media:title type="html">176051_10150092094094480_302181839479_6165254_627151_o</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2011/02/176000_10150091205404480_302181839479_6155646_1921245_o.jpg" medium="image">
			<media:title type="html">176000_10150091205404480_302181839479_6155646_1921245_o</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2011/02/175865_10150092085124480_302181839479_6165047_804293_o.jpg" medium="image">
			<media:title type="html">175865_10150092085124480_302181839479_6165047_804293_o</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2011/02/175839_10150091253674480_302181839479_6156280_5841221_o.jpg" medium="image">
			<media:title type="html">175839_10150091253674480_302181839479_6156280_5841221_o</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2011/02/175491_10150091199964480_302181839479_6155555_7675678_o.jpg" medium="image">
			<media:title type="html">175491_10150091199964480_302181839479_6155555_7675678_o</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2011/02/175469_10150091268029480_302181839479_6156421_2343726_o.jpg" medium="image">
			<media:title type="html">175469_10150091268029480_302181839479_6156421_2343726_o</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2011/02/172104_10150091218879480_302181839479_6155765_6913287_o.jpg" medium="image">
			<media:title type="html">172104_10150091218879480_302181839479_6155765_6913287_o</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2011/02/171807_10150092085194480_302181839479_6165051_3335591_o.jpg" medium="image">
			<media:title type="html">171807_10150092085194480_302181839479_6165051_3335591_o</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2011/02/171521_10150092085344480_302181839479_6165056_7428613_o.jpg" medium="image">
			<media:title type="html">171521_10150092085344480_302181839479_6165056_7428613_o</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2011/02/170537_10150092085364480_302181839479_6165057_5363139_o.jpg" medium="image">
			<media:title type="html">170537_10150092085364480_302181839479_6165057_5363139_o</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2011/02/176492_10150092085259480_302181839479_6165053_202443_o.jpg" medium="image">
			<media:title type="html">176492_10150092085259480_302181839479_6165053_202443_o</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2011/02/180972_10150091673499480_302181839479_6160503_1466239_n.jpg" medium="image">
			<media:title type="html">180972_10150091673499480_302181839479_6160503_1466239_n</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2011/02/180698_10150091753879480_302181839479_6161656_5089699_n.jpg" medium="image">
			<media:title type="html">180698_10150091753879480_302181839479_6161656_5089699_n</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2011/02/182603_10150091657269480_302181839479_6160418_7547960_n.jpg" medium="image">
			<media:title type="html">182603_10150091657269480_302181839479_6160418_7547960_n</media:title>
		</media:content>
	</item>
		<item>
		<title>Product Predictions</title>
		<link>http://blog.edument.se/2011/02/23/product-predictions/</link>
		<comments>http://blog.edument.se/2011/02/23/product-predictions/#comments</comments>
		<pubDate>Wed, 23 Feb 2011 10:21:26 +0000</pubDate>
		<dc:creator>edument</dc:creator>
		
		<guid isPermaLink="false">http://blog.edument.se/?p=554</guid>
		<description><![CDATA[Using Product Predictions to increase sales One of the areas I&#8217;ve been working on since joining Edument is product prediction engines. In product prediction, we take a set of historical data that indicates what products a customer was interested in, and use it to suggest products that current customers may be interested in. That may [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.edument.se&amp;blog=13504730&amp;post=554&amp;subd=edument&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2><strong><span style="font-family:Cambria;color:#365f91;">Using Product Predictions to increase sales</span></strong><span style="font-family:Calibri;font-size:small;"><br />
<span style="color:#000000;">One of the areas I&#8217;ve been working on since joining Edument is product prediction engines. In product prediction, we take a set of historical data that indicates what products a customer was interested in, and use it to suggest products that current customers may be interested in. That may be based on the customer&#8217;s own purchase history. Often we also want to use the data to compute a set of similar products to the one that the customer is currently viewing &#8211; something that works with new customers who we have no historical sales data about. </span></span></h2>
<p><span style="font-family:Calibri;font-size:small;"> <a href="http://edument.files.wordpress.com/2011/02/prodikt.jpg"><img class="aligncenter size-medium wp-image-555" title="prodikt" src="http://edument.files.wordpress.com/2011/02/prodikt.jpg?w=352&#038;h=273" alt="" width="352" height="273" /></a></span></p>
<p><strong><em><span style="color:#4f81bd;"><span style="font-size:small;"><span style="font-family:Calibri;">How a predictor engine typically integrates with an existing database-driven website</span></span></span></em></strong></p>
<p><span style="font-family:Calibri;font-size:small;">For example, if a customer is looking at a travel guide to Russia, from the historical sales data we may see that other customers who purchased this travel guide also tended to purchase a Russian phrasebook or a guide book about neighbouring Ukraine. &#8220;Gee,&#8221; says the customer. &#8220;I guess a phrase book would come in handy too, so I know my borsch from my babushki.&#8221; And so you get an extra sale.</span><strong></strong></p>
<p><strong><span style="font-family:Cambria;color:#4f81bd;">Data Models</span></strong><span style="font-family:Calibri;font-size:small;"><br />
The key thing you need to get started with product prediction is a data set. Generally, the larger the better, although extremely large data sets may lead to slow predictions. This is something you will have to assess in your particular use case. To give you an idea of what&#8217;s manageable, though, I&#8217;ve been comfortably churning out predictions in under 10 milliseconds for data sets containing millions of past purchases. Granted it took me a little effort to achieve this kind of performance, but it&#8217;s within reach.</span></p>
<p>There are two types of data models: boolean models and ratings models. In a boolean model, either a customer has a connection with a product or they don&#8217;t. For example:</p>
<ul>
<li> <span style="font-family:Calibri;font-size:small;">They either purchased the product (and have a connection with it) or they didn&#8217;t purchase the product (and thus don&#8217;t) </span></li>
<li><span style="font-family:Calibri;font-size:small;">They either wrote a review of the product or they didn&#8217;t (note that it could be argued that even if the user wrote a crappy review of a product, they still had an interest in it, so we just treat the presence of a view as a connection) </span></li>
<li><span style="font-family:Calibri;font-size:small;">They either viewed the item or they didn&#8217;t (if you don&#8217;t have loads of historical sales data, you could data-mine web logs and try and get some connection data based upon which products a given site visitor viewed, on the basis that visitors to a site will generally tend to view related products; here, site visitors serve the place of customers in the data set). </span></li>
</ul>
<p><span style="font-family:Calibri;font-size:small;">An alternative is to have a ratings based data model. For example, we may have a large number of product ratings given by customers, on a scale of 1 to 5, where 1 is suckful and 5 is awesome. With a ratings based model, a customer giving a product a rating of 5 implies a stronger connection than a rating of 1. The prediction process then considers these values. Note that ratings are not the only possible source of data for using such a model; you could also consider: </span></p>
<ul>
<li><span style="font-family:Calibri;font-size:small;">How many purchases a customer made of a product, if you have a range of products that often lead to repeat orders. For example, if you&#8217;re selling beer online, then a customer may have purchased Hobgoblin 10 times, but (understandably) only purchased Carling once. </span></li>
<li><span style="font-family:Calibri;font-size:small;">If mining web logs, you could consider number of visits to a product page as being your kind of &#8220;rating&#8221; </span></li>
</ul>
<p><span style="font-family:Calibri;font-size:small;">Your choice of boolean or rating model will directly influence the prediction algorithm that you use, since some algorithms only work with one model or the other. Which you opt for largely depends on what type of data you have, though as noted even if you have ratings data you may just like to abstract it down to &#8220;did the customer rate the product or not&#8221;. A boolean model certainly has the benefit of simplicity, and I&#8217;ve had very good results using such a model. If you have resources, then trying multiple algorithms and data models and using A-B testing would, of course, give you a far more scientific answer.</span></p>
<p><strong><span style="font-family:Cambria;color:#4f81bd;">User-based and Item-based Predictors</span></strong><span style="font-family:Calibri;font-size:small;"><br />
Once you have a data model, there are two general types of predictors that you can use it with: user-based and item-based.</span></p>
<p><strong><span style="font-family:Cambria;color:#4f81bd;">Improving Predictions</span></strong><span style="font-family:Calibri;font-size:small;"><br />
In some cases, you may have extra information that you wish to use to influence product prediction. For example: </span></p>
<p>A user-based predictor works by building a &#8220;network&#8221; of users with similar interests, and then making recommendations based on that. That is, given our current user, we can work out the other users nearest to them in the network and give recommendations based upon what those other users purchased. This depends on having some current historical data for the current user. We generally need to pick two things when working with a user-based predictor: a user similarity algorithm that computes the similarity of two users, and a user neighbourhood algorithm that builds the network of most related users. A side-effect of this is that we also win a way to compute &#8220;users with similar interests&#8221;, which for some cases may be useful.</p>
<p>An item-based predictor works based upon item similarity. To work, it also requires you to select an item similarity algorithm, which determines how similar two items are based on the overlap in customers purchasing them (depending on the algorithm, it actually can make transitive reasoning rather than requiring immediate overlap). To produce recommendations for a user, we go from the items they purchased and find most similar items to all of those. However, the big win from this approach is that we can compute most similar products. This is extremely useful because it gives us a way to make predictions for a product that is currently being viewed.</p>
<p>One additional benefit of an item-based predictor is that they allow for more pre-computation. The reason I could compute most similar products in 10 milliseconds was actually because I could, off-line in a batch job, pre-compute tens of thousands of set intersections that would be used in producing the results rather than computing them on the fly. Thus if you have time constraints or a large data set, item predictors are going to scale better.</p>
<ul>
<li><span style="font-family:Calibri;font-size:small;">You may want to filter out products that a customer has already added to their basket from the prediction results; they already decided to buy it, so it&#8217;s best to show them new things they may also wish to buy.</span></li>
<li><span style="font-family:Calibri;font-size:small;">If you have some products that are not &#8220;family friendly&#8221; then you may wish to filter them out. Just because a many parents of kids who like Thomas The Tank Engine also happen to have purchased horror movies doesn&#8217;t mean they are suitable recommendations.</span></li>
<li><span style="font-family:Calibri;font-size:small;">You may want to suggest products in a given price range, which will take the customer over some threshold where they get a volume discount, or can use a voucher, or get free shipping. </span></li>
</ul>
<p><span style="font-family:Calibri;font-size:small;">An additional tweak can involve re-scoring the predicted items. Prediction engines not only find products to recommend, but they rank them by giving each one a score. When we re-score, we twiddle this score a bit to bias certain products to being more likely to appear at the top of the predictions list. Since a site will only have space to show a selection of the predictions, this can make the difference as to whether a product appears as predicted or not. Use cases for re-scoring include: </span></p>
<ul>
<li><span style="font-family:Calibri;font-size:small;">Finding a way to factor in some ratings data when we have a boolean model. For example, if you primarily want to go with a boolean data model based on sales history, you may also want to use customer&#8217;s ratings of a product somehow. You could bias items with high ratings to be more likely to appear in the results than items with lower ratings. This helps you make the most of both data sets.</span></li>
<li><span style="font-family:Calibri;font-size:small;">Biasing products that are more profitable for you to sell towards being ranked as better predictions. </span></li>
<li><span style="font-family:Calibri;font-size:small;">Biasing products that are on special offer to being ranked higher (perhaps you have a lot of a certain item in stock and want to try to increase sales of it) </span></li>
</ul>
<p><strong><span style="font-family:Cambria;color:#4f81bd;">Tracking and A-B Testing </span></strong><br />
<span style="font-family:Calibri;font-size:small;">Just introducing a product prediction system is not the end of the story &#8211; or at least, should not be. It&#8217;s also important to track how many purchases are made as a result of the predictions. This just means tracking click-throughs to product pages made from the product prediction results, and setting a flag when such products are later purchased. This way, you can get a sense of the return on investment that your product prediction engine is delivering.</span></p>
<p><strong><span style="font-family:Cambria;color:#4f81bd;">Isn&#8217;t this expensive?</span></strong><span style="font-family:Calibri;font-size:small;"><br />
Getting a basic product prediction solution in place need not be expensive. Naturally, much time can be spent optimizing predictions and trying out different configurations. However, a basic solution can deliver significant ROI. Then, once you’re comfortable that the predictor is delivering value, you can invest in further optimizing it to increase your sales.</span><strong></strong></p>
<p><strong><span style="font-family:Cambria;color:#4f81bd;">Going further</span></strong><span style="font-family:Calibri;font-size:small;"><br />
If you&#8217;re interested in product prediction solutions, feel free to contact Edument. We&#8217;ll be happy to discuss how you can put the data you already have available to good use in making product predictions. We are also experts at integrating with existing systems and data, with specialists in a range of technologies.</span></p>
<p style="text-align:left;">Taking things a step further, you may want to make your prediction engine configurable, or even run two parallel versions of it. The first time a visitor hits the site, you select which version of the prediction engine that their visit will fall under. You then store not just that the purchase was the result of a prediction, but which version or configuration of the predictor led to the purchase. By combining that with data on how many predictions were served by each configuration or version, you can get real world data on how well different approaches are working for you, and then pick the configuration that works best.</p>
<h2 style="text-align:left;"><strong><span style="font-family:Calibri;font-size:small;color:#3086ce;"><span style="font-family:Calibri;font-size:small;"><span style="font-family:Calibri;font-size:small;">About the author:</span></span></span></strong><span style="font-family:Calibri;font-size:small;"><span style="font-family:Calibri;font-size:small;"><span style="font-family:Calibri;font-size:small;"><a href="http://edument.files.wordpress.com/2011/02/foto_jonathan1.jpg"><img class="alignright size-medium wp-image-561" title="SONY DIGITAL CAMERA" src="http://edument.files.wordpress.com/2011/02/foto_jonathan1.jpg?w=160&#038;h=214" alt="" width="160" height="214" /></a></span></span></span><span style="font-family:Calibri;font-size:small;"><span style="font-family:Calibri;font-size:small;"><span style="font-family:Calibri;font-size:small;"> </span></span></span></h2>
<p style="text-align:left;"><span style="font-family:Calibri;font-size:small;"><span style="font-family:Calibri;font-size:small;"><span style="font-family:Calibri;font-size:small;">Jonathan Worthington is an architect and programming mentor at</span></span></span><span style="font-family:Calibri;font-size:small;"><span style="font-family:Calibri;font-size:small;"><span style="font-family:Calibri;font-size:small;"> Edument. He works to help development teams improve their software</span></span></span><span style="font-family:Calibri;font-size:small;"></span><span style="font-family:Calibri;font-size:small;"><span style="font-family:Calibri;font-size:small;"><span style="font-family:Calibri;font-size:small;"> architecture and work more efficiently, following best practices. He is also one of the core developers of the Rakudo Perl 6 compiler, where his work focuses on the implementation of object oriented language features and the type system. In his free time, he enjoys hiking in the mountains, good beer and curry.</span></span></span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/edument.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/edument.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/edument.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/edument.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/edument.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/edument.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/edument.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/edument.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/edument.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/edument.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/edument.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/edument.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/edument.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/edument.wordpress.com/554/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.edument.se&amp;blog=13504730&amp;post=554&amp;subd=edument&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.edument.se/2011/02/23/product-predictions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d5672f6ed14358105634e92de300dfc7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">edument</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2011/02/prodikt.jpg?w=300" medium="image">
			<media:title type="html">prodikt</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2011/02/foto_jonathan1.jpg?w=225" medium="image">
			<media:title type="html">SONY DIGITAL CAMERA</media:title>
		</media:content>
	</item>
		<item>
		<title>Välkommen, Carl Mäsak, till Edument!</title>
		<link>http://blog.edument.se/2011/01/14/valkommen-carl-masak-till-edument/</link>
		<comments>http://blog.edument.se/2011/01/14/valkommen-carl-masak-till-edument/#comments</comments>
		<pubDate>Fri, 14 Jan 2011 08:10:06 +0000</pubDate>
		<dc:creator>edument</dc:creator>
		
		<guid isPermaLink="false">http://blog.edument.se/?p=542</guid>
		<description><![CDATA[Vi vill börja med att välkomna vår nya medarbetare Carl Mäsak till Edument och hoppas att han kommer trivas hos oss. Vi har tänkt köra en presentation av Carl så att både våra kunder och medarbetare ska få chansen att lära känna honom! Vad har du gjort tidigare? Jag har studerat till civilingenjör i Uppsala. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.edument.se&amp;blog=13504730&amp;post=542&amp;subd=edument&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Vi vill börja med att välkomna vår nya medarbetare Carl Mäsak till Edument och hoppas att han kommer trivas hos oss. Vi har tänkt köra en presentation av Carl så att både våra kunder och medarbetare ska få chansen att lära känna honom!</strong></p>
<h4><em>Vad har du gjort tidigare?</em></h4>
<p>Jag har studerat till civilingenjör i Uppsala. Under studietiden har jag jobbat vid sidan om med programmering, mestadels för universitetet. Jag har en bred erfarenhet som utvecklare av öppen källkod, särskilt som Perl-utvecklare. Jag är en av de mer aktiva personerna i utvecklingen av Perl 6. I jobbet har det mestadels blivit Java och Eclipse, men jag är även naturligt nyfiken på nya språk och paradigm.</p>
<h4><em>Du har hållit på med bioinformatisk mjukvara tidigare?</em></h4>
<p>Ja, min civilingengörsutbildning har namnet ”Bioinformatik”, och under de senste åren har jag ingått i en forskargrupp som utvecklar <a href="http://bioclipse.net/">Bioclipse</a>, en integrerad mjukvaruplattform för kemo- och bioinformatik.</p>
<h4><em>Vad inom systemutveckling brinner du mest för?</em></h4>
<p>Jag tycker att själva utvecklingsprocessen är det häftiga – att utforska ett problem, och skriva något som sedan körs och löser problemet.</p>
<p>J. S. Bach lär ha sagt att det inte är så svårt att spela orgel: man behöver bara trycka på rätt tangenter i rätt ordning. Programmering känns &#8220;lätt-svårt&#8221; på just det sättet; det är lätt när man kan det. Och det är spännande att lära sig nya tekniker för att förstå det bättre och nå längre.</p>
<h4><em>Varför valde du att jobba för just Edument?</em></h4>
<p>Jag gillar värdena som ligger till grund för Edument. Konsultverksamhet kan se ut på så många olika sätt &#8211; hos Edument handlar det om att ge kunden något långsiktigt bra, inte bara plåsterlösningar. Det finns något lockande i att vara med hela vägen med kunden, både i utvecklingsarbetet på plats och i fortbildning och mentorskap.</p>
<p>Hon Edument kommer jag att ägna mig åt mobil utveckling, Android, Meego, samt undervisning/konsulting i diverse språk: Java, C++, Perl…</p>
<h4><em>Har du några speciella highlights i din karriär?</em></h4>
<p>Min &#8220;karriär&#8221; så här långt återfinns huvudsakligen i Perl-världen.<strong> </strong>Jag har varit med och utvecklat specifikation och implementationer för Perl 6, jag har skrivit ett antal program och moduler, mina föredrag på konferenser är omtyckta, och <a href="http://strangelyconsistent.org/blog/">min blogg</a> har tusentals besökare i månaden. Under den gångna månaden har jag arrangerat en programmeringstävling på Internet.</p>
<h4><em>Vad har du för fritidsintressen?</em></h4>
<p>Jag tycker om att dansa, simma, springa, sjunga i kör, laga mat. baka, spela piano/orgel, komponera, skriva, och rita. Dock ej alla samtidigt.</p>
<h4><em>Kuriosa: Vilken var din första dator?</em></h4>
<p>En Amstrad med två 5 1/4 tums diskettstationer och utan hårddisk. MS-DOS 3 någonting. Gjorde mitt första &#8220;plattformsspel&#8221; i Lotus 123, den tidens Excel.</p>
<p>Läs mer: <a href="http://www.edument.se/konsulter/carl-masak.html">Carls konsultprofil</a> hos Edument.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/edument.wordpress.com/542/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/edument.wordpress.com/542/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/edument.wordpress.com/542/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/edument.wordpress.com/542/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/edument.wordpress.com/542/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/edument.wordpress.com/542/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/edument.wordpress.com/542/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/edument.wordpress.com/542/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/edument.wordpress.com/542/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/edument.wordpress.com/542/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/edument.wordpress.com/542/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/edument.wordpress.com/542/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/edument.wordpress.com/542/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/edument.wordpress.com/542/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.edument.se&amp;blog=13504730&amp;post=542&amp;subd=edument&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.edument.se/2011/01/14/valkommen-carl-masak-till-edument/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d5672f6ed14358105634e92de300dfc7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">edument</media:title>
		</media:content>
	</item>
		<item>
		<title>Community Connection II &#8211; .NET best practices (26nov)</title>
		<link>http://blog.edument.se/2010/12/06/community-connection-ii-net-best-practices-26nov/</link>
		<comments>http://blog.edument.se/2010/12/06/community-connection-ii-net-best-practices-26nov/#comments</comments>
		<pubDate>Mon, 06 Dec 2010 12:48:55 +0000</pubDate>
		<dc:creator>edument</dc:creator>
				<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://blog.edument.se/?p=532</guid>
		<description><![CDATA[Eventet  &#8221;Community Connection II — .NET best practices&#8221; som hölls den 26 november blev lyckat. Schemat ändrades en aning under dagen, inga drastiska förändringar dock byttes det plats mellan de olika talarna. Vi fick höra talare som: Hadi Hariri, Dag König, Jonathan Worthington, Mark Seemann och slutligen Peter Larsson. Med över 150 deltagare och positiv feedback så är vi otroligt nöjda och ser redan fram emot nästa gång då vi hoppas få se alla deltagande igen, och kanske några nya ansikten? Det hoppas vi!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.edument.se&amp;blog=13504730&amp;post=532&amp;subd=edument&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Eventet  &#8221;<strong>Community Connection II — .NET best practices</strong>&#8221; som hölls den 26 november blev lyckat. Schemat ändrades en aning under dagen, inga drastiska förändringar dock byttes det plats mellan de olika talarna. Vi fick höra talare som: Hadi Hariri, Dag König, Jonathan Worthington, Mark Seemann och slutligen Peter Larsson.</p>
<p>Med över 150 deltagare och positiv feedback så är vi otroligt nöjda och ser redan fram emot nästa gång då vi hoppas få se alla deltagande igen, och kanske några nya ansikten? Det hoppas vi!<br />

<a href='http://blog.edument.se/2010/12/06/community-connection-ii-net-best-practices-26nov/100kvar/' title='100kvar'><img data-attachment-id='533' data-orig-size='648,388' data-liked='0'width="150" height="89" src="http://edument.files.wordpress.com/2010/12/100kvar.jpg?w=150&#038;h=89" class="attachment-thumbnail" alt="100kvar" title="100kvar" /></a>
<a href='http://blog.edument.se/2010/12/06/community-connection-ii-net-best-practices-26nov/attachment/130/' title='130'><img data-attachment-id='534' data-orig-size='648,388' data-liked='0'width="150" height="89" src="http://edument.files.wordpress.com/2010/12/130.jpg?w=150&#038;h=89" class="attachment-thumbnail" alt="130" title="130" /></a>
<a href='http://blog.edument.se/2010/12/06/community-connection-ii-net-best-practices-26nov/130d/' title='130d'><img data-attachment-id='535' data-orig-size='648,388' data-liked='0'width="150" height="89" src="http://edument.files.wordpress.com/2010/12/130d.jpg?w=150&#038;h=89" class="attachment-thumbnail" alt="130d" title="130d" /></a>
<a href='http://blog.edument.se/2010/12/06/community-connection-ii-net-best-practices-26nov/bloggenss/' title='bloggenss'><img data-attachment-id='536' data-orig-size='648,388' data-liked='0'width="150" height="89" src="http://edument.files.wordpress.com/2010/12/bloggenss.jpg?w=150&#038;h=89" class="attachment-thumbnail" alt="bloggenss" title="bloggenss" /></a>
<a href='http://blog.edument.se/2010/12/06/community-connection-ii-net-best-practices-26nov/hadi/' title='hadi'><img data-attachment-id='537' data-orig-size='720,540' data-liked='0'width="150" height="112" src="http://edument.files.wordpress.com/2010/12/hadi.jpg?w=150&#038;h=112" class="attachment-thumbnail" alt="hadi" title="hadi" /></a>
<a href='http://blog.edument.se/2010/12/06/community-connection-ii-net-best-practices-26nov/bloggen/' title='bloggen'><img data-attachment-id='538' data-orig-size='648,388' data-liked='0'width="150" height="89" src="http://edument.files.wordpress.com/2010/12/bloggen.jpg?w=150&#038;h=89" class="attachment-thumbnail" alt="bloggen" title="bloggen" /></a>
</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/edument.wordpress.com/532/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/edument.wordpress.com/532/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/edument.wordpress.com/532/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/edument.wordpress.com/532/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/edument.wordpress.com/532/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/edument.wordpress.com/532/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/edument.wordpress.com/532/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/edument.wordpress.com/532/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/edument.wordpress.com/532/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/edument.wordpress.com/532/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/edument.wordpress.com/532/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/edument.wordpress.com/532/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/edument.wordpress.com/532/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/edument.wordpress.com/532/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.edument.se&amp;blog=13504730&amp;post=532&amp;subd=edument&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.edument.se/2010/12/06/community-connection-ii-net-best-practices-26nov/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d5672f6ed14358105634e92de300dfc7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">edument</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2010/12/100kvar.jpg?w=150" medium="image">
			<media:title type="html">100kvar</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2010/12/130.jpg?w=150" medium="image">
			<media:title type="html">130</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2010/12/130d.jpg?w=150" medium="image">
			<media:title type="html">130d</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2010/12/bloggenss.jpg?w=150" medium="image">
			<media:title type="html">bloggenss</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2010/12/hadi.jpg?w=150" medium="image">
			<media:title type="html">hadi</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2010/12/bloggen.jpg?w=150" medium="image">
			<media:title type="html">bloggen</media:title>
		</media:content>
	</item>
		<item>
		<title>Edument .Net SQL seminarium</title>
		<link>http://blog.edument.se/2010/09/24/edument-net-sql-seminarium/</link>
		<comments>http://blog.edument.se/2010/09/24/edument-net-sql-seminarium/#comments</comments>
		<pubDate>Fri, 24 Sep 2010 06:27:44 +0000</pubDate>
		<dc:creator>khnl</dc:creator>
				<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://blog.edument.se/?p=503</guid>
		<description><![CDATA[Förra fredagen, 10 september 2010, anordnade Edument tillsammans med Informator och PASS, ett gratis endagsevenemang om data och dataåtkomst med MS SQL Server och på dotnet-plattformen. Omkring hundra deltagare anslöt, och det erbjöds föredrag inom ett tämligen brett fält av ämnen. Eduments eget föredrag handlade om infallsvinklar till dataåtkomst på dotnet. Vi frågade om det [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.edument.se&amp;blog=13504730&amp;post=503&amp;subd=edument&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><!-- p { margin-bottom: 0.21cm; }a:link {  } -->Förra fredagen, 10 september 2010, anordnade Edument tillsammans med Informator och PASS, ett gratis endagsevenemang om data och dataåtkomst med MS SQL Server och på dotnet-plattformen. Omkring hundra deltagare anslöt, och det erbjöds föredrag inom ett tämligen brett fält av ämnen.</p>
<p><a href="http://edument.files.wordpress.com/2010/09/edument-sem-100910-x4.jpg"><img class="alignright size-medium wp-image-516" title="edument-sem-100910-x" src="http://edument.files.wordpress.com/2010/09/edument-sem-100910-x4.jpg?w=300&#038;h=225" alt="" width="300" height="225" /></a></p>
<p>Eduments eget föredrag handlade om infallsvinklar till dataåtkomst på dotnet. Vi frågade om det fanns &#8220;för många sätt att göra det&#8221; för närvarande, och vi drog slutsatsen att idag på dotnet-plattformen har vi många verktyg för många olika uppgifter, snarare än många verktyg som alla passar för samma problemområde. Vi fokuserade på vikten av språket (i lingvistisk mening, inte som programmeringsspråk) när man överväger dataåtkomst-arkitektur.</p>
<p>Bilderna från våra föredrag finns tillgängliga här, om ni är intresserade att se dem.</p>
<p><a href="http://www.edument.se/downloads/Slides/10Sept/Keynote - SQL Server 2008 R2 Overview3.23.pdf">Keynote: Microsoft  introducerar SQL Server 2008 R2</a> <a href="http://www.edument.se/downloads/Slides/10Sept/Common%20mistakes.pptx"><br />
Vanligaste misstagen som  utvecklare gör i SQL Server</a> <a href="http://www.edument.se/downloads/Slides/10Sept/2010-edument-dotnetdata.pdf"><br />
.Net Data Access: Too many ways to do it?</a><br />
<a href="http://www.edument.se/downloads/Slides/10Sept/CLRDemystified.zip">SQL CLR</a> <a href="http://www.edument.se/downloads/Slides/10Sept/Execution Plan basics.pptx"><br />
Execution Plan Basics</a> <a href="http://www.edument.se/downloads/Slides/10Sept/IntroduktionTillBIForUtvecklare.pdf"><br />
Introduktion till BI för utvecklare</a> <a href="http://www.edument.se/downloads/Slides/10Sept/PowerPivot Community Connection 2010.pptx"><br />
PowerPivot</a></p>
<p>Vi vill tacka alla som hjälpte till att göra ett lyckat evenemang: organisatörerna, föredragshållarna, våra sponsorer</p>
<p><a href="http://www.jetbrains.com/">JetBrains</a><br />
<a href="http://www.finalbuilder.com/">FinalBuilder</a><br />
<a href="http://www.red-gate.com/">Redgate</a><br />
<a href="http://www.typemock.com/">Typemock</a><br />
<a href="http://www.microsoft.se/">Microsoft</a></p>
<p>och sist men inte minst publiken. Vi ses nästa gång!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/edument.wordpress.com/503/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/edument.wordpress.com/503/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/edument.wordpress.com/503/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/edument.wordpress.com/503/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/edument.wordpress.com/503/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/edument.wordpress.com/503/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/edument.wordpress.com/503/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/edument.wordpress.com/503/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/edument.wordpress.com/503/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/edument.wordpress.com/503/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/edument.wordpress.com/503/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/edument.wordpress.com/503/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/edument.wordpress.com/503/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/edument.wordpress.com/503/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.edument.se&amp;blog=13504730&amp;post=503&amp;subd=edument&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.edument.se/2010/09/24/edument-net-sql-seminarium/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/86c7064dfe345dc154119f5c7fdc3526?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">khnl</media:title>
		</media:content>

		<media:content url="http://edument.files.wordpress.com/2010/09/edument-sem-100910-x4.jpg?w=300" medium="image">
			<media:title type="html">edument-sem-100910-x</media:title>
		</media:content>
	</item>
		<item>
		<title>Perl 6-föredrag i Oslo</title>
		<link>http://blog.edument.se/2010/09/21/perl-6-foredrag-i-oslo/</link>
		<comments>http://blog.edument.se/2010/09/21/perl-6-foredrag-i-oslo/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 06:28:58 +0000</pubDate>
		<dc:creator>edument</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.edument.se/?p=496</guid>
		<description><![CDATA[Nyligen blev Jonathan Worthington inbjuden till Oslo, av Norska Unix-användargruppen (Norwegian Unix User Group, NUUG), för att tala om Perl 6-projektet. I föredraget fokuserade han på hur språket är utformat för att vara skalbart från små enradiga engångsprogram, över små verktyg, och vidare upp till att bygga större applikationer. I synnerhet tittade vi på några [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.edument.se&amp;blog=13504730&amp;post=496&amp;subd=edument&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Nyligen blev <a title="Jonathan Worthington" href="http://www.edument.se/konsulter/jonathan-worthington.html">Jonathan Worthington</a> inbjuden till Oslo, av Norska Unix-användargruppen (Norwegian Unix User Group, NUUG), för att tala om Perl 6-projektet.</p>
<p>I föredraget fokuserade han på hur språket är utformat för att vara skalbart från små enradiga engångsprogram, över små verktyg, och vidare upp till att bygga större applikationer. I synnerhet tittade vi på några exempel av specifika språksärdrag som är nyttiga för vart och ett av dessa områden. Det tillhandahåller en bra överblick av något av det mest intressanta nya innehållet i Perl 6.</p>
<p>Lyckligtvis gjorde NUUG en utmärkt videoinspelning av föredraget, som man kan se på:</p>
<p><a href="http://www.nuug.no/aktiviteter/20100914-little-tools-large-apps/">http://www.nuug.no/aktiviteter/20100914-little-tools-large-apps/</a></p>
<p>Tack, NUUG, för inbjudan, till alla som anslöt till föredraget, och för den mycket angenäma middagen och drinkarna efteråt. Oslo är en härlig stad, och det var &#8220;greit&#8221; att hänga med några av dess vänliga hackare också. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/edument.wordpress.com/496/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/edument.wordpress.com/496/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/edument.wordpress.com/496/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/edument.wordpress.com/496/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/edument.wordpress.com/496/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/edument.wordpress.com/496/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/edument.wordpress.com/496/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/edument.wordpress.com/496/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/edument.wordpress.com/496/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/edument.wordpress.com/496/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/edument.wordpress.com/496/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/edument.wordpress.com/496/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/edument.wordpress.com/496/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/edument.wordpress.com/496/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.edument.se&amp;blog=13504730&amp;post=496&amp;subd=edument&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.edument.se/2010/09/21/perl-6-foredrag-i-oslo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d5672f6ed14358105634e92de300dfc7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">edument</media:title>
		</media:content>
	</item>
		<item>
		<title>Community Connection 2010 &#8211; SQL &amp; .NET</title>
		<link>http://blog.edument.se/2010/08/27/community-connection-2010-sql-net/</link>
		<comments>http://blog.edument.se/2010/08/27/community-connection-2010-sql-net/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 08:28:53 +0000</pubDate>
		<dc:creator>edument</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[.net sql-server event]]></category>

		<guid isPermaLink="false">http://blog.edument.se/?p=490</guid>
		<description><![CDATA[Informator, Pass Scania och Edument bjuder in till en kostnadsfri heldag om SQL och .NET i Malmö den 10 september. Missa inte Jonathan Worthington, Peter Larsson, Thomas Ivarsson m fl Agenda 07.30-08.30 Frukost 08.30-08.40 Introduktion av arrangörerna, Informator, Pass, Edument 08.40-09.25 Keynote: Microsoft introducerar SQL Server 2008 R2. 09.40-10.25 Vanligaste misstagen som utvecklare gör i [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.edument.se&amp;blog=13504730&amp;post=490&amp;subd=edument&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a title="Informator" href="http://www.informator.se" target="_blank">Informator</a>, <a title="Pass Scania" href="http://www.pass-scania.se/" target="_blank">Pass Scania</a> och <a title="Edument " href="http://www.edument.se/" target="_blank">Edument </a>bjuder in till en kostnadsfri heldag  om SQL och .NET i Malmö den 10 september. Missa inte Jonathan  Worthington, Peter Larsson, Thomas Ivarsson m fl</p>
<h3>Agenda</h3>
<p>07.30-08.30 Frukost</p>
<p>08.30-08.40 Introduktion av  arrangörerna, Informator, Pass, Edument</p>
<p>08.40-09.25 Keynote: Microsoft  introducerar SQL Server 2008 R2.</p>
<p>09.40-10.25 Vanligaste misstagen som  utvecklare gör i SQL Server<br />
Peter Larsson (MVP), PASS Scania</p>
<p>Vilka är de vanligaste misstagen utvecklare gör i SQL Server i  början? Varför går det inte så snabbt nu längre? Frågorna är många och  det finns lyckligtvis några få enkla svar! Vi kommer att gå igenom de  vanligaste misstagen och hur man åtgärdar problemen för att få bättre  prestanda och säkrare resultat.</p>
<ul>
<li>Översikt</li>
<li>Beräkningar på indexerade kolumner</li>
<li>Tid- och datumberäkningar</li>
<li>Felaktiga datatyper</li>
<li>RBAR (Row-By-Agonizing-Row)</li>
</ul>
<p>10.40-11.25 .Net Data Access: Too many ways to do it?<br />
Jonathan Worthington</p>
<p>Today&#8217;s .Net developers have more choice than ever when it comes to  data access. To simply select some data from a database, one could use  the SqlConnection, SqlCommand and SqlDataReader objects (with an SQL  query or through a stored procedure), Linq, Enity Framework (POCO or  not) &#8211; and that&#8217;s before we even consider non-Microsoft offerings, such  as NHibernate, or the possibility of generating data access layers from  templates and database schemas.</p>
<p>No one of these approaches is right for every application; indeed,  applications may legitimately make use of more than one approach. In  this talk we&#8217;ll look through the strengths and pitfalls of a range of  the options, their performance both in terms of development time and  execution time, and see what tasks they lend themselves to.</p>
<p>11.40-12.40 Lunch &amp; Mingel</p>
<p>12.40-13.25 SQL CLR</p>
<p>Matt Whitfield (MVP), Atlantis Interactive</p>
<p>CLR integration within SQL Server allows developers and  administrators alike to harness the power of the .NET Framework from  directly within their databases. This seminar will cover the basics of  implementing all types of CLR objects, including types, aggregates,  procedures, triggers and functions, as well as showing some examples of  how CLR objects have been put to good use.</p>
<p>SQL CLR Overview</p>
<ul>
<li>* Overview of CLR in SQL Server</li>
<li>* Explore all types of CLR object</li>
<li>* The differences in CLR permission sets</li>
<li>* Worked examples of problem-solving with the CLR</li>
</ul>
<p>13.40-14.25 Execution Plan Basics<br />
Peter Larsson (MVP), PASS Scania</p>
<p>Som utvecklare kan exekveringsplanen i SQL Server vara dötrist, och  långtråkig och&#8230; och alldeles underbar! I denna session visar vi på hur  du kan tyda resultaten i vad som verkar en främmande och krånglig karta  och hur du kan dra slutsatser ur resultaten. Vi visar också hur man  jämför två queries och ser vilken som är mest effektiv.</p>
<p>14.40-15.25 SQL Azure</p>
<p>15.40-16.25 PowerPivot<br />
Thomas Ivarsson (MVP), PASS Scania</p>
<p>PowerPivot is a new client add in for Excel 2010 and a Sharepoint  2010 Server application that can query extremely large datasets, with  millions of rows, with an instant response within a second.</p>
<p>PowerPivot is based on the older Analysis Services archtecture but  with a new column based in memory engine called Vertipaq that surpasses  all previous limits for Excel clients. In this seminar you will get a  general introduction to this new application.</p>
<ul>
<li>* PowerPivot for beginners</li>
<li>* What is PowerPivot and why is it important</li>
<li>* Data sources supported in PowerPivot</li>
<li>* Import data into PowerPivot</li>
<li>* What can you do with the new DAX-expressions language for  PowerPivot calculations?</li>
</ul>
<p><a title="Läs mer om eventet" href="http://www.edument.se/events/2010/Community-Connection-2010-SQL-and-.NET.html">Läs mer om eventet</a> och <a title="Boka nu" href="http://www.informator.se/Boka.aspx?ProductID=1893&amp;ClassID=18375" target="_blank">boka nu!</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/edument.wordpress.com/490/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/edument.wordpress.com/490/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/edument.wordpress.com/490/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/edument.wordpress.com/490/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/edument.wordpress.com/490/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/edument.wordpress.com/490/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/edument.wordpress.com/490/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/edument.wordpress.com/490/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/edument.wordpress.com/490/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/edument.wordpress.com/490/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/edument.wordpress.com/490/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/edument.wordpress.com/490/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/edument.wordpress.com/490/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/edument.wordpress.com/490/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.edument.se&amp;blog=13504730&amp;post=490&amp;subd=edument&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.edument.se/2010/08/27/community-connection-2010-sql-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d5672f6ed14358105634e92de300dfc7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">edument</media:title>
		</media:content>
	</item>
	</channel>
</rss>
