claudiolassala
Claudio Lassala is an independent Software Developer who currently works mostly building Ruby on Rails applications. Previously, he has worked for several years developing .NET applications, presented several lectures at Microsoft events such as PDC Brazil, TechEd Europe, and various other Microsoft seminars, as well as several conferences and user groups across North America, Europe and Brazil. He is a multiple winner of the Microsoft MVP Award since 2001 (for Visual FoxPro in 2001-2002, and for C# ever since). He has articles published on several magazines, such as MSDN Brazil Magazine and CoDe Magazine. He started the Virtual Brown Bag meetings in 2009 and have been hosting it weekly since then. When not writing code, Claudio is probably rocking out with his band, Descent Into Madness.
Homepage: http://claudiolassala.wordpress.com
Videos from Houston Code Camp 2011
Posted in Software Development on August 25, 2011
Last week I’ve attended to the Houston Code Camp 2011. Ben and the other guys did a great job at putting this sold out conference together, I’ve had lots of fun hanging with old and new buddies there, and attended to great sessions. I’ve recorded some of the sessions, and so did my buddy Alper. I’ve done some minimal editing to the videos and improved the audio a little bit, and uploaded it all for your learning pleasures. Enjoy! ![]()
What people who switched to Ruby from .NET have to say
Posted in Software Development on August 24, 2011
In preparation to write my next post to RubySource (here is the post), I’ve asked a couple of people the following questions:
- What made you look into RoR?
- Why did you switch over to RoR?
- What do you like about it? What don’t you?
- What do you miss from .NET? What don’t you?
Here’s the full, unedited answers I got from them…
Ben Scheirman (ChaiOne)
What made you look into RoR?
I kept hearing buzz around 2005 about Rails. I looked into it but initially didn’t get it. I didn’t understand MVC (I was a WebForms guy at the time) and Ruby was totally different than C#. I couldn’t imagine it taking off like it did.
Fast forward 3 years later, after watching more & more people start using it, I decided to start giving it a serious try.
Why did you switch over to RoR?
I found that I was able to build applications very quickly and host them just as easily (on Heroku). When projects came up at work that needed similar agility, I recommended Rails.
What do you like about it? What don’t you?
I like command-line driven stuff. I type pretty fast and it fits in with my workflow. I literally *love* Ruby. It’s crazy, flexible, concise, and beautiful. Gems make application componentization not only possible, but so easy that EVERYONE does it. Usually when you have a problem there is somebody that has already had that problem, solved it, and packaged it in a gem for you to use.
Sometimes it’s hard to see where something went wrong, because there’s a lot of convention & magic going on. Especially when living on the edge. Gems don’t always stay in sync, Rails is changing constantly, so you have to have a lot of patience if you’re going to be working on the latest & greatest.
What do you miss from .NET? What don’t you?
I miss the forward thinking .NET developers, mostly from the ALT.NET crowd. I still hang out with them on occasion, but unless they are at a Ruby or iOS conference, it’s doubtful I’ll get to interact much with them in the future. C# is still a pretty cool language, but I don’t miss the .NET framework really at all.
I don’t miss TFS, Architects who think you should pass around datasets, enterprises stuck on old technologies, Microsoft-slavery, developers who can’t be bothered to read a book & get a little outside their comfort zone to learn something new & amazing.
Derick Bailey
What made you look into RoR?
For me, it was a way to learn something new – to explore new communities and technologies – and hopefully learn something that I could bring back to my .net development (which I did).
A coworker first showed me the “build a blog in 15 minutes” video in 2007, and wanted to use rails on a client’s project. I had never heard of ruby or rails at the time, so I said no. Fast forward 2 years – we had Scott Bellware come in to do some training on automated web testing for my team. We decided to go ahead and have Scott teach a little ruby and rails in the process. I was amazed at how easy ruby was, during the training (this is also where the idea for ‘albacore’ was born).
At the time, I was a Webforms guy, still. I had looked at asp.net mvc beta and version 1, but didn’t understand it. But after the ruby training from Scott, I started looking more and more into ruby, including rails. I was immediately impressed with how quickly I could get a rails website up and running with basic CRUD screens, using the scaffolding. It wasn’t until I learned rails, that mvc in a web application made sense.
Why did you switch over to RoR?
The opportunity to do something new and exciting, with a fast paced and well organized community was exactly what I was looking for after 9+ years of .net development. I built several small sites to play with rails and learn, at first. The more I played with it, the more I wanted to play and learn and build something significant. In the 2nd half of 2010, I was given an opportunity to not only jump into rails work, full-time, but also go out on my own as an independent contractor/consultant.
What do you like about it? What don’t you?
Rails is generally wonderful to work with. It’s easy to get a site up and running and build real value into the site, quickly. More importantly, though, it gets out of my way. I don’t have time or patience to deal with tools and technology that continuously get in my way. Tools should not dictate how we work, but should be formed to work in a manner that supports us. Rails and the community around it, do exactly that. It’s very easy to change the way rails behaves and how you work with it. This points to the two things that I love the most: the ruby language and the ruby community. It’s the ruby language and the community surrounding it that really give rails it’s power.
It’s not all rainbows and unicorns, though. The rate of change in the ruby and rails communities is staggering, and there’s a very large “shiny new toy” syndrome in the community. People have a tendency to jump onto the latest flavor of the month simply because some celebrity rock star ruby developer said it’s the way to go, today. This has the benefit of constantly moving the technology forward, but often results in days of headache trying to figure out incompatibility issues between different versions of different gems. Even when you are keeping a project stable in terms of gems used, patches and fixes are released on such a frequent basis that the issue of incompatibility is still a problem. Tools like Bundler are meant to help address this issue, and largely do. However, the are often part of the problem, as well.
What do you miss from .NET? What don’t you?
I really miss the sense of architecture and best practices that abound in the forward thinking .net communities. There’s a fountain of knowledge – books, blog posts, videos, speakers at events, and more – all centered around good architectural practices and scaling from the “toy” apps out to the enterprise scale. While this information and knowledge exists in ruby and rails, it seems to be immature and closely guarded (contrary to the open nature of the community). Sites like Github and other large scale systems are the prime examples of how to do things right, but I don’t see the Github people out there talking about the architecture and scalability as much as in the .net world.
I don’t miss the boilerplate of everything that you have to know to even be considered an “intermedidate” developer in .net, these days. If you don’t know IoC, TDD, SOLID, and a dozen other principles and patterns, you’re not staying up to date with what it takes to create good architecture in .net. Many of these patterns and practices are still necessary in ruby and rails, but the language and the frameworks tend to bake this knowledge in as first class citizens instead of requiring you to bolt it on, as an after thought.
I don’t miss is the “Microsoft said …” mentality of most .net developers. I can’t stand it and I don’t understand it. It’s as if people are afraid to learn or question anything, which flies in the face of everything that I’ve ever been taught. People need to look outside of what they are currently doing to understand what else is out there, if for no other reason than to understand why they are doing what they are doing.
And lastly, I don’t miss the all-in-one tooling that Microsoft technologies and teams tend to gravitate towards. Tools like TFS and Visual Studio may have great business appeal because of the tight integration between them all, but the reality of day to day work is a different story. These tools lead to very rigid processes, where the tools are dictating how people work and interact. They solve larger business issues to an extent, but create significantly more issues than they solve by preventing change and hampering a team’s ability to handle special cases and needs that don’t fall within the standard guidelines of these tightly integrated tools.
Jak Charlton
What made you look into RoR?
As you start to push a statically typed language like C#, you start finding yourself writing more and more code that really has no purpose other than to support the type system.
To say this is frustrating is putting it mildly. Huge amounts of ‘redundant’ code like interfaces, casting, perverse dependency injection purely for testing
Ruby (and Rails) offered a chance to avoid writing all that code, and focus on real functionality.
Why did you switch over to RoR?
See above … although I haven’t switched – I just took a new position with a digital agency who are a strong .NET shop. I use Rails for my own stuff, and it is a welcome relief.
What do you like about it? What don’t you?
I love the simplicity. I love that convention over configuration is deeply ingrained into everything. I love that things ‘just work’. I love that it keeps out of my way, and lets me write code that has business value.
I love that testing is just what you do – not an optional afterthought.
I dislike, very little. The ‘worst’ part of Rails and Ruby generally is that without Intellisense you need good documentation or to know the conventions. Sometimes this documentation is weak or fragmented. Things like RelishApp make this a whole bunch simpler, and the community helps massively.
What do you miss from .NET? What don’t you?
Pretty much LINQis all I could miss really.
Jonathan Birkholz (JB) (CodeMav)
What made you look into RoR?
Beyond the buzz, it was the migration of people whose opinions I respect telling me I needed to take a look. Having spent most of my career creating smart client applications I knew very little about web frameworks. The only web experience I had to speak of was WebForms and really that doesn’t count. So when I had a small volunteer web project for a local charity I decided to take a look at rails.
Why did you switch over to RoR?
My rails moment happened on the first night. I sat down to learn rails and in a few hours I created an application and had it hosted on Heroku for free. My mind was blown away. I didn’t need to spend time figuring out data migrations, test frameworks, hosting plans, etc. I immediately could focus on what I wanted to focus on… what I wanted my application to do.
What do you like about it? What don’t you?
Gems. I’ve saved hours of my time by searching for gems that can help deliver a feature before I just sat down and coded it myself. Why reinvent the wheel?
Another important part of the gems is they normally come with great documentation and cheat sheets. So I can gem install and in a short period of time get the gem performing the work I need. And if the documentation is lacking, I can just open the gem up and dive through the code myself.
What can be frustrating to others is the speed of upgrades with rails. Rails can move fast and if you have a Rails 2.0 application, finding help on the basics and tutorials can be difficult because the Internet has already moved on to Rails 3 or 3.1.
Although the speed is fast, the changes are great. When working with rails I often think, man why do I need to do X, shouldn’t rails do this for me? Then a few months later I see that the next version of rails will include those features.
This is a pleasant surprise from my .Net experience where often the upgrades would solve problems I wasn’t having. To quote Ricky Gervais, ‘the best non-solution to a problem that doesn’t exist’
What do you miss from .NET? What don’t you?
I loved C# so I miss that. I guess I should look into RubyMine more, but I do miss Resharper. I just need my refactoring goodness mixed into vim.
I don’t miss the culture. The never ending fights against architects and managers when trying to bring in tests, open-source tools, and agile practices. I lived with a crippling despair born from frustration. This lead to me being a complete ass. I didn’t like who I was and what I was doing.
Rails isn’t all rainbows and unicorns. I think the difference is the matching on culture and direction. Every new announcement from Microsoft always had me scratching my head going.. WTF?! I have more in common with the rails and ruby community. I understand the direction they are heading and feel the questions they are asking are the same questions I am asking myself. When is it right to test? When isn’t it? Where do we need opinions in our framework, and where don’t we?
And on that point, when I have a problem, I see people not only having the same problem but creating solutions! I can read their blogs, install gems, and find solutions. There is a contagious empowering culture of getting things done and continual self-improvement.
To me, the alt-net community always felt like a clique of people who didn’t feel at home in the normal Microsoft community. I don’t feel like I need to be in an alt-ruby community because I feel like I am part of the ruby community.
Michael Koby (Just for Bands)
What made you look into RoR?
I had heard about both Ruby and Rails for a while before I decided to look into it more thoroughly. I had gone through the “Learn Ruby in 20 Minutes” that’s on the Ruby language’s homepage, and liked it. The conciseness of the language is what really got me excited. Still it took while (about a year or so) before I did anything in Ruby/Rails seriously.
Why did you switch over to RoR?
I switched over to Ruby on Rails because I had been doing .NET development in some form for close to a decade and I decided it was time to learn something new. The final leap was when my friend and I came up with the plan for Just for Bands. I didn’t really wanna do it in .NET (even using .NET MVC) mainly because I did .NET all day at work and really wanted to learn something new. The Just for Bands project gave me an excuse to build something from the ground up in a different language and framework, and let me bring my friend along for the ride.
What sold me on RoR was the community, gems, and the Ruby language itself.
What do you like about it? What don’t you?
I like the conciseness of Ruby. I like the “convention of configuration” aspect of Rails. It gives me less to think about when building applications. I also like how testing is so woven in to both the Ruby and Rails communities. Also, being a guy who likes Linux, Ruby and Rails work great in that environment. Using Linux tools to do my development, without having to install things like Cywin was huge. Using free and open source tools to me was just icing on the cake.
What I don’t like is the speed at which the community moves. As good a developer as I like to think I am, some things still take me a while to grasp and sometimes I feel that once I have a grasp on something it’s changed in the latest version. I also tend to dislike the egocentric stuff, more specifically the idea that if you’re not using a certain gem/tool/whatever that you’re doing it wrong (I saw a lot of this when interviewing for RoR jobs and using my JFB code as a “code resume”). That being said, it’s probably the tradeoff for being a part of a community that will actually try new things rather than stagnate.
What do you miss from .NET? What don’t you?
I don’t really miss anything, as I still do bits of .NET development at home and on my Mac using Mono. In fact, I’m giving a talk on cross platform development using Mono at Houston Techfest. While I do primarily Ruby, Objective-C (current employer wants an iPhone app), and non-.NET things I still like .NET.
Something that would be nice is a good IDE for doing Ruby/Rails development as that seems to be the biggest hurdle for .NET folks coming over to Ruby/Rails. The lack of a Visual Studio like IDE seems to case pain for some people, and as a dev tool Visual Studio is pretty good.
Tim Tyrrell
What made you look into RoR?
Working in a soul crushing corporate IT department really got me looking in a “less enterprisey” direction. Since I was enamored with the unit testing culture of software, Ruby and Rails seemed like the obvious direction to take.
Why did you switch over to RoR?
After attending my first Austin On Rails meeting I thought to myself, “These are my people; I have come home.” I mentally switched a year and a half ago when I thought about my future and realized that I could not think of a single .NET job that would have any appeal to me. I literally was able to switch because the job market is ridiculously good right now in Austin so the opportunities were available for developers with little or no Rails experience.
What do you like about it? What don’t you?
Switching from a GUI-centric development environment of Visual Studio tools to an extremely lightweight and mostly command-line focused environment has just been a breath of fresh air. Rails is truly is a framework that gets out of your way and allows you to get work done in a very low ceremony fashion. One difficult part is since getting a project going usually relies on a multitude of other “gems”, getting them all to work together is not always going to happen easily. I would also say that the culture of backwards comparability is definitely not as strong, which makes staying on an older version for too long a frightening prospect.
What do you miss from .NET? What don’t you?
I am a recent full-time convert so I am having great difficultly thinking of things that I miss. I obviously miss friends that I won’t be interacting with much anymore. I miss being able to show off techniques or .NET open source libraries to a crowd and see their minds get blown. I would also like to say that I really don’t miss intellisense and ReSharper as much as I anticipated. I don’t miss going to four user group meetings about Silverlight every year. I don’t miss being fed Microsoft’s new round of tools that look almost like the last round and are equally as unexciting. I don’t miss working with a technology where a majority of developers don’t think outside a tiny little box. I definitely do not missing working in Visual Studio or Windows on a daily basis.
Corey Haines
What made you look into RoR?
From 2004, I started seeing a lot more Ruby showing up as the language of choice at the annual Agile conference, along with other smaller conferences. I would spend time pairing with people in it and really enjoyed it.
Why did you switch over to RoR?
In 2007, I was really getting fed up with the development experience in C#. I would spend time writing Ruby, then come back to C#, and it was like night and day with the flexibility. I had been doing pretty heavy test-driven development since 2004, and it felt like I was constantly fighting C#. I got tired of the compiler and the language screaming at me about things I would be getting to, such as unimplemented methods. Whenever I had a chance to work in Ruby, the experience was much more smooth. So, I decided to get out of that world. I was learning Ruby, so I took a few months and built a couple application in RoR. I then got approached to take a job at a startup doing RoR.
What do you like about it? What don’t you?
Among other things, I particularly like the innovation in the testing and tdd realms in the Ruby and Rails communities. There is a lot of discussion around different practices and techniques. I don’t really see the same level of discussion in other communities. I don’t agree with all the design idioms that are present in Ruby on Rails. However, I have recently started talking about alternate design approaches that are still compatible with using Rails and add more
maintainability options.
What do you miss from .NET? What don’t you?
To be honest, there isn’t really anything I miss from .Net.
Scott Bellware
Feel free to quote me on the move of .NET’ers to Ruby: Too little too
late – yet again!
What about you, dear reader? Care to share your experiences as a comment either here or on RubySource?
Back from Lone Star Ruby Conf 2011
Posted in Software Development on August 15, 2011
This last weekend I drove up to Austin for the Lone Star Ruby Conf 2011 (LSRC). This has been my first Ruby conference, and I was really looking forward to it. I’ve enjoyed the conference, and I’m likely to come back next year.
Cost
Compared to overpriced conferences such as TechEd and PDC (now “BUILD”), paying $250 for the 2-day LSRC conference was not a problem. There are several conferences that are either free, or that just charge a very small fee, and I guess “free” is usually good, but I don’t mind paying 250 bucks for good content.
It was also interesting that there was no “sponsors booth” (I think there was only one sponsor’s desk in there, and that was it). It made walking around the conference much better (it wasn’t crowded with booths and people).
The keynote was not about pushing whatever “the latest integrated product that will solve the world’s hunger problem” down everybody’s throat. Instead, we heard about things such as the importance of testing, and when it may not make sense, bringing the “science” back to “computer science”, and being a culture that *reasons* together (well, that’s a very different tone from most conferences I’ve been to).
In another note, we heard that “Agile hasn’t been proven to be the best way to do software, but it is the better way we know of today“.
And the closing keynote was about serving customers. Great stuff! Not products… not languages… not geekness… just people! Yes, there’s a bigger reason why we write software: people! Chad Fowler‘s talk was really inspiring.
45-minute session slots
As a presenter I’ve never liked the 45-minute session slots; it always feels like I can barely touch on the surface of whatever I’m presenting on. It’s been a while since I’ve actually sat through sessions, so it was good for me to get an idea of what it feels like to the attendee.
Right now I have mixed feeling about session length. Depending on the session’s content and presenter’s style, 45 minutes seemed good enough for me, as an attendee, to get the gist of what the thing is all about, take some notes, and understand whether or not I want to look deeper into the topic on my own. In certain cases, 45 minutes seemed to short: when I was really grokking the topic, the session ended, and I’ve ended up with that “dang, gimme more of that!” feeling.
I have to say that a couple of the sessions have flown way over my head, but I was kind of expecting that, given I’m new to most of this stuff.
Some numbers
- There were 260+ attendees. Two people have attended 5 years in a row, and the vast majority was there for the first time.
- Two concurrent tracks
- The youngest developer there was 20 years ago
- There was a guy who maintains a 17-year old application
- I’ve counted two laptops running Windows; everything else was a Mac
Session notes
These are just some quick notes of things I wanted to remember to look more into:
- Rails 3.1
- Asset Pipeline
- HTTP Streaming
- CoffeeScript (default now). Ben mentioned the PeepCode video on it is really good.
- 10 Things I hate about Ruby
- Relieve to see some things that are confusing to me are also confusing to somebody who knows a lot more Ruby than I do. Things such as “many different ways to objectify code” (lambda, proc, etc.), or a notation such as “class << self”
- Meta Programming
- I definitely need to finish reading “the book” on it. I’ve been enjoying it, and what I’ve read so far has helped me keep up with a session on this subject.
- Titanium
- I had a note in my todo list to look into this tool for cross mobile device development, but I’m hearing lots of mixed feelings about it, so I’ll put it in the back burner until I heard a verdict from my buddies who are messing with it.
- View layer
- Right after getting into Rails, I wondered whether it was a common to write something like ViewModels for the Views, and I was told that wasn’t the norm. There was this session where the speaker talked about this very concept. I need to look more into his work (the Draper gem), and the feedback he is getting from Rails developers.
- JavaScript
- Despite the fact I need to start taking a serious look into CoffeeScript, I still need to get better at JavaScript. I need to check out the “JavaScript: The Good Parts” book that Jesse recommended.
- Jasmine
- As I get into JavaScript/CoffeeScript, I totally need to use Jasmine: it’s RSpec for JavaScript (and yeah, totally must use CoffeeScript for it). Totally dig it. Also need to look into “Rosie” (which is like “factory_girl” for Jasmine). “Try Jasmine” also looks promising.
Mercurial, Git, and Elephant’s Graveyard System
Posted in Productivity, Software Development on August 11, 2011
Some weeks ago I wrote up my Do you control your source control? Or is it the other way around? post. That’s a topic that I’ve had quite a bit of disappointment with. So much so it was one of the motivators for my highly acclaimed Another Craftsman in the Death Row video… ![]()
I keep seeing like-minded people all over the place expressing the same feelings about it. Take these two tweets from for instance:
I agree. Working on a project using Mercurial has been very friction-free for me. Fast repository, easy branching, fast and easy to push it up to BitBucket. A system that does not get in my way.
A few days ago I’ve run into this post about 8 Reasons for Switching to Git. Good and short ready.
Once in a while you find posts and articles of people who are trying to build bridges between Git/Mercurial and TFS, like this one. As far as what I’ve read and heard, it’s kind of painful, but it shows how much pain several people feel and how they need to go out find better solutions for something that should be simple.
So, Git or Mercurial?
I started with Mercurial. It was quick for me to get started and have my pet projects use it. The tooling in Windows worked well for me. Then, when I started to learn Ruby on Rails, I decided to give Git a shot. It felt very similar to Mercurial. I had to use one of those cheat sheets that show Mercurial and Git commands side by side, and that was fine. However, I have to say I liked the Mercurial commands much better; the Git ones didn’t seem very intuitive for me.
Another thing I felt was that tooling for Git on Windows didn’t work as well for me as their Mercurial counterparts (that situation may have changed by today).
After working with Git for about 2 or 3 months, I decided to go back to Mercurial, and that’s where I’m staying for the time being. Actually, I use Mercurial as my main system, but also use Git at least for deploying my Rails applications to Heroku.
So how do you get started on Mercurial?
I still think that for somebody getting into one of these systems, Mercurial is the easier one to learn and use. Just download it here (23Mb, which includes both Mercurial and TortoiseHg, which is a GUI for it). Then, where to next? Here, right off the official website:
I can’t see how it could be any easier than that. Anyway, you should also take a look at the Hg Init: a Mercurial tutorial. Very quick and nice read, which will give you a good idea as to how this system can be used.
Apparently, TFS may have a brighter future ahead, but until that day comes, I’m sticking with Mercurial and/or Git.
Upcoming courses at CODE Training
Posted in CODE Announcements, Software Development on August 9, 2011
I’ll be delivering some courses at CODE Training in the next couple of months. Check out the ones you may be interested in and sign up!
I’ll be doing a full 2-day Ruby on Rails for .NET Developers, as well as some training on WPF, and advanced .NET topics for VFP developers. I hope to see some of you there!
Advanced .NET for VFP Developers (Oct 3 – 7)
I’ll be doing the “Power Developer” sessions:
Power Developer – Testing
Unit testing, Testing frameworks, Test Driven Development and Design and development considerations for testing.
Power Developer – SOLID Principles
In this session, we break down the 5 principles of SOLID coding in terms of the code we’ve looked at this week and find out how these 5 principles can make you a better coder.
Power Developer – Patterns and Practices
Inversion of Control, Containers, Composition and more Dependency injection, inversion of control containers and using them to improve the use of composition in our applications, as well as our testability story.
Power Developer – Presentation Patterns and Common Design Patterns
In addition to patterns like Model-View-ViewModel (MVVM) which we’ve already covered this week, we’ll look at how to recognize and implement other common patterns such as the factory, strategy, decorator, command, iterator, proxy and more, besides teaching Inversion of Control containers, as well as leveraging some C# features that facilitate the implementation of certain patterns.
WPF for Business Applications (Oct 10 – 12)
Introduction to WPF
This session introduces the general concepts behind WPF and shows various examples that highlight the benefit of WPF over other UI approaches available. This session also introduces XAML (the markup language that drives most WPF and Silverlight UIs) and other core concepts.
Writing and Deploying WPF Applications
This session shows how to build user interfaces “the right way”. This session starts with an introduction of various WPF UI Design tools (including Visual Studio and Expression Blend). The session then guides the attendee from a simplistic and conventional UI approach (as it is used by other UI environments, such as WinForms or HTML) to a more modern approach that takes advantage of the WPF paradigm.
WPF Layout and Controls
This session continues the exploration of creating WPF UIs by taking a closer look at concepts such as data binding, automatic layout, view models, templates, and much more.
Fundamentals and New Concepts
This session discusses various topics that have gone unexplained so far, including deployment options. This session also takes a look at topics such as 3D, graphics acceleration, graphics rendering (vector art), animations, a closer look at resource management, and much more.
WPF Business Applications – Parts 1 and 2
Introducing general concepts for building business apps in WPF. This session provides a very brief review of WPF concepts and paradigms. However, the majority of this session is spent on creating a solution setup that works for real-world WPF projects. This includes not just the setup of the UI aspects, but also other elements such as view models and access to middle tiers or services. The session creates a real-world setup designed to accomodate business scenarios which involve typical data scenarios (handling of data in view models and also data binding in the UI). User interaction is discussed in detail as well.
Prototyping, Designing and Testing Business Apps
Should we start developing from the database up, or from the user interface down? In this session we’ll tackle that question, and present an approach that works well when building business applications. We’ll go over prototyping, writing presentation logic from a TDD (Test-Driven Development) angle, waiting until the last responsible moment to implement a database, etc.
Ruby on Rails for .NET Developers (Nov 10 – 11)
Creating our first Ruby on Rails Application
Rails enables developer to hit the ground running and create applications fast, even without knowing a lot of Rails or Ruby. We start the training by building a small application and get a quick feel for what’s coming.
Rails Overview
There are certain key aspects of Rails that developers need to know about, and this session covers most of them: Database Migrations, ActiveRecord, Routes, Models, Views, Controllers, etc.
Ruby Primer
After having experienced some Rails, it’s time to start understanding the language we use to build our applications, which is the same that the framework is built on: Ruby. Here we go over the language’s main constructs, as well as some of the features that enables some of the Rails magic.
Development Environment and setup
There isn’t a single ultimate setup for Rails development that everybody uses. There are certain common core things that need to be installed, and certain tools that are more popular than others. Here we learn how to get the minimal environment setup, and what a couple of the options available are.
Using Haml as the View Engine
The default view template system for Rails is Embedded Ruby (ERb). Other view engines can be used, though, and here we learn about one of them: Haml, which allows for cleaner views to be written.
Using a Document Database
Besides supporting relational databases, Rails also work well with document databases. Here we learn about one of them, Mongodb, and how to use it in a Rails application.
Automated Testing
Rails has been built from the ground up with testability in mind. It’s easy to test the code you write, and it’s easy to write tests that use Rails elements. Here we learn how to write our first tests for a Rails application, using two of the most popular “gems”: RSpec and Cucumber.
Behavior Driven Development
BDD is a development technique that improves the understand of the software being built by everybody involved. It improves planning of features and rids the project of unpleasant surprises due to erroneous expectations. Here we learn more about this practice and how certain tools used in Rails development can help us along the way.
Putting it all together – Parts I and II
We’ve seen an application quickly built on Rails, and covered several core aspects, tools, and practices of Rails development. Here we bring all this knowledge together into building another application, applying everything we’ve learned so far, and introducing a couple more things, such as user authentication and authorization, deploying the application to the cloud, and more.
Breaking the Language Barrier
Posted in Software Development on August 4, 2011
A little over three years ago I wrote up my Learning in Spiral post.My recent move to a full time Ruby on Rails project got me to think over some of those things again. I’m always looking back to reflect on how I got to where I am the moment. I think about major road bumps, and how I got over them.
Starting with dBase III and Lotus 123 macros
My very first experience with software development was by creating a database in dBase III. That helped me understand spreadsheets, and next thing I know, I was writing some macros in Lotus 123 (so that was my first experience with writing code).
I knew something about database and something about writing code, and got into Clipper. Smooth transition. Improved my knowledge of writing code by learning an xBase language (hadn’t done much actual coding in dBase).
From there, to FoxPro: another xBase language, very similar to Clipper, and very similar database. Smooth transition.
From there, to Visual FoxPro (VFP). Pretty much same language, same database, but with the added object-oriented features. This hybrid aspect of VFP was kind of interesting: a developer could write an entire procedural application in VFP, without using any of its object-oriented features. Smooth transition.
VFP was also hybrid in regards to working with data. One could use xBase commands like in the old days, and/or VFP’s implementation of the Structured Query Language (SQL). So at first I’d only use the xBase commands, and eventually I learned SQL.
Object Oriented Programming
Then it was time to understand Object Oriented Programming (OOP), since VFP supported that. Learned a little bit on my own, and took a 1-week class where I’ve learned a lot more about code reuse through classes, inheritance, etc. That was huge for me at the time. Major road bump to go from my procedural world to the object-oriented one.
With FoxPro being a dynamic language, I also did do some meta-programming with it; lots of dynamic execution of code based on things (include code fragments) stored in the database.
Somewhere around that time, I looked into Visual Basic 3. The language wasn’t too different from xBase, certain things were similar to VFP regarding how to create the graphical user interface (GUI), but the thing didn’t have inheritance of implementation! Also, I had been building database-centric applications, and boy, doing data access in VB 3 sucked really bad! What was it at the time? Dynasets? Yuck. Gave up on VB real quick. The transition from using the powerful data language in VFP to the handicapped VB was too much for me to bear.
From there, got into web development through classic ASP. VBScript sucked, and I quickly turned to using VFP COM components to spit out the HTML served up by ASP (the middle-tier and data access components were also VFP). I did get some experience with JavaScript, but nothing hardcore. Still, it was a strange language to me, after so many years of xBase languages.
Eventually I got into SQL Server (v6, I believe). I knew databases well at the time, but not a RDBMS. I did know the SQL language (from VFP), so the transition into SQL Server was relatively smooth (considering I didn’t need to do DBA-stuff such as heavy performance running, setting up security, etc.).
At one point I *thought* I knew OOP well, then I started looking into Design Patterns, and realized there was a LOT I had to learn. At least at that point I was comfortable with the language, so I could focus on the patterns, architecture, and so on.
Strong Typing, Patterns, Functional
Then I started to look into C#. I had never done any C-like language. The closer to it had been JavaScript. So C# looked *really* odd to me. However, I did know objects, classes, methods, OOP, patterns, etc, so the transition into C# hadn’t been as hard as I thought it would. It was mostly learning a new syntax, and then adapting my previous knowledge acquired from practicing OOP in VFP. Ah, there was one major difference, though: strong typing and case sensitivity. Took me a little while to get used to that.
There was something that I didn’t have a quite good grasp on, though: interfaces and delegates. You see, VB 3 (or 6… I did do some VB 6 at some point) didn’t have inheritance of “implementation”, but it did have inheritance of “interfaces”. VFP was the other way around (it had inheritance of implementation, but no interfaces). And as far as delegates, VFP didn’t have anything like it (and remember: I didn’t know any C-like language, so “function pointers” didn’t mean anything to me).
One day C# gets features normally present in “functional” languages, in the shape of LINQ. Well, I had never even seen a functional language. At that point, LINQ just looked like the SQL implementation I had in VFP, and that was enough to get me started using it.
After some more exploration, I started to learn more about the things that enabled LINQ: generics, lambdas, extension methods, type inference. To be honest, I don’t think I quite understand the math behind lambdas and all of that, but I guess I learned those things in C# well enough to make some good use out of it. Interesting transition from using LINQ thinking of it as “SQL for C#” to “oh, I think I’m getting this functional stuff now…”.
Back to Dynamic, but also SOLID, TDD,…
Eventually C# then gets dynamic features. I used and abused of those features as soon as I got my hands on it. I figure how to do some interesting things with those features. Interesting transition back to the dynamic world I was used to in FoxPro.
What other things did I learn while doing C#…? Hmm, SOLID. Unit testing and Test-Driven Development. Internal Domain Specific Languages (DSL’s) using extension methods… all those things only made more sense after I felt relatively comfortable with C#, though. Also, using dynamic features in C# has made me give even more importance to TDD.
…and today, Ruby…
Objects, check. DSL’s, check. Functional features, check. Meta-programming, check. TDD, check. For sure, all this knowledge accumulated over the years through all these languages have made it a lot easier for me to learn and enjoy Ruby. I’m still at a point where I “speak Ruby with a C# accent”, but hey, I still speak English with a Brazilian accent.
It’s good to reflect upon all of this and realize how much I’ve evolved transitioning from one language to another, always bringing something in the baggage throughout the journey and learning new things as I go.
Now the weird thing is that I know I’ll eventually get into Objective C, and based on all the comments I hear, that’ll be like going 20 years back in time as far as a programming language is concerned. I really need to find me some good motivation to there. Any ideas (besides “that’s where the money is”)?
P.S.: I’ve left out HTML, XML, XAML, because, let’s be honest, does anybody truly enjoy working with those things? They just seem to be a necessary evil that we need to cope with.
Blog series for RubySource
Posted in Software Development on August 2, 2011
I have now officially started a blog series for RubySource. The first post came out today: Switching to Ruby From .NET!
I’ll be posting there regularly every other week for several months. I’ll continue posting here to my personal blog, too. The main difference is that at RubySource each post will be more polished, and there’s also people editing it, whereas here on my blog it’ll continue to be a place where I dump ideas as I sketch them out. ![]()
I hope to continue seeing you here, and start seeing you at RubySource as well!
Certification, Recertification…? Oh, please…
Posted in Software Development on July 28, 2011
This week I’ve run into this blog post where the author asks for feedback about recertification. Microsoft certification, that is. That post is filled with “Whaaaat? Are you kidding me?” moments for me. I have some experience acquiring those certifications, and my feelings towards it have changed over time.
Been there, done that
I believe it’s been about 8 years since I’ve taken the tests and became first an MCP (Microsoft Certified Professional), then an MCAD (Microsoft Certified Application Developer), and then an MCSD .NET (Microsoft Certified Solution Developer for .NET). It took me 5 different exams to achieve that. That was back in the first release of .NET.
A couple of years later, I’ve even studied for the VS 2005 / .NET 2.0 certifications. At the time I pointed out what a mess it was to understand what exams I should prepare for, and what certifications I’d be working on getting, since there were two new ones related to software development: MCTS and MCPD. I also blogged about the shortage of good books for that.
Are they really useful?
Here’s a quote from the blog post that made me write about certification today:
“Microsoft technologies are evolving more quickly than ever. In order to maintain the value of your certifications, we need to ensure that Microsoft Certifications keep pace with changing technologies and remain a meaningful indicator of a candidate’s continued competence.”
Meaningful indicator of a candidate’s continued competence? Seriously?
Here’s another quote:
“Recertification provides assurance to hiring managers and other key stakeholders that the candidate who holds the certification has demonstrated continued competence even as the technology has changed based on service packs, revisions, and new product version releases.”
Oh my… I couldn’t disagree more.
Based on my own experience passing through 5 of those exams, both of those statements couldn’t be farther from the truth. When I passed those exams, I had been working with .NET only partial time for about a year or so. I had absolutely no real world experience with so-called “XML Web Services” and “Remoting”. I had barely worked on a small sample project that used those technologies. I hadn’t done much ASP.NET. I prepared for those exams mostly by picking up a book and quickly flipping through the pages, without really digging through each word, and without sitting down and typing or trying any of the sample code. And I have passed 5 exams just like!
Nope. I don’t think I’m terribly smart. I’m mostly self-taught, I don’t have a formal degree, and I’ve skipped through certain core elements of computer science. Bottom line is: in order to pass those tests, all one needs is to memorize what is the answer you’re expected to give to a given question, regardless as to whether you agree with it, or whether real life experience has taught you that that answer is flat out wrong!
When I was preparing for the very first exam, I’ve organized a study group at the company, and that was one benefit out of the whole process, because with that we’ve managed to increase .NET skills through the company overall (at least as far as making people aware of a couple of things that are available in the platform).
Come to think of it, sometime in 1998 (I think), when I was mostly doing Visual FoxPro development, I’ve built a website to work as an online study group for people who wanted to pass the certification for Visual FoxPro. I’ve led most of the discussion there, quite a few people succeeded into passing the exam, others were only interested in improving their skills (and the feedback they gave me is that we succeeded there), but I’ve never taken the test myself.
I remember at one time somebody asked in an online forum: “What’s the difference between an MCP and an MVP (Most Valuable Professional)?”. Somebody else responded like this: “MVP’s write the exams that MCP’s “. For sometime that was really true (as I came to realize when I was invited to write some of those exams myself). There was a time when most MVP’s received their awards based on them showing and sharing real world experience with their peers. Now *that* was an indicator of “continued competence”. Somebody memorizing desired answers to canned questions is NOT a good indicator for anything (ok, maybe the person has good memory… that’s all).
Was there ever a certification that covered the first version of Windows Workflow? If so, what happened when the second version of that technology came out and completely replace the first one, rendering that first certification completely useless? What a waste of time.
My experience when hiring…
I have interviewed dozens of developers to be hired over the years. I’ve seen over and over cases where their resumes were stamped with certification acronyms all over the place (I’ve known people who’d be so proud of themselves because they were “the 10th person in the whole world with the biggest number of MS certifications!”….like, 50 certifications under their belts or something… hmmm… whatever, dude). We’ve hired one or two of those in the past, and I can tell you that the certifications meant nothing, as we saw the work produced by some of these fellows.
On the other hand, the best people I’ve been involved with hiring had something in common: they didn’t have any certification, some of them didn’t through any “formal interview test”, and most of them I didn’t even need to see their resume. So how did I know they were good people to hire? Well, they come out often to the Virtual Brown Bag, share tips and tricks with other peers, so I can immediately see a sample of how they work, how they write code, how they think through problem solving, how they interact with other people, how they take criticism in their work, how they react when there’s several other pairs of eyes staring at his work, how they help other people learn and address their problems.
Now, *that*, I think, is the ultimate proof that somebody is committed to working on his or hers continued competence.
Do Technologies Matter?
Whether or not somebody has been renewing their certifications because a new version of technology came out is irrelevant to me. I much rather work with somebody who has a good grasp on things like object-oriented programming, design patterns, SOLID, how to talk with users and clients and understand what’s really important in a project or feature, etc. Those aren’t things that people can get certified on. Also, such people can certainly learn technologies without a problem, based on their real life experience, and not on terrible courseware for biased certifications.
Summing up…
I could go on for at least another hour jotting down my thoughts on this topic, but right now I have to get ready for today’s Virtual Brown Bag. ![]()
My first steps into Mac land
Posted in Productivity, Software Development on July 21, 2011
After two decades of working with PC’s, as I’m into this mood of trying out different things now, I’ve decided to get me a Mac a couple of weeks ago. I’ve been doing Rails development for a few months, and I kept hearing and seeing people say that the Mac is a much better platform for that, so I decided to give it a go, since now that’s what I’m doing fulltime.
Which Mac to get?
I have two big monitors hooked up to my PC, so getting a Mac Mini and hooking it up to one of my monitors was one of the options. But then what do I do when I have to go on trips, clients, conferences, etc.? I need a laptop. But then again, which one?
I friend of mine had just purchased a MacBook Air; the 13-inch screen one. At first I thought it’d be too small for me, but playing around with my friend’s it actually felt alright. The machine seemed really fast despite its size, the battery lasts for several hours, and a thought dawned on me: if I had one, I could hook it up to one of my big monitors when working from home, and I’d had a very portable laptop to take with me on trips. So that’s what I did: 13-inch MacBook Air, with 4Gb of Ram.
How to get used to it?
My prior experience to using a Mac had been about 20 minutes playing with somebody else’s machine. Because of that, I decided to just set it up on the side initially, so I’d do most of my work on the PC where I’m 100% comfortable, and just go to the Mac in order to install programs, try small things out, get used to the keyboard and multi-touch trackpad, etc.
I have to say, several times, I feel totally useless. Main reason being just now knowing how to do the most simple things: for instance, where’s the context menu (right-click menu)? What’s with delete/backspace? Where’s home/insert/pageup/pagedown…? How do I work with the Terminal (console) window? Can’t tell you how frustrating it is to get stuck in those things when you’re trying to get something done.
In order to speed up me getting used to it, I had to quickly set it up to make it somehow feel like it does when I’m using Windows configured to my taste. I guess that takes me to what’s probably the single most important thing when using a computer…
An Application Launcher
A very long time ago I was already very particular about finding ways to quickly launch applications or navigate to places on computer. On Windows, for a while I’ve used “Start->Run…”, WinKey+R, the Address bar tweaked into the taskbar, etc. Then I’ve found SlickRun, which I’ve used for several years. Then, when showing and talking about SlickRun two years ago at a Virtual Brown Bag, somebody showed Executor, which I totally embraced every since. In fact, when I’m building a Windows machine, right after installing the Operating System, Executor is the very first application I install; this is, easily, the application I use the most on Windows (I should really write a post about how I use that tool…).
So, I needed something similar for the Mac… really bad! Alfred was it. I haven’t fully explored this tool yet, but it gives me 80% of the features I use most of the time in Executor. The free version has the “application launching” features, but I’ll be getting their PowerPack version soon, which adds the “folder navigation” features (which I use a lot on Windows), among other things. Ah, it also adds “clipboard history”, which on Windows I’ve been using ClipX for.
Another things that Alfred gave me is the ability to lock the screen (sort of like WinKey+L on Windows), which is another thing I use every time I walk away from my computer.
The Development IDE
Obviously, as I’m going to be primarily using my Mac for development, I needed an IDE. I understand people use TextMate, MacVim, etc., but I needed something that can get me productive as quickly as possible. Like I’ve mentioned a couple of weeks ago, I’m using RubyMine on Windows for Rails development. As it turns out, that tool also runs on Mac. Sweet. The main thing for me has been to just remap the keybindings so it somewhat resembles what I have it configured on Windows.
The Console
I’ve been using the command prompt (DOS) on the PC ever since I started working with computers, and then PowerShell in the last two years or so. I had never used Bash before (well, I did try it for 30 minutes a few months ago, got stuck, and gave up). Well, now I do need to learn it, since that’s what I get in the Mac’s Terminal window. I need to review Joshua’s presentation on Bash, as well as watch PeepCode’s Meet the Command Line and Advanced Command Line videos.
Source/Version Control
For source control, I’ve been using Mercurial. On Windows, TortoiseHG works really well for me. On the Mac, I’ve started to use MacHG; I can’t say I’m 100% happy with it, but it may still be just be been uncomfortable with the environment as a whole. One thing that got me at first is that I needed to install Mercurial in order to be able to access the “hg” command in the Terminal window. After I did that, things worked fine.
One more thing: when trying to open a project in RubyMine that has a Mercurial repository, we’re asked to provide the path to the hg executable, which I had no idea where that’d be. Found it here. One of my buddies pointed out I could also run “which hg” on the Terminal window, which tells me the path to the given executable.
Also, Mercurial only accepts commits if it can find a username. In order to do that, we need a global .hgrc file in the “home” directory containing those settings.
Diff Tool
BeyondCompare has been my Diff tool of choice for several years (for both files and folders). Unfortunately, it doesn’t run on Mac (as far as what I’ve read, it’s because it’s written in Delphi, which doesn’t run on Mac…). After asking for recommendations, I got to DeltaWalker, which seems very similar to BeyondCompare. I’m using its trial to see how it feels. It’s supposed to have easy integration with Mercurial and Git, so I’m hopeful, as BeyondCompare integrated really well with my workflow on Windows.
MongoDB
I’ve been using MongoDB on my Rails projects. In order to get it going, I’ve followed the instructions here. Which has led me to Homebrew. In order to get Homebrew going, I needed XCode (5 bucks). After that, all was good.
Where’s Bundle Install?
Source code in place, database, Ruby (already comes in the Mac), so I’m ready to do Rails development, right? Well, no. As soon as I try running bundle install, things don’t quite work like I expected. No biggie; followed instructions found here, and I was back in the business.
Text Editor
I have tried to use the text editor that came with the Mac, but didn’t like it. I then tried TextWrangler, which has been only frustration (seriously, I can’t find a way to open a file in the darn thing, for crying out loud!). I’ll be getting TextMate, as that seems to be everybody’s favorite. Also, eventually I’ll get into MacVim, which sounds like something I’d like very much.
More Tools
I’m also going down Ben’s Ultimate List of tools for Mac users. Lots of good stuff in there.
Performance
I’ve noticed that running RSpec/Cucumber tests on my Mac is a LOT faster than on my super powerful PC. I don’t know why that is, but I can easily perceive that.
Summary
I’ve made the decision to only use my Mac for Rails development moving forward. Things run faster, more smoothly, etc. I’ve been using it as my primary development machine for the whole last week, and am enjoying it.
RubyKoans: Great way to learn the Ruby language
Posted in Software Development on July 14, 2011
Several people had mentioned the RubyKoans to me. It took me a while to get started on it, but I’m glad I did, and finally finished them just a few days ago!
All you need to do is to install Ruby (try RubyInstaller if you’re Windows), download RubyKoans (it’s just a bunch of text files zipped up), get on the command line, and go for it. You run “ruby path_to_enlightenment.rb”, and it’ll get you started. The Koans are just a bunch of unit tests that walk you through learning the core aspects of the Ruby language.
As I was going through the Koans, I pushed my progress to a Bitbucket repository.
I hope to revisit this repository as I learn Ruby better am able to improve some of the code I wrote here. By the way, as you’re going through the Koans and either get stuck on a step or are wondering how other people have solved it, just search for it on the web; most often you’ll find blog posts, StackOverflow posts, or GitHub or BitBucket repositories where other people have shared their solutions.

