Press "Enter" to skip to content

Why isn’t there a naming convention for APIs?

centaur 0
I was working on an API and had trouble picking a name for
a particular operation (which we'll call, say, "getCurrentText"
for sake of argument). TheFullyExplicitName was a little long
and unwieldy and I hve vry strng f3l'ns agst Un*x stle abbrs,
so I wanted to derive a simple text name that fits with the
rest of the API (read, readLine, isMoreNeeded).

So I ferret around on the web and find a few interesting
resources:

Java Collections API Design FAQ

API Design with Java

but no good resource for overall API names.

It seems to me there should be a standard lexicon of API
names. Just as there are standards for names in given languages
(e.g., getX/setX in Java, get/set properties in C#, -p predicates
in Lisp, isX for predicates in Java-like languages, etc.) there should
be standard names we can use for APIs with standard definitions

read/write or read/print

open/close

clear

iterator/hasNext/next

and so on. I guess there need to be two parts to this library:
the semantic list of terms that are common to many APIs, and
standard names that have maximum usage across the API's
semantic contents.

Anyway, just rambling.

Blogger gets a Second Chance

centaur 0
Ok, I don't have a lot of time to post --- we're in the middle of a software release and things are pretty tight. But I just fiddled around with alternate blogging software only to find that my expensive hosting provider (sounds something like "Worthfink") is on a version of Perl so old that the OddMuse software (used to run the excellent Georgia Tech Taido wiki) will not run.

So blogger gets a second chance.

12:23pm hit return.

A Strike Against Taurlink

centaur 0
As part of "renewing the Library", I'm digging up all the old "Articles" from the "classic" version of this site, which I maintained by hand before I trusted blogging software.

So now I bring you a blast from the past: "A Strike Against Taurlink", from April 23, 2004. Boy, this was a heck of a rant, at least by my "can't we be a little more diplomatic" standards:



Ah, the lovely state of tech support these days. Admittedly, I've had great experiences with tech support for *large* products produced by *small* companies --- toys sold to the tune of $100K a pop, feeding 100 or less mouths. But as soon as you get to products and services produced by 100K employees at a company charging less than 100 a pop ... welll... things can get difficult.

Here's an example, taken from a tech support chat session about a problem with a large Internet Service Provider we'll call ... "Taurlink". Since this is fairly recent, and I remember what I was more or less thinking while the conversation was ongoing, I've filled my thoughts in in italics.

Enjoy.


Welcome to TaurLink TechChat!

Some guy from tech support will be with you shortly. Your chat session may be monitored out of habit, but don't be worried about your privacy: no-one ever reads logs anyway.

'HelpGuy' has joined the channel.
HelpGuy: Thank you for contacting TaurLink TechChat, how may I help you today?
TheCentaur: Hi, Guy. I have a problem with running CGI scripts on my web hosting account that I've been unable to debug. The short story is that I can run very, very simple scripts (hello world) but when I try to run TaurLink's provided code samples, they fail with a 500 error.
HelpGuy: Can I know which script you are unable to run?
TheCentaur: Ok ... one moment...
HelpGuy: Sure.
TheCentaur: Ok, here's an example.
HelpGuy: TaurLink does not support custom scripts.

WHAT did he just say?

HelpGuy: Please check if you can use the Mailto script or not.
TheCentaur: Go back to the previous note. "TaurLink does not support custom scripts."
TheCentaur: Is this correct?
HelpGuy: Yes, I am sorry it is correct.
HelpGuy : Please check with the script from the link:
HelpGuy: http://help.TaurLink.net/websupport/startersite/mailto.html
HelpGuy: Once it works all the scripts should work.

Ok, that's nice that they have a testing script. But right now I'm not trying to run "custom scripts" ... I'm running code examples THEY provided ME!

TheCentaur: Are you aware of the CGI hosting help at this URL: http://help.Brainboing.com/docs/002/mime-n-cgi/BEHHBCEF.php3

That's a code example they provide, that doesn't work, that this guy's telling me he won't help me debug? Get real!

TheCentaur: Is this still valid?
HelpGuy: Yes, you can use that.
HelpGuy: It has the information on the scripts.
TheCentaur: Let me be sure I understand you correctly: TaurLink permits, but does not support, custom scripts.... and mailto is a good example of a script that *should* work.
HelpGuy: Yes, TaurLink allows you to use custom scripts.
HelpGuy: However, it does not support it.
TheCentaur: Ok.
HelpGuy: I apologize for the inconvenience caused to you.

Do you? Do you have ANY IDEA how close I am to typing
[Ctrl-Alt-G(oogle)] "internet service provider perl cgi" [RETURN]?

TheCentaur: I will try out the mailto script ... just a moment...
HelpGuy: Sure.

Ok, Guy, you may not be aware that I've got the site open in my FTP window ... and there is no frigging mailto script, so unless I don't understand CGI, this ain't gonna work.

TheCentaur: The mailto script does not appear to be in the scripts provided in dresan.com... where is the source for that?
HelpGuy: You need to create the two html pages and include the code that is there in the link.
HelpGuy: I am sure it will work.

[Gritting teeth] OK-now-working-through-whole-example, step by step, just because you say so. Create a web page, containing a form, pointing to the mailto script, which doesn't exist, uploading, uploading, opening in window, trying ... ok failure, just as expected, because there is no frigging mailto script for the CGI server to run.

TheCentaur: I assume you mean the link "http://www.domain.com/cgi-bin/mailto"
TheCentaur: where domain.com is my domain name?
HelpGuy: Yes, it is your domain name.
TheCentaur: Ok, just to confirm ... I have an FTP window open to the cgi-bin directory of dresan.com and there's no mailto script (and I get a 404 error when trying mailto in the URL of a browser). Should it be working anyway?
HelpGuy: Once you create the html pages it will work.
TheCentaur: One moment...
HelpGuy: Sure.
TheCentaur: Uploading now...
TheCentaur: ... uploaded.
HelpGuy: Okay.
TheCentaur: Testing...

