Too Cool for Internet Explorer

Friday, November 20, 2009

OOCSS, Page Layout and naming conventions

At this point, I’m investing some time to improve my technical skill on (X)HTML, CSS, page layouts and different skins for applications mostly based on CSS.

Of course I’m not a designer, and probably never will be. But I know for sure, every developer must know “the minimum” at least, or we will be in the #yerdoinitwrong category.



Studding a few Rails applications and how they implement different css skins for the same page, I get shocked.

There is no guide line to follow, pattern to apply, base layout to use, and most important: no naming convention at all.

So, I have searched the web for all these items just to get even more chocked.

Why? The only thing people agree is to disagree. They don’t even agree if it is fair to use a reset css or not.

So, I need to start making my own decisions and establish some rules by myself.

I want to explore css to the limits, avoiding JavaScript for a while. So, I need to create my css template and start applying it on my web pages, before I can use it on an application (Rails or not).

Reset CSS?

Let me start by the reset css subject. I will not argue about that. There is a lot of discussions over the internet: people considering pros, other considering cons about using the reset css.

After reading most of the discussions, evaluated and tested all the “reset.css” files listed in this collection.

I took the decision to use a “reset.css” file. But the one I have chosen was the W3C proposal.

It is a bit longer if compared with others, but it considers the phrase “a default style sheet must show an HTML page content into a readable and useful way”, seriously.

If you want to make your own tests, I have created and published a basic HTML test page.

In my tests most of the available “reset.css” files (including the popular YUI), turns the HTML content into an unreadable and useless format. That is my reasoning about using the standard W3C reset option.

Page Layout

Next topic, the page layout and element names, in this topic we have a few statistics and agreement about.

You can see a few statistics naming conventions.

Words I think we should consider when naming are: meaning, brevity, clarity, semantic, generic (thanks to Nicole Sullivan).

So, taking my own site as an example:



The main area proposal:



Words like “wrapper” and “main” are not so clear in my opinion. Inside the body, we simply have our desired “page”, that is it.



In our page we have three main areas we can consider a practical standard. The popular: header, content and footer.

And finally each of these areas will be divided into sections:



The left, the center and the right sections, are nothing more then columns.

OOCSS:

That points to the last topic: the oocss proposal, which can be used to put it all together.



You can find associated  links from the oocss home, or go to the project itself.

And it is very easy to define and combine columns using the oocss Grids “sizeXofY” classes.

I am a fan of the oocss way; despite disagreeing on some points and need to change it a bit for my specific needs, most of my class names and current css style came from there.

OOCSS has some key points:

•    use modular components
•    be consistent
•    use grids
•    minimize use of css selectors
•    use multiple classes per element to extend behaviour
•    separate container and content
•    new pages should not need new css

and key points to avoid

•    avoid location dependent styles
•    avoid styling by id
•    avoid specifying the tag a class applies to
•    avoid drop shadows and rounded corners over image backgrounds

According to Nicole Sullivan: “OOCSS isn’t really a framework … but a way of writing scalable, sane, maintainable CSS”.

You can have a First Look on Object Oriented CSS.



And a live sample (my own version) of OOCSS.



It is not even a final draft; it is a work in progress.

Any suggestions are welcome.

Tuesday, October 20, 2009

Rails Summit Latin America 2009 Rocks

I’m on vacations right now, and there are some parallel talks and obviously I didn’t get them all, so, to get this done quickly I will use someone else information for each part of the event and free translate, summarize and mix with my own perception here.

Let me start (of course) with AkitaOnRails:


"About 550 attendees, 20 speakers on a semi-crisis years was a good result”.

"More people outside São Paulo have attended this year, a large group from Rio, but from North, Northeast, South and Center regions also. And even from Argentina.”

"Brazilians once more surpass in hospitality and comrade-ship we have happy hour evenings all days, including the day after, something we didn’t see in RailsConf elsewhere.”

Then Akita disposes about a few problems in the back stage, which the only that could be seen by the audience, was some microphone problems in the first day, nothing else.

"More sponsors this year, what is great, but we need to do even better next.”

"About the talks I try to choose the speakers to provide a big mix in motivational and technical themes, and more focused into the Brazilian audience.”

"In the first day we have our "now famous lightning talk session” which rocks again.”

