Older blog entries for raph (starting at number 421)

New blog

After more than ten years here on and off, I'm moving my blog to Hot Lead, where I'll be talking about fonts in all their glory. Expect lots of content about web fonts, performance, font technology, tools, and more.

It's been a great ride here, and thanks to everyone who's been part of the Advogato community. I'll still be checking in from time to time, and maybe even posting. But if you want to follow what I'm doing these days, follow me at the new place.

19 May 2010 (updated 19 May 2010 at 17:47 UTC) »

Today we're launching the Google Font API. I've been working over the past couple of months with highly talented font designers to get a great collection of fonts released as open source. Almost all the fonts are under the Open Font License, and in our discussions I've been sensing a huge amount of momentum behind this license.

Obviously, the main reason we're doing this is to have a richer set of fonts for the web. But since the fonts are all open source, they can be used for lots of other things. I'm confident this collection will shortly show up in Linux distribution. We've created a Google Code project to host the fonts in the Google Font Directory, many of which contain FontForge or FontLab source. I want to run that in open source style, and invite people working on packaging fonts for Linux and other open source projects to help curate the project.

I'm also looking forward to hearing from more font designers. We've been working directly with designers to get the fonts for the initial launch, but we want to add many more, including both existing open-source fonts (possibly with a little work to meet quality and glyph coverage goals). If you're working on a font you'd like to see in the Google Font Directory, you can use this spreadsheet form, or get in touch with me directly. Please bear with me if I don't respond immediately, though - I'm expecting to be swamped.

It's hugely exciting to be working on fonts full time now, with a great team. I'm looking forward to some great collaboration with the open source and font worlds now that we're out in the world.

17 Jan 2010 (updated 17 Jan 2010 at 01:31 UTC) »
Nock, Io

Via Wes Felter, I came across a fun puzzle language by my old friend C Guy Yarvin. I think of Nock as being in a family of languages with certain things in common: tiny number of primitives, definition can fit on a t-shirt, not quite practical, but powerful and expressive enough that you can imagine writing real programs in it. If this sort of thing appeals to you, I recommend checking it out. I took up his challenge to write an interpreter and sample program, and the core Python interpreter is 38 lines of Python.

Other languages in this vein include SKI combinators, pure lambda calculus, pure LISP, universal turing machines, and Brainfuck. No doubt my readers can come up with several more examples.

All this reminded me of my own Io, which I designed, oh, about 22 years ago. Io is basically a language in which the only primitive is continuations. Because it encompasses the power of simple lambda calculus, you can implement arithmetic and data structures using Church numerals. Probably the best introduction to Io is the chapter out of Raphael Finkel's book, and there's some more good description in notes by Kragen Sitaker.

I only wrote up half of my ideas in the SIGPLAN Notices article (PDF). The other half was primitives for parallelism. In addition to the pure language, "par k1 k2" fires off continuations k1 and k2 in parallel. Then "join k" invokes k with two new continuations, call them "alpha" and "beta". If one thread calls "alpha f" and another "beta x", then the two threads join at that point and invoke "f x". With this primitive, you can easily implement the full range of concurrency operations, including cells with state, input and output (hence the name of the language), etc.

I used to think it would be a good idea to build real systems in Io, but now I guess I've grown up a little. For one, while I think it's important for any serious student of languages to understand CPS, I'm no longer a huge fan of actually using it. Plus, it's much harder to implement things like Io efficiently than I originally thought.

But these languages sure are fun to play with!

final draft

After years of work, my Ph.D thesis is finally done! I now have a final draft up which is basically what I plan to submit formally. For a shorter presentation of this work, see the CAD paper which I presented in June.

My defense is scheduled for Sept 3, at Soda Hall. If you're in the area and interested in curves or font design, you're welcome to attend.

Another cool application of these curves is CurveMaker by Terry Ross, who's using them for architectural ironwork.

It hasn't quite hit home emotionally yet that I'm done, largely because there are the usual last minute things which need doing, not to mention the other things I've pushed aside.

I used to blog every day, now it seems I'm about at once a year. But there's reason to believe I might pick up the pace again...


I've been tuning out the world as much as I can, largely so that I can use whatever free time I have to finish up my thesis. The good news is, it's almost done, and I now have a reasonably coherent complete draft. Have a look.

I'll be presenting some of this work at CAD '09 in Reno on Jun 11.


Lots of people like Inconsolata, and I've been getting quite a bit more email about it since that article came out.

I've been doing minor tweaks (such as making l and 1 more distinct), and now consider it pretty close to done. There are a batch of suggested changes people have sent as feedback. Some will be simple (adding endash and emdash glyphs) but others will take some more thinking.

17 Aug 2008 (updated 17 Aug 2008 at 05:05 UTC) »
Thesis back on track

After quite some time of my thesis (on interactive curve design) being stuck, I'm now making good progress again. You can check out the draft chapter on the history of the elastica if you like (soon also to be published as a Berkeley CS tech report).

