Goodbye Modbus Droid, Hello Mobile Modbus

I’ve been really busy with some new and exciting stuff for a while now. This year I saw my frist child, a daughter born, around that same time I shifted from being an Electrical Design Engineer, to an Engineering Supervisor at Veeco. And then, in September, I was offered a Software Engineering position at Trane in their commercial Climate Solutions division.

In all this time I haven’t had much of an opportunity to get back to my hobby project, ModbusDroid. I’ve had ideas for a while on how to improve it, and I even started working some on a fragment API (Android 3.0+ UI guidelines), but never got very far with it because of all the craziness with life this year.

So, I’ve decided it is time to get back on the wagon and start back to it – but with some caveats and a few notes.

1) In all the computer transition, and a minor server hard drive glitch, I lost the key files to the original ModBus Droid, so I currently can’t upload any updates to the Google Play store. Also, a while ago, I started working on a re-name of the project for porting the app to the BlackBerry playbook, and I’ve decided I like the somewhat more generic naming – Mobile Modbus. So for the time being, the app is going to be a brand new app, not a 2.0 of ModBus Droid. Mobile Modbus might stick as a name, it might not – I’m open to suggestions so send them my way.

2) Very early on, after I layout some rough frame-work and UI for the app, I’m going to do the development out in the open on GitHub. A lot of this is going to be re-written from scratch or heavily refactored. So, to all my friends who have been telling me that they were thinking about getting into Android development – get your github accounts set up – and follow me there. Install git on your PC, and the Android SDK, and import the old version of modbusdroid from github so you know you are set up and good to go. There has never been a better time – they even started bundling eclipse with the android SDK to make it easier to get started – and github has great GUI git clients for both windows and mac.

3) Part of this refactor is about being a better open source citizen. We make heavy use of the Modbus4J library in the app – a pretty great library that does batching (which we don’t currently use), and I made some non-trivial, but not major either, changes and additions the library. Rather than being awesome and contributing patches back to the main repository, I just dropped a rev of the source code right into the projects source and never really looked back. This time I’m going to clone the CVS and convert it to Git (done actually) and publish that to github with links back to the original project. I would contribute right back to the sourceforge page, but honestly – CVS… in 2012/2013… I hate CVS, not gonna happen any time soon. Call me lazy, but at least I’m going to make it easier to seperate out what I did vs what was from the original project. I plan on tracking it better too.

We’re also going to be using the ActionBarSherlock and SlidingMenu libraries, and I’ll make a fork of those on github if we need to change anything in them.

4) I really really want to get a few features into this 1.0 release of this app that weren’t in the original Modbus Droid. First off, I want to get Modbus RTU over TCP in there, and lay the groundwork for eventual bluetooth serial port adapters (SPP) with straight ModbusRTU. I also want at least lay in the foundations for saving some favorites in terms of configurations / IP addresses, and the possibility of giving registers names. Finally, I also want to get in something that could write out updates to a file for data logging. I’m contemplating some of the more advanced features would be in and ‘advanced mode’ in the settings or something like that to keep from cluttering the simple interface for people who just want to get in and out quickly while/after monitoring some registers. Only when the advanced mode was on would we expose some of these UI elements to enable these features. To see some of the design patterns for the new versions of android, and some neat extensions to them, check out Android Views.

So anyway, this is where I’m taking things. Hopefully over the next few weeks during the holidays I can get a few commits into github and you can all start to see where this is going. And if you are feeling adventurous, read up on Modbus, the Modbus4J library, and Android development – and feel free to jump in by forking the project on Github once it is on there (I will tweet/G+/blog about it when it is up).

Fixing my Kubuntu 12.10 upgrade

So we use kubuntu at work to build some of our linux-based software at my new job – which is kinda awesome cuz I love working with *nix-based environments (unix, linux, bsd, mac OSX, etc) for a lot of really nerdy reasons. This is also cool because I use the big brother of the kubuntu distribution – Ubuntu – at home for all my linux PCs (my DVR server and the media PC hooked to the TV).

But one of the down sides to linux is that occasionally you get weird problems on upgrades or installs – and being that I jumped the gun ahead of our gurus in updating to the recent 12.10 update to (K)Ubuntu, I of course ran into one.

I had an issue where on login I got a bunch of error messages about my audio device being missing as well as my network interfaces, and then when I tried to run the update manager it would open and show updates, but not let me install them. When I clicked “Install” it would just sit there and spin the busy indicator and grey out the background.

Well, I chased this around for a while with no meaningful error messages to go off of, and eventually I stumbled upon what might be causing it. There are some packages that are needed for the window manager (the thing that draws the windows and the taskbar and what-not) to be able to pass messages around, and at least one – probably both of the packages I’m about to mention – seemed to have gotten out of whack somehow.

So the trick to fixing it was simple – reinstall the packages for dbus, and policykit. So in ubuntu or kubuntu hop onto the command line and type:

