Quote of the Day
Total abstinence is so excellent a thing that it cannot be carried to too great an extent. In my passion for it I even carry it so far as to totally abstain from total abstinence itself.~Mark Twain
... finding elegant and efficient solutions to real-world problems ...
Developing elegant, high-quality solutions for highly technical problems in C . I like to work on both high level and low-level architectures - contemporaneously if at all possible - designing the overall solutions on large scale as well as the important details. I like working on parallel and distributed systems and systems of systems and finding elegant and efficient ways of developing solutions for real-world problems.
- C & C++
- C++ for the self-taught
- Computers and Society
- Embedded software development
- GNU/Linux (OS)
- Industrial Automation
- Interesting stuff
- Radical Refactoring
- Smart Grid
- Software Design
- Software Development
- Software Engineering
- Software Testing
- This blog
- Vlinder Software
- October 2014
- September 2014
- August 2014
- July 2014
- March 2014
- February 2014
- January 2014
- December 2013
- November 2013
- September 2013
- July 2013
- June 2013
- March 2013
- January 2013
- December 2012
- November 2012
- October 2012
- September 2012
- August 2012
- July 2012
- June 2012
- March 2012
- January 2012
- December 2011
- November 2011
- October 2011
- September 2011
- August 2011
- July 2011
- June 2011
- May 2011
- April 2011
- March 2011
- February 2011
- January 2011
- December 2010
- November 2010
- October 2010
- September 2010
- August 2010
- July 2010
- June 2010
- May 2010
- April 2010
- March 2010
- February 2010
- January 2010
- December 2009
- November 2009
- October 2009
- September 2009
- August 2009
- July 2009
I’ve written parsers and interpreters before, but usually in C++ or, if I was feeling like doing all of the hard work myself, in C.
I explained the problem I presented in my previous post to my wife overt dinner yesterday. She’s a professor at law and a very intelligent person, but has no notion of set theory, graph theory, or algorithms. I’m sure many of my colleagues run into similar problems, so I thought I’d share the analogies I used to explain the problem, and the solution. I didn’t get to explaining how to arrive at computational complexity, though.
query routine that takes a name and may return several, write a routine that takes a single name and returns a set of names for which each of the following is true:
- For each name in the set,
queryhas been called exactly once.
- All the results from the calls to
queryare included in the set
- the parameter to the routine is not included in the set
You may assume the following:
- Calls to
- There is a finite number of values for names.
- Names are less-than-comparable value-types (i.e. you can store them in an
std::set) and are not expensive to copy
queryresults never contain their argument2
I recently went on a bug-hunt in a huge system that I knew next to nothing about. The reason I went on this bug-hunt was because, although I didn’t know the system itself, I knew what the system was supposed to do, and I can read and write all the programming languages involved in developing the system (C++, C and VHDL). I’m also very familiar with the protocol of which the implementation was buggy, so not knowing the system was a minor inconvenience.
These are some notes I took during the bug-hunt, some of which intentionally kept vague so as to protect the guilty.
The Globe&Mail dedicated half a page of the Report on Business section to managing your inbox today. People who work with me know that
- if you want to get ahold of me quickly, E-mail is not the way to go
- if you want a thought-out, thorough response, E-mail is the way to go
The flurry of DNP3-related vulnerabilities reported to ICS-CERT as part of Automatak’s project Robus seems to have subsided a bit, so it may be time to take a look at where we are regarding ICS security, and where we might be going next.
Of course, I’ll only look at communications protocol security in this context: low-tech attacks on the grid1 is outside the scope of this article. In stead, I will take a look at two questions: why the focus on DNP3, and what else could they, and should they, be looking at.
- e.g. letting two helium-filled balloons up with a wire between them, under a high-voltage power line, in order to cause a short between the phases ↩] [
There have been a number of well-publicized security flaws in open source software lately — the most well-publicized of course being the OpenSSL Heartbleed bug1.
Then there’s the demise of Truecrypt, recent bugs in GnuTLS and recent bugs in the Linux kernel.
So, is there a systemic problem with Open Source software? Does proprietary software have the same problem?
- OpenSSL is very widely used, which makes its effect on the Internet enormous, and the effect of bugs in the protocol implementation huge. That explains why such bugs are so well-publicized. Another factor in the publicity is the name of the bug (which was very well-found). [↩]
I don’t usually use this blog to vent frustration, but I’ve been reading standards lately…
There are four versions of the horse:
- Pony. Horses as the Good Lord intended them. Strong and sturdy, yet soft and cuddly; obedient yet intelligent; and I’m told they’re rather tasty too!
- Horse. All the qualities of the pony, without the esthetics.
- Donkey. The beta version of the pony: strong and sturdy, but none of the frills and quite a few bugs in the programming. Also: they don’t taste nearly as good (or so I’m told).
- Ass. What the beta version became when the PMO took over.
- Cow. A forked-off project from the (then open-source) Horse project that went for taste, combined with a bigger ass for the workload (in the form of an ox — you didn’t think I misspelled ass, did you?)
- Dromedary. When some of the committee members got tired of trying to reach a consensus, they took what they had and ran with it — even if it’s running was more than a bit awkward.
- Camel. None of the looks. Some of the features. Some features you didn’t think a horse should have. Some you didn’t think a horse could have. More of the smell. Much, much more.
When you count, that doesn’t add up to four, does it?
That’s what design by committee is all about!