April 27th, 2007

Hackety Hack!


Programming should be fun, it’s what gets us programmers into it in the first place, and it’s what keeps us going at it.

Too many layers have been heaped on programming these days; most IDEs are oppressive, process-oriented beasts.

I, and many other programmers, have been concerned about how the next generation of programmers are going to be introduced to the joy of programming when all the tools out there seem to suck the fun out of it.

Enter why the lucky stiff, and Hackety Hack!. Taking one back to the days when programming was as easy as typing something in, and hitting enter. 🙂

Hackety Hack! is about learning to program, and being able to do really cool things in a very few short lines.

I’ve been a fan of _why for a while, with a really wild approach to teaching Ruby, and a lot of really interesting code, and this is even cooler.

If you’re new to programming, or have kids, or just want to play with one of the simplest ways to write programs, get Hackety Hack!

— Morgan Schweers, CyberFOX!

Comments Off on Hackety Hack!
Posted in coding, learning, passion, Ruby |


A concerned user recently asked me how I was doing in the aftermath of the issue with eBay sales of JBidwatcher, specifically:

You seemed pretty depressed about it in your post to the website.

I was.

There was a really bad week there, while I was dealing with all of it, back and forth, and just feeling like crap. I got a lot of user feedback, from a LOT of people, that reminded me, as the concerned user put it, not to let the few jerks make me give up.

I took some time to work on other projects, and I’ve been fiddling with the next major rev of JBidwatcher, mostly cleaning up the code, improving the source layout, fixing small things that nobody else will likely ever see, and writing silly features just for the fun of it. (Like making the internal webserver take ‘events’ to be posted to the various subsystems, so you can add an item, do a bid, or even tell it to fire off a sound effect through a REST-ish interface. You could theoretically ‘script’ JBidwatcher through that.)

I’ve also mostly moved the code base of JBidwatcher to Java 1.5 (mmmm, tasty generics!), since 1.6 is now out. I’ve also been experimenting with including ‘Derby’, an embeddable (in the ‘ship with program’ sense) tiny SQL-based database, so that JBidwatcher’s memory usage doesn’t grow at the same rate as the number of auctions. Also so that it can offload completed auctions, so they’re not kept in memory anymore at all. Yet another thing I’ve been playing with is including a scripting language (something simple) which would get run on certain events, which would allow for making some of the complex rules people have requested as features. I’ve also written up an FAQ I need to publish on the site. (The first question addresses my inability to answer emails consistently, in fact!)

Anyway, all told I (and work!) have been keeping myself busy, albeit quiet. It all helps me get past the issue with the people selling JBidwatcher. Future versions will probably not be open source, however. 🙁 I may expose the source, or open certain sections, but almost all open source licenses explicitly allow what those folks were doing, and I’ve determined that it’s beyond what I’m comfortable with. One of the things people repeatedly said in private emails was that the open source nature of JBidwatcher was not critical to their appreciation of JBidwatcher. This means I’ll need to extricate myself from Sourceforge in various ways, and cover my own purchase of IntelliJ IDEA, but I think donations will have covered that.

I don’t want to charge for JBidwatcher; I prefer people using it and deciding for themselves what it’s worth to them. Plus, because it’s scraping eBay, I feel bad about asking for money for something that could break the next day. So I expect the program will continue to be no cost. I’m thrilled to get donations, of course, but I don’t build JBidwatcher to make money; I have a day job for that. 🙂

At the same time I’m working on building other projects so my morale won’t get torpedoed so badly when someone messes with the sole project I’ve been working on.

One of the other projects I’m working on are a health tracking tool (weight, blood pressure, hours slept, water drank, steps taken, foods eaten with nutrition information, and more stuff like that, with pretty graphs and sparklines (my weight trend: Weight Trend Sparkline)). The other major one is a comprehensive multi-user outliner tool. Both are entirely web based applications, unlike JBidwatcher, and both are in Ruby on Rails.

