cellio: (Default)
2021-06-01 10:01 pm
Entry tags:

Oh for crying out loud (thank you Javascript!)

We have a widget on our site that displays the current Hebrew date. We're using HebCal's REST API to get the data, which comes back a month at a time -- JSON blob that has one entry for each day, with the secular date, the Hebrew date, and some other information. We use the Javascript Date class to get today's date, extract a string of the right format from that, and look up "today" in that returned collection. Easy, right? The API documentation for Date makes a point of saying that it uses local time, not UTC, which is what we want.

(Because the Hebrew day actually starts at sundown the previous day, we've got some "best effort" code in there that starts the day at 8PM. Not ideal, but we're not looking up local sunsets and suchlike... We also display something like "22 Sivan (Tuesday night and Wednesday)" to make it clear.)

Yeah ok, so we have the local date, and we need to look up an entry in the calendar data. Dates there use ISO format (YYYY-MM-DD). So we get our Date object, which is supposed to be local, and call toISOString() on it.

Guess what. Date.toISOString does not use the local time. FFS. I've been banging my head against a wall for two hours thinking it was something more esoteric, maybe having to do with that "start at 8PM" code (which I had actually commented out to eliminate that possibility). I finally went to an online Javascript tester, one of those sites where you can type in code and run it, and confirmed that right now today.toISOString() says it's June 2 but today.getDay() says it's June 1.

So now I have to write Google for code that constructs the proper format for the local time, which is down to padding numbers with leading zeros if the month or day number is less than 10 and string-munging and...ugh. (Found it easily enough, but sheesh!)

cellio: (avatar)
2016-05-16 11:03 pm

today I learned...

TIL #1:

Somebody linked to this question on Stack Overflow about some unexpected results when doing math on dates in Java. The problem, according to Jon Skeet, is that the date being used in the calculation is near midnight on December 31, 1927 in the Shanghai time zone -- when Shanghai moved its clocks by 5 minutes and 52 seconds. So the time in question existed twice, and Java chose the one that the programmer wasn't expecting.

That answers the programming question, but my question from that was: why in the world would somebody move clocks by 5 minutes and 52 seconds? I understand shifts of an hour (that happens all the time), and there are timezones out there that have 30-minute offsets and even one with a 15-minute offset, so that wouldn't have much surprised me either. But 5:52???

So I asked Google, which led me to a question on History Stack Exchange about this, where an answer explained that 1927 was not a good year for political stability in Shanghai, and one of the side-effects was a change in who had control over the central astronomical institution, with the result that the reference point moved east from Beijing to Nanjing. Greenwich was apparently not yet a thing as far as they were concerned.

A comment on the answer, from Taiwan, casts doubt on whether there was a time shift at all -- but, if not, doesn't explain where Java got the idea. Curious.

TIL #2:

A few days ago on Mi Yodeya somebody asked if, during the Exodus, the commandment to place the blood on the doorposts and lintel was just on one door or all of them. (Is it like mezuzot, which are on every door, or like the chanukiyah, which we place next to one door only?) My first thought was that there might have only been one door in ancient Egyptian slave housing. Last night I learned a little about ancient architecture and then wrote an answer about the four-room house, which appears to have had one outside door. I argued that we're given the reason for the commandment: it's to mark which houses are to be passed over. To me, that says blood on exterior doors, of which there was one.

Not TIL #3:

Today on Mi Yodeya somebody asked how many people the Pesach offering would feed. The torah says to use a lamb or kid, that it all has to be eaten that night, and that if you don't have enough people to do that, get together with your neighbors. So how big a group are we talking about? One can find plenty of information (not always in agreement, mind) about the weights of modern livestock animals, but animal husbandry has worked its magic over the centuries -- heck, even within my lifetime we've seen "standard" chickens for food get a lot bigger. So knowing how much a yearling lamb weighs today doesn't necessarily tell us what it might have weighed in ancient Egypt or in the time of the first or second temple, when this was done.

I considered asking on History SE, but I haven't yet. Anybody happen to know?
cellio: (avatar)
2015-04-12 09:40 pm

