tag:blogger.com,1999:blog-250299072010-03-08T13:32:48.016-05:00Software FrontierNight thoughts on agile software development, management, and lifeDmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.comBlogger67125tag:blogger.com,1999:blog-25029907.post-48286111646965345572008-05-03T02:52:00.002-04:002008-05-03T03:25:29.242-04:00Next Software Frontier: VirtualizationNow that you know that next software frontier crosses <a href="http://www.softwarefrontier.com/2008/01/next-software-frontier-usability.html">Usability</a> and <a href="http://www.softwarefrontier.com/2008/01/next-software-frontier-software-testing.html">Software Testing</a>, what is next? Definetly virtulization. <br /><br />Not so visible to general users, unless you are on Mac running your Windows in a virtual machine. For Mac users VMWare Fusion or Parallels is must have. But virtualization is making a revolution in IT "under the hood". A BlackBerry user? You are backed by virtualization!<br /><br />The changes virtualization is bringing to the software are exciting. Not only does it redefine the ways we think and use computers, it redefines what computers are. In the virtual world, when you need an extra hard drive, you don't run to Best Buy: with a few clicks a new HD is at your disposal. No need to ghost a machine: take a snapshot and revert to it any time. Record the execution and play it back bit by bit. Run the machine and throw away all the changes after the session is done. Playing with new software in a sandbox of VM - isn't it cool? I hate iTune for installing bunch of crap on my PC - I isolate it in a Virtual Machine, turn on demand. Well if you are with virtualization, you got it, if not - go catch up right away. <br /><br />I predict that like any big invention, after aging a bit in enterprise it will come directly to consumers. And for developers: many assumptions turn false in virtual world. What was expensive is now cheap. What was impossible is now possible. This opens a Pandora box of surprises and opportunities. Get ready.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-4828611164696534557?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com0tag:blogger.com,1999:blog-25029907.post-29437843231673269992008-01-29T18:41:00.000-05:002008-01-29T18:50:10.169-05:00Next Software Frontier: Software TestingI <a href="http://www.softwarefrontier.com/2008/01/next-software-frontier-usability.html">blogged </a>about what are the three big things <span style="font-weight:bold;font-style:italic">to me</span> that are the next Software Frontier. They are Usability, Software Testing, and Virtualization. I touched <span style="font-weight:bold;"><a href="http://www.softwarefrontier.com/2008/01/next-software-frontier-usability.html">Usability</a></span>, let's move on to <span style="font-weight:bold;">Software Testing:</span><br /><br />The higher bar on usability and quality is one part of QA challenge. The other part is testing productivity, which is falling far behind the development productivity. Over a decade, development tools improved significantly, allowing programmers to crank out massive software. The complexity grows exponentially, and so does the demand for testing. But the testing productivity today only grows linearly by throw more bodies, or brains, if you’re lucky to find them. Demand is high, but supply of skilled and motivated testers are short.<br /><br />The industry is still looking for answers. Time is one: wait till generation of monkey testers will pass away and a new generation of trained passionate and well-paid test engineers will come to replace them. Those who don’t have patience are looking at improving the quality in the Dev part of the house. Speaking strongly: if developers make more crap then the testers can handle, why don’t they just stop shitting and clean up? Do some [unit]testing? Go for code coverage? Take up test automation? Yeah, more quality in, more quality out. But here we often face resistance. Some old programmers habits have to die may be only with their owners.<br /><br />The last one, Virtualization, is not that obvious. Stay tuned, I will come to it in the next post.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-2943784323167326999?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com2tag:blogger.com,1999:blog-25029907.post-22621057899543748762008-01-28T17:10:00.000-05:002008-01-29T18:51:42.581-05:00Next Software Frontier: Usability, Software Testing, and VirtualizationWhat is the next big thing? The New Year is a good time to re-ask this question. In my mind, the Software Frontier 2008 is crossing the points of <a href="http://www.softwarefrontier.com/2008/01/next-software-frontier-usability.html">Usability</a>, <a href="http://www.softwarefrontier.com/2008/01/next-software-frontier-software-testing.html">Software Testing</a>, and Virtualization.<br /><br />Why so? Today I cover <span style="font-weight: bold;"><a href="http://www.softwarefrontier.com/2008/01/next-software-frontier-usability.html">Usability</a></span>.<br />The driving factor #1: computers are fully adopted by the late majority of general public. Your mom and grand mom have computers now. Unlike the early kids, they don’t play Lego games with hardware, OS and software. They expect it to just work. How naïve! Designers haven’t yet figured doors, water faucets and light switches <a href="http://www.blogger.com/post-create.g?blogID=25029907#1">[1]</a>. Now we are trying to build frustration-free software. Here comes a driving factor #2: against the odds, some companies have figured how to do it. They’ve built the software that “just works”. They made it emotionally appealing. Your mom and grand mom love it. The critical mass of good software raises the bar of expected quality and usability <a href="#2">[2]</a>.<br /><br />If your software is not there yet, you better catch up. Say you are Micro$oft, and your Vista release didn’t hit the mark: dude this year it will cost you substantial business. You are enterprise application with Motif-like interface from 80s, and customers had been still buying for the business value. Not for long!<br /><br />So, focus on usability, adapt the techniques and learn to build software that “just works”, and sexy to fall in love with it.<br /><br />I will follow up with <a href="http://www.softwarefrontier.com/2008/01/next-software-frontier-software-testing.html">Software Testing</a> and Virtualization with the next posts.<br /><br /><a name="1">1)</a>Donald’s Norman “<a href="http://www.softwarefrontier.com/2007/05/design-of-everyday-things-victim-of.html">Design of Everyday Things</a>”, a deep and fascinating reading on the design for usability, entertains a reader with hilarious examples of poor design of doors, water fascets, light switches and more.<br /><br /><a name="2">2)</a> The bar on visual design and usability rased even in the enterprise market, which used to be less sensitive to it. Well, users are all the same people who carry their opinions from home to work and back.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-2262105789954374876?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com0tag:blogger.com,1999:blog-25029907.post-38249770740529326472008-01-05T10:05:00.000-05:002008-01-05T10:21:41.037-05:00Santa brought me a pleasant surprise. I got a book in my mail, witch I neither bought nor ordered. It was <a href="http://www.amazon.com/Software-Teamwork-Taking-Ownership-Success/dp/0321488903/ref=sr_1_1?ie=UTF8&s=books&qid=1199545128&sr=8-1">"Software Teamwork" by Jim Brosseau</a>. I had a privilege to review "Software Teamwork" as a member of Addison-Wesley reviewer's panel. I am greatly enjoying the final version.<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.amazon.com/Software-Teamwork-Taking-Ownership-Success/dp/0321488903/ref=sr_1_1?ie=UTF8&s=books&qid=1199545128&sr=8-1"><img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://www.softwarefrontier.com/uploaded_images/SoftwareTeamwork.jpg" border="0" alt="" /></a><br /><br />The book gives a pool of experience from a software development manager veteran. Jim steps out of the modern agile hype publications by talking about cross-cutting concerns of software development. It is practical, it is real, at times arguable, and always well structured. On my book shelf I place it next to “Dynamics of Software Development” by Jim McCarthy, “Peopleware” by DeMarco and Lister, Scott Berkun’s “The Art Of Project Management”, and books of Steve McConnell's.<br /><br />Reviewing a book turned out a great experience, too. It is much more work when I expected, but the joy of looking ahead of the public at exploring the newest ideas pays off for the effort. Hopefully my tiny contribution was helpful.<br /><br /><br />My warmest congratulations to Jim with the release of his book.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-3824977074052932647?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com0tag:blogger.com,1999:blog-25029907.post-12907759880321594022007-12-19T17:00:00.000-05:002007-12-19T17:06:28.046-05:00XP Toronto - Last Meeting of 2007<a href="http://www.xptoronto.com/index.jsp">XP toronto</a> meeting last night was a nice cozy session with lighting talks on “Limitation of agile”. <a href="http://www.agileadvice.com/">Mishkin Bertreig</a> was talking about Agile limitations with some team dynamics. He was saying that agile is not good for individual heroes. I agree, with caution. It drives me nuts to see some religious agilists writing off not only cowboy developers but also technically competent performing professionals who are passionate about software but just aren’t much interested in talking about processes. And watch for your backbone pragmatic performing workhorse outshadowed by those long-winded agile talkers! <br /><br /><a href="http://www.valuablecode.com/">Alistair McKinnell</a> presented the image of desert and made home a simple yet powerful point: agile represents a sweet spot where the software development flourishes the best. As it moves away from the sweet spot, it gets harder. But it doesn’t stop working, thought. <br /><br />This point was lively illustrated by Michelle D'Souza, who shared challenges of applying agile to a dispersed open-source project.<br /><br />Andrey Shulinski brought up his pain points of introducing agile to a legacy product development. There are technical pains and organizational pains. Michael Fether’s “<a href="http://www.amazon.com/Working-Effectively-Legacy-Robert-Martin/dp/0131177052">Working Effectively with Legacy Code</a>” covers well the technical challenges. Not much is written on organizational ones. But over past years I learned more then I care to admit on how to manage legacy project development. It is probably worth a book of materials & knowledge. Is there a demand out there? Should I start writing?<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-1290775988032159402?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com0tag:blogger.com,1999:blog-25029907.post-37644487393962316942007-09-19T11:37:00.000-04:002007-09-19T12:04:26.677-04:00Using log4net with NUnitIf you are like myself, you want to watch the <a href="http://logging.apache.org/log4net/">log4net </a>debug output while running my <a href="http://nunit.org/">NUnit</a>tests. How to do it? <br /><br />One interesting approach is <a href="http://www.empowertec.de/blog/2007/04/16/efficiently-testing-with-nunit-and-log4net/">described here</a>. <br /><br />A lighter alternative to consider, that also works nicely with NUnit GUI: make your test assembly to configure and load log4net.<br /><br />1) Create an Application Configuration file for the test class library. <br />2) <a href="http://www.dotnetspace.com/articles/general-articles/using-log4net---very-quick-start.html">Add there log4net section</a>, configure the logger<br />3) Add log4net configuration attribute to your AssemblyInfo.cs:<br /><pre><br />// Load log4net logger<br />[assembly: log4net.Config.XmlConfigurator(<br /> ConfigFile="MyTests.config")]<br /></pre><br />Note that I renamed the auto-generated App.config to "MyTests.conf", and set it up to copy to output directory "If newer". It is a matter of the taste: you could leave App.config, and refer to it as ConfigFile="<i>MyTestAssemblyFullName</i>.dll.config"<br /><br />PS. Is it time to move on to <a href="http://www.mbunit.com/">MBUnit</a>?<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-3764448739396231694?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com3tag:blogger.com,1999:blog-25029907.post-15753920174247381812007-09-09T12:44:00.000-04:002007-09-09T13:08:39.089-04:0015 Minutes to Move Your Project AheadWhen working on a personal project, it is the must to effectively use small chunks of time. If you got 15 minutes, and you can use them to move the project a notch ahead, it is super and feels good. If you can not, your project is doomed. You don’t have a luxury of warming up for an hour to get into the “zone”. You don’t have the luxury of keeping your mind on the project for a few days in a raw, if you have a serious day job. All you have is 15 minutes a day, so what are you gonna do? Then giving up is not an option, get smart about spending those 15 that God gave us.<br /><br />There are two keys to it. First is well crafted code. It’d better be, or the 15 minutes wasted while you struggle to remember where the things were. Invest in structure, clarity, naming and unit testing. I will say no more on this: you all know the value of well crafted code, and how to do it. We don’t always do it by the number of factors. But for the pet project you don’t have an option to slack on quality (1).<br /><br />The second key is effective project management. Not a heavy duty project management to kick your own ass on your fun project. But a new type of applied 15 minutes project management.<br /><br />Think of a “project binder”. It comprises the scratch pad, the back log, and the support materials. They work together:<br /><br />When I sit down for 15 minutes, I open a back log and look what’s there. My mood is different as so is my energy level. I pick an item that matches my mood and energy. Code a basic design for a walking skeleton while the mind is fresh at 6.am Monday morning. Do quick research on the web while having lunch. Crank down some routine UI code on Thursday night after a hard day at work. Get some fun part for a rainy Saturday morning (2).<br /><br />While I am working my 15 minutes, ideas come. Code changes, fixes, extra tests, blogs to write, design thought to incubate, reading to catch up, researches to make… It’s a lot of ideas, some good, some not so good. But 15 minutes are just too short to meaningfully sidetrack. I just jolt the ideas to the scratch notes, and keep on moving on.<br /><br />When I am done, I take 16th minute to reflect on what I have done. I also write a “log line” for the session: Date, how long, and what is done. I mark it in the backlog. The scratch notes go to the “scratch notes” section; I shut the binder close and go get some life.<br /><br />Once in a while, in the right mood, I spend whole 15 minutes on processing the binder. <a href="http://www.davidco.com/what_is_gtd.php">“Getting Things Done”</a> unleashed. Start with scratch notes. Pick one: What is it? Do I need it? Any actions required? Will I do it? Decide (3). Each note makes the way to the backlog, or waist basket. Or I keep it for my references. Then it goes to the “support materials”. Then review the backlog items. Listen to your mind. Does something change? Is this item still makes sense? Any ideas triggered? Check off what is done, purge what is no longer needed, adjust old ones and and create new if they come up. Finally, go over the support materials. Same here listen to your mind, get ideas, and purge what is not longer needed.<br /><br />The implementation of the “Project binder” can be hi-tech or low tech. For instance, the combination of Track and Google gives a hi-tech: Work off the Track backlog, jolt you scratch notes in “Notepad”, and append your support materials to Wiki. The flow is the same: update the backlog and parse the notes once in a while. I am working off a paper based one. It is a physical binder with three sections. In the “scratch section” there is a bunch of sticky notes, index cards, paper tear-offs, and napkins. The backlog is post-it notes stacked on several paper sheets. The support materials section keeps selected notes, design scratches, mind maps and print-outs. It looks something like this:<br /><br /><div style="text-align: center;"><img src="http://www.softwarefrontier.com/uploaded_images/scratchNotes.jpg" /><br /></div><div style="text-align: center;">Scratch Notes<br /></div><p><br /></p><div style="text-align: center;"><img src="http://www.softwarefrontier.com/uploaded_images/backlogPage.jpg" /><br /></div><div style="text-align: center;">Backlog Page<br /></div><p><br /></p><div style="text-align: center;"><img src="http://www.softwarefrontier.com/uploaded_images/support.jpg" /><br />Support Materials<br /></div><p><br />After glancing at my messy project binder you might think it doesn’t look like a lot of organization. That is exactly right. It’s not too much, just enough to make 15 minutes worth what they are, and move the project ahead one notch at the time.<br /><br />(1) Talking well crafted code: pet project is supposed to be fun, aren’t they? How much fun is working with crappy code?<br /><br />(2) If you open the back log and nothing there, it is either of the two: a) you are done or b) you got to do planning, and this is your task for 15 minutes.<br /><br />(3) Get a habit of putting the date on any funky scrawls you scribble. Date you damn napkins! Later then you stare at them, the date helps you recall what were you smoking when writing it.<br /></p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-1575392017424738181?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com1tag:blogger.com,1999:blog-25029907.post-91397073282075304612007-07-31T18:51:00.000-04:002007-09-09T13:15:09.648-04:00New Toy: Windows PowerShellFinally, I got my hands on Windows PowerShell. I knew about it before, but was putting it off.... I shouldn't have! There are too many cool things about it, here are two: 1) It is very, very, very, very logical, structured, object oriented. 2) It is integrated with .NET beyond imagination. Full direct access to .NET classes and more. See the screen below where I fetched Nordwind data from MS SQL Server! Check <a href="http://www.pluralsight.com/blogs/dan/archive/2006/10/29/41389.aspx">this article</a> to see how to use ADO.NET to work with a database. 3) It is truly extensible. The fun of writing CmdLets is all ahead of me now:-)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.softwarefrontier.com/images/PowerShell.png"><img style="margin: 0pt 0pt 10px 10px; cursor: pointer;" src="http://www.softwarefrontier.com/images/PowerShell.png" alt="" border="0" /></a><br /><p></p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-9139707328207530461?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com0tag:blogger.com,1999:blog-25029907.post-23001955858493341892007-07-29T16:02:00.000-04:002007-07-29T17:04:24.869-04:00Virtual Subversion Appliance, and Ingore Filter for C#My working with Virtual Subversion appliance has been a breeze. I had problem with network: every time I carried my laptop between two wired and two wireless networks, it used to loss svn server. It was elegantly resolution is to switch VM network adapter settings from Bridged to Host. Now I love it: Fire VMWare Workstation (5 sec), Resume VM (1 sec) yeah, does wake up quickly! Commit changes - I am getting to like Tortoise! Suspend VM, exit VMWare. Done, and the whole svn is gone as if was never present on my computer. In fact it wasn't :-)<br /><br />To the second point. Working with C# project, I got to filter out the noise when committing changes. Here is my C# ignore list:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.softwarefrontier.com/uploaded_images/subversion_ignores.png"><img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://www.softwarefrontier.com/uploaded_images/subversion_ignores_small.png" border="0" alt="" /></a><br />bin<br />obj<br />*.bin <br />*.dll <br />*.exe <br />*.pdb <br />*.resources <br />*.suo <br />*.cache <br />*.Cache <br />*.force<br /><br /><span style="font-weight:bold;">Tip: </span>Files work fine if separated by a blankspace. However directories should be delimited with new lines. If you use <a href="http://tortoisesvn.tigris.org/">TortoiseSVN</a>, make sure to use a new line. Click on the image to see closely.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-2300195585849334189?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com1tag:blogger.com,1999:blog-25029907.post-18110091275738060592007-07-23T17:33:00.000-04:002007-07-23T18:06:24.111-04:00How to do HttpPost with .NET Web Service?What kind of Web Service binding does .NET create for you when you use "Add Web Reference"? Right, it is Soap and Soap2, and from the wizard we have no control over it. Note however that Service Help Page <span style="font-weight: bold;">does</span> use HTTP POST even if it is not enabled by the underlying . Don’t let this fact confuse you: your auto generated WSDL won’t have the HTTP-POST binding.<br /><br />So if by some reason I want my my .NET Web Service to use HTTP POST, how would I do it? Read on!<br /><br /><span style="font-weight: bold;">Service Side:</span> tell Web Service to support it and expose it in web.config.<pre style="font-size: 85%; font-family: courier new;"><br /> <webServices><br /> <protocols><br /> <add name="HttpSoap"/><br /> <add name="HttpPost"/><br /> <add name="Documentation"/><br /> <add name="HttpPostLocalhost"/><br /> </protocols><br /> </webServices><br /></pre>Now your WSDL has the HTTP-POST binding, and can generate HTTP-POST stubs.<br /><br /><span style="font-weight: bold;">Client Side:</span> tell WS client to use it. That means, client proxy should inherit from HttpPostClientProtocol rather then SoapHttpClientProtocol. Add Web Reference doesn’t give a control of what always inserts. Instead, use wsdl /protocol:HttpPost. What I did:<br />1) Generate another proxy with wsdl (in command line, wsdl /out:ReferenceHttpPost.cs /protocol:HttpPost Service1.wsdl).<br />2) Add it to my project.<br />3) Extract interface from Web Reference auto-generated file (reference.cs). <span style="color: rgb(255, 102, 102);">Danger! </span>Refresh Reference will kill the change. So I better rename it to something like ReferenceSoap.cs, and update the project to use it.<br />4) Create a factory that returns either SOAP or HTTP-POST based proxy.<br />5) Make WS client use the factory to get a desired proxy.<br /><br /><span style="font-weight: bold;">Tip 1.</span> The proxy generated by wsdl will have URL hardcoded in a constructor, while the Web Reference one knows to use the URL from config file. Copy-paste constructor code from Web Reference generated so that they are the same. Something like<br /><pre style="font-size: 85%; font-family: courier new;">public Service1() {<br /> this.Url = global::WinClient.Properties.Settings.Default.<br /> WinClient_SimpleWS_Service1;<br />}</pre><br /><span style="font-weight: bold;">Tip 2. </span>If running wsdl /protocol:HttpPost generates Warning: no class generated, it simply means wsdl misses POST binding. See <span style="font-weight: bold;">Service Side</span>.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-1811009127573806059?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com0tag:blogger.com,1999:blog-25029907.post-49295643101212830012007-07-08T16:34:00.000-04:002007-09-16T11:20:56.115-04:00Virtual Subversion for Small Software Project?Virtual appliance idea is lovely.<br /><br />You are a .NET developer, starting a small software project. It comes along, and you feel it is time for source control. You want to use <a href="http://subversion.tigris.org/">Subversion</a> because friends say it is cool and fancy. But installing and configuring subversion is a mess and a pain. You are reluctant, if you never did it. And intimidated, if you have already tried.<br /><br />The answer is Virtual Appliances. Look how lovely:<br /><br />I download a virtual appliance with subversion installed and preconfigured. Power up a Virtual machine; with couple of touches my subversion server is up and running. No mess on my laptop. No dusty ubuntu box in the corner. No installing Apache, no configuring subversion. All is prepared and packaged professionally. I bring up the VM when you need it, and where you need it. In the morning, check out, in the evening, check in. The rest of the day it can sleep as a file on my pocket USB hard drive. As the team grows we will run it 24/7 on the network server. Sounds ideal for a small mobile team.<br /><br />Reality check.<br /><br />Googling "subversion virtual appliance" brings up <a href="http://www.jumpbox.com/">JumpBox</a> and <a href="http://www.young-technologies.com/Software/Subversion-Virtual-Machine/">Young Technologies</a>. I go for Young[<a href="#Yong">*</a>]. Download VM: 15 min at 180Kb/s. Unzip it: 3 minutes. Fire up VMWare Workstation (VMWare Player or VMWare Server would do just fine). Open VM, boot it up. From my host machine, go http://srvsvc. Hey it works!<br /><br />As the Youge Tech VM has ssh daemon on, I switched to using Putty. It is convenient: doesn't lock the mouse cursor as VM console, and works faster.<br /><br />Following the <a href="http://www.young-technologies.com/Software/Subversion-Virtual-Machine/">instructions</a>, I created repository, and exposed it with WebSVN.<br /><br /><a href="http://www.softwarefrontier.com/uploaded_images/165-6555_IMG-705218.JPG"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://www.softwarefrontier.com/uploaded_images/165-6555_IMG-705198.JPG" alt="" border="0" /></a>Figuring out the versions of installed software took another half hour. Yeah, I am slow on Unix. Subversion 1.3.1, Apache 2.0.55. Why should one care about Apache? I don't quite like <a href="http://tortoisesvn.tigris.org/">TortoiseSVN </a>with all that integration to Windows Explorer. And subversion windows clients are different binaries for Apache 2.0 and 2.2. While installing <a href="http://downloads.open.collab.net/collabnet-subversion.html">CollabNET</a> my laptop crashed badly. Finally I settled with <a href="http://tortoisesvn.tigris.org/">TortoiseSVN</a>.<br /><br />Bridged network is a bit funky when I switch from wire to wires and back. No more walking to the balcony and to the office and back.<br /><br />Another glimpse: I can connect to Samba \\svnsrv\Public share from remote Win200, but can't do it from the host WinXP machine.<br /><br />The rest of the day was headache with setting up authorization for subversion repositories. I kept on getting "Authorization failed". Before I forgot, here is how it should look to work. Go to /var/svnroot/myrepo/conf . There are three files there. Edit passwd and svnserve.conf. Don't touch authz unless you know what you're doing.<br /><br />sudo vi passwd<br /><blockquote>[users]<br />dmitri=I_Blog_My_Password<br /></blockquote><br />sudo vi svnserve.conf<br /><blockquote><p>[general]<br />anon-access = none<br />anon-access = write<br />password-db=passwd<br />#For simplicity, forget about it<br />#authz-db = authz<br /><br />realm = MyRep<br /></p></blockquote><br />You say "man it is subversion trivia, it is all in the book, you have to know it to use Subversion". Yes, but it defeats the whole point. A virtual appliance should be appliance! Preferably made in Japan, so that I just power it up and get back to playing with my project.<br /><br />The biggest disappointment came at the end: I can't run the VM from USB Hard drive! Urrrr! And why? Cause the damn virtual hard drive was configured to be a single file! Wrong: should have been 2GB chunks. Worst part, it can't be changed.<br /><br />Virtual appliance idea is lovely. Young Tech Subversion implementation is close, but not close enough. Should I have gone for JumpBox?<br /><br /><br />Results: summer Sunday spent, subversion running, play project checked in, blog post done.<br /><br /><a name="Yonge">[*]></a>Why Young Technologies? No particular reason except JumpBox VM also has Track on board, which I didn't care or want at the moment. <br /><br />See also:<br /><a href="http://www.softwarefrontier.com/2007/07/virtual-subversion-appliance-and-ingore.html">Virtual Subversion Appliance, and Ingore Filter for C#</a><br />Further Development of Virtual Subversion applience at "<a href="http://virtualization.zimine.com/">Dmitri on Virtualization</a>"<br /><p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-4929564310121283001?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com3tag:blogger.com,1999:blog-25029907.post-74669561968799539332007-07-05T11:39:00.000-04:002007-07-05T11:52:01.050-04:00Hiring a Software TesterHiring is always a challenge. Hiring a software tester is a new challenge to me. For those who share the interest, here is an influentional reading from <a href="http://www.softwarefrontier.com/2006/10/cem-kaner-in-toronto_24.html">Cem Kaner</a>:<br />"<a href="http://www.kaner.com/pdfs/JobsRev6.pdf">RECRUITING SOFTWARE TESTERS</a>". Make yourself comfortable and take a coffee. It is 55 pages of deep thoughts on all aspects of hiring, well applicable to any knowledge worker.<br /><br />PS. As you smart readers have already guessed: we are hiring a Software Tester at Opalis. Pass the word, drop a line at dzimine at opalis.com<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-7466956196879953933?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com0tag:blogger.com,1999:blog-25029907.post-88154246120587895312007-06-20T11:20:00.000-04:002007-06-20T11:35:29.220-04:00Summer TimeFor those who didn't notice: <span style="font-weight: bold;">Summer Time Is Here</span>. Weather is often nice, and weekends are often long. In Canada, one can't ignore it. I am closing the blog for a summer break. My plans are to focus on a little fun pet-project, do something with whole bunch of ideas I got recently, and enjoy summer time with the family. There might still be occasional articles before I am back in September.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-8815424612058789531?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com0tag:blogger.com,1999:blog-25029907.post-19913717882215456482007-06-07T09:44:00.000-04:002007-06-07T17:11:25.887-04:00Testing Web Service ClientsAs using Web Services becomes a fashionable trend, Test Driven Developers are asking: “How do I test my application that is a Web Service Client”? On the one hand, the testing approach is not different from working with Database, file system, or 3rd party API. On the other hand, we can use WS specifics to leverage testing. Let’s take a closer look.<br /><br />Consider a typical application that, as part of domain logic implementation, consumes a web service. A DomainImp class calls DomainService – a service abstraction driven by domain logic. Think Evans<a href="http://www.softwarefrontier.com/2006/07/book-study-eric-evans-domain-driven.html"></a>, <a href="http://www.domainlanguage.com/ddd/index.html">Domain Driven Design</a>, <a href="http://www.exciton.cs.rice.edu/JAvaResources/DesignPatterns/adapter.htm">Adapter</a>, and <a href="http://www.objectmentor.com/resources/articles/dip.pdf">Dependency Inversion Principle</a>. Domain Service resolves domain specific call into one or several calls to the Web Service. Each is calling a Web Service Proxy class, transferring a SOAP* message over wire to the target machine, and executing WebService code there.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.softwarefrontier.com/uploaded_images/TestingWebServiceClients-756503.gif"><img style="margin: 10px auto 5px; display: block; text-align: center; cursor: pointer;" src="http://www.softwarefrontier.com/uploaded_images/TestingWebServiceClients-756501.gif" alt="" border="0" /></a><br />There are 4 seams. We can mock or stub any of 1) Domain Service, 2) WS Proxy, 3) Transport service 4) WebService.<br /><br /><span style="font-weight: bold;"> 1) Mock Domain Service.</span> This is a TDD classic: extract an interface if you don’t have it yet, and substitute a production implementation by the mock for the test. This works the best for domain unit testing, especially if calling a WS is peripheral functionality, and/or only small subset of WS is used.<br /><br /><span style="font-weight: bold;">2) Mock Web Service Proxy.</span> If the use of WS is central to the application logic and unlikely to change, and/or most of Web Service methods are used, you may find the DomainService redundant. Then mock Web Service Proxy class! This is simple: extract the interface, implement a mock/stub, switch domain code to use mock/stub if unit testing. A slightly different way is <a href="http://blogs.msdn.com/davidwaddleton/archive/2006/08/03/687841.aspx">explained here</a>. BTW, if you are with Visual Studio, I recommend to copy reference.cs, rename or “namespace” WS Proxy class, and work with it. If you don’t, Refresh Web Reference command may [and eventually will] mess things up.<br /><br /><span style="font-weight: bold;">3) Mock a service on a transport layer.</span> The request and response travel over the wire. It calls for a simple plan to mock it up: sniff the response, and on request just shoot it back.<br /><br /><span style="font-weight: bold;">a)</span> Sniff the request/response. I use tcpTrace or proxyTrace from PocketSoap.com.<br /><br /><span style="font-weight: bold;">b)</span> Bring up the mock server to take requests and shoot back responses. How about writing a trivial socket server that listens on the port and bluntly spits out the hardcoded response? Then smart it up: base the response on the request. Or make it configurable. Or... Here you scream “too much!” and are about to give up. But hold on! there is a tool, and it is cool!! <a href="http://www.soapui.org/gettingstarted/index.html">SoapUI</a>: check it out, and go straight to <a href="http://www.soapui.org/gettingstarted/mocking.html">Mocking Web Services</a>. Here is how I used it:<ul><br /><li>Import a WSDL (file or URL). It generates requests to play with the actual Web Service.<br /></li><li>Generate Mock Web Service. I can have all web methods, some of them, or any combinations from all WSDLs you have imported.<br /></li><li>Right from soapUI, test my Mock to see if it works.<br /></li><li>Stick responses captured at step a). I can have many responses, control their order, even script, were I <a href="http://groovy.codehaus.org/">groovy</a> savvy :(<br /></li><li>Configure my client to point to the Mock Web Service, Run, have fun.<br /></li></ul><br /><span style="font-weight: bold;">4) Build a mock Web Service.</span> In .NET case, I run wsdl /si to generate ASP.NET Web Service Interface. Alternatively, check out WSCF - Web Services Contract First http://www.thinktecture.com/resourcearchive/tools-and-software/wscf. I didn’t get to try it myself: wsdl /si worked fine for me. Then I use Visual Studio Refactoring/Generate Implementation that builds me a stab. Then I implement the mock/stab pretty much like in case of WS Proxy.<br />Mocking a Web Service gives a lot of control. The trouble is to build complex types. I had to make breakpoints in WebProxy while working with real WebService, intercept the responses, interrogate their data, and manually re-create them on Web Service Mock.<br /><br />The methods <strong>#1</strong> and <strong>#2</strong> requires code changes to build the test; they are good suit for unit testing. With <strong>#3</strong> and <strong>#4</strong> testing is done against full “release” build, which makes them suit for black box QA tests, performance, etc. In practice I prefer <span style="font-weight: bold;">#1, Mock Domain Service</span>, for unit tests, augmented with <span style="font-weight: bold;">#3, Mock a service with a tool</span>, for acceptance, QA tests and off-line demos.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-1991371788221545648?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com2tag:blogger.com,1999:blog-25029907.post-79951075603370412852007-05-12T17:48:00.000-04:002007-05-12T18:00:12.525-04:00Perils of Documenting ArchitectureWriting Big Architecture Document, I couldn't help thinking of a nice Russian saying. It is about translation; rephrased for architecture and translated <span style="font-weight:bold;">(!)</span>, in English it becomes: <br /><blockquote>Architectural documentation is like a lady. When she is fair, she isn't pretty. When she is pretty, she isn't fair.</blockquote><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-7995107560337041285?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com0tag:blogger.com,1999:blog-25029907.post-56939927435948543752007-05-07T06:57:00.000-04:002007-05-07T07:16:40.152-04:00“Design of Everyday Things” – A Victim of Poor Design<a style="float:left; margin:0 10px 10px 0;" href="http://www.amazon.ca/gp/product/0465067107?ie=UTF8&tag=softwarefront-20&linkCode=as2&camp=15121&creative=330641&creativeASIN=0465067107"><img border="0" src="http://g-ec2.images-amazon.com/images/I/216-nqyN77L._AA_.jpg"></a><img src="http://www.assoc-amazon.ca/e/ir?t=softwarefront-20&l=as2&o=15&a=0465067107" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> Reading <a href="http://www.amazon.ca/gp/redirect.html?ie=UTF8&location=http%3A%2F%2Fwww.amazon.ca%2FDesign-Everyday-Things-Donald-Norman%2Fdp%2F0465067107%3Fie%3DUTF8%26s%3Dbooks%26qid%3D1178535644%26sr%3D8-1&tag=softwarefront-20&linkCode=ur2&camp=15121&creative=330641">Design of Everyday Things</a><img src="http://www.assoc-amazon.ca/e/ir?t=softwarefront-20&l=ur2&o=15" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> by Donald A. Norman made me feel really frustrating. Not just because I was relating to all these everyday frustrations of fighting with everyday things Norman describes there. This only amplified the most frustrating part. Ironically, the book itself was poorly designed!<br /><br />It is damn paperback. Paperback is a poor design for a book. It takes two hands to operate. I must hold tight to keep open, time to time press it. Yet just turn off your head, it closes or flips to another page. This design makes me fight with the book.<br /><br />Everyone knows a better design for a book. I take a hard-cover. I put a book on a table, pull a nice strip, and it opens on the right page and remains open. I read it hands free. If anything, nice strip brings me back to my page again. I should have gotten <a href="http://www.amazon.ca/gp/product/0465067093?ie=UTF8&tag=softwarefront-20&linkCode=as2&camp=15121&creative=330641&creativeASIN=0465067093">DOED in hard cover</a><img src="http://www.assoc-amazon.ca/e/ir?t=softwarefront-20&l=as2&o=15&a=0465067093" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />. But I got mine in paperback.<br /><br />It is an irony my book about better design is itself a victim of poor design. It is also a message. Always strive for the better design. But when economics enforces a compromise, don’t feel too bad about it. Donald Norman, the professor of human centric design, does it, too.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-5693992743594854375?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com0tag:blogger.com,1999:blog-25029907.post-51679537235310528262007-05-01T10:14:00.000-04:002007-05-01T10:54:32.307-04:00ORCAS WCF+WF Training: Windows Workflow Foundation<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.softwarefrontier.com/uploaded_images/250px-Killerwhales_jumping-731687.jpg"><img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://www.softwarefrontier.com/uploaded_images/250px-Killerwhales_jumping-731684.jpg" border="0" alt="" /></a>In <a href="http://www.softwarefrontier.com/2007/04/wcfwf-in-orcas-deep-dive-training-at.html">"WCF+WF in ORCAS: Deep Dive Training at Redmond"</a>, I promised a dedicated post about WinWF.<br /><br />What is Windows Workflow Foundation in .NET 3.0? A runtime engine, topped up with services and tools.<br /><br />Workflow runtime engine is superior. It implements traditional sequential and state-machine workflow, the two can nicely interplay. Dynamic update of a running workflow instance – known in <a href="http://www.wfmc.org/standards/docs/TC-1011_term_glossary_v3.pdf">WfMC fundamentals</a> as AdHoc Workflows is there, too. Long running workflows are supported. Sweet part of WinWF, the Rule Engine, rulez and can be rehosted outside of WinWF applications. Runtime scales up and down, performs exceptionally well. It is well designed for flexibility and extencibility. They call it "<i>future proof</i>". Ok, my <a href="http://www.fightthebull.com/bullfighter.asp">bullfighter</a> is scorning at me here.<br /><br />What is cooking with ORCAS?<br />Two new activities - ReceiveActivity and SendActivity – bring elegant integration with WCF. We did a lab, which soon will be available on the community site. Handling external events will be simplified: workflow/host communication made easier. That’s it, in my notes. Will double check when I get the presentation video & .ppt.<br /><br />There is no updates on UI components. This is disappointing. Rule Set Editor can be rehosted, but you can’t use it unless you are a programmer. Workflow designer can be rehosted. But it’s a total usability disaster, even for a programmer. Everyone agrees that normal user can’t possibly use it. Microsoft acknowledges but “choose not to work on this problem” So if you think of exposing Workflow or Rules in your product, you are on your own. Like these people who reimplemented workflow designer with style.<br /><br /><a href="http://blogs.msdn.com/mwinkle/">Matt Winkler</a> gave an exciting presentation on WinWF performance. He was sharing tricks to tune Worfklow Runtime to get the right performance trade-offs, based on scenarios. What I picked up: <br />Think when to track. Choose full reliability (Persist on Choice) or full speed (no persistence). Or, use controlled save point. Implement them as an empty activity with [PersistOnClose] attribute on Execute override. Think what to track. Track only what you need. Partition tracking service to avoid polluting DB. Batch tracking reduces the load on SQL server. Bindable properties do not slow things down too much, but when you don’t need binding, use simple properties. Nesting compensations are expensive. Transactions use DTS – take performance hit. While is expencive: it’s 2000 times faster to do it inside [code] activity then using workflow while. Dynamic updates ARE SLOW (and if you think you need them, think again). Farms of workflow hosts are easily configurable with SQL Tracking Service. When tuned well, WinWF performs (detailed metrics <a href="http://msdn2.microsoft.com/en-us/library/Aa973808.aspx">in this article</a>).<br /><br /><br />Am I sold on WinWF? Almost. I like the technology, but not entirely sure if it is ready for a prime time yet. In the next post, I will share my reservation.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-5167953723531052826?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com0tag:blogger.com,1999:blog-25029907.post-15664963598529930442007-04-27T18:57:00.000-04:002007-04-27T20:12:14.004-04:00Workflow Engines and ProductsI am in love with workflow products, workflow engines in particular. Listed below are some of workflow engines and workflow based(*) products that I came across and looked at over last 3 years.<br /><br /><span class="sidebar-title">BPM</span><br />* <a href="http://www.tibco.com/ ">Tibco iProcess</a> <br />* <a href="http://www.microsoft.com/biztalk/default.mspx">BizTalk </a><br />* <a href="http://www.savvion.com/">Savvion</a><br />* <a href="http://www.lombardisoftware.com/bpm-software-products.php">Lombardi </a><br />* <a href="http://www.oracle.com/technology/products/ias/bpel/">Oracle BPEL Process Manager</a><br /><br /><span class="sidebar-title">Other Products</span><br />* <a href="http://www-306.ibm.com/software/tivoli/products/intell-orch/">IBM Tivoli Intelligent Orchestrator</a> <br />* <a href="http://www.iks.ethz.ch/jopera">JOpera</a><br />* <a href="http://www.fullarmor.com/labs-workflow-studio.htm">Full Armor Workflow Studio</a><br />* <a href="http://www.k2.net/ ">K2.Net</a><br />* <a href="http://www.tlogic.com/harmony.htm">LogicBase Harmony</a><br />* <a href="http://www.skelta.com/">Skelta</a> <br />* <a href="http://www.adobe.com/products/livecycle/">Adobe LifeCycle Workflow</a><br />* <a href="http://www.opalis.com">Opalis</a> - oh I know this engine well <br />* <a href="http://www.adobe.com/products/server/workflowserver/pdfs/lc_workflow_overview.pdf ">overview pdf</a><br />* <a href="http://taverna.sourceforge.net/">Taverna</a><br />* TurboWorx - look ma, they lost their domain! Oh, don't even think of going torboworx dot com ...<br /><br /><span class="sidebar-title">Workflow Engines</span><br />* <a href="http://www.yawlfoundation.org/">YAWL</a><br />* <a href="http://www.bigbross.com/bossa/">Bossa</a><br />* <a href="http://www.openwfe.org/">OpenWFE </a><br />* <a href="http://www.enhydra.org/workflow/shark/index.html">Enhydra Shark</a><br />* <a href="http://www.active-endpoints.com/active-bpel-engine-overview.htm">ActiveBPEL</a><br />* <a href="http://msdn2.microsoft.com/en-us/netframework/aa663340.aspx">Windows Workflow Foundation</a><br /><br />Hords of open source Java engines are listed <a href="http://java-source.net/open-source/workflow-engines">here </a>and <a href="http://www.manageability.org/blog/stuff/workflow_in_java/view">here (with discussion)</a>. Interestingly, there is no open source C++ workflow engine. I googled hard, but only found a <a href="http://freshmeat.net/projects/wftk/">dead one in C</a>. I'll be happy if you proves me wrong.<br /><br />Here you could imagine me doing a product review. But let's save your time and cut straight to the bottom line.<br /><br />Over last 10 years everyone and his brother had been building a workflow engine. Most of the products listed have their own ones. Developing them has been a lot of fun. This time is over. Now in 2007 workflow engine becomes a commodity. Who are the leaders? <br /><br />I nominate <a href="http://www.active-endpoints.com/active-bpel-engine-overview.htm">ActiveBPEL</a> and <a href="http://msdn2.microsoft.com/en-us/netframework/aa663340.aspx">WinWF</a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-1566496359852993044?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com4tag:blogger.com,1999:blog-25029907.post-75906097516007247092007-04-23T23:39:00.000-04:002007-04-24T00:30:55.107-04:00Is Agile Any Good for a Startup?Agile is about reducing risk, improving predictability, and having more fun. Startup is about taking risk, making surprises, and having more fun. Is agile any good for a startup?<br /><br />Startup can’t reduce risks, they take it.<br />Startup can’t improve predictability – there is <span style="font-style:italic;">none</span>.<br />Startup can’t be any more fun – it is already too much to bear.<br /> <br />Despite rumors, agile is a disciplined process. It promise future benefits, but comes with a cost. Bad trade-off: start-up is a life boat that needs to get to shore before short supplies run out. <br /><br />Optimizing dev process? Why bother improving speed in a future, get it going now! Code maintainability? Why bother, if it goes down the toilet faster then it’s written. Continuous integration, auto build, unit testing… Why bother? These best practices proved themselves in the industry. So what? A research lab is not like a production line. <br /><br />The only thing from agile that suits really well is the motto: "<a href="http://www.xprogramming.com/Blog/Page.aspx?display=GoodDayToDie">Every day is a good day to die</a>". <br /><br />Ok, there is more. They share <a href="http://agilemanifesto.org/">fundamentals</a>. Focus on people, working software, customer collaboration and embracing change.<br /><br />I am being controversial to stir the pot. Those who know me are not surprised. I don’t know if agile is any good for a start-up. Do <span style="font-weight:bold;">you </span>know? Leave a comment.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-7590609751600724709?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com1tag:blogger.com,1999:blog-25029907.post-79636525023157581272007-04-22T01:13:00.000-04:002007-05-02T14:39:09.333-04:00WCF+WF in ORCAS: Deep Dive Training at RedmondI spent 3 days at <a href="http://msdn.microsoft.com/events/pac/">Platform Adaptation Center</a> in Redmond, taking a dive in hot Microsoft technologies. The focus was on Orcas, the upcoming version of Visual Studio and .NET 3.5. We also got insights of the current .NET 3.0, and features beyond ORCAS.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.softwarefrontier.com/uploaded_images/OrcasLogo-792238.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://www.softwarefrontier.com/uploaded_images/OrcasLogo-792235.png" border="0" alt="" /></a> My professional focus was on Windows Workflow Foundation. My geeky side was fascinated by <a href="http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx">LINQ</a>. Windows WF worths a <a href="http://www.softwarefrontier.com/2007/05/orcas-wcfwf-training-windows-workflow.html">dedicated post</a>. For details on LINQ I’d rather refer you to someone who can tell the story: Anders Hejlsberg! Watch a video interview from <a href="http://blogs.msdn.com/charlie/archive/2007/01/26/anders-hejlsberg-on-linq-and-functional-programming.aspx">here</a>. To taste it, follow <a href="http://www.alexthissen.nl/blogs/main/archive/2006/03/26/the-road-to-linq-c-3-0-for-mere-mortals-part-0.aspx">"The road to Linq: C# 3.0 for mere mortals"</a> paved by <a href="http://www.alexthissen.nl/">Alex Thissen</a>.<br /><br />It is intriguing: ADO.NET team comes with <a href="http://blogs.msdn.com/adonet/archive/2006/07/11/662447.aspx">Entity Framework</a>, new and cool, along with ESQL query language. It directly competes with LINQ to SQL (aka DLINQ); and we got competing evangelists from the two competing teams presenting. The obvious question "what Microsoft’s recommendation on choosing between the two" was answered with pretty much "the jury is out".<br /><br />Every time I see PowerShell, I am excited and ready to install & play & learn & use it right away. Never gotten beyond installation yet . After <a href="http://blogs.msdn.com/daiken/">David Aiken’s</a> show, I will do it. David had delivered Using Powershell to manage WF & WCF – great demo! Later he spoke about application manageability, WMI, events and their play in M$ <a href="http://blogs.msdn.com/daiken/archive/2007/03/26/dsi-at-mms.aspx">Dynamic Systems Initiative</a>. <br /><br />Rules rulez! <a href="http://blogs.msdn.com/moustafa/">Moustafa Ahmed</a> made it clear. Rehost a rules engine whenever you pleased, and what a great power. Rules Editor, on the other hand, is not so cool. Technically it is rehostable, but only developers can possibly use it. For normal users, you’re on your own.<br /><br />What else? Three presentations on Windows Communication Framework. <a href="http://blogs.msdn.com/justinjsmith/">Justin Smith</a> was talking about Syndication and later on WCF performance. <a href="http://blogs.msdn.com/pravin_indurkar/">Pravin Indurkar</a> shown in-depth interplay of WCF and WF. I liked Justin’s thinking broadly of syndication, beyond blogs and news. Think of an event log as a syndication of events, a record set is syndication of data rows, a web page as a syndication of data backed controls, and so on. WCF is promising support for Atom & RSS.<br /><br />AJAX: two presentations, by <a href="http://smarx.com/">Steve Marx</a> and <a href="http://blogs.msdn.com/eugeneos/default.aspx">Eugene Osovetsky</a>, and the lab on JSON & AJAX win WCF. Workflow Driven User Interface: web application “HelpDesk” example demoed by Shelly Guo. Compact framework and Office/Sharepoint – not interested.. Federated Identity was presented in greatly understandable way by CardSpace team – now I can explain it myself! <a href="http://blogs.msdn.com/briankel/">Brian Keller</a> was showing off VS Team System. It was off-beat for the general theme, but for me both the presentation and after-talk with Brian was so interesting… I gotta blog on this separately.<br /><br />The audience of around 50 was a mix of innovators from blogging and training cutting edge, on one side, and pragmatics from the dusty field of daily industrial development, on the other. Innovator Alex wanted to know where LINQ is going after ORCAS. I wanted to figure if I could use WF right now. Satisfying both sides presented a challenge to the organizers. At the end, though, both sides got their questions answered.<br /><br />Overall – good organization, smart guys, great event.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-7963652502315758127?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com1tag:blogger.com,1999:blog-25029907.post-61350413369102736092007-04-18T21:37:00.000-04:002007-04-18T21:47:47.199-04:00OpenLazloA friend of mine gave me a buzz: “Check it out, <a href="http://www.openlaszlo.org/">OpenLaszlo</a>”. <br /><br />A free open source AJAX toolkit, OpenLazlo gives an XML based language with embedded JavaScript that compiles into Flash or DTHML. Originally optimized for FireFox, but claims full support for Internet Explorer, including 7.0. No JSON, but XML based dataset with XPath query is provided instead. Animation is OpenLaszlo’s sweet spot. Demos are sexy, and <a href="http://www.openlaszlo.org/lps/laszlo-explorer/index.jsp?navset=nav10.xml&bookmark=Introduction">“Laszlo in 10 minutes”</a> is fun. Although I still more like fine-grain control, like with Atlas, OpenLaszlo declarative style ramps up web development time.<br /><br /><span style="font-weight:bold;">Morale:</span> AJAX is cool, Open Source rules, friends matter.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-6135041336910273609?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com0tag:blogger.com,1999:blog-25029907.post-78251581816973618712007-04-16T01:41:00.000-04:002007-04-16T01:54:38.019-04:00Effects of Defects: Grey Scope CreepIs boosting productivity simple? Yes! Just cut out craploads of code! One problem here. The gap between code complete and feature done is bigger then it appears. That was my thought as I was looking at statistics.<br /><br />On average, a developer cuts off 300 lines per day, some true heroes claim more. This “productivity” comes with the price of 100 defects per 1000 lines of code. Finding defect and fixing it is on average 4 to 16 hours <a href="http://www.amazon.ca/Discipline-Software-Engineering-Watts-Humphrey/dp/0201546108/ref=sr_1_2/701-8152583-5192327?ie=UTF8&s=books&qid=1176702305&sr=8-2">[1]</a> <a href="http://www.amazon.ca/Introduction-Personal-Software-Process-sm/dp/0201548097/ref=sr_1_5/701-8152583-5192327?ie=UTF8&s=books&qid=1176702587&sr=1-5">[2]</a><br /><br />Do the math: Your kick ass star developer produces 500 lines a day. This creates up to 80 hours of extra work to himself, the dev team and their tester buddies. 10 damn days! I call it “grey scope creep”.<br /><br />At first, this statistics seems totally off. But can’t you remember such a kick ass code monkey? you surely know a few. Now go over all these steps to fix a defect: cutting the build, installing it in QA, testing, finding the bug, writing a bug report, assigning it back to development, reviewing, trying in vein to reproduce… “Works on my machine”, sending it back to QA”, and finally, after a couple of round-trips, it’s fixed. Than regression sticks out an ugly head, and the high 16 man-hours per a bug looks too good to be true.<br /><br />So, is boosting productivity simple? Yes! Less bugs in, more bugs out! One problem here. But enough on problems, let’s get positive and move on to how fight grey scope creep.<br /><br />First, if the kick ass developers only care about the joy of cutting code, not shipping the software, they got the boots. Don’t regret, they produce more work then they get done. It is not about developers developing and testers testing. It is developers and testers working cooperatively to ship a software. We got space for local optimization.<br /><br />Second, good software practices are to the rescue. Pair programming, design and code reviews, test driven development, etc… They surely slow down the LOC/day pseudo-performance (less bugs in) and reduce the number of defects. Pair programming by itself brings 15% less bugs, with healthy 15% slow-down of LOC performance <a href="http://collaboration.csc.ncsu.edu/laurie/Papers/XPSardinia.PDF">[3]</a>.<br /><br />Third, redefine “done”. Fresh features are marked done, and disappears somewhere in QA to eventually fire back at unknown time with unknown bugs. Grey scope creep. Stop it. Instead, insist on taking less but making it “done” within an iteration. Done reads fully developed, thoroughly tested, debugged, fixed including regression, and accepted by product owner. If this bring development to a deadlock, it’s one of the two. You may be blessed to fail faster and cheaper. After all, if you can’t get “done” just one feature, how would you ever be done with the entire project? Or the team overcomes the crisis and changes the working habits. The shortened feedback loop and fixing bugs as you make it leads to less time per bug fix. The grey scope doesn’t creep beyond the iteration. Problems become obvious early enough to to deal with them.<br /><br />Finally, until you fix the grey scope creep, your estimations could be off, up to 10 times! Measure well.<br /><br />So, is boosting productivity simple? Yes! One problem here. Trying to address it may expose the stakeholders to too much truth about the state of the project. Figure out how to deal with this truth. Or wait to my next blog, I have some thoughts about it.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-7825158181697361871?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com0tag:blogger.com,1999:blog-25029907.post-1176180195863875122007-04-10T00:33:00.000-04:002007-04-10T00:43:15.873-04:00Reader's Digest #2: Writing, Receiving Criticism, and HiringFrom Paul Graham, again. I read his essey on writing Writing, Briefly. Then I printed two copies - one for me, one for my son who is into writing, to read it daily till it sticks. If you write, tell me I'll print you a copy. Or serve yourself: http://www.paulgraham.com/writing44.html<br /><br /><a href="http://www.scottberkun.com/essays/essay35.htm">"How to give and receive criticism"</a> By Scott Berkun. <em><strong>Common sence, structured.</strong></em> Nothing new but the fact this may be news to someone. <br /><br />How does receiving criticism applies to software development? Directly and profoundly: It rases team productivity and improves the quality of software. Steave McConnel stresses technical and desing reviews as premium quality assurance techniques. Conducting reviews effectively is all about giving and receiving criticism. Handling criticism well indicates higher morale and better team dynamic that guarantees productivity improvement. Convinced? Think of probing this skill when hiring.<br /><br />Speaking on hiring: <br />* another essey from Scott Berkun <a href="http://www.scottberkun.com/essays/essay39.htm">"How to interview and hire people". </a>Again, common sence, structured. A few tricks to learn, but it's not about tricks, it's about interviewer's goals and attitude. I'm going to use it to refresh my perspective on hiring before plunging into massive interview race. For candidates, it worth reading to see what to look forward on the other side. <br /><br />* also, check out <a href="http://www.joelonsoftware.com/articles/GuerrillaInterviewing3.html">"The Guerrilla Guide to Interviewing"</a> which Joel Spolsky updated to v3 in October 2006, reflecting changes with time passed since the first version. I like it even better now. <br /><br />* and finally, <a href="http://www.menloinnovations.com/freestuff/whitepapers/extremeinterviewing.htm">Extreme Interviewing by Software Factory fellows</a>.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-117618019586387512?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com0tag:blogger.com,1999:blog-25029907.post-1176006734599960022007-04-08T00:10:00.000-04:002007-04-08T00:32:14.610-04:00Migrating ASP.NET AJAX based WinFX MonitorThe most interesting examples around Windows Workflow Foundation is <a href="http://www.masteringbiztalk.com/blogs/jon/PermaLink,guid,79f45d4d-6e5a-437b-a230-d7df13ae18e7.aspx">John Flander's article</a> on hosting Workflow Monitor in ASP.NET Web App with AJAX. One problem: since his post ASP.NET AJAX went to RC, then RTM, lost name Atlas, and support of some features. So John's app doesn't work on <a href="http://ajax.asp.net/">ASP.NET 2.0 AJAX Extensions 1.0 RTM</a>. To figure out why, RTFM <a href="http://ajax.asp.net/documentation/Migration_Guide_CTP_to_RTM.aspx">here </a>and <a href="http://ajax.asp.net/documentation/Migration_Guide_RC_to_RTM.aspx">here</a>. Main trouble is Microsoft.Web.Extension.dll has been renamed to System.Web.Extension.dll, luckily token is the same. So the fix was to rename it all over the Web.config, plus a few little changes. To save you troubles going through this routine, get a modified <a href="http://www.softwarefrontier.com/files/Web.config">Web.config</a> for John's example. <br /><br />Disclaimer: Works for me :-) aka no testing. Enjoy.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-117600673459996002?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com1tag:blogger.com,1999:blog-25029907.post-1175753271029340732007-04-05T01:32:00.000-04:002007-04-05T02:19:21.506-04:00Windows Workflow Foundation - Love at First SightI am falling in love with <a href="http://wf.netfx3.com/">Windows Workflow Foundation (WF)</a>. Formely known as WinFX, it is recently released as part of .NET 3.0, becoming a core for a number of Microsoft products, and actively promoted by Microsoft Evangelists along with WCF and WPC.<br />I took a dive at Windows WF, and loved it. Microsoft got it right. Well, mostly. Here is where they I think they missed:<br /><br />1) Designer is terrible. Yes it is polished and pretty, but it is a usability disaster. It’s not worse then a typical BMPN product, though. They are all guilty of overwhelming a user with all the complexity of notations and workflow patterns. As a result, most workflow tools suck just like UML based code generators. Too bad Microsoft chose to suck with the most. <div style="float: right; margin-left: 10px; margin-bottom: 5px;"><a href="http://www.flickr.com/photos/dzimine/255192570/" title="photo sharing"><img src="http://farm1.static.flickr.com/47/255192570_02ecc9d66c_m.jpg" alt="" style="border: solid 1px #000000;" /></a></div> A minor usability issue: Activities for a traditional sequential workflow and a state machine workflow are all mixed in the same toolbox. Can I drag this activity to this workflow? Makes a beginner to guess, makes an expert to remember.<br /><br />2) Enterprise level high availability is either not addressed or hidden. I have not found any stories about failover, clustering, and load balancing.<br /><br />3) Workflow in web clients is not there yet. But looks like it’s coming, check out <a href="http://www.netfxlive.com/">www.netfxlive.com/</a><br /><br />Despite these points, I love Windows WF, at least at first sight. This love is easy to test: just have a second sight. That is what I am going for – a good second sight at Windows WF along with WCF. Meet me at Redmond next week.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25029907-117575327102934073?l=www.softwarefrontier.com' alt='' /></div>Dmitri Zimin(e)http://www.blogger.com/profile/08908360625548486756noreply@blogger.com0