MacBook, defective by design banner

Put the knife down and take a green herb, dude.


One feller's views on the state of everyday computer science & its application (and now, OTHER STUFF) who isn't rich enough to shell out for

Using 89% of the same design the blog had in 2001.

Back-up your data and, when you bike, always wear white.

MarkUpDown is the best Markdown editor for professionals on Windows 10.

It includes two-pane live preview, in-app uploads to imgur for image hosting, and MultiMarkdown table support.

Features you won't find anywhere else include...

You've wasted more than $15 of your time looking for a great Markdown editor.

Stop looking. MarkUpDown is the app you're looking for.

Learn more or head over to the 'Store now!

Saturday, October 13, 2018

I recently pulled out an old DVD I’d purchased years ago and popped it into a reasonably old DVD player. It’s interesting how DVDs date themselves with their supported formats. In my case, it opened by asking if I wanted “normal” or “widescreen”, normal, of course, being the now dated 4:3 ratio common for square tube TVs.

If I selected “normal”, things went fairly well. The height filled my widescreen TV’s screen, but I had, of course, black bars or boxes to the left and right so that the ratio was preserved.

If I selected “widescreen”, however, I had black boxes on all sides of the picture. That is, it was a “widescreen” projected into the faux 4:3 screen created in the middle of my widescreen TV for the “normal” ratio. A picture surrounded by black boxes is the worst of all worlds.

Solution? I had to tell my DVD player AND my TV we’re widescreen.

Well, there was an option in my DVD player (well hidden a menus rungs deep in an unhelpfully named "custom settings" menu) for output for a 16:9 ratio widescreen TV. Sounds good, right?


No. Not really. What that does without any other change is to output a squooshed 4:3 picture on my TV. What the heck?

Turns out my TV is expecting a 4:3 signal from its A/V ports. When it sees the 16:9 signal, it’s the TV that does the squooshing. You have to have tell the TV that you’re expecting a 16:9 signal from the DVD player, and set that up for your A/V port.

Does this mean if I plug an Atari 2600 into that port now that I’ve got my TV expecting 16:9 on the A/V that the Atari’s ratio would be off without resetting the property in my TV’s settings? I think so, though I haven’t tried.

Why is the picture quality so stinky?

But now the picture quality stinks, like a video taken with a point and shoot camera at the start of the digital era. Parts of faces often looked like they trailed their head’s position, like somebody was doing a strange rubber pencil trick with their eyes and mouths.

What’s going on? Can I fix this?

The quick answer is no, no I can’t. My TV is upconverting the signal, which is a fancy way of saying “taking a low resolution source and putting it onto a high resolution screen”. There aren't enough pixel-equivalents in the older DVD player’s signal to make a good picture, and the TV is using some algorithm to fill things in.

But my TV’s upconverting algorithm stinks.

Note that I said analog

Note that I said that this DVD player is using the A/V ports on my TV.

A/V ports

That’s that three-wire, analog signal. It stinks.

If I had a good DVD player, it would do the upconverting from the DVD, and keep the signal digital from source to screen. That would require, you got it, a digital connection to the TV, like an HDMI cord.

The DVD player I’m using has no upconverter, and the TV is going to have a hard time with a digital-to-analog-to-digital signal that’s already a few generations old. Plus it doesn’t really care about upconverting. It’s an inexpensive TV set. I also get the feeling that it does better upconverting a 4:3 signal, which makes sense. There’s a decent correlation between widescreen content and digitally encoded content.

Make sense?

A real solution would be...

So the real solution is a better DVD player, like my Playstation 3, with its own upconverter, connected to my TV with a digital cable. Unfortunately, I don’t have my PS3 handy. Eventually, I got used to the weird faces.

(To be clear, I was watching Lebowski, but the weird faces reminded me of the effects in Thumb Wars. ;^D)

Useful links related to DVD widescreen:

Labels: ,

posted by ruffin at 10/13/2018 10:50:00 AM
Thursday, September 13, 2018

Going to try and keep this short…

I’ve seen some stuff, including this from Niley Patel, saying that the XR is a strange, mismash of a phone.

It’s not. We can see its precedents in the 5c, new MacBook Pro, and the iPhone SE.

  • The SE showed Apple that it could put top of the line internals in a compromised phone and have it sell like mad.
    • Recall that the SE had the 6S flagship’s processor and phone
    • But combined with the two-year old screen and selfie camera of the 5S
  • The 5c showed Apple that if you take an old phone and give it colors, you can give an inferior phone a sales bump.
  • The two flavors of the 2016 MacBook Pro shows us Apple is starting to give design teams overlapping, but flexible constraints.
    • That is, we’ve got two completely different computers (same link), one cheap, slow, with two ports, and one top of the line, expensive, with four, in exactly the same case.
    • For the XR, we flip the script, and have two completely different shells with the same internals.
    • That’s essentially what we had with the SE. Point here is that this “shared design constraint” model is increasingly prevalent at Apple