And of course, it doesn't work, because there is no frigging mailto script for the CGI server to run, a fact which does not change just because I rewrote my script.

TheCentaur: Ok, when I ran it I get: http://www.dresan.com/cgi-bin/mailto
HelpGuy: Okay.
TheCentaur: HTTP 404 - File not found Internet Explorer

There's a long pause. Guy appears to be processing this.

Hm. I have an idea.

Perhaps my website, which is pre-TaurLink, is missing files he expects me to have! Perhaps that's the confusion. Maybe if I ask the nice web guy he'll recognize the problem and load my site up with the right stuff.

TheCentaur: Dresan.com is a fairly old web site ... I originally got it via Brainboing before you became Taurlink. Could it have an outdated collection of scripts?
HelpGuy: No, the address is not what you are entering.
HelpGuy: The html page should be one of the pages of the website.
TheCentaur: Ok.
HelpGuy: When the visitor submit the form then it will work.

[grit-grit-grit] Aaalright. Stay with me, Guy. Let's go through this step by step, just so you understand.

TheCentaur: Ok. Here is what I did:
TheCentaur: (1) I visited and read the URL: The page HTTP 404 - File not found Internet Explorer
TheCentaur: Shoot
TheCentaur: try again :-)

[laughs] Egg on face --- make sure the URL actually copies this time, centaur, or how can he follow you? Better start over, from step one.

TheCentaur: Here is what I did:
TheCentaur: (1) visited url: http://help.TaurLink.net/websupport/startersite/mailto.html
TheCentaur: (2) copied first code sample to test1.html
TheCentaur: (3) updated "domain.com" references in test1.html to point to "dresan.com"
TheCentaur: (4) copied second code sample to test2.html
HelpGuy: Okay.
TheCentaur: (5) uploaded to dresan.com via LeechFTP
TheCentaur: (6) visited http://www.dresan.com/test1.html
TheCentaur: (7) entered stuff into form and hit send
TheCentaur: (8) got a 404 error on http://www.dresan.com/cgi-bin/mailto
HelpGuy: One moment please while I check it.

Suuuuper long pause.

TheCentaur: Maybe I made a typo :-(
TheCentaur: Inspecting the source of test1.html, it seems like I've got the right URL. Did I read it wrong?

The long pause... continues.

TheCentaur: My hypothesis is that the mailto program is simply not present in the cgi-bin directory of dresan.com.
HelpGuy: Kindly hold on.
TheCentaur: Perhaps this is because dresan.com was created back in the days of Brainboing? I see a whole bunch of cgi* programs in that cgi-bin directory.
TheCentaur: Ok, sorry...
HelpGuy: One moment please.
TheCentaur: Ok.

Typing over each other here ... best wait for Guy to catch up. Is there something that I can debug here? What about these other old scripts. Ferret, ferret, ferret ... hm, there's at least one script that works, the site counter (which I don't use, but hey, it works).

Waiting... waiting... ok tired of waiting now..

TheCentaur: Note that the "counter" script seems to work.
HelpGuy: Yes, both the scripts should work.
HelpGuy: The mailto will also work.,

KA_GOTD_AMN_FUKKIN_BOLL_SHAT! ARE YOU LISTENING TO ME? ARE YOU EVEN PAYING ATTENTION? NO, the mailto script will not MAGICALLY start working just because I found a DIFFERENT script that DOES work ... because the mailto script DOES NOT EXIST!

Whooo... deep breaths, deep breaths.
Let's explain this as to a novice.
TheCentaur: Guy, the contents of the cgi-bin directory are: cgicso, cgiecho, cgiemail, cgifile, counter, justcgi.pl, simple.pl, and test.pl
TheCentaur: There is no mailto script.
HelpGuy: It is not required there.
Alright, the novice doesn't want to even listen. But let's give him the benefit of the doubt. What if I'm wrong?
[Ctrl-Alt-G(oogle)] "cgi scripting standard" [RETURN]
Browsa... browsa... browsa... Google sez: no fuckin way.

HelpGuy: I suggest that you recreate the two html pages once again.

Smiles patronizingly. Ok. I can play this game. How would I do it? What can I check? What could I have done wrong? Perhaps Guy, uberwebguy who can make scripts that don't even exist run, can perhaps work this out for me? Here, Guy, check this out?

TheCentaur: Ok. Perhaps there is a typo in my form: "http://www.dresan.com/cgi-bin/mailto"
xenotaur@Brainboing.com: Can you see what's wrong with that?
HelpGuy: It appears to be correct.

Shocked, shocked am I that ten years of web experience could enable me to enter a form.

HelpGuy: Please recreate the 2 html pages once again.
TheCentaur Alright.
HelpGuy: Okay.

Suure. Why the fuck not? Hey, I've done this what, three or four times now? I've gotten good at it. It should only take ... timing...

TheCentaur: Created form.html.
TheCentaur: Edited to point to right domain.
TheCentaur: Created thankyou.html
HelpGuy: Okay.
TheCentaur: Uploading...
HelpGuy: Okay.
TheCentaur: ...done.

...aaabout a minute.

HelpGuy: Let me check it.

Oh, there's no need, Guy. I'd ALREADY checked it. And this is what I found:

TheCentaur: Verified form presence: http://www.dresan.com/form.html
TheCentaur: Entered values, hit send...
TheCentaur: And 404 error.

Again: shocked, shocked am I.

HelpGuy: Kindly hold on.

Suuuuper long pause.

HelpGuy: Thank You for waiting.
HelpGuy: I apologize for the inconvenience caused to you.
HelpGuy: I am escalating the issue and it will be resolved soon. Please allow 2-72 hours for the issue to be resolved.
HelpGuy: Please do not delete the two test1.html and test2.html files.
TheCentaur: Ok.

He finally gets it. THANK YOU.

