Sunday, April 08, 2012
Professional Software Development notes
Here are some random ramblings about the importance of unit tests, which are rather obvious:
Why do most developers fear to make continuous changes to their code? They are afraid they’ll break it! Why are they afraid they’ll break it? Because they don’t have tests.
This quote affirms some discussions and agreements I have had with some colleagues, you may have or may not have the time, but training is a personal goal, hand holding may be something your employer helps you out with, but is not a requirement to stay relevant
It is not your employer’s responsibility to train you, or to send you to conferences, or to buy you books. These things are your responsibility. Woe to the software developer who entrusts his career to his employer.
Perhaps you think that work should stay at work and that you shouldn’t bring it home. I agree! You should not be working for your employer during those 20 hours. Instead, you should be working on your career.
Professional programmers practice on their own time. It is not your employer’s job to help you keep your skills sharp for you. It is not your employer’s job to help you keep your resume tuned. Patients do not pay doctors to practice sutures. Football fans do not (usually) pay to see players run through tires. Concert-goers do not pay to hear musicians play scales. And employers of programmers don’t have to pay you for your practice time.
This is a quote I've been using often enough and was glad to see it mentioned in the book,
Remember Santayana’s curse: “Those who cannot remember the past are condemned to repeat it.”
This is rather important, do your job well by giving the necessary detail to your managers for them to make an informed decision and avoid delving into the details that only matter to you
Providing too much detail can be an invitation for micro-management.
This often happens in the early stages of a career when you think you are a hero and with some extra effort anything is possible, much better stick with reality and read a fantasy novel to imagine the impossible :-)
Hope is the project killer. Hope destroys schedules and ruins reputations. Hope will get you into deep trouble.
This is good overtime avoidance advice I'll be taking for future tasks
If your boss cannot articulate to you what he’s going to do if the overtime effort fails, then you should not agree to work overtime.
I like this analogy on knowing your tool set to make the actual objective of your job more straightforward
Consider a guitarist like Carlos Santana. The music in his head simply comes out his fingers. He does not focus on finger positions or picking technique. His mind is free to plan out higher-level melodies and harmonies while his body translates those plans into lower-level finger motions.
This game is something I look forward into doing, seems learning can spike with these methods
Simulated combat does not map well to programming; however, there is a game that is played at many coding dojos called randori. It is very much like two-man wasa in which the partners are solving a problem. However, it is played with many people and the rules have a twist. With the screen projected on the wall, one person writes a test and then sits down. The next person makes the test pass and then writes the next test. This can be done in sequence around the table, or people can simply line up as they feel so moved. In either case these exercises can be a lot of fun.
Regarding tools and my affinity with opensource and things that make sense where managers like the crafted marketing bullets out of a commercial tool, there can be exceptions though, so don't blindly follow suit with this
When it comes to source code control, the open source tools are usually your best option. Why? Because they are written by developers, for developers. The open source tools are what developers write for themselves when they need something that works. There are quite a few expensive, commercial, “enterprise” version control systems available. I find that these are not sold to developers so much as they are sold to managers, executives, and “tool groups.” Their list of features is impressive and compelling. Unfortunately, they often don’t have the features that developers actually need. The chief among those is speed.
The eternal battle and inconsistence between developers and requirements and on how volatile everything is and how drawing the line is a timed challenge
One of the most common communication issues between programmers and business is the requirements. The business people state what they believe they need, and then the programmers build what they believe the business described. At least that’s how it’s supposed to work. In reality, the communication of requirements is extremely difficult, and the process is fraught with error.
Developers, too, can get caught in the precision trap. They know they must estimate the system and often think that this requires precision. It doesn’t. First, even with perfect information your estimates will have a huge variance. Second, the uncertainty principle makes hash out of early precision. The requirements will change making that precision moot. Professional developers understand that estimates can, and should, be made based on low precision requirements, and recognize that those estimates are estimates. To reinforce this, professional developers always include error bars with their estimates so that the business understands the uncertainty.
I once heard Tom DeMarco say, “An ambiguity in a requirements document represents an argument amongst the stakeholders.”
Following the principle of “late precision,” acceptance tests should be written as late as possible, typically a few days before the feature is implemented. In Agile projects, the tests are written after the features have been selected for the next Iteration or Sprint.
I am not a fan of automated GUI testing, much less when there's still lot's to be done for the automation of the components side
Testing through the GUI is always problematic unless you are testing just the GUI. The reason is that the GUI is likely to change, making the tests very fragile. When every GUI change breaks a thousand tests, you are either going to start throwing the tests away or you are going to stop changing the GUI. Neither of those are good options. So write your business rule tests to go through an API just below the GUI.
Keep the GUI tests to a minimum. They are fragile, because the GUI is volatile. The more GUI tests you have the less likely you are to keep them.
There was a job where this is way too far from reality and probably not even a goal, I really like this comment
The best role for the QA part of the team is to act as specifiers and characterizers. It should be QA’s role to work with business to create the automated acceptance tests that become the true specification and requirements document for the system.
Dealing with meetings and there useful or uselessness is always a pain to deal with
There are two truths about meeting. Meetings are necessary. Meetings are huge time wasters.
I know of people that just go to meetings as their job, which is crazy being that they are software developers...
You do not have to attend every meeting to which you are invited. Indeed, it is unprofessional to go to too many meetings. You need to use your time wisely. So be very careful about which meetings you attend and which you politely refuse.
One of the most important duties of your manager is to keep you out of meetings. A good manager will be more than willing to defend your decision to decline attendance because that manager is just as concerned about your time as you are.
Most people probably need to work on the last part of this...
Iteration planning meetings are meant to select the backlog items that will be executed in the next iteration. Estimates should already be done for the candidate items. Assessment of business value should already be done. In really good organizations the acceptance/component tests will already be written, or at least sketched out.
On the need of a peer plus one, not everything can be agreed upon, so you just sometimes need someone to set things straight
Kent Beck once told me something profound: “Any argument that can’t be settled in five minutes can’t be settled by arguing.”
Being purely technical is sought by many, but this makes too much sense, so it's good advice for that personality type
The worst thing a professional programmer can do is to blissfully bury himself in a tomb of technology while the business crashes and burns around him. Your job is to keep the business afloat!
Ever have someone tell you they will be working on a project at 50% percent their capacity? So that's half a team member? The author goes into the why's of this next statement
Now here’s a rule: There is no such thing as half a person.
Teams are harder to build than projects. Therefore, it is better to form persistent teams that move together from one project to the next and can take on more than one project at a time. The goal in forming a team is to give that team enough time to gel, and then keep it together as an engine for getting many projects done.
Sunday, June 12, 2011
Progress in dd
sudo kill -USR1 $(pgrep '^dd')
That former command will let me know something is happening when copying stuff to those sd cards that don't even blink ;-)
Thursday, April 07, 2011
PackageKit debuginfo on MeeGo
Tuesday, December 28, 2010
Tweaking the find-provides and find-requires when building RPMs
- /usr/lib/rpm/find-requires
- /usr/lib/rpm/find-provides
Sunday, November 28, 2010
Getting around Network Manager problems with WPA2
While the openssl command line utility had no problems with them, network manager refused them to be valid certs.
What was needed to be done was to remake them with openssl
$ openssl pkcs12 -in original.p12 -out temp.pem
$ openssl pkcs12 -in temp.pem -export -name "Repackaged PKCS#12 file" -out new.p12
All this was taken out from a bug report on launchpad.
Wednesday, November 24, 2010
Presenting Meego in Salta
As the events of the day to day life transcended due to the timing of my involvement and the pile of work I had coming along, I was unable to attend day 1 of the event, making myself available to travel and arrive for day 2 that Saturday morning.
The event was organised in such a way to have all the talks go one after the other in a single auditorium and have an outside area with some activities such as quizzes and first person shooters.
My talk about Meego was one of the last ones to go on stand, the attendance was rather good and people seemed keen to listen to what I had to say.
The talk was a run through of how Meego came to be, how it will evolve, the importance of a common base ground to work from, how the common base ensures applications will be able to cross over through the Meego verticals and most importantly, how to activate the local community in order for it to be involved. Many things could be done with Meego in its current state, ranging from creating local customisations from it adapting it to work best with the tools local to us, all the way to application development or translations.
As an addendum I gave a really quick introduction in how AppUp Center could facilitate distributing a developer's applications if they came to be with the added benefit of having them being validated by a team dedicated to do so.
My talk was preceded by one talk regarding Tuquito, named after how they call fireflies in Tucuman. The presenter was the current project leader. He also gave a walk through of the history and what Tuquito aims to be. Commenting the Tuquito Urbano movement which basically enables the local community with technology needed for today.
Tuquito is a distribution, spinned off from Ubuntu with many customisations made for universities, low powered machines and our local culture. They have enabled the ExoMate's in all their iterations to work well with Tuquito and have come in contact with many educational institutions for its distribution.
My comment regarding Tuquito comes with a stance, the leader, Mario, was rather interested in Moblin at the moment and some talks came later to be about making a Tuquito distribution using the Meego base (core). We came to agreement to get some talks going closer to the end of the year.
The community in the region (SaltaLug) was mostly interested in Meego, and wanted to start seeing some talks or workshops to develop for Meego, I commented on the possibility of doing that during next years event.
Afterwards, during the after event, which was basically a barbecue with all the organizers and presenters, we had a fair share on how to enable Meego in the local community.
The full list of talks can be found here.
Sunday, August 29, 2010
Truly disabling advertisement (ad) fetching in Firefox
I stumbled upon this upon reading a slashdot comment, yeah, where else?
So I have ad-block installed, which does a pretty good job already. But that doesn't block everything, like javascript code calling sites like google analytics.
So I'm sharing this because it really improves the speed, specially on a notebook which struggles to keep up to speed with all that AJAX crap (pun intended?).
So the addon you would want to install is called BlockSite and can be found exactly here on the Mozilla addons site
Once installed configure your BlockSite preferences to include:
$ cat list
[BlockSite]
*.doubleclick.net
*.polldaddy.com
*.polldaddy.com
*.google-analytics.com
*.scorecardresearch.com
*.gravatar.com
*.247realmedia.com
*.likeme.net
You can also create a file out of that cat output and use BlockSite's import option
Here's to a better browsing experience
Monday, July 12, 2010
Flash replacement to keep an eye on
Flash was always sub par on anything not MS Windows, and in my case, that is not the OS I choose to use. Everything was tolerable until many sites also started to stream videos with flash, some is utter crap, but every now and then, it's nice to see something and flash is really resource intensive when dealing with things like this.
In addition to that, I've switched over to mostly being on a netbook when not at work, interestingly enough, flash is not friendly.
While doing some random blog reading, a project came to my attention, and it might be a good idea to keep an eye on, that would be lightspark
So there, I'll be checking on it every now and then, luckily, html5 and everything else that's been going on will catch up fast and deem flash unnecessary :-)
Monday, June 14, 2010
Setting up a new kernel for meego
This is what the default file upon install has:
$ sudo cat /boot/extlinux/extlinux.conf
# extlinux.conf generated by anaconda
prompt 0
timeout 1
default vesamenu.c32
menu autoboot Starting MeeGo...
menu hidden
menu resolution 800 600
menu background splash.jpg
menu title Welcome to MeeGo!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color timeout_msg 0 #ffffffff #00000000
menu color timeout 0 #ffffffff #00000000
menu color cmdline 0 #ffffffff #00000000
label meego
menu label MeeGo (2.6.33.3-11.1-netbook)
kernel vmlinuz-2.6.33.3-11.1-netbook
append ro root=/dev/sda2 vga=normal
menu default
So it was my intention to add a custom kernel by setting up a new label with
label meego-nfs
menu label MeeGo-NFS (2.6.33.3)
kernel vmlinuz-2.6.33.3
append ro root=/dev/sda2 vga=normal
And since we are making changes, I'm changing the timeout value to something larger and removing the menu hidden menu attribute.
Wednesday, June 09, 2010
Obtaining the file system id on Linux
Whatever the problem is, it is best to document it.
The visual way would be to run:
$ ls -l /dev/disk/by-uuid/
The command way:
$ sudo blkid
And here's a: reference
Saturday, June 05, 2010
Boy meets girl. Boy falls in love. Girl doesn't.
The way life goes in romance and all that stuff is interestingly displayed along the movie. The story telling makes this flick rather interesting and enjoyable.
The cast was neatly fit, I must admit I kind of like Zooey Deschanel and it was nice to see Joseph Gordon-Levitt, best known to me from 3rd Rock from the Sun. The music accompanying the film was very well meshed and the tunes chosen of my liking.
It's just one of those movies that, in my case, can't stop thinking about after seeing.
Case in point, I liked it :-)
Window manager themes that I liked for xfce4
- Elberg
- Gelly
- Moheli
- Stoneage
- Symphony
- Therapy
I've currently chose Therapy now, not that I need any :-P
Tuesday, June 01, 2010
Installing freebsd on a Samsung N140
Opensolaris has been lacking some updates and breakage lately, so I decided to pull out this netbook and get FreeBSD working on it. I did this some time ago and my intention was to document it as I am very forgetful of what I have done and what I have not.
The install was pretty straight forward, I grabbed the freebsd-8.0 RELEASE, you can find it
here.
Post install, everything basically boots up fine. Wired networking works, so at least I have some form of networking, wireless does not though and that is when I find out that installing or upgrading to freebsd-8.0 STABLE would be a good idea as there were commits there that would allow the atheros wireles card to work.
More to come...
Sunday, January 31, 2010
A difficult netbook decision to make
The dilemma is that Ive been a netbook user for a while, I recently upgraded my old EEE 701 with 4GB of flash storage which was already pretty nice (yes I'm kind of an early adopter) to a Acer Aspire One D250 and happily and actively using it a lot more than my desktop or my heavy notebook.
So here's the comparison table, with the stuff that matters to me:
| Feature | Samsung N140 | Acer Aspire One D250 |
| Hard Disk | 250 | 160 |
| Keyboard Language | Spanish International | Canadian |
| Battery Life | ~6 hours/6 cells | ~3 hours/3 cells |
| Latest and greatest WiFI tech | 802.11n | 802.11g |
| Cost | ~400 U$D | ~300 U$D |
So here's the thing. I might not want to switch netbooks even though the Samsung N140 seems so much better, well more autonomy and disk space is a winner in my book; the downside for me is the keyboard, Spanish... and I'm not too fond of that.
What am I to do with this? I was thinking of using it as a desktop replacement with a standard keyboard and mouse attached to it displaying the bits to be seen on a big monitor of course.
The other thing I can do is sell... I'm not into that though... but if it comes to it, it might be what needs to be done.
Then again, with all the extra features it has, I might just have to learn to deal with the keyboard be done with it, that is once I check that OpenSolaris works well on this one :-)
Wednesday, December 30, 2009
Music we listened to with the cousins
Sunday, October 04, 2009
emesene on opensolaris
Needless to say, there was basically no porting. Disregarding the fact that I don't connect to the MSN or Live network anymore, this would be a nice to have for many as it's one of those few just works applications and has webcam support integrated. Did I say no trouble in porting? It's mostly python, that may be the reason.
Without further a due, if you want to try out the package on opensolaris, just click on this link and it will install using the package manager, just take into account that this is in the pending repository. If you happen to be an approver and want this in, please vote it into contrib!
So now for the screenshot
Sunday, April 19, 2009
Just added vagalume to spec-files-extra
A full desktop screenshot follows:

