<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Community</title>
        <link>http://ayende.com/Blog/category/457.aspx</link>
        <description>Community</description>
        <language>en-US</language>
        <copyright>Ayende Rahien</copyright>
        <managingEditor>Ayende@ayende.com</managingEditor>
        <generator>Subtext Version 2.0.0.0</generator>
        <item>
            <title>Lessons learned from building NHibernate Profiler &amp;ndash; 24th Feb, London</title>
            <link>http://ayende.com/Blog/archive/2010/02/03/lessons-learned-from-building-nhibernate-profiler-ndash-24th-feb-london.aspx</link>
            <description>&lt;p&gt;Along with the &lt;a href="http://skillsmatter.com/course/open-source-dot-net/core-persistence-with-nhibernate"&gt;NHibernate course&lt;/a&gt; that I’ll be giving in London next month, I’ll be doing a &lt;em&gt;free &lt;/em&gt;session about lessons learned from building the NHibernate Profiler.&lt;/p&gt;  &lt;p&gt;I am going to talk about architecture, internal design (including showing off the code), distributed team, release per commit, making technical decisions based on business concerns, building real world application infrastructure, etc.&lt;/p&gt;  &lt;p&gt;This is a free event, but the number of places is limited, so please &lt;a href="http://skillsmatter.com/podcast/open-source-dot-net/lessons-learned-from-building-the-nhibernate-profiler"&gt;register in advance&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/11302.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2010/02/03/lessons-learned-from-building-nhibernate-profiler-ndash-24th-feb-london.aspx</guid>
            <pubDate>Wed, 03 Feb 2010 10:00:00 GMT</pubDate>
            <wfw:comment>http://ayende.com/Blog/comments/11302.aspx</wfw:comment>
            <comments>http://ayende.com/Blog/archive/2010/02/03/lessons-learned-from-building-nhibernate-profiler-ndash-24th-feb-london.aspx#feedback</comments>
            <slash:comments>10</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/11302.aspx</wfw:commentRss>
        </item>
        <item>
            <title>The paradox of choice: best of breed or cheapest of the bunch</title>
            <link>http://ayende.com/Blog/archive/2010/01/24/the-paradox-of-choice-best-of-breed-or-cheapest-of.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://Osherove.com"&gt;Roy Osherove&lt;/a&gt; has a few tweets about commercial tools vs. free ones in the .NET space. I’ll let his tweets serve as the background story for this post:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Theparadoxofchoicebestofbreedorcheapesto_DE8A/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Theparadoxofchoicebestofbreedorcheapesto_DE8A/image_thumb.png" width="442" height="133" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Theparadoxofchoicebestofbreedorcheapesto_DE8A/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Theparadoxofchoicebestofbreedorcheapesto_DE8A/image_thumb_1.png" width="428" height="130" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p /&gt;  &lt;p&gt;The backdrop is that Roy seems to be frustrated with the lack of adoption of what he considers to be better tools if there are free tools that deal with the same problem even if they are inferior to the commercial tools. The example that he uses is Final Builder vs. NAnt/Rake. &lt;/p&gt;  &lt;p&gt;As someone who is writing both commercial and free tools, I am obviously very interested in both sides of the argument. I am going to accept, for the purpose of the argument, that the commercial tool X does more than the free tool Y who deals with the same problem. Now, let us see what the motivations are for picking either one of those.&lt;/p&gt;  &lt;p&gt;With a free tool, you can (usually) download it and start playing around with it immediately. With commercial products, you need to pay (usually after the trail is over), which means that in most companies, you need to justify yourself to someone, get approval, and generally deal with things that you would rather not do. In other words, the barrier for entry is significantly higher for commercial products. I actually did &lt;a href="http://ayende.com/Blog/archive/2008/08/17/Tools-matter.aspx"&gt;the math a while ago&lt;/a&gt;, and the conclusion was that good commercial products usually pay for themselves in a short amount of time.&lt;/p&gt;  &lt;p&gt;But, when you have a free tool in the same space, the question becomes more complex. Roy seems to think that if the commercial product does more than the free one, you should prefer it. My approach is slightly different. I think that if the commercial product solves a pain point or remove friction that you encounter with the free product, you should get it.&lt;/p&gt;  &lt;p&gt;Let us go back to Final Builder vs. NAnt. Let us say that it is going to take me 2 hours to setup a build using Final Builder and 8 hours to setup the same build using NAnt. It seems obvious that Final Builder is the better choice, right? But if I have to spend 4 hours to &lt;em&gt;justify&lt;/em&gt; buying Final Builder, the numbers are drastically different. And that is a conservative estimate.&lt;/p&gt;  &lt;p&gt;Worse, let us say that I am an open minded guy that have used NAnt in the past. I know that it would take ~8 hours to setup the build using NAnt, and I am &lt;em&gt;pretty sure &lt;/em&gt;that I can find a better tool to do the work. However, doing a proper evaluation of all the build tools out there is going to take three &lt;em&gt;weeks. &lt;/em&gt;Can I really justify that to my client?&lt;/p&gt;  &lt;p&gt;As the author of a commercial product, it is &lt;em&gt;my&lt;/em&gt; duty to make sure that people are aware that I am going to &lt;em&gt;fix their pain points&lt;/em&gt;. If I have a product that is significantly better than a free product, but isn’t significantly better at reducing pain, I am not going to succeed. The target in the product design (and later in the product marketing) is to identify and resolve pain points for the user. &lt;/p&gt;  &lt;p&gt;Another point that I want to bring up is the importance of professional networks to bring information to us. No one can really keep track on all the things that are going on in the industry, and I have come to rely more &amp;amp; more on the opinions of the people in my social network to evaluate and consider alternatives in areas that aren’t offering acute pain. That allows me to be on top of things and learn what is going on at an “executive brief” level. That allows me to concentrate on the things that are acute to me, knowing the other people running into other problems will explore other areas and bring their results to my attention.&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/11292.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2010/01/24/the-paradox-of-choice-best-of-breed-or-cheapest-of.aspx</guid>
            <pubDate>Sun, 24 Jan 2010 10:00:00 GMT</pubDate>
            <wfw:comment>http://ayende.com/Blog/comments/11292.aspx</wfw:comment>
            <comments>http://ayende.com/Blog/archive/2010/01/24/the-paradox-of-choice-best-of-breed-or-cheapest-of.aspx#feedback</comments>
            <slash:comments>30</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/11292.aspx</wfw:commentRss>
        </item>
        <item>
            <title>What should I talk about at QCon London?</title>
            <link>http://ayende.com/Blog/archive/2009/12/02/what-should-i-talk-about-at-qcon-london.aspx</link>
            <description>&lt;p&gt;I might be speaking at QCon London, but I am not sure what &lt;em&gt;about&lt;/em&gt;. &lt;/p&gt;  &lt;p&gt;The requirements are:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;This track intends to showcase some of the practitioners, tools and technologies to provide an awareness of something other than the Microsoft mantra for software development on .NET&lt;/p&gt;    &lt;p&gt;Each talk should show at least one thing that is new or unusual for the masses on .NET to know or use and compare it to the status quo. It should provide some in depth examples or code around that comparison. In the cases where the speaker is the author of an OSS product also give a broader rationale and explanation of the tool and when it is best used.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;My main issue is that there are too many topics to talk about, and I thought that I might put it on the blog and see what people are interested in.&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/11226.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2009/12/02/what-should-i-talk-about-at-qcon-london.aspx</guid>
            <pubDate>Wed, 02 Dec 2009 09:30:00 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2009/12/02/what-should-i-talk-about-at-qcon-london.aspx#feedback</comments>
            <slash:comments>11</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/11226.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Applying YAGNI in Impleo</title>
            <link>http://ayende.com/Blog/archive/2009/11/04/applying-yagni-in-impleo.aspx</link>
            <description>&lt;p&gt;The very first draft of Impleo (my CMS system), was based on sound design principles. It had good separation between the different parts (it actually had 4 or 5 projects). At some point I took a look at the code and couldn’t find it. There was a lot of &lt;em&gt;infrastructure&lt;/em&gt;, but nothing that I could actually point to and say: “This is the application logic”.&lt;/p&gt;  &lt;p&gt;I decided to take a different approach, created a new WebForms project, and started everything from scratch. I ported some of the code from the original solution, but mostly we just built new stuff. I stubbornly decided that I am going to &lt;em&gt;apply&lt;/em&gt; YAGNI here, so I just scrapped everything that I usually do and started a typical web forms project, no IoC, no testing, nothing.&lt;/p&gt;  &lt;p&gt;As expected, initially we had a really nice velocity, and if I had to hold my nose a bit during some parts, I was willing to go with that.&lt;/p&gt;  &lt;p&gt;The next stage with Impleo, however, is to turn it from just a content management system into a website framework. The difference between the two are significant, while a CMS is just about content, a website framework allows you to add custom pages and application behavior. There is an added difficulty in that I want to use Impleo for multiple sites, doing different things. &lt;/p&gt;  &lt;p&gt;That turn it from just a custom application to a platform, and the roles there are quite different. For that, just going with the approach that I used so far would have been disastrous. I tried, and spiked some things, but none of them made me  happy. I decided that I really need to stop, and since I have a working version, I can “refactor” it to a better shape. I put refactor in double quotes intentionally. &lt;/p&gt;  &lt;p&gt;My method included creating a new MVC project, add some integration tests and then porting everything from the WebForms to the MVC project. Overall, it was a pretty simple, if tedious, process. &lt;/p&gt;  &lt;p&gt;The most difficult thing along the way was that I was doing this while I was flying, and for &lt;em&gt;some stupid reason&lt;/em&gt;, I could either charge the laptop battery or use the laptop, so I had to make frequent stops to recharge.&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/11194.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2009/11/04/applying-yagni-in-impleo.aspx</guid>
            <pubDate>Wed, 04 Nov 2009 10:00:00 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2009/11/04/applying-yagni-in-impleo.aspx#feedback</comments>
            <slash:comments>16</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/11194.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Impleo &amp;ndash; a CMS I can tolerate</title>
            <link>http://ayende.com/Blog/archive/2009/10/25/impleo-ndash-a-cms-i-can-tolerate.aspx</link>
            <description>&lt;p&gt;If you head out to &lt;a title="http://hibernatingrhinos.com/" href="http://hibernatingrhinos.com/"&gt;http://hibernatingrhinos.com/&lt;/a&gt;, you will see that I finally had the time to setup the corporate site. This is still &lt;em&gt;very&lt;/em&gt; early, but I have a lot of content to add there, but it is a start.&lt;/p&gt;  &lt;p&gt;Impleo, the CMS running the site, doesn’t have any web based interface, instead, it is built explicitly to take advantage of Windows Live Writer and similar tools. The “interface” for editing the site is the MetaWeblog API. This means that in order to edit the site, there isn’t any Wiki syntax to learn, or XML files to edit, or anything of this sort.&lt;/p&gt;  &lt;p&gt;You have a powerful editor in your fingertips, one that properly handle things like adding images and other content. This turn the whole experience around. I usually find documentation boring, but I am &lt;em&gt;used&lt;/em&gt; to writing in WLW, it is fairly natural to do, and it removes all the pain from the equation. &lt;/p&gt;  &lt;p&gt;One of the things that I am trying to do with it is to setup a proper documentation repository for all my open source projects. This isn’t something new, and it is something that most projects have a hard time doing. I strongly believe in making things &lt;em&gt;simple&lt;/em&gt;, in reducing friction. What I hope to do is to be able to accept documentation contributions from the community for the OSS projects.&lt;/p&gt;  &lt;p&gt;I think that having a full fledged rich text editor in your hands is a game changer, compared to the usual way OSS handle documentation.  Take a look at what is &lt;a href="http://hibernatingrhinos.com/cms/setup"&gt;needed to make this works&lt;/a&gt;, it should take three minutes to get started, no learning curve, no “how do they do this”. &lt;/p&gt;  &lt;p&gt;So here is the deal, if you would like to contribute documentation (which can be &lt;em&gt;anything&lt;/em&gt; that would help users with the projects), I just made things much easier for you. Please contact me directly and I’ll send you the credentials to be able to edit the site.&lt;/p&gt;  &lt;p&gt;Thanks in advance for your support.&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/11191.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2009/10/25/impleo-ndash-a-cms-i-can-tolerate.aspx</guid>
            <pubDate>Sun, 25 Oct 2009 03:50:00 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2009/10/25/impleo-ndash-a-cms-i-can-tolerate.aspx#feedback</comments>
            <slash:comments>15</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/11191.aspx</wfw:commentRss>
        </item>
        <item>
            <title>JAOO: OR/M += 2</title>
            <link>http://ayende.com/Blog/archive/2009/10/07/jaoo-orm-2.aspx</link>
            <description>&lt;p&gt;Just finished doing this presentation, I think it went very well, although I planned to do a 45 minutes session + 15 questions but I ended up hitting the session time limit without covering everything that I wanted.&lt;/p&gt;  &lt;p&gt;You can get the source code that I have shown in the presentation here: &lt;a title="http://github.com/ayende/Advanced.NHibernate" href="http://github.com/ayende/Advanced.NHibernate"&gt;http://github.com/ayende/Advanced.NHibernate&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can find the PDF of the presentation here: &lt;a title="http://ayende.com/presentations.aspx" href="http://ayende.com/presentations.aspx"&gt;http://ayende.com/presentations.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/11164.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2009/10/07/jaoo-orm-2.aspx</guid>
            <pubDate>Wed, 07 Oct 2009 11:10:50 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2009/10/07/jaoo-orm-2.aspx#feedback</comments>
            <slash:comments>9</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/11164.aspx</wfw:commentRss>
        </item>
        <item>
            <title>JAOO: Evolving the Key/Value Programming Model to a Higher Level</title>
            <link>http://ayende.com/Blog/archive/2009/10/05/jaoo-evolving-the-keyvalue-programming-model-to-a-higher-level.aspx</link>
            <description>&lt;p&gt;Billy Newport is talking about Redis, showing some of the special APIs that Redis offers.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Redis gives us first class List/Set operation, simplify many tasks involving collections. It is easy to get into big problems afterward. &lt;/li&gt;    &lt;li&gt;Can do 100,000 operations per second. &lt;/li&gt;    &lt;li&gt;Redis encourage a column oriented view, you use things like: &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote /&gt;  &lt;blockquote&gt;   &lt;div&gt;     &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;R.set(&lt;span style="color: #006080"&gt;"user:123@firstname"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"billy"&lt;/span&gt;)