TheCentaur: Before you go, I want to bounce an hypothesis off you.
HelpGuy: I sincerely apologize for the inconvenience caused to you in this regard.
TheCentaur: No problem.
TheCentaur: Thank you for helping.

At this point I start to type my hypothesis about the presence of the script files he was expecting. Halfway through that sentence... and I mean, just a few seconds....

HelpGuy: You're welcome and thank you for using TaurLink TechChat. Should you need further assistance, please feel free to contact us again.
HelpGuy: Thank You for your patience and understanding.
HelpGuy: Have a good night.

Uh, Guy? Didn't you just read me say "I want to bounce something off of you? Quick, type:
"Hey, wait!" [RETURN]

Chat session has been terminated by the site operator. When you close the chat window a survey window will open. Please take a minute to fill in the survey and let us know how your chat session was.

AAAAAAAAAAAAAAAAAAAAAAARGH!


Thirty minutes later....
To the web hosting team,

I recently had a chance to chat online with one of your
technical support representatives. Upon the termination
of the call, your site attempted to pop up a chat survey
window but was blocked by a pop-up blocker.
However, I saved that chat session, appended below.
And I have the following comments:

1) Thank you for making technical chat sessions available.
Talking with TechGuy. helped me realize what was wrong
- namely, that I was trying to use code samples from

http://help.Brainboing.com/docs/002/mime-n-cgi/BEHHBCEF.php3

when I needed to look at the more modern help at

http://help.TaurLink.net/websupport/startersite/mailto.html

This dialogue enabled me to get more debugging
information about my problem, construct several
useful working hypotheses, and has given me new
potential actions to try to resolve the problem.

2) Update your web hosting help for former Brainboing customers.
This is the biggest thing that led me astray.
The code samples I found there

http://help.Brainboing.com/docs/002/mime-n-cgi/CHDDCFCH.php3

do not appear to work. At one point I carefully tested
this particular code sample and could never get it to run
in any permutation. After talking with Guy, however,
I was able to find some useful code to use as a starter.

3) Make sure that your technical support representatives listen carefully to their customers.
I understand that many users often make bad assumptions
which lead them to make mistakes which lead them to
assume that you guys have done something wrong
when you haven't. I know I fall in this category
from time to time.

However, with all due respect to Guy, I empathize with
techncial support representatives and myself have some
experience with server-side software, and so had carefully
read the available online documentation and attempted to
run code examples before I ever contacted you guys.

Now, that doesn'trule out a short between my screen and
my keyboard or some other id10t error on my part, but, I
must admit that it was somewhat trying for me to be asked
repeatedly to run the mailto script when I was looking at the
cgi-bin directory in my FTP client and could see that the mailto
script was not there. Now, Guy suggested that it didn't
need to be there, and perhaps I don't understand how
your common gateway interface is configured, and if so,
I apologize, BUT then you should reword the following

What standard CGI scripts are provided by TaurLink?

TaurLink provides the following ready to use scripts:

  • mailto
  • appendto
  • counter
so as to unambiguiously state that TaurLink is not actually
providing the scripts.

However, I think the simpler answer is that if the script
isn't in the cgi-bin directory, it won't run. And I think that
might be traceable back to the fact that this is an older account,
originally set up on Brainboing, that may not have had mailto
installed in it. Or maybe there's some other explanation.

4) Make sure that your technical support representatives listen carefully to their customers.
I quote the following section from the chatlog.
TheCentaur: Ok.
TheCentaur: Before you go, I want to bounce an hypothesis off you.
TechGuy: I sincerely apologize for the inconvenience caused to you in this regard.
TheCentaur: No problem.
TheCentaur: Thank you for helping.
TechGuy: You're welcome and thank you for using TaurLink TechChat. Should you need further assistance, please feel free to contact us again.
TechGuy: Thank You for your patience and understanding.
TechGuy: Have a good night.
Chat session has been terminated by the site operator. When you close the chat window a survey window will open. Please take a minute to fill in the survey and let us know how your chat session was.
Now, I'm sorry, but "Have a good night" is not an appropriate
response to "Before you go, I want to bounce an hypothesis off you."
In all fairness, I don't think Dan even saw that, as he responded quite
well to my "Thank you for helping." However, I must be honest and
say that it left me somewhat vexed.

5) My experience with the CGI features of Brainboing/TaurLink web hosting has been underwhelming
From limited documentation, non-working code samples, lack of
response to my earlier emails, and finally to the difficulties I had
in communicating the problems I was having with my scripts,
I am seriously questioning why I spend money on this service.

To be more blunt; when I heard:

TechGuy: TaurLink does not support custom scripts.

You came within thirty seconds of losing a customer. I feel
like shouting "But I was calling you with regards to YOUR
PROVIDED CODE SAMPLES!" followed by a long stream
of cusswords, but that's not fair to you or TechGuy.

Now, on one level I understand where you're
coming from; and this policy is not TechGuy's fault.

Nonetheless it is completely unacceptable.

I have a choice in selecting a web hosting provider, and
based on my previous good business relationships with
Brainboing I have chosen to stay with TaurLink. However,
what I am paying my web hosting for is to get scripting
access, and if you cannot provide it, there are other
choices available.

I look forward to your response.
-Anthony
--
Dr. Anthony G. Francis, Jr. ~ Software Engineer
xenotaur@Brainboing.com ~ http://www.dresan.com/
5 King's Tavern Place, Atlanta, GA 30318 ~ (404) 483-8215

Epilogue

Taurlink did not adequately respond to my complaint.

Actually, it's worse. My first response was entered into a comment form, which promptly ate it without sending it. I re-wrote the response (above) and DID get a response from TaurLink Tech Support ... asking me to return for another chat session to "work through" these issues interactively.

Which of course I HAD JUST DONE. There was no indication they had actually READ the response ... just went with their standard reply:

"In order to help you these issues as efficiently as possible for both yourself and TaurLink... we suggest TaurLink TechChat!"

