Thursday, April 08, 2010
iPhone presentation
http://groups.google.com/group/jamsessions/web/10-04-07-iphone-os-the-next-killer-platform
A huge thanks goes out to my co-presenter, Bob McCune. The SenateJam demo was a big hit.
Sunday, April 04, 2010
Preparing for DevJam Jam Session iPhone presentation
Wow! Talk about growth. Looking forward to the presentation.
Saturday, April 03, 2010
First impressions of the new iPad
The processor in this device is very fast; the device is very snappy with animations, games, and video. I can see game makers really going after this thing. EA seems to have a couple of games out for the iPad (I tried Scrabble and Need for Speed). Game control was very good for Need for Speed.
Transferring .epub files to your iPad
Tuesday, March 23, 2010
Nice Mercurial tutorial by Joel Spolsky
Friday, March 19, 2010
Mockito's @InjectMocks annotation does reflection-based DI
Tuesday, March 16, 2010
Cool features in Cucumber, part 1
Saturday, March 13, 2010
PeepCode screencast: Use the Cucumber
CoverScout for retrieving iTunes album art
Monday, March 08, 2010
New annotations in mockito 1.8.3
@Captor
This annotation will automatically create typed argument captors (
org.mockito.ArgumentCaptor<T>) in your unit tests. Argument captors are essential in verifying indirect outputs to your mocked collaborators.
public class Test{
@Captor ArgumentCaptor<Foobar> foobarCaptor;
@Before
public void init(){
MockitoAnnotations.init(this);
}
@Test
public void shouldDoSomethingUseful() {
//...
verify(mock.doStuff(foorbarCaptor.capture()));
Foobar capturedFoobar = foobarCaptor.getValue();
assertEquals("foobar", capturedFoobar.getName());
}
}
@InjectMocks
Automatically injects mocks by type using setter injection. Constructor injection is not currently available, but if you want to provide a patch, the mockito team will gladly consider your contribution. I'm actually more interested in reflection-based injection, similar to what Spring uses when annotating dependency fields using @Autowired. Having your unit tests inject dependencies via reflection would help me avoid the set* methods on the implementations. I may have to play with this a bit.
public class FooBarManagerTests {
@Mock private FooDependency mockFoo;
@Mock private BarDependency mockBar;
@InjectMocks private FooBarManager manager = new FooBarManagerImpl();
@Before
public void initMocks() {
// Initializes all mocks and then injects those mocks into the FooManager instance.
MockitoAnnotations.initMocks(this);
}
@Test
public void shouldDoSomething() {
manager.doSomething();
verify(mockFoo).doSomethingToFoo(any(String.class));
verify(mockBar).doSomethingToBar(any(Integer.class));
}
}
Saturday, February 27, 2010
Gerard Meszaros "From Concept to Product Backlog" talk
Friday, February 26, 2010
Adopting Agility with XP, Scrum and Lean Thinking - Powered by RegOnline
Adopting Agility with XP, Scrum and Lean Thinking
Monday, February 08, 2010
DevJam course offerings for February-March 2010
Wednesday, January 13, 2010
IntelliJ IDEA 9 as an Adobe Flex IDE
I can't comment on how it stacks up against Flash Builder 4, but Flex development in IntelliJ is a joy. I'll post more as a I get a chance to use it some more.
Wednesday, December 16, 2009
Are you cultivating your software development expert mind?
I spend a fair amount of time reading books and then applying the reading to personal coding projects. Typically I have used these projects to learn a new technology. Recently I've started working through Dave Thomas's Code Katas. From Dave's Code Kata website:
Code Kata is an attempt to bring this element of practice to software development. A kata is an exercise in karate where you repeat a form many, many times, making little improvements in each. The intent behind code kata is similar. Each is a short exercise (perhaps 30 minutes to an hour long). Some involve programming, and can be coded in many different ways. Some are open ended, and involve thinking about the issues behind programming. These are unlikely to have a single correct answer.
So, again, what are you doing to practice software development?
Friday, November 13, 2009
Not a fan of Apple's new Magic Mouse
Anyone else seeing issues with the basic laser tracking performance?
Wednesday, November 11, 2009
Using argument matchers in EasyMock and mockito
expect(mockObject.retrieveSomething((String) anyObject(), false)).andReturn(someObject);
Unfortunately, EasyMock and mockito do not like this. They both want you to use matchers for all parameters if you use matchers for any parameters. However, the two libraries react quite differently when this situation occurs. EasyMock complains with a somewhat confusing message that at first blush makes it seem like we declared the expectation for multiple invocations. It really threw us off for a while (at least an hour) trying to figure out what was wrong with our expectations. Here is how we fixed it in EasyMock:
expect(mockObject.retrieveSomething((String) anyObject(), eq(false))).andReturn(someObject);
Mockito does a much better job of stating that when you use a parameter argument matcher in your expectation, you have to use parameter argument matchers for all of the parameters of the method call participating in the expectation. I find it interesting that mockito retains the behavior of EasyMock (mockito is a fork of EasyMock) with regards to argument matching, but mockito improves on the error messaging when something goes wrong with the mock object setup. Further reinforces my decision to forego EasyMock in favor of mockito.
Getting a handle on code quality with Sonar
We've been working on getting unit tests built around a legacy code base and Sonar has been a big help in identifying classes that are the biggest code coverage offenders. We used the Clouds feature, a word cloud that weights the class names in the cloud based on code coverage and complexity. The less test coverage on the class and/or the more complex the class, the larger the weight of that class name word in the word cloud. It really helped us focus on where to direct our testing efforts.
I have yet to get this tool up and running in one of my own projects, but things are finally starting to simmer down now with consulting and training activities that I hope to focus on building out a CI environment using Hudson and hooking in Sonar to that environment. Stay tuned.
Tuesday, November 10, 2009
Promoting keystroke use in Eclipse
Here is a screencast of the MouseFeed plugin in action:
Thursday, November 05, 2009
Completed another Test Driven and Refactoring course for DevJam
One area that we will need to work on is the mock objects content. We don't have any hands-on exercises for using mock objects and we heard about it in the reviews of the course. I did walk everyone through a demonstration of using mock objects in your unit tests, but I mis-gauged how much interest the participants had in mock objects and the desire to get their feet wet with mock objects. Some of the class participants stay after the course ended and we did another 40 minutes of live coding demos on the use and features of mock objects (using moq for the mocking framework in .NET).
All in all, an awesome two days for me and hopefully for the course participants.
Tuesday, October 27, 2009
Test Driven and Refactoring class in Chicago
I did have a few participants that actually bowed out after the first day of training. One in particular was very abstinent about not writing tests and really does not believe unit testing and TDD in particular are useful in software development. This person was very much in favor of big design up front. This person's views really threw me for a loop. The group that I gave the training to has significant issues with quality, so the view of testing not worth the effort seemed very ironic in this situation. Needless to say, I was not able to get this person to realize how unit testing and TDD help you in the design process. Oh well, you can't win them all over.
I heard a lot of good feedback around the mock objects example that I demonstrated. In this example, I demonstrated not only behavior verification with the mock objects, but also was able to demonstrate capturing indirect outputs on the mock objects and then verifying the state of these indirect outputs. I used mockito 1.8 for the demo. All in all a great class.
Second Groovy and Grails training in the bag
Wednesday, October 07, 2009
Using the new Groovy-Eclipse V2 plugin
Monday, October 05, 2009
First Groovy and Grails training is in the bag
Don't put developers on an operating system that they don't know for training
The DevJam training has Mac minis which boot either Mac OS X Snow Leopard or Windows Vista (via Bootcamp). I had the systems booted to Mac OS X for the training. Unfortunately all of the developers that came to this training were unfamiliar with Mac OS X, but willing to try it. Bad move on my part. I ended up answering far too many questions on the operating system and which tools were were going to use. Oracle SQL Developer also gave me problems in the Mac OS X environment when trying to update the tool with the MySQL drivers through its software updating system.If you think you have enough code examples, you don't!
I had about 10-12 Groovy code examples to demonstrate various features of the language. Far too few for the questions that cropped up. Luckily, it was Groovy and writing new code examples or changing existing code examples was pretty straightforward. Kudos to Groovy for being very easy to explore and play with. The participants thought very highly of the interactiveness of the coding during the session.
Don't try to do both Groovy and Grails in a single day.
I knew going in that doing both was going to be very difficult. I just didn't realize how difficult it would be. Again, due to operating system and tool snafus, I didn't finish up the Groovy stuff until well into the afternoon. Not much time for Grails. I was looking forward to the exercise in Grails and we didn't get very far with it.
Automate the packaging of the student materials in electronic format.
We decided to put all the training handouts, examples, and anything else helpful for the students on 4 GB flash drives and give the flash drives to the students to keep. That's good. What's not good is missing some things on the flash drive and updating flash drives during the course. Next time I'll use an Ant build script to build a distribution and clean out any Subversion metadata from the student materials.
The Groovy Eclipse plugin seems to be making headway.
One of the participants in the group, Nick Spilman, had his laptop along and was using Eclipse Galileo and the new Groovy Eclipse plugin during the Groovy portion of the training. He thought it worked well with Groovy. I used IntelliJ 9.0 EAP (Maia) and that also works well. Looks like SpringSource (or shall I say VMware now) is getting serious on the tooling for Groovy and Grails.
Need to spend more time on understanding Groovy's meta-programming facilities.
It's one thing to use Groovy and use its meta-programming faclities (aka MOP) successfully in your own work. It is a far different thing to try and teach others about Groovy's meta-programming facilities. Teaching a concept, especially a concept as complicated as meta-programming, is extremely difficult.
Performing test runs of presentations and trainings is essential.
I'm very pleased that I was afforded the opportunity to be able to offer a couple of test runs of this training to some developers before offering it to the public. Like anything else, it takes practice and feedback to get good at something. I have another test run of this training later this month and I'm sure it will be much better than it was the first time out.
Saturday, September 26, 2009
ColorSchemeDesigner.com
Monday, September 21, 2009
Video conversion with HandBrake
Thursday, September 17, 2009
Is Spring Framework becoming a configuration nightmare?
Tuesday, September 15, 2009
Keeping traceroute/tracepath by my side these days
Monday, September 07, 2009
Snow Leopard ships with Subversion 1.6.5 support
Thursday, September 03, 2009
Snow Leopard installation frees up a ton of disk space
.NET thread local storage implementation kicks my butt
From Microsoft:
The .NET Framework provides two mechanisms for using thread local storage (TLS): thread-relative static fields (that is, fields that are marked with the ThreadStaticAttribute attribute) and data slots. Thread-relative static fields provide much better performance than data slots, and enable compile-time type checking. For more information about using TLS, see Thread Local Storage: Thread-Relative Static Fields and Data Slots. (http://msdn.microsoft.com/en-us/library/system.threading.thread.allocatenameddataslot.aspx)
Monday, August 31, 2009
Mac Pro upgraded to Snow Leopard
Tuesday, August 18, 2009
Know your SUT and your mocks
Wednesday, August 12, 2009
My top 5 favorite Mac OS X apps/tools/utilities
- Google Quick Search Box/Quicksilver: I was a big fan of Quicksilver, but it seems to be dead. Sounds like the Quicksilver developer is now working with/for Google on something similar: Google Quick Search Box (QSB). Love QSB and it seems to be in active development too.
- iTerm: Gotta have a command line. This one does tabbed terminal consoles.
- TextMate: Great programmer's editor.
- Versions: A good Subversion client for OS X.
- Growl: Notification system. Extremely helpful.
Sunday, June 21, 2009
First reactions to Xcode 3.1.3
Thursday, May 14, 2009
Learn IDE key mappings while pair programming
I've been doing a fair amount of pair programming lately on my current gig, a good thing. One behavior that we have been practicing while pair programming is gently forcing the driver of the pair to use keymappings to activate various actions within the IDE. Neal Ford describes this in his book The Productive Programmer. Practicing this behavior while pair programming has proven very valuable to increasing our productivity while in the code base. Neal mentions the KeyPromoter plugin for IntelliJ; I've tried this plugin and I haven't become a big fan of it. Much easier if your navigator keeps you honest.
I've done this before with pair programming while working at Identix in 2004 with Hans Loedolff. Hans knew all the IntelliJ keymappings and could type at about 90 words per minute. He was an excellent pair programmmer.
nmon performance monitoring tool
Wednesday, May 13, 2009
Tomcat Expert Series here in Minneapolis
Friday, April 24, 2009
Adding GNOME to Ubuntu Server
Update your package system.
sudo apt-get update
Install the Ubuntu desktop package. This package seems to be a super package containing many package dependencies. It literally downloaded about 1.7 GB of software. Gdm is part of this install, so you don't have to do an individual install of that after the fact.
sudo apt-get install ubuntu-desktop
Gdm automatically starts the X system during bootup. To configure it to start, do the following:
sudo /etc/init.d/gdm start
You may need to reconfigure your video card, keyboard, etc. To do so, do the following:
sudo dpkg-reconfigure xserver-xorg
Thursday, April 23, 2009
Installing VMware Tools on Ubuntu Server
Saturday, April 11, 2009
Excellent Digg Dialogg with Trent Reznor
Sunday, April 05, 2009
Embedded domain components in Grails
The embedded component feature of Grails is not documented very well, in my opinion. Therefore, I thought I would create a blog entry so others don't have to spend the time trying to experiment with it to get it to work.
I recently spent some time working on a home project that I have implemented in Grails 1.1. Grails has a feature for embedding domain components into other domain classes. An embedded component participates in the domain class mapping to a database table; there is no join to an child embedded component table. In my domain object model, a TimeRecord is a domain component suitable for embedding. It doesn't live on its own, but is meant to be embedded as a reusable component throughout my domain object model. Grails has first-class support for embedded components, though it took me a bit of time to figure out how to get it to work. First the definition of the TimeRecord class:
class TimeRecord {
TimeRecordUnits units
BigDecimal value
static constraints = {
units(nullable: false)
value(nullable: false)
}
}
Nothing earth-shattering here. The reference to TimeRecordUnits is a Groovy enum. The TimeRecord class is not meant to be mapped to its own table in the database; it will become part of any domain object's table mapping whenever it is embedded in that domain object class. Thus, the TimeRecord class definition needs to reside inside some other domain object's Groovy file. Strange behavior, even for convention over configuration, but it does work.
Now embed the TimeRecord in another domain object class and that domain object's table mapping will also have TimeRecord properties mapped to it. Here is my Story class that has a TimeRecord contained in it:
class Story {
TimeRecord estimate
static embedded = ['estimate']
}
I've removed other Story properties to focus on the embedded component mapping. Grails has a static property named embedded that specifies the component object property that should participate as an embedded association. That's it. I put the TimeRecord definition in the Story.groovy file, directly after the Story definition. Everything maps correctly to the database and I don't get an extraneous time_record table being generated by GORM. Pretty cool.
I must say that domain object modeling in Grails is much, MUCH faster than it is in Java with Hibernate. I'm at least an order of magnitude faster with GORM in Grails than I was in Java and Hibernate. I'm hooked on Grails convention over configuration theme.
Powered by Zoundry Raven
Sunday, March 22, 2009
Grails domain object modeling with Groovy enums
Sunday, March 08, 2009
Having another look at Grails
I'm now building a sample application in Grails 1.0.4 and doing all the AJAX stuff in jQuery. I'm really impressed with Grails now! It's so much more productive than I remember it. Also, I have a couple of books that have been absolutely essential to getting me going with Grails again: The Definitive Guide to Grails, Second Edition and Groovy and Grails Recipes. I'm using IntelliJ IDEA 8.1 for all my development and its Groovy and Grails support is much better than I remember it. JetBrains really makes it easy to give them money every year for a personal license upgrade for IntelliJ.
I haven't been super pleased with the Grails documentation on the Grails site and hopefully SpringSource has a positive effect on this issue in the near future. My development has been plowing ahead very nicely. I really like that I don't have to restart the application server for every little change. That saves a ton of time and has a positive effect on your ability to stay focused on job at hand. Very impressed with Grails this time around.
Thursday, March 05, 2009
The amazing effect of Apple's iPhone platform and the App Store
Tuesday, March 03, 2009
IntelliJ's support for @AspectJ pointcuts in Spring 2.x AOP
Thursday, February 26, 2009
Versions, a native Mac OS X Subversion client
Tuesday, February 17, 2009
Google Sync for the iPhone
http://www.google.com/mobile/apple/sync.html
I immediately set this up on my iPhone and it works great.
Monday, February 16, 2009
Interesting Microsoft Research paper on the efficiency and effectiveness of TDD
From cLabs Blogki:
http://research.microsoft.com/en-us/projects/esm/nagappan_tdd.pdf
Case studies done on 4 development teams (three at Microsoft, one at IBM) that have adopted TDD. Results of the case studies indicate that the pre-release defect density of the four products decreased between 40% and 90% relative to similar projects tha tdid not use the TDD practice. The teams subjectively said that they experienced a 15-35% increase in initial development time after adopting TDD. Very interesting paper.
Powered by Zoundry Raven
Sunday, February 08, 2009
TED iPhone app is very cool
I seemed to have missed the release of the TED iPhone application. If you're into TED, the iPhone app is done very well and the video quality is great. You can download it from the App Store.
Powered by Zoundry Raven
jQuery resources, tutorials, tips
If you're into jQuery, this blog entry has a plethora of jQuery resources, tips, tricks, and tutorials.
Powered by Zoundry Raven
Saturday, January 31, 2009
Thursday, January 29, 2009
Managing stories electronically
I've been involved in this agile project at my client for some time and for the past three months or so I've been working in a group that favors a low fidelity mechanism for managing their stories--Post-It notes on a board. The stories, tasks, and acceptance tests are all written on Post-It notes. We are required to keep the stories and tasks in Team Foundation Server (TFS) also, but the group manages the iteration's work from the Post-It notes. The TFS eScrum template is not a particular good system for managing stories and tasks, so we tend to stick to the low fidelity method.
I really dislike this behavior. The Post-It notes are difficult to keep stuck to anything for the entire iteration. They drop off the board and mysteriously get lost. The Post-It notes are typically written in many different handwritings. There's no consistency in display of stories and tasks. Some of the Post-It notes are almost unreadable. The format of the Post-It notes is not consistent. It's difficult to write much on a single Post-It note. Reporting, well...
I'm a big believer in managing your stories and tasks electronically. Use the Post-It notes during iteration planning to facilitate teamwork and collaboration, but don't leave the stories, acceptance tests and tasks in that form for any amount of time. Get them into a tracking system that allows you to easily manage the stories and tasks for the iteration. I'm a big believer of a dashboard view that gives you a high level overview of all the iterations stories and their progress in a single view.
Powered by Zoundry Raven
Sunday, January 25, 2009
Follow up on keeping fake objects simple
The Google Testing Blog has an a very timely article about keeping your fake object implemenations simple. I previously blogged about this issue. It's nice to see others have seen similar issues with the fake object test double.
Powered by Zoundry Raven
Saturday, January 24, 2009
Programming vibration on the iPhone
Measuring value during an iteration
Now I'm wondering what value these charts actually provide. If management is interested in seeing that people are busy working and completing tasks, then these charts are spot on. They definitely will show the amount of work completed during the iteration and when it's completed. But really, is that metric all that important? I tend to say no. One issue off the top of my head that I have seen happen in our group is the completion of tasks on stories, but not fully completing the stories. For whatever reason, our user stories are drifting from one iteration to the next, never reaching the point of completion. Therefore, I conclude that we're keeping ourselves busy, but not adding any value to the overall product.
I want to know how much value I have built into the product. To measure that quantitatively, you need to measure user story burn-up. If you measure user story burn-up, you will focus the development team on completing stories. I think the emphasis needs to be on the user story; the task is a planning construct that just helps us decompose the story into units of development that can be worked on concurrently by a number of developer pairs. I don't know if I really care about task estimates anymore either. I'm drifting towards estimating at the user story level only.
Friday, January 23, 2009
Using ArgumentMatcher to capture indirect output arguments
The importance of grooming the story backlog
I'm a big believer in grooming the backlog while developers are working on the current iteration's stories; streamline your process by getting more things completed concurrently. The coach and one or more of the testers get together with the customer and determine which features the customer would like to focus on in the next iteration. If you need technical expertise, add the tech lead to this group. Use the release backlog to jumpstart this conversation with candidate stories. Fill out the details of this group of candidate stories for the next iteration. This meeting between coach, testers, and customer focus on the feature details and the acceptance tests. When you try to do this during iteration planning, there tends to be too many people and the conversation becomes chaotic.
Try to solidify your stories and acceptance tests well ahead of the iteration planning meeting. Send out the stories and the accompanying acceptance tests to the rest of group before the iteration planning meeting. Now the participants of the upcoming iteration planning can prepare off-line before the meeting.
Thursday, January 22, 2009
Using assertions within your mockito ArgumentMatcher implementations
Today, I was having a conversation with a co-worker of mine, Ryan Anderson, about the use of the ArgumentMatcher. Ryan wondered if one could use JUnit assertions within the matches method implementation and just return true if all of the assertions passed; failed assertions will not reach the return statement. Indeed, you can use assertions in the ArgumentMatcher implementation. JUnit assertions actually throw an instance of java.lang.AssertionError, thus your stack trace will show exactly which assertion within the ArgumentMatcher failed. Much better using the assertions than testing and returning a boolean value. Might be helpful for your testing efforts.
Wednesday, January 21, 2009
Taking fake objects too far
Monday, January 19, 2009
Interface Builder: Remember to hook up the view to the ViewController's FileOwner view outlet
UPDATE on February 3, 2009: Bill Dudney has seen this phenomenon in his trainings and blogs about it here, with screenshots.
Wednesday, January 14, 2009
Google's Quick Search Box for the Mac
Tuesday, January 13, 2009
Beginning iPhone Development book
Interesting unit testing thoughts from Michael Feathers
All of these techniques have been shown to increase quality. And, if we look closely we can see why: all of them force us to reflect on our code. That’s the magic, and it’s why unit testing works also. When you write unit tests, TDD-style or after your development, you scrutinize, you think, and often you prevent problems without even encountering a test failure.
I've been thinking more and more about my own testing behaviors these days, especially with my endeavors of teaching TDD and mentoring other developers on unit testing and the use of mock objects.
Thursday, January 08, 2009
.NET Base Class Library types not friendly to mocking with MoQ
Thursday, January 01, 2009
Now deploying my development app to my iPhone 3G device
Wednesday, December 31, 2008
Regular expressions in Cocoa using NSPredicate
http://sites.google.com/a/pintailconsultingllc.com/objective-c-and-cocoa/Home/nspredicate-examples
I even cracked open my "Mastering Regular Expressions" book tonight. Excellent tome on all things regular expression. Highly recommended.
Tuesday, December 23, 2008
Can't login to the Apple iPhone Dev Connection
Saturday, December 20, 2008
Using Subversion from Xcode 3.1.1
Other than that little gotcha, the Subversion support within Xcode is pretty good. I think I prefer how the Java IDEs have it implemented (Eclipse and IntelliJ IDEA). Those tools make the SCM interactions much more seamless. In Xcode, it seems kinda off to the side. I'd really like key mappings for Commit Entire Project... and Update Entire Project. I'll have to look into that and see if that's possible.
Friday, December 05, 2008
EclEmma, a code coverage plugin for Eclipse
Thursday, November 27, 2008
iPhone development fun
Apache Ivy...cool concept, but terrible out of box experience
Monday, October 13, 2008
Line numbers in Java exception stack traces
http://sahyog.blogspot.com/2008/02/line-numbers-in-java-exception-stack.html
Good information about the javac task in Ant. I did not know about the debuglevel option.
Wednesday, October 08, 2008
Custom argument matching with Mockito
Saturday, October 04, 2008
Updated my Mockito example
http://sites.google.com/a/pintailconsultingllc.com/java/mockito-examples
Thursday, September 18, 2008
Using Rhino Mocks wiki entry
My first foray into unit testing with a mocking framework in .NET. Rhino Mocks has a very similar feel to EasyMock in the Java world.
Copy Source as HTML Visual Studio 2008 Addin
Using Rhino Mocks with MS Test
Thursday, September 11, 2008
Implementing object identity when using Hibernate
http://www.onjava.com/pub/a/onjava/2006/09/13/dont-let-hibernate-steal-your-identity.html
Friday, September 05, 2008
jMock example is now up
Of the three mocking frameworks that I've now briefly looked at, I'm most impressed with jMock. I just like the simplicity and feel of it. Very easy to use and I really like it's expectations implementation. I've started building out a sample Spring MVC web app which I will drive with TDD and mock object usage, utilizing jMock for object mocking. So far so good. I'll post more when I get the chance.
Wednesday, September 03, 2008
Custom JSP 2.0 tags example is now up
I had a need to create a view helper for a web view that I was building, so I did a small spike solution on JSP 2.0 tags. They seem much easier to write than they were previously (I haven't written one in many years). I thought I'd put it up on the wiki for others to use. Hopefully it proves useful. This example is done using Spring MVC as the web framework. Nothing special needed to integrate the JSP 2.0 tag into the Spring MVC web app.
Sunday, August 31, 2008
Mockito example is now up
Same set of classes as the EasyMock demo. Not much difference between EasyMock and Mockito, at least not yet. Mockito probably is a bit easy to use (no replay method to be invoked before testing).
EasyMock example
http://sites.google.com/a/pintailconsultingllc.com/java/easymock-examples
Pretty simple but gets the point across on how to get started with EasyMock. Mockito examples are forthcoming.
Tuesday, August 12, 2008
Teaching programming with Python
Saturday, June 28, 2008
JavaScript apps with SproutCore
Sunday, June 22, 2008
Valuing simplicity
I value simplicity. A lot. That's why I think I like my Mac so well, after working with Windows and Linux. I like Windows because it's familiar, but there are so many options, and the options seem to change in every Windows release. The reliability of Windows also is a concern. Linux just isn't simple...it's not designed to be simple nor do it want to be. That's good for some situations, but terrible if you want to appeal to the masses. The Mac and other Apple products appeal to the masses due to simple by stylish designs.
I'm not finding all this AJAX, JavaScript, and DOM manipulation simple in design. It's quite the opposite. It's seems very messy and chaotic using HTML, CSS, and JavaScript for building web applications. And the interfaces that are being built still pale in comparison to rich applications. Hopefully things get better over time with the RiA technologies (Flex/Flash, Silverlight, etc.).
Extra-lazy collection fetching in Hibernate
http://sites.google.com/a/pintailconsultingllc.com/java/hibernate-extra-lazy-collection-fetching
For small lists, I would recommend not using this functionality, as every item is a SQL call to the database. For a large list or child objects which are expensive to create, this might be just what you're looking for. It took me a while to get the list semantics to work properly. The @IndexedCollection is very important. I have not played with a map collection yet, but in theory that collection should work similarly.
Tuesday, June 17, 2008
Hall monitor tests
Monday, June 16, 2008
kuler - Adobe's fabulous color picker/theme organizer tool
http://kuler.adobe.com/
Friday, May 23, 2008
A rabbit killed my Internet connection
The Comcast technical support person stopped out a couple of days ago and inspected everything. He said he'd like blame it on the irrigation guys too because then they can bill the irrigation guys for the work and materials to fix it. Nope, the insulation on the coaxial cable was nibbled away very close to the house, two sections, each of about 2 inches in length. The Internet connection has been restored and the Comcast guy put some electrical conduit around the cable where it comes out of the ground and into the house to deter the rabbits from doing this again.
Monday, May 05, 2008
Understanding Flash window modes for embedding HTML rendering in Flex app
http://www.communitymx.com/content/article.cfm?cid=e5141
http://ccgi.arutherford.plus.com/blog/wordpress/?page_id=171
http://ccgi.arutherford.plus.com/blog/wordpress/?p=173
http://ccgi.arutherford.plus.com/blog/wordpress/?p=133
http://www.deitte.com/archives/2007/09/html_in_flex_wi.htm
Sunday, May 04, 2008
Getting Hibernate to format generated SQL
Saturday, April 26, 2008
flexcover: A code coverage tool for Adobe Flex
Understanding Flex transport protocols
http://www.jamesward.org/census/ (Source code here)
Very well done and quite informative.
Sunday, April 13, 2008
First Flex app up and running with BlazeDS
Saturday, April 12, 2008
Silverlight 2.0 does have unit testing
http://www.jeff.wilcox.name/2008/03/31/silverlight2-unit-testing/
Excellent tutorial on Cairngorm framework
http://www.davidtucker.net/category/cairngorm/
Tuesday, April 08, 2008
MSTest tools don't seem to work with Silverlight 2.0 projects
Friday, March 21, 2008
Sonos ZoneBridge now installed
Sonos Music System up and running
BTW, I also purchased a Zone Bridge from Sonos, but have not connected that to the network yet. I post more when I get that online.