apt-get install --reinstall dbus
apt-get install --reinstall policykit-1

And that seemed to fix it for me. Hope if you have a similar problem that this fixes it for you without all the searching around the internet.

ModbusDroid now on GitHub

All work on ModbusDroid, the modbus scanner/polling client app I wrote for android, will now take place using the GitHub.

The last released version – 1.0 – will remain available on, but will not be maintained there anymore. When I have a minute I’ll update the blog posts and pages with this info. But there are probably like 2 or 3 people in the world who care that I’m starting to hack away on a tablet/Android 3.0/4.0+ version that uses fragments and the action bar APIs, and I thought you precious few, my beloved audience, might be interested in this change.

Again, just as before – PLEASE – do not post questions on my blog about the app, post them on github so I can better answer them for all people who might be interested in the answers.

ModbusDroid 1.0 Release!

After working on another app for a start-up and some half-written project ideas, I decided to return to my original app ModbusDroid and finally clean up some stuff that was obnoxious about my first go at it.

So here you have it, I added a landscape layout that moves the Modbus controls to the left in their own column, and the data has its own column to the right. And I fixed the issue that disconnected from the server when rotated from portrait to landscape (or vice-versa), but it still disconnects if you exit the app to avoid doing any unnecessary draining of your battery. A few other nagging bugs – there seemed to be a few exceptions from bad inputs in the settings or register offset or lengths. So I set all the text-boxes to be numeric-only keyboards and inputs. Please report a bug on launchpad if you are able to enter any alpha characters into any of those boxes with any keyboards I don’t have installed (like swiftkey – I only have the stock keyboard and swype installed, and I don’t have a physical keyboard). I also fixed some annoying bug reports that came in from the market – for the record on those, if you put “crash” in the description that is not helpful at all – if you put what you were doing, that helps WAAAYYY more, and I’ll fix it as soon as I see it and can reproduce it.

Unfortunately I didn’t clean up everything I would like to (still have the stupid “JAVA: Socket Exception, timeout while trying to make a connection” error messages instead of a more friendly message). But maybe as time allows I’ll circle back to that.

All that being said, let me know what you think about the final 1.0 release, and I hope you find the minor tweaks I made an improvement.

Going beyond 1.0

I learned a lot about android, and real application development during this project as well as when I was working on Whooznear (the prototype App I put together w/ my friend Alec for the startup now named Primmo Apps). And in all that learning, as well as everything I’ve read and learned since then I’ve realized I could do a lot better at making this app a little more friendly, and easier to maintain and extend w/ new features.

Also, since then android 3.0 came out and brought w/ it the new fragment and action bar APIs, and just a few weeks ago android 4.0 brought those features to phones. And I got to thinking there were some usability improvements that could be had on this app if I leveraged those.

So I’m thinking re-write w/ new APIs when I can find the time (who knows when that will be – I’m having a kid early next year – but here’s to hoping anyway!). Something to expand a little nicer to a tablet layout – especially in layout mode. I’m thinking something more like a grid layout, where each column would have a register number and the value in it, and the number of columns would be screen size dependent (i.e. portrait on a phone would be 1 column, portrait on a tablet would be 2, layout on a tablet would be 2 or 3 – depending on the font). And maybe I’ll cook up some other niceties – if you have suggestions feel free to post them here, or to put them into launchpad (or github – read on for more info on that).

Besides that, I’ve gotten some requests for these features (or dreamed them up after some request made me think of them):

  • Data recording to a file
  • Real tested Slave support – for some TCP to RTU bridge devices you can have multiple slave IDs, so that might be useful for some people
  • RTU support for devices that can connect to your phone or tablet that have a COM port
  • RTU over TCP – this is a use-case for some people. Might be worth looking into
  • Modbus4J library changes to be posted separately – not a feature per-se, but still a request I think is worth doing
  • The ability to put ‘names’ at certain register locations instead of the register number

Now, I’m probably not going to be able to tackle all of these requests, but I’m hoping to re-architect how I did the app (again, if I can find time) for android 3.0+ devices to include some of these. And I definitely want to separate out my changes to the Modbus4J library so that I can more easily contribute back to the community that developed it originally, and so I can more easily track upstream changes as well. Right now when people ask me about it I’m forced to say “uhhhh…yeah, I just dumped the source code into my project folder for ModbusDroid and started hacking – I couldn’t tell you what I changed.” Since then I’ve gotten a lot better about knowing how to keep projects separated and yet connected, and use these new fan-dangled DVCS features like ‘branches’ to keep my changes separate from the upstream changes.