I think we add one more point to this list…

  • Apple was surprised by SE sales, and wishes they’d charged more.

What needs to happen to charge more for a cheaper version of the same internals? Well, first, you can’t pitch it as a spiritual remake of a four year-old design. You have to pitch it as a new phone.

So we have…

  • Top of the line internals but in a cheaper phone (SE)
  • An excuse to charge more by using an updated design (MBP)
  • A purely aesthetic appeal for dollars with frivolous colors (5c)

It’s not a perfect parallel, but I think you see how Apple’s past clearly births this new .

EDIT: Though Stratechery says I’m wrong about the 5c:

Still, I for one thought it would sell very well; all indications are that Apple agreed, but it quickly became apparent that customers overwhelmingly preferred the iPhone 5S. Apple struggled to keep the latter in stock, having produced far too many 5Cs, and the model was quietly discontinued two years later….

The 5C’s failure, such that it was, showed that the iPhone had three distinct markets:

  • Customers who wanted the best possible phone. They bought the 5S.
  • Customers who wanted the prestige of owning the highest-status phone on the market. Heavily concentrated in China, they bought the gold 5S.
  • Customers who aspire to owning a top-of-the-line iPhone, but couldn’t afford one. They bought the 4S instead of the 5C.

I guess I’m wrongly biased from seeing tons of kids enjoy the 5c, sometimes even over a 5 of 5S. I’d guess the 5c failed largely because of the craptastic 8 gig low-end. That’s simply not a useable phone.

But the argument that people want what I’d call “aspirational luxury” from their iPhone is an important point.

As I said about the SE, above – “Well, first, you can’t pitch it as a spiritual remake of a four year-old design.” – is exactly what we're saying here.

If colors didn’t sell, the XR wouldn’t use them. Though maybe I should’ve substituted iMac for 5c?!

More interesting in the most recent Stratechery update is the XR explanation, however:

There is, of course, the question of cannibalism: if the XR is so great, why spend $250 more on an XS, or $350 more for the giant XS Max?

This is where the iPhone X lesson matters. Last year’s iPhone 8 was a great phone too, with the same A11 processor as the iPhone X, a high quality LCD screen like the iPhone XR, and a premium aluminum-and-glass case (and 3D Touch!). It also had Touch ID and a more familiar interface, both arguably advantages in their own right, and the Plus size that so many people preferred.

It didn’t matter: [For] Apple’s best customers... price is a secondary concern.

Labels: , , , ,

posted by ruffin at 9/13/2018 08:56:00 AM
Sunday, August 26, 2018

The original iPhone SE was a great release, and the first iPhone I’ve shown up to buy on “opening day”.

What made it great? It was the latest and greatest iPhone available, packed into a 4" screen. The 6S had been released just six months previously, and now you had the exact same phone with a perfect hand-sized screen (recall the neat images showing how un/reachable the 6 Plus was, or this cold take at Forbes wondering if the iPhone 5 would be too tall).

But that was it. Your only sacrifices were no 3D Touch and that your selfie cam was the equivalent of an iPhone 5S. You had the 6S’ main camera & processor, and the old iPhone 5 body meant plenty of space for the battery powering the much less hungry smaller screen.

The SE was a great phone. The best buy in iPhone yet.

The SE 2 might not be so good.

There’s one recent rumor of the SE making a comeback this September. I’m not sure I buy it.

Gui Rambo of 9to5Mac has uncovered a reference to an unreleased ‘iPhone xx’ in Apple’s development app. [XCode] While we don’t expect Apple to release an iPhone 20 or iPhone double X this year, the ‘iPhone xx’ identifier may be a placeholder for a forthcoming model with a different marketing name.


Other details shared by Rambo upon inspection include the processor associated with ‘iPhone xx’ being the A10. That’s the same chip used in the iPhone 7 and iPhone 7 Plus. Apple is expected to unveil three new iPhones next month — a 5.8-inch OLED, 6.1-inch LCD, and 6.5-inch OLED — but including an A10 chip and not an A12 even in the mid-sized budget-priced model is not expected.

I’ve also read that it’s supposed to have the same resolution as a 7, with some folks speculating that perhaps it’s an “iPhone 7c” equivalent – a more inexpensively made 7 to round out the bottom of the iPhone line.

