Monday, June 07, 2010
This weekend I was humbled and honored to be part of Philly GiveCamp at the Microsoft office in Malvern, PA. I had never been to a GiveCamp before, and didn’t know what to expect. Initially, I envisioned getting together with other talented, passionate developers and try to build an app in a weekend. As I heard some reports from other GiveCamps that much of the work would involve helping non-profits set up content-managed and/or static web sites,I started to realize that I might be thinking about it the wrong way. I reminded myself that it was, after all, a community service and I shouldn’t go into it expecting it to be a geek playground! It’s not always easy for a stubborn, opinionated fellow like myself, but I resolved to keep an open and optimistic outlook, and provide whatever help I could, wherever I was needed. The result was an absolute eye-opening and moving experience which I am incredibly thankful to have been involved.
Almost as soon as my friend, Erik, and I walked in, Dani Diaz (who did a fantastic job of lining up volunteers and charities) approached us and said he had the perfect project for us. He was speaking really quickly because he was scrambling all over trying to organize teams, but I heard the project would help autistic children and he was mentioning all sorts of cool technologies - things like Ruby, Rails, ASP.NET MVC, iPhone, and Windows Phone 7. When Dani stopped to take a breath, I said “we’re on it! Show us where to go!”
The team we joined was already well into a discussion about the project, and it took us a little while (and some Q&A) to catch up. The project was for the Mission for Educating Children with Autism (MECA), specifically their new “Preparing Adolescents for Adult Life” (PAAL) program. We learned that we’d be making an application for handheld devices that would help kids with autism to be more independent. The app would provide simple schedules and instructions to perform daily activities, like brushing their teeth and preparing lunch. What really served to inspire us early on was watching a video of Lizzie (pictured here) using one of these
applications to make herself a salad for lunch (UPDATE: Lizzie's mom shared a link to the video we watched in the comments below!). We were all moved and engaged by this project from the onset, and it only became more clear over the course of the weekend just how much a difference this seemingly simple tool would make to the lives of autistic children and their families.
The project was split up into three main components – a web application for preparing and maintaining the schedules and instructions for the kids, a ReST API for interacting with the data and assets, and an iPhone application that would be used by the kids themselves for viewing their daily schedules, and walking through their days. Avi, Kaori, and Gloria from MECA were amazing throughout the process – one of them was always there for support, and they brought two of their students, Nicky (UPDATE: Here is some video of Nicky working out at the Gym with the aid of a mobile device!) and Lizzie, in to meet us which was really inspiring. Many people contributed to the progress we made – Trevor Lalish-Menagh and Jamie Ly were the primary developers and designers of the API, Joe Fritz, Kosal Sen (who also designed the awesome new logo for PAAL above), and Jon Falkner designed and built the web app, and Sebastian Meine, Erik Peterson, and I worked on the iPhone app.
I became the main iPhone developer by default, because I had done a couple demo apps and happened to have the iPhone SDK, and more importantly, the awesome MonoTouch, installed on my Mac. We had determined that to meet the varying needs of the children who would be using it, we had to create a native application that could seamlessly navigate the steps, display images, text, and play audio and possibly video. It was a bit daunting since we had very little combined iPhone and mobile development, but we dove in and by demo time at noon on Sunday, we had a pretty robust prototype that could read in and store data from the API, and walk the students through their activities. Take a look at the screenshot for an example of a single instructional step.
We didn’t leave the weekend with a fully functional system for the PAAL program, but we are close, and we are all determined to finish it for them. The demo on Sunday was really heart-warming – the people from MECA were clearly moved and inspired by the work of the team, and we were equally inspired by the encouragement and appreciation we received from MECA and so many people in attendance. The significance of our work really became clear when other attendees who knew and/or worked with autistic children told us what a huge help an application like this would be.
The GiveCamp experience really helped to remind me that if you approach anything with good intentions and an open mind, you will most likely contribute something meaningful, and you will always come away a better person for doing so! Thanks to everyone involved, and especially Dani for making it all happen.
Friday, May 14, 2010
About a week ago, I had the opportunity to attend Eric Evans' four day "Domain Driven Design Hands-On Immersion" course. It was a great experience - a well-designed course, and a very interactive environment where you really got a chance to get your questions answered. Our group was only 8 people, and Eric mentioned that he limits every course to a maximum of 12 students to keep it as interactive as possible.
Each day of the course is broken up into short segments. Typically, Eric would give a short lecture to introduce a topic, and then we would split off into groups to do some exercises that would help illuminate that topic. There were frequent short breaks between segments, which really helped to keep us fresh and engaged, and gave some time for anyone with additional questions to speak with Eric or other students.
The exercises are very effective - they never seemed too long or cumbersome that people got frustrated or stuck; but they were not obvious or tedious. There was always some new insight to be gained, even if it was different for each group. Eric actively assists the groups during exercises, whether helping us work through a coding exercise, or acting as "domain expert" when we were trying to brainstorm the domain model on a white board. They are also carefully designed such that everyone starts at a common point for each exercise, even if they didn’t get as far as another group during a previous exercise. Each code exercise, for example, was its own separate project with everyone starting from the same fresh code base, and only a small, focused change that each team needed to figure out.
The theme of the course follows the shipping industry example from Eric’s Domain Driven Design*. The students act as DDD consultants who are trying to help "Peerless Shipping" work out a domain model for their systems. We start with a very small bit of information, and through conversations, brainstorming, and code spikes, come up with a working model. Throughout the course that model is challenged and changed as new information emerges or new scenarios expose weaknesses or gaps in the model.
Eric has put a lot of work (and from what I gathered, incorporated a lot of feedback from others) into the course design, and it really makes for a great learning experience. Eric is a great teacher as well - he is very easy to talk to and very thorough when answering questions or elaborating on a topic. Unlike some trainings and courses I’ve experienced, I don’t think anyone left this course without a very solid understanding of how they can better pursue DDD in their own environments.
If you’ve seen the value in DDD, but struggled to fully understand and apply the concepts by reading the book (or let’s be honest, maybe you’ve struggled to make it through the book – it can be challenging) this class is a great way to really solidify the ideas in your mind, and learn some techniques for applying them in the real world.
Eric is holding another “Immersion” course in New York in late September 2010, with early bird pricing available until August 27th. For more details, and information on other available training, check out the Domain Language website.
You can also find a very thorough review of the course material at Paul Rayner's blog.
* The cheapest way I’ve found to get Eric’s DDD book is to use Philly ALT.NET’s user group discount for Pearson Education. As of today, that price is $45.49 compared to $54.59 on Amazon.
Friday, April 09, 2010
There was some last minute confusion about which location of The Hub would be hosting Udi Dahan’s Advanced Distributed Systems Design course next week. If you haven’t registered, it’s sold out, so this probably doesn’t apply to you! I thought I’d put up this post to help people find their way around (hey, I gotta use this blog for SOMETHING right?). The actual location of the course is at the Cira Centre, by 30th Street Station (they are connected by a walkway, so you can easily get back and forth):
The Hub Cira Centre
2929 Arch Street
Mezzanine Level
Philadelphia, PA 19104
We will be in the “Propel” room. For any folks who booked hotels based on the originally presumed location, at 30 South 17th St, you have several options for getting from center city over to the Cira Centre:
- By Car: The Hub has more information about parking and commuting by car on their site.
- Walk: It’s an easy, safe walk down some of the main roads in center city. It will probably take you 15-20 minutes, but if the weather’s nice, why not?
- Take the Train or Subway: The train/regional rail would be my recommendation, getting on at Suburban Staion and going one stop to 30th St. Station. It is actually underground downtown, so it’s similar to the subway, but there are a couple advantages:
- All trains go through center city, so there are tons of options, and you’ll likely never have to wait more than 10-15 minutes.
- The stop at 30th St. Station puts you inside the station, and right near the walkway over to the Cira Centre.
- It’s a 4 minute ride from Suburban Station
- In my experience, they never check tickets between the downtown stations because the stops are too close together and too busy. So, you likely can ride for free if you’re feeling plucky. Bring some cash, in case for some reason they do check – you can pay on the train for an added fee, or just play the confused tourist part, and buy a ticket the next time. Alternately, if you are of pure heart, you could just buy a weekly TransPass at the ticket counter at either station, and have full access all week to trains, subways, and buses.
Should you take the train, be sure you get on in the right direction. If you find yourself at Market East Station, coming above ground at any point, hop off and catch another train to 30th St. Station. Here is a list of the train lines you can use:
Westbound – From Suburban Station to 30th St:
- R8 Chestnut Hill West
- R7 Trenton
- R6 Cynwyd
- R5 Thorndale
- R3 Elwyn
- R2 Newark
- R1 Airport
Eastbound – From 30th St. Station to Suburban
- R8 Fox Chase
- R7 Chestnut Hill East
- R5 Doylestown
- R3 West Trenton
- R2 Warminster
- R1 Glenside
You can find more information on SEPTA’s Regional Rail site, and there is also a very nice 3rd Party schedule site http://isepta.org that will help you find the next trains for any route.
If you will be here on Saturday, feel free to take the train out to Philly.NET Code Camp! I can probably arrange a ride from the Ft. Washington station to the venue for you – just contact me using the info in Udi’s email.
The user group I run, Philly ALT.NET, will be having a social pub night right across the street from 30th St. Station on Wednesday, April 14th, you should definitely swing by – please RSVP for head count – the event is free, but you pay for your own drinks/food.
Wednesday, August 05, 2009
Bit of a late notice, but
Jeffrey Palermo is in town tonight unexpectedly and is interested in having a casual tech dinner meetup with us locals. We will be meeting for dinner at
Q restaurant in Old City, Philly at 6:30 PM. All are welcome, bring your questions or .NET topic ideas and your appetite!
Please RSVP if you plan on attending:
http://palermo.eventbrite.com
Friday, June 19, 2009
In February of last year, I posted my thoughts on current MVC abstractions in Rails, and .NET, and how I felt that Controllers were really just glorified namespaces, where related action methods sit. This leads to a lot of pain in separating concerns, routing flexibility, action reuse, etc. In JP Boodhoo's course (the first time I got to attend, in October 2007) he showed a simple example of a "FrontController" model where a single application controller handled all requests and routed them to an appropriate command object. In that scenario, "Actions" are separate classes, and therefore become first-class citizens. This really appealed to my Object-Oriented aesthetic, because if a Class is supposed to be a cohesive unit, even the most cohesive Controllers are only bound by the "resource" they represent, such as a ProductController and its associated CRUD actions. Each action on a controller can (and often does) have its own set of dependencies and concerns. Why not just group by folder or namespace or some other way of grouping related Action classes, rather than as methods on a controller?
Recently, several folks that are smarter than myself have started thinking about this. I first noticed Jimmy Bogard making a few comments on Twitter about it that echoed my thoughts very closely. Then, this ringing endorsement from Jimmy must have prompted Chad Myers to write a nice summary of the idea on his blog.
I’m really looking forward to what the community comes up with here, and hopefully I may even be able to contribute something. FubuMVC, Chad and Jeremy Miller's (and other contributors now) open source MVC framework has a lot of incredible ideas in it, though it’s still in progress, and perhaps too architecturally advanced for even the mainstream ALT.NET community (there are a lot of advanced C# techniques and some very academic-sounding naming strategies that I could see frightening away all but the most ambitious of programmers/teams). I’ve been toying with the idea of building my own controller-less framework, and have taken a couple stabs, and often used FubuMVC as a reference for some pieces. So far, I haven’t really fleshed out my ideas to be useful enough for anyone else though.
What I had come to believe is that unlike JP’s model (at least as I last saw it in November 2008), it seemed that mapping a request to one action was still not an optimal abstraction. I based this on two basic scenarios, though I’m sure there are more. First, requests with the same url and/or post data may require different responses dependent on whether the client was a browser, a mobile browser, an API call (expecting JSON/XML), etc. In this scenario, you could use the same command to return the ViewModel data, but any number of "Response Commands" could be used to render the data in the appropriate way for the client. Secondly, there may be distinct view logic that needs to occur, for example, when rendering a view for a browser, permissions, localization, and other user-specific customization may need to occur, where as returning pure data to an API call may not require any of that logic. It seems to me if you include all this rendering knowledge along with the actual "business" of the request into a single command, you’ve only taken a baby step beyond the Controller/Action paradigm.
In Chad’s post (read it now, if you haven’t yet!) he talks about mapping requests to a group of commands, or command chain. This takes my idea of separate Request and Response commands a step further, and I think it is probably a better idea, and could open up a huge opportunity for very succinct commands that are triggered by a request, of which some could be asynchronous, synchronous, etc.
I’ll be watching this closely as it progresses, and hope that we can make writing web apps easier, cleaner, and more testable for all of us soon!
Thursday, June 11, 2009
Last night, we held our 4th and final (for now) workshop in our Foundation Series. The response from the community has been fantastic, and we averaged almost 40 developers at every session! I received a ton of help in putting this series together, and I’d like to thank some of the folks that were involved. If I miss anyone, feel free to slam me in the comments :)
- Dani Diaz - Our local Microsoft Developer Evangelist. Dani’s a huge supporter of our group, offering ideas, encouragement, and sponsorship for several of our meetings and workshops. (@danidiaz)
- Bill Wolff - Leader of Philly.NET - our huge Microsoft User Group. Without Bill’s inclusion of Philly ALT.NET in Philly.NET events, Code Camp, etc, we never would have met the number of developers we have, or even conceived of the Foundation Series. All the Philly.NET leadership (Andy Schwam, Marc Ziss, to name just a couple) have been incredibly helpful and generous with their support. (@billjwolff, @schwammy)
- Bob Bunson, Steve Eichert, Brian Frantz, Jon Graves, Erik Peterson - These longtime Philly ALT.NET members took the time to develop content and lead sessions during the Foundation Series. They did the bulk of the hard work of making this series happen (@steveeichert, @cerikpete, @jon_graves)!
- John Pharo - As our "Chief Swag Officer," John has been getting some great books and other giveaways for our meetings which takes a good bit of effort off my plate. In addition, he’s a dedicated, core member, actively involved in planning, and coming up with ideas for the group.
- The rest of the Philly ALT.NET and Philly.NET community for your questions, suggestions, and feedback that led to creating this series and giving us ideas for many other events we hope to bring to fruition in the future!
Philly ALT.NET will be slowing down over the summer. We’ll likely get together for a pub night or similar social gathering to review the year so far and talk about what we want to do next. Follow our discussion list (web | email) to be notified of any future events.
In the meantime, your feedback is incredibly important to the future direction of the group, so we’ve set up two suggestion/feedback sites on UserVoice.com to hear your thoughts. Please, please take a minute to submit ideas or vote on suggestions!! You can do so anonymously, or register so we know who you are.
Use the site below to comment on the Foundation Series - what you found most valuable, what wasn’t as valuable, what you wished has been included, etc. We will use this to not only revise the content for any future presentations of the 4 sessions, but possibly we will create new sessions based on your feedback:
http://foundationseries.uservoice.com
For general Philly ALT.NET feedback/suggestions, use the following site. Here is where you can give any feedback on events, past or future. Suggests topics you would like to see covered, workshops or tutorials, volunteer to speak/help, or suggest anything related to the .NET software community that you think we could help out with. Definitely take a minute to vote on the ideas that are already posted there!
http://phillyaltnet.uservoice.com
This has been a great year so far for us, and I look forward to pushing the envelope even farther in the second half of the year. Thanks to everyone for your dedication to growing a strong community of software developers that are always striving to improve and help each other do the same!
Tuesday, June 02, 2009
Scott Bellware is in town holding two workshops, and has graciously offered to speak to the Philly ALT.NET group on Wednesday night at Indy Hall’s "Classic" location. Scott is a dynamic speaker with a huge amount of knowledge in this area - you won’t want to miss it!
Register now (free)! http://tddmvc.eventbrite.com
Test Driven Web Development with Model-View-Controller
(But maybe not ASP.NET MVC!)
Scott Bellware
Wednesday, June 3rd, 2009
6:30 PM - 9:00 PM
Indy Hall "Classic"
Second Floor
32 Strawberry Street
Philadelphia, PA 19106
(map)
6:30 PM - Greetings and Eatings (Hopefully - need a food sponsor! Email me!)
7:00 PM - Scott Bellware - Test Driven Web Development
Register now (free)! http://tddmvc.eventbrite.com
Abstract:
Scott has promised an end-to-end discussion of building web apps test-first. Designing your app for "provability" using a context/specification, behavior-driven approach. Learn from someone who has been doing TDD with MVC long before ASP.NET MVC, in both .NET and Ruby and Rails.
More about Scott: http://ampgt.com/about
Monday, June 01, 2009
Our next installment in Philly ALT.NET's Foundation Series is on Pragmatic Architecture. Another friend and fellow Philly ALT.NETter, Robert Bunson, will review help us take what we’ve learned so far and piece it together into an application architecture. It will again be at DeVry University in Fort Washington and registration is open now!
Foundation Series Workshop 4
Pragmatic Architecture
Robert Bunson of Munich Re America
Wednesday, June 10th at 6:00 PM
DeVry University - Room 141, Fort Washington, PA
Food and beverages sponsored by G2 Interactive!
The Foundation Series, put together by Philly Alt.Net, seeks to present the fundamentals of software development. For enterprise applications these fundamentals include the principles and practices of software architecture. There is no best architecture, but there is an optimal architecture that fulfills the functional and non-functional requirements and addresses the forces and constraints on that architecture. This session will discuss the process of creating and documenting a software architecture, and how that software architecture looks in code.
Register now!
Thursday, May 21, 2009
It was short notice, and budgets are tight these days, so in an effort to make his workshops happen in Philly on June 2nd and 3rd, Scott has lowered the price to $200 for one and $300 for both! This is an awesome deal and he only needs a handful more folks to register to make it happen.
Tuesday, June 2nd, 2009: Good Test, Better Code - TDD/BDD in C#/.NET
Wednesday, June 3rd, 2009: Web Application Testing with rSpec and Selenium
Note: Due to the way Eventbrite works, to get the $300 price for both, you must purchase a seat in each workshop using the discounted ticket option of $150 for each. If purchasing only one workshop, you must buy the regularly priced $200 ticket.
For more info on the workshops, see my previous post.
Monday, May 11, 2009
UPDATE: Scott has lowered the price for the workshops! See below!
First, a reminder that the next Foundation Series session is this Wednesday, May 13th at DeVry. The topic is Design Patterns. If you saw Erik's talk at code camp, this will be a chance to dig in a little deeper, ask questions, and also to take a look at how some of the new features in C# 3.0 can help make your patterns code simpler and cleaner.
Register for free here: http://foundationseries.eventbrite.com/
Also, through the wonders of Twitter, I was able to invite Scott Bellware to come up to Philly to offer two workshops on June 2nd and 3rd. They will be held at IndyHall's training space (which used to be Indy Hall’s main space before they moved to a new, larger space earlier this month). The first is a C# workshop on Test Driven and Behavior Driven Development (TDD/BDD). Scott is a pioneer in this area, particularly in regards to the .NET space. He has been speaking, writing, and teaching about BDD for several years and was a huge influence on my interest and understanding of it. If you have been interested in learning - or struggling to learn a test-first approach to coding - I think you’ll take a huge step forward by spending a day learning from Scott.
The second workshop is on Web Application Testing using the Ruby test framework rSpec and the Javascript browser testing tool Selenium. At first glance this may not seem relevant to .NET, but Selenium is just a browser driving tool that can run a browser against any web app written on any platform. rSpec is used to execute the selenium tests and report results. The result is a very effective means for writing customer focused acceptance tests that ensure your web app is functioning as specified. And while Scott will be using rSpec and testing a Rails web app, you will learn techniques that can easily be replicated in a .NET only environment (you can drive Selenium from any test framework, including NUnit or MSTest).
The cost for each course is $300 $200, or $500 $300 for both! There are only 18 seats available for each workshop, so don’t wait too long!
Register for one or both here: http://www.eventbrite.com/org/139992133?s=1192466