I’m sorry that I haven’t been dedicating more time to JBidwatcher, but it’s been fundamentally working okay recently, and I needed to blow off steam by doing cool new stuff. So I’ve been letting it percolate, and rekindling my coding passion by working on other interesting problems.

That’s the status as of now; I hope that this sheds some light on my thought processes, and what I see in the future for JBidwatcher. One important thing to take away is that YES, there is a future for JBidwatcher. 🙂

Thank you, every one, who wrote me, donated, or just thought well of me during all this. I appreciate it a great deal more than I can express.

— Morgan Schweers, CyberFOX!


Just noting that I closed my ‘gmail’ window, and my Firefox process went from 883M to 585M.
I guarantee that 300M weren’t being used by the gmail page as it stood. Perhaps Google’s Javascript foo is not as powerful as they’d like, and it’s holding onto old AJAX results?

I can guess a few other things about what might be going wrong (caching AJAX requests in the browser, for instance), but one way or another, if you have memory problems with Firefox 2 and you keep a gmail tab open, try closing your gmail tab now and then.

I have to wonder if it’s a general AJAXy problem with Firefox, or specific to gmail…

One way to test (which I’m going to try soon) is to try a ‘reload page’ instead of a ‘close tab’, to see if it’s the browser/page-renderer/caching keeping the memory occupied, or the JavaScript on the page that is abusing memory.

There are limits to how much CPU we allow any given page of JavaScript to have; I’m surprised there aren’t any limits to how much memory it can have.

— Morgan Schweers, CyberFOX!


I had a friend recently who asked about what programming languages they should learn. He primarily works as a system and network administrator, and had been bombarded by ‘Learn Ruby!’ from a bunch of evangelists recently. I assured him it wasn’t necessary, and came up with this interesting list.

What language you work in really depends on what you need to do. In my definitely not so humble opinion, here are the best of breed languages/platforms for each of a set of needs, if you just want to Get Stuff Done.

Applications – Java. It’s cross platform with rich libraries, and 1.6 makes it even better.

Glue – Perl and bash are best for gluing things together. On Windows this category doesn’t really exist.

Web – Ruby on Rails is the best tool out there right now. You also need Javascript, CSS and HTML.

Speed – C++ is best when it must be fast, but usually in service to another language, except for…

Video Games – C++, because speed often trumps other considerations.

Database – If you touch a database, you need to know SQL.

Applet – Flash/ActionScript is the best applet language right now.

Embedded – I believe C is still the gold standard, but I haven’t done embedded development in a while.

Mobile – Java ME appears to be the only platform-agnostic answer currently, but again, not my field.

The above is based on my knowledge, as of right now. I can make a strong argument for each of them, but that would require being negative in various ways about other languages for comparison. Instead I prefer to note that other languages or platforms may still be good for each need, but these are the best.

Just like Ruby on Rails exploded onto the scene, this list may not hold true in a week, so it’s more a ‘snapshot’ than a ‘bible’. It’s also based on my knowledge of what makes for good software development, balancing (depending on the need) features that make development less error-prone, speed, cross platform capabilities, maturity, match between the development (and mental) model and the need, available tools, etc…

Hope it’s an interesting view into my development mindset.

— Morgan Schweers, CyberFOX!

Posted in coding |

November 8th, 2006

And so it begins…


McCain/Guiliani vs. Edwards/Clinton, 2008.

Unless one (or more) of those four do something distinctly career-suicidal in the next 2 years, at least.

For now though…  It was a good day.
—  Morgan Schweers, CyberFOX!

Comments Off on And so it begins…
Posted in politics |

I’m with Lorelle on tab usage. I regularly have between 2-5 windows, each with 30+ tabs. I do it because I’ll be reading an article on something I want to know more about, and I’ll run across an interesting link in the article, but not want to lose the flow of what I’m reading. I’ll middle-click, and continue reading. Once I’m done with that article, I move on to the next link, and the next… I also keep a baseline of about 20 tabs of personal and work stuff (gmail, financials, calendar, development reference, etc.) which never closes.