Then Akita summarizes about the talks, including his own (I will do the same bellow, but considering different sources).

"We from Rails Summit organization staff had recorded all the talks. They are on a final video editing phase, and will be published ASAP in the official event site”

"By now, some attendees recorded and published many of the talks, so, you can watch them up front.” Thanks to Hugo Borges' videos.

"The community participation is always the best part of the event. And you don’t disappoint. Many Railers interacting exchanging ideas and experiences that is the big deal, watch the talks is just a little part. It becomes clear in the "after shift”. In the first day, we had a "Denial of Service” in the "Brahma do Aeroclube” pub and in the second we had a "Stack Overflow” in the "Vila Vintém” pub. May be the only Rails event with hangover effect” – Great moments.



First day talks:

Ruby on Rails Insurgency – Chad Fowler

Chad’s talk resembles the original 2001 talk "Ruby Insurgency” in many aspects but of course in a fresh and renewed view point.

He pointed out that we spent more then a half time of our lives at work, so we must do it the right way. He talked about reasons leading companies to become resistant over new technologies.

There are managers asking a lot of questions: Rails do this? Rails do that? Just waiting for a NO answer to have a chance to state: "Ahaa That is the reason we couldn’t use it”.

Then he brings a recipe on how to push Ruby / Rails into a big company. Doing it slowly, step by step, starting with minor projects.

Presentation: STILL WAITING


On The Edge of Rails Performance – Gregg Pollack

Greg show up a lot of plugins used to detect and fix many scalability problems in Rails applications in the following areas:

ActiveRecord plugins for DB Optimization.
Rails plugins to prevent Memory Bloat
Ruby libraries to help scale

Presentation:
http://blog.envylabs.com/summit/


Yet another Ruby Framework: How Rails works from the inside – Carlos Brando

Carlos have changed the presentation a bit turning it into a more introductory level he exposes how we can benefit on creating a framework ourselves. In his case he need to deal with open social platforms and had spoken on how he created a framework for development into this platform. Then he picks some architectural decisions (push-based vs. pull based), database ORM strategy, code generation and templates as examples on how easy it could be.

Presentation:
http://www.slideshare.net/eduardobrando/yet-another-ruby-framework-como-o-rails-funciona-por-dentro?src=embed


Real-time Ruby for the Real-Time Web – Ilya Grigorik

I feel Ilya’s talk will be a so much advanced topic for me, so, I choose to watch the Carlos Brando talk.

I thing you could see most of the topics covered in the "Advanced Messaging & Routing with AMPQ” article:

Presentation:
http://www.igvita.com/2009/10/08/advanced-messaging-routing-with-amqp/
http://www.slideshare.net/igrigorik/realtime-ruby-for-the-realtime-web


Tarantula: Easy Fuzz Testing for Rails Apps – Glenn Vanderburg