It's running quite nicely on my opensolaris snv_111 revision and the pidgin status updating is working OK. That's all I've tested so far, it's nice to have a compact last.fm client and something not depending on flash, this is a perfect application for my EEE 701!
The spec file is located here
Next step is to integrate it into http://pkg.opensolaris.org/contrib/en/index.shtml
Wednesday, January 14, 2009
How to get vmware tools going on fedora core 9
tar -zxf open-vm-tools-2008.11.18-130226.tar.gz
cd open-vm-tools-2008.11.18-130226/modules/linux/
for i in *; do sudo mv ${i} ${i}-only; sudo tar -cf ${i}.tar ${i}-only; done
mv /usr/lib/vmware-tools/modules/source /usr/lib/vmware-tools/modules/source.orig
mkdir /usr/lib/vmware-tools/modules/source
mv *.tar /usr/lib/vmware-tools/modules/source
And then run the vmware-config-tools.pl
Tuesday, January 13, 2009
Hiring filters
Methods from Human Resources...
- Put 400 bricks in a closed room.
- Put your new hires in the room and close the door.
- Leave them alone and come back after six hours.
- Then analyze the situation.
a. If they are counting the bricks, put them in the
Accounting Department.
b. If they are recounting them, put them in Auditing.
c. If they have messed up the whole place with the bricks,
put them in Engineering.
d. If they are arranging the bricks in some strange order,
put them in Planning.
e. If they are throwing the bricks at each other, put them
in Operations.
f. If they are sleeping, put them in Security.
g. If they have broken the bricks into pieces, put them in
Information Technology.
h. If they are sitting idle, put them in Human Resources.
i. If they say they have tried different combinations and
they are looking for more, yet not a brick has been moved,
put them in Sales.
j. If they have already left for the day, put them in
Management.
k. If they are staring out of the window, put them in
Strategic Planning.
l. If they are talking to each other, and not a single brick
has been moved, congratulate them and put them in Top
Management.
in such a way that they can neither be seen nor heard from,
put them in Congress.
Wednesday, November 26, 2008
My first spec file commit
It builds, so I'm happy, not that much of a contribution, but still a contribution!
$ svn ci --username XXX patches/dynamips-01-makefile.diff copyright/SF>
Authentication realm:
Password for 'XXX':
Adding SFEdynamips.spec
Adding copyright/SFEdynamips.copyright
Adding patches/dynamips-01-makefile.diff
Transmitting file data ...
Committed revision 1528.