Switching source-code management and hosting
Finally – I keep pushing everyone to for the hosting of the project, and there are a lot of awesome things about Bzr and launchpad, but to be honest, since then I’ve kinda fallen in love w/ Git. And GitHub seems to have a better community and UX vibe going on (“Fork This” is a great banner). And, bazaar apparently messes w/ some of my work software (ePDM from Solidworks), and crashes that when I right-click on stuff inside of our company vault, so I had to uninstall it for now – making it a pain every time I want to upload changes in my source code to launchpad. So as soon as I commit the 1.0 release branch to launchpad (after I finish this blog post and upload the APK to the market), I’m going to switch the project to Git – the first commit will be the 1.0 branch – and then upload to github for my hosting. Look for an announcement about that sometime later this week, and I hope for a lot of you this will make it simpler to follow the project as I think Git (and to a lesser degree Mercurial) is gaining more and more traction all the time, and I hear less and less about Bazaar outside of Ubuntu.

Thanks for your feedback so far, and keep it coming so we can make this a great piece of software for the other android faithful out there in the controls industry.


Introducing whooznear

As some of you know, my friend Alec Wojciechowski and I have been busting our humps for the last couple of months (while both of us are attending classes BTW – Alec for his masters, me for VLI) to turn out a prototype of an android app for a startup called Whooz Near.

The premise of this app is something called proximity networking. To break that down, the idea is that this app allows you to discover people you don’t know, who are in your immediate vicinity, while at the same time making yourself also available to be met.

It uses bluetooth to find the people near you, so it is limited by the 20-50ft range of most bluetooth devices. And it transmits the data over bluetooth, only storing it temporarily for display – the app does no permanent storage of the discovered devices or profile data – which helps it to not cross the ‘creepy line’ as Eric Schmidt so aptly put it.

As far as the development of this app goes, I have to say, Bluetooth in android is a fairly weak API, and hardware support is all over the map. We had some Samsung android 2.1 devices where the bluetooth wouldn’t discover anything around it. We were not getting any call-backs to our code after we started bluetooth discovery. Our phones could see those phones and make a connection, but not the other way around. And when the connection was made, it was flaky.

So, let that be a lesson to you, don’t buy cheap samsung phones stuck at android 2.1.

I don’t know exactly when this app will be available in the app store. That is up to the people at Whooz Near when they think it has been tested throughly enough. I’ll update this post with a market link when it comes out.

So, on to the picture gallery. Below you will see the Local Profile editing screen, and then the nearby screen without anyone near-by (because I didn’t get a chance to grab a screenshot last time Alec and I were working together). Eventually I’ll add some more pictures to show when two devices are connected – but the empty “Near By” screen will show a list with the name and tag-line (or status if you prefer) and a small picture. ร‚ย Then if you touch that, you get a screen that looks almost just like the Local Profile screen, but shows their extended profile information.

Watch for it in the next few weeks on the Android Marketplace, and then let WhoozNear know what you think.


Introducing Modbus-Droid!

After much furious learning and coding between VLI semesters, I have finally churned out my first ever Android app.


Modbus-Droid is a Modbus TCP client / scanner, that is designed to scan a contiguous block of modbus registers at a regular interval.

Using the software:

All you do to get this going, is go to the settings page and set the IP address of the Modbus Server (or slave in old terminology), the TCP port you want to communicate on, and the polling time. Then set the register offset you want to start reading values at, the length (or quantity) of registers you want to read, and the register type (Holding Registers/Coils, Input Registers/Coils). Press Menu->Connect, and once it connects and receives modbus register data, it will display in a list. You can then change the settings for the offset, register range, or register length at any time, and the list will update on the next scan.

Finally, you can also change the data display – which is how the data you are reading is displayed on the screen. Coil data can, of course, only be displayed as binary – so I represent those as “True” or “False”. But the register data can be displayed as binary – a collection of 16 1’s or 0’s for each register, unsigned and signed integers (single register, double register, or quad register types), as well as floats and double floats (which are 32-bit and 64-bit respectively).

If you are displaying Holding Registers, you can write the values, and the write dialog displayed will be tailored to your data display. So if you have the binary display, you will get a list of 16 checkboxes, where you can set, or unset individual bits within the register. If you are displaying an unsigned int, it will not let you put in a decimal place or a negative sign. Similarly, it will let you put in a negative sign when you are displaying signed ints, and it will give you the decimal place when you are displaying floats. I just want to make sure that people, like me, don’t make a mistake when entering the data to be written.

Other aspects of the project that are interesting to me

One thing about this whole process that has really excited me is that this was a fun learning experience for me, and I feel pretty confident that whatever Alec (my friend who only lives a few blocks away, and who is also a hobby android developer – his app is called MeterMaid) and I cook up for our next project will go a little faster and we both are confident enough in our knowledge of the Android APIs to go quite a bit quicker.

I’m also excited to release my first ever open source project, which is based upon an open source library – Modbus4J. (To be fair, there is one component of the library, that the original creator has chosen to not open source).