His explanation on how Tarantula crawls a Rails app, traversing links and looking for potential problems (broken links, XSS and SQL Injection vulnerabilities, etc, was really amazing. There are a lot of test steps this tool can handle.

Presentation: STILL WAITING


Code Generators with Thor – José Valim

José speaks about Thor and Rails 3 code generators, and how we could easily customize them. He explains about Thor advantages over the former code generators.

A practical example using RSpec in which a "spec_model” will generate migrations also, considering migrations is not part of RSpec scope, the only option is to change "script/generate model” into "script/generate rspec_model” using this example, he shows how the new generators will help on plugin tasks from now on.

Presentation:
http://www.slideshare.net/plataformatec/thor-rsla-13oct2009-2221414?src=embed
http://blog.plataformatec.com.br/2009/07/creating-your-own-generators-with-thor/


Ruby, dynamism and metraprogramming at DSL construction – Fabio Kung

This one was a big surprise for me, I was thinking Fabio’s talk will stay on a basic DSL level, but he goes beyond, and here is the surprise: besides there are a lot of "black magic” on his code examples, since Ruby is a so crystal clear language, I feel I can play with that "black magic” code as a homework. Really cool presentation.

Presentation:
http://www.slideshare.net/fabiokung/dsls-internas-e-ruby
http://github.com/fabiokung/railssummit-ruby-internal-dsls


RSpec and Cucumber: Beyond the Basics – David Chelimsky

In another hard decision I have chosen the Fabio Kung Talk this year.

David talked about some cool RSpec features like: pending capabilities for tests, implicit subject, explicit subject, custom matchers and wrapped assertions. He also mentioned Spork/Autotest, which are automating test tools that quickly execute all RSpec tests of an application every time a test file is modified (and saved).

Presentation: STILL WAITING


Agile, beyond Chaos – Fabio Akita

In this presentation, Fabio makes a "big trip” on how we need to be on the edge or try to get there most of the time, to keep things working on an agile way:

If the team is constantly winning it is time to change it.
Success is not a plan consequence, but environment adaptability is.
Break the rules.
Agile is important, but not the final step.
The absence of Chaos is death.

Presentation: STILL WAITING


The Future of Ruby & Rails – Matt Aimonetti

Matt talks on how the work on Rails 3 is being conducted. Explain many Rails 3 aspects and new features. And show it in the context of the various Ruby language implementations (MRI, IronRuby, JRuby, MacRuby and Rubinius) also.

Presentation:
http://www.slideshare.net/mattetti/future-of-ruby-and-rails-2223913


Lightning Talks:

This session rocks last year and get even better now.

People from Guru-SP and Ruby-Inside-BR, presented themselves, people from Plataforma Tec, presented a new authentication plugin called "Devise”, Cipriani presented about real-time communication systems using Rails, AMPQ, etc. People from Rio show all the activities going there like DojoRio, DevInRio, HoraExtra, etc. People from Natal (RN state), talks about how do NOT make an event, and OxenteRails 2010.



From all this a special reference to Cipriani who shows not only an interesting Ruby on Rails real time application, but a new (for me at least) presentation tool called Prezi.

The highest point here becomes "A 15 minutes blog in Rails” presentation. Nothing new you may say, but presented by an 11 years old boy? With a previous lightning talk describing his journey into this? It was simply awesome.


You need to see this video, even if you don’t speak Portuguese.

Stop the engines and cool down...


Then, after shift time!





Second day talks:

Mac Ruby – Rich Kilmer

Since I’m not a Mac user, this talk has no meaning to me by now, but, here it is:

"Ladies and Gentleman… Mr. Rich Kilmer…”, conducts a nice presentation about HotCocoa and MacRuby, and even nicer to know about the Apple effort in making MacRuby "The development language” in Mac OS/X environment.

Presentation:
http://www.slideshare.net/mattetti/macruby-hotcocoa-presentation-by-rich-kilmer


Ruby at ThoughtWorks – Carlos Villela

Carlos presented a summary Martin Fowler has done, concerning Ruby projects since 2006 at ThoughtWorks.

What is remarkable about this research is that the majority of projects were considered to have made the right choice in using Ruby and many developers reported a productivity boost of at least twice.

Presentation: STILL WAITING


What changed in Ruby 1.9 – Nando Vieira

Nando talks about new features of Ruby 1.9, his magnificent presentation bring many notes about the changes. A few points:

Releases in December 2008, it is a Ruby 2.0 preview (faster and less memory used)
m17n (multilingualization): many options to get it.
The regexp: uses the uniguruma library now (multi-language, faster, many optios)
New hash syntax, which turns the syntax even clear.
Now rubygems, rake, rdoc are native parts of Ruby.

Presentation:
http://www.slideshare.net/fnando/o-que-mudou-no-ruby-19?src=embed


Lessons Learnt In 2009 – Pratik Naik

Pratik was a bit nervous on his first ever talk, besides that, there are a plenty of useful tips in his presentation. Here are just a few:

Use Ruby Enterprise Edition whenever possible. It is faster and will make your tests faster.
Use the Tickle plugin to execute parallel tests.
Focus on integration tests, not the unit tests.
Security: rails_xss (default in Rails 3).
Will_paginate doesn’t scale. Use Ajax instead (like Twitter).

Presentation:
http://www.slideshare.net/pratiknaik/lessons-learnt-in-2009


A little about CouchDB – Marcos Tapajós

Tapajós shows an overview of CouchDB, and how to work on it. He also show how to change your mind from a relational database approach into a document oriented database, a totally different paradigm.

He splits the presentation into two parts, giving plenty of time for questions and hands on doubts.

Presentation:
http://www.slideshare.net/tapajos/um-pouco-sobre-couchdb?src=embed


Rails Can’t Scale – Bruno Miranda

Bruno and Jason (absent) talk about a real project they both make scaling: the Cyloop the MSN music channel, and how they could keep a scalable infrastructure using Rails. Here are some data about the project:

13500 requests per minute
Using Memcached
Using Scrooge
Using Webservices with Sinatra
Proxies: Round Robin, HA Proxy, Nginx Fair Proxy
Tests: test applications with real data
Log everything to keep it safe if something goes down.

Presentation: STILL WAITING


JRuby in the enterprise world: Using Rails with legacy code – Leonardo Borges

Leonardo talks about how to introduce JRuby into a Java project. He presents his approach on how to integrate Java legacy code with JRuby using Maven.

The basic idea is to pack the application into a jar file and put it into the load path of the Rails application.

Presentation: STILL WAITING


From service to product – Vinícius Telles


Vinicius have made one of the best, if not THE BEST, presentation of the event. Simply presenting a short description of his life path from an IT service business man to the recent release of his product the "Be on The Net

He shared useful pieces of advice and lessons learned in his professional (and personal) life.

Presentation: STILL WAITING


Version Control the correct way – Arthur Zapparoli

Arthur talks about the basics on Version Control Systems, then focusing on GIT (of course), give some practical examples and tips on how to do it the right way.

Presentation:
http://www.slideshare.net/arthurgeek/git-controle-de-verses-do-jeito-certo


Mastering the Art of Application Development – Obie Fernandez

Once more, Obie closes the event: In a stylish presentation, he establishes parallels between arts like sculpture, painting, playing piano, playing violin and application development. How schools are not the best place to learn to be a master on application development.

He talks about the importance of Practice, including the martial arts Shu – Ha – Ri path where you follow a Master in the Shu stage, you discuss with a Master in the Ra stage, and become a Master in the Ri stage.

His talk makes we question ourselves on how time we spent coding or reading code now, comparing with violinists which practice from the age of 5, and the ones who will become superstars practices 30 hours a week, totaling 10.000 practicing hours to become superstars.

But there are myths on how to become a Master…

Practice makes perfect. No!
Practice makes permanent.
Perfect practice makes perfect.

In order to play fast I have to practice fast. No!
In order to play fast I have to practice slowly.

I don’t need to practice reading music (or code). No!
Just like musicians, developers spent (or should) most of the time reading code.

The paints are available, so, focus on the artwork.
We all develop our own "stack” over time.
Don’t focus on the tools, focus on Why?
The pallet is not the point! The point is what we create with them.
How many brushes do you need to paint a master piece?

Code like a paint process:
Have an idea about the finish piece.
Create a sketch
Improve the sketch targeting the composition
Iterate

So the final messages for people who care about are:

Forget about the tools; think about the composition and innovation.
Keep practicing the right way, and keep reaching for excellence.


Presentation: STILL WAITING


My final notes about the event:

You can get the official photo set from here:
http://www.flickr.com/photos/locaweb/sets/72157622496267649/
http://www.flickr.com/photos/locaweb/sets/72157622496373737/


Some information I have transcribed here also come from these guys:

Leonardo Faria
Alexandre Gazola
The Paladin of the Heaven .ix (PotHix)
Herbert G. Fischer

I need to mention a successful live stream Rails application made by Cairo Noleto and a few other guys. It is called "TrendTi.me”, and is simply amazing.

This year the morena_opensource project have gathered a few more enthusiasts.


And I have launched its counterpart: the real_world_woman_on_rails_summit project, a fair reverence to the woman (not models) that made the event even more beautiful, and in this case, more real.



I have planned to talk in the lightning talk session, proposing a new challenge for Rio de Janeiro city, but when I get into the list it was getting late, and half of the audience had gone, so, I think my lightning talk will be done elsewhere this year.

And finally my thanks to the sponsors that helps making this event possible.

Locaweb, Intel, Gonow and ThoughtWorks

That is it.

Sunday, October 18, 2009

What Matters Most: Size or Pleasure?

Let me start talking about: People, Principles, Hardware and Furniture in the Web development environment.

There is a, considered by some, “epic” post reasoning about “Why Pair Programming Is Not for the Masses”.

People do or do not pair programming, for different reasons, and in totally different circumstances in US, Europe, India, China, Japan or Brazil.

Of course, an up to date hardware, a smooth and comfortable furniture, a cool and big enough workplace with a beautiful view will improve the life quality no matter where.

But the real question is: what does it matter most?

People & Principles or Hardware & Furniture?

I have being pair programming myself for a while and my boss doesn’t even know about that. Why? Because pair programming isn’t an acceptable practice where I work, so, we the craftsman, do some pair programming now and then, when we feel the need and we feel that is the best option to get things done.

And we do it wherever possible. A few months ago for instance, I was working as an outsourced resource inside the customer building, and my team mate at that time was from another third party company. My company occupies the 1rst floor in the client building. He was on the second, and the average hardware there was a dual core PC with 17’’ screen…

And YES, we do pair programming. We pair program at his desk on the 2nd floor, or at mine on the 1st. And we do it in cubicles.

Not by coincidence, this was one of the most successful recent projects on that client.

I was wondering if only our managers buy the agile idea, follow the principles, buy the hardware and furniture and sit the developers on a cool place, how better it could be…

In the end, lesson learned, about pair programming:

  • You just need TWO PEOPLE fully accountable for what they do, no matter the hardware nor the furniture, nor the view.
  • The (screen) size doesn’t matter, what matters most is the customer pleasure experienced when a quality product is delivered.


That is it.

Monday, September 21, 2009

Ruby on Rails for Sale! Under $ 2,500 limited offer.


Last Week I have brought some Java team mates to Dev in Rio 2009, a Web development event here in the town. You can see some pictures from the event here.

I was exited because they will be introduced to Ruby on Rails, by one of the most known Brazilian Rails expert.

But after the Rails keynote, I feel something went wrong.

Here is a summary of my conversation with my team mates:

Me - Hey, what do you think? Is Rails awesome or not?

Them - Yeah, yeah, Rails appears to be really awesome, but the cost is prohibitive.

Me - ????? WHAT ????? It is all open source!

Them - Yeah, yeah, but the problem is the hardware; I will not spent near $ 3,000.00 box into a Mac, just to get introduced to this Rails stuff.

OMG…

Here is the old problem again.

Why in the hell did the experts insist to associate good and productive Rails programmers with a hardware brand or specific O.S.?

I can only imagine someone from the Rails core team has a kind of association with something “evil”.

And they are not alone! People from Ruby Central “purchased and sent Matz a new Mac” which you can see here “full of smiles”.

But, the real fact is: A Mac Book Pro in Brazil could be legally acquired by $ 2,440.00 (best price today)

I need to assume developers on the same country, on the same city, on the same company have something in common.

Developers are average citizens after all.

And average citizens use Windows (more then 90% at least)!

Why, should I try to convince them not only to try a new open source language, a new open source framework, but change everything else around?

I don’t think so.

Thanks to Luis Lavena and a bunch of other smart guys I’m now testing Ruby 1.9.1 on Windows 7.

In the beginning before I start learning Ruby with Satish Talim from RubyLearning, I have spent some time looking for a place where I can learn Ruby using Windows, and my mentor uses Windows as well. Satish shows up just in time for me.

I think there are many similarities between India and Brazil in this case.

Apple products are very expensive pieces in developing countries, and are not for the average people.

That said, Rails experts, please try to be at least more agnostic about hardware and OS when keynoting about Rails.

IMHO, this is the best produced stupidest Apple advertisement ever.

I can understand why some people are stick with Apple products.


Anyway I will say it again.

Being a good and smart Ruby on Rails developer, has no direct relationship with the hardware, Operating system, Editor or IDE you use.

It is all about YOU, your motivation, your perception and good sources of information.

If you like the all open source Linux use it, it is completely free, and friendlier every day.

If you like the software proprietary Windows, buy the hardware you like the most (probably windows will be pre-installed on it).

And last but not least, if you like the software and hardware proprietary OS/X and can afford a Mac, do it, and be happy!

Free will for all!

Tuesday, September 8, 2009

UNDER CONSTRUCTION - to be, or not to be



This weekend I re-started the “TrainerOnRails” Project.

So, it is time to put the first page on that domain which was empty for almost a year.

My first attempt was to Google about “under construction pages”, and doing that, I start to question myself.

Would that be the coolest thing to do first?

Here are some of against opinions about that.

This icon says more about me than it does about my web page

Don’t use under construction pages

Design Mistakes: The Under Construction Page

Under Construction pages on websites - do they matter to SEO?

Making The Most of Being Under Construction

A nostalgic one:

The Top 3 Retro Under Construction Pages

This one disagrees from everyone else, saying an upfront “under construction page” can improve your SEO activity.

Getting Your SEO Started Early With A Development Home Page

The one that looks more pragmatically at this subject is this:

Under Construction page is such a waste of time or is it? What make a good one?

One good idea here:

Cool and Free Launch Page with Ajax Newsletter

Well, I have made my choice: a beta version page will be. No under construction, obvious and redundant, animated gifs at all.


But why in the hell do I need a beta version page?

In fact for some practical reasons:

First of all, if I do nothing, people will see that strange list of files when they access my domain name, if I need to do something, why not to put a page out there?

Secondly, I need to get ready with RRS feeds, donation badges, hit counters, etc. and to get that I need a working page now!

Another problem (in my case), is that TrainerOnRails’ domain, sleeps for almost a year, and there are a few broken links elsewhere that I want to redirect.

How can I do that if I don’t have any “beta version page” to redirect them?

This situation drives me to another research: customized error pages…

In this case, people were getting a 404 error page when they try the old TrainerOnRails link, so, I need to put something there to redirect them.

It is not a regular 404 error customized page, but sounds like one.

To test the whole thing, you can start from the former link, and see what happens:

I’m not a designer, I try to do it quite simple: no CSS, just hard coded HTML and a few images.

I like the final result. It is triple checked by W3C Validation Service, Validome and WDG HTML Validator.

Since it might help someone else to avoid one or two working days on something that simple, I have turned it into an open source project “my_domain_beta_page” and released it on Github.

You are welcome to fork it, customize it and make it better, trying to keep it simple at the same time.

After all: it is just a general beta version page to keep your domain alive up front just before “your real page” get ready.

Next step? What about a Release Candidate page?

Saturday, August 8, 2009

WEB 1.0 to WEB 2.0 to WEB 3.0


MarcRic’s definitions:

  • WEB 1.0 – We use “Their Data”
  • WEB 2.0 – We interact with “Our Data”
  • WEB 3.0 – We will sense with “World Wide Data”

The best summary ever (I suppose).

Sunday, July 26, 2009

Controlling and Documenting Software Development: a new approach

I’ve been reading a Tom de Marco’s article these days, where he reconsiders the “You can’t control what you can’t measure.” phrase.

http://www2.computer.org/cms/Computer.org/ComputingNow/homepage/2009/0709/rW_SO_Viewpoints.pdf

I’m suggesting that first we need to select projects where precise control won’t matter so much. Then we need to reduce our expectations for exactly how much we’re going to be able to control them, no matter how assiduously we apply ourselves to control.

Another great piece is the 1997 Bertrand Meyer’s satiric article. It is undoubted joking but most of it fits real and up to date for me.

http://archive.eiffel.com/doc/manuals/technology/bmarticles/uml/page.html

In its attempt to show that it has included everyone's pet ideas, it is a chock-full of symbol after bizarre symbol. Just the "Notation Summary" takes up 60 pages and has its own table of contents! UML is in fact as complex as a big and cryptic programming language, with generous use of "$" and "#" and "-" and "*" and "solid triangles with no tail" and rectangles and diamonds and solid lines and dotted lines and solid ellipses and dotted ellipses and arrows of all kinds and keywords such as "const" and "sorted" (not to be confused with "ordered") and different semantics for a class depending on whether its name appears in roman or italics; but at least a programming language, even the worst of languages, is executable! Here you have to learn all this monstrous complexity just to build diagrams of a possible future system.

For example I have tried to see if I could characterize UML as "object-oriented"; we all know this is a great compliment. Fat chance. Of course the authors make the requisite use of "object" and "inheritance" and so on. But a mere glance at the diagrams shows UML for what it is: an extension of entity-relationship modeling. The basic examples show binary and ternary associations, such as (page 16 of [1]) associations between "flight" and "seat" and "person"; this is the exact opposite of object-oriented design, where, as we all know, the world is structured in classes, built around object types, and every operation or property belongs to one class. Surely in object-oriented design you can't have a "passenger" link that treats "seat", "flight" and "person" symmetrically! In an object-oriented system it would belong to one of the classes; that's how you obtain the consistency, simplicity, modularity and reusability of O-O architectures; look at BON or at Eiffel to enjoy the results. The authors of UML know this, of course; to understand why they call UML object-oriented we must appreciate their famous sense of humor. Obviously they meant it in jest.

How could I criticize the method for not helping software developers or managers, when it does not care about software development at all, but only about developing a market for consultants and trainers? Everything started to make sense: the complexity and bizarreness of the notation, which I had foolishly taken for a deficiency, are in fact among its most attractive qualities, since they make for endless business opportunities, for Rational and perhaps even for others as well; so does its lukewarm adoption of object-oriented ideas, since it means a consultant does not even have to like or understand object technology to profit from UML.

My growing interest on agile philosophy and methodologies, trying to convince my job mates (all levels), to give the software project control and documentation a much more soft touch, the Design By Contract approach sounds much more smart and agile to me now.

I like so much this practical approaching article:

http://devlicio.us/blogs/billy_mccafferty/archive/2006/09/22/design_2d00_by_2d00_contract_3a00_-a-practical-introduction.aspx

So, in the control and document software development subject, we have:

The don’ts (old fashion):

  • Instead of hard control software development, try to deliver software that makes a difference.
  • Function Points is not an effort estimation method; don’t try to estimate time spent using it.
  • If the average managers try to deliver software on a seni
  • or developer time line with a bunch of junior or even trainee developer team, why in the Earth do we need to over control software development? And worst, why to use FPA to measure it.
  • Since UML is not simple, agile, or even OO, why in the Earth do we need to use UML when modeling or documenting software development?

The Do’s (new fashion):

  • Manage the people and control the time and money.
  • If you want to control something in software development, control its quality.
  • Use Mind Mapping to barely document the software requirements (user stories).
  • Use DbC to design the software.
  • Use a smart and agile (like Rails) technology to implement it.
  • Use XP methodologies when implementing it.
  • Applying BDD, use executable specification and documentation techniques.
  • If there is an obligation on measurements and control, use an agile technique like “AgileEVM” for instance.

And remember: what really matters to the customer is:

“BUSINESS VALUE DELIVERED PER SPRINT”

So, that is exactly what we need to focus on.

Sunday, June 21, 2009

Applying agile methodology is a waste of time



People some times wake up “Agile” no mater what.

After a few years, working on the customer site, things change a bit, and now we are working for the same client under a new OUT sourcing contract, so, I came back to the “home” office.

The first thing I have noticed back to the office was the “java team agile style”.

There is a task board on the wall;
The Java source code is under CVS control using “sprint” branches;
They have regular meetings every week…

So I need to ask my VB team mates: You are not agile yet? Why? Does your working environment let you be or become agile?

A few weeks later I realized that the point is not agile methodology but agile PHYLOSOPHY.

If your working environment doesn’t embrace the agile philosophy, there is no way to become agile no mater the amount of agile methodologies you use.

Some practical examples:

The weekly meetings were not focused on the project sprint deliveries, and soon they were disabled for the “big project” the java team was working on. And the other projects are not “big enough” to be selected by this kind of weekly meeting.

I need to implement an urgent but simple feature on the original java application they were working on (the big project). So I asked on which CVS “sprint” branch I should work and was told to use the 5th sprint.

Then I asked when the user have received this sprint, and was informed “No there is no sprint delivery to the client, we are working hard the last 6 (six) months implementing the new functionality and trying to integrate it with the original application”.

Well that is my point, why do they waste their time applying some agile methodologies if the overall philosophy remains waterfall.

This brings me back to the source “The Lean Principles”.

  • Specify value from the standpoint of the end customer by product family.
  • Identify all the steps in the value stream for each product family, eliminating every step and every action and every practice that does not create value.
  • Make the remaining value-creating steps occur in a tight and integrated sequence so the product will flow smoothly toward the customer.
  • As flow is introduced, let customers pull value from the next upstream activity.
  • As these steps lead to greater transparency, enabling managers and teams to eliminate further waste, pursue perfection through continuous improvement.

If we can put it on just one phrase, the “Lean Philosophy” is:

Do nothing but what gives to your customer some value.

So which is the value to the client on using the precious development time specifying and modeling the full feature; calculating Function Points for it, creating a document detailing each aspect of it, and implementing each of the possible functionality, with no delivering at all.

At the end we can see: if the enterprise still waterfall there is no way to be agile.

First of all we need the enterprises to become agile; we need the managers on both sides to become agile.

There is no way you could be agile if your manager insists on detailed upfront schedules.

There is no way to be agile if your manager insists on FPA for each functionality.

There is no way to be agile if your customer demands a huge amount of documentation.

There is no way to be agile if your customer demands a lot of form to be filled out just to get a new version of the application deployed.

So, managers, please read a few books about being agile, starting here.

And you folks, developers and other professionals try to share the agile philosophy before the agile methodology.

If you try to use agile methodologies into a “waterfall” environment, you are wasting your time a bit.

Good luck.

Saturday, February 28, 2009

Cloning GitHub Access


Here is another very basic guide into GitHub usage.

After you have used GitHub for a while, you will have a desire to spread that usage over all your machines.

You would like to clone from GitHub from your notebook, from your machine at work…

To get this, you have two options:

Create an SSH key on each of those machines, and add then to your GitHub account.

Or you can replicate your single current SSH key on all of those machines.

To achieve that, all you need to do (In Windows), is to copy these files / folder from your original GitHub access machine home path to the others.


C:\Documents and Settings\Ricardo>
C:.
│ sshkey.txt.pub
│ sshkey.txt

└───.ssh
id_rsa
id_rsa.pub
known_hosts

That is it.

I would like to ask you all from Linux and OS/X, to comment here how to do the same on these environments.

Thursday, January 1, 2009

github primer: the real one

All the articles I have read about getting started on github are not so “primer”.

Take for instance, my favorite article on getting started with github:

Getting Started with Git and GitHub on Windows.

It does a great job, until the “Set up your GitHub account” picture.

After that it turns specific, and supposes the readers will fork his project…

Others, starts the action by cloning an empty repository, which makes no sense.

This primer, is supposed to be your very first incursion into github, so, I will not give you the entire alphabet, just the “A” letter.

I’m supposing you have already installed your git client and done with your github account, now what?



Everything is empty on my github account. What can I do next?

First you need to create a new Repository:

You just need to fill out this form:


With at least the Project name which will become the Repository name.

Or (that was my case), just rename an unused one with the desired name:


This will let you with something like this:


With your own “Clone URL”, that will be used on the next steps.

Now let’s go and create some content and push it into this new Repository:



Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

E:\GitHub>md mynewgithub

E:\GitHub>cd mynewgithub

E:\GitHub\mynewgithub>git status
fatal: Not a git repository

E:\GitHub\mynewgithub>git init
Initialized empty Git repository in E:/DreamHost/GitHub/mynewgithub/.git/

E:\GitHub\mynewgithub>git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)