I had a lot of fun writing that chapter, digging deep into the history of the curve and getting to know the old mathematicians like James Bernoulli better. My advisor is encouraging me to publish it stand-alone. Can anyone recommend a good place, perhaps some kind of history of mathematics journal or conference?

Next up is a similar chapter on the Euler spiral. Then, after that, I finish up my argument characterizing the entire space of 2-parameter splines, and I'm over the hump - the rest is numerical techniques and applications, which will require making a bunch of figures (time consuming but rewarding), but no difficult conceptual work.


Spiro is integrated with newish builds of Inkscape, which is awesome. Even more awesome is this YouTube video of spiro in action. (The author also has a three minute S using the original ppedit code; nowhere nearly as cool but still nice)

It looks like the word is getting out. There's also a screencast from heathenx. It's still only in development snapshots. I'm excited that when it finally starts shipping in stable releases, lots more people will get excited.

It's also integrated into FontForge, but sadly I haven't gotten much chance to play with it myself. These days, I'm trying to use all my free time on finishing the thesis itself.

You can also see Euler spirals (also known as Cornu spirals or clothoids) at NodeBox, and a nice project by Andren Novali using them. It's awesome that the free software community is carrying this integration work forward even when I have very limited time for coding myself.

1 Jul 2007 (updated 2 Jul 2007 at 04:19 UTC) »

I was very disappointed to read "Does negative press make you Sicko?" at the Google Health Advertising Blog, and the followup post didn't do much to ease my concerns. A large part of why I love working at Google is how seriously we take the philosophy of "don't be evil," and it's not hard to see how some people might conclude from those posts that we're backsliding on that. But what I see on the inside is very encouraging - lots of internal discussion about what the right course of action is, and a strong commitment from people all up and down the community to act on principles rather than just the profit motive.

Don't get me wrong, Google is in the advertising industry. It makes us a lot of money, and we are very good at it. In fact, I think that the type of ads that we do best -- connecting people who are looking for something specific with providers who offer it -- have lots of potential to improve the way healthcare is delivered in this country.

But I cannot agree with Lauren's claim that "advertising is a very democratic and effective way to participate in a public dialogue." I think that depends a lot on the kind of advertising we're talking about. At its best, it can indeed be democratic. Here's an example: it would be well within the reach of the yoga studio where my mom sometimes fills in as an instructor to buy some AdWords on "hypertension" for their local area. Then, when people search on that keyword, they'll see ads for the yoga studio mixed in with those for medications and high-tech hospital facilities for managing hypertension. Perhaps not quite as prominently based on the size of the ad buy, but good enough.

This type of scenario isn't even really competition. Most doctors would be thrilled to see their patients proactively making lifestyle changes to prevent the need for expensive medicines and treatments. At the same time, if you have a serious heart problem, my mom would definitely want you to get good diagnostics done, etc. Different story, of course, if your BP is just a touch high because you're out of shape and a little stressed out, but even in that case the pharmaceutical industry might concede the chase after that particular bit of revenue.

But when the insurance industry runs advertising campaigns to discredit Moore's film, that's not democracy. The imbalance of money is just too dramatic: the health industry runs somewhere north of a trillion dollars, and spends in the ballpark of three billion a year on advertising. By contrast, the production budget on Sicko was something like nine million. Even if you were to agree with every single point made by the insurance industry and disagree entirely with Moore, there's no way this system can be considered democratic.

I think we can all agree that we need a healthy debate about how to best restructure our healthcare system to better meet the needs of Americans. Moore is a master storyteller, and the way he shows the damage wreaked by the healthcare system in people's lives will make you weep. Getting people to sit up and care is an important contribution to the debate, but it isn't enough. As Lauren points out, anecdotes are not a great way to get to accurate information. To have a healthy debate, we need to be looking really intensely at the numbers. In a free society, the insurance companies absolutely should have the chance to present their case as well.

I also think it's just fine for Google to take their ad dollars, as long as we maintain the integrity of our search results. Those really are democratic, and our commitment to those principles runs deep at Google, from the original PageRank algorithm to the Founder's Letters filed with the SEC, through the actions of the engineers and support staff I work with every day.

But, back to ads, I personally do not weep for the insurance companies, and I frankly don't think they need that much help in getting their message across. This opinion is one of many; within the company, there are lots of people with lots of opinions, and a lot of thought about what it means to do the right thing. Where it gets interesting is when there is tension between all these goals, especially between running a company that is "trustworthy and interested in the public good" as well as profitable. In those cases, we have a spirited debate.

In fact, I am now going to reveal one of our most heavily guarded corporate secrets: within Google, Godwin's Law appears to be suspended. Conflicts, even on really sensitive and contentious topics, tend to get treated as misunderstandings and resolved, rather than degenerating into flamewars.

I don't know that we'll always do the right thing as a company, but I do have great faith that we will try our best to figure out what that is. I also know that when I see something wrong, I'll take a stand. This is not just me, but, believe it or not, is enshrined as principle I(d) in our Code of Conduct. For a moneymaking outfit in corporate America today, that's actually pretty amazing, and good enough for me personally. I'm also going to be spending some time over the next few weeks learning about healthcare initiatives within Google, such as Dr. Roni Ziegler's work.

