May 16th, 2013
|02:37 pm - How to build wkhtmltopdf 0.9.6 under FreeBSD AMD64|
Installing wkhtmltopdf 0.9.6 under FreeBSD
At my day job, our knowledge base software needs a specific version of wkhtmltopdf to work. Further, it needs the version built
against a specially patched set of QT libraries in order to do certain critical things (for example, to run headless). If you run
./wkhtmltopdf against a non-patched version, it will issue this
This version of wkhtmltopdf has been compiled against a version of QT without
the wkhtmltopdf patches. Therefore some features are missing, if you need
these features please use the static version.
Currently the list of features only supported with patch QT includes:
* Printing more then one HTML document into a PDF file.
* Running without an X11 server.
* Adding a document outline to the PDF file.
* Adding headers and footers to the PDF file.
* Generating a table of contents.
* Adding links in the generated PDF file.
* Printing using the screen media-type.
* Disabling the smart shrink feature of webkit.
FreeBSD has a port for wkhtmltopdf, which includes a patched QT, but version 0.9.6 will not build against this patched QT. Thus, we
need to build both from scratch.
Further, when attempting to build the patched QT from source, there are at least two active bugs.
This is a similar error reported with another piece of software:
make: *** [WebKit/gtk/WebCoreSupport/libwebkit_1_0_la-ChromeClientGtk.lo] Error 1
Patches in this bug listing tell us how to fix it, mostly (the patches
are not FreeBSD specific, but the exact nature of the fix is easy to glean).
Second, WebKit seems to suffer a bug (referenced here) whereby it will pick up the
system header files (even if you've told it to build with the builtin versions), so it will believe that the list of available
functions is off, with an error like:
: undefined reference to `png_set_longjmp_fn'
/data/home/dmahoney/wkqt/lib/libQtGui.a(qpnghandler.o)(.text+0x1b7c): In function `QPngHandlerPrivate::readPngHeader()':
: undefined reference to `png_set_longjmp_fn'
/data/home/dmahoney/wkqt/lib/libQtGui.a(qpnghandler.o)(.text+0x23a0): In function `QPngHandlerPrivate::readPngImage(QImage*)':
: undefined reference to `png_set_longjmp_fn'
It's my hope that I can show how to get this tool, at this specific version, to install, and help others who may hit this. I'm also
pasting in the actual compiler output such that people can google for it and find this entry.
It's probably a good idea to make and install this port anyway as it will pull in a bunch of X11 and font dependencies that we may
later need, but once it's installed, it's probably safe to "make deinstall" it.
Part 1: wkhtmltopdf-qt
Get the wkhtmltopdf source
We grab the source for wkhtmltopdf at this phase because we need a file
from it to get the build arguments for qt. Grab wkhtmltopdf version
0.9.6 from google code downloads page. Since it is a deprecated
release, it will not be in the default list. Go
here Select "All
Downloads" and search for 0.9.6, to get:
Grab this with "fetch" or "wget" or just scp it over to the system.
Get the wkhtmltopdf-qt version you need
There was, at one time, a git repository at: git://gitorious.org/+wkhtml2pdf/qt/wkhtmltopdf-qt.git. It no longer seems to answer.
Luckily, the repository has been mirrored onto Github.
Clone wkhtmltopdf-qt from this github page, then isolate it down to the 0.9.6 release tag.
%git clone git://github.com/jcsalterego/wkhtmltopdf-qt.git
Cloning into wkhtmltopdf-qt...
remote: Counting objects: 563729, done.
remote: Compressing objects: 100% (104214/104214), done.
remote: Total 563729 (delta 455301), reused 563645 (delta 455222)
Receiving objects: 100% (563729/563729), 376.20 MiB | 2.34 MiB/s, done.
Resolving deltas: 100% (455301/455301), done.
(the above took about ten minutes on my very fast connection)
You can see that there are several "tagged" releases of code in this repository:
%git tag -l
So you're going to want to reduce the repository to that version:
%git checkout wkhtmltopdf-0.9.6
Checking out files: 100% (22888/22888), done.
Note: checking out 'wkhtmltopdf-0.9.6'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD is now at e63d059... Fix pdf title writeout
(this took 3-5 minutes) Welcome to 2010!!!
Without the output, the two commands you really need are:
git clone git://github.com/jcsalterego/wkhtmltopdf-qt.git
git checkout wkhtmltopdf-0.9.6
Patch wkhtmltopdf ### :
Manually apply this patch, but add a line for PLATFORM_FREEBSD.
So, on line 721 of
#if PLATFORM(X86_64) && (PLATFORM(DARWIN) || PLATFORM(LINUX) || PLATFORM(SOLARIS) || PLATFORM(HPUX))
#if PLATFORM(X86_64) && (PLATFORM(DARWIN) || PLATFORM(LINUX) || PLATFORM(SOLARIS) || PLATFORM(FREEBSD) || PLATFORM(HPUX))
Do the same on line 712 of
Per the build guide, you can get the configure arguments by doing
../wkhtmltopdf/static_qt_conf_linux | sed -re
Then, you get to go into a text editor and put them all on one line.
./configure -release -static -fast -no-exceptions -no-accessibility -no-stl -no-sql-ibase -no-sql-mysql -no-sql-odbc -no-sql-psql \
-no-sql-sqlite -no-sql-sqlite2 -no-qt3support -no-xmlpatterns -no-phonon -no-phonon-backend -webkit -no-scripttools -no-mmx \
-no-3dnow -no-sse -no-sse2 -qt-zlib -qt-gif -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -graphicssystem raster -opensource \
-nomake tools -nomake examples -nomake demos -nomake docs -nomake translations -no-opengl -no-dbus -no-multimedia -fast -openssl \
-largefile -rpath -no-nis -no-cups -no-iconv -no-pch -no-gtkstyle -no-nas-sound -no-sm -no-xshape -no-xinerama -no-xcursor \
-no-xfixes -no-xrandr -no-xrender -no-mitshm -no-xinput -no-xkb -no-glib -no-openvg -no-opengl -no-xsync -no-svg -prefix "../wkqt"
(later amended to add
-system-png instead of
-libqt-png, due to a QT bug whereby QT will use the system header file but build
against the bundled lib, thus causing linking errors)
Once you type this, you'll have to type "yes" to accept the GPL. (Yes, GPL code with a EULA). It will run for a few minutes.
Build the library
If all went well, all you should need to do is:
gmake -j3 && gmake install
When this is done, you should have a "wkqt" directory just above your build dir, that has a ./bin/qmake in it (along with some other
Building wkhtmltopdf itself
This one is shockingly easy, presuming all the rest of the code worked:
(I get a warning about
WARNING: /data/home/dmahoney/wkhtmltopdf/wkhtmltopdf.pro:21: Unable to find file for inclusion
/data/home/dmahoney/wkqt/lib/QtGui.framework/QtGui.prl, but this seems to be mostly harmless since we're building a headless version.
Then, type make. It should spin for a few more minutes, and if all went correctly, you should have a wkhtmltopdf file in your home
Test it with
./wkhtmltopdf and see if you get a basic help page. If
you do, you're probably in business!
If you're going through all this pain for Knowledge Base Manager Pro, copy it to the appropriate directory in your web
root, and test it out.
If you're doing this for some other reason -- like, "you like running old, hard to compile code when there's an easy install option",
there are self-help groups and therapy for this sort of thing :)
You probably don't need the "wkqt" directory any more, and you can
probably also delete all the source files after that.
Compiling Guide: http://code.google.com/p/wkhtmltopdf/wiki/compilation
About the author
Dan Mahoney is a sysadmin in the San Francsico Bay Area. He fixes
March 23rd, 2013
|01:23 am - The Smart Radio Rant|
The Smart "Highline" radio is an option I paid over a grand extra for in my 2013 Smart Fortwo (a car which I otherwise love). It offers touchscreen CD/DVD/MP3CD
player, plus SD card support, bluetooth support, AUX video and audio in. For a brand I've otherwise been incredibly impressed with the design of, this one niggling detail seems to be where the ball was dropped. It's well known
that the radio component was basically shopped out to Bosch, a german engineering firm with divisions that make everything from Brake Pads to dishwashers. While not only did Bosch really fail to capture the ingenuity that Smart
has shown in other areas, they've mismanaged some features as to make the car less safe (a great example would be that there's no way to turn off the screen!).
NOTE: I should also mention that Smart has an "iPhone Kit" available for use with their stock radio. I haven't used it, nor do I think I have the option to do so. It's a $400 option, plus the install fees, and I don't think
it's designed to work at all with the Highline model. From my readings, it's mostly designed to give you some "light" features of the highline radio, plus comes with a dash-mounted dock connector (which means its support
stops with the iPhone 4s).
I kind of go on a bit of a diatribe here, but the intention is to actually prepare a list to give to Smart, because it almost feels like this radio was designed by people who don't have to use it. As one of my friends (a
software engineer himself) said "I'm an engineer, I am qualified to diagnose broken".
The "highline" radio includes a microphone which is used for interfacing with your cell phone, as well as triggering the
voice-activated NAV functions. The microphone is implemented as a "pinhole" in the bottom right corner of the screen. This location
is simply a joke. Both voice commands to my phone as well as phone conversations are constantly misheard, even if I shout. I
originally reasoned that the microphone is not elsewhere in the car because Smart only wanted to install a single "head unit", but
there's a subwoofer under my seat, six speakers throughout the car, a GPS antenna somewhere. Adding one more component can't be that
Suggested improvement: Mount the microphone directly in front of the driver, either in the dash or up by the visor.
Iphone compatibility is damaged. Siri-based phones have been out for nearly a year now, and yet we still don't
have a standard button to press to "talk through" to the phone's voice dialing. If I press a button on the
iphone I can trigger siri, but because of the microphone issues, I might as well just get a bluetooth headset. Also, at that point it's no longer a "hands free phone" by some definition of the law.
Suggestion: There's a way to do bluetooth open-channel where you simply connect to a phone's voice-dialing input. The cheesy retro-bluetooth-handset I bought for $20 at Micro Center supports it. Find it and implement it.
(Note, it took me about five minutes of googling to find it -- it involves sending "AT+CKPD=200" over the command channel to the phone). Apple could also work around this by giving you a "contact"
which just calls the siri interface. They haven't. They shouldn't have to. This has been part of the bluetooth spec since the beginning.
The device supports two different "address books", one downloaded from the phone and I guess the other is "local" (because for some reason you want a contact that exists in your car but nowhere else?), but the radio just calls them "1" and "2" with no real good
explanation. I can navigate through these and choose to call someone, while I'm driving. This was NOT one of the features that was locked out by the "need to be in park" mode. There's a better interface -- my voice -- built into the phone, but Smart is
making it hard to use it.
Note that siri defaults to having its audio be via the car rather than using the on-phone microphone which can
hear me fine three feet away. This is perhaps something apple should add a preference for (use builtin mic for
siri, but play output via bluetooth).
No access to the contact list in my iphone (this appears to be fixed in IOS 6).
When a call is active, the "CALL ACTIVE [NAME]" takes over the screen. That is to say, the NAV disappears, with no way to switch back to
it while a call is active. The ONLY trace of the nav when you're on the phone is a single "next turn" indicator, which doesn't even
include the road name.
Where it gets truly annoying is that this device, for which I paid a lot extra, actually fails in several ways to be an
actual car radio!
For some reason, Bosch felt the need to draw on the screen an actual dial with an actual needle (you know, a thing that any car radio over $50 hasn't had since 8-track players were an option), and made it a "feature" that you
can tap on the dial to jump to a given frequency. It's about four inches wide. My finger is about 3/8ths of an inch wide. There are 101 possible FM channels, and I'm ostensibly driving when I'm using this thing. I don't
think a brain surgeon or expert gamer could hit the dial that accurately, to be able to use this to jump to a specifically desired frequency. This feature is always visible, but...
There are only four presets visible on the main screen -- with no option to jump to the next four (in "dumber" radios, this is accomplished via
either having a second FM station (fm2), or by pressing the button twice). Even old car radios from the 1970's with physical buttons
had five choices. There is an option to go to a second screen and SCROLL VERTICALLY through up to 25 presets (of which I think six are initially visible, and four of which are your main presets).
Suggested improvement: add a page two, or second row or presets, or the ability to press a button twice to get a second station. Rip out the stupid analog dial, and give me more buttons.
Braindead scan function. (I.e. start jumping stations, stop when I press a button). Even the most basic of digital radios 20 years
ago had this!!! I found after a month it and it's buried three menu-levels deep [station list icon, magnifying glass icon, "Frequency
Scan"], and doesn't actually show the station frequency when it's doing it, instead only showing the RDS text, which at times is
something like "TODAYS TOP HITS!"
Suggested improvement: (It would be more helpful perhaps to display the PS (programme service) field instead of the RT (radio text)
field during this.
Suggested improvement: put scan-forward and scan-backward buttons on the home screen, right in the same region as the "seek" buttons.
No HD Radio. Presumably, this could be because of lack of adoption outside the US (since the smart is sold in more countries than
No satellite radio. (Again, sirius and XM are only available in the lower 48), so if you're Bosch and trying to make a radio that
works everywhere, I understand that this is a non-starter. Also, one can justify the smart as a "city car" and not needing this
option, but I certainly would do a road trip in it.
Suggested improvement: Make it an OPTION. All you need to interface with a satellite module is an rs-232 and a line-in. The radio
already has line-in and USB (and I suspect it's running linux), so I fail to see what's hard about making an expansion module.
The RDS text is highly inconsistent in the US (details here, but in many places,
the radio doesn't provide the option to display station AND text on a button, unless you manually edit. For example, instead of a
button saying "Public", you could say "88.5 (Nati". This happens in the stored station list, in frequency scans, in the four short buttons on
the home screen.
This is minor, but the size of the frequency display REALLY could be bigger, in lieu of some of the other onscreen cruft.
They bothered to put a voice input module in the NAV but not in other modes (at least, that I've found).
Occasionally, changing a station will result in a screen pausing for up to five seconds and just saying "RDS SEARCH".
Suggested improvement: Don't do this. Whatever's causing it, find it and don't make it a blocking operation.
Playing audio over bluetooth from an iphone was previously very buggy (not sending track data consistently, not having controls work reliably) but this seems to be much better in IOS 6.
Connecting an iphone via the USB port basically forces the phone to think there is an accessory attached. The best way to describe this is to say "try it". It makes using things like Siri problematic at best, it tends to
mess with the ability to use third-party-apps (like Pandora) to play audio, although they work if you have the app running before you dock the connector. Since bluetooth is the superior protocol from the point of
not-disabling-phone-functions, my workaround for this is to get a "charge only" cable that supplies power, but not data to the dock connector. Putting a second "power only" USB port in the radio would also work well.
Navigation input is not possible while driving. I understand this is a "safety feature" but the Smart has two seats, and some of us
have passengers who can enter our destinations for us. Also, somehow, tapping in an address is dangerous, but having to tap at
three different regions of the screen and then scroll though a list of 25 presets is safe? Heck, the car even has a detection
mechanism for if someone's in the passenger seat (and handles seat belt alerts and the annoying "passenger airbag off" lamp), that could
be used for this.
The voice detection for navigation is broken for the same reasons as "phone" above. It works well if you're at a dead stop with no
air conditioning running. Otherwise, this potentially useful system is defeated by poor microphone placement, as well as a poor
The volume at which the Nav speaks over the radio is difficult to set. I'm not sure exactly what it means, but the setting seems to
keep the nav at the same volume, and adjust the radio volume up or down relative to that, on some kind of 1-7 scale. Other systems
I've seen have the simple metric of "turn the volume knob when the source is active" (so if you used the volume knob when the nav was
talking, it would lower the nav).
The NAV is really chatty, such that attempting in my region to listen to a podcast is nearly unlistenable with the level of interruption. We've found hacks for this like putting an address in, but not hitting "start
navigation" until we're most of the way there. When I say chatty, I mean at times I'm told every two minutes "keep left to stay on this highway, in point-six-miles, keep left to stay on this highway, keep left to stay on this
highway, follow the road until further directions"
Suggestion: In most other radios, turning the volume knob while a source is running (like while the NAV is speaking) affects that
source. Implement that.
Suggestion: When playing a selection from an ipod such as a podcast or song (over bluetooth or USB cable) it would be helpful to have
the option to pause the audio rather than talk over it.
No way to black out the screen without turning it off. Sure, you can drop into the settings and change the contrast manually (to a point), but there's no "display sleep". If you want any kind of entertainment, you are
relegated to a glaring 4x6 rectangle in your field of view, all the damned time. You can't do nav with voice-only, you MUST have a screen in your field of view. Note that this is not the same problem you have with a phone in
your pocket reading off instructions, or with a store-bought Garmin Nuvi, which you can place face down if you don't want to be distracted.
The fact that it's a touchscreen means that by design one has to take their eyes off the road to look at it. There are no "touch cues" to guide the finger to the right location, like you might find on some touchscreen ATM's.
However, this could be deflected by putting some of the most-used commands in key areas on the Bezel, and by adding some indentations.
No remote. Seriously, going to an all-touchscreen interface makes the car radio FAR more dangerous. Even a
HANDHELD (or steering-wheel-attached) remote would be useful. (Some thumb-buttons on the front of the paddle
shifter, maybe? Something that clips on to the steering wheel, or on to the "wings" of the steering wheel, so we have the option to use them or not?
Whenever I turn the radio on, I have to click "OK" to a prompt that looks like "Do not let the system distract you from the traffic
situation". I'm sure there's some lawyer that warranted this. However, the radio has video functions in that can only be used in
Park. I understand that there's a liability issue here, but if I am doing a road trip with a passenger who wants to be entertained
(think: small passengers) then please let ME decide that I think I can keep my eyes on the road if Spongebob is on. Modifying the
radio to defeat this feature is as simple as cutting and splicing one wire, but I shouldn't have to.
This is admittedly minor, but I often close my glovebox door on the cable when I have my phone plugged into the USB port to charge. Giving me a place to cleanly route the cable without pinching it would be nice.
In case it seems like this is all negative, I should mention that the system SOUNDS great. When I play my music loud, it doesn't distort. Yes, it's six speakers and a subwoofer for a 2-seater car (so a maximum of four ears).
But in a car where everything else is SO well designed, they could do more.
I've noted that there is a new software update for the radio that MAY fix a few things. Let's hope.
March 10th, 2013
|12:37 pm - The fight against spam|
I'm reasonably well-known for being a mailserver-tweaker. I like to tune both my personal mail config as well as that of my server. I actually try to report spam back to the places it's coming from. I participate on the mailing lists that make spamfilters
better. I try to be a responsible mailserver admin.
But one of the biggest companies out there has had some users with compromised accounts sending me spam: Yahoo.
Now, this isn't people forging yahoo.com domains -- these are legitimately coming from the Yahoo mailservers, with all the headers matching.
The mails typically consist of a single-link, like this one:
Now, in talking about this, my goal is to get the messages to stop not-getting-hit by the mailfilter. If the messages stop coming out of a trusted host like Yahoo, that's a plus too. (We can blocklist some nowhere-mailhost in guam, we can't blocklist Yahoo). I
don't particularly care about the sites getting taken down, they'll just crop up elsewhere. The goals are either that we can better flag the messages, or they stop coming.
On the better filtering front
So, what does one do about a message that's just a link? As it happens, there's actually a tool that lets you check the "spamminess" of a link inside a message body. That tool is called SURBL. It basically looks at the "first
level" of the domain, and compares it against known reports of badness.
One of the ways to report URL's to SURBL is via SpamCop, which I typically use anyway to report a lot of my spam that gets past my mail filters. Spamcop accepts mail from my mail filter's "reporting" engine, and then sends me to a web page where I have to look
over a message and confirm that "yup, that's spam allright". There's NO way to do this without my intervention, and still have the actual body of the message be parsed (and thus potentially fed to SURBL).
Spamcop does offer a "quick" service that would seem to report the mail servers involved, but which wouldn't act on the links inside the body.
I note that when SpamCop sends my reports along to Yahoo, they do so to a special "spamcop" address, not a general
"abuse@" one, which seems to be somewhat broken.
On the "Getting Yahoo to cut it out" front...
Well, while I've already reported the mail to Yahoo via spamcop, I'd like a way to more immediately report these to Yahoo (since spamcop has to wait for me to go hit that webpage), so they can cut off compromised accounts earlier.
RFC2142 seems to state that all people running network operations should support the generally-agreed upon standard abuse alias.
And yahoo does...kinda. When I forwarded them a message that was definitely spam, coming from their systems, I got back a message like this:
Date: Sun, 10 Mar 2013 11:56:13 -0700 (PDT)
Subject: Re: FW: link (fwd)
This is an automated response; please do not reply to this email as replies will not be answered.
To report spam, security, or abuse-related issues involving Yahoo!'s services, please go to http://abuse.yahoo.com.
Yahoo! Customer Care
Of course, http://abuse.yahoo.com redirects to a general section on help.yahoo.com with top "answers" none of which are "HOW DO I REPORT SPAM TO YOU". Searching around a bit
gets this KB article ID: SLN8671, which suggests that:
Every major email provider has a system for reporting spam or junk mail,
and information about spammers is shared across providers. As a result, if
a Gmail user marks a message from a Yahoo! user as spam in a Gmail
account, the report will be sent to us, and we can take appropriate action
when violations occur. The fight against spam is much bigger than just
Yahoo!, and we partner with other email providers including, but not
limited to Gmail, Hotmail, and AOL to identify spammers and prevent them
from sending mail to or from our accounts. We do not tolerate people that
abuse our services and will take action according to our Terms of Service.
If your email provider does not offer a spam reporting feature, please
submit your report using our contact form"
Of course, the union of "every major email provider" and "SpamAssassin users" is pretty much nil. Note as well that the contact form they link you to is incredibly, incredibly
generic, and asks "what VERSION of yahoomail you're using".
So there's the problem. What could Yahoo! do to make this better?
For starters, start accepting abuse mail. As it happens, back in the day Yahoo were one of the pioneers of a technology called DomainKeys and later DKIM. So
there's already a legitimate way for them to take any mail sent to them, and see if it's in fact legitimate. Easily. And for anyone ELSE who emails abuse@, maybe THEN give the same response.
Yahoo accounts are being compromised here. I was emailed at an address that was only used for communication with one group -- and the account that mailed me was privvy to that email address. I've seen Yahoo starting to ask people to add a mobile number to
their profile to confirm this, but the really quick easy answer here is: when you see an account do this, lock it!. Of course, this would require scanning all mail that a user sends, which may be a new and technically hard thing for Yahoo to do. If only they
had some other way to know accounts were doing this. Like my previous point.
I have several friends who work inside Yahoo, even inside their Mail Services group, so I'd love to hear from someone directly as to a better solution.
March 4th, 2013
|07:52 pm - Wordpress is Garbage|
I had to do a wordpress password reset for a user today. When I googled how to do this (from the raw database), I got these
Really cleanly, clearly, well-written.
...except they don't work.
Recently, Wordpress decided to implement their OWN password hashing algorithm. Which means that while it's less immune to rainbow
tables of plain MD5, it means ALL this documentation is shot and doesn't work anymore.
Yay for letting your community write your documentation for you.
February 2nd, 2013
|11:22 pm - Thoughts and Ruminations on the Brydge iPad keyboard.|
So I've been playing with an iPad accessory called The Brydge. This is an
amazingly engineered aluminum keyboard that essentially turns your iPad into a laptop. What this
really means is that I now have an apple Laptop with builtin cellular broadband and a touchscreen (a
product I've been clamoring for for years).
Like my previous entry about iCache's "Geode" product, this product has suffered from some of the
Kickstarter issues, and because of the nature in which they've chosen to make their updates available, I
can't be sure to know the whole story, but I'll share my own experiences.
I wasn't a kickstarter backer (I didn't have an iPad when this product was in its kickstarter phase).
While others have complained about shipping speeds, I got noticably faster shipping than normal
probably because Brydge is literally one town over from me, in nearby Menlo Park.
I bought the speakerless model because a) it was in stock at the time I needed it and b) Media
Playback isn't a major use-case for me, so I can't speak to any audio features.
If you go to their site and watch the video, you'll notice that their original concept had a
single-piece hinge, in the center of the unit. They've since switched over to two separate hinges, one
at either side, and rather than "clamping" onto your ipad, they rely on a friction grip, accomplished by
a couple of silicon inserts that fit into the aluminum hinges. Mine came with the inserts for the ipad 2
preinstalled, and swapping them out for the inserts for the 3/4 was annoying because of the residual
adhesive left behind when I pulled the 2-series inserts off.
I've read some reports of missing keys or keys not working (on the various twitter and kickstarter
forums). I have experienced nothing like this, the typing is solid as heck on this thing, and the action
is very similar to my other apple keybaords.
Brydge made some decisions in keyboard layout that I can't agree with. Noticably missing is an
"Escape" key. Some people complain about the size of the right-shift key (it's slightly narrower than
most other keys, definitely not a "bar" like on most full-sized keyboards, but as I've been a netbook
user for a while, this is nothing new to me, and I adapted quickly. (I also don't have a "standard"
typing style, I'm not a home-row typist, so perhaps this means I'm better off with slight differences
like this). Where you'd normally find an "escape" key, there's an ipad-specific "home screen" key. Near
as I can tell, there's also not a key combo (like FN-homekey) that will cause the Brydge to send "ESC".
Like most keyboards, this one has a hotkey (ctrl-k) that causes it to go into "pairing mode", and this
was just plain careless engineering.
They made the hotkey non-changeable, at least as far as I can tell.
They made it a standard keystroke, one that's used in unix programs, and one that other applications
might want to accept. Given, most apps won't be looking for it on the ipad, but one of the conceivable
uses of a full-sized keyboard is to use the ipad to run SSH, VNC, Remote Desktop, etc.
Considering this keyboard has an "FN" key, they could have utilized that for the pairing keystroke, but
They made the hotkey work all the time, not simply at poweron (or within say, ten seconds of
poweron). They made it instant, in that even a tap of it works, and doesn't require a hold-down.
They made the hotkey initiate "pairing mode" even if the keyboard is already paired and active.
Hilarity ensues when I mention that in my editor of choice, the alternate keystroke for "ctrl-k" is
"esc esc k". Neither of which I can type.
When I wrote to firstname.lastname@example.org, I found that Brydge wasn't answering email, had no customer
service phone number, hadn't updated twitter in several days, and other folks on the Kickstarter forums
and/or twitter were also complaining, some going so far as to assume that they had taken the money
and run. Since then, they've gotten back to me basically saying "we've passed your feedback on to our
engineers", but I'd still like an answer: is the firmware baked-in, or can it be upgraded (considering
that bluetooth supports file exchange and push, as well as the fact that the charger is also a USB port).
To wit, that answer comes down to "do I recompile software to use alternate keystrokes, or do I just sit
tight and wait for a fix?"
I'm finding that while this works as a general text-entry device, the navigation around the iPad
itself isn't so great. For example, I'm sure I'd love it if there was some kind of alt-tab like
keystroke, or the ability from the home screen to choose an app, without using Voiceover as a workaround,
so there is a weird combination of typing and pawing at the screen that goes on. For example, the
facebook app doesn't have a press-enter-to-send option. Skype occasionally does send-on-enter, other
times not. Facebook Messenger (normally an iphone-only app) simply seems to refuse to work with
Note that this isn't a crack against the Brydge, but against iOS. There are some useful blog posts like
or even better this one that go into how navigation
can be made to work, but Apple could have made this more than an afterthought.
- The battery life on this thing is phenominal. I used it (from the factory with no charge) for about
two weeks before I thought to even plug it in. And when I did, it went to fully-charged in about a half
The pairing keystroke is by far the single most frustrating item. The fix will come in one of three
We won't fix it, find a workaround.
There'll be a firmware fix, hold on.
It'll be fixed in Brydge 2.0, at which point I give this one to my girlfriend for her ipad (or chuck
it on ebay).
Brydge LLC needs to invest in a ticketing system for their support requests, refund requests, and the
like. This hard-and-loose startup stuff is damaging their reputation.
A hotfix for the escape key issue is also appreciated, but most SSH apps have an "escape" option
Otherwise, it's an incredibly solid product, an outright pleasure to use, and, much like my car (the
Smart ForTwo) and my iphone keyboard, it starts conversations. It impresses people, makes other people
want one. It sells itself, and the annoyances are mostly an edge-case for the sysadmin, which are
unlikely to affect people who want to write stories or send IMs.
January 26th, 2013
|09:14 pm - The sad stories of Kickstarter|
About a year ago, I was at a rock concert at the local arena called BFD (Sponsored by Live 105, our local Clear Channel affiliate). It was one of those 20-something-acts in one affairs with five stages, a bunch of indy bands on the outlying stages, and a main stage with a bunch of top acts.
The highlights of my experiences were:
* Seeing Garbage Live, and seeing the connection they have with their fans.
* Seeing Cake live, and seeing a similar connection.
* Realizing that the most technical, gimmicky, and prop-heavy show (Jane's Addiction) was just plain terrible.
However, while I was there I also came across some technologists who had put a project forth on Kickstarter and were doing their soft launch at the venue. This was, after all, in Google's backyard.
The project was the iCache Geode, and it's a brilliant piece of technology: An iPhone case that has a fingerprint reader on the front, a credit card slot on the back, and basically gives you the ability to clone any of your credit cards onto a single, dynamic "geocard": so you need only carry your phone (and ID) and you've got the full compliment of affinity cards, credit cards, and the like. Because I'm a geek and I know quite a bit about the internals of how the readers work, I had a bunch of questions about how such a thing actually works. And their engineers were on site and willing to talk. Their dyanmic "GeoCard" was more than just a smart card; it was actually a credit-card-sized computer that had an antenna where the magstripe would be, and basically "replayed" your credit card when it detected it was being read. It was a *brilliant* implementation, and I geeked out for a good hour picking their brains.
It was bloody cool. I wanted to buy one on the spot, but their ship times were long, and prioritized for their Kickstarter backers, so I held off.
Cut to now.
Their website is up and running, still, but their support desk license seems to have expired. The "checkout" button is strangely absent from the "buy" link on their page. No twitter updates from them, but a whole lot of mentions from Kickstarter backers who are somewhat upset.
For a company that was so strong on social media, and the crowdsourced kickstarter feel, I think a dryup like this is attributable to one of three things:
1) They took the money and went to aruba. I don't believe this happened.
2) They just outright ran out of funds, couldn't secure additional funding despite having an already-developed and strong product, and shuttered.
3) They got patent-trolled, got hit with a cease-and-desist order on prior art, pending a long and drawn-out settlement.
I don't know for sure, but I'm incredibly curious. As I don't have a real stake in this show, the curiosity is nothing more. In my next post, I'll be going into detail on a similar product, where I was in fact one of the lucky ones who got their product, and others seem to be out in the cold.
Note: this is my first post using the LJ client for IOS. I tend to prefer the one on my shell account, where I have Markdown to play with. I'll see how things look once the final entry posts.
Posted via LiveJournal app for iPad.
Current Location: US, California, Redwood City, San Mateo, Charter St, 962
December 17th, 2012
|12:36 am - You are not Adam Lanza's mother.|
There's a post currently very heavily circulated on the blogosphere, of someone literally
mommyjacking (look that term
up) the recent horrific disaster in Newtown, CT.
I won't bother linking it, because it's all over the place. Go search for "I am Adam Lanza's mother" if you like. I personally
believe that Americans have latched onto this example of bad parenting because that seems to be what we do. I call this the "Honey Boo
Our blogger literally starts her post off with a lie: a grab for attention that no matter what, her life is horrific. She describes
her life with her other children as being terrorized by this 13 year old child.
Let me speak, for a moment, from the perspective of that 13 year old child.
It's time to [re]tell my story.
Many of my closer friends know this about me: I grew up inside "the system". My parents' divorce was rough. My parents' and siblings'
coping mechanisms were rough. Dealing with other issues in my family was rough. A common tactic of my siblings was to provoke me, to
get my mother to wake up and parent. I never experimented with drugs. I never tried alcohol. I was physically agressive with
siblings, but usually in response to provocation rather than as a direct behavior of its own. I had other bouts of unexplainable and
bizarre and impulsive behavior. Home was not a stable place.
My mother put whatever spin she wanted on these things when speaking to professionals. Or her friends.
I stopped going to school, and just stayed at home, and got tutoring so I could finish the 8th grade. In 9th grade the same sorts of
symptoms surfaced. I got dropped from one class after another for excessive absences because I couldn't wake up to get to them.
I was "at risk". I was "in placement". I spent a good portion of age 13 on mind-altering medications designed to treat a bunch of
conditions which I may or may not have suffered, and which at one point left me so dazed I have a clear memory of not being able to
double-click a mouse on a mac.
I spent a good year of age 14 in a psych ward, and another several years immediately after in "a residential school for children with
learning and adjustment difficulties". Officially, my diagnosis was PTSD.
At the school I went to, I had a hundred other siblings, and as one counselor put it, "nobody's here on scholarship". Common issues of
the day was people who had suffered depression, or "behavior problems", or Tourettes syndrome, or minor forms of autism (this was before Asbergers became the go-to diagnosis it now is). Not things severe enough to warrant criminial action, this was more for the "overwhelming" children. We all had our issues, and we all dealt with them as best we could. I focused on
school better than I might have otherwise, was able to explore my love of technology, and even took some classes at the local community
college. I was "the guy" who would help counselors format their wedding invitations or their resumes. I had all the other at-risk
kids robbing me blind (it was cultural, I think), and I got into some trouble of my own, in various ways. I still wasn't always a pleasant person, but I survived in whatever ways I could.
On the weekends where most children went home, I would visit with my cousins or other family, or stayed with other friends from school,
generally avoiding my mother and father or seeing them only in passing. When I did return home for a visit or a vacation, I felt very
much like an outsider: I did not have a bedroom in the various houses where my mother had moved, and my stuff was in boxes or storage.
I lived with my mother after high school for a few years. It never felt like home, even years later.
And it got better. I came into my own. I built my own support system. I fell in love, and I met a circle of close friends. I
aligned myself more with them than with my family, and many of my friends (the gamers, the geeks, the nerds) could relate to some of
the same issues of not being understood, or being alienated at school, and of being "weird" for being smarter than the rest. My
friends weren't always the most well-rounded folks.
Today, I don't see a therapist. I don't hold myself to any specific diagnosis. I'm not on medications. I hold a job that I love,
work in the tech field, and believe I'm pretty good at what I do. I still feel socially awkward at times, but not as badly as other
people tell me they do. I still don't engage in a lot of the "typical" social behaviors that make us normal people. I don't get
sports or politics, and when I'm nervous, or sad, I retreat into myself a bit, and suffer from what looks like depression. The group
atmosphere has made me not like being alone very much, although I can spin into bouts of super-productivity and get past that too.
I've nurtured my gifts, and I'm grateful to have them.
I still respond somewhat angrily when hurt badly enough, or provoked hard enough. I have inside me, a hurting little kid who, when
hurt, wants to hurt the thing back that hurt him. I can be a bitter person, and tend to have a long memory of things that have upset
me. I'm trying the best I can to get past that, but it's hard sometimes.
It's been several years since I've seen my family. My sister has two children now. My brother's girlfriend is expecting around
christmas. While I'll drop a card in the mail to them, or mail them some candy for the holidays, they are not "my family". My family
is self-defined. My partner, Kat. My friend Kelli. My ex, Michelle. These are the people who I feel know me. These are the ones
who can read me, who know when something's wrong, and what to say (or sometimes, just know that there's nothing TO say).
As for the many children I grew up with? Some are successful, and some not. My roommate, and best friend, Ben, always a chronic
depression sufferer, took his life a few years ago. My love, Kat, took his hebrew name when she converted, as a way of rememberance
and honor for his memory.
I admit that hindsight may have tempered some of this. It may have been more stressful for me "in the moment"
So, "Adam Lanza's Mother" here's some thoughts on compassionate parenting for you:
By your own admission on your blog, you believe that as a result of your divorce with your husband, you had a breakdown, and you're
an adult with 30-something years of presumably being able to grow, communicate, adapt to changing situations. Please, put yourself in
the mind of your kid for just a while. It's clear to me that both you and your son need to learn empathy, and empathy is a tall order
when you're 13.
You talk about punishing your child by taking away his access to his electronics. Does that work, or is it just you attempting to
hit him where it hurts? Perhaps an attempt on your part to assert control over something in your life? Could I resolve this in a ten
minute conversation with your son, introducing him to these things we call books? Do you think your son's capable, perhaps, of
understanding this desire of yours to exert control, and simply defusing it by not reacting? What would you do then?
Childhood is ROUGH. Emotions flare at 13, and generally will continue to flare until we're 25 or so. Many of us will not truly
like ourselves, and like "a real grown up" until we're 30 or so. Even then, can you honestly say you haven't had some points at which
you've been ready to melt down because it just wasnt fair? Imagine yourself in, perhaps, the military or a courtroom or a
prison, where a person has ultimate authority over you, even if it doesn't seem to have any guise of fairness. Do you still think
you'd be able to hold it together?
You talk about bringing your son to the emergency room because he threatened suicide. Nobody can say whether or not it's a real
threat, and nobody can say you did the wrong thing by ignoring it, but 13 year olds are impulsive, and don't always have control over
what comes out of their mouths, and sometimes, they have a talent for saying the worst possible thing. Maybe he's learned that that's
a shitty card to play, and that it's a real crap way to get out of having to go to school, but just maybe, he wanted something from you
other than indifference.
Most importantly, the internet never forgets, and some day, your son will grow up, and will read what you've written while using
real name, and your son's image, where today you've compared an "otherwise bright kid" with someone who just murdered 20+ people in
cold blood. Maybe today with the media
you're getting, your son will go to school, and his friends will
call him "Adam". The adults at school either won't notice or won't care. If your son tells them, he's a snitch and more alienated.
You've done him no favors in writing what you wrote.
This will follow your son for the rest of his life, now. He will, someday, maybe tell his friends "yeah, I was kind of a bastard
when I was young, my mom was the one who wrote that blog article". Maybe they'll all laugh. Or maybe, he'll hate himself, secretly
for the rest of his life. Maybe, one day, if he were to take his own life, then you'd realize this.
Maybe he'll turn out allright, and maybe he won't, and you can't know what way it will go, and neither can I.
Maybe one day, you'll tell him you were sorry for saying such a horrific thing. And maybe, one day, he'll forgive you.
December 10th, 2012
|02:33 pm - On the Postal Service|
Okay, so I admit I haven't blogged in a while. Maybe I can do some of that
For varying reasons, I like being able to mail letters. I like being able to buy a sheet of stamps, and keep them in my wallet, and be
able to toss off a postcard to anyone when I'm traveling. I like being able to buy greeting cards at the store and toss them in any
mailbox. Stamps are cool. Not as a collector, but as a useful anonymous alternate currency that one should have around.
I believe I've written before about the US Postal Service's "13 Ounce Rule". The rule, in its simplest form is that if you want to mail
something greater than 13 ounces, you need to hand it to a clerk. One could assume this is for reasons involving not clogging the
mailboxes, or could even assume that it's to make sure such larger items were properly packed.
But it's not. It's all about security, and in terms of obscurely worded rules, it can get close to the Infield Fly rule in terms of its
You can see on the side the sticker describing this rule that's been clearly plastered on mailboxes and postal drops. The wording issue
comes where they use the line "that bears postage stamps". You see, information-based-indica such as would be done with a postage meter
doesn't imply stamps. Franking the mail with a "Postage Paid" rubber stamp of course doesn't imply stamps (even though it's a big
rubber stamp (i.e. the thing you press down onto the stamp pad is a Postage Stamp). And, according to this blog article from
stamps.com, using internet postage such as issued by stamps.com is also
excepted from the rule. Even though the site is called, well, stamps.com.
So here's the fun question: why the odd wording. What's clearly meant by this rule is: ANONYMOUS Stamps. Things that don't have a
barcode that can be used to track the purchaser. Why not print that on the label?
As useful as the anonymous, "Forever", postage stamps may seem, the postal service seems to really not want to sell them. They've
recently (within the past year) retired all their stamp vending machines (citing that they were hard to get parts for, citing that they
couldn't do a software update to support the new $5 and $10 bills).
One other place you could buy them, for a while, was at the USPS' Automated Postal Centers. Someone, either at a government contractor,
or at the Postal Service very cleverly figured out that it was possible, if you printed a sheet of stamps the same size as a dollar
bill, that you could use the same commodity equipment that is used in ATMs to vend sheets of stamps. You can see them (front and back)
here: . And because they were the same size as a dollar bill, you
could easily fit them in your wallet without folding them, and they seemed to adhere to their backing better than the over-the-counter
variants. The postal service made these not only for themselves but for other ATM's which had been modified with a function to dispense
stamps (as well as cash).
So now, we come to the fact that I went to an APC last night, to attempt to buy some stamps, and discovered that now, these stamps were
no longer available, but the APC happily offered to sell me from 1-5 "Forever First Class Stamps" that it printed on the fly.
What it printed was similar to these: . Embedded in that stamp are:
- A unique serial number
- The location it was printed
- Other information.
Short answer: since the APC's don't take cash, this is linked to all my payment info. With a warrant, of course. The government never
investigates or eavesdrops without a warrant. Except that they're the ones holding all the data.
Most people don't care. I do. I've found that you can go to USPS.com and buy the ATM-style stamps (although it's not straightforward,
you can't browse for them, you need to search for them, using the magic word "sheetlet", and I think I'm just going to continue buying
them this way. Given, now there's a $1.25 surcharge on them, but at least I'll never be without one.
Other Notes: ATM Vended Stamps
April 20th, 2012
|08:09 pm - Why isn't this a solved problem?|
I have three devices on my desk that connect to my ears, and my mouth in some way:
My desk phone. This currently has a plantronics headset hooked up to it, on a "qd" connector.
My iphone, which may be docked or undocked. My iphone has the ability to send music down the dock connector, but calls can only go
out the top connector, or over bluetooth. (This is the subject of a different rant).
My computer, which makes noises out a pair of speakers, as well as over headphones via the classic "the speakers go mute when you
plug in headphones" answer.
Every one of these devices has a microphone as well.
What I want: The ability to connect one pair of headphones, and have all the sound, from all devices route through it, and out to the
sources of my choosing, without plugging and unplugging more wires than the one headset that at the end of the day, I take home with
me, at the volumes of my choosing.
For my sound-in sources, I just want the ability to route them to the devices in question, with no real amplification other than
attenuation to the level those devices expect.
I basically want the windows "Volume Mixer" but for physical devices (which may not all be standard 1/4 inch connectors, or standard
Perhaps such a device would be mixer-like, with either physical sliders or virtual ones (i.e. touch a button to select an input, then
drag a virtual slider, on the device).
Perhaps it would have an API to set rules such as, say "if there's noise coming in the phone connector, mute the other sources", or
"drop computer volume (i.e. the level coming out the connector) to 20%" or even "set the computer's volume level to 20 percent (as in,
the volume control in the OS) or even "run an applescript to tell the iphone or itunes to stop if they're playing".
Perhaps the device would also appear as its own USB sound device, so with a standard pair of shitty headphones and a standard shitty
headset, I could get the benefits of sound-out-my-speakers, but skype-in-my-ear.
Perhaps such a device would also be bluetooth capable, so if I were wearing an a2dp headset, all sound could be sent to that.
Perhaps if bluetooth capable, it would also pair to the iphone and accept calls that way.
Perhaps such a device would even just come with a small dongle that's not a2dp, but something higher-quality, that you just plug your
(non-wireless) headphones into, and clip on your belt, and roam around.
I would love a device like this for my home. I would love a device like this for my car. I would love a device like this for my
...if we can raise a million dollars to Reboot Shadowrun, I'd give $100 toward development of a thing such as this.
April 15th, 2012
|07:25 pm - Apple still can't get some things right.|
So, you have a smart device like an iphone. When you connect it to your mac, it helpfully offers to sync all your photos over, then prompts you to delete them from
the phone (presumably, this assumes it's like any other dumb camera, we fill up the 4m flash, we dump it off, we're done). Separate to this, is the "photo stream"
which is a totally different, cloud-like stream of all photos you've taken on all devices that syncs to everything, over the last 30 days.
You can have photo albums on your phone, that you add items to (for example "covers of books I need to buy" for those of us who use the thing as a second brain).
But the photos will be synced over and deleted, with no indication of which library they were in. There's no preference that says "only sync photos in the main
camera roll (which is really "all photos -- so the preference would have to be "don't delete photos that are in some other album")
You can also create albums in iPhoto, which you can then tell itunes to sync -- but you CANNOT add new photos to those albums without connecting the phone to your
In iphoto, you can't seem to drag items into an album, nor is there the "click to tag" interface familiar to the iphone.
If you add a "photo stream" photo to an album, does it simply disappear from that album after 30 days? I don't know. It's totally non-obvious.
You also cannot simply manage the albums on your phone, FROM your mac.
This is really stupid.