I used to do this with ‘new windows’ in Netscape 4.x, and I got into a long discussion with a Netscape engineer about my usage patterns (having 40+ Netscape windows open tended to crash it badly eventually), and they acknowledged that the program was unstable under that kind of usage. 🙁 Worse, was that the email reader ran in the same process as the browser, so crashing the browser crashed my mail. Tabs (and Firefox, as a lighter browser) saved my sanity.

I try to never close my browser, and I reboot my computer only every couple of weeks (and that’s only if it’s my Windows box). Happily with Session Saver, I never had to worry about shutting down my browser, as it preserves my tabs and windows. (I miss Session Saver in Safari…)

If you find that Firefox 1.5 is unstable under too many tabs (it worked pretty well for me), get a session saver. It’s a life-saver when your browser crashes and you would otherwise lose 100+ tabs that you clicked to look at later, so you don’t know what the URLs were…

Firefox 2 ships with (x) on each tab. Bleh. Fix it by browsing to:
Filter for:
double-click it, and set the value to:
You can create it if it doesn’t already exist.)
I recommend the FF2 extension ‘Restarter’, until they add the Restart option into the menu standard, in order to deal better with adding extensions. For the IE7-ish ‘preview’ mode, I’d suggest the extension Showcase, or Reveal if they update that plugin to 2.0.

I’d also suggest turning on session saving for all sessions, by adding configs:
Now if only I could revert to the old ‘shrinking tab’ behavior, at least down to a certain width.

Update: You can set this by changing your config options as follows:

This will set your tab width to 25 pixels minimum, which will let you see a LOT more tabs than the old setting of 100. I chose 35 for the clip width, based on having divided the minWidth by 4, I divided the clipWidth (default of 140) by 4 as well. However, my tab usage often means that I need nothing more than the favicon in the tab to know where I’m going, or I never random-access the tabs, closing one to continue reading at another page.

Anyhow, these have been some power user tips from a dedicated Firefox user.

— Morgan Schweers, CyberFOX!


If Speaker Dennis Hastert is forced to step down, due to the issues surrounding what he knew and when he knew it, does that mean he’s been ex-Foley-ated?

—  Morgan Schweers, CyberFOX!

Comments Off on Shameless exploitation of recent news…
Posted in Uncategorized |

I joined another startup…  Not quite as small as Scoble’s new venture, and not part of the bubblicious blogging/vlogging/podcasting, etc. world, but still relatively small.  However, I have about 8 months of mortgage payments in savings, and several small side-services that make me enough to cover utilities and food if we’re really careful.  I no longer would really think of joining a startup without that partial net, but then I have responsibilities that I’m not willing to fail on.
The only thing I’m really afraid of if my company tanks is losing health care…  When you don’t have that safety net, one serious health issue can mean the difference between surfing the web and getting sucked under the waves.

I’ll pass along a piece of advice for anyone looking to start a company, from someone (me) who’s been through several startups.  (McAfee Associates and PayPal being two very notable, very successful, and very different, ones, in different decades.)  The advice is useless ever since 1994 because the ‘free money’ vibe of the VCs has infused the business world and made it hard to follow, but it’s free advice anyway, and worth whatcha pay for it.  😉

If you’re going to start a company, be profitable FIRST, before you ever talk to VCs.  If you don’t NEED their money, but you’re on one of the beautiful adoption curves, they’ll fight each other to be the one who gets the right to give you money.  Sure, you don’t need it, but if spent right, it can (1) pay for the dog’n’pony ‘going public’ show, and (2) move you one or two rungs up the doubling curve.

The funny thing to me is that people take the money out of the get-go, to move them up 1-2 rungs when the power curve is low, boosting them from 1000 users to 4000 users.  What they should (in my oh-so-not-humble opinion) do is grow slower for a little while, then take the money when jumping the power curve would mean the difference between 250,000 users and 1 million users AND you’re not dependent on the VCs for your existence.

