Scroll Different
Because I got the Developer Preview of Lion, I didn't get the warning dialog that most people got about the "new and improved" scrolling direction. For weeks, during the preview, I thought that the upside-down behavior was because of my old Macally trackball. Then I tried an Apple mouse and found that it was backwards too! I couldn't find anything in System Preferences ▸ Mouse. Finally I called AppleCare and was pointed to the checkbox…
What in the world does that mean? After a few seconds I guessed what they meant by content, then activated the engineering side of my brain, and visualized it moving as described. "Oh, oh! Now I get it." Apparently I had skimmed over that checkbox, thinking that since it was so complicated it must not be what I was looking for.
Especially with early versions of BookMacster, people have commented to me that the control names, tooltips and other text "strings" as we call them were too long, too technical and hard to understand. I've been working on simplifying those, trying to be more like Apple. But with this checkbox, I see that Apple is going in the other direction. I told the rep on the phone that the title of that checkbox should have been something more understandable like this…
Binary XPCOM Component for Firefox in Mac OS X
In getting BookMacster to access Firefox bookmarks without quitting Firefox, I was hoping to be able to use the same NPAPI Plugin that we used for Google Chrome and developed thanks to Firebreath. But, alas, such operation in Google Chrome is based on a "background" HTML page which is always alive and not loaded by any browser tab or window. Firefox does not seem to support such a concept. Firefox plugins only live as long as the browser tab or page which loaded them, and thus our prototype plugin fails as soon as the tab which was frontmost when the plugin was loaded is closed.
After studying this for a day, I concluded that the solution in Firefox was to use a Binary XPCOM Component instead of a Plugin. However, I could not find any instructions for making such a thing in Mac OS X. So it took another day to find an old tutorial, modfy and extend it…
The following commentary updates and extends this tutorial which was published by Alex Sirota and last revised in 2005. If you read this commentary along with Sirota's tutorial, you should be able to make a Component which will work in Firefox 3.6 under Mac OS X.
Google's Chrome - Oh no, a Checksum!
Well, it's finally about time to get working on adding Google Chrome support to BookMacster. It appears to be a JSON file, and it looks like Blake Seely's BSJSONAdditions code can read it. Haven't tried writing yet. But I noticed this little "checksum" at the top of the file. For a while, I ignored it, assuming it was part of the JSON standard and would be taken care of by Blake's code. But then a little research showed that it was not. Oh no, do I need to compute that? Disaster. A couple months ago, I had downloaded the Google Chrome source code. It's, I don't know, gigabytes. Took hours. Then it wouldn't build.
Well, I don't really need to build the stupid thing anyhow, just figure out how they do their checksum. So I searched the code for 'checksum' using BBEdit's wonderful Multi-File search. After about 20 minutes, it found 812 occurences of 'checksum'. Damned C++ I haven't used in 5 years. Anyhow, I find the relevant code. I see the algorithms they use, but that's the easy part, since I'm already using these functions in BookMacster for other purposes. The hard part is: exactly what is the payload which is MD5ed? What is the first and last character? Does it include the whitespace? What about text encoding? Big/little-endian? Oh, no; there are 2^N ways to define this.
The #1 Winter Bicycling Slide in San José
When I lived in Warren, Michigan in the 1970s I would rotate commuting by automobile, public bus or bicycle. My safety rule for snow was: No bicycling if more than one inch of fresh snow. During the 1990s I visited Boston and was amazed to see bicyclists older than me commuting in any amount of snow.
But I've learned, more than once, that we have a winter slide here in San José, California too. I've had to, since I no longer own an automobile, and public bus rarely goes where and when I want to. The worst months for it are: November and December. It's fallen leaves mixed with rain. Being aged now, I'm more careful – during our first winter storm(*) a few weeks ago, I was actually too careful and skidded down while stopping for a motorist coming out of a driveway who had probably already seen me and was waiting. Thanks to Easy Racer's recumbent bicycle technology, I only got a skinned elbow that was very sensitive for a few weeks, instead of another broken collar bone. No incidents occurred during my commute to or from the Haines Swim Center in Santa Clara this morning.
Duallicious - twice as much fun :(
Oh, this is going to be really fun. After working the better part of three days, I finally got my code for interfacing with the new Delicious - Yahoo Accounts (using OAuth) working. But in testing, things weren't working right. Then I discovered the problem. In the screenshot below, you see two Safari windows. Both are showing the first three bookmarks of jerrykrinock. But they're different! Why? Because there are now two jerrykrinock accounts on Delicious. The top one is jerrykrinock - Yahoo and the bottom is jerrykrinock - Legacy, Old skool, or whatever they call it. You can get one or the other, depending on which one you've logged into last, I guess.
This is going to be fun :(

Sincerely,
Jerry Krinock
No Big Deal about Snow Leopard?
Not too many people have asked but, anyhow here's the answer.
On 2009 Aug 28, at 18:01, Typical User wrote:
> I found nothing about Snow Leopard Compatibility on your Web site. Huh?
Ha! That's because properly-designed applications shouldn't need to updated when Apple updates the OS. When you read on a software developer's website that an app has been Great Achievement! Updated for Mac OS 10.Whatever!, that usually means one of two things, in order of frequency:
- "We had to go back and fix all of our kludges that we could no longer get away with under the new OS version."
- "In the previous Mac OS version, we had worked around some of Apple's bugs in the OS. In the new OS version, Apple fixed these bugs but, Grrrrrrrrrrrr, not the way we had expected them to back when we wrote our workaround."
Well, actually, Bookdog did had one of each, that resulted in a couple of cosmetic issues when running under 10.6. These fixes are in 5.3.5+. For details, see the Version History.
Sincerely,
Jerry Krinock
Why I Like (Mostly) my Mac Mini
Yesterday I received a survey from Apple asking what I thought of my Mac Mini. They limited the response to 500 characters. "Time for a blog posting!", I said.
Dear Apple,
Please make a Mac Mini that is not so miniaturized. Look, it's very cute that you can slice up one of your laptops, stack it in four pieces and have it take up less space in my office than a 1985 model "Clock Radio". But it's not so cute when you need to replace a hard drive or optical drive, or add RAM. I have done one of each and it is quite time consuming.
My little office is 10x10x8 feet. I'd have plenty of room for something which is two or three times as big, and would much appreciate having something that was easier to maintain. I understand that the larger case would use more material and cost a little more, but you would more than make up for that in reduced assembly costs, reducing the number of jigsaw-puzzle-shaped custom parts, and simplifying the cooling system by not having everything packed in so tight. And, as Steve says, aluminum is recyclable. You might also consider using a 3.5 instead of a 2.5 inch hard drive if those are still a better value.
Three-Minute Sorting of Safari Bookmarks
For longer than I can remember, Bookdog has had the capability of sorting Safari bookmarks 3 minutes after the user added or changed a bookmark in Safari. This nifty feature that was made possible by the cooperative way in which Safari handled its bookmarks file. It was not possible with other browsers (Camino, Firefox, etc.)
With the release of Safari version 4, however, a user reported a crash, and I discovered that this was repeatable. The way to make it crash is:
- Activate Safari version 4.
- In the menu click Bookmarks > Show All Bookmarks
- Click a bookmark to select it.
- Click the name of the bookmark to begin editing the name. Name becomes editable and focus ring appears.
- Activate Bookdog
- Open Safari bookmarks, make some changes and save.
- Activate Safari version 4. It will crash.
Jerry Krinock
Demo Bookdog's Successor
Enough of the new app is now working that I can offer a short demo movie. Think of this as a "pre-beta" test or "design review" of the application name, icon, basic structure and functions. It's 7.4 megabytes, runs for about 5 minutes and has audio.
A good place to post any feedback on it would be this forum thread.
Thanks for watching and feeding back!
Jerry Krinock
Selling Software with Google Checkout
I spent WAY more time time getting Google Checkout running than I did getting Paypal running. Google Checkout is way more complicated and takes much more code. With Paypal IPN I get one http post (their "IPN" - instant payment notification) with all the info, ack it, and I'm done. Optionally, I can "post back" to them to get it "verified". With Google checkout I get eight posts, although fortunately I can ignore five of them. The three which I cannot ignore are (1) the new-order-notification, (2) a callback to which I send sales tax or VAT and (3) a charge-amount-notification.
Google Checkout is a fundamentally different service than Paypal. It is more like the old Microsoft Wallet. The idea is that Google Checkout "protects" customers from supposedly evil merchants. Google Checkout often sends me an email alias instead of the customer's real email address, and has some ridiculous policies about what information I collect and when. Fortunately, I don't need nor want much customer information. More important is the fact that the customer must create a Google Checkout account in order to purchase my product. This is not true with Paypal (although if the customer does have a Paypal account, Paypal gently twists their arm to make them to use it.) Although I haven't studied the stats in detail, I often see messages from my server indicating that customers choose one service, then go back and choose the other. Ultimately, about 80% choose Paypal.
Software "Efficiency"
In measuring software "efficiency", there are several addends in the "cost" function, the denominator of the fraction. A huge weight is given to user inconvenience, next in value is bug-fixing time, next is test/development time, and way at the end, with a weight of maybe .001, is the number of bytes in the package. In other words, peoples' time is expensive, but hard drives are cheap.
That's kind of hard for a hardware guy like me to swallow. And I like to understand what I'm doing and why it works or doesn't work. Interfacing to Firefox 3 bookmarks requires using the open-source sqlite database library, an execellent and excellently-documented relational database published by a very smart guy in North Carolina. Apple has built sqlite into Mac OS X. So, I designed Bookdog to use Mac OS X's built-in sqlite library when interfacing to Firefox 3 bookmarks. Although there was a minor problem that a few users of Mac OS 10.4 had, this design has pretty much worked and not given me any trouble.
USA and Digital TV: Names For Rent
We don't watch enough TV at our house to justify cable or satellite. After reading all the horror stories about the digital converter boxes I was expecting the worst. I got my coupon and bought my Zenith DTT901 converter from "Modern TV" in San Jose, a small non-big-box shop where they actually repaired "television sets", as they were called, 40 years ago.
I hooked it up to the directional antenna on our roof in place of our VCR tuner, turned it on, and laughed when the automatic setup said that it found 46 channels. But it was true! Of course, that means we're actually getting only the same 15 stations, each with 3-5 subchannels, including a useless traffic cam perched on a freeway intersection that I'll never use on my bicycle. But they all have perfect picture quality, and stereo sound. Even Mrs. Krinock was happy and I'm completely amazed.
The only trouble I had was that the factory wrapped the battery cell for the remote control in a nearly-invisible cellophane wrapper. Nothing in the instruction sheet told you to remove the wrapper. I wonder how many people take these back to stores because the remote controls don't work?
Engineers should "just know" some things
Since I rarely ride my bike outside Santa Clara County, I enjoy receiving Academic Discount requests, reading what users are doing, checking out their web pages, etc. Sometimes I get to tell a bit of my story. A math professor got this one yesterday:
Around 1980. When I was taking solid-state physics as an electrical engineer in graduate school, on our first exam were asked to model as a differential equation the diffusion of electrons and holes between two parallel rectangular plates. And then part two of the problem was: "Now solve the equation." Students who could not remember e^-ax lost 50% of the credit, and they were so mad that the professor dare to weight so heavily their remembering a mathematical fact which they could look up in a handbook. "We're done with undergrad math!" was their attitude. But Dr. Melvin Shaw would not budge. "You want to be a master of electrical engineering without being able to write down the solution to a first-order differential equation with constant coefficients? There are engineers who get paid actual money to write these things down every day."
Legal but Sleazy Download Scams: Softonic
I just received a message from a customer who was wondering why Bookdog was not acting licensed after she "purchased" a license from this Bookdog download page published by Softonic. On that page, you'll see that there are three "choices" to download Bookdog. Being familiar with the way my 20-year old son quickly clicks through web pages without doing much reading, I can understand how someone might choose the "FAST" download. However, the choices are more clear if I include some facts that they omitted:
First Choice, "FREE": Download at maximum speed allowed by your internet connection, with no ads, virus free, premium support directly from the developer, guaranteed latest version, directly from my site. Cost: $0.00 USD.
Second Choice, "FAST": Download at maximum speed allowed by your internet connection, from their site. Cost: $3.14 USD.
Third Choice, "DELUXE": Download at maximum speed allowed by your internet connection, with no ads, virus free, "premium" download support (for those who have trouble finding the 'Download' button?), includes the "privilege" of downloading other apps in this way for 3 months. Cost: $10.19 USD.
"License Key" instead of "Serial Number"
I just spent the last 20 minutes changing my server scripts and database to record 'licenseKey' instead of 'serialNumber'. I am so happy. The latter was a vestige of my days with eSellerate, who use this completely inappropriate term, and I've always hated it. Purchasers or my next product will now get a "License Key".
For those of you who have never worked in a factory, Serial Numbers are assigned serially, as in 00001, 00002, 00003, etc. Old Windows applications usually had "serial numbers". "Serials" are also the subject of web searches by not-so-nice users, many of whom spell it "serialz".
License Keys are numbers which are purchased to unlock a Mac application. Hooray for "License Key"!
Firefox "Livemarks" vs. Safari "RSS"
I just received an inquiry from a user wanting to know why when he synchronizes Firefox bookmarks to Safari, his/her "livemarks" become static folders containing whatever feeds were current at the time of the sync.
I've never been able to find an authoritative source on "Live Bookmarks", "Livemarks" or whatever. The Wikipedia article on "Livemarks" is acknowledged to be only a "stub", and implies that Safari supports them, but I don't think so. I would say that Safari supports "RSS Feeds" but does not support "Livemarks". But since there is no legal definition of "Livemark", either one of us could be correct.
Here's the way I see it: Although you can bookmark an RSS feed in Safari, and Safari knows how to render RSS feeds, it does not do what Firefox does, which is to make the RSS feed into a folder, update it when you display it in your bookmarks, and populate its children with the current articles. I believe this is what Firefox calls a "livemark".
Well, what Bookdog currently does is to translate the livemark into a regular, static folder and the articles into bookmarks. Actually, the latter is not a translation because, in Firefox, they really are bookmarks. The former is the best that can be done given that Safari does not support the dynamic, "livemark folders".
Google Bookmarks, Google Notebook
I noticed a few months back that Google™ has now, more-or-less "officially" stopped developing Google Bookmarks, by encouraging users to use the newer Google Notebook instead. (Log in to your Google Bookmarks and you'll see the promo for Google Notebook.) Unlike Google Bookmarks, Google Notebook does have an interface which I could use to easily read or download Google Notebook. Thanks, Google! Unfortunately, you've not yet provided an interface for an application like ours to write or upload items ("notes" = "bookmarks") to Google Notebook.
When and if Google does this, I'll look at adding support for Google Notebook to Bookmarksman (Bookdog's successor). In the meantime, the fact that they've stopped working on Google Bookmarks means that interface which I engineered for Google Bookmarks without their help is probably going to be stable for a long time. That's nice! I've got plenty of other features to get back to work on in the meantime.
Smart Folders
The Dilemna of "Smart" Folders
The smart folders in Firefox 3 are not like other folders that contain bookmarks. They are in fact javascript bookmarklets that contain a query specification. Other browsers don't have anything like them, and at this time they are useless outside of Firefox 3. They are not really bookmarks, except that they have a location within your bookmarks. Should they be treated as bookmarks, or as some other type of preference which is peculiar to Firefox 3?
There is also a very practical consideration. Although smart bookmarks cannot be created without knowing javascript and accessing Mozilla developer documentation, they are easily deleted within Firefox 3, and once they are gone the only way to get them back is to restore your bookmarks from a backup. In the Firefox 3 development discussions there is mention of an open bug to add a "Restore Smart Folders" button to Preferences, but I don't see this yet and it may not happen.
Handling of Smart Folders in the Current Version of Bookdog
The Pains of Reorganization
Yes, the eight days have seen four Bookdog updates. In preparation for future forking and expansion of the "bookmarks managment" line, I needed to do alot of housecleaning and reorganization. Despite my best efforts, some regressive bugs had to creep in. I think everything is under control now.
Jerry Krinock
Fixing Keychains Broken by Leopard
I had been using early versions of Leopard to test Bookdog but not for "actual work". Today, after receiving reports from 2 users of Bookdog trouble with Leopard, I upgraded my Main Mac (an Intel Core Duo Mac Mini) to Leopard and found that my keychain was broken.
A quick Google search showed that Apple has just released a Login & Keychain Update 1.0 for Leopard. However, I suppose because I had not yet gotten the final version of Leopard from Apple, it refused to run on my pre-release Leopard.
So, after being frustrated due to lack of keychain in several apps, I allowed Keychain to reset my keychain. It turns out that what this does is to rename your old keychain, which it cannot open, as login_renamed1.keychain, and create a new, empty keychain named login, which now became the default keychain. So, that didn't help.
What I really wanted to was to fix my old keychain, but clicking Keychain First Aid from the Keychain Access menu didn't work because the old one didn't show up in the list. So, I went to yesterday's backup and copied my old default keychain, ~/Library/Keychains/jk, to its same old location, right-clicked on it, and told the Mac to Open with > Keychain Access. Voila. This now became the active document in Keychain Access, and I was able to he Verify it (problems were found) and then Repair it. From reading the log, five types of problems were found and repaired:
Confirmed: Our Congressman is a Good Guy
Since I did pretty well coding support for del.icio.us bookmarks tonight, I rode my bike over to the Santa Clara City Hall for our Congressman Mike Honda's Town Meeting. He conducts about three of these, during each Congressional recess (twice a year). I got there a few minutes early. There were only about 100 people there, and after I sat down I noticed that the front row was nearly empty, so I moved up and began talking to Mike about the weather, and apologized for us having our first mini heat wave of the year just as he came home for vacation. We told him to keep our weather a secret but he said that "they already know", and explained what we already know about Washington, D.C. heat and humidity.
Then, Mike sat down next to me as city council member Jamie McLeod introduced him. Yep, my congressman, wearing a necktie, sitting right next to me in my t-shirt and shorts. He even removed the chewing gum from his mouth, placed it on a piece of used paper, folded the paper up, got out of his chair, walked a few steps to his jacket that was hanging on the back of another chair, and placed the gummy paper in his jacket pocket. He probably threw it in the trash when he got home tonight. I've always known that he was a good guy. I wonder how many representatives would have tried to stick it under their chair while I wasn't looking?
Shiira Bookmarks
Shiira Epilog
A "Snow Day" at work in San Jose...
We live on the corner of a 60-foot street and a 40-foot street; the latter is the narrowest in San Jose. We also have lots of parked cars, trees, and utility poles that are right at the curb. To accomplish such a feat takes requires the contemplation of a chess master, carefully considering all the obstacles and angles present and future. Unfortunately the poor guy driving this one was thinking more like a 100-yard dash, and was getting too much "help" from bystanders that were each looking at their patch of the trees in the forest.The photo on the left shows when he was just starting to get in deep. A similar circus was going across the street, at the front end. I wanted to take more photos but things quickly went from bad to worse; I ended up having to fetch a ladder and some tools to remove that sign from the lamppost and then help him do the mental math needed to engineer his way out of there.
Actually, the cause of this whole mess was that neighbors who are fearful of other people using "our" streets and "our" parking spaces prevailed upon the city government a few years back to close the next intersection, making our neighborhood a dead-end which often confuses visitors. When will this country learn that Government by Fear and Childish Selfishness are bad for us?Networking Made A Little Easier
Google Uploading Fixed...ready for WWDC
Chief Bookdog has fans!
The Road Ahead for Bookdog
Considering online bookmarks storage?
Jerry Krinock
Demo the Dog
Jerry Krinock