I’ve used this project to learn a little about Launchpad project hosting site, and the Bazaar version control system. I’m definitely not an expert by any means on either system, so please give me any feedback on how to better manage this project, or better set up the launchpad site (or better utilize bazaar for code management).
Launchpad site for the project:
Report and view Bugs Here:

Finally you should note – this is still in beta. I’m sure there are bugs I haven’t found, and a couple of less than optimal things that I do know about. So please let me know by emailing me or filing a bug.

Ben-tenna project 2.0

On Friday my MythTV server (my DVR software running on my server) had major audio and video artifacts and skipping during Dollhouse. This isn’t the first time this has happened and is particularly annoying since the TV upstairs rarely, if ever, has issues with Fox. Well, this was the last straw for me.

I know this was one of, or a combination of three possible issues.
1) Antenna is not good enough. It is a good antenna that I built, but not outdoor worthy, and where I have it in the house had to have multi-path issues.
2) Crappy tuner card. It is a cheap card and I know it isn’t the best tuner, but I didn’t want to shell out for a nice Hauppage or something similar. Anyone have any good Linux/MythTV compatible card recommendations that are under or around $80?
3) Hardware / hard drive issues. My server is an Athalon XP 1800 on an Asus A7V8X with a Seagate 300gb SATA with the recording partition formatted XFS. I’m a little worried that there are some I/O issues getting the data off the PCI card and onto the hard drive. Ideally at some point I would get a PCI express runner card on some dual-core (hopefully lower power when idling too – want to green this setup a bit w/ my P4 3.0 Ghz frontend PC).

So, I decided that tackling the antenna would give me the most bang for the buck long term (especially if I can get it permanently mounted on the roof or outside).

So, I was debating between a dual-bay version of the one I made previously (based on a Channel Master CM4221), or to go with this newer and GPL-licensed Gray-Hoverman. Did a little homework and decided on the Single Bay Gray-Hoverman despite it being slightly more complex to build well when compared to the dual bay channel-master style. So, did a little internet poking and found this site which documents a guy building his out of PVC.

I didn’t deviate too far from the original design plans for the active elements of the Gray-Hoverman, and copied his frame (only with a single-bay version) almost exactly.

It cost probably close to $50 by the time I bought a pipe cutter and a hack saw (how did I not have one of these before????), so the PVC and screws and washers probably came out to more like $20-$30, and then the copper wire wasn’t cheap, but I bought it a long time ago in anticipation for this project and don’t remember how much it was, and the chicken wire was laying around from our “de-mousing the vents project” a year ago.

Gallery should be attached below of some of the work-in-progress and completed builds. I have only tested it a little and it gets OK reception sitting on my couch. If I put it outside on the roof (that sounds like a PITA though, and I’m lazy) I bet it will do better than any of the old ones I built, and it will stand up to weather better (just needs some outdoor PVC paint first).

I’ll put mroe details about the performance for local channels after I get time to compare it to my older ones built out of cardboard, wood, and coat-hangers. I’m expecting good things, but those old ones didn’t suck. What will suck, is if this tuner on this HDTV card really does suck that bad, and this doesn’t help very much. (for reference I have a Kworld ATSC-155)

And finally, before the pics, some links for more interesting info:
Two articles about building the antenna from some RF magazine
And the PDF for the GPLv3 version of the antenna with the rod reflectors/passive elements.

Paradigm Shifts in how we Use Data and Voice

You may have heard some of these questions (some from me) or thought of them yourself:

  • Why does only the iPhone have visual voicemail?
  • If I can make calls for free using skype from one computer to another why can’t my phone automatically know if I’m calling a computer and switch to that when wifi is available? (if the phone has wifi built into it)
  • Why is instant messaging free, but texting costs money when they are essentially the same thing except on a computer instead of a phone?
  • Why don’t my facebook notes comments sync automatically or easily to my professional/non-facebook blogs comments and vice-versa?
  • Google voice seems awesome, but why doesn’t it integrate better into my phone, and why hasn’t my carrier done something like that before (or at least integrated it into the phones)?
  • What is going to replace email? It was invented in the ’70’s and hasn’t changed much since then. Why haven’t we thought up better ways to communicate yet?

Maybe I’m weird, but I actually think about these questions a lot. These questions plague me more and more as Google is routinely blowing my mind with awesome products like Google Voice, and Google Wave (especially Wave).

It seems to me that for a while we have been on the cusp of a paradigm shift in how we communicate. I know there have been lots of major shifts and new shiny things out that expand how we communicate or consume information, and for some that has been paradigm shifting. But for some people like me, it feels as if there is a lack of cohesion and depth to these products.

