2010
02.22

That pretty much sums it up. I think I’m going to start using this more often, but I have to decide whether or not this will be my technical blog or my everything-else blog.

Mmm… let’s just say I’ll lean technical.

So, project ideas. I know, I know, I’m full of them (and it), but I’m actually working on these.

  • Automatic differentiation in Common Lisp. Since it’s often implemented by source transformation, this is kind of a perfect fit for CL. Just in case you don’t know, automatic differentiation is a technique for automatically calculating exact derivatives of an expression using only the definition of the expression. It doesn’t use a difference quotient, and you don’t have to explicitly define the gradient either. The Wikipedia page has a decent explanation, as does this site on AD. I use source transformation to dual numbers in my soon-to-be-released implementation. I’ll post a link when I upload it (probably in the next few days).
  • Ongoing work on t-ray. Last term, as part of a class assignment, I upgraded t-ray to support path-tracing. The code is still a bit…. wonky, though, so I plan to clean it up a bit. I want to slow down on the feature creep a bit, and just work on making it 1) fast and 2) usable. (Note the order.) The one exception to that, though, is implicit equations. I should be able to add parametric equations easily (by triangulating them and rendering them as meshes). With my automatic differentiator, I can even produce exact normals (rather than writing a lot of topological mesh code or hacking away to compute approximations with face normals). I also want to implement a sphere-tracing paper for surface intersection, so that I can render (exact) implicit surfaces as well.
Well, that’s all for now. ‘Til next time (which will hopefully be sooner than before).
2009
07.19

So I’ve started some (very) basic work on the new language. Of course, a lot of this is research. What languages have come before it? What kinds of features do they have, and what works? What kind of features can I incorporate that so far aren’t as prevalent in visual languages? Of course, even as I start writing code, the research effort is going, but I’d like to share at least a few of my findings.

What other visual programming languages are there?

Most of the other languages I’ve discovered thus far are fairly domain specific. vvvv, for instance, is largely oriented around interactive multimedia applications.  It uses DirectX 9 and ODE, among other libraries, to power its visualization capabilities. It also allows access to external inputs, such as networking input.

OpenMusic is another VPL focused on multimedia, specifically music generation.

Not all VPLs are necessarily focused on multimedia, though. I mentioned Yahoo! Pipes in my previous post, for instance. Y!P is basically an extrememly customizable feed aggregator. It’s not interactive in the same way that vvvv, OpenMusic, and others are, but it does provide a useful interface for what it does accomplish.

Lily takes a browser(?)-based approach, in a somewhat more general-purpose setting. It’s browser based in the sense that it’s a Firefox extension, rather than an Javascript-pwered application. Lily provides a number of features, including DOM manipulation, graphical ouptut via SVG, and inputs from a variety of external sources, including mouse/keyboard, network traffic, and other websites.

Lily works by connecting Externals (essentially blocks of javascript code) together to make Patches (scripts). The language itself seems to be pretty versatile, allowing for demos such as a Flickr “interesting images” patch and a beatbox app, among others.

With my language, though, I’m aiming in a different direction. My goal is something more desktop scripting-centric.

2009
06.29

It’s a been a while (basically a year) since I’ve updated this blog, as you can see. Hopefully I’ll try to update more often in the future.

In fact, I actually have a pretty good reason for more common updates. I plan on starting a pretty ambitious project soon, so I’ll probably use this blog to document my progress.

What is the project, you ask? Great question!

I’ve always been a fan of programming languages, as a subject of study in themselves. I’ve wanted to implement one, but I don’t want to implement something just because (even though there is merit to that). I want to create a programming language that I’ll actually be able to use (and thus have motivation to continuously improve).

Visual programming languages are an interesting niche. Most of them are fairly domain-specific, which makes a lot of sense. I imagine that a general purpose one would just be exceedingly cluttered.

I think I’d like to make a VPL centered around image manipulation. There would be a certain amount of general purpose functionality (arithmetic expressions, ‘map’ and other useful functional utilities, etc.), but it would overall be rather focused. I could probably use libmagick as the processing core. The “language” would be dynamically, strongly typed. (I don’t even think a static typing makes sense for a VPL like this, since there are probably no variables.)

Interface wise, I imagine it would look something like Yahoo! Pipes (which is conspicuously absent from the Wikipedia VPL page).

Hopefully I’ll start on it soon, and give progress updates as i go along.

2008
07.07

This post is a response to a blog post entitled “Why Black Nerds are Unpopular“, a spin on Paul Graham’s “Why Nerds are Unpopular” for Black nerds in particular, as well as an unfortunate interpretation of the post as by a commenter.

Actually, that’s not quite true. I don’t actually have much to say about the post in itself. There are a couple of facts surrounded by lots of anecdotes and generalizations about how Black culture actively discourages academic pursuits, ending with the surprising (and unrelated) conclusion that first (and zeroth) generation Africans in America have their act together, but the rest of us (Blacks) can’t look past all the shine from our bling.

Maybe that’s not quite what the (yes, African) author meant to say, but that’s definitely how the commenter took it.

Boy have YOU corroborated some of my long-held beliefs!

I practically NEVER run into an “African-American” person with any brains. Conversely, I practically NEVER run into a real African who isn’t intellectually superb.

I don’t even know where to begin on that. The only thing worse than this person’s initial beliefs is that he feels like they are justified because one African author agrees with him. I’m inclined to think that the commenter doesn’t run into any African-Americans at all.

In any case, all I can contribute is evidence against the author’s point. My first 10 years of grade school were in predominantly black public schools. Sure, a lot of social emphasis was placed on sports and on clothes (though, I have no real means by which to measure how much more so this was the case than at some other random American high school). But, there were definitely occasions where some students were recognized by the school (as well as the community) for academic endeavors. Not all the time, granted, but enough to suggest that there are Black communities that don’t completely reject intellectual endeavors.

So, go ahead and read the post, but take it with a grain of salt, as you would this post, or anything else you read on the internet :-P

P. S. I couldn’t fit this anywhere in my post, but it deserved to be said: there are a lots of words that people use without knowing their full meaning, like ‘conversely’. The commenter above really should have used ‘inversely’.

2008
06.28

I have way too many summer project ideas. A group of us are working on a Tactics-type [MMO]RPG, so that will take a good chunk of time. Not to mention, I have to study for 2 GREs and start writing grad school essays. But, I have a lot of ideas nonetheless:

  • A Lisp-to-Javascript compiler, specifically geared toward web-development. One thing I thought about is that javascript lends itself to the fluent interface-type code that you see in a lot of frameworks, where as lisp does not. For instance, in js you might see:
    $('.quotes').parent().next().each(function() { .. });
    However, in some form of Lisp this would have to be inverted:
    (map (lambda() ( ... )) (next (parent ($ 'quotes'))))
  • I’d probably want some sort of syntax feature that facilitated this fluent code better.

  • Some type of embeddable scripting language. This might be more likely than anything else, since it would be easily applicable in the game we are developing.
  • Concurrency-oriented functional programming language, with an emphasis on text manipulation. One major complaint with Erlang (one of the premiere COFP’s) is that its string manipulation library is terrible. I would like to design a language (perhaps built on top of the Erlang runtime) that removes these concerns.
  • I’d like to dip into SBCL hacking a little bit. Eventually I’d like to work on standalone runtimes, as that would be huge as far as lisp adoption goes. Lispworks (and other non-free CL implementations I assume) have this feature, so it’s definitely possible. I don’t know much about the SBCL internals, though, so this is much more of a long-term goal than anything else.

Considering that I have a job as well, these ideas aren’t likely to come to fruition this summer. But they’ll stay on the backburner, at least for a while.