I'm sorry, I'm not going to play that game. I have a choice for my hosting providers. f@nu fiku will be hosted on another provider, and if that provider works well I'm pulling the plug on Taurlink as my web hosting service provider.

-The Centaur
Renaissance Engineer


A Strike Against Blogger

centaur 0
Continuing the translation of "articles" to modern blog entries... Article 34 from March 16, 2004.


Strike one against blogger.

I haven't been using it for a week and already I have problems. I can no longer publish blog entries to my web site.

I'm not sure of the cause yet, so I'm going to do some research and give them a few days to work out the kinks.

But, regardless, this is pretty stale for week one.

More on Languages…

centaur 0
Most of my concerns last time were about syntax, which might strike you
as superficial. So before I get any further into syntax, let me recognize
the importance of a clean underlying language model.

There's a lot of value to a pure language model. A clear low-level imperative
model enables languages like C and FORTRAN to be translated into efficient
machine code, making them good system and scientific computation languages,
respectively. A clear object model enables packaging vast quantities of code
into rich libraries for reuse, making Smalltalk and Java good languages for
experimentation and rapid development, respectively. Pure functional
orientation makes correctness proofs and parallel transforms easy,making
Haskell and Objective Caml darlings of the language design movement.
And pure logical design makes it easy to specify what you want to do,
rather than how, and that makes languages like Prolog and Mercury
popular in certain artificial intelligence circles.

But, in my mind, pragmatics ultimately trumps all. There's a reason
C++ was built on top of C, a reason Java has bare-metal types,
a reason Lisp has (progn) and (loop), a reason Prolog has cut.
Programmers have to be able to use the language to solve useful
problems, or the language is a toy.

Now, this isn't intended to denigrate language designers who have
taken one element of the paradigm to the max while at the same
time focusing on pragmatic concerns like execution efficiency,
expressiveness, and ease of use. But, to be frank, most language
designers who do leap onto the fundamentalist imperative / functional
/ logic / object-oriented bandwagon don't even bother to address
such concerns --- because they are fundamentally incompatible
with the programmatic consequences of the delusions and lies that
their religious views force them to adopt.

Which brings us back to syntax. Time and time again, I've heard
language designers say "I don't like such-and-so features, so I'm not
going to put them into my language." Balderdash. That's not a valid
reason to do something in a programming language that
other programmers are supposed to use
; it's just childish
foolishness. Oh, you don't wan't multi-line comments, nested comments,
or function types in your language? Too bad. Grow the fuck up.

What's a good reason to do something in a language? It's about the
consequences. Multiple inheritance was omitted from Java because
it caused problems in the semantics and construction of C++ which
made it difficult for programmers to construct correct programs. Similarly,
at the syntactic level Java uses a separate assignment and equality
symbol and removes the equivalence of integers and booleans
to prevent a class of common programmer errors.

On the flip side, having expressive syntactic notations like the slice syntax,
list comprehensions and hash table constructors makes it possible for
programmers to write programs that accomplish a great deal concisely.
Lisp, my favorite language, makes it hard to write concise programs
because of its over-reliance on parentheses as its single list / grouping
/ code block / function definition / macro / what have you construct.
I understand completely why ultimately a real Lisp dialect has to be
reducible to something like an s-expression comprising functions and
data. But programmers should not have to write
all of those s-expressions if there's a more concise way to represent
it, nor should they have to rely on squinting at flashing parens and
reformatting indentation in their syntax-aware graphical editor just
to know whether or not they've written the right number of enclosing
parens on whatever godawful cond-lambda-reduce-map construct
they had to construct to get their job done.

So my plan moving forward: collect examples of syntax I like, and
show how they might reduce to s-expressions in a variant of Lisp.
Ultimately I want to push this back to collecting examples of semantic
features I like, and derive a clean model that would be both expressive,
interpretable, compilable and efficient.

What I Want in a Programming Language

centaur 0
I've been doing a lot of thought about language design recently. I just switched from a couple of years of Visual Basic hackery back to the more familiar territory of Java, and while most of my time has been spent reacquainting myself with the landmarks of my college town and checking out the features of the new mall, I've also had a chance to check out some of the neighboring countryside. The up-and-coming development called C# is growing nicely, and while I was wandering the old town suburbs of Bash scripting and Perl I ran into the charming subdivisions of Python and Ruby, also with many features.

But while I was born programming FORTRAN and shortly thereafter moved to BASIC, my hometown language will always be LISP. And while I like many of the features I find in modern languages, I find myself still hankering after LISP's elegant s-expressions and the ability to compose arbitrary data structures with them.