For example:
I email and chat with people using gmail (Wave is going to combine that with document sharing, and some other neat stuff, go check out the video on their page if you want to see a demo)
I leave public status messages / funny or quipy site links on twitter, which get sucked into facebook. Comments on facebook don’t get posted to twitter though, and replies in twitter don’t turn into comments.
I text and call people with my phone. Soon Google might transcribe that for me automatically.
I can IM people on my phone now, and even get messages while I’m not in that program (yay push notifications – I envy the palm Pre users for their native ability to run an actual IM app in the background). But I can’t interleave that with my texting unless I’m on a palm pre.
I post blog posts on my blog which get sucked up into facebook and livejournal (which is not as straight-forward as it should be to set up IMO). But, no comments or replies sync between sites.
All of these different sites and devices have different log ins, different ways of handling what is basically a flow of information to and from me from and to other people.

Why don’t we have a way of integrating these together?

There are lots of reasons why, and I have lots of opinions on the subject, but rather than bitching or pondering how the system has failed I’m interested in possibilities.

So, here is what I’d be interested in:

– Something akin to google’s new Wave product as a base, meaning an open protocol designed to track flows of conversations and discussions. Only bring in google voice so it has my call logs and texting history right in the flow of conversations.
– Voice calls have to fundamentally shift from being a perceived as ‘audio’ to being perceived as data and an important part of the flow of the conversation. That means, that a call should be logged into the flow of a conversation. (what conversation – I will get to in a second)
– The ability to record or transcribe calls would need to become a common addition (and probably optional, all conversations could go “off record”). So in a conversation it would either mention that a call was placed, or it would have a recording or a transcription embedded into the overall flow. Same for video chats.
– Open authentication – not facebook connect style, but more openID style. And the ability to associate your phone number(s), email addresses, and tie them across servers would be paramount. This means if you have an account at livejournal, gmail/google, and facebook, you could tell them to synchronize your credentials. This would then have facebook check your listed number against googles, and if googles is different both places would add the different numbers as secondary phones to your account. And, then livejournal would be able to access that and mention that you have a blog in your ‘sites’ profile. Also you could use any address (facebook user name, google email address, livejournal username) to log into any of the services. This is basically an expansion of openID in my mind.
– Complete control over permissions and accessibility of data. Privacy is important and I think facebook gets this mostly right. You need to be able to say “Only people I authorize can see detail X, and unless I give them special permission they can’t see Y, but everyone can see detail Z.”
– With permission, people could add you as a contact and then see whatever information you make available to them, like facebook, only synced across multiple sites (like a few points above mentions). So if I add friend “Bob ABCD” to my phone, and Bob approves me as a friend, my phone would automatically have whatever data he is willing to share with me and has on his profile. (Or alternatively, I could augment it with manually entered data that is stored only in my contacts, not pushed to his profile he shares)
– Contacts already approved and stored in your contact database and associated permissions for contacts need to be non-centrally stored. Meaning if you get a new phone, or decide to switch from yahoo to gmail cuz you like it better, you can just log in and tell it to rebuild your contacts. This information should be stored in a fashion similar to your login credentials, and people could only see your contacts/friends or a subset of them if you give them permission.
– Client / server model would have to be de-centralized. Multiple servers across multiple domains need to be the primary place you go for tracking this information. So if you prefer Yahoo’s interface, no problem just use yahoo. Or if you prefer facebook to manage this, plus all the silly quizzes and memes, use facebook. But it all syncs across boundaries. Meaning your cell phone provider is still the gateway to your cell phone, but not the only keeper of all your history and contact information (and neither is your handset/cell phone)
– Micro blogging / status updates and follow-up comments need to be seen as a conversation, and should span across boundaries of services.
– Blog posts could be the beginning or continuation of a ‘wave’ or thread of a conversation, and comments would be carried across site boundaries.
– A push notification framework would be required, but it would have to have the ability to filter so you only get notifications of things you want (texts/IM, phone calls/audio chat/video chat, emails). Drinking from the firehose is fun for about 2 seconds.
– Hardware agnostic, meaning that the connection you use would be data-based. Not audio based like a cell phone network, which then has a data network laid over it (like texting is).
– Conversations need to be able to take different forms. We need the ability to tag by topic, and sort that, but also by person being communicated with to produce a chat/IM/txt like history only with emails and calls in there as well. But we want to also be able to start off a topic of conversation and just follow where that goes like how gmail threads email chains (again with everything else put in it) A conversation/wave/whatever you want to call it, could also be filtered by type – microblog (twitter/facebook updates), blog, email, chat. But the advantage here is managing it from one location.
– A good standardized codec for voice and video chatting. Something that takes into account the connection someone is on, and device they are using. So on a cell-phone data network you could stream lower quality video, prefer good voice, and use a smaller resolution. But on a PC with a high-speed cable connection it would give you higher quality everything with a bigger resolution.
*Neat idea as an add-on*
– Incoming package notification. Someone shipped you a package, or you are buying something from amazon. It could find that out via you associating address info with your login credentials, and a discovery API for connecting to the UPS/fedex websites.

I do believe we are headed to a place like this with our communication.

