Starting December 5, 2007
Another milestone for SocialCalc on the OLPC XO, MassTLC Tech Tuesday event in Waltham next week, First thoughts on Microsoft and Yahoo, Sweet SocialCalc: The new JavaScript code running on the OLPC XO, Vilna Shul panel: The venture capital industry looking back on 2007 and looking forward to 2008, Observations from using the OLPC XO for notetaking, Trust and cooperation cannot be surged: From US maritime strategy to the Little Prince and the fox, Podcast with Laura Fitton about Twitter and using Seesmic and Qik.com, MITX Fireside Chat with IDEO's CEO Tim Brown
Friday, February 22, 2008 
Another milestone for SocialCalc on the OLPC XO [link]
I just released a new version of SocialCalc for the OLPC XO. (See my previous post about this. We've decided to just call it "SocialCalc" and not "Sweet SocialCalc".) Even though the project still has a long way to go, to me this release is a major milestone. It finally shows that this is going to be a "real" spreadsheet. While we are still awaiting the companion project to connect this (and JavaScript applications in general) to the XO's data storage system (for save and load) and to the rest of the Sugar application framework, as a spreadsheet it's getting quite complete and benchmarkable.

The spreadsheet engine, starting in the release last week, supports insert/delete row/column, copy/cut/paste, conversion between SocialCalc format, CSV, and tab-delimited formats, and data sorting. Sorting works with any range, and can include up to 3 columns as indexes. All of this is supported by undo/redo.

Last night I finished porting the main 109 formula functions from Perl SocialCalc/wikiCalc to the new JavaScript engine. It now has, in addition to SUM, SIN, COS, IF, etc., database functions (DSUM, DCOUNT, etc.), text functions (MID, TRIM, etc.), financial functions (IRR, PV, etc.), and more. These are the functions that the June 2007 Open Document Format "Open Formula" specification calls the "small group". The specification says: "This group includes approximately 100 functions, and includes the basic functions that are very widely implemented in spreadsheet applications, even in resource-constrained environments." I figure that should be enough for a 1.0 version of a spreadsheet. It's more, I believe, than in my 2003 copy of Microsoft Works. So I'm finished (modulo testing, of course) one major part of the implementation.

You can find the latest version on the "Software Garden OLPC Home Page".

Performance has always been a concern of mine with this project. Not only is it written in a scripting language (JavaScript), it is running on a quite slow (by today's standards, not by yesterday's) machine, the XO. Therefore, I was pleased to see the results of some simple benchmarks I ran. I took the sample list of television stations that I bundle with this test version of SocialCalc (an old example from wikiCalc days), copy/pasted it a few times to get over 500 rows, and then sorted the four columns (using three columns as keys). It took about 7 seconds on the XO. Not bad. The "500 formulas" sample recalculates and redisplays in about 5 seconds. This is certainly useful enough for a school of 500 kids to do some reports, or for crunching data in a school project.

As a comparison, I tried something similar with a spreadsheet that seems to be viewed as a reasonable attempt at something for "real" use -- Google Docs' spreadsheet on my regular, modern laptop. I exported the TV station list to CSV, imported that into Google Docs, and copy/pasted to make about 500 rows. Sorting (only one key) took much longer than on the XO. Recreating the 500 formulas test also ended up in much longer recalc times. The XO with SocialCalc (running locally) is faster for these "big" jobs.

What does this show? The OLPC can't be viewed as a "toy", at least not when it comes to spreadsheets, since it holds its own in many ways with Google Docs. Google Docs' success shows that it (Google Docs) isn't a "toy", and its performance has been fine for many people. You don't have to have Excel's blinding speed on huge datasets to be a useful product. The Google spreadsheet, while in JavaScript, seems to be using server-side calculations, and is optimized for much smaller sheets. I'm sure they'll find ways to speed things up if need be. (After all, they have many people working on theirs and mine is written by one person part-time -- and my source is available to learn from if they care. They were clearly optimizing for other things than my tests.)

When searching for "olpc spreadsheet" on Google I came across a variety of articles complaining that the XO didn't have a spreadsheet. With this release of SocialCalc we can now see what the XO will have. (At a minimum -- as an open platform there will certainly be other products available, too.) It will have a "real spreadsheet".

The people running the OLPC project are making SocialCalc a "real" project, providing the help and guidance of Manu Gupta, Eben Eliason, Walter Bender, and others. It meets a lot of their goals: In addition to being useful, it will run on an XO not connected to a server, it is Open Source (Artistic 2.0 and CPAL) in a common scripting language (JavaScript) to aid in education and customization, and it has an architecture that should lend itself to fitting in with other applications on the XO (sharing data and hopefully eventually doing multi-person editing).

For me, this is a wonderful and welcome opportunity. I hope it pays off well for everybody else, too.

Thanks to the support of this project by Socialtext and OLPC I am able to create a useful application for use by school children (and their teachers and parents) around the world. Others can build on what I write. Already some teachers have started learning and evaluating SocialCalc for use in the classroom. Manu is trying to explore how children can participate in accounting using SocialCalc, including microfinance applications in rural villages in India. (Manu is in New Delhi right now.) As one person put it, it's like joining a techie Peace Corps. I thank SJ Klein (of OLPC) for repeatedly encouraging me to look to the XO as a platform, starting back much earlier in the development of wikiCalc a year and a half ago.

(Ross Mayfield of Socialtext pointed to this essay by Tom Coates: "On the OLPC Movement..." that's well worth reading.)

Thursday, February 7, 2008 
MassTLC Tech Tuesday event in Waltham next week [link]
At the Massachusetts Technology Leadership Council's Open Source Cluster organizing committee meeting several weeks ago we were discussing what type of event to have next. We've had big meetings with presentations by IBM, Oracle, JBoss, Fidelity, OLPC, etc. This time we talked about starting a frequent get-together where people can come and schmooze, demo their latest to each other, look at new "toys", etc. This would be much more informal but with lots going on.

The criteria we came up with for a place to hold it included: Convenient to Route 128 where a lot of tech people work, accessible by public transportation so students can easily attend, a reasonably sized room, nearby places to go eat afterwards, WiFi connectivity, and some video projectors. Rather than just be for Open Source people, we're making it open to all sorts of tech interests, including robotics, social networking, etc.

We've found a venue that meets all those criteria. It's the Skellig Irish Pub at 240 Moody Street in Waltham, Massachusetts. They are being kind enough to let us use their place. It's next to the Watch City Brewing Company and the Embassy Cinema. They have a big back room which we'll take over. There are places to sit in small groups, a ceiling-mounted projector, open WiFi, a stage where I can put up another video projector, power-outlets, a bar if you get thirsty, good food if you get hungry, a front-room for more private conversation, lots of restaurants nearby to retire to or for overflow, free parking (after 6pm, I think) in the lot behind it (near the movie theater) and elsewhere nearby, and commuter-rail access.

Here are some pictures of the room, looking west to the bar and then east to the stage (the tables and chairs are pushed back out of this photo):

We're starting with the second Tuesday of the month (the first meeting being February 12th) from 6pm to 8pm or so. If it's popular we may make this event more frequent. I'd love to have a place you know you can always go to (and take visitors from out of town to) every week where you'll find interesting people to talk with and things to see, but once a month will have to do to start.

We're lining up lots of interesting folks to be there. We have people from Microsoft R&D (they have some cool projects), Black Duck, probably Google (a lot of Open Source work on Android is happening in Cambridge I understand), the One Laptop Per Child foundation (we'll have a few XO machines and I'll show off my Open Source spreadsheet running on it), someone with an Amazon Kindle, and hopefully someone from iRobot. We'll be showing our favorite tech-videos on Youtube. Anybody can show off products they're working on. We'll be recording some Seesmic video and posting on Twitter. We're inviting members of the press and the venture capital community.

If you're in the Boston area next Tuesday, February 12th, please join us! Bring your new toys, stories from Comdex, MacWorld, and Demo, your own demos, and techie Youtube video URLs. It should be a lot of fun.

For more information and to sign up (it's free to people from MassTLC-member companies and students, $20 otherwise), go to the MassTLC's web page about it, "Tech Tuesday: Gadgets & Gathering".

Friday, February 1, 2008 
First thoughts on Microsoft and Yahoo [link]
I've had just a little time to think about the proposed deal between Microsoft and Yahoo. Some things that popped into my head:

I've been thinking a lot about the OLPC and Microsoft's opposition to the Open software part, and to Open Source in general. By moving heavily into the service-based business models (of which advertising is one form of marketing service) Microsoft is lowering its dependence on traditional "packaged" software. Maybe this is part of acknowledging, accepting, and joining Open Source platforms as a major part of the software ecosystem and learning to live (and thrive) with it, vs. living in opposition to it. That would be a very good thing all around.

Ray Ozzie seems to be an interesting hybrid of proprietary software developer and one who loves software itself and is intrigued by Open Source. He lived through the academic Plato project, the proprietary Lotus Notes project (which helped put networked computers on desks in companies all over the world), and then the blunting of Notes' growth by the huge success of the open standards/Open Software-fueled Internet. (The networked machines he helped put on those desks were sitting ready for the Internet and the success of Notes helped management know that online communication and collaboration were proven good things.) He sees how the Office world is being blunted by the Open and connected worlds. Who needs the full power of Word or Excel on your Android-powered phone (or even an OLPC XO)? Isn't serving it with Flickr images and maps more important?

You can see working on putting SocialCalc on the XO is focussing my thoughts... That project is moving along quite well -- hopefully Luke Closs of Socialtext and I will have a "real" build for the OLPC XO with more features ready to release soon. (The last one was just a web-page you could go to, not a ".xo" installable bundle with an icon in the launch bar.)

Sunday, January 27, 2008 
Sweet SocialCalc: The new JavaScript code running on the OLPC XO [link]
For the last many months I've been working on updating the JavaScript code used by SocialCalc. The goal was to have a browser-based editing environment that felt more like a traditional GUI spreadsheet. The SocialCalc 1.1 environment, like the wikiCalc 1.0 on which it is based, had lots of functionality but was missing many touches. It depended upon Perl server code for too many parts of the normal editing process, even if that "server" was running locally on your computer. It also was not easy to mash up with other applications.

In order to do what I felt we needed to move ahead as part of adding spreadsheet capability to Socialtext, I'm porting a large part of the SocialCalc engine to JavaScript. In addition, I've written a grid control, re-writing basically all the JavaScript that was there before. The new control supports spreadsheet things like locked panes, "unlimited" scrolling (with no need to "add" columns or rows, drag selection, etc.). I have been very busy coding. This was all plumbing and couldn't be used yet with the rest of SocialCalc, so there was little to show publicly for a long, long time.

Two things recently changed. First, I now have the project at a point where I can finally implement a large part of a simple spreadsheet, not just demoing single components in testbeds.

The project started with a grid control, but grew. Doing browser-side editing, like Insert Row or Fill Right, made a browser-side formula parser desirable, so I wrote one. Disconnected operation (something Socialtext has with their main wiki) meant that browser-side calculation would be good to have, too, as well as browser-side rendering of number formats, etc., and they both went in. A "real" application should have Undo/Redo, so I put that in, too.

Last week I got it to the point where I could enter a formula with the SUM function into a cell, doing a drag to enter the range, get an answer displayed on the screen, and use a simple UI to execute commands like "set B6's text color to red".

The second thing that changed was that I purchased an OLPC XO computer during their Give One Get One campaign which arrived around New Years. I love my XO and see its great potential. When I tried my new code on it, the code actually ran quite well, if a little slow (the CPU is 5 times slower than some of my other machines). It was, though, useful. Maybe the XO could be a target platform for something based on this new code.

The One Laptop folks had been encouraging me to make wikiCalc and then SocialCalc run on their machines for a long time, but it wasn't until now that I finally had the software in an architecture that was appropriate for the OLPC and a machine of my own on which to test. (I think that because the G1G1 campaign got a lot of these lovable computers in the hands of developers a thousand new flowers are sure to bloom...)

I showed my testbed application to SJ Klein of the OLPC project and he reacted favorably and encouraged me to continue. The executives at Socialtext encouraged me to follow through and are supporting what I'm doing.

I've now packaged the code I have a little better and am making it available for others to see. I'm calling the project "Sweet SocialCalc" because when we are done I hope we will have native OLPC code driving this (written in Python) so the JavaScript integrates with the OLPC user interface environment (which is called Sugar, hence the word "sweet"). (See my video of a presentation about Sugar and OLPC from last June.)

You don't need an OLPC XO to run this code. (The OLPC browser is Firefox's Gecko engine.) It runs on many other systems, too, including Windows and Macs, as long as you have a compatible browser, like Firefox, IE, or Safari (I think even Opera).

The code is early, barely tested, and needs more performance tuning. However, if you have an XO, you can download it, unzip it to a memory stick or the XO's file storage, and do simple spreadsheet things without connection to the Internet. (You can also run it as a normal Internet web page like everybody else.)

Every new application example that we can demonstrate running on the XO makes the OLPC project that much more real to governments considering it for their children. As a supporter of that project I am trying to do my part.

To learn more, go to the "Software Garden OLPC Home Page".

Here's a photo of it running on my XO:

Feedback is welcome, as are volunteers to help us make this project a reality.

In the future we will also be integrating this code into more traditional platforms for more traditional wiki-like collaboration. Before that, though, I need to complete the implementation of these libraries, adding more commands, functions, etc.

Saturday, January 12, 2008 
Vilna Shul panel: The venture capital industry looking back on 2007 and looking forward to 2008 [link]
Last Tuesday night was another Vilna Shul event, with host Doug Levin of Black Duck Software. This one was a panel discussion moderated by Scott Kirsner. The panelists were Alan Spoon of Polaris Venture Partners, Larry Bohn of General Catalyst Partners, and Jonathan Seelig of Globespan Capital Partners (also known for being a co-founder of Akamai, which he talked about in my podcast from two years ago).

Larry Bohn, Jonathan Seelig, Scott Kirsner, and Alan Spoon sitting at an old study table under an old photo of children studying Torah at such a table.
They didn't have a sound system set up this time, but because the panelists were all sitting at the nice hard table and talking loud I was able to get a pretty good recording with just the built-in stereo mikes of my Zoom H4 recorder (and the Levelator program automatically evened up the levels quite well). The stereo makes it easier to figure out who is talking. You can find the hour and 5 minute podcast on my podcast page as "Vilna Shul Panel on the Venture Capital Industry: 2007 and 2008".

There are writeups of the event from Doug Levin, Scott Kirsner, and Chris Herot.

Here're photos of some of the audience:

Here are some of my raw notes (though an awful lot more was said -- it's fun listening to the VCs talking back and forth, like "Oh, so you invested in ..."):

Scott Kirsner: The eventual question: What is the "weather" going to be for VC in 2008? First look at 2007: VC exit of $52B. What did we learn in 2007?

Alan Spoon (AS): venture  equity has right time frame. Larry Bohn (LB): tech is back! Web 2.0, energy,  life sciences (AS), Jonathan Seelig (JS): 2007 huge enthusiasm for the Internet.

AS: When he was involved in WashingtonPost.com years ago it cost $100M but today could do the same for $5M (thanks to today's tools, etc.) and "financial scale does not count as it used to" (14:50), rate of change accelerating. investing cross-platform, vertical & customization, people working together, eCommerce, the cloud and the tools that fall within it is very exciting (19:00), life sciences including nanotech & giving care, bio fuels, thin film batteries.

Scott asks: New area? Enertech (energy technology). JS: How advertisers measure for other places than web as digital integrates with rest of advertising agency. Battle over utility bill (TV, radio, voice, etc. - data). LB: OSS a few years ago now have enough, last year video, interplay between materials and industrial automation.

Question: Commodities? International? Ethanol, trash. China, California, Iceland, & New England. New England ground-zero for life sciences.

With respect to New England not having the big companies like DEC to spin off new firms: iRobot has spinoffs.

Doug Levin: Health of VC model? AS: lots of $ out there, but up beat. LB: Was easy years ago, now normally hard, still a great business. Hard to get in to invest in good firms as a Limited Partner.

Where & what in Asia? JS: His firm started as Jafco (Japan), still does some investing there & doing more, similar to US area except also machine tools and more mobile. LB: China & India with help of locals.  

Effects of economy? What will happen in 2008? Now is a good time to raise enough of a first round to last a couple years through recession, but for int'l the dollar has not been a good currency.

Mobile sector: Very promising for users, AS: unclear for participants. LB: Apple opening a platform, things away from Microsoft.
Observations from using the OLPC XO for notetaking [link]
It's been a long time since I took notes by typing during a talk. I usually just record things as a podcast, and maybe scribble down a few key points and their time codes for later reference. For the Vilna Shul event last Tuesday night I brought my new OLPC XO computer to share with people. I hoped someone else would have one so I could try the multi-machine programs, but I was the only one. Several people looked at it and played with it, as usual when you bring it somewhere.

Since it was sitting there on my lap, I thought I'd try taking notes. As anybody who's read about the XO probably knows, the keyboard is designed for young children and isn't easy to touch type on for us adults. I have, though, learned to use one finger on each hand pretty well. The notes in the post above are slightly edited from what I typed into the text editing program. It's easy to copy things to a USB flash drive to transfer to another computer, which is what I did. I wasn't too diligent about taking notes, deciding to depend upon my recording.

Looking down at the XO on my lap
Some observations: The machine is very small and light (a little over 3 pounds) so carrying it in my little shoulder bag places "just in case" is no problem and it fit easily on my lap for use. I knew from previous testing (and watching the battery meter that night) that I could get 3-5 hours of use, so there was no problem leaving it on all the time. I usually left the backlight off (which saves a lot of power) knowing that (a) I can still read it even in the low light in that room, and (b) I can turn on the backlight with one key press (the screen powers off in any case after a while of non-use). To my surprise, I found that in that room the lowest brightness level was more than appropriate. This display is great -- I often use it in backlight off mode with a table light pointing at it even when plugged in because it looks good and sharp. The machine does not get too warm, and even then it's the back of the display, not the bottom under the keyboard.

As the two people on either side of me took some notes (or did email?) on their Blackberries, I noticed something else I hadn't thought about: The XO's rubber keyboard is not only waterproof, it's also basically silent, quieter than the Blackberries and in a different league from a normal "real" laptop. Duh! Of course, another good design choice: Who wants a room full of 30+ kids typing away on a normal keyboard? It would be awful.

The more I use the XO, the more I see the good design choices made. This is one awesome machine for its intended use. You really have to be thinking about that use when you evaluate it. Given how early the software is and how fast it's progressing (e.g., some of the main power saving techniques have not been put in released code) you can't help but be optimistic about the wisdom of choosing this as a platform for educational use. I'll write more about it at some later point, I just wanted to get this observation out there.

Thursday, December 27, 2007 
Trust and cooperation cannot be surged: From US maritime strategy to the Little Prince and the fox [link]
If you listen to my recent podcast with Laura Fitton you'll hear me say how the repeated simple interactions you get with Twitter remind me of the story of the Little Prince and the fox in Antoine de Saint Exupery's book. Laura was telling me how she made new friends through Twitter. Laura really liked that analogy and asked me (on Twitter, of course) to explain this connection on a blog post. This fit in with another, related thing I wanted to write about, the Navy's use of the phrase "Trust and cooperation cannot be surged", so I put them together in a new essay.

Tuesday, December 25, 2007 
Podcast with Laura Fitton about Twitter and using Seesmic and Qik.com [link]
Halley Suitt sent me an invitation to a Christmas Eve open house at Laura Fitton's house. Halley told me that I'd find people like Laura and Steve Garfield at this party that are really into Twitter, Seesmic, and other mobile/video social systems.

Laura and Anand
Laura runs Pistachio Consulting. For a few years, she had been out of the blogging/online world while having kids. When she decided to get reconnected into "today's" world she found that Twitter helped her meet people (she's "pistachio" on Twitter). As she introduced herself to me and started telling me about why she loved Twitter I asked her if I could record it, she said yes, and I did. We discussed various things for about 20 minutes before I stopped recording. If you don't know much about Twitter (a system that is kind of like blogging with short SMS text messages), or why people like it, or where it fits in the online ecosystem, listen. It's "Laura Fitton about Twitter and Seesmic" on my podcast page.

We also played with Seesmic, something like Twitter (short messages back and forth to people) but with video -- just turn on your webcam (built into many new laptops) and in a browser window use a Flash program that does the uploading (limited beta -- Laura and Halley quickly used a code they had to sign me up). Here's the video Laura made in the middle of my podcast, and here's one I did on my ID. Steve Garfield also streamed right from his Nokia N95 using Qik.com. (Here's one that died in the middle after a few minutes before we all got to talk.) They were recording and publishing videos online easier than I was doing my podcasts (to which I do some post-processing after off-loading the MP3's from my recorder to my computer at home). All wireless -- Seesmic on a Mac laptop using WiFi that I could (and did) carry around while recording, Qik.com on a cell phone using AT&T's system. (Steve also took some pictures on his iPhone and uploaded them to Flickr.) Scoble twittered that he was following along with some of this from wherever he was in the world.

We've always talked about how Internet video would be about grandma watching the kid's birthday parties from another city. It's here now, or even more mundane (and potentially more viral) -- here's Laura (of Pistachio Consulting) showing a gift she got (ice cream "named after her" -- Ben & Jerry's Pistachio Pistachio). (I've been using Internet video for some time now -- Skype and other video conferencing systems, YouTube, etc. -- but this seemed even more lightweight and viral and we were using it casually at a party.)

Steve Garfield -- see the photo on Flickr
To top this all off, sitting under the tree in the room was a wrapped, unopened OLPC XO computer. (Laura and Anand have incredible restraint -- they received the package a few days before. Laura's already posted some videos on Seesmic of her using it.)

Halley said this would be a heavy immersion in the latest stuff -- she was right. Lots of fun. Thanks Laura and family!

Thursday, December 6, 2007 
MITX Fireside Chat with IDEO's CEO Tim Brown [link]
Last night I attended a MITX Fireside Chat. This one was with Tim Brown, CEO of IDEO. IDEO is a famous design firm known for helping with the original Apple mouse, the Palm V, and more. Recently they worked on the Eclipse jet. Questions were asked by Brian Bergstein of the Associated Press and audience members. The audience included lots of people from IDEO and Google, as well as from MIT, Harvard, and local companies.

Tim talked about coming up with ideas and creating things, about learning by watching people, and much more. I recorded it as a podcast. It's well worth listening to if you are interested in the creative process.

To listen to the recording, go to my podcast page where you'll find "MITX Fireside Chat with IDEO CEO Tim Brown".

Here are some photos:

The view from the back (this was at the Harvard Faculty Club)
The view from the side of Tim; Brian Bergstein and Tim Brown
For those of you interested in podcasting (and what it's like to do it live where you don't control the location or equipment) here's my tale of woe:

This was one of the more nerve-racking podcasts I've done.

I showed up early with a full complement of equipment, hopefully ready for whatever I'd find. It turned out that the room was already set up with a sound system which had two wireless mikes sitting on the big chairs waiting for Brian and Tim. Good, I didn't have to bother them at all with using the mikes I brought - I just got permission from the room's people (the bartender in this case) to use the jack labeled "Output" on the wall. I hooked up my little sound mixer to that jack using a long cable I brought in case I found this situation. I put the mixer on the end seat nearest the plug so my wires wouldn't get in the way and covered them with tape. I also plugged my shotgun microphone into my mixer for recording audience questions. Everything looked fine. I went to have some of the grilled vegetables and schmooze. It was a great crowd for that.

Then the event was about to start and I ran to my seat as they picked up one of the mikes to start the introductions. It didn't work well and got interference from something. So they decided to start the introductions with no microphone. I quickly fired up my shotgun mike at my seat and used it to pick up what was being said, even though the sound wouldn't be as good as a mike being worn by the person. The people from the venue quick brought another set of different wireless mikes (that ran on other frequencies or something) from the back room and plugged them into their sound system. At that point the feed from their system to mine stopped working, so I had no good audio, just the shotgun aimed at a person from several feet away also picking up echoes and other noise from the room's speakers. I quickly took out the microphones I had brought and clipped a wireless lav onto Tim, so he now had one handheld wireless from them and a lav from me. I did it just in time to get all of what he said. After I got that set right (I had to wait for him to start to speak) I plugged my wired lav into my mixer and clipped it to Brian's sweater, trying not to distract him while he was listening to Tim's answer to his question. Finally, I adjusted that when Brian next spoke and eventually got the controls set right so that they each sounded like they were on the correct side stereo-wise. Then I walked to the back to take the photo you see above and then waited with my hands on the shotgun and it's volume control for audience questions. Whew! People who saw me said it looked pretty smooth and normal, not the panic I felt. In any case, the recording came out quite well except for some echoing at the beginning.

I'm continuing to learn to really appreciate the good sound we hear from TV and radio news reports. Clean sound makes it much easier to listen to these long talks, especially when you're listening in a noisy environment like when you're running near a busy street or sitting in a subway car, and is important to podcasting. It is a way of showing respect for your listeners.

Archive   Home   Newer   Older
© Copyright 1999-2018 by Daniel Bricklin
All Rights Reserved.

See disclaimer on home page.