I suppose that's the same nostalgia a C programmer gets for the ability to create arcane constructs like a dereferenced an array of pointers to functions. And I wouldn't want to give up my cherished Java packages, objects and methods (or C#'s namespaces, objects and methods, or VB's references, objects, and methods) in favor of (load "myfile") just to get s-expressions. But I suspect that C programmers are far happeir with the tradeoffs they have moving to C++ than I am with moving from Java to Lisp.

The C programmer loses some speed and freedom in C++, but keeps all of his old operators while gaining classes, inheritance, and the Standard Template Library. I, on the other hand, gain classes, inheritance, platform independence, and a vast library --- but Java's collection classes are a poor substitute for s-expressions and Lisp's list operators.

This isn't the only thing that you lose. Java and Visual Basic both have good regular expression libraries, but they're a pain in the butt to work with compared to the elegant integration you find in Perl, Python or Ruby. And there are many other language technologies that have arisen in recent years --- the slice notation for sequences from Icon which is now found in Python and Ruby, the interned immutable strings of Java and Python, list comprehensions in Python, hashes from Perl and Python, packages and namespaces from Java and C# --- that haven't yet migrated to as many other languages as they should.

I know different languages have different purposes. A shell script is not a scripting language, and a RAD tool is not for programming provably correct programs. But, damn it, programmers should be able to USE these language technologies, no matter what language they come from! Why can't I say something like "foreach i in [0..9] do println myArray[1:i].toString();" in just about any language to print a triangle of array values, rather than the torturous process I have to go through to do this in most normal languages?

So, I've decided to do something about it. I'm going to design my dream language on paper, and then all you language zealots can tell me why your particular language trumps it. I'm going to start to collect my favorite language features in my blog, and start to collect comments about what features work with each other. I don't want to create a kitchen sink of a language like PL/I that no-one would use; I want to collect a list of safe language features, syntactic constructs, and useful operators that anyone ought to be able to include in their language, and then start discussing how we can begin to use these more effectively in future language design.
To start with, here are a few language features I've come across that I think are cool --- or, more pointedly, that I think should be a natural part of any language other than low-level system workhorses and toy language-theory workbenches:

Regular Expressions.
Awk, Perl and Python programmers take these for granted. Programmers in other languages should be able to as well. Visual Basic and Java expose regular expression frameworks which you can access in a clunky way using object-oriented notation, but there's something to be said for syntactic support at the level of the =~ operator. Other languages, like C and Lisp, simply leave you twisting in the wind trying to roll your own. No more, I say to you future language designers: go thee emulate "$scalar =~ /bladeblah/", or improve upon it. Enough said.

Slice Notation.
For the longest time, I never thought of using arrays any other way than the usual: "declare myArray[size]; pass myArray = arrayOund; get myArray[element];". Then I saw Python's slice notation myArray[3:5] and saw the light. Why shouldn't I be able to refer to the subelements of an array by something as simple as [3:5]? Or everything to the end of the array as [5:]? And do the same for strings as in "This that the other"[3:5] when the language supports viewing strings this way? I guess my point is that you as a language designer may not want that special syntax because it wrecks the purity of your object oriented syntax model, tweaks your function calling notation, doesn't fit with your ideas of programs as data, or simply because you, Larry, want the colon. In the end, people have to use the damn language to do things. While a simple, clean syntax makes rare things possible, it can make easy things hard. Get over it and add slices to your language.

Coexistence of Object-Oriented and "Bare Metal" Types
I know from experience you can use Java in both a pure object-oriented, LISP-like high-level way and a low-level, C-emulation mode, with a consequent tradeoff of programming flexibility for speed and power. I think part of Java's success is its vast library of objects, which in turn can use bare ints, booleans and floats to do the meat of the programming. I think C# will become even more successful for a similar reason, because it provides even more opportunity to manipulate the metal while letting you fly off into high-level object land if you need to.

How Does It All Fit Together?
It doesn't yet. If I was to throw all the items in my list into some bastardized example I'd get something like:


println "The first ten characters of the method name are: "
foreach character in ( strMethodCall =~ /[A-Z](.*)\./ ).[1:10] do
println " " + character


Hm.

I'm not sure I'd want to program in yet. How are blocks indicated - by indentation? Ick. Where do statements end? Can we omit the semicolons? Should we add braces? Can we come up with better syntax regular expressions than the gawdawful "/[A-Z](.*)\./", or do we just stick with it because it's standard? Do we call the loop method "for" as in Python, or "foreach" because we want to reserve "for" for a C-style loop?

I have another 30 or so things on my list, and I'm not going to go into all of them in this essay, saving them for future entries instead. I'm going to keep at this sounding board for a while, proposing useful constructs I've mined from reading language definitions, in the hope of finding a basic set of syntactic constructs that are clear, useful, productive, and most of all, satisfy the principle of least astonishment: a C or Pascal or Lisp programmer should be able to move to this new language and see its programming language constructs are somehow ... familiar, even if they've never used them before.

Little Soho Midtown Street Fair

centaur 0
Continuing the translation of "articles" to modern blog entries... Article 33 from March 14, 2004.


A quick note --- the community of merchants at Georgia Tech's new Technology Square at 5th and Spring Street are sponsoring a street festival. Sandi and I just returned from two days showing her art. Even though Georgia Tech is on spring break and the advertising for the fair was pulled at the last moment, we got a lot of foot traffic and Sandi sold one of her newest paintings.

The organizers of the street fair are determined to make it a success --- they want to turn 5th Street into a popular Midtown walking location on the weekends and plan to hold a street fair like this every weekend. They are actively seeking artists, musicians, vendors, and passersby to help turn this festival into a really big thing. Email rgarrison135 at aol dot com if you want to set up a table.

It runs from noonish to fiveish on Saturdays and Sundays. So check it out!

Welcome to Dresan Today

centaur 0
So welcome to Dresan Today ... a new weblog enabling yet another wannabe digerati to dump his latest unfiltered thoughts to the Internet.

I'm Dr. Anthony G. Francis, Jr., a science fiction author and computer scientist living in Atlanta. Many of my longer pieces of nonfiction can be found on the parent site of this weblog, The Library of Dresan.

It takes me a while to update that site, so this weblog will (hopefully) serve a complementary purpose, giving me a quick sounding board for passing thoughts, cool pointers, and so forth.

I recommend the following sites:

Vast and Infinite, Gordon Shippey's weblog. I've known Gordon for almost 10 years and he's always got something interesting to say.

Studio Sandi, Sandi Billingsley's art site. Sandi is not just my significant other, she's also a fantastic artist!

On the topic of art, Megatokyo is one of my favorite webcomics; also be sure to check out The Devil's Panties, a webcomic by Jennie Breeden, a local Atlanta cartoonist.

Enjoy!
-The Centaur

Dresan Today … An Experimental Weblog

centaur 0
Continuing the translation of "articles" to modern blog entries ... Article 32 from March 10, 2004. Coincidentally, the announcement of this very Blogger blog.

I am continually interested in the language style of these "old" articles, some of them composed as long as two weeks ago. The ingratiating "check it out" style of the pointers, I do not like. Presumably, in future I will not like my current LOLcat style. Edison hate future. Yes.


Check out Dresan Today, my new weblog --- as well as the home for my experiments with weblogging software.

Manually adding entries to this site is a pain, which is one reason I tend to write big chunks spaced out over a long period of time. I've been meaning to set up software to help me automatically add updates to the Library for some time now, but between work, art and writing it's been a challenge to find enough time to work on the prototype AND work through the limitations of hosting the software on my web provider's account.

SO today I decided to cut the Gordian knot and experiment with the freely available services. The http://www.dresan.com/daily/ directory will house both my current weblog Dresan Today as well as any experiments I'm doing with weblogging tools.

Currently, I'm experimenting with Blogger, which is quick and easy to use, free, configurable, and (most importantly) doesn't require any software running on my web provider's server. This is exactly the feature set I wanted in my roll-your-own blog (not counting source code availability, extensibility, wiki features, and a searchable database of blog entries on my home machine) I decided to give it a shot. Since it took less time to set up the blog than it took to create this "normal" entry in InterDev, I think it is definitely worth a try.

So see what's on Dresan Today!

She Was Dancing All That Time

centaur 0
Continuing the translation of "articles" to modern blog entries... Article 31 from February 7, 2004.




SO Mom contracts pneumonia early in January, and life goes on hold.

I've learned a lot in the last month: "pneumonia" is not so much a disease caused by an agent, like SARS or Alzheimers, as it is a physical condition: buildup of fluid in the lungs which impedes the ability to breathe - often progressively, sometimes fast. Sometimes this condition is caused by a virus, sometimes by a bacteria, and sometimes just by inflammation; but for smokers, people over 45, or those unlucky enough to be both, it can be VERY difficult to fight off.

And then there are the complications. Forget bedsores and rashes, arms scarred from IVs and throats raw from intubation, or even the simple indignity of a nose dried out by the omnipresent oxygen tube; the real fun is still to come.

Pleurisy, another "process", arises when fluid collects between the lung and the chest wall, making what little breath you CAN draw an agony; it becomes worse when the pneumonia infection leaks in, filling the space with pus. You have to drain that out surgically, in a procedure called a VAT (Video Assisted Thoroscopy) which is far better than cracking the chest wall open but still leaves the patient with tubes draining fluid slowly, slowly, from a hole in their side.

Which opens the door to staph.

Methicillin-resistant staphylococcus aurorae --- MRSA or, more poetically, drug-resistant flesh-eating bacteria. A third of us have *some* strain of staph colonizing our bodies peacfully at any given time; but given the right conditions, staph can turn nasty, blooming into an itchy red rash which is ripe to infect others or, worse, slip into a healing wound to cause blood poisoning (septicemia or bacteremia).

But a bacterial infection is not an annoying neighbor named Ted or his ill-behaved dog Spot, to be easily cured by a restraining order or a stiff whack with a newspaper. An infection is an entire *population* of a particular type of bacteria, millions of them, breeding and reproducing according to Darwin's law of evolution by natural selection.

In the hospital environment, Darwin's law rewards the toughest individual bugs --- the ones who can colonize and survive on the insides of IV tubes or cling tenaciously to an ill-washed hand, the ones that inflame your body with infectious sores so they can spread like wildfire --- and the ones who can surivive the typical spectrum of antibiotics that the hospitals typically use.

Hence MRSA --- a description of a particularly nasty evolution of staph, typical to populations of individuals in close contact like prisoners, drug addicts, high school wrestlers ... and hospitals, where it colonizes health workers and attacks vulnerable patients.

Doctors are aware of this now. They're careful with the antibiotics they *do* have, using only the ones they need. And they bring in the big guns only rarely in an attempt to keep knowledge of their arsenal from the mindless gene-memories of their bacterial foes. And they try to alert their patients --- use all your antibiotics, as prescribed, so that your body isn't left with a tiny residual population of the most resistant bugs.

Oh, and they wash their hands. A lot.

Staph still slips through, of course; but they stop it, most of the time. But you can't *count* on them to stop it, unless you or your loved ones take charge of your care. The doctors care about you --- really, they do, even the ones you wonder about --- but they have ten, twenty, fifty or a hundred patients to consider, and if they see something unusual --- a fever, restlessness, unexpected difficulty breathing --- that could ... just ... quite ... fit into the normal progress of a disease, they'll assume the treatment is working and will stay the course.

And of course they have to contend with a vast number of fools, both patients and family, where by fools I mean those people who don't really want to know what's going on and don't really want responsibility for their own health care decisions. So even if you do ask, the doctor is likely to tell you "she's getting better".

Only you can know your loved one's health condition. Only you can see that this fever IS unusual, see that this restlessness IS getting worse, see that she is visibily NOT improving --- and it is up to you and your relatives to read up on the condition; to assess that more needs to be done; and to send in your very own IFFM (Infinitely Formidable Family Matriarch, in our family my father's younger sister) to bust the doctor's heads and get them to call in the specialists your loved one needs.