And I think much smarter people than me have already been working on some ideas like this for a few years (if google’s continued desire to buy-up innovative companies and create game-changing products is any indicator). And, I think with Apples obvious lack of love for AT&T constantly trying to pigeon-hole the iphone (no data tethering!?!??!) I believe we could see a shift to handset makers building phone/data devices around such a protocol if there were one.

So, does anyone else have a suggestion about something like this, or a way to make it more interesting or useful? Or do you look at my suggestions and wonder what the hell I’m talking about and just wish I would only send this to nerds so it didn’t show up on your facebook/livejournal page? ๐Ÿ™‚

Being Green is about more than being Green

Lauren and I have been trying to do better at recycling (unfortunately Minneapolis makes you sort it, so I forget a lot) and we have probably cut our actual trash in half or better in the last 6 months.

Also, I’ve been doing a lot of work over the last year for the solar market (CIGS solar to be exact), and I’ve been attending a lot of talks on Green buildings (particularly churches) at the conferences I’ve attended and I’ve had an interesting realization.

Being Green, particularly the principal of understanding where things you consume come from, and where the waste and other end products of consuming those things goes, and who that affects, can be really relevant to other areas of life.

I’m sure that is obvious to a lot of people, but one particular application that this realization has sparked in my mind is acquiring and making general decisions about technology.

To complete this exercise I’ve come up with some categories and related sub-categories that have become important for me to fill before making a recommendation or decision.

Consumed by me/church/organization:

  • People time – How many hours is this going to be used? How many hours is it going to take in training / setup before this becomes useful (the wife test – phase 1)? How many people besides me will actually find this useful (i.e. the wife test – phase 2)?
  • Energy – Is this electronic going to be an appliance (i.e. always on)? How much power does it take to run this thing?
  • Footprint – What is this made of? Where did that come from and how far did it take to get here?
  • Monetary – What is the up-front cost? What are the costs associated with basic operation (relates at least somewhat to Energy)?

Produced / Long-Term, short-reaching effects:

  • Footprint (again) – When it is finished being used is it something we can give away that will be useful for someone else? Can we recycle it or any parts of it? What is the landfill impact on the parts that can not be recycled?
  • People Time – This is the time that people spend finding bugs, work-arounds, posting on forums, etc. This cannot be underestimated, as a lot of the power of great software and hardware comes from real-world usability studies (i.e. people using it and sharing their thoughts on it)
  • Lock-in potential – Where are we locking into something that limits us later? How much will it cost to migrate to our next level / next growth faze. Is that avoidable? How much will it cost to move to the next place?

The Long-term, long reaching effects – AKA the Ethanol effect

  • The money chain – your money goes somewhere, which then goes somewhere else, and so on and so on. How far up that chain can I see? Is that money going somewhere I’m not happy about? Is it failing to go somewhere that I want it to go?
  • Standards vs. Proprietary – People and the church can really help influence trends. Does the thing we are interested in promote inclusion or exclusion? In other words, does it help innovation or hinder? (This could be technological innovation, or business innovation in the global market, or any type of ‘innovation’ or creative thinking that helps us keep moving forward in justice for more people and making the economic pie bigger for the world). Are we helping monopolistic lock-ins and proprietary technologies, or are we promoting technologies that try to make that as simple as possible? Are we creating a market that locks out other countries and people so that only wealthy countries / people can get in on the benefits of local innovation?
  • Lost Opportunities for ourselves and others – Are we promoting something that has consequences that can impact the market to cause horrible things for other people (i.e. ethanol = re-grow-able gas = food in our gas tanks = increase global food costs…there are other examples, but that is the most obvious right now) If we sacrificed a little would it create a greater opportunity for justice in other places (other communities, or countries)

I want to save some more in-depth discussion of individual points above for seperate posts (lots to unpack), but I want to highlight the part that I call ‘The Ethanol Effect.’

That part is really hard, fairly abstract, and I believe something we should try to tackle from a biblical standpoint. This thought is an abstraction of the passage in Deuteronomy that says:

When you are harvesting in your field and you overlook a sheaf, do not go back to get it. Leave it for the alien, the fatherless and the widow, so that the LORD your God may bless you in all the work of your hands.

Basically meaning that sometimes we have to make a few sacrifices and not always squeeze the last possible immediate gain so that we can bless the most oppressed and forgotten amongst us. Then, we subsequently receive more long-term blessing from God.

In a global economy I believe that the aliens, the orphans, and the widows from biblical times equates to the modern social outcasts in our local community, the global south, and the people suffering under oppressive tyrannous governments.

And since we know that as individuals we part of the trends in spending and subsequently global economics, we should as Christians try our best to consider the far-reaching implications of our decisions.

That, is one of the primary reasons I support more open-source and particularly standards-based technologies….but again, that is a topic to be expanded upon in a different post.

So, let me know what you think. Am I over-thinking here, or is there a way you think that I or we as global citizens could be more ‘green-minded’ in areas that aren’t necessarily considered green.