R.set(&lt;span style="color: #006080"&gt;"user:123@surname"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"newport"&lt;/span&gt;)
R.set(&lt;span style="color: #006080"&gt;"uid:bewport"&lt;/span&gt;, 123)&lt;/pre&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Ayende’s comment: &lt;/strong&gt;I &lt;em&gt;really&lt;/em&gt; don’t like that. No transactions or consistency, and this requires &lt;em&gt;lots&lt;/em&gt; of remote calls.  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Bugs in your code can corrupt the entire data store. Causing severe issues in development. &lt;/li&gt;

  &lt;li&gt;There is a sample Twitter like implementation, and the code is pretty interesting, it is a work-on-write implementation. &lt;/li&gt;

  &lt;li&gt;List/set operations are problems. What happen when you have a big set? Case in point, Ashton has 4 million followers, work-on-write doesn’t work in this case. &lt;/li&gt;

  &lt;li&gt;100,000 operations per second doesn’t mean much when a routine scenario result in millions of operations. &lt;/li&gt;

  &lt;li&gt;This is basically the usual SELECT N+1 issue. &lt;/li&gt;

  &lt;li&gt;Async approach is required, processing large operations in chunks. &lt;/li&gt;

  &lt;li&gt;Changing the way we work, instead of getting the data and working on it, send the code to the data store and execute it there (execute near the data). 
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Ayende’s note:&lt;/strong&gt; That is still dangerous, what happen if you send a piece of code  to the data store and it hungs? &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;Usual problems with column oriented issues, no reports, need export tools. &lt;/li&gt;

  &lt;li&gt;Maybe use closures as a way to send the code to the server? &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ayende’s thoughts:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I need to think about this a bit more, I have some ideas based on this presentation that I would really like to explore more.&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/11159.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2009/10/05/jaoo-evolving-the-keyvalue-programming-model-to-a-higher-level.aspx</guid>
            <pubDate>Mon, 05 Oct 2009 10:49:06 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2009/10/05/jaoo-evolving-the-keyvalue-programming-model-to-a-higher-level.aspx#feedback</comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/11159.aspx</wfw:commentRss>
        </item>
        <item>
            <title>JAOO: Working Effectively with Legacy Code 2 &amp;ndash; Michael Feathers</title>
            <link>http://ayende.com/Blog/archive/2009/10/05/jaoo-working-effectively-with-legacy-code-2-ndash-michael-feathers.aspx</link>
            <description>&lt;p&gt;I have a tremendous amount of respect to Michael Feathers, so it is a no brainer to see his presentation. &lt;/p&gt;  &lt;p&gt;Michael is talking about why Global Variables are &lt;em&gt;not&lt;/em&gt; evil. We already have global state in the application, removing it is bad/impossible. Avoiding global variables leads to very deep argument passing chains, where something needs an object and it passed through dozens of objects that just pass it down. We already have the notions on how to test systems using globals (Singletons). He also talks about Repository Hubs &amp;amp; Factory Hubs – which provide the scope for the usage of a global variable.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Refactor toward explicit seams, do not rely on accidental seams, make them explicit. &lt;/li&gt;    &lt;li&gt;Test Setup == Coupling, excessive setup == excessive coupling. &lt;/li&gt;    &lt;li&gt;Slow tests indicate insufficient granularity of coupling &amp;lt;- I am not sure that I agree with, see my previous posts about testing for why. &lt;/li&gt;    &lt;li&gt;It is often easier to mock outward interfaces than inward interfaces (try to avoid mocking stuff that return data) &lt;/li&gt;    &lt;li&gt;One of the hardest things in legacy code is making a change and not knowing what it is affecting. Functional programming makes it easier, because of immutability. &lt;/li&gt;    &lt;li&gt;Seams in a functional languages are harder. You parameterize functions in order to get those seams. &lt;/li&gt;    &lt;li&gt;TUF – Test Unfriendly Feature – IO, database, long computation &lt;/li&gt;    &lt;li&gt;TUC – Test Unfriendly Construct – static method, ctor, singleton &lt;/li&gt;    &lt;li&gt;Never Hide a TUF within a TUC &lt;/li&gt;    &lt;li&gt;No Lie principal – Code should never lie to you. Ways that code can lie:      &lt;ul&gt;       &lt;li&gt;Dynamically replacing code in the source &lt;/li&gt;        &lt;li&gt;Addition isn’t a problem &lt;/li&gt;        &lt;li&gt;System behavior should be “what I see in the code + something else”, never “what I see minus something else” &lt;/li&gt;        &lt;li&gt;Weaving &amp;amp; aspects &lt;/li&gt;        &lt;li&gt;Impact on inheritance &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;The Fallacy of Restricted Languages &lt;/li&gt;    &lt;li&gt;You want to rewrite if the architecture itself is bad, if you have issues in making changes rapidly, it is time for refactor the rough edges out. &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://ayende.com/Blog/aggbug/11158.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2009/10/05/jaoo-working-effectively-with-legacy-code-2-ndash-michael-feathers.aspx</guid>
            <pubDate>Mon, 05 Oct 2009 09:39:30 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2009/10/05/jaoo-working-effectively-with-legacy-code-2-ndash-michael-feathers.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/11158.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Do you sign the default contract?</title>
            <link>http://ayende.com/Blog/archive/2009/10/03/do-you-sign-the-default-contract.aspx</link>
            <description>&lt;p&gt;This is just something that came up recently in a mailing list, we were talking about copyright, ownership and such. The topic of who owns the code you write on your own time (and on your own machines) came up.&lt;/p&gt;  &lt;p&gt;The opinion of some people was that the employer may own the code even under those circumstances. It seems that it isn’t usually part of the law (that depend on where you are at, of course), but it is part of standard employment contract templates. &lt;/p&gt;  &lt;p&gt;When I started looking for a job, I insisted on taking the employment contract home and going over it with:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;a calm mind&lt;/li&gt;    &lt;li&gt;having another set of eyes go over it&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I had one case of not properly reading what I was signing on with bad consequences, I learned since then.&lt;/p&gt;  &lt;p&gt;There is no such thing as a standard contract, you can &lt;em&gt;always&lt;/em&gt; negotiate. &lt;/p&gt;  &lt;p&gt;For that matter, I rejected an offer from one place after verbal agreements that we reached didn’t get into the contract (twice!). I decided that if they were trying to effectively cheat me when I wasn’t even working for them, I had better things to do than to put my head into this sickbed.&lt;/p&gt;  &lt;p&gt;Some of the things that I found in employment contracts are of the sort that would make your head curl. Non compete agreements that basically say that you are not allowed to do &lt;em&gt;any&lt;/em&gt; work (for anyone) for 2 years after you stop working for the company. Ownership on anything you do (be in software artifacts, a book about flowers and quite possibly any children you have during your employment terms).&lt;/p&gt;  &lt;p&gt;Some of them are unenforceable at court, but you would be at a much better position if you didn’t have to deal with annoying section in a contract that you are signed on in the first place.&lt;/p&gt;  &lt;p&gt;My usual approach to reading contracts is to debug them, assuming that the other side is nefarious, evil, double dealing and likes kicking puppies before breakfast. Most places will go with the “Try and you shall succeed” method for contracts. If you signed on to them without complaints, they are good. If you object to something, they can amend the contract to be more reasonable. It isn’t that they &lt;em&gt;are&lt;/em&gt; nefarious, or that they even plan to act according to the contract. But it is best if they don’t have any leverage on you.&lt;/p&gt;  &lt;p&gt;An interesting point that I run into is that it is often useful to be bold when negotiating a contract. I deleted the non compete clause for my employment contract when I viewed it, and required a &lt;em&gt;lot&lt;/em&gt; of clarifications about what of my work amounts to company’s property. I followed the same logic as they did, “Try and you shall succeed”, if they didn’t care about that, I was good. &lt;/p&gt;  &lt;p&gt;We ended up with a 1 year limitation for clients that they sent me to, and agreeing that any software work that I am making on the company’s time or using their equipment belong to the company, which I considered reasonable. &lt;/p&gt;  &lt;p&gt;Not reading the contract is a crime, once you did, be very careful in deciding what is acceptable and what isn’t. And if you are already signed on a contract, make sure that you &lt;em&gt;know&lt;/em&gt; what is in it.&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/11131.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2009/10/03/do-you-sign-the-default-contract.aspx</guid>
            <pubDate>Fri, 02 Oct 2009 22:32:00 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2009/10/03/do-you-sign-the-default-contract.aspx#feedback</comments>
            <slash:comments>19</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/11131.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Progressive.NET event in Stockholm</title>
            <link>http://ayende.com/Blog/archive/2009/08/26/progressive.net-event-in-stockholm.aspx</link>
            <description>&lt;p&gt;I think that it is better to forget to blog about an event than to forget to show up for the event, so I &lt;em&gt;am&lt;/em&gt; improving.&lt;/p&gt;  &lt;p&gt;I am currently in Stockholm, Sweden, for the Progressive.NET event that starts tomorrow. I am going to do an Intro to NHibernate and two runs of my Advanced NHibernate workshop.&lt;/p&gt;  &lt;p&gt;Should be fun :-)&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/11071.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2009/08/26/progressive.net-event-in-stockholm.aspx</guid>
            <pubDate>Wed, 26 Aug 2009 11:36:51 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2009/08/26/progressive.net-event-in-stockholm.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/11071.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>