So your mother's getting better. And you do what you can. You HAVE to do for her, but you CAN'T do to much. If you DO too much, you're likely to wind up in the hospital yourself, puking your guts out because of the stress, doing no-one any good. So you need to get help. But you can't do everything --- not even you and her cousin and the IFFM and all the aunts, uncles, cousins, nieces and nephews can do everything. Even when you have to turn to outside help, they can't do everything.

You can hire a sitter to stay the night with her so she doesn't pull out her IVs, leaving you to go get a good night's sleep, but then the sky can fall and the roads turn to deadly sheets of ice and you're left with the realization you, yes you, are the only one who can stay to help her. But even then, sooner or later, you WILL have to leave her, even if only for a little while, to put food in your belly. And when the roads clear, you'll have to leave her longer --- or you'll have no job to go back to, and no food to put in your belly even if you want to.

But somehow it all gets done. Someone's there to stay with her almost every day, to the point that she sometimes asks the nurse to put up a NO VISITORS sign. But even then, you can't do everything. She will say and do things she would never otherwise do, demanding the impossible, the contradictory, the unbelievable. Her loving friends will leave in tears, distraught because she says they're not doing enough for her ... after they've just stayed the whole night watching her to make sure she didn't pull her IVs out in her sleep.

But it does no good to get upset. Stand up and take it calmly. Comfort the caregivers: remind them that pneumonia and pleurisy and surgery and septicemia are wearing her down, and making her say and do the impossible, the contradictory, the unbelievable. When she recovers, she will be back to normal.