I'd go so far as to say that if the public debates about important issues like healthcare were as well-informed and considerate as the internal discussions I've seen so far at Google, then Michael Moore probably never would have felt the need to make the film Sicko. That would have been something of a shame, because, like Picasso's Guernica, Moore has made great art from the raw material of human suffering on a large scale. Go see it. (*)

*Like everything else in this blog, the movie review represents my personal opinion and does not in any way represent Google's official corporate policy.

Advogato talk

I'm giving a talk on Advogato at Google on the evening of Monday the 25th. It's open to the public - all Advogatans who are in the area are welcome.

Here's the talk info. It will be videotaped, so if it's not convenient to the area, you'll probably be able to see video too.


I've been silent for a long time, but am getting ready to do a real release of my curve editing tools.

In the meantime, under the philosophy of "release early, release often," there's a very rough release up at the new Spiro page, as well as a darcs repository. Brave souls are encouraged to try it out, and of course patches are welcome (it's all GPL).

The timing is, coincidentally, in time for Dave Crossland's talk at LGM. He will be doing a demo, and is encouraging people to integrate the core technology with other projects like Inkscape.


If I am oddly quiet and rudely unresponsive, it is because I am trying to finish my PhD thesis - I really want to get a draft to my readers by May 21, which is of course very soon. Fortunately, I have a lot of it done. Even so, my goal is to spend most days doing nothing but writing and drawing figures.

Thanks for your understanding.

Lots of stuff

Hi all! I've been fairly inwardly focussed for the past few months, but there's a lot of stuff happening now, and I'm feeling more like reaching out to the world. Usually this time of year I start feeling like I want to hibernate, what with the evenings getting dark and the rain beginning, but this time I seem to have even more energy than usual.

A tough logic puzzle

Do you like difficult puzzles? Wanna show off your brilliance to the rest of the world and make a little money to boot? Take a look at Ghostscript bug 688990. I spent more than a week trying to reverse engineer the imagemask interpolation algorithm used by Adobe PostScript, based on the original Mac implementation from twenty or so years ago, but was only able to come up with an approximate answer.

Feel free to post comments, questions, or requests for more test images to the bug itself. The "bountiable" keyword means that the solution (hopefully implemented as code) gets a check for, I think, $500.


My font releases are moving forward. Inconsolata, in particular, is just about done, and that's now released under the new SIL Open Font License. There are a few other goodies posted on my font pages, for people who haven't seen them in a while.


I met Nathan Hurst about six years ago when I gave a talk at linux.conf.au. We chatted about Libart, then pretty much went our separate ways since then.

Libart, as you'll recall, was the graphics library behind Gill, which begat Sodipodi. Sodipodi, in turn, begat Inkscape, which is starting to draw a lot of attention and users. In any case, Inkscape now uses Cairo for the rendering, but the vector-based geometry operations are still somewhat messy and ad-hoc, so Nathan and others have founded the lib2geom project to address those needs.

As it turns out, I have both interest in and need of these kinds of basic computational geometry primitives for my font work, especially stroke offset, intersection (for making nice clean outlines), and conversion to optimized Beziers. I have various prototypes written in Python and so on, and have sent those to Nathan.

With luck, all of this stuff will come together as efficient, robust C++ code, and then my dream of having a good implementation of next-generation font tools will be that much closer. I'm also hopeful that, by joining forces with Nathan and others on the lib2geom project, Inkscape and other vector-based free software projects can benefit.


It looks like the new spam filter here is working swimmingly. I've long felt that the trust metric ideas were sound, but that they needed more time and energy on their implementation than they were getting. Looks like Steve is doing a great job on that, and I hope that the success here inspires other people as well.

One project people might want to take a look at is the Bitchun Society, by Joseph Petviashvili. It basically implements a similar eigenvalue trust metric as the diary rankings here, but as a Jabber bot. I don't really know whether this particular implementation has the mojo to really take off, but the more trust metric toys there are out there to play with and learn from, the better.

Other social connections

I've been busy in lots of other ways too. Last night I had dinner with Till Kamppeter and a hundred or so other Ubuntu developers. We're working toward merging ESP Ghostscript into the main Ghostscript repository, something which our move to GPL-only licensing was meant to enable. We have a few details to iron out, but I'm very hopeful about improved user experience people should see as a result.


Last Tuesday I worked as an election judge (fancy name for pollworker) at a precinct up the hill in Berkeley. I've become pretty cynical about the political process, and participating in this civic ritual at the neighborhood level was a great anodyne to that cynicism.

I signed up largely out of concern for the mischief potential of all these fancy new voting machines. As it happened, our Sequoia Optech Insight jammed about three hours into the election, so we were back to putting paper ballots into a ballot-box, essentially stone-age technology. Most people seemed happy with that, and I'm pleased to report that our precinct was able to account for all but one of the 800+ pieces of paper we started with, at the end of our 14-hour day.

My faith in democracy is much restored. I can heartily recommend working at the polls to fellow Advogatans. It's a great way to become more involved with your community and your country.

412 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!