Standards Matter

To most people computers are about accomplishing a task. Getting from A to B as simply as they can, so to speak. Almost no one reading this really cares much about what file format you are saving that word document in as long as the person you are sending it to can read it. Likewise, you probably don’t care how these web pages get from the server to your computer, you just care that it works.

Some other related scenarios where you only care that it “just works” that I think we take for granted. Fitting pipes together. If you do any plumbing you care that when you buy a 1/4″ tube and a matching elbow that the threads on both match up. Gasoline octane ratings – it is good to know that the gas you put in your car will work no matter what car you have. Batteries – it is nice to be sure that your electronics will work with either Energizer or Duracell as long as they are AA. It is nice to also know that your wall sockets are 110VAC at 60Hz no matter what house or apartment you are in.

The point here is that everything except the Word document scenario works because there are agreed upon standards that these things are based on. There are a couple of “standards groups” (which sometimes ends up being legislation) out there that certify a written specification and declare it a standard for many different things, and then corporations and businesses agree to make their products to meet this standard. And this increases competition within that market segment, but it also increases overall revenue because we as customers know that we are getting something that will do what it is advertised to do (you can see how this is especially important with gasoline), so we aren’t afraid to purchase these products for fear of not being able to replace batteries or fix plumbing.

Which is why creating standards is an important step in the process of maturation of any market segment, but it is not a step to be taken lightly.

Today, we are all trading things around the web, and to some degree we have let the market sort things out for us. But in some ways the market has decided that public standards would be best for all parties involved as a sector was growing up. VGA and DVI based monitor connectors, MPEG1/2/4 for downloading videos and watching DVDs, TCP/IP for communication over networks and IEEE 802.11 for wireless LAN’s so you can surf the web on your couch are just a few small examples.

These are standards that take the best approach at forward thinking as they can, and as the example of the MPEG show us are also willing to adapt to the changing technology around it. With these standards to support and ease development efforts new innovative technology pops up around them in the form of software and hardware. (The iPod video, as well as the archos jukebox plays forms of the MPEG4 based standardized video for example)

Where there is not a standard there is confusion. Some examples include phone chargers and data cables for phones. If phone companies standardized their phone chargers so that Nokia’s worked with Motorola’s which worked with LG, which worked with etc, etc don’t you think it would be a lot better situation for everyone? We could all charge our phones at eachother’s houses, and eachother’s cars, and our old stuff would always work with our new stuff. They would be cheaper and probably come with little neat features like a retractable cord, or a better power monitor light to indicate the phone is charging…the possibilities are endless. But because the market is vendor locked, it stagnates and prices are fixed to ensure the right margins are achieved when buying a new phone.

But the major area I believe is in need of innovation is in the area of document file formats. Mostly the average person doesn’t care, but a guy like me looks at Word 95, 97, 2000, XP, 2003 and doesn’t see much improvement between them but I do notice that word 97 can’t open a word 2003 file. I notice this because I help people fix their computer problems, and some people (cough*Dad’s Old Church*cough) are still using word 97.

So, a guy like me, who is trying to fix someones computer, or help someone open a file that a different person sent them in Word ’97 is extremely frustrated by something like this because it doesn’t “Just work”

A standardized, open to the public, way of saving a document of formatted text and layout would cure this. Something that was flexible enough to grow and be extended as the market demanded, but explained and detailed well enough that a new start-up or open source software project could implement it into its own software.

This is possible, and that is exactly what a bunch of companies set out to do. Because they felt that people who can’t afford to pony up the cash for MS Office (students for example) shouldn’t be kept from opening and editing files from other people (such as teachers). This should be especially true for the government where everyone should be able to see what they are creating. And a standard means that there is will always be a way to open those files, because in the future after this has died, there is a public record of the standard so it could always be re-implemented.

PDF is a standard that was opened up by Adobe a while ago. Their product still remains as the best high-end PDF creator and reader. But the competitive marketspace for products in the $50 to $200 range has become much more interesting and the small businesses, EDU’s, and non-profits who used to pirate Adobe acrobat to meet their needs now have affordable (and free open-source) alternatives. Because of this, many progressive states have put PDF on the approved list of formats to distribute forms in, while Word is not.

Recently MS realized the jeopardy they are in, especially in government situations, after a head IT guy for Massachusetts declared that MS was out because it isolated poorer people, libraries, and edu’s from opening state documents. There was a big fight, MS threw money around, and that guy got fired. But it scared them since the OASIS alliance’s ODF (Open Document Format) is already an approved international standard (ISO) which means it is acceptable under Massachusetts proposed requirements.

So, Microsoft went so far as to try to get their standard Office 2007 file format standardized with a separate standards body. Most of the technical community welcomed this move cautiously in the sense that Microsoft would no longer be the only ones who could open their office files without a lot of reverse engineering. But many said it was a poor standard.

