Eli B1405 Boling

I've worked on software development tools most of my career. Started with a small Lisp company called Gold Hill Computers, and moved on to Borland, in its various incarnations. Took a hiatuses to work at a games company, and a massively parallel computing company (Ambric), and then moved back to the tools group, now at Embarcadero. And here I am.

Posted by on in Blogs
I use Emacs quite a bit.  It's very common for me to be looking large dumps of data that are tabular in nature.  Symbol table information, usually, but it could be lots of things.  Usually it's the output of one or another command line utility for dumping some file format.  In any case, it's also very common for me to get a few hundred lines down into some table, and be looking at an entry, and to forget which column is which.  And so I go back to the header, and look again, then back to the entry.  It's pretty irritating.  So I whined about this, and someone told me about Emacs Header Lines (http://emacswiki.org/emacs/HeaderLine), and I was very pleased.  So I spit this little function into...

Posted by on in Blogs
So I almost got burned by a function.  Partly my fault, because I didn't read the online documentation on it.  I looked at the API in the header file, and it had very limited documentation, but mostly enough for me to figure out it.  I also happened to be looking at the implementation, and noticed that I was hanging onto a live wire. So the API looks like this, with the names changed to keep this general: char *RenderSomeStringConversion(const char *in, char *out, size_t *out_size); Now, the out_size parameter should have warned me a little, since it's a pointer to the size. Maybe I should have looked further there.  Anyway, the API takes the input string, does translation on it, and dum...
Tags: C_Builder

Posted by on in Blogs
The title of posts like this is intended to indicate events that were pretty painful, and where the fault was all mine. So, shortening up the damage chain, on IA-32, if you do this: FSTP [some location] ... FILD [some location] and the FPU stack was empty at the FSTP, you'll die on the FILD instruction.  The FSTP just sets some condition bits and fails silently.  So, in this case, the '...', of course, was really a long long distance.  Specifically, it was in either Move or FillChar in the Pascal RTL, which use FILD for optimization for larger moves. Either Move or FillChar?  Well, yeah, because I started hunting around with writeln to bracket things, and it moved things around. ...
Tags: Delphi

Posted by on in Blogs
This is a little bit of a dead horse beating, but it's still relevant, so what the heck, why not.  RAM is extremely important to me as a developer for the obvious reasons, so every once in a while, I look around at my processes, and see who's being an oinker.  I was a little surprised at the results. First of all, a reminder about my dev system:  Macbook Pro, running VMWare 3, which is constantly running Windows 7 Ultimate (32bit just now).  I keep a number of Mac apps up pretty much all the time.  These include Adium, Skype, Mail, iCal and Safari.  Safari typically has just one window open, pointing at gmail.  Throughout the day, I use Safari a lot, researching technical topics, research...
Tags: OS X

Posted by on in Blogs
Yesterday I finally switched from a Cisco add-on VPN to the built-in VPN support in Snow Leopard.  The built in stuff is much nicer.  Easy to use, performant.  I had, however, a little hitch along the way. I have a Windows VM running on the Mac on which I do all my dev builds.  My dev machine is a Macbook Pro. I run VMWare Fusion, in unity mode, and life is generally good; it's a very nice cross targeting solution.  The hitch was that when I switched VPNs, DNS no longer worked from the Windows VM for names inside the VPN target domain(s).  Lee is my go-to guy for problems like this, and he and I spent quite a while poking around at it.  We learned interesting things about the differences ...
Tags: OS X

Posted by on in Blogs
So, I'm sitting in the Denver airport, on my way to Massachusetts, on a longer layover.  I went to some crappy sports bar, and they had some very unpleasant food, and so I found a cantina upstairs that I thought might be able to wash away the sports bar.  Corn Poblano soup, and a reasonable local wheat beer, and I was feeling better.  Reading my book at the bar, as the soup arrives, and I pull the soup in, so I don't dribble, and the book goes in front, and I lift it up a bit, so I can see, and the bar tender (younger guy) promptly says "So, what is the trouble with physics?"  The book I'm reading just now is "The Trouble With Physics", by Lee Smolin. Mind you I don't always read stuff li...

Posted by on in Blogs
I love my Mac.  I hate the CD drive in my Mac.  I've hated all the CD drives in the Macs for a while.  What I can't stand about them is the lack of a physical manual eject capability.  Others have had this complaint.  I don't know why Apple did this thing, but they did it a while ago, and they continue with it.  It's the conversion of the Mac to a little CD/DVD ATM machine.  You put the thing in, and if it isn't quite the right thing, you really can't be sure you are going to get it back, and once it's in there, the drive is useless to you. I have two scenarios that I've run into that really ticked me off.  Most recently was about an hour ago, when I was trying to dredge up some old data ...
Tags: OS X

Posted by on in Blogs
Introduction Dynamic linking has been available on most operating systems for a long long time now.  It is interesting, however, to peer into the origins and resulting behavior of some aspects of symbol binding on various systems.  You might be surprised by the results. To focus this discussion, what I'm talking about here is basic support for linking to symbols in shared libraries.  These are DLLs on Windows, shared objects (.so) on Linux, and dynamic libraries (.dylib) on OS X.  There are other platforms of course, but these are the ones that may affect our customers in the near term, so that's what we'll talk about today. I'm not able to speak authoritatively on some of this topic....

Posted by on in Blogs
I was part of the team that was passed through the Kylix threshing machine originally, so I decided to do a little research into shared library initialization and termination early on.  Some very difficult to debug things can happen to you if you get surprised by library load/unload sequencing on a platform. When we did the original linux work, we started out with the assumption that the loader worked the same as Windows with respect to initialization order.  We assumed dependencies were initialized first, in a depth first ordering.  I don't remember anymore what the default ordering was, but it wasn't right.  We found out that the tools are responsible for supplying the shared object ini...

Posted by on in Blogs
Purists and pragmatists will argue over the feature of converting hardware level exceptions into RTL exceptions.  This is the feature where you catch, for example, a memory access violation and keep running your application. Purists will say you should never do that, because you could wind up doing serious damage down the line to users' data, if you don't know what caused the bad pointer in the first place.  Pragmatists will observe that some very large percentage of these come from things like null pointers resulting from some missing fence test, often triggered by some odd combination of user input, and why would you force the user to lose data by letting the app crash?  I'm with the pragm...