Fluent NHibernate is an extension of the widely used and very popular NHibernate framework for Microsoft .NET. It is an open source framework that sits on top of the NHibernate layer and utilises all the core NHibernate methods. This framework provides an alternative to the standard XML based mappings (.hbm xml files) of NHibernate. It lets you define the NHibernate mappings in strongly typed and concise C# code. For those who are new to NHibernate, here is more information.Read more »
Whenever I hear the plan uttered (and in my Wall Street consulting days, I heard this a lot), that we should build an HTML (or Flash) prototype, impress the client and then fill in the back end, an unwanted image comes to mind. We’re digging a hole (the missing 80% of the back end) and covering it with leaves (the HTML prototype) in the hopes that the client will fall in (impressing the client).
No, this isn’t a rant about HTML, Flash or paper prototypes. Those have their place, to be sure. We use them every day in our own software development practice, but they have a short lifespan — usually less than an iteration on the way to delivering the actual feature that it is prototyping. But when the prototype takes on a life of it’s own and becomes a long-term deliverable, that’s when you run into problems. What are these problems? They aren’t as numerous as fall leaves, but there are plenty.Read more »
Business Week had an article earlier this week on Cloud Computing that made a complete hash of the subject. However, there was one paragraph that was right on the money:
Apple and Google understand in their bones that simplicity and ease of use are essential to broad adoption of products and services. That lesson doesn’t come so naturally to Microsoft and IBM.
That’s why we integrate user experience design into the agile development process, and that’s why we advise our clients to release the simplest software they can early, so they can learn from real user feedback and continue to make improvements based on that learning.
It’s like John Gruber writes over at Daring Fireball:
“A complex system that works is invariably found to have evolved from a simple system that worked. The inverse proposition also appears to be true: A complex system designed from scratch never works and cannot be made to work. You have to start over, beginning with a working simple system.”
If there’s a formula to Apple’s success over the past 10 years, that’s it. Start with something simple and build it, grow it, improve it, steadily over time. Evolve it.
Do you understand that in your bones?
I have a native iPhone application in development which requires me to interact with a server that uses a stateful protocol over a persistent connection to transfer messages over the wire. This is definitely not a trivial application to write, even though the UI itself is very simple.
Stateful protocols and persistent connections are often interrelated, but not by design. My first problem was to divide the original problem in two: how to manage the persistent connection, and how to handle the underlying protocol so that the stateful aspects did not bubble up throughout the UI.Read more »
It’s been a while since I’ve
been desparate enough to had a chance to do a nice “what’s in your toolbox” kind of post. In honor of the iPhone 3.0 upgrade, and Steve Jobs’ liver, let’s do an iPhone-toolbox post.
I’m unabashedly happy with my phone, because it’s strengths and weaknesses mesh pretty well with my actual needs. It’s not that great a phone, but I don’t use the phone that much. On the other hand, there’s never been a better gizmo for whiling away a long train commute.
So, here’s some stuff I use:
Instapaper (free light version, $9.99 pro version currently on sale for $4.99)
Instapaper has probably changed my web reading habits more than any other app since I started using RSS readers. It’s so simple that its almost hard to believe how useful it is. When I come across an article on the web I want to save for later, I click a bookmarklet. Later, launching Instapaper on the phone, the article shows up, with the images stripped away, and the text presented in a reader friendly format. (Sometimes you can help Instapaper out by invoking it from the printer-friendly version of a page…)
Using Instapaper has become kind of second nature — I always have a few articles ready to go. The Pro version adds a few nice features, including control of the display font and the ability to scroll the article by tilting the phone. The tilt-scroll sounds like you’ll need to be a gymnast or something to read an article, but in practice it’s a super-clean interface for reading long articles and letting the text scroll at your reading speed. Great app.
Very well designed little app for what seems like a dumb use case — saving drafts of posts intended for Twitter. I mean, how much do you need to polish that tweet about the ham sandwich you had for lunch, amirite?
But, if you are trying to do a tip a day on Twitter (@railsrx), then having a nice place to store up ideas for future tips is great. The app also works as a slightly structured note-taking app, since it can email it’s existing draft population back to you.
Stanza / Kindle (Free)
The two leading general-purpose eBook readers, both of them are easy to use, and manage the task of making text readable on an iPhone. It’d be nice if there was some consistency in formats between the two apps, and also if you could buy books directly from the Kindle App (presumably that’s coming).
MLB At Bat ($9.99)
Obviously only if you are a baseball fan, but the app gives you access to live box score and play-by-play data, live audio stream of radio broadcast, video highlights, special goodies like condensed game videos a few hours after games and, plus live video streaming on a currently limited basis. That’s a lot of stuff. Add in the fact that the app is pretty enough to have won an Apple Design Award, and it’s a pretty fabulous package.
Twitteriffic (Free lite, $3.99 no-ads)
There are something like a zillion Twitter clients on the iPhone at last count, and which one to pick is basically idiosyncratic. It’s a mark of how fast iPhone development is going that Twitteriffic 1.0 won an Apple Design Award in 2008 and was completely blown away by newer clients six months later before regaining strong status with the 2.0 release. I find this has a nice blend of features and interface. (Tweetie, which is my desktop client, is also very good on the iPhone).
Of course, this all sounds serious — the big winners on the iPhone have all been games, there are all kinds of inexpensive, addictive little games I play. Here are a few: Defender Chronicles, The Creeps, Drop 7, Flight Control, Frenzic, Galcon, Peggle, Strategery.
Related Services: iPhone Application Development
Your project is going along fine. After the initial bumps, the team has reached max velocity and is running through story points like there’s no tomorrow. The demos are a success, with the client loving how everything is coming together. Communication between the team members and the client is working well, with enough give and take that all sides feel like they have a genuine stake in the project. In fact, the goal posts are in sight and we’re already scheduling a release plan. And then the client asks for one more feature. Not a tweak of something already built, but a new feature that has to seamlessly incorporate into the application and not look like a last minute add-on.
The initial response? The team to comes to a screeching halt and devolves into something resembling the stages of grief.Read more »
While the meetings out in Elmhurst are always informative and helpful, the downtown location may allow for a bigger crowd, and the weekday time might work better for more people. Plus, the Illinois Technology Association – Tech Nexus is right next to Union Station which works great for people that still have to go out to the suburbs.
There’s too much detail to cover here, but at a high-level, Noel covered:
- The why, how, when, and where questions that make the foundation of a good testing approach
- Testing techniques for legacy projects
- A good review of the different testing frameworks, what their differences are, and some discussion about each (test::unit, shoulda, rspec, cucumber)
- A solid review of different factory tools that go beyond standard fixtures (Factory Girl, Fixture Replacement, Machinist, and Object Daddy)
- Strategies for migrating from Fixtures
- Differences between the mocking frameworks: Flexmock, mocha, rspec, and RR (double ruby)
- Finding the right balance, and avoiding the pitfalls of ‘over mocking’
- Cucumber testing workflow (and where cucumber doesn’t work well)
The audience seemed to have a wide range of experience, but all had opinions to share about what they’ve learned about testing. After the talk everyone seemed fell into small groups to network and exchange ideas and contact info, and a group gathered around Ray and Noel as they tossed around some ideas on potential future meeting topics “Ruby IDE/Editor review”, “Rails Jumpstart”, “Coding Dojo”.
The organizers took a stab at hosting the meeting virtually over gotomeeting (not sure if it was recorded or not).
Their next meeting is scheduled for July 18th, details can be found in their meetup.com group.
A few weeks ago Alice Toth and I had a conversation about how we can better serve our clients, and while we normally delve into project efficiencies like communication, developer training, and good QA practices, this time we both concluded that we need to do a better job of helping our clients reach their goals in the most efficient way possible, and sometimes that means talking them ‘down’ from the specific implementation idea they have, and finding a faster way to get there.
I said that one of our challenges is that sometimes our clients feel they’ve hired us to just ’Mow the Grass’, not discuss the landscape architecture, so we’re not always in a place to be heard when it comes to discussing the fundamentals of a project. Alice wrote a nice post about what ‘Just Mow the Grass’ meant to her, and the strategy she’s devised to find a nice middle ground.
Here’s how I see itRead more »
When you improve a little each day, eventually big things occur. — John Wooden
A few weeks ago I had a discussion with some colleagues on the adoption of Agile within large corporations. The consensus was that Agile was almost always adapted rather than adopted — that is, companies exclude those practices that conflict with corporate culture, modify those that seem too impractical or wasteful, and sometimes substitute those internal practices that seem a decent and familiar substitute.
Various schools of Agile thought have different reactions to this adaptation, all negative. The XP folks particularly don’t like it.
These [thirteen] practices support one another…and thus care should be taken when modifying any of them, or deciding not to include one or more of these practices in a project.
I agree that it definitely helps to follow a particular Agile approach closely in the beginning. Once you have the basics down, you can start to improvise. But it helps knowing the fundamental principle which, in my opinion, underlies all of the agile practices, no matter what the flavor. So, the first three commandments of Agile software development are:
- Feedback loop
- Feedback loop
- Feedback loop