A blog about iPhones, iPads, Swift, being a working coder, gadgets and tech. The official blog of Generally Helpful Software.
Monday, August 23, 2010
The Three Numbers in Computer Programming
I ran into this problem when revamping my iPhone app, Signal GH, to monitor antenna signal strength from an HDHomerun. I had mistakenly written it to handle two tuners in a single device. The code was littered to references to the "yellow" tuner and the "cyan" tuner, as that was the colors of their graphs. Well, Silicon Dust came out with a version with a single tuner, which sort of shot me in the foot. And then I bought that device which gave me three tuners on my network. I had a painful time backing out my bad design choice in favor of a more arbitrary number (I did limit it to keeping track of 8 tuners, but that number is kept in only one place and could be changed in a few minutes.)
The new version will be out shortly, fighting off one last bug.
Thursday, July 08, 2010
Maybe I Have Too Many Apple Products
Taken with my wife's iPhone 3G S, posted with my unibody MacBook.
Wednesday, July 07, 2010
iPhone 4 improves on audio output isolation
Tuesday, June 01, 2010
On Fixing the Personal Computer's Original Sin
Oh, you might say that it is freedom itself to be responsible for filing away today's expense report as a spreadsheet inside of a folder with 500 not quite identical others, or knowing where each of 10 versions of Margaritaville is located, and which is your favorite. To the contrary, it is just another example of the user being trapped by a lack of imagination on the software architect's part into doing something the computer should be much better at doing.
Or you might say that the individual file is a natural unit of information, like the Boolean bit; and that is not true, the computer file was invented by a man (unless it was invented by Grace Hopper, which I doubt); and computers could have evolved with some other mechanism; perhaps mimicking the human brain which I don't believe uses files.
If I were a bench chemist, and every day I drew some new variant of a steroid, where would I want my drawings, in individual proprietary documents, or in a database giving my work structure and context? Pretty obviously in a database. It creeps up on us, the slow flood of documents; the more organized among us can keep it together through ever deepening trees of folders and files, but eventually individual files in folders becomes unmanageable. I've been using a computer for 25 years, I look forward to at least another 40 years of use. There is no way I will be able to productively keep track of all my creations over that time in a tree structure. As it is, anything older than 5 years might as well be non-existent.
So the operating system vendors introduce search, and we get by like our computers are mini-Googles; as long as we can remember some key phrase we can find it; except when words fail us, or the document can't be parsed by the indexer.
And the cloud beckons. Anyone who thinks the cloud is just a well sorted FTP site, doesn't understand. The iPad is right now at one of those points where Apple can see but cannot provide, or even enunciate the ultimate solution, but does not want users to get into the habit of using individual files for their document needs; so we get the hacky solutions that will be cast aside the moment anything remotely elegant is provided. And I don't know what this solution is either. People have been trying to improve upon the file based system for years; the Newton didn't have files, BeOS had some sort of database file system. OpenDoc tried to get all documents to live together in harmony, etc. And none of these were a market success. Files will not die easily; and you will still have to export to a file for a good long time.
Baring a solution, the point of this entry was just to ask people to keep an open mind about files or the lack of them. Files are not the thing you want; you want to create, edit and view media and documents, and how they are stored in secondary to how quickly you get to them, and how safely they are stored.
Monday, May 24, 2010
Flash's History of Neglect on the Mac - An Example
We have identified the bottleneck in the Flash Player for OSX. Like in the other plugins the culprit is text rendering, in this case rendering using device text. This benchmark spends >50% in a single OSX function: ATSUGetUnjustifiedBounds. You can verify this yourself using Shark. I am working on a change which will cache the results returned by that API to where this call should completely disappear from the performance profile.
If everything turns out well I hope to see that change in future release. Some new numbers on my Mac Pro (note that these represent numbers which can change at any time if we decide to do things differently):
Before the change: ~8.5fps
After the change: ~28fps in Safari (~26fps in Firefox)
This speaks volumes about how little platform specific TLC Adobe historically put into the Mac plugin. A performance bottleneck as glaringly obvious as this should never have been seen by a user, much less bedeviled users and Flash developers for years before someone bothered to run Shark, or now days the CPU Sampler Instrument. Adobe must never have tried to optimize on the Mac at all; if I found a common use case where I was spending half my time measuring the same block of text over and over again, I'd joyously jump on the opportunity to make my user's lives easier because I could fix that in an hour. Apparently, Adobe couldn't be bothered to do the right thing until years later, and countless hours were lost by Flash developers trying to coax the Plugin into looking just as smooth on the Mac as it did on Windows.
And now that Apple is the big dog in the mobile application space, it's payback time for all the years of neglect and shoddiness. And with the eyes of the world upon it, Adobe is having to do the actual heavy lifting of getting decent performance and battery life out of a handful of Android phones just to prove Apple wrong. At least something good might come of this.
In the meantime, I've installed Click to Flash on my Mac and gotten iPad like silky smooth performance out of Safari. it is amazing what all those little ads cluttering up the dozens of open pages I tend to accumulate were doing to my poor MacBook.
Friday, May 07, 2010
Will the Next 13" MacBook Pro have an Optical Drive?
Wednesday, March 24, 2010
Bye Bye Pentium 4 Server
The guts of my original HTPC will now be moving into the house's new Linux/MythTV server: add a large hard drive, a cheap DVD drive and a larger case. This is going to save me a lot of electricity. A Pentium 4 is a pretty poor choice for a lightweight server, and is now draining over $10 of power a month; the new Atom based server should draw less than a third as much energy and maybe less, as I'm hoping the more modern design will have better idle characteristics. I'll save quite a bit of money in the long run in mothballing my old Dell. And the new Atom/Ion motherboard should be fine for serving the occasional file and recording TV shows.
2.0 GHz Pentium 4 + hard drive + external hard drive = 110 W (or so) at idle
Atom N330 + laptop drive + sleeping hard drive = 25 W idle
If I pay a dollar for ever 10W per month then I'm saving around $8 a month or $96 a year, so the added $180 I'm spending will be paid for in 2 years (or in 4 years if I had had to buy a motherboard and RAM). And I'll have a quiet server that isn't annoying me constantly with its fan.
[Update: It's so pleasantly quiet in my laundry room today. Just have to migrate the svn server on the little NAS to the new server and it's going to be so peaceful in the basement.]
Tuesday, March 09, 2010
Holding onto Legacy PCI Cards is Limiting
- Dual core Intel Atom N300 processor
- Ion chipset
- Small SSD boot drive
- Large (1.5 or 2.0TB) Green Drive
- 2 GB RAM
- mini-ITX form factor
The fly in this ointment is that I have a ATSC tuner on a PCI card in the current box (a very reliable PCHDTV 3000), and getting a mini-ITX Ion with a PCI slot is limiting. As far as I can tell, it is limited to one motherboard: the ASUS AT3N7A-I. And anytime I see customer reviews that include such tidbits as "noisy fan" or "uses more energy than other Ion motherboards" I start wishing for other options.
And the other option is to go with another network tuner. I already have one HDHomerun which along with my PCI tuner gives me the capacity to record three simultaneous shows on the rare days when that's a good thing. Replacing the PCI version with another HDHomerun would open up a larger world of Ion or Atom motherboards with more modern card slots. I even see that Silicon Dust has recently released an economy single tuner model which can be had from newegg for $81.97 shipped. And this will keep the new server cooler and quieter, as well as having another tuner Windows Media Center on my wife's computer can access. Win, win, win.
Tuesday, February 23, 2010
Could Apple Transition to Using iPhone Apps as Safari Plugins?
I refer you to the Web Plugin Programming Topics Guide
Beginning in Mac OS X v10.6, on 64-bit-capable computers, Netscape-style plug-ins execute in an out-of-process fashion. This means that each Netscape-style plug-in gets its own process separate from the application process. This design applies to all Netscape-style plug-ins. It does not apply to WebKit plug-ins, nor at present to WebKit-based applications when running in 32-bit mode.)
It goes on to enumerate a large number of new restrictions on how plugins are supposed to operate in their new out of process home. At this point, it becomes pretty hard to justify using a NPAPI style plugin for any but the simplest plugin for Safari; it is just too strangling. So the mind turns to WebKit plugins which are basically Cocoa NSViews with a few limitations and added message handlers. As the quote above says they are not (at present) limited in such a way as Netscape plugins; in this way Apple is nudging people to use WebKit plugins if for no other reason that they allow you to do things that the NPAPI plugin do not.
And here we come to the idea for this posting, it seems as though Apple is interested in locking down and rationalizing Safari plugins. It is also reasonable that at sometime in the future, they will allow plugins for Safari on the iPad. It is also almost a given that those plugins will not be NPAPI style plugins, but will instead be UIView or UIViewController derivatives. And at that point, the question becomes, wouldn't the UIView style plugin with its simpler and more modern object design make a cleaner foundation for plugins for Safari on the Mac? Apple already has an iPhone simulator on the Mac. Of course, there would have to be some extension allowing mouse hovering events.
- Advantages
- Code sharing between Mac and iPad
- Plugins are closer in scope to iPhone Apps then full blown Mac apps.
- At this point most Objective-C programmers are iPhone developers so developer pool would be larger
- Expand iPhone apps to the Mac
- iPhone Apps are used to being sandboxed
Anyway, just a thought.
Thursday, February 18, 2010
Inexpensive Ion HTPC
- Came in a compact, mini-ITX form.
- Has the 64-bit capable dual core Atom 330N processor
- Has multiple output ports including VGA, HDMI for video and SPDIF coax and TOSLink optical for audio, amongst others.
- Gigabit Ethernet
- External power supply to keep the heat out of the case.
The most important feature was quiet, with the related property of energy efficiency. There are many cheap PCs out there, but few can play 1080i MPEG2 videos while draining 31 Watts.
I put in 2GB of RAM which allowed me to configure the BIOS to set aside half a gig for video memory. I removed the included wireless card, as I have Gigabit ethernet in my TV cabinet, and there's no reason to waste whatever minimal energy would be used by the card. Threw in a 60 GB laptop drive I had from a few MacBooks ago, and put it in a small case. The hardest part of installing MythBuntu 9.1 64-bit, was scrounging up an external optical drive. So, all in all a very easy thing to put together.
It works fairly well. I've put my children's DVD collection on a network share and use MythVideo to watch that and recorded TV shows. Since this was my first real standalone MythTV frontend, I had to rejigger my video setup such that both the backend and frontend used both the same relative paths to videos and movie posters (both Linux boxes have paths of the form /mnt/MyNAS/MyVideos and /mnt/MyNAS/MyPosters). Once this was all setup, it's extremely convenient having a kid's movie a few touches away. I had read complaints about the fan needing to be run at a lower speed, but I really can't hear it from the couch.
- Energy usage measured via Kill-A-Watt
- Idle Running MythTV Frontend: 25W
- Playing DVD Image: 26W
- Playing 720p MPEG2 (recording of 24 on Fox): 28W
- Playing 1080i MPEG2 (Big Bang Theory on CBS): 31W
My old LCD TV is impossible to get the VGA just right (no surprise that) so I have a two inch black bar on the right of the display, but I'll be moving to use the DVI port as soon as Monoprice gets me an HDMI switch.
It's interesting as a Mac guy seeing this little DIY assembly. On the one hand, it's pretty inexpensive and I wouldn't want to waste a Mac on single purpose computing. On the other hand, it's pretty darn cheap. Here's a photo comparing a older generation Mac Mini with my system.
The Mini is definitely a superior computer in terms of build quality. The M350 case is nice enough, but it is still ill fitting sheet metal, and the ports still wiggle and flex when you try to push a connector in. In comparison, the Mini is just rock solid, and smaller while still having a faster processor and an optical drive. And it's a darn sight more attractive. On the other hand, the Zotac has a ton of extra ports, including a variety of internal SATA and USB connectors. Different needs.
Cost:
- Motherboard: $185
- RAM: $45
- Case (with Shipping): $50
- Hard Drive: Free
- --------------
- Total: $280
Monday, February 01, 2010
A Cell Phone Game for Children
Requirements
2 Cell phones, one of which with a speaker phone mode.Instructions
1) Call the phone with the speaker phone mode, answer and put it in speaker mode.2)Have someone hide the phone in another room.
3)Let the child try and find it by yelling into his phone.
Tuesday, December 22, 2009
Get the PSD Files From Your Graphic Artists
An Example:
Let's say I had contracted with a third party to design my beautiful company logo.
Great.
Now two years later I need a version without the fake glassy front. If I have the original, this takes the time it takes for me to launch PhotoShop Elements, uncheck a box next to the "glassy button" layer, and export the result to web.
If I only have the PNG file, I'm basically out of luck if I can't get ahold of the artist and will have to have someone else redraw the logo from scratch.
And not only should the PSD files be in your possession, they should be in your source control system, along with all the other critical changeable items you've spent so much time and money creating.
I've been in a situation where I have literally 100 toolbar icons in PNG form and I have no easy way to make a bigger size because the outsource artist has consistently neglected to deliver the original files. Frustrating.
Also, once you have the PSD files, have a look and see if they are well organized with ample use of layers, and layer naming. Maybe, there is no way to turn off the glass button by hitting the hide layer checkbox, maybe there is only one layer, and the artist is incompetent. Maybe that's why you had to ask.
Tuesday, December 15, 2009
MythBuntu 9.10 Quickly Dying Due to missing PCHDTV firmware
This was after I pushed the button to upgrade to 9.10. And if there is anything I less want to do is spend more time tweaking Linux.
Anyway, I took a few minutes this morning to look through /var/log/messages and found it was jam packed with:
...
Dec 14 06:53:40 MythTV kernel: [25073.152929] or51132: No firmware uploaded(timeout or file not found?)
Dec 14 06:53:40 MythTV kernel: [25073.653032] or51132: Waiting for firmware upload(dvb-fe-or51132-vsb.fw)...
Dec 14 06:53:40 MythTV kernel: [25073.653042] cx8800 0000:02:0c.0: firmware: requesting dvb-fe-or51132-vsb.fw
Dec 14 06:53:41 MythTV kernel: [25073.902202] or51132: No firmware uploaded(timeout or file not found?)
Dec 14 06:53:41 MythTV firmware.sh[23812]: Cannot find firmware file 'dvb-fe-or51132-vsb.fw'
Dec 14 06:53:41 MythTV kernel: [25074.401098] or51132: Waiting for firmware upload(dvb-fe-or51132-vsb.fw)...
Dec 14 06:53:41 MythTV kernel: [25074.401109] cx8800 0000:02:0c.0: firmware: requesting dvb-fe-or51132-vsb.fw
Dec 14 06:53:41 MythTV firmware.sh[23823]: Cannot find firmware file 'dvb-fe-or51132-vsb.fw'
Dec 14 06:53:41 MythTV kernel: [25074.780264] or51132: No firmware uploaded(timeout or file not found?)
Dec 14 06:53:42 MythTV kernel: [25075.281031] or51132: Waiting for firmware upload(dvb-fe-or51132-vsb.fw)...
Dec 14 06:53:42 MythTV kernel: [25075.281042] cx8800 0000:02:0c.0: firmware: requesting dvb-fe-or51132-vsb.fw
Dec 14 06:53:42 MythTV firmware.sh[23839]: Cannot find firmware file 'dvb-fe-or51132-vsb.fw'
Dec 14 06:53:42 MythTV kernel: [25075.503654] or51132: No firmware uploaded(timeout or file not found?)
Dec 14 06:53:43 MythTV kernel: [25076.001099] or51132: Waiting for firmware upload(dvb-fe-or51132-vsb.fw)...
Dec 14 06:53:43 MythTV kernel: [25076.001110] cx8800 0000:02:0c.0: firmware: requesting dvb-fe-or51132-vsb.fw
Dec 14 06:53:43 MythTV kernel: [25076.266695] or51132: No firmware uploaded(timeout or file not found?)
Dec 14 06:53:43 MythTV firmware.sh[23850]: Cannot find firmware file 'dvb-fe-or51132-vsb.fw'
...
Googling "Cannot find firmware file" dvb gave me this forum post which very helpfully gave the proper command line solution:
sudo apt-get install linux-firmware-nonfreeNow my MythTV can go 20 minutes without grinding to a halt.
Now, as to whether a missing firmware to a tuner card should bring a linux distribution to a halt is another thing entirely.
Saturday, December 05, 2009
MythBuntu upgrade and mythcommflag killing my MythTV
How Not to Ask For A Feature
Title: "piece of junk"
Body:"This thing is worthless until they add QAM cable scanning capabilities."
First of all, the "they" is me, Glenn Howes—father of two, husband, software engineer, PhD Chemist, and occasional iPhone developer. I have made a grand total of $392.05 on this app, yet still found the time to release 2 updates to it when it made absolutely no monetary sense to do so. My work is not junk, it is of the highest engineering quality I could make it. I've spent hours tracking down bugs, ran static analysis of the code, put the executable through performance instruments for memory allocations and performance, and optimized the launch time. I did this when I had other paying projects waiting my time because I like this little app and I want it to be as perfect as I can make it.
It just lacks a feature you desire, a feature which is neither promised nor implied by the product description in iTunes. If you had e-mailed me requesting this feature, I would have seriously considered including it even though an app, who's primary function is monitoring antenna signal quality is not going to be very interesting looking at digital cable traffic. Now, I'm not inclined to add this feature, and you have only your bad social skills to blame.
Wednesday, November 18, 2009
My Unibody MacBook had Been Grinding to a Halt
Finally, under the working theory something was wrong with my 500 GB Western Digital Scorpio Blue drive, I ordered and installed a new 640 GB Western Digital Scorpio Blue drive. And this worked. I don't know if it was the hardware or the completely clean install or the act of reinserting the drive, but it worked and my Mac is back to its normal reliable self. And I've got more disk space than I know what to do with. I learned my lesson a few years back about waiting for a hard drive to fail; I no longer give them a second chance at catastrophe.
This might be the last mechanical hard drive I ever buy for a laptop. SSD capacities are overtaking mechanical, and I would certainly pay $300 for a 512 GB SSD of reasonable read and write throughput. Maybe this time next year.
Monday, November 16, 2009
When the Books are Free - Amazon Vine
A few months ago, I noticed an invitation to join Amazon Vine program on my Amazon front page. I clicked on it, realized it wasn't a scam and signed up. And now I get 4 free things a month; from a limited catalog of newly released products. Mostly books are available, but I've also received software and iPod accessories. All I have to do is review three fourths of what I get and I stay in good standing.
It is awesome getting free stuff. The Phillips iPod dock/CD Player/Radio in the kitchen is sweet. But that is the exception, only the quickest get gadgets, and most of the time I have a choice between books and nothing. And getting a free book is hardly a bargain: It takes hundreds of dollars of my time to read, and I don't have the universe of books to pick from, I have whatever is in the newsletter, so I have to be picky and choose only titles which are of use—a book on business law for my wife's business—or of interest—a book on how to draw dinosaurs and aliens.
One nice thing is the motivation to read; to keep up my 75% review rate. It isn't often I read 3 books in 2 months. I just wish they offered more books about software engineering and fewer about adolescent vampires (or whatever constitutes juvenile fiction).
Amazon gets value from me. Under the theory I'll get offered items similar to things I buy or review, I bought a laptop hard drive from Amazon rather than Newegg; and I've been making sure to review anything that moves to push up my ranking. Just passed into the top 3000 woo hoo..
As to whether I'm unbiased about products I'm given to hold on to (I can't resell them), I think I'm OK. I certainly have a happy feeling about being given something nice, but on the other hand, a mediocre book is such a pain to trudge through, and a junky alarm clock just takes up space. So far, I've given out a variety of star ratings, pretty much in line with things I've purchased with my own dimes; maybe a bit lower as at least when I buy something on my own I have some expectation it will be of high quality.
Anyway, when you see the "Vine Voice" badge on a review on Amazon, you'll know it's somebody like me; just an ordinary consumer who likes to write reviews and lucked into getting free stuff.
Tuesday, November 10, 2009
When Apple Doesn't Follow It's Patterns: UIScrollView
// override points. default is to call touch methods on the content subview. if -touchesShouldCancelInContentView: returns NO in order to start dragging after we have started tracking the content view, we don't drag and continue to feed events to the content subview. if -touchesShouldBegin:withEvent:inContentView: returns NO, we don't send events even if we don't drag
So basically, if you want to modify the behavior of how a UIScrollView drags, you need to create a subclass. Fine, that's basic polymorphism, but it isn't the way most UI behaviors are changed in Cocoa on the iPhone. Typically, behaviors are changed by the use of delegate objects, and there already is a UIScrollViewDelegate interface defined. It's not clear to me why touchesShouldBegin:withEvent:inContentView and touchesShouldCancelInContentView were not just added to the delegate.
Why is this important? Well first of all, one of the joys of Cocoa programming on the iPhone is that the object model tends to be more consistent then desktop Cocoa. Everything fits together, and you know where to look for the hook which allows you to customize your app's behavior.
Secondly, I think Apple was right to choose the delegate model over object subclassing. It's less fragile, in that you are less likely to rely on the original object's behavior being constant. And some Cocoa objects are basically impossible to subclass; for instance UIButton cannot be subclassed because it isn't a "real" object. And from a coding point of view, the delegate solves both the problem of changing behavior and intercommunicating between objects.
So, when you see a comment like the above, it sticks out like a sore thumb in what is normally a disciplined and consistent API.
Monday, November 02, 2009
New Version of Signal GH
Monday, October 05, 2009
iPhone as Baby's First Computer
My son, Wil, wanted to paint on my unibody Macbook this evening. He turned four in September and this was the first time he'd wanted to drive Dad's computer. In the past, "we've" painted by him telling me to "draw an alien fighting a dinosaur." So, I setup Pixelmator in full screen mode, started him up with a blue brush, and let him go to town while I watched The Amazing Race next to him on the couch. And he basically figured it out, with occasional hints from me. He figured out how to switch tools without input from me, and was playing with radial gradients with an arbitrary selection mask in no time. I did notice he was drawing everything with his tiny thumb, which allowed him to put his weight behind mouse clicks on the MacBook's zero button trackpad; I think he would master a traditional trackpad, but the MacBook's trackpad allowed him to better transfer skills he learned from his first computer: my iPod Touch.
He's been using the iPhone interface since he was still 2, and I can still remember my astonishment that he'd mastered the drag to unlock maneuver without any help from me. One of many things, he figured out himself. Thankfully, he has yet to pick up typing my password so he has not been buying apps, although he will make daily trips to the app store looking for new games and will ask me to read the user reviews. He watches YouTube videos and my own collection of videos, plays games, paints, and looks through photos, and has been doing so this entire time. His 2 year old sister does the same, except she has no interest yet in all but the simplest children's games.
In the few times they've ventured to touch my MacBook, they expect that something will happen when they touch the screen. Direct manipulation is so obvious and engrained in how they deal with computers. I've worried if I could even teach them to use a mouse, which seems so foreign and backwards as an input device. But after today's session, I'm not worried. Wil can figure things out; the MacBook trackpad is close enough to what he knows. And he enjoyed learning. I could see how happy he was to learn that pressing the command and z keys would undo drawings.