This means growing slower at the start, only growing as fast as you can afford to, keeping yourself as close to cash-neutral as you can, and always being one cost-cutting exercise from being profitable.  It’s not the preferred method for a class of folk who were raised and bred on tales of overnight millionaires, and ‘get big fast’ (which only works for a very SMALL subset of companies) but it’s the way to build a sustainable, exit-strategy-free business.  (Exit-strategy-free meaning you don’t NEED one, not that you don’t HAVE one.)

I saw it done at McAfee Associates, and we completely dominated the conversation with the VCs.  It wasn’t a request for money, it was a bidding war on the part of some top-notch firms, and that was in 1992, before the first bubble even started to be blown.  We were chugging in about $10Mil/year as I recall, and spending less than a quarter of that.  I don’t believe that company was EVER unprofitable, from the quarter it was founded.

McAfee Associates took the company from “the three Fs” (family, friends, and fools) to profitable without really going through the intervening step of angels or venture capitals.  (Now, for what it’s worth, some of those 3Fs were…understandably upset that they didn’t see any return when the company made it big, but that’s just part of the darker side of the history of McAfee Associates, and not directly relevant to the point I’m making.)

Now McAfee Associate’s distribution model was nearly free (distributed by BBS), advertising was ‘make a good product and get people to talk about it and show its use off’, the product was…well, you could joke that it was viral. 😉  People used it, found it was useful and necessary, and handed it to other people who probably needed it.  The product was free and fully functional, but every run it put up a message, basically that ‘if you’re using this in a company, educational institution, or government organization, you must purchase a license’.  End users paid the registration fee sometimes, which was a nice base source of income, but companies leapt to license.  Mostly because their employees were using the software, needed the software, and were handing it around inside the company.  Someone would point out the license issue, and the company would call us to pony up.  We never had to call anyone to sell the software, it sold itself, and our users sold it for us.  Most people wouldn’t imagine it, but companies really are decently minded when it comes to dealing with other companies.  Or at least so afraid of lawsuits that they’re willing to be decent citizens.  Sometimes a big company would use their size to pressure us to give them a discount, which we were happy to do, because it was nearly free money anyway.  Our overhead was fixed, we didn’t advertise, we told them to download themselves a copy each quarter, or if they paid enough we’d send them a floppy once a quarter.
What’s changed in the world since then?  Well, a lot, but I’ll put forward that mainly the scale has changed.  Free distribution through BBSes reached a large percentage of the computer using population back then.  Distribution through the Internet reaches a HUGE percentage of the computer-using population now.  If you make a good product, people can talk much more widely about it with blogs.  Companies are still looking to be good citizens, primarily, and there are a LOT more of them out there.  Oh, and you probably don’t have to mail them a floppy each quarter, no matter how much they pay.
So the one of the biggest things I’d suggest to ‘start profitable’ is to target your product at corporations, but make it attractive to end-users as well, so they’ll bring it into the company.  As Willie Sutton didn’t say but is said to have said, when asked about why he robbed banks, “That’s where the money is.”

—  Morgan Schweers, CyberFOX!

Comments Off on Startup advice, for joining and starting.
Posted in business, contemplation, ideas, McAfee Associates, Scoble, startup |

Unfortunately, the John Edwards Keynote at Gnomedex was overly political. As Chris Pirillo put it, once you open up the session to the audience, the audience drives it to where they want it to go.

For the most part it was political questions, comments on the democrat party, and grandstanding by audience members.

Back in the day, I used to have access to the Congressional Record computer system, an VAX/VMS system. One of the interesting things it had was variations of bills as they went through various stages. One thing I learned back then was that all bills are ‘patches’ to existing government code. So the obvious question becomes how that is visualized, written, edited, and collaborated on by the Senate right now. Further, is there any way to expose that inner workings, and the steps involved publicly?

Specifically taking the wiki approach, adding in added/deleted/changed hilighting, along with version control and version identification. It would be IMMENSELY valuable to see which Senator made individual changes in the bills, for instance. The other related question, is how Senators collaborate on writing a bill. For instance, since it’s all deltas to the government code, you have to keep track of what those changes are, and allow multiple disconnected Senators to send data back and forth in order to build the full text of the bill. This seems like a great place for wiki technology to be useful to improve the processes of government.