Here is Jeremy Allison’s take on this subject. He is one of the lead designers / software engineers who wrote the code for Linux to be able to talk to and join windows file-sharing networks and windows NT domains. And Google agrees with his opinion.

But the thing I like about this is that Microsoft was finally forced to out their standard into the public, so now it is up for debate. The community at large (or representatives from all the countries in the standards body) gets to decide whether it is good enough to be a standard, and if it is worth having two standards out their competing for marketshare. No longer is it determined by Microsoft’s monopolistic manipulation of the market and the consumer. No longer will we be forced to upgrade every couple of years just to share files with eachother. If Microsoft wants to change their file format in word 2010 then they have to have it approved by the standards body all over as a revision to the standard (that is if their standard is even improved)

More eyes on things like this only make it better, give it more competition, and benefits us as the consumer. And in my opinion the more things we get out in the open for other people to review and criticize (and use if you are into open-source like I am) the better.

A good collection of software

This is a CD filled with some high quality free software.

I can speak for the windows one in saying I use almost half of those programs on a daily basis, and have about 2/3 of them installed on all of my windows machines, and most of the cross-platform ones I have installed on linux as well. Also several others that I’ve been reading about on their website that I’ve never heard of appear to be hidden gems to me that look very useful and very well done.

Check the Questions and Answers section to see the list of software packages on the CD.

The Open CD is also a good project with a similar aim in mind, but I prefer some of the Starving Students CD software in comparable categories (i.e. I prefer uTorrent instead of Azureus for my bittorrent needs)

Beyond the Catlin MythTV Project

Now that MythTV works (but alas, it still doesn’t output to my TV, and the HDTV signal is choppy as hell on the P3 1GHz machine), I am thinking beyond it to move my home to the next level.

For a while now I’ve talked about home automation, integrated with the computer network, available from the TV or computer. Something I thought MythTV could be extended to do.

Well, some other people have decided to not extend MythTV, but to build an over-arching program that controls MythTV, Asterisks PBX, some home automation stuff, and a bunch of other neat stuff.

It is called Linux MCE
(More details in this great video discussed here if you are interested)

I’m slowly building parts to work towards this, and here are the details on how.

Did you know Newegg has wishilsts now….how exciting for nerds like me.

Step 1) Get parts for turning current AthlonXP 1800+ machine into a “Core” system for the Linux MCE. The core system does not have to be super beefy if it is not going to run the front-end / video decode. I plan on taking advantage of the parts from Step2, and MythTV’s capability to off-load tasks to other computers for re-encoding video and doing simultaneous recordings.

Parts List for Step 1

Step 2) Get new desktop. I still haven’t decided if this is going to be an Intel or AMD based system. So I’ve spec’d both (I’m still waffling on a couple of things on there, and as always lists like this are subject to change relative to the latest and greatest / price cuts that happen on the market)

Intel Desktop Parts List
AMD Desktop Parts List

Step 3) Upgrade Home Theater stuff. HDTV, receiver, and maybe some new speakers. I don’t like any of the Blue-Ray / HD-DVD stuff yet cuz it is still a stupid format war that I will automatically loose at if I bother to participate. So, I ignore it until the problem goes away and prices drop.

For this I’m planning on something in the 32″ to 47″ LCD (preferably LED back-lit) 1080i or 1080p from Samsung (resolution depends on the prices when I finally have some money for this)

The receiver will probably be Dennon, cuz I like them. Unless something higher-end drops into the realm of affordability.

All these components need to have RS232 or the ability to control over HDMI, because I want the controller to be able to turn things on and off for me with a single remote press (watch the video for LinuxMCE linked above, this feature is pretty sweet)

Step 4) Build Home Theater PC. Focus here is on ability to do two streams of HDTV (I like PIP) but have a very quiet hard drive and fans. Style and ability to go into the stack of media components around the home entertainment center is also important.

Incomplete List of Parts from newegg Need to add a quiet small hard drive (or perhaps a Compact Flash Adapter Instead), a TV Tuner Card, and a case.
The case will most likely be the SilverStone Milo ML02
(Review Here

Step 5) Re-do antennas (or add to my DIY antenna), Cable wiring, network wiring, and buy a distribution amplifier.

Step 6) Rebuild old P3 1Ghz with a quiet Hard Drive and cooling fan for SDtv upstairs / DVD player / security monitor. (No monitor, just a TV output)

Step 7) Plan home security / automation. I’ll start with the Garage Door. It keeps getting left open by all three of us (well, at least Elle and I, since Lauren doesn’t drive right now), and I was thinking it would be great to have a switch in the house, along with an “Open” indicator. Then I’ll add some IP based webcams, and maybe some dimmer switches (can you dim those new florescent bulbs?).

Step 8) Sell house, and start over from scratch ๐Ÿ™‚

And there you have it, my next really big multi-year project. I’m just glad I know I can make the mythTV part work going into it.