In fact, when she recovers, if she's lucky, she'll remember none of it. Don't be upset when she asks if it's the first time that you've been to see her since she's been sick, even if you've already stayed three weeks at her side. She will get better. She'll recover from the disease and the drugs and the surgery and tell you about how she remembered going to all those parties.

The ... parties, you ask? Oh, yes, she says. Just a few weeks back --- when YOU remember a tube stuck down her throat and her tongue dried to sandpaper and her arms restrained to the side of the bed because she kept trying to pull all the tubes out in her sleep --- SHE actually came home from the hospital.

While all of YOU waited, breathless, in the ICU waiting room, not knowing whether she was going to live or going to die, SHE had already *gone* home. And she *partied*. She went to her birthday party (six months away) and to her sister-in-law's birthday party (also six months away) and to a homecoming party thrown by her brother in law --- but when she left the party, she left her presents, and could you call the restaurant and see if the presents were still in the lost and found.

You'll tell her what really happened, and tell her how worried you were; and she'll roll her eyes at herself and tell you how she thought she had just gotten back into the hospital, but how she knew that it was just the cocktail of drugs they had her on that was messing with her brain and if she could just get those out of her system, then she'd REALLY get better.

Then the pain and fog will lift and, energized, she'll tell you to gather her bills, to pay her taxes, and to check out a probate issue that needs to be settled --- and at once you can see she's still sharp as a tack.

And you'll smile. Because you can see she's coming back. Because you know she's going to be OK. But most of all, you'll smile because you now know that all that time she was writhing in the ICU, she really wasn't in pain. She was out partying.

And she was dancing all that time.

Centaurs In Space III

centaur 0

Continuing the translation of "articles" to modern blog entries... Part III of Article 30 from December 31, 2003.




Last in the series "Centaurs in Space", with text drawn from my short story "Death Wish" and images drawn from my sequential adaptation of the same story.

Death Wish
by Dr. Anthony G. Francis, Jr.

...then the remains of the shuttle slammed into the black surface of the asteroid.

Porsche flinched at the impact, then glared as the sparking hulk of the kyore carrier tumbled past the jagged scarp that had caught the shuttle and impacted the far end.

The edges of the black expanse seemed to shiver, and glowing bits of kyore scattered across the far end of the dumbbell like pretty little fireworks...

Centaurs In Space II

centaur 0

Continuing the translation of "articles" to modern blog entries... Part II of Article 30 from December 18, 2003.




Second in the series of "Centaurs in Space", with text drawn from my short story "Death Wish" and images drawn from my sequential adaptation of the same story.


Death Wish
by Dr. Anthony G. Francis, Jr.

...The mission started well enough: a thousand light years in a trusty B4 shuttle, charting a star factory trailing the shock wave of the Perseus spiral arm. Two days out, and the routine was starting to settle in: dust clouds curdled here, disks of collapsing gas there, and blue supergiants everywhere, burning the candles at both ends.

It looked to be an uneventful jaunt, and she was already getting an itch to see her husband back on the Dragonfire...

Centaurs In Space I

centaur 0

Continuing the translation of "articles" to modern blog entries... Part I of Article 30 from December 10, 2003.




Done Been Gone Too Long. Well, friends, it's been almost 9 months since I've updated the site. In that time, I've been through crunch time on a major project, bought a new computer, took a road trip from the Stanford Linear Accelerator, through the Pacific Coast Highway, and ultimately to the Grand Canyon, wrote another 10,000 words on my novel, started a new comic book, and been sick twice (once including a trip to the hospital).

Which is still no excuse for not posting. I'm going to try to rectify that soon ... until then, let me tide you over with some art. With no further ado or departure from my sterotypical subject matter, I present "Centaurs in Space" ... first of a series of 3 sketches for the upcoming comic "Death Wish".

Death Wish
by Dr. Anthony G. Francis, Jr.

Ten seconds to impact, the centauress leapt out an airlock without a spacesuit...

Starving Art

centaur 0
It amuses me that the last article on this site was on "Dedication"... posted immediately prior to a two-month hiatus in the production of this site. In that article I challenged David Mamet's view that only the starving can create art - that the comfortable have crutches to lean on which prevent them from taking the steps to excel. No, I argued, the key to creating art is dedication to the task - achieving a level of focus that enables one to put other tasks aside and complete what really matters. But it has become clear to me in the intervening months the wisdom in Mamet's words. I have seen all too many people fail at things they cherished because they were too comfortable. With a nourishing job at hand, I have seen myself and others drawn off by sparkling distractions, curling up with our comfortable movies and plays and dances and parties while the things that we can achieve - and tell each other and ourselves that we want to achieve we want to achieve - fritter away further and further into the distance. It is as true for professionals as it is for amateurs. Case in point: the world of comics. Three of my favorite comic books - Albedo AnthropomorphicsThe Authority and Planetarywere canceled, or hang on the edge of being canceled, because their creators could keep a schedule. Now, I know some of the reasons behind the delays; and sometimes they are good ones. But in the end, delay after delay in any enterprise leaves fans feeling lost, participants feeling betrayed, and ultimately all concerned must move on to new devices when their interest finally dies. So perhaps it is true that it is not necessary to be starving to produce great art. But if the author or artist is not so hungry for their art that they are willing to put it above all else, their art will starve, and we are all left poorer by it. - The Centaur

Dedication

