Archive for April 3, 2019

Wednesday, April 3, 2019

Powerbeats Pro

Chris Welch (MacRumors):

A couple of weeks after Apple shipped its second-generation AirPods, the company’s Beats division is finally making its own entrance into the true wireless earbuds market. The new $249.95 Powerbeats Pro ship in May and are Beats’ most significant product in years. I get the feeling that, for many people, these are going to prove even more compelling than AirPods. They offer longer battery life, they seal fully in your ears without letting in outside noise, they include the same Apple H1 chip as the latest AirPods for hands-free “Hey Siri” voice commands, and yes, to my ears, the Powerbeats Pro sounded better during my brief introduction to them.

This sounds great. They’re also water-resistant and have physical volume controls. Downsides: the case is too large for a pocket, no Qi charging. I wonder whether the isolation is good enough for airplane use.


Update (2019-04-08): Rene Ritchie:

Play pause can happen when you put Powerbeats Pro in or take them out, just like AirPods, but where AirPods are all stealth and you can tap invisible quote-unquote buttons to do one thing of your choosing, Powerbeats Pro have legit physical hardware controls. There's volume up and down, right on the top, and the big B button on the outside, which you can even long-press to pass on a call.

Matt Birchler:

How much bigger could the PowerBeats charging case be than AirPods?

*checks it out*

Mother of god…

Xcode Custom Search Scopes

Paulo Andrade:

In my case, my source code comes down to Objective-C, C, and Swift files. So I just create a code that search for any file with the .m, .h, .c and .swift extensions.


But most of the time when searching for localized strings I’m just interested in the Base localization. I never touch the translated files inside Xcode, these are synced with my translation service. So by using this scope, whenever I’m searching for a localized string I just get back the base localization files.


Last but not least, when your working on a given feature it’s usual to have a set of modified files you’re working on. Sometimes you’ll want to search for something on only this set of related files.

Update (2019-10-31): Erica Sadun:

Now, interestingly enough, this list fails to offer “does not contain” but that’s fairly easy to work around. Since Xcode supports regex matching, you can easily replicate “does not contain” with an appropriate regex.

You can also do a regular contains match and put it inside a None of the following conditions are met group.

Accessors Have Message Obsession

Marcel Weiher (tweet):

Every single attribute of every single class gets its own accessor or accessor pair, again with the action (get/set) mushed together with the name of the attribute to work on. The solution is the same as for the directions in Nat’s example: there are only two actual messages, with reified identifiers.

These, of course, correspond to the GET and PUT HTTP verbs. Properties, now available in a number of mainstream languages, are supposed to address this issue, but they only really address to 2:1 problem (getter and setter for an attribute). The much bigger N:2 problem (method pair for every attribute) remains unaddressed, and particularly you also cannot pass around, store or perform calculations on the identifier.

UTF-8’s History and Virtues

Rob Pike:

What happened was this. We had used the original UTF from ISO 10646 to make Plan 9 support 16-bit characters, but we hated it. We were close to shipping the system when, late one afternoon, I received a call from some folks, I think at IBM - I remember them being in Austin - who were in an X/Open committee meeting. They wanted Ken and me to vet their FSS/UTF design. We understood why they were introducing a new design, and Ken and I suddenly realized there was an opportunity to use our experience to design a really good standard and get the X/Open guys to push it out. We suggested this and the deal was, if we could do it fast, OK. So we went to dinner, Ken figured out the bit-packing, and when we came back to the lab after dinner we called the X/Open guys and explained our scheme. We mailed them an outline of our spec, and they replied saying that it was better than theirs (I don’t believe I ever actually saw their proposal; I know I don’t remember it) and how fast could we implement it? I think this was a Wednesday night and we promised a complete running system by Monday, which I think was when their big vote was.

So that night Ken wrote packing and unpacking code and I started tearing into the C and graphics libraries. The next day all the code was done and we started converting the text files on the system itself. By Friday some time Plan 9 was running, and only running, what would be called UTF-8. We called X/Open and the rest, as they say, is slightly rewritten history.

Why didn’t we just use their FSS/UTF? As I remember, it was because in that first phone call I sang out a list of desiderata for any such encoding, and FSS/UTF was lacking at least one - the ability to synchronize a byte stream picked up mid-run, with less that one character being consumed before synchronization. Becuase that was lacking, we felt free - and were given freedom - to roll our own.

Ken Thompson:

Below are the guidelines that were used in defining the UCS transformation format:

1) Compatibility with historical file systems:

Historical file systems disallow the null byte and the ASCII slash character as a part of the file name.

2) Compatibility with existing programs:

The existing model for multibyte processing is that ASCII does not occur anywhere in a multibyte encoding. There should be no ASCII code values for any part of a transformation format representation of a character that was not in the ASCII character set in the UCS representation of the character.

3) Ease of conversion from/to UCS.

4) The first byte should indicate the number of bytes to follow in a multibyte sequence.

5) The transformation format should not be extravagant in terms of number of bytes used for encoding.

6) It should be possible to find the start of a character efficiently starting from an arbitrary location in a byte stream.

Rich Felker:

Not only do ASCII bytes never appear in multibyte UTF-8 chars; NO character is ever a substring of another character.

UTF-8 was really a work of brilliance, guaranteeing what’s pretty much a maximal set of important desirable properties like this.

Of course the desirable properties necessitate one property that’s hard to like: not all byte sequences can be legal/valid.

See also: The History of Unix (via Hacker News).


Update (2019-04-04): See also: Hacker News.