E:\GitHub\mynewgithub>notepad readme.textile

E:\GitHub\mynewgithub>dir
Volume in drive E is Dados
Volume Serial Number is 5C89-E09F

Directory of E:\GitHub\mynewgithub

01/01/2009 04:38 PM <DIR> .
01/01/2009 04:38 PM <DIR> ..
01/01/2009 04:37 PM <DIR> .git
01/01/2009 04:39 PM 77 readme.textile
1 File(s) 77 bytes
3 Dir(s) 5,366,173,696 bytes free

E:\GitHub\mynewgithub>git add .

E:\GitHub\mynewgithub>git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: readme.textile
#

E:\GitHub\mynewgithub>git commit -a -m "My first commit on github ever"
Created initial commit f213d62: My first commit on github ever
1 files changed, 3 insertions(+), 0 deletions(-)
create mode 100644 readme.textile

E:\GitHub\mynewgithub>git branch
* master

E:\GitHub\mynewgithub>git status
# On branch master
nothing to commit (working directory clean)

E:\GitHub\mynewgithub>git push -f git@github.com:marcric/mynewgithub.git master
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 291 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:marcric/mynewgithub.git
+ 2fdc3ed...f213d62 master -> master (forced update)

E:\GitHub\mynewgithub>



And then, supposing this is the “readme.textile” file content:

h1. That is my first github project

h2. And this is my first README file

You will have something like this:


Now it is OK to start forking, cloning, merging and what ever you want to do with git on github.