UI development in a dynamic world

It used to be that if you put out a software product, and particularly as you produced new versions of it, people might complain about things that were hard or different (change bad!) or broke their workflow, and you'd decide whether to add some configuration parameters or redesign it again or just tell them to suck it up. There wasn't much they could do within the scope of your software if you didn't give them hooks. (They could, of course, take their business elsewhere if your breaking change was important.)

Then, if what you were developing was a web site, you had to cope with some variations ("IE did what to our site?"), but you still had a lot of control. Well, until browser add-ons became a thing, and people could block your ads and trackers and make you use HTTPS and your site had better still work if you didn't want people to surf away.

Now, quite aside from the multitude of browser add-ons that might be relevant, we have tools like Greasemonkey and Stylish that empower users to rewrite your site to their heart's content. For some of us this lets us turn unusable sites into usable ones ("you chose what font? and assumed I had a 1500px-wide browser? feh!"). But it goes beyond that; Greasemonkey, by allowing JavaScript injection, lets us add, remove, and redefine functionality. I have several Greasemonkey scripts for Stack Exchange that make those sites easier for me to use and moderate, scripts that let me add shortcuts and override assumptions the designers made that don't quite fit my circumstances. I like SE's designers and, mostly, the designs of the sites I use, but some things just don't work so well for me out of the box. I'm not picking on SE; I think this happens with lots of sites.

All of this got me wondering: how do you develop web UIs in that kind of world? Are there some best practices that designers use to say "ok, if you're going to hook into the site and change things, we'll make it easy for you to hook in here and here to try to guide and contain you"? Is there some way of doing defensive design, so that if people do add scripting they can reduce the chances that that'll break something important? Or do they mostly just not worry about this, figuring that the Greasemonkey heads know how to use the browser console and will reverse-engineer their pages and, anyway, if you're going to mess with our site it's ok to say you're on your own? (I don't actually know enough to write those Greasemonkey scripts myself; I use scripts that others have written. So I don't have a good perspective coming from the developer-user side here.)

I'm curious about how the expansion of user-driven variation, on top of the browser-driven variation we already had, is affecting the field.
cellio: (avatar)
2014-10-20 11:17 pm

database design question

Dear LJ Brain Trust,

I'm too new to this to know if this is a "DB 101" question or more interesting, but Googling isn't getting me anywhere and I'm not getting a clear understanding from casual interrogation of coworkers, so I'm trying y'all.

Let's say I have a dataset that has half a dozen(ish) types of data -- posts, and users, and comments, and a few others. Logically, each of these types is a table, and I can join as necessary across them (to, say, find all posts by a given user). That's fine.

Now suppose I have, oh, 250 such datasets (same schemas, different data), and I'm going to load them all into a single database because I want to be able to do queries across datasets. There are two ways I might approach this:

1. Make 250 sets of tables. Each table is named for its dataset (e.g. Set1.Posts, Set1.Users, ... Set250.Posts, Set250.Users). If I want to do a query across all the users, everywhere, I, um... can I do the moral equivalent of "JOIN *.Posts"? How would that work?

2. Make big tables. I have one Posts table, and one Users table, and so on; at data load I cons up values for a new "dataset" column to say where each row came from. If I only want to look at one site I use a WHERE on that column to restrict the SELECT; if I want everything, it's all there for the taking.

Let me dispense with one possible concern: these datasets are updated from time to time, so at times I'll want to refresh the data from a dataset because an update came out. (An update is a new, complete copy, not a delta.) My database supports data partitioning, so deleting just the rows from that dataset before loading in a fresh copy is not a problem. (In option 1, you just drop the table.)

It seems to me that there is everything to gain and (probably?) nothing to lose by doing #2, if my database can handle that many rows. Because my database is in the "big-data analytics" space, I believe it can handle that. I mean, this database can operate on petabytes of data; my li'l pile of datasets will be well under a terabyte. (In fact, #1 didn't even occur to me, until I mentioned this project in passing and somebody suggested it.)