centaur 0
Can only the starving create art? To David Mamet, a truly accomplished actor must have nothing to fall back upon. In his book on acting True and False, Mamet argues that a career alternative or a convenient inheritance acts as an emotional crutch, without which an actor must stand to face the rigors of their art with the courage necessary to excel at it. This view is not new. Sun Tzu argued centuries earlier in the Art of War that a general should burn the bridges behind his army once they have crossed the river into enemy territory, for there is nothing they cannot accomplish when standing upon death ground. But is it truly necessary to cut off all your options to be a success? This “death ground” philosophy recognizes the power of commitment: great achievement is almost impossible without it.The philosophy breaks down when it argues that it is necessary to face death to achieve true commitment. Certainly it is not necessary for obsessive-compulsives, who throw themselves into absurd tasks in the face of their survival rather than in service of it. Archimedes, a man who claimed that, given a long enough lever and a place to stand, he could move the world, is perhaps more famous for running naked down the street after having discovered the principle of displaced volume, and was so obsessed with his work that he was ultimately run through by an invading soldier who became incensed when the scientist ignored him to work on a diagram. A gruesome end for a committed man, but perhaps these obsessive traits survive because in a more balanced degree they can motivate someone to great achievement. Science fiction writer Larry Niven had inherited money — and thus the luxury to expend ten years of his life perfecting his craft. For Niven, an inheritance was not a crutch but a lever, enabling him to ultimately producing Hugo-award winning stories. Niven is not alone in dedicating himself to his work to achieve greatness. The director of the Lord of the Rings trilogy quoted a local New Zealand saying that summed up his work ethic: “One job at a time, every job a success.” Victor Hugo had this attitude, sentencing himself to “terms” in his study … years of isolation that produced masterworks like Les Miserables. This kind of focus is not practical for everyone. Some have lives to fall back upon, and others have lives they cannot abandon. I do not think David Mamet would suggest that someone with an inheritance must give it up to become a great actor — and clearly Victor Hugo did not need to abandon his wife to become a great writer. However, commitment is not just necessary for artists trying to achieve masterworks or soldiers trying to vanquish their enemies; instead, it is necessary for everyone. For a time, the graduate student must put aside his social life— or fail to finish his thesis. For a time, the programmer must put in the extra hour to root out the last bug — or be drawn into a treadmill of endless maintenance. For a time, the part-time deejay must tune out the requests of his friends — or find that that the club goes dead because the right tracks are not cued to play. Everyone comes to a point in their lives when the goals that really matter become truly difficult, and where achieving these goals requires focus upon them to the exclusion of all other distractions and enjoyments which arise before them.  No matter how skilled or strong we are, each of us will face a stone too heavy to lift unless we put our other baggage down. This strength — not the strength to carry the stone, but to put other baggage aside — is dedication, and it is the key to achievement.  Dedication is not a mystic elixir, available only available to the impoverished or the imperiled. It is a fundamental attitude towards life, and it is available to everyone — great and small, rich and poor, facing death or living life.  Some accept this burden, and are rewarded with the things they most truly desire; others turn away, and leave the sour grapes to others. Not everyone can be a great writer, or a great actor, or even a great plumber — each person must find their own stone to lift . But it is possible for each and every person to face their personal challenge, to stand up to the breach with courage, and to step across the chasm to their own death ground — to that place to stand where they can, with the right lever, move the world. - The Centaur

It’s good to be alive

centaur 0
Life has felt bleak since 9/11. Is there anything to be thankful for? Let's see... Harry Potter and the Lord of the Rings become movies. Lucy Lawless appears on the X-Files. And Star Trek returns to the air. Dating. Improv. Visiting Mom. Karate. Debating with friends. George Bush celebrated for saying things sensible. Naomi Wallace celebrated for saying things unfashionable. Jerry Falwell excoriated for saying things hateful. Jerry Falwell now saying nothing at all. T'Pol. Discussing the religious implications of quantum physics with my oldest childhood friend until 3am. Weblogs. Smalltalk. Programming Perl in UNIX for Windows. Getting a t-shirt from my favorite restaurant because I am their favorite regular. The best burrito chain in the city opens right up the street. Cold milk and Halloween candy. Warm sunshine in November. All in all, sounds pretty good. What should you be thankful for? - The Centaur

When good messages go bad

centaur 0
Let's begin with a bit of technology humor. Recently, Amazon announced they had saved millions of dollars switching to Linux. Despite the fact that Amazon's switch was from UNIX and not from Microsoft, the spinmasters from Redmond nonetheless felt the need to leap in and say:
With Linux, customers "end up being in the operating systems business," managing software updates and security patches while making sure the multitude of software packages don't conflict with each other...That's the job of a software vendor like Microsoft."
Speaking as someone who works in an all-Microsoft shop ... HA! Managing software conflicts and security patches is the life of an all-Microsoft shop. Almost daily, issues of endless Windows 9x*, NT and 2000 patches and conflicts between applications consume valuable time we could be spending making our customers happier. If managing software conflicts was your job, Bill... we'd fire you. The sad thing is that by pitching this corporate "spin" relentlessly, Microsoft lost the chance to tout its true advantages. It is the integrated tools, the reams of available software, and (often) speed which lure developers to the Microsoft camp. When a Microsoft shop is working, things really *sing* ... even if the duration of that song is often short. And perhaps that's the real problem. Microsoft's advantages are debatable advantages --- just as debatable as the advantages of the Macintosh user interface or the Linux open source philosophy. But rather than open an intelligent debate, our friends from Redmond chose to sell their latest Big Lie. And ended up looking like idiots. - The Centaur

Welcome

centaur 0
Welcome, Gentle Readers, to my web site. Tradition demands that a weblog begin with a few pretentious comments about how the grandiose vision behind these few HTML files will empower them to change the world. Therefore, I shall begin by revealing the purpose of these pages: To celebrate Life. To communicate my work in art and science. To exchange ideas, share experiences, learn truths, and stand in faith. That's it. Welcome, and enjoy. - The Centaur Dr. Anthony G. Francis, Jr. November 1, 2001.