Developing software is a very tough business. But days like this make me believe that the world would be better off without software! For two days I have fought a very simple but elusive issue in Eclipse. Basically, when I installed Eclipse it wasn’t picking up any execution environments so no project would compile nor run. A screenshot of the empty Execution Environments screen is below.
Empty Execution Environment
I first thought this would be an easy problem to fix so I used the world brain. When that failed, I had to actually use my brain. It turns out, Eclipse gathers information about JREs available and stores that information in a configuration file (libraryInfos.xml in the .metadata/.plugins/org.eclipse.jdt.launching/ directory inside the newly created workspace). And I think this auto-generation is where the bug lies. Specifically, when Eclipse grabs the version information from a newly added JRE/JDK it can get corrupted. When it works correctly the Execution Environments screen looks like the following. FYI, in this case I used the Sun JDK 1.6 to run Eclipse.
Available Execution Environment
Here is a snippet of the libraryInfos.xml file when the bug is visible: <libraryInfo home="/opt/sun-jdk-1.6.0.07" version="CompilerOracle: exclude org/eclipse/core/internal/dtree/DataTreeNode.forwardDeltaWith 1.6.0_07">
and here is a similar snippet when the bug is not visible: <libraryInfo home="/opt/sun-jdk-1.6.0.07" version="1.6.0_07">
Notice that the version information is pretty funny looking?
And it looks like it is connected to the .hotspot_compiler file that I am using. The contents of it are: exclude org/eclipse/core/internal/dtree/DataTreeNode forwardDeltaWith
which causes the following to be printed on the command line when Eclipse starts: CompilerOracle: exclude org/eclipse/core/internal/dtree/DataTreeNode.forwardDeltaWith
So I assume this is a bug since it would be a crazy feature. My work-around is to move (or rename) the .hotspot_compiler file the first time I run the new Eclipse. I then add the Java JREs, close down Eclipse, move the .hotspot_compiler file back, and then restart Eclipse. Once the JREs are added the issue no longer persists (unless new JREs are added).
For more than 4 years I have been meaning to create a personal site for myself on wallentine.com. Last night, I finally uploaded a site that not only has real information but also has a tidbit of style. I now present todd.wallentine.com to the public.
On my site you will find a collection of information that will be evolving as I have time to upload new material. It should give people a good idea of who I am and what I have done. This site should help to establish my personal brand. And it also helps me to work towards completing my 2008 goals.
I should mention that the design of the site was taken from Raymond Krause (pogy366) who generously posted it on the Open Source Web Design site. I really like that site since the designs are free to use, they host a large number of designs, and many of them are very, very good. This design should be good enough for now – at least until I can afford to hire Ben to redesign it for me.
I would love to hear comments from my hordes of blog readers (all 3 of you). Feel free to comment on the content, the design, and anything else that bugs you.
Last week I got a little angry at an old trusty friend – my firewall. We have been together since 1994 when my dad purchased me my first PC – I was heading off to college and needed something to play games on .. er, I mean do homework on. It was a Gateway 2000 tower (P5-90) that had all the bells-n-whistles from that day (Pentium 90MHz processor, 730M hard drive, 8M of RAM, printer, 15″ CRT, keyboard, mouse, Office 4.3, and 56k modem with a price tag of $2900). It was eventually upgraded to a 200Mhz MMX Overdrive processor, 16M of RAM, and a 2G hard drive.
During college it served as my workstation for homework (papers and programming assignments) and as my connection to the world (email, ftp, gopher, irc, and eventually the web). It even hosted many nights of Madden Football tournaments.
At some point I started to feel like the machine couldn’t handle my daily activities and it became a file and web server. Eventually, it was moved into a position of trust – the firewall on my home network. It was at that time that I installed OpenBSD and used ipf/pf to protect my home network from evil-doers that lurk on the internet. It performed this duty admirably for many years (at least 5) and needed very little maintenance (2 upgrades of software and 2 non-upgrade-related reboots – take that windows).
So after all of those years of service in all of those different roles, it finally decided it was ready to retire. The day started with frustration because the home network wasn’t connecting to the internet. I did everything possible to diagnose the issue and decided that I needed to restart to sync the firewall with the cable modem. After a restart it started working again – ah, sweet relief.
Later that same day I started having issues again. It looked like the network card in the firewall which was connected to the cable modem was failing so I decided to stop the machine and try to reseat the card. After a quick cleaning of the inside of the machine and reseating the card, I restarted the machine. That is when the machine informed me of its final decision to retire (it wouldn’t POST but instead reported an issue using the internal speaker using a sequence of beeps: 1 3 4 1).
Long story short, the machine is toast. I will probably spend a few minutes when I get some time trying to get it back online. But considering the age of the machine it is probably a loss.
Farewall good friend, you have been very good to me. From Madden football to Pascal homework and beyond, you have been a trusted aid. And your services will be missed.
For those of you that don’t know me that well, I am a super-nerd and get attached to technology. Especially trusted technology!
Update (10:15a 11 July 2008): The DNS information should be propagated by now and most of the bugs worked out. We had some issues with CVS and host name that needed to be fixed. Hopefully those are the last bugs we find for a while.
Update (5:00p 09 July 2008): Looks like the DNS information is harder to change than expected. So the post of this entry was a little premature. Oops!
For the last 2+ years I have been working to upgrade our project management server to use new hardware and new software. And it is finally complete! Today, we finalized the migration from the old project management server to the new one. The new one is running GForge AS 5.4 purchased from the GForge Group. We had several issues getting this done but it looks like the job is complete (some of them mentioned in this post).
I would like to take the time to thank Tim and Marcelo (from the GForge Group) for helping get the migration completed. They certainly worked hard this last week to make sure this happened.
I would like to thank Travis, Cole, and Seth (past and present members of the CIS system admin staff) for working to get this migration completed. They worked on it for quite some time to make this happen. They also suffered my constant pressure to get it done and get it done correctly.
I am particularly excited about a couple of features in the new software: 1) CruiseControl, 2) the Eclipse plugin, and 3) Subversion. I have used CruiseControl for some toy projects in the past and I am really interested in getting it to work for some of my real projects (SpAda and Cadena). And since I use Eclipse as my main work environment, it will be nice to have the ability to interact with GForge from inside of Eclipse. That integration will make it easier to track and fix bugs as well as keep on task. And with the ability to use Subversion, I will finally get a chance to try it out. I have been using CVS for so long that I do checkouts from my fridge to get my midnight snack.
But the best feature is that the CIS department system admin staff will be taking over the admin duties for the box. This means no more late nights or early mornings fighting with the machine. And it means no more customizations to deter script kiddies. And it means no more little changes to the GForge code to make sure it works correctly. Best of all, no more KSUAFRS (a custom download manager that Jesse and I wrote for GForge) – John and Robby decided that feature was no longer necessary.
I am really glad that this task is complete, that it got done without any major issues, and that the admin duties now fall on the department (instead of me).
Today is the day that the project management server is getting migrated. It will soon be running on new hardware (dual Opteron 248, 12G RAM, 80G hard drive) using new software (GForge AS 5.4). I am hoping that in a few hours I will post a completion announcement here.
Wish us luck and say a prayer that Murphy doesn’t visit Nichols Hall today.
I have been doing this on-n-off since then and have generated 4460 grains of rice. I am pretty steady at vocab level 40 (although I have dropped as low as 36) and hope to achieve their highest rank of 60 at some point (fat chance but I like to set lofty goals).
Sorry, I just had to brag a little bit. Besides, it is always fun to promote worthy causes – and feeding the hungry is always a good cause.
I just watched this hilarious video that makes fun of both techies and non-techies. It does have some vulgar language so make sure to not watch it at work or around kids (or around those that will be offended). I was laughing out loud watching this.
It does remind me that techies like me have no business talking to regular people.
I recently read “Correctness by Construction: Better Can Also Be Cheaper” by Peter Amey and found it very interesting. As I worked in the SAnToS Lab for the last couple of years, I have become convinced that correctness by construction can certainly save time and money. So it is nice to see a well thought out and supported argument that this methodology is good.
The author’s stated goal is to “prevent errors ever making it to test.” Quite a worthy goal and something that would save time and money in development. And our lab shares this goal as we develop our products (I say product very loosely since our software is more like academic research prototypes).
One of the best parts of the paper is the reference to “Cost Effective Approaches to Satisfy Safety-Critical Regulatory Requirements” that details the improvements that Lockheed Martin saw using this type of approach. They got 4-fold productivity gains (over previous comparable programs), 10-fold quality improvements (over industry norms), and the cost was half (in comparison to non-safety critical code). This provides real numbers to debate the correctness by construction approach.
While I like the fact that there was data used in this paper, I have trouble with the 10-fold quality improvement claim since it compares it to industry norms. That isn’t exactly an apples-to-apples comparison so it isn’t overwhelming evidence. Good data, just not enough for me to claim it is conclusive.
I also wondered about another statement from the paper. In the paper the author says “…time is spent in the integration and validation phases … We are spending most of our time at the most expensive point in the life cycle.” I wonder if other methodologies might offer alternative ways to deal with this problem. I was thinking the (relatively new) agile methodologies might reduce the cost of integration and validation since they will be done more often and throughout the process.
In the paper the author says “Worse, it is the point at which any delay will inevitably affect the overall program schedule.” I don’t like how this is stated since I believe that any delay will affect overall program schedule, not just those delays that happen during the integration and validation phases. I think it is true that they become more costly. I further think that delays during these phases are harder on the project simply because there is less available slippage time towards the end of the project. So I agree with the authors point (delays during integration and validation are tough on projects), just not the way it is stated.
In the paper the author says “Purpose-designed languages with formally defined semantics are a fascinating research topic but are unlikely ever to achieve the kind of critical mass required to make them suitable for widespread industrial use.” I was stunned by this statement and the paragraph used to support it. Keep in mind that my research group is working in this area (creating tools to make it easier to develop using domain-specific languages). I have a hard time quantifying “widespread industrial use” since SPARK and Ada are probably far from that in my mind (I would say C, C++, and Java are the ones I would name off the top of my head as being in widespread industrial use). The author also goes on to say “It also has several major flaws: you can neither buy a compiler for it, nor a textbook, nor get training, nor hire staff! This is a fundamental drawback of the custom language approach.” I can understand that a closed language that only has closed tools has those major flaws. But an open language (published syntax and semantics) means that anyone can develop tools for it. And an open source tool chain means that everyone can use, share, and extend it. So a custom language is not exactly what the author should dislike. He should dislike proprietary languages whose syntax, semantics, and tools are hidden. And on the other hand, the author should like open languages that have open tools.
In the paper the author says “So our first opportunity to explore the behavior of the software in any rigorous fashion occurs very late in the development cycle with malign consequences.” Maybe I don’t quite understand what the author is getting at but there seem to be many ways to explore behavior of software well before object code. For example, using the original Cadena, a developer could specify the internal behavior of a component using a state-machine. The behavior of the system could then be analyzed to explore the software well-before object code is written. And I assume there are many other tools in this area where modeling is done and some form of analysis is performed on the model. I am not that familiar with Alloy and Alcoa but that seems to be its purpose.
Even more, a development team could use a test-driven approach to development which allows them to explore the behavior from day 1 in the development cycle. Or even using symbolic execution (e.g., Kiasan or JPF) so that the whole of the system doesn’t need to be available, just the portion under analysis.
What is a safety-critical system? They define it in the following way: “Such systems are characterized by the proportionally very high overall effort that goes into showing that the system is fit for service: the V&V effort.”
What is MC/DC? I obviously didn’t pay enough attention in my software engineering classes. But this page was able to educate me on what it is.
What is a purpose-designed language? I couldn’t find a definition for this but there were several references to it when I searched Google. My assumption is that this is the same thing as a domain-specific language.
What does “thin-slice” mean? I couldn’t find a good definition of this but found a reference in a book titled “Service- and Component-based Development: Using Select Perspective and UML” by Hedley, et. al.
What is the “Newspeak” language? This is a reference to the book “1984″ written by George Orwell. It also appears to be a reference to a language quoted in a book about Alan Turing. The author uses a reference to this as a justification that custom-languages are not a viable approach to the stated problem.
Overall, I really enjoyed the paper. It states real issues in developing safety-critical systems and offers a solution. I just wish the author would have made a more compelling argument – if I didn’t already believe it, I might not have agreed with the paper.