My guess is somebody was adding a new phone to an internal build of XCode and, as all new code seems to be born, copy and pasted existing code, here the iPhone 7 entry, to start. Then this build was accidentally released before they'd updated the listing to whatever phone they meant to be adding.

But let’s pretend it’s true, and that there’s a 4-inch ”iPhone 7" on the way in September.

It’s sad, isn’t it? Instead of the A12 six months later, it’s the A10 a year and a half late.

Labels: , ,

posted by ruffin at 8/26/2018 07:50:00 AM
Thursday, August 16, 2018

From a reply I posted to Michael Tsai’s excellent blog, this time talking about pushback to Apple’s encouragement of SUBSCRIPTIONS FOR EVERYONE!!!!1!:

I have no problems paying a bit more for quality apps, but either it’s pay upfront, or it’s highly unlikely I’ll subscribe to an app. Sorry, devs.

I don't believe this or the two comments on this story for a second. You're telling me nobody would pay $1-$2 a year for an app that costs $5? If you don't use it often, it's cheaper to have a full year to try it out [before putting it down].

Many apps are charging too much for their subscriptions. It's the "Cup of Starbucks Pricing Metaphor Fallacy" reversed. "Netflix charges $10 a month. so my subscription price should be in the ballpark. $4 a month is a steal for a subscription!"

No. $4 a month is insane for your app. Price accordingly. Microsubscriptions are the proverbial future.

And for expensive apps, well, MS Office and Adobe Photoshop have already shown the market doesn't mind subscriptions. And businesses have been paying for yearly subscriptions for years.

Labels: , , ,

posted by ruffin at 8/16/2018 08:38:00 AM
Tuesday, August 07, 2018

You can thank me for the MacBook Pro update, since I bought an Air on June 14th. It was too difficult to keep waiting, and most of my “if only” excuses were essentially removed during the Air’s 2017 update. The entry level got a slightly faster processor and 8 gigs of RAM on the bottom end, just enough to get by. And look at all the ways it’s better than a MacBook Pro…

  • USB-A ports.
  • SDXC card for cameras
  • Magsafe
  • DisplayPort
  • A reliable keyboard

The last sticking point for me was the price. At $1000, it’s too steep. But Best Buy had a sale June 14th for the bottom of the line Air for $700 plus tax. You can’t beat that. That’s competitive.

I’d been holding out for a new MacBook for literally years now, having gotten a Lenovo gaming laptop to use as my programming rig back in 2016 when I thought Apple had created a MacBook that wasn’t really for Pros with this new generation of MacBooks. Phil Schiller said as much, when he claimed the new 13“ Pro could replace the Air, and Walt Mossberg agreed, saying that ”if these new MacBooks simply didn’t carry the Pro label, we’d all have a lot less to complain about". Wow. This is a consumer laptop.

You might recall my comparison of bottom of the line MacBook processors. Even after last month’s update, nothing’s changed there, at the low end. The MacBook Pro “Escape” 13“ still has a crappy i5–7360U, with a top-end only about 80% higher than the Air. The 12” MacBook is only 6% faster. None of these are speed demons. You’ve got to pay $1799 to get to the new processors in the latest refresh.

entry level MacBook speeds

Neither step up from the Air are worth the price. The calculus said that I’m much better off spending $770 after tax on an Air, and putting the difference between the Air and Pro, even when the Escape was on sale at B&H for $1200 (which was tempting), towards a new desktop or a future MacBook. In a sense, I can get an Air now, and bank over $400 towards my next MacBook.

Marco agrees

Heard a lot of my reasoning coming out of Marco Arment’s mouth on the most recent episode of The Talk Show. He basically said that laptops are optimized to run [predominantly] at a nice, low clock speed that sips power. You can get this low-power mode from an Air or the most powerful 15" Pro. Your compilations will suffer, but as I said when I talked about my $100 Lenovo S100, small computers with great battery life are a lot more useful than you’d think. Work on headless tasks in console apps (rather, make your tasks into many headless programming tasks), and you’ll be surprised how much you can get done.

Laptops – all laptops – are made for low power tasks. If you want as much power as you can carry, sure, max something out. But unless you’re okay with a “tall” gamer laptop (Marco actually talks about this) with the requisite fans and sorry battery life (hello, Lenovo Y700!), you’re not going to be able to cool your proc, no matter who you are.

You really want power? Stay at home and get a desktop.

At some point, I’d settle for a quality mini upgrade, which sounds like it could happen soon, but I’m hopeful the new Mac Pro will have an entry level that’s worth a look.

