Music. Engineering. Art. Code.

10 Steps to Better Engineering Designs

This article was inspired by Joel Spolsky’s article “The Joel Test: 12 Steps to Better Code.” This is a revision of Joel’s rules applied to the hardware engineering design process.

Do you use source control?

Always a must, no matter what you’re doing. Now keep in mind this doesn’t mean to have to deploy the most amazing, cutting edge VCS out there. The source for the linux kernel was passed around in tarballs for years before it was moved to git. However having a nice universal stream-lined solution makes things nice.

Can you make a build in one step?

I can’t really think of a compliment to this. This is really getting at reducing overhead in repetitive tasks, no matter where they are.

Do you make daily builds? Do you take a look at the project as a whole daily?

Keeping a good perspective on the project as a whole is always a good idea. Is that new idea you’re tinkering with designing really useful to the project as a whole?

Do you have a bug database?

An automated way to keep track of design problems and issues is always a good idea.

Do you fix bugs before writing new code? Do we fix problems before continuing design?

This is really not as big of an issue for hardware as your design generally doesn’t work at all if you have design issues. As you scale up to tasks such as microcontroller design this becomes more relevant.

Do you have an up-to-date schedule?

An up to date and thorough project plan will keep you sane especially as project complexity goes. Customer’s love to see that you’ve thought every aspect through to the very end.

Do you have a spec?

As Joel says “No Code Without Spec.”

“No Circuits Without Spec.”

Creating a spec before you begin designing your individual components will make sure you and everyone you’re working with have a clear idea of what exactly you’re doing. Also specifications allow someone else to easily pick up where you left and reproduce your designs. This doesn’t make you replaceable, it allows you to take a vacation.

Do programmers have quiet working conditions? Do designers have the right working conditions?

I’m not sure that quiet is the best working condition, but everyone knows what working condition is right for them.

Do you use the best tools money can buy?

This is big problem for a lot of companies, many tend to cheap out, especially start-ups. Some try to find cheap ways to get around this and end up with solutions that don’t usually end up working and cost them twice as much or more in the end. Unless you’re designing the next start of the art tool you should be focusing on what you’re designing and not the tools you use to do it. Start-ups especially need to eliminate as much overhead as possible.

Do you have testers? Do you do proper validation?

“If you don’t know how something works, you don’t know how it can hurt you.” - Jim Selin

Make sure you do all of the validation necessary for the environment your designs will be operating in. At EM we do a lot of designs for the down-hole environment ( as in underground ) and these designs require that we test them at high temperatures, high pressures, high shock levels and high amounts of vibration.

Do new candidates write code during their interview? Do new designers design circuits during their interview?

I hadn’t thought of this before now and find it particularly interesting. When Abe and I recruited some of our first new employees we actually had them identify the functions and operations of typical types of circuits. This is a great way to quickly measure whether or not someone is worth their salt.

Do you do hallway usability testing?

This could apply if you’re designing consumer products, but for most of what we do at EM the designs aren’t really “useable” by passerbys.

I’ll start applying this test at EM and let you know how things work out.

- Ken

Make Screen Sharing Available in the Applications Folder

Making screen sharing available in the applications folder is really rather simple, just open the terminal and enter the following command:

ln -s /System/Library/CoreServices/Screen\ Sharing.app /Applications/Screen\ Sharing.app

If you’d rather not have it look like an alias and don’t mind losing the disk space, you can simply copy it.

gXML 0.5 Released!

I’ve released version 0.5 of my gXML library. You can find the source, documentation and tutorials here: http://www.xkenneth.com/gxml

TX Unconference 2008

I just got back from the Texas Python Unconference 2008. It was alot of fun, great people to meet. Enthought is a really interesting company.

Texas Unconference 2008

You can find my presentation here:
Slides

Open Source LabVIEW Functions and Controls

I’ve started putting up some basic VIs for LabVIEW into the open source domain. Currently there are some functions for multi-needle guages (based off an array) as well as a function for quadrature decoding. The quadrature decoder can be used to decode a quadrature signal from an analog measurement by first converting it into a digital waveform. If you have any further questions, need help, or wish to further develop these VIs, please email me.

Here’s the controls repository
http://github.com/xkenneth/lvcontrols/tree/master

Here’s the VIs repository.
http://github.com/xkenneth/xlv/tree/master

Building lxml on OS X

These instructions will get you up and running on either the system python, macpython (i’m fairly sure) or the macports python.

Install libxml2 and libxlst through MacPorts

In bash:
export CFLAGS=-flat_namespace
python setup.py bdist_egg –with-xslt-config=/opt/local/bin/xslt-config
easy_install theegg.egg

How do you know when a piece of software is doing it’s job well?

When you completely forget what it’s called.

http://www.untangle.com
I had our IT staff install this a few months ago, on a generic HP stuffed with gigabit cards. Hasn’t gone down since, and does an excellent job.

Disconnected - Cached Read/Write - Striped - Failsafe - Distributed File System

I’d like to push forward a distributed file system that follows all of the ideas below.

Striped - Fail-safe:
Striped for performance, and fail-safe up to N nodes, depending on the configuration. Something similar to RAID 6.
Disconnected - Cached Read/Write:
     Local processes would write locally to the disks and the DFS would cache the data, intelligently distributing it to the filesystem as need be. If the node becomes disconnected, the DFS will cache the data until the node becomes connected again.
The applications of this are extremely wide. The striping would allow for applications in high performance clusters. The the cached read/write would allow for “traveling” nodes, similar to version control systems such as Git/Mercurial/Bizaar, that become disconnected for periods of time.
My intended application would be to deploy the DFS nodes as cheap virtual private servers from a multitude of companies in order to attain reliability and not have to worry about an IT department and hardware costs. Even over the internet the striping from multiple nodes should allow for “torrential” throughput.
If you’re interested in discussing this more thoroughly, drop me a line.

Awesome (OS X Server Slices)

A company has finally started slicing OS X Server

http://www.mediatemple.net/labs/xv/

Goodbye SVN Hello GIT

So I’ve given up subversion for git lately, and I’m not looking back. Git, gets out of my way, is easier to use, saves tons of disk space, is distributed, and generally not as big of a headache as svn is.

Migrating from SVN to GIT was easy (~10mins to migrate a grok and python project)
Some good resources:
Tutorial: 
http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html
Another: 
http://www.vimeo.com/369095
GIT vs SVN Command Comparison: 
http://git.or.cz/course/svn.html
A great git repository (not that it’s needed): 
http://www.github.com
Migration guide: 
http://www.daniellucraft.com/blog/2007/11/migrating-from-subversion-to-git/
Linus addressing googlers: 
http://www.youtube.com/watch?v=4XpnKHJAok8
Syncing with subversion: 
http://www.kernel.org/pub/software/scm/git/docs/git-svn.html
Best Practices:
http://www.jdl.com/papers/BestCollabGit.pdf
© 2008 xengineering is powered by WordPress