| Paul's profileVirtual GeniusPhotosBlogLists | Help |
|
Virtual GeniusPaul Rayner's Coding Blog February 13 Agile 2009 – My Session Proposals
One of my goals this year was do at least one presentation at a major conference. Towards that goal, I have proposed two sessions for the conference, a 3 hour coding clinic on BDD in .NET for the Developer Jam stage and a 90 minute tutorial for the New to Agile stage on how defining “Done” as a means of getting to working software. In preparing the session proposals I tried to draw on what I had learnt in the teaching practicum class for my degree program in terms of outcome-driven learning, taking different learning styles into account, and thinking carefully about ways to engage the participants so that they can return to their work situation and apply immediately what they have learnt. Hopefully I achieved a certain measure of success with that. So far the reviews have been very positive. It will be a while before I find out if the sessions were accepted for the program. Either way, I plan to offer the BDD clinic in Denver a couple of times over the Summer, so stay tuned for news on that. Here are the proposals:
"Done" - Are We There Yet? One of the core values expressed in the agile manifesto is “working software over comprehensive documentation” because working software is what delivers value to our customers. Agile development requires a sofware development team have working software ready to deploy at the end of each iteration. But accomplishing this can be harder than it seems, especially when first starting with agile. In this highly interactive session you will understand how a team definition of “Done” is necessary to making agile delivery possible, and what you can do to make it happen while avoiding the pitfalls. Process/MechanicsIntroduction (10 mins) I will introduce the basic concepts and give some examples of what happens when a team does not have a definition of “Done”. We will also take some time for collecting a backlog of questions and concerns the participants might have in regards to applying the session content in their situations. Crafting a Definition of “Done”(70 mins) This will be a very interactive session with a combination of teaching, discussion, Q&A, and group exercises. Participants should be prepared for lots of group work, movement, sticky notes, whiteboard sketches, handouts, and roleplaying. Participants will be provided with sample definitions of “Done” from real development teams to use as a basis for discussion. At a minimum, the following important questions will be covered:
As groups we will roleplay and brainstorm definitions of “Done” for participants to demonstrate how this can be done in a real project team situation. Final Review (10 mins) This is where we do a retrospective of the overall learning experience and ensure that participants leave ready to apply what they have learnt in their own situations.
Learning outcomes
Introduction to Behaviour-Driven Development in .NETBehavior Driven Development (BDD) is an agile software development technique that encourages collaboration between developers and customers to focus on the delivery of business value. Have fun learning how BDD can be implemented in .NET by combining testing frameworks such as NUnit, MSpec, and SpecUnit.NET with an isolation framework such as Rhino Mocks, with SOLID design principles, and with other agile practices such as continuous integration to increase the value of your code to your customers while also improving its design, readability and maintainability. Process/MechanicsIntroduction (15 mins) I will introduce BDD, its history, and how it relates to other practices such as Test-Driven Development and Domain-Driven Design. This will include my story of how I got started with BDD and some of the challenges (successes and failures) in applying it in my project work. We will also take some time for collecting a backlog of questions and concerns the participants might have in regards to applying BDD in their situations. Problem Presentation (10 mins) All the coding will be done in the context of extending and refactoring a simple Winforms application to meet a specific business situation. I will act as the Product Owner and domain expert, and explain the business context, application scenario, and product backlog for the application. Coding Exercises (140 mins) There will be three ~40 minute focused coding exercises, each of which will be treated like a mini-iteration.
Students will need to bring their own laptops with Visual Studio 2008 development environments. Final Review/Q&A (15 mins) This is where we do a retrospective of the overall learning experience and ensure that students leave ready to apply what they have learnt in their own situations.
Learning outcomes
January 16 Hire code craftsmen, not code regurgitators
I got 76%. The world average is apparently 74%, and I assume that most people taking this test are coding in C# for most of every working day. For the past year I have not coded more than an hour a day on average, yet I scored above average without any prior preparation or study. I know that if I had taken an hour or two to brush up on Datasets, XML serialization, custom controls and File IO I would easily have got well above the 90th percentile. And that’s the key point, there is nothing that I did not know on that test that I could not find out in less than a minute using Visual Studio or Google. So I don't have a lot of respect for these kinds of tests. They fail to test real programming or design ability. I would not recommend that any company spend money on this type of testing approach. These test at the lowest level of Bloom's taxonomy and thus have only limited value. It is regurgitation of memorized syntactical facts, and little more than that. I view this as akin to evaluating a carpenter based on whether he can identify various species of trees. There was very little on that test that Visual Studio won't give you with Intellisense, so I don't see the value in what is being tested. I guess it does set a minimum bar; anyone that fails this test should not be hired since they have no significant knowledge of C# at all. Case in point, there is at least one recent case of a 8 year old child passing one of these types of exams for the MCP certification. A remarkable child for sure, but I would not recommend hiring her as a developer for your team because she has the MCP certification. In fact, that certification says nothing about her ability to write code. As many others have already noted, programming exercises (such as Jeff’s now infamous FizzBuzz or a coding and refactoring exercise that I have used in hiring) are a far more cost-effective and accurate means of determining programming skill. They tend to test at higher levels of Bloom's taxonomy and provide a clearer window into the mind of the developer being evaluated.
Technorati Tags: Interviewing January 10 Taking a look at VS2008 Class Diagram Designer PowertoysI wanted to find a more flexible implementation of the VS 2008 class designer. Out of the box the designer does not support basic operations like easy pan/zoom, HTML export, grouping and some other niceties that would make it actually worth using. I stumbled across the PowerToys for the Class Designer and Distributed System Designer. After downloading it and looking through it there are the basic features that I wanted. I don’t want to use it for class design. Instead, I am really after a tool that would enable me to quickly produce a UML class diagram of part of our domain so I could print it out and stick it up for the team’s reference. We have this for the data schema from SS2005 and it is tremendously helpful. From the Project Description at CodePlex
After clicking on Download Now I get ModelingPowerToysForVS2008.zip which extracts to an MSI and the source code for the Add-In. Running the MSI gives me a new menu next time I run VS2008: Here is the Class Designer being used on its own source code: Zoom feature works well: Class details: Adding a comment: Brian points out that you can show the associations between classes inside the Class Designer. To do this, simply right-click on a class attribute or a property, then click on Show as Association or Show as Collection Association, depending on the type. Here are the results of doing Show as Association on the TransactionName property of AddDerivedClass: I really like the nice navigation window on the bottom right of the screen. Reminds me of one of my favorite Photoshop features: Showing class details: So, in order to get to a diagram of the domain classes, one thing I really would like to be able to do in such a tool is grouping and color coding by modules/namespaces. Since we have a data schema diagram from Sql Server that has various logical groups of tables color coded and grouped together it would be ideal to do the same with the classes. I’m just not sure how to do that, if it is even possible with this tool. I think I need to experiment some more to see. And I’m really not sure yet what the Distributed System Designer part of this Add-In is. January 09 Want to develop iPhone and Wii applications in C#? Try Mono!From Ars Technica: Open source Mono framework brings C# to iPhone and Wii
Here is the list of around 40 Apps Miguel found that people said were available from the AppStore that are powered by Mono (based on the comment thread here). He also mentions My Animal Center, a German game for the Wii that is heavily coded in C# using Unity and Mono. If only I had a Wii so I could try it out (hint…hint…).
But how is it done? The trick is to move past the CIL via static compilation directly to native code.
The key that turns the iPhone lock for .NET here is Unity, a third-party commercial programming framework developed by a Denmark-based company for 3D game development built on Mono. Unity supports several platforms, including iPhone and Wii, and comes with its own built-in Mono cross-compilation environment. Unity has Indie licenses available for $199 USD and Pro for $1,499. In addition to these, the iPhone basic support license runs at $399. More information on the differences between Indie and Pro licenses and Unity iPhone publishing can be found here.
Looks like exciting times ahead for .NET and the iPhone because of Mono. .NET developers can now venture into iPhone development with the tools they know and love.
December 03 Build Quality InI noticed today that software I worked on 15 years ago in Fortran and C is still around and being actively put to good use. I did extensive work on parts of the Geotechnical module (love those search ellipsiods!) and wrote the initial Groundwater Modelling interface to Aquifem-n so that the models could be manipulated and displayed inside the 3D modelling environment. Working for Maptek was my first job after completing my graduate work at Curtin University. I started there in 1990 and stayed for five good years. They were a great company to work for and I have many fond memories from my time there. I don’t miss coding in C and Fortran (I prefer not to have to hurt my head with memory management concerns too much these days), but I am still good friends with the people I worked with at Maptek (who have all since moved on as well).
Are you designing software with the long term in view? Maybe a key question to ask yourself is “How will I feel in 15 years time about the software I am writing today?” Are you hacking together something, quick and dirty, that will still be causing developers and customers to curse your name more than a decade from now? Or are you building in quality that will last, and seeking to leave a positive legacy for the future of the software and its customers? Studies of software maintainers that have shown that approximately 50% of their time is spent in the process of understanding the code that they are to maintain, the estimated annual software maintenance cost in USA was more than $70 billion in the early 90’s, and in 2000 there were already about 250 billion lines of source code being maintained. Neither you nor the company that employs you can justify not baking in clean code from the very start and keeping it that way. Anything else is just shortsighted and irresponsible. I squirm when I consider these things and cast my mind back to some of the development work I have done in the past. But I don’t think that excuses us from holding ourselves to a high standard and taking the long view with our work. Build quality in. September 12 iPhone 2.1 Software Update - Nice!
How Pixar Fosters Collective CreativityHarvard Business Review have an article by Ed Catmull on how Pixar consistently continues to produce both technical and artistic breakthroughs. Go grab it. Right now. Pixar is one of the companies that I have watched and admired for many years, and now my children are able to share the joy of delighting in the wonder that is a Pixar movie. Ever since I first heard John Lasseter speak at a computer graphics conference in Melbourne in 1990, I have been amazed at how he and his company have been able to push the boundaries of what is possible both in their storytelling and technically. As Ed says:
But beyond finding the right people, it also involves nurturing an environment where those people can collaborate to produce the type of creativity and effectiveness that is needed. I submit that this is true in software development also:
June 27 VS2008 Downloading...Should be done by the time I get home tonight...then get Infragistics, Rhino Mocks 3.5, and ReSharper 4 FTW! But wait! Maybe sooner (and I won't be here to appreciate it!)...my Comcast pipe bandwidth at home is sure in flux right now...
Technorati Tags: Visual Studio 2008 Syntax Highlighter Plugin for Windows Live Writer (WLW)Now that I intend to be starting to put code snippets in my postings, I wanted to find a decent syntax highlighter that works well for C#. I tried this one and it crashes WLW, so I would not recommend it. I could not get it to work. But the Syntax Highlighter for Windows Live Writer project on CodePlex works like a treat. Install it by just copying the dll's to C:\Program Files\Windows Live\Writer\Plugins. Here is the window I see after I select Insert->Syntax Highlighted Text: Just click Insert and the plugin inserts the following: public void SetAnalyticsTicketTypeViewDisplay() { splitContainer.SplitterDistance = 400; dealManagerLabel.Visible = false; dealManagerComboBox.Visible = false; buyClientNameLabel.Visible = false; buyClientContactLabel.Visible = false; buyClientComboBox.Visible = false; buyContactComboBox.Visible = false; sellClientNameLabel.Text = "Client:"; sellClientContactLabel.Text = "Contact:"; sellClientNameLabel.Location = buyClientNameLabel.Location; sellClientContactLabel.Location = buyClientContactLabel.Location; sellClientComboBox.Location = buyClientComboBox.Location; sellContactComboBox.Location = buyContactComboBox.Location; completionDateLabel.Text = "Completion Date:"; productTypeLabel.Visible = true; productTypeMonthDateEditor.Visible = true; wholeLoanGroupBox.Visible = false; } Very nice! Now to start the VS2008 download from MSDN... June 26 Agile 2008 - I'm Going!
I am really looking forward to it. The sessions look awesome, and I fully expect the hallway conversations to be a highlight. Plus I hope to meet and personally learn from many of the people that have been so influential in my learning agile development in the last two years. People like Joshua Kerievsky, Mike Cohn, Allan Shalloway, Bill Wake, Mary Poppendieck, Rebecca Wirfs-Brock, Rachel Davies, Diana Larsen and Esther Derby, James Newkirk, Brad Wilson, Dan North, Uncle Bob Martin, Ron Jeffries, Scott Ambler, Gerard Meszaros, James Shore, Michael Feathers, Ken Judy, Jeff Sutherland, Ward Cunningham, and, last but not least, my CSM trainer Hubert Smits. Looking through the program, I am sure that the difficult thing is going to be choosing which of the many excellent sessions to attend. Anyone else going that would be interested in meeting up there? Technorati Tags: Agile, Agile 2008 ADO.NET Entity Framework Controversy
For some history on the vote of no confidence, see the recap by JDN. Roger Jennings has been following the controversy for a while, he has some detailed background in an older posting on the lack of persistence ignorance in the EF and a good summary of the current state of play with the EF (including an insightful comment dialogue with Jeremy Miller and Scott Bellware). I echo the concerns expressed in the vote of no confidence, but it seems to me that the EF team is making a concerted effort to move in a more constructive direction, as indicated by the newly formed EF DDD-luminaries advisory council, Tim's new visibility on his blog and a brand-new EF v2.0 Design blog. Here is what the design blog has to say abut things the EF team is trying to do in the version 2 release as part of their new transparency in the design process:
I have been encouraged by how the ASP.NET MVC team has been so open about their design and this seems to have led to a healthy groundswell of support and constructive criticism from the .Net community. Hopefully we will see this new transparency for the ADO.NET EF team result in the same type of thing. Already there is some really healthy dialog going on in the comments of the design blog. Technorati Tags: ADO.NET Entity Framework, DDD, Domain Driven Design, EF, ADO.NET, Persistence Ignorance June 25 Update your feed
This is my first step in my plan to move this blog off Live Spaces as soon as I can. Which is likely to be sometime in the next few months (as time permits). I want to move onto something I have more control over (but without the hassle of hosting it myself), especially in making it easier for people to leave comments. Suggestions? DasBlog? SubText? Something else? Technorati Tags: Feedburner June 13 Don't Cancel Your Retrospective!Sometimes when the pressure mounts on an agile project, the project leaders (or team) To celebrate that notion, I have compiled a quick list of possible reasons why a team lead (or even the team itself) might want to kill an iteration retrospective (any others that I have missed???). "Top 10" reasons heard for canceling a retrospective:
It seems that sometimes we forget that a process of self-improvement and process improvement requires time for the team to reflect on their work. Without the opportunity to reflect, things are likely to continue on as they have been going (for a light workload), or to degenerate quickly (when the pressure is on to get things done). And not just the process but - more importantly - the team dynamics, collaboration and therefore productivity. "Process entropy" is real, and one of the best ways to counteract it is for a team to participate in the type of planned, regular, directed, constructive reflection on the process and the team that agile methodologies such as Scrum bake into the process framework. But "process" is a secondary concern ("Individuals and interactions over processes and tools" - Agile Manifesto). The main issue is the need for a dedicated and valued regular opportunity for the team members to be able to be honest about their project and team concerns and to air them in a safe team environment. The retrospective facilitator must ensure that such an environment is a reality for the team. Hence the importance of seriously and intelligently applying (not just reading) the retrospective prime directive as the guiding principle for the meeting as a means of enabling that to occur:
All of the top 10 reasons given above are issues that would be mentioned and dealt with in a well-run iteration retrospective. Except that it would happen organically in a safe team context that can bring a tremendous sense of team ownership and visibility to such issues in a way that a directive from a single manager never could. The assumption is that there is a commitment from the team to deal with any process impediments in a diligent and responsible way, which is usually something that the ScrumMaster or project manager would be responsible to help the team do (visible and - if necessary, verbal - reminders of the retrospective action items both in iteration planning and throughout the iteration). As always, action items from a meeting are worthless if no one acts on them. The power of a self-organizing team is its ability to inspect and adapt rapidly (aka AGILITY). Take away the team's iteration retrospective, and you may be crippling their ability to do that without even knowing it.
June 06 IASA Denver - June Chapter Member's Meeting
Dave Guevara gave a fantastic, animated, detailed and highly participatory presentation on "The Business of Architecture" and much good discussion ensued. Dave challenged us to understand, define, pursue and communicate the business value in our architectural pursuits at every level of the business from infrastructure right through to enterprise strategy. The food - as always - was excellent and it was encouraging to see not only many first-time attendees to the event, but also a very diverse group of architects from a variety of companies. It is exciting to see the chapter's growth since our founding at the beginning of 2008. We have doubled our membership to over 70 registered chapter members now, with new members being added every month. Kudos to the great team at Solution Partners for their incredible support of the IASA Denver chapter this year as our first founding sponsor company. Thank you especially to Andrew and Ryan from Solution Partners for attending and participating in tonight's member event. The next chapter member's event will be August 7th, check back to www.iasadenver.org in a week or so for more details. May 21 TDD - "Software Development Madness"?I have not read the book "Test Driven: TDD and Acceptance TDD for Java Developers" by Lasse Koskela. I stumbled across the book through the recommendations feature on Amazon and started to read the reviews. What caught my eye was the review under the heading "Very Harmful approach" by Ilya Volvovski written on January 19, 2008. The review is succinct and well written, and it is clear that Ilya has a passion for quality software and strong experience with how to develop it. It appears to make a strong case against the practice of Test Driven Development. For that reason I wanted to work through Ilya's argument and see if I can respond to his points and hopefully bring some clarity.
Later in his review it is clear that Ilya has familiarity with agile development, and is a proponent of an agile approach to software development. But here he advocates having a testing phase. Testing phase?? Agile has no testing "phase" since testing is typically done continuously throughout the project as much as possible. At least, this is the case for Extreme Programming. Scrum does not really mandate when the testing happens, but it is generally understood (and certainly was taught at the CSM course I did) that testing should be within the iteration on a feature by feature (i.e. user story by user story) basis.
I would say it even stronger than that. Implementation always reveals design shortcomings, since implementation has to grapple with the realities of changing and poorly understood user requirements. Framework design is a little different here, but concrete implementations are always the best way to validate a design.
Agreed. And I think that is the key point in understanding test driven development. Refactoring does provide that flexibility. And incrementally and iteratively writing the test first as a way of specifying the contract for the software up front allows the developer the maximum scope for refactoring possible.
My experience has been the opposite; I am always designing as I code (and I draw diagrams - UML or whatever - when necessary) when I practice TDD, because I am always focused on clearly expressing the behavior of my classes (through the tests, which exercise the public properties and methods of the class), coding up the minimal implementation of that behavior, then refactoring the class design to improve it. This often involves a discovery of where I should refactor towards a design pattern to decouple the code and make it open for extension rather than modification. See Refactoring to Patterns by Joshua Kerievsky for a comprehensive description of how to do this.
Yes, part of the power of OOD is to be able to create a model. This is the basic principle behind Domain Driven Design (DDD), of which I am a strong proponent. But I think it is going too far to say that this is the power of software design. My big issue with the statement is that Ilya seems to be saying that the power is in doing this design as a separate effort, completely prior to implementing anything. The main problem with this approach is the delay in validating the design. With TDD, and agile in general, the difference is the feedback loop. TDD shortens this feedback loop to a smaller process of design in our mind, implement an executable specification for that mental model, then implement the simplest code to prove the validity of that model. Then rinse, and repeat. And refactor mercilessly. We still do design, whether it is UML or something else. But aren't naive in thinking that a UML diagram can capture the necessary details and deal with the vagaries of reality that inevitably present themselves as we try to express it in code. See the famous article What is Software Design? by Jack Reeves.
But not just up-front design effort. TDD is the best way to arrive at a minimal yet complete interface. It is a mistake to call TDD a "test and try" approach. It can certainly degenerate into that, but that is not how it is meant to be.
On an agile project these "different people with different sets of qualifications" typically collaborate together on defining the acceptance criteria (i.e. tests) that comprise the definition of Complete for a user story. On our project the business analysts work with the business users to arrive at the (usually high level) acceptance criteria, and the developers code up their tests to meet those criteria (but often at a much lower level).
Choosing composition over inheritance is not strange. This is well argued in Joshua Bloch's Effective Java Language Guide - see chapter 4, item 14. The bottom line is that if we rely on inheritance, then our behavior can only be determined statically at compile time (through implementation/class inheritance), but with composition, we can mix and match objects at runtime (c.f. p. 93 of Head First Design Patterns) through interface (aka type) inheritance. The argument that this simplifies testability is not ridiculous. Testing interface inheritance (i.e. with a mocking framework such as Rhino Mocks for .Net) is far easier than testing class inheritance.
Ilya missed the point here. As I said, I have not read the book that he is reviewing, but I doubt that the author is arguing that a smaller memory footprint is the reason people use static Singleton patterns. Singletons are one of the most overused design patterns today, and need to be used wisely. The Singleton patterns should be used judiciously for a number of reasons. Firstly because the pattern is akin to using a global variable and thus can make the code unclear and more difficult to maintain. Secondly, singletons are difficult to test and often can result in tightly coupled code.
Yes. Agile does keep you grounded in reality. It is an empirical approach. It focuses on working software as the only measure of progress, rather than the creation of secondary artifacts such as design documentation, test plans, etc.
Agreed, no complaints here! But TDD makes a great many of the test plans executable. I really think that Behavior Driven Design, where the focus is on clarifying the terminology in terms of writing executable specifications, is a big improvement if for no other reason than it takes the focus off the tests and onto the behavior that the tests are supposed to validate.
Once again, avoiding design is not what we are talking about. I'm sorry that Ilya didn't read the rest of the book. And it doesn't seem like he actually tried applying the approach. It wasn't until I actually began to practice TDD (and now BDD) that I really grokked it.
Ilya does like the book. Clearly for those who want to learn about doing TDD with Java this book would be an excellent choice. And this comment from Ilya is a testament to his fair-mindedness.
I think that the negative attitude comes from a fundamental misunderstanding of the approach. My concern is that if a 470pg book by an expert on TDD cannot clear up the confusion, then I don't give myself much hope in a short blog posting like this.
Why use this metaphor? Because Ilya misunderstands TDD and refactoring. This metaphor would be true, if we were building physical things, subject to the laws of physics. But we are not. We are building software, which is a whole different animal. May 20 The Art of Agile Development - James Shore
While our project delivery team has come amazingly far since we first started our system rewrite and contractor hiring in January, I am determined to take our team cohesion and coding practices to the next level this year. I thought I should start with the definitive work, so I just finished Extreme Programming Explained: Embrace Change by Kent Beck last week. There was so much good content in there, but I wanted to follow it up with a book that was a little more current (The Art of Agile Development was published in Oct last year) and detailed (438pgs) on XP. So far what I have read of Jim and Shane's book has been excellent. Like Kent's book, I really gravitate towards books that are very pragmatic and just as people-focused as principle and practice focused. I am hoping that I can hook up with some other agile developers in the Denver area and maybe work through the book together. I want to learn from other practitioners that are already experienced in all the XP practices, particularly pair-programming and TDD so that I can help raise the collaboration bar with our team.
Jim also talks about how he and Shane have incorporated the notion of personal success in software projects into the book and how that impacts agile development: But in general people tend to really like having the other sorts of success, they like feeling they have accomplished something significant, they like having a life outside of work and they like getting along with their co-workers. So Agile development I think enables this type of success as well. I am really looking forward to digging deeper. Any XP practitioners in the Denver area that would like to meet over lunch and discuss the book? I'll post this request on the Agile Denver mailing list too and see if anyone is interested. May 16 Twitter - Goodbye Witty, Hello twirl
I am trying out twirl instead. It made me install Adobe Air, which I was reluctant to do because I have no idea what it is (or desire to find out for that matter), but I saw other people using it and recommending it and decided to at least kick the tyres on the thing. So far I really like it compared to Witty. It has many more features and has not crashed yet. Plus you can recolor it, filter feeds, reply easily...It even shows "picture-in-picture" style replies (very cool!) and makes itself opaque when not being used. Denver - Beautiful One Day, Perfect the Next!Apologies for blogging about the weather, but I have to share the joy around a little. Does everyone know that Denver averages 300 days of sunshine a year (depending on how you define a "day of sunshine")? May 08 Ways to Be a Better Developer - Improve Your Typing ExperienceOne major change I made last year was to purchase a good ergonomic keyboard, the Microsoft Natural Ergonomic Keyboard 4000. For under $50 it brings a whole lot of comfort and goodness to the typing experience. It is USB, so I use it with my laptop whenever I can. I In fact, I like it so much that I bought one for my home laptop (see earlier posting for details) and one for work (Lenovo T60P). Not only that, but when I travel for business I take it with me in (it is just small enough to fit in my 22" carry on bag). I cannot stand to use the laptop keyboard for long periods if I don't have to. Related to this, the other part of my strategy to make myself more productive is to eliminate my dependence on the mouse. After seeing Oren at Devteach in Vancouver last year blaze through an hour's worth of extreme refactoring with R# sans mouse, I decided to follow suite. I learnt the R# shortcuts and as many of the Windows ones as I could, and barely use the mouse at all. It makes a tremendous difference to my speed and efficiency with the tools. I encourage every developer I meet to ditch the mouse for coding. It is painful for me now to watch someone on my dev team move through code using the mouse. Every time the right hand leaves the keyboard, grabs the mouse and the pointer moves over the screen I die a little inside as I imagine how many hours of coding time are wasted doing that over the course of a month. The other (more radical) step I took last September was to learn to type using Dvorak. Here is the layout, does it look a little weird to you? I ultimately blame Phil Haack for this. I guess that my blog is starting to look a little like a Dvorak propaganda machine, but for those who care here is an update on my typing progress (once again, based on the TypeQuick test): YOUR RESULTS ARE: Number of words typed: 177 I have not tested myself since December 20th last year, so I was pleased to see that with no additional typing practice I have increased in speed from 37.7 wpm to 59.1 wpm. That is a 56% improvement! And with no real training using typing tutor software etc. I know that consistent training would have accelerated my improvement, but I just haven't been able to bring myself to be consistent with a typing tutor program. Now I am less than 20 wpm lower than where I was at with Qwerty on Sept 16th when I first made the switch. But the main benefit for me is that now I am very comfortable with Dvorak and - unlike when I typed with Qwerty - I never look at the keyboard. This means that I am more focused now on what I want to type than where the keys are. Also, my fingers are more relaxed and not having to work so hard to type. Dvorak is just more comfortable. December 20 Dvorak - More ImprovementIt looks like I am averaging an improvement of roughly 10 wpm every month with no loss of accuracy. This increase in speed is with almost no typing practice, rather just day-to-day usage. I am using Dvorak exclusively now and, while I will still need a few months to get back to how fast I could type with Qwerty, I think my speed is fine as a baseline for everything I do. The best thing is that now I don't ever look at the keyboard, which was certainly not the case prior to switching. YOUR RESULTS ARE: Number of words typed: 113
Technorati Tags: Dvorak December 07 Alt.Net PeopleAfter a week of hanging out with all the Alt.Net guys in Vancouver at DevTeach, I finally hang my hat on Alt.Net as something that I want to be a part of. Here is a nice map showing where to find us all (thanks to Chad Myers for the idea). I tried embedding this on the page but Live Spaces won't let me (sigh) Technorati Tags: Alt.Net December 01 Professional SQL Server 2005 Integration Services
Not only that, but there are some good tips I found along the way. For example, when I first started with SSIS I tried creating an Excel source and SQL Server destination, and kept getting errors related to not using Unicode columns in my destination tables. This book explains why this is the case, and has some good advice on how to work around it. I'm not sure that this book would teach the advanced SSIS practitioner anything. But I suggest that if you are interested that you browse through it at the local technical bookstore and see if it provides you any value. There is some redundant material in the book (seems to be symptomatic of the Wrox multi-author approach), but it is better than most. And the redundancy does allow you to pick up any chapter and know what is going on without having to refer back to previous chapters. So, to sum up, I have found the BOL articles to be comprehensive and detailed, but the Wrox book is definately helpful in (i) fleshing out how the various parts of SSIS integrate, and (ii) giving good examples on how to accomplish this.
November 29 CDC & Auditing capabilities in SS2008 - Are we there yet?SQL Server 2008 improves compliance and security by allowing you to audit activity on your data. Auditing can include information about when data has been read, in addition to any data modifications. SQL Server 2008 has features such as enhanced configuration and management of audits in the server, which enable organizations to meet varied compliance needs. SQL Server 2008 can also define audit specifications in each database, so audit configuration can be ported with databases. Filtering of audits to specific objects allows better performance in audit generation and flexibility in configuration. Compare with some forum postings on CDC: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1729734&SiteID=1 http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1730222&SiteID=1 and where auditing in SS2008 really seems to be: Change Tracking : complete solution is not there yet Description In SQL Server 2008 we are providing three different change tracking / auditing solutions, yet none of them completely address the kind of information I would like to track and review. The simplest case is I want to figure out who ran an update, from what workstation, against the Employees table, and the before and after values. With Change Data Capture, I cannot determine who ran the statement, or from where, because this information is not in the log. With Change Tracking, I can only dump information into the context column, ad this may require application changes to support. And with auditing, I need to parse the original statem Technorati Tags: SQL Server 2008, Auditing ents to figure out the bad guy, and this still leaves me with only the "after update" value. Comments Thanks for the feedback - definitely a good set of suggestions that we will look into. For SQL Server 2008 we will attempt to ensure there is a way to correlate audit log records with CDC changes. Having enhanced configuration for CDC and/or auditing that allows both tracking features to be configured in one go is not likely to happen for SQL Server 2008 I'm afraid. Posted by Microsoft on 10/5/2007 at 1:20
Technorati Tags: SQL Server 2008, Auditing November 07 Cool Development Laptop - Asus A8JS-4S024CAsus A8JS-4S024C 14" WXGA+ T7200/GeForce 7700 2 GB DDR2 667/100GB 7200RPM/Bluetooth/DVDR/Windows Vista Ultimate Since May I have been doing all my home development on an Asus A8JS laptop. This Processor & Cache Memory Intel Core 2 DUO Processor T7200 2.0GHz, FSB: 667MHz, 4MB L2 Cache Virtualization Technology Supported Operating System Microsoft Windows Vista Ultimate 32Bit Chipset Intel 945PM Main Memory 2048MB DDR2 667 Support for 2 x SODIMM sockets (up to 2048MB) Display 14” WXGA+ (1440 x 900) TFT-LCD Color Shine Glossy Panel & Splendid Video Graphics & Memory nVidia Go 7700 512MB Hard Drive Seagate Momentus 7200.2 100GB 7200rpm S-ATA Optical Drive 8x DVD-RW Dual Layer Drive Connectivity - Bluetooth Built-in - Intel PRO 3945 Wireless 802.11A/B/G - Integrated MDC Fax/Modem - On board 10/100/1000 MBPS RealTek Fast Ethernet Controller - Full and half duplex mode support for 10/100mbps - 1X Gigabit lan - Modem supported V.90 and universal PPT Card Reader 8-in-1: SD/MMC/MS/MS Pro (adapters)/XD Express Card Slot support Camera - Built in VGA WebCam + microphone LED Status Indicator - Power-on/Suspend - Battery Charging/full/low - Storage device access - Caps lock - Wireless enabling - Number lock - Storage Access Interface - 5X USB2.0 Ports - 1X DVI - 1X Gigabit lan - 1X Audio out/SPDIF - 1X Microphone-built-in - 1X VGA port/mini D-sub 15-pin for external monitor - 1X RJ11 Modem jack for phone line - 1X RJ45 LAN Jack for LAN insert - 1X TV-out (S-Video) - 1X IEEE1394b port - 1X infrared ports to support IrDA Keyboard - 19mm full size 88/89 key with MS Windows function key Audio - Built in 2 speakers and mono microphone Hot Keys Instant Launch Keys - 4 Active buttons: Power4 Gear+, Wireless, Touchpad lock, Internet Explorer Function keys - Fn+F1 Suspend to RAM/Disk - Fn+F2 Wireless Switch - Fn+ F3 Email - Fn+ F4 Internet browser - Fn+ F5 Brightness down - Fn+ F6 Brightness up - Fn+ F7 LCD On/Off - Fn+F8 LCD/CRT control - Fn+F9 Touchpad on/off - Fn+ F10 Volume on/off - Fn+ F11 Volume down - Fn+ F12 Volume up - Fn + C Splendid Battery Pack & Life 6-cell 4800mAh battery pack Battery Charging time, 4hrs (System On/Off) to 100% Battery low warning message AC Adapter Output: 19 V DC, 3.42 A, 90W Dimensions & Weight 13.18” x 9.64” x 1.37”~1.46 inches (WXDXH) Warranty & Support 2 year GLOBAL warranty
|
||||
|
|