But you get the point. If I want portable macOS, the answer was and, I think, remains the Air on sale. It’s cheap, convenient, and reliable. Even after the update, it’s not worth paying $1000 more for a 8250U i5 and a Retina screen. Instead, I’ll pocket that cash and hope for something that makes sense later.

To date, the only thing I really dislike is that HDMI out is limited to 1920x1080. You have to use DisplayPort if you want higher resolution. This has been a Mac hardware limitation for a while that I’ve never really understood.

Labels: , , , , , , , , ,

posted by ruffin at 8/07/2018 06:46:00 PM
Sunday, July 08, 2018

I'm kind of tired hearing that Apple is all about detail. Is their hardware impressive? Traditionally, yes -- even now, yes, minus one exceptionally depressive fail with their laptop keyboards & their inability to adapt with headless pro machines.

But here's a good example of where design simply isn't done in iOS, specifically the Contacts app.

  1. Enter a new contact.
  2. Enter a Company name, rather than a First and Last
  3. Click + for adding a new phone number

Expected behavior: Since we filled in Company name, I'd expect "work' to be the default phone type.

Actual behavior: "home" is the default phone type.

That's a huge fail. We're in iOS 11, folks. How could someone not have added this by now? How many Contacts entries around the world have just a company name and just a "home" phone?

This reminds me of another Apple design fail I ran into (har har… keep reading to get the pun) recently... I went running one morning, but didn't have my Apple watch, so I carried my phone.

Later, I looked at my proverbial rings, and though exercise is closed at 32, my red ring is stuck at 147.

apple watch with 32 mins of exercise, but only 147 in

I realize the "Move Ring" keys off of stuff like heartbeats, which my phone won't capture, but believe me, once you're over, let's conservatively say, 6 miles per hour, it's clear you're moving, okay?

posted by ruffin at 7/08/2018 10:07:00 AM
Saturday, July 07, 2018

I was watching an excellent video describing the iterations of the Angular compiler, and rabbit holed a little with hidden classes.

The most enjoyable resource I found on this (and javascript optimization in general) was from

[Falling back to the runtime to bullheadedly access properties from objects out of any context from our code] is an absolutely valid way to implement property lookup, however it has one significant problem: if we pit our property lookup implementation against those used in modern JS VMs we will discover that it is far too slow.

Our interpreter is amnesiac: every time it does a property lookup it has to execute a generic property lookup algorithm, it does not learn anything from the previous attempts and has to pay full price again and again. That’s why performance oriented VMs implement property lookup in a different way.

What if each property access in our program was capable of learning from objects that it saw before and apply this knowledge to similar objects? Potentially that would allow us to save a lot of time by avoiding costly generic lookup algorithm and instead use a quicker one that only applies to objects of certain shape.

This optimization technique is known as Inline Caching and I have written about it before.

[emph and bracketed paraphrase mine]

It's worth a full read. And once you've got how hidden classes, polymorphism, and megamorphism works, you could probably fall into exactly the same compiler optimization steps Angular's Tobias Bosch does in his video, above.

Here's a quick bit on poly/mega/morphism from the same source, as I once again save you from googling, one resource at a time.

If we continue calling f with objects of different shapes its degree of polymorphism will continue to grow until it reaches a predefined threshold - maximum possible capacity for the inline cache (e.g. 4 for property loads in V8) - at that point [the] cache will transition to a megamorphic state.
In V8 megamorphic ICs can still continue to cache things but instead of doing it locally they will put what they want to cache into a global hashtable. This hashtable has a fixed size and entries are simply overwritten on collisions.

It's duck typing, all the way down, until you have too many ducks, at which point we default to a home-rolled bird almanac.

Labels: , , ,

posted by ruffin at 7/07/2018 09:58:00 AM

Support freedom
All posts can be accessed here:

Just the last year o' posts:

URLs I want to remember:
* Atari 2600 programming on your Mac
* joel on software (tip pt)
* Professional links: resume, github, paltry StackOverflow * Regular Expression Introduction (copy)
* The hex editor whose name I forget
* JSONLint to pretty-ify JSON
* Using CommonDialog in VB 6 * Free zip utils
* git repo mapped drive setup * Regex Tester
* Read the bits about the zone * Find column in sql server db by name
* Giant ASCII Textifier in Stick Figures (in Ivrit) * Quick intro to Javascript
* Don't [over-]sweat "micro-optimization" * Parsing str's in VB6
* .ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture); (src) * Break on a Lenovo T430: Fn+Alt+B
email if ya gotta, RSS if ya wanna RSS, (?_?), ¢, & ? if you're keypadless

Powered by Blogger Curmudgeon Gamer badge
The postings on this site are [usually] my own and do not necessarily reflect the views of any employer, past or present, or other entity.