Is that reasonable, or am I missing something big and obvious? What factors should I be considering that I haven't mentioned? And if I'm wrong and I should be doing #1, how do I write a JOIN that crosses all the datasets?

(All the Stack Exchange data, in case you're wondering.)
cellio: (avatar)
2014-07-10 07:46 pm
Entry tags:

learning new patterns

Coming to the world of SQL databases from the world of object-oriented programming is...different. I'm starting to realize why some idioms are different, and I'm sure there are tons more that I haven't noticed yet and am probably getting wrong. But that's what learning experiences are for.

Consider, for example, a system where you have authors with associated publications. If I were designing a system to track that in, say, Java, I would define an Author class and a Publication class, with bidirectional links (Author would have a collection of Publications; Publication would have a collection of Authors (because sometimes authors collaborate)). But in a database table design you don't do that; you define a Persons table that has columns for some unique ID, name, and anything else about the person, and you have a Publications table that has columns for things about the publication like a (book) unique ID, title, publisher, genre, etc, and also the unique ID from the Persons table for the author -- and I'm not sure if multiple authors means multiple rows in the Publications table or if there's some way to do collections. But the point is that a Person doesn't know about its publications -- when you want that you'll do a JOIN between the two tables and then you'll have what you need. Connections between flavors of data are external to the data. This makes sense, but it's going to take a little getting used to.

(Y'all who are way ahead of me on this should please feel free to point out any errors in the above and save me mis-learning some things. Thanks.)
cellio: (writing)
2013-07-24 10:10 pm
Entry tags:

documenting APIs for weakly-typed languages?

I've been building and documenting application programming interfaces (APIs) for years, using tools like Javadoc to generate the reference documentation from the code and special comments in the code. I've got a pretty good handle on this in general -- but so far I've always worked in languages with stronger typing, like Java and C++, ones where the parameters and return values can be specific classes, or things like List<String> (rather than just a list), and so on. But now I need to do it for Javascript, where all the code will tell you is that that parameter is, say, an object -- not what specific properties that object needs to have and what their types are, for example. Our API is going to have a lot of that type of parameter. So now I'm wondering what's considered best practices for documenting those -- obviously the documentation from the comments has to address it, but I can imagine a few different ways of doing it and haven't found useful examples in the wild yet. (That doesn't mean they're not there, of course.)

I asked a question about this on Writers.StackExchange, hoping to tap the wisdom of the net. But I figure some of my readers might be able to offer suggestions. If you comment here you'll help me, but if you instead comment or answer there you'll help the broader internet. (Also, I'd like to see more technical-writing content there, for which there's a chicken-and-egg problem.) Either way, I'd welcome input, tips, warnings, horror stories... whatever you've got.

We haven't chosen a tool yet; we've found half a dozen for Javascript that we'll be looking at. So if I know what's considered the best way to do this I can factor that into the decision, instead of finding myself limited by what the tool we ended up with can support.
cellio: (avatar)
2013-03-28 11:09 pm

there's one in every class

Today I attended a day-long class on web-service technologies. (Yeah, late to the party.) Being a programmer was not a prerequisite (though it helped), and most people there weren't. This wasn't so much about programming and software design as about getting from WSDLs (web-service specifications) to code and vice-versa, and about understanding all the pieces, the WS-* standards, etc.

I should also mention that at the beginning of the class the instructor asked us to introduce ourselves and say what we do. I mentioned API (programming interface) design, among other things.

One of the exercises was pretty straightforward: they gave us some Java code for a trivial web service, and we were to generate the WSDL from it and deploy the service. We were using Eclipse, which has built-in tools for this, so that's pretty straightforward. Some of my coworkers were asking questions about the Java code to better understand it (which is good, to be clear).

After this had been going on for a little while the instructor walked past me, saw me typing, and said something like "you're still working on this?". Well, not exactly on the assignment, I said; having finished that, I'd noticed a couple obvious omissions from the interface their service offered, so I was implementing them to make sure I understood how to wire it all up. He looked over my shoulder, said something like "that array might bring you pain; consider a Collection", I said I worried that that would be too Java-specific for a WSDL, and he pointed out that I was using a Java-specific tool and it would probably do something reasonable. And so it did.

After the class I apologized to him for being "that student" (I think I also asked more hard questions than everyone else put together), and he said no worries -- students like that keep him on his toes. :-) Me, I just wanted to make sure I got enough out of it to justify an 8AM start (ouch).
cellio: (don't panic)
2012-05-22 10:46 pm

how LISP changed my professional life

Part of this meme:

LISP

The most valuable part of my education as a technical writer was my student internship with the Common LISP project. It was also either the first- or second-most important part of my education as a software developer. Yes yes, the classroom stuff was important and the software-engineering project course was essential for putting the pieces together, but this was the real world and the real world is far less tidy than the classroom.

I was brought on to help write the documentation for this then-in-development language. (Other varieties of LISP existed; this was an attempt to unify them.) But unlike all previous tech-writing work, this was for a thing that did not fully exist yet, and I was part of the ongoing design process. I was there in the (virtual) room with the lead designers, Guy Steele, Dave Moon and dozens of others big and small, and if my contributions had merit it didn't matter that I was an undergraduate with no real experience. On the ARPAnet nobody knows you're a dog undergrad. Mind, being an undergraduate with no real experience, I didn't necessarily have a lot of design ideas to contribute, but even then I was pretty good at catching inconsistencies and asking key questions. I learned to write software-interface documentation there, but even more importantly I learned to be part of a real software-development process, to ask questions even if they might seem "stupid", to argue for technical positions and support those arguments, and to be a full member of a team.

When I graduated and met more of the real world I would learn that it usually doesn't work like this. In a lot of places, tech writers are not part of the development process (and may not even be in the development department) and the attitude is that they can come in after the big boys are done developing the product. Phooey on that; this important early experience taught me that it doesn't have to be that way, and I have held firm on this in every place I've ever worked. If I hadn't had this early lesson, I might well have fled the field.

It is also because of the Common LISP project that I went into programmer documentation (and expanded from there). I wouldn't have pursued tech-writing jobs that were all about walking the menus in the UI and stepping through wizards and such; I want to look under the hood, understand what's there, and use that knowledge to help users. Building software development kits like I do now is exciting and nourishes my inner geek. When I went to college I hadn't even heard of technical writing (I went there to do computer science), but I came out as a technically-proficient writer who knows the good that is possible. I have Common LISP to thank for that.

cellio: (lj-procrastination)
2010-07-20 09:10 pm
Entry tags:

LJ tagging: baby steps

Since about 30 seconds after LJ announced the tagging feature I have been wanting boolean search for tags, so that I could find entries tagged A and (B or C) or the like. This has never been possible.

Today in [livejournal.com profile] news they announced that you can search for entries with two tags (specifically two) using the following syntax:

http://username.livejournal.com/tag/tag1,tag2?mode=and

(Substitute for username, tag1, and tag2, of course.)

That's great. This will help. But I can't help wondering... why this implementation? I tried it with three tags; it took the first two and ignored the third. I tried mode=or; didn't work. I assume from this interface that they'll be extending this to support the latter; it makes sense to introduce a "mode" argument now and support other options later. But what kind of implementation limits the parameters to two? I'm trying to imagine the design that produced this result and seemed like a good idea to the dev team, and I'm coming up blank. (Yes, I know LJ is open-source so theoretically I could go look. I don't care that much.) Isn't it just as easy to process arg1,arg2,...argn as to parse arg1,arg2?

So yay for the beginnings of expressive tagging, but I do hope more is coming.
cellio: (tulips)
2010-04-04 02:12 pm

short takes (link round-up, mostly)

Pesach has been going well. Tonight/tomorrow is the last day, which is a holiday like the first day was. Yesterday Rabbi Symons led a beit midrash on the "pour out your wrath" part of the haggadah; more about that later, but it led me to a new-to-me haggadah that so far I'm liking a lot. (I borrowed a copy after the beit midrash.) When I lead my own seder (two years from mow, I'm guessing?) the odds are good that it will be with this one.

Tangentially-related: a short discussion of overly-pediatric seders.

Same season, different religion: researchers have found that portion sizes in depictions of the last supper have been rising for a millennium, though I note the absence of an art historian on the research team.

Same season, no religion: I won't repeat most of the links that were circulating on April 1, but I haven't seen these new Java annotations around much. Probably only amusing to programmers, but very amusing to this one.

Not an April-fool's prank: [livejournal.com profile] xiphias is planning a response to the Tea Party rally on Boston Common on April 14: he's holding a tea party. You know, with fine china and actual tea and people wearing their Sunday (well, Wednesday) best. It sounds like fun.

Edit (almost forgot!): things I learned from British folk songs.

From [livejournal.com profile] nancylebov: Harry Potter and the Methods of Rationality looks like it'll be a good read. Or, as [livejournal.com profile] siderea put it, Richard Feynman goes to Hogwarts.

Real Live Preacher's account of a Quaker meeting.

Thanks to [livejournal.com profile] jducoeur for a pointer to this meta community over on Dreamwidth.

I remember reading a blog post somewhere about someone who rigged up a camera to find out what his cat did all day. Now someone is selling that. Tempting!

In case you're being too productive, let me help with this cute flash game (link from Dani).

cellio: (sleepy-cat)
2009-12-25 03:58 pm

a few links to share

Dani pointed me to Fantasy In Miniature. here are three that caught my fancy. I have just doubled the subscriptions to [livejournal.com profile] fantasyinmin. (I wonder who the other one is.)

From [livejournal.com profile] siderea: The C Programming Language by Kernighan & Ritchie & Lovecraft.

Toleration versus diversity (David Friedman) was an interesting read for me.

Chat-based ask-the-rabbi service, for when email is too slow and asynchronous. Apparently they also do SMS. (It's Chabad, though they don't make it particularly easy to discover that.)
cellio: (house)
2008-10-26 10:34 pm

random bits

Usually mail addressed to "resident" is a write-off, but yesterday we got a letter in a small envelope with a handwritten address to "current resident", which is unusual. Inside was a postcard/photo of our house from circa 1930. The accompanying letter explained that the writer had found it in a scrapbook and since it actually had an address written on the back, she wanted to send it to us, whomever we were, assuming the house was still standing. Neat! So we're going to send back a current picture, along with one of its near-twin two houses up. (Ours and the other house are mirror images of each other.)

The South Side, where I work, has been devoid of Indian food -- until now. Sree's, of CMU lunch-cart fame, has set up a satellite in a kiosk at the end of our block. Yay! An actual restaurant would be better, but I'll take "surprise vegetarian combo of the day" in steamer trays if necessary. It's still pretty good. Qdoba, let's just be friends, ok? :-) (I actually bring my lunch almost all the time, eating out maybe once every couple weeks, but when I do go out it's usually for the pseudo-Mexican salad.)

Quote of the day: "See, in Java, they force you to hack your way through the jungle with a machete. In perl they give you a flamethrower, and afterward you root around in the ashes for the data you wanted. The styles are somewhat different." - [livejournal.com profile] dvarin, here.

You can get almost anything at Amazon (link from [livejournal.com profile] merle_). Be sure to read the reviews.

The digitize-our-albums-and-tapes-before-they-rot project is still mainly in analysis mode (figuring out where to acquire what), though we're grabbing the low-hanging fruit as we see it. This will take some time. Meanwhile, we learned tonight that while you can nominally share your iTunes library with other machines on the local network, you can't actually do much with that -- you can't add non-local files to playlists or iPods, which sort of defeats the purpose, no? (And iTunes has to be running on both machines to even listen.) Just copying the files from one iTunes directory to another doesn't seem to do the trick, either. Sigh. Are we really going to have to import everything CD by CD and track by track (for the downloads) in order to share everything?
cellio: (out-of-mind)
2008-09-17 10:29 pm

harvesting some browser tabs

The bookshop that has all the books in the world -- except one is a lovely 8-page graphic short story (link from [livejournal.com profile] shewhomust).

Joel on Software and Coding Horror (I hadn't heard of the latter before but looks interesting) have launched Stack Overflow, which looks like it could be a good resource for answering technical questions. (I hope that by logging in with my LJ OpenID from home and saying "always accept", I'll be able to answer questions with that ID from work where LJ is blocked.)

Programmers as carpenters (short).

Harold Feld's analysis of the Palin camp's attack on Oprah (part one). This story fizzled soon after hitting CNN on Monday; I hope that's the last we hear of it, but it seems plausible that it could come back on a slower news day. Sheesh. Usually it's folks from the left who assert that freedom of the press means you're entitled to someone else's press.

A few on the economy, some serious and some light (because sometimes you have to laugh to avoid crying too hard):

cellio: (whump)
2007-08-01 08:56 pm
Entry tags:

random bits

I guess I shouldn't be surprised by bit rot. I've been at my current employer for several years, and our code base is Java (and now a little bit of C#). Today we interviewed a candidate whose background is primarily C with some C++. I was about to write the programming problem on the whiteboard, translated from Java to a language he'd be more comfortable in... and had forgotten too much syntax. Oops! I used to be proficient in both. I still know C++ well enough to work in (on existing code), and of course can still speak to it on a conceptual level, but I no longer know it well enough to generate from scratch. Bummer. I guess when you install Java you get garbage collection. :-)

(Just checked; still have rudimentary LISP. Good.)


Speaking of bit rot, from the "yes we really talk like this" department:

While discussing the too-old bread that was being disposed of:

Dani: Bread makes its greatest contribution to the ecology in the third week.

Me: No, bread makes its greatest contribution to medicine in the third week. It makes its contribution to ecology in the sixth week.

(In my defense, he bought the bread while I was out of town and it sat there neglected all this time.)


Speaking of food, yesterday was the last day at work for one of our more technical technical writers (not in my group), one of the primary implementors of our current XML-based system (DocBook-based). Another coworker got a cake, inscribed as follows: <colophon><para>We'll miss you Bill</para></colophon>. She did it herself; I can only imagine the things that could have gone wrong if phoning that in to the bakery. It went over well.
cellio: (don't panic)
2006-08-02 07:23 pm

short takes

Quote of the day: "Don't worry if you don't know what eschatology is; it's not the end of the world." (From Dani.)

This map shows the dominant words used for soft drinks across the country. I don't know what's going on in Alaska, or in that swirl of yellow over Missouri.

Word of the day: insinuendo. (Applied to the phrase "sometimes it works the first time", referring to software development.)

Seen in a book on design patterns: "If it walks like a duck and quacks like a duck, it might be a turkey wrapped in a duck adapter".

This one's been around for a few days, but in case there are folks who haven't seen it: a fun way to deal with folks who are stealing your wireless access (though tsk tsk for not locking it down if you care).

cellio: (sleepy-cat)
2006-05-02 11:56 pm

a few links

I had not heard of the meme of fabricating large-scale implementations of food until a coworker posted his version of Hostess cupcakes.

[livejournal.com profile] nancylebov posted two anecdotes about music gone wrong. The first is probably true and the second probably isn't, but I found both to be very funny. And as for the first, well, it couldn't happen to a better genre. :-)

Dani sent me a link to a bad citizen in Java-land. Yeah, don't program like that. :-)

cellio: (don't panic)
2005-09-26 04:58 pm

this could be taken the wrong way

In context this made perfect sense. Out of context, I'm glad no managers were walking by at the time.

"Well, if you don't want to do incest, nepotism will work."

(A coworker needed to cons up a relationship diagram with doubly-linked nodes, like a spouse who's also a sibling or a child who's also an employee...)
cellio: (avatar-face)
2005-08-02 03:50 pm
Entry tags:

javadoc: good news, bad news

Good news: the folks at Sun are considering adding an @exclude tag to the standard doclet. The tag could be used at the class or member level to prevent production of javadoc for that item. I need this feature; in fact, we wrote a custom doclet to get it, but every new release of Java has forced a new layer of kludges onto that doclet and it's now quite unmaintainable.

Bad news: this feature has been pending since 1997.
cellio: (sleepy-cat)
2005-06-10 07:07 pm

random bits

Hot. Hot hot hot hot hot. And muggy. And did I mention hot? I really hope the AC guys we're talking with next week can do something for us. Their pitch is, essentially, "if you've been told your house can't accommodate central AC, talk to us". Yup, that's our situation. And window units can only do so much.

I might see [livejournal.com profile] psu_jedi and [livejournal.com profile] caryabend tomorrow morning. Woot! They will, alas, be spending most of the weekend with the relatives they actually came here to visit, but with luck we should get to see each other briefly. It was so nice to finally meet them at [livejournal.com profile] estherchaya's and [livejournal.com profile] sethcohen's over Purim!

Sunday night is Shavuot. I'm looking forward to the late-night torah study. The evening service, which is confirmation, I can take or leave; I'll go if it and dinner plans don't bump into each other. And I will, of course, be there for services in the morning.

My week was full of demands on my time that aren't part of the project plan. The project manager will not be happy when we next meet. Some of it was important stuff that needs to be done; some of it was extra administrivia caused by the corporate buy-out. I've now spent about 6 hours on the VPN problem and it still doesn't work, for instance. Whee.

But I did accomplish one useful thing today: we've been asking for a little developer time for months to hook online help into our product, but the project and product managers keep saying that while this is important, other things are more important and they can't spare anybody, even for half a day. So I finally just did it -- forgiveness versus permission and all that. As soon as I have a real doc set to launch instead of Shakespeare's sonnets, I can check it in. The project manager was going to be a little grumpy anyway because of things beyond my control this week, so I may as well get something I wanted out of the deal. Waste not, want not.

This exercise did make me just a bit more aware that I would benefit from a structured learning experience on the subject of Java. I've been picking the API up by osmosis, and of course I already know general programming principles, but when I have to do something completely new I usually end up asking a coworker for a pointer. That's not good; I should be able to do more of this on my own. (Today it was resource access through ClassLoader.) I wonder if I should just take a course from Sun or something. If I do, I wonder if there's any benefit to then taking the certification exam.

cellio: (sleepy-cat)
2005-03-06 06:52 pm
Entry tags:

miscellany: frienditto, Shabbat, programming

Obligatory Frienditto thingy: I'm not using it (really see no point; my journal is archived on LJ and on my computer). I expect that no one on my friends' list would violate my trust by publicly posting locked entries. I presume the tempest in the teapot will die down Real Soon Now.

Shabbat was pleasant. Saturday morning a young man who was bar mitzvah last summer read torah for our minyan (for the second time since his bar mitzvah). I'm glad that he's continuing to both attend and participate, and that he feels comfortable reading in front of our group.

The start-up that Dani works for has a major deadline Monday, so he worked all day Saturday. And all evening, and night. Whee. I met him for dinner after Shabbat and then met his co-workers. When we walked in the lead engineer turned to me and said something like "ready to write some LISP?". I said "LISP? I thought you were a Java shop", and he shrugged and started talking about something else. So I gave it no further thought at the time, figuring it was some sort of odd joke or something. (I just assumed that Dani had, somewhere along the line, talked about his wife the former LISPer.)

I asked Dani about it today, and he said that, in fact, one third-party tool they have to intergrate with has an API that resembles a cross between C and LISP. I didn't ask for details, but he said there's clearly a LISP interpreter under there somewhere because they get error messages that include names of LISP functions. Weird.

It's been almost 15 years since I wrote LISP professionally, but it was a fantastic language and if I'd known the guy was serious, I would have asked him to tell me more. I'd have been willing to give them a couple hours. (I have another friend there too.) Now, it probably wouldn't have been a net savings for him, because he would have had to teach me enough about the application to be useful, but...