Anyhow, that was my ‘technical’ question, as opposed to the majority of the political questions/discussions.

We had a good chance to talk real technology with John Edwards, but it devolved more or less to a political mess, and I didn’t even get to ask my question.


— Morgan Schweers, CyberFOX!

June 22nd, 2006

Pre-GnomeDex build-up


So I’m very, very much looking forward to Gnomedex, coming up at the end of this month. I went last year, and it was really cool. I went to the Seattle MindCamp, which was intense, a lot of fun, and tiring. I met good people at both, although the MindCamp folks were more…relaxed, I think. The knowledge sharing was much more peer-to-peer at MindCamp, and I really reveled in it.

Gnomedex is looking to be even more interesting than the last one, with the addition of Senator John Edwards as keynote speaker. I don’t expect much from him in particular, but the added attention it’ll give the conference should be interesting.

More than anything else, I’m looking for the little moments, like last year when I watched the JotLive Wiki updates stuff happening as the guys debugged it while sitting in the back row of the conference. In retrospect, it presaged the Google Spreadsheets interactive/shared updating. The big presentations on stage generally came to nothing. The little moments, and the side discussions are where the action was, and I expect that to be true this time as well.

Plus I get to show off my new house to some friends who are coming into town for the conference!

I need to get my act together, get some software updates out there, and psych myself up for the conference. I’m not a big name guy, so my contributions tend towards having useful pieces of technology to show off and play with. 🙂

On a more depressing note, my mother asked for money again, which coincides with the start of my paying mortgage payments, NOT a good time for this. However, I think I may re-release JBidwatcher with the affiliate program enabled again, and funnel the money from it to help her out. I could simply sell the program, but without being able to use the eBay API I can’t promise users it’ll be consistently functional, and that seems like a sucky thing to do to paying customers. At the same time, the program drives revenue to eBay, so it should be of value to them.
This is yet another place that I can get some help at Gnomedex, not so much directly for my mother, but to get an idea of ways that people have monetized their passions outside of work, in order to get an extra income when necessary.

My goal at this years Gnomedex is to keep my ears open; to hear the rumblings of what will make next years tech news, when writ larger. I need to keep in mind the small conversations, and imagine them happening in the halls at Google, or Microsoft, and imagine what they’d do with them…

So many people probably think that Gnomedex will be all about Podcasting, and VLogging. I think that’s just the cover story. The medium(s) are not the message. I think it’s about new ideas, new directions, smart people, and listening carefully to what people are showing off.

Yes, a dozen video hosting sites are making history, and providing all sorts of interesting value, as well as amusing video. Yes, podcasts are so mainstream they’re available on iTunes Music Store, CBS has turned over its incredibly valuable properties into $1.99 iPod Videos, and Suicide Girls post iPod Video-compatible introductions. Perhaps the abundance of new video sources will push out the television, and eventually replace it. This actually interests me less, because it’s a Big Media world.
I’m more interested in what people are saying, rather than how they are saying it. I don’t so much care about the media they use, I care about the ideas they’re getting across.

I probably won’t vlog, I’m not photogenic enough. I don’t really podcast, for the same reason, nobody wants to hear my ideas interspersed with ‘umm’, and such. If anyone is interested at all, they want the thoughts filtered, cleaned up, parsed, and posted, so they can be searched, summarized, stored, and (most often) skipped.

If there’s any serious value out there, in interesting but HARD technology, it’d be in automatically extracting the text of a voice discussion, describing the scene in a video, etc., so it’s searchable using text search engines. This is a Hard Problem, but it would suddenly make the world of VLogs, Podcasts, and even TV and movies, all searchable, indexable, and accessible to everyone.

There’s a world-changing technology, if ever there was one.

See? I’m already getting my mind into the mode for the Gnomedex… 🙂

— Morgan Schweers, CyberFOX!

Comments Off on Pre-GnomeDex build-up
Posted in contemplation, Gnomedex, ideas, MindCamp2.0, Seattle |