MacBook, defective by design banner

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


descrip:
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 www.myfreakinfirst-andlast-name.com



FOR ENTERTAINMENT PURPOSES ONLY!!! Back-up your data and always wear white.
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
* that hardware vendor review site I forget about is here * Javascript 1.5 ref
* 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
 
 
Saturday, April 30, 2016

With my DVR+, Apple TV, and Amazon Fire Stick taking up all of my TV's HDMI ports, I thought I'd take off the increasingly annoying Monoprice 3 mini HDMI switch and put the PS3 into the component video in. Voila! No more jumping up to swap from Apple TV to PS3.

One problem: Blu-Rays are windowboxed. That is, there are black bars on every side of the picture, and the picture is squished so that everyone is tall and skinny. Major fail.

If we go back in our time machines about five years, we can find out why:

"The new CECH-3000 series PS3 requires HDMI only for BD movie output in HD, in compliance with AACS standards," Sony told Ars Technica. "PS3 continues to support component output for HD gaming and streaming content." The restriction is just on high-definition video from Blu-Ray discs.
...
The strange part, then, is that the PS3 ever supported HD Blu-ray playback through component. Digital Foundry speculates that the rule didn't kick in officially until the AACS Final Adopter Agreement in December 2010, and thus only affects PS3s produced after then. That would mean that Sony (and pretty much every other electronics company) skirted its own rule for as long as possible. [emph mine]

Nice. Thank heavens I can't record the Blu-Ray with... well, with what I don't know... in full HD glory. For that, I'd need the net and a fast connection. So difficult to find those two things.

I hate DRM. I mean, I get it. Protect what you've got, and put a lock on to keep the honest folk honest. But the implementation is so shoddy. I mean, even Sony doesn't want to mind their own content protection rules. I wouldn't've even minded too much if the BluRay output was downsampled when it came out over component. I just want the blamed thing to display properly on my television.

Also managed to corrupt the hard drive somehow while I was doing all this testing. It's been a great couple of days.

Labels: , , ,


posted by ruffin at 4/30/2016 04:18:00 PM
0 comments
 
Friday, April 29, 2016

I've done these enough now that I'd would've thought I'd have accidentally memorized it already, but thanks to the ease with which you can learn the exact syntax of any concept stuck if your head with a half-second of googling, I hadn't yet.

Anyhow, SQL Server object checks are pretty easy. All you need to know is...

IF OBJECT_ID('name') IS NOT NULL

Now you can leave out the object type and use the above for anything in your db:

IF OBJECT_ID('myFreakinView') IS NOT NULL
    DROP VIEW myFreakinView;
GO

Or you can use object types to ensure you're really getting the object type that you're checking for, in this case, a view:

IF OBJECT_ID('myFreakinView', 'V') IS NOT NULL
    DROP VIEW myFreakinView;
GO

Seems I've listed these before...

SQ = Service queue
TA = Assembly (CLR) DML trigger
TF = SQL table-valued-function
TR = SQL DML trigger
TT = Table type
U = Table (user-defined)
UQ = UNIQUE constraint
V = View
X = Extended stored procedure

In other news, my Y700 is supposed to show up today. Ordered yesterday, free shipping option, on the truck this morning. Not too shabby. Guess that's what ordering the preconfigured loadout does for you. Of course I don't think I'll be home when it arrives. ARGH. Oh well.

Labels: ,


posted by ruffin at 4/29/2016 11:36:00 AM
0 comments
 
Thursday, April 28, 2016

I think I have a winner for the April 2016 MyFreakinName Programmer Laptop. I was looking for something that was relatively small -- the 14" class, so to speak -- and that had a reasonably powerful processor, as you may have guessed from my Programmer Laptop Shootout: Processors post.

Also keep in mind that I've never spent a "lot"^ on a laptop. My ThinkPad T430 was about $1000-$1100, and I purchased it because it was sooooo much less expensive than a MacBook with similar specs. For the last three years, that's been a great choice.

Which is just to set up the decision criteria...

  • Emphasis on maximizing a quad-core, fast processor.
  • Ability to upgrade to more than 8 gigs of RAM.
  • 1920x1080 or greater resolution
  • Reasonably inexpensive -- all equal, cheaper > featureful

I'm afraid my desktop's i7-4790K (11206/2529) has made me greedy. Wow, it's fast.


Top Candidates

Old laptop (T430) CpuBenchmark: 3998 multi, 1626 single

  1. Lenovo ThinkPad T460p: $1100 as spec'd (includes 3rd party RAM)
    • CpuBenchmark: 6443 multi, 1932* single
    • A 14" ThinkPad modified to hold a quad-core processor
  2. MacBook Pro 13" $1100
    • CpuBenchmark: 4375 multi, 1716 single
    • Either a current gen at $1100 refurb, or
    • ... wait for new one in a month or two
    • But $1100 is only 8 gigs RAM; $1269 (!!) for 16.
    • Dual core only.
  3. Alienware 15 R2 $1200
    • CpuBenchmark: 5734 multi, 1643 single
    • This category really means "any gaming laptop"
    • Eyed the Razer Stealth & Asus & MSI options

The ThinkPad was my first choice for a long time (see below for when that changed). The MacBook Pro was too expensive and didn't have two of my criteria -- more than 8 gigs of RAM & a quad-core processor. You could fix the first, but then you're at $1270+. The Alienware was simply too expensive. The Razer Stealth was affordable ($1k), but had the same issues as the MacBook Pro: anemic processor and soldered RAM. Other manufacturers generally had their most attractive hardware in a 15 or 17" case. 15" would be okay, but then you're paying at least $100 over the ThinkPad and losing the thumbprint sensor and TrackPoint. I'd rather save the money and keep the ThinkPad keyboard.

The Asus ROG GL552 (review here) is pretty tempting at about the same price. For $1000, it has USB-C, an i7 6700HQ, 16 gigs of RAM, GeForce GTX 960M, and even a num pad, maintenance hatch, & an optical drive. Reviews on Newegg aren't great, however. Doesn't seem to have the best build quality, but great specs for the price.

So I'm back to the ThinkPad. Yet the ThinkPad is hampered a little in that, first, the i7 model still isn't for sale in the US and threatens to be several hundred bucks more expensive if you convert the Australian version's processor markup to $US. Second, the T460p throttles its processor's power from 45W to 35W to, as far as most reviewers and forum posters can figure, help with cooling. NotebookCheck claims that doesn't affect performance, but I don't see how it couldn't at times. Otherwise, the processor would be 35W.

The bottom line is that the quad-core Skylake doesn't really like being pushed into a T460 chassis.

It's also disappointing overall how little single thread performance seems to have increased since 2013. These are less than 10% gains in the CPU benchmark I'm tracking. Can that be accurate? Seems insane. If I wasn't getting a better screen too, I'd consider not upgrading.

If money wasn't an object, I think a 15" MacBook Pro wins easily. Runs OS X and Windows, and has great processor options. The build quality is excellent, including the trackpad and keyboard, and I bet it gets a USB-C port in the next revision. I just can't justify $2000 on a laptop, I don't think. If it was going to last me six years, maybe, but that's a lot of coin. Still, I think it's the smart choice, even moreso after they're refreshed in a month or two, for, let's say, a company looking to treat their developers The Right Way.


Enter the Darkhorse: $700 IdeaPad Y700-14ISK

But then, clicking around the Lenovo site and NotebookCheck.net, I bumped into Lenovo's 14" "gaming" laptop, the IdeaPad Y700. Great processor, the same that's in the second tier, $1250 Alienware 15 R2, and it only runs $700.

I read through a few reviews of the Y700, but it was hard to find many for the 14" version. The most informative I could find was this one from laptopmag.com. There's also a pretty reasonable YouTube review here:

Best quote? "For fake carbon fiber, I think they did a good job."

There does appear to be a consensus on the laptop's cons.

  • The Radeon R9 M375 GPU is underpowered for contemporary games
  • The laptop is purposefully showy (fake vents, red accents, etc)
  • The keyboard is okay, but a little flimsy and not snappy
  • The trackpad stinks and it's difficult to make the hard clicks work
  • Only one video-out option, a single HDMI port
  • Smallish, unremovable battery, maybe 3 hours time.

Yet it has...

  • An i7-6700HQ
    • CpuBenchmark: 8030 multi, 1791 single
  • User upgradeable RAM and drives
    • Includes an m.2 slot for dual drives
    • +16 gigs from Crucial is $65
    • Max 32 gigs. Sorry, MacBook Pro.
  • A 1920x1080 screen
  • Even comes with eight gigs of RAM instead of the usual entry-level 4

Again, that processor is the same as the $1250 tier of the Alienware 15 R2!

Seems like a pretty good fit. I don't care about the graphics card; this is for work, and there even the M375 is much more than enough. Replace the hard drive and/or add an m.2 SSD, and you're off and running for around $800.

The low battery life worries me a little, I'm worried build quality will be significantly under the ThinkPad, I wish it had an option for a better screen (the ThinkPad I spec'd includes $70 to step up to 2560x1440 /swoon), I'm going to need to find my USB-to-HDMI adapter for another screen, and, even though I'm usually pretty comfortable with unconventional looks, I don't know that I'd bring it to an interview. Might keep the T430 around just for that... ;^)

Also wondering how bad the keyboard will be, as that's been one of the best parts of the ThinkPad. I actually got the ThinkPad USB keyboard in preparation for getting a MacBook so I could still have the TrackPoint handy, at least in the office. I wonder if the ThinkPad USB keyboard will fit over the Y700 keyboard with a right-angle micro type b cord, or if I'll end up trying the Bluetooth keyboard. This guy might be crazy, but I'm not convinced he's not crazy like a fox.

A final con: No Windows 10 Pro option. Right now, that'd run $140-$200 to "correct". Not cool. The only thing I really need pro for is Hyper-V, however, and I'm doing a lot less of that recently.

You know, I'm having my usual immediate buyer's remorse wondering if I shouldn't've shelled out another $200 for the USB-C on the Asus GL552, but I think I'm going to appreciate the Y700-14's portability. I mean, that's what you're really buying a laptop for anyhow, right?

Anyhow, that's too cheap to pass up. I'm biting. Far and away the cheapest phat Skylake quad-core I can find in a portable laptop. Man, I hope that keyboard doesn't bite me back.


^ A "lot" of money for a laptop is pretty subjective. I bagged a Lenovo IdeaPad Y100 (?) for $150 a few weeks back, and though it doesn't have enough hard drive space for Visual Studio and the Win10 SDK, it's plenty to do web programming or console/Powershell work. You could actually make a living with it, and I keep it in the car for "emergencies" when I'm caught laptopless. But $1200 seems to be my comfortable max for a "personal" business laptop.

* Again, as I said on my "Processor Shootout", that single-thread score for the i5-6440HQ doesn't jibe with expectations or its scores at Geekbench. I think it's wrong and/or not based on enough samples.

Labels: , , , , , ,


posted by ruffin at 4/28/2016 10:06:00 AM
0 comments
 
Wednesday, April 27, 2016

A few quick additions to yesterday's Thoughts on Dependency Injection...

From the second:

This EF behaviour can result in subtle bugs as it is possible to be in a situation where queries may unexpectedly return stale or incorrect data. This wouldn't be possible with NHibernate's default behaviour. On the other side, it dramatically simplifies the issue of database transaction lifetime management.

That would have been good to know a few months ago. ;^)

That post's real take-home is this, however:

While it can be fine to re-use a DbContext across multiple business transactions, its lifetime should still be kept short.
...
Re-using the same DbContext instance for more than one business transaction can also lead to disastrous bugs where a service method accidently commits the changes from a previously failed business transaction.

I believe it also rightly argues against overusing lazy-loading. I tend to invoke queries fairly quickly, often forcing EF queries to call the database, with a ToList() call. As anyone who has read this blog for long would know, I'm painfully aware of pulling too much, and I don't put database logic in the business layer as a rule -- use the database engine; that's what it's there to do. Doing complicated logic in your "business" layer outside of your rdbms is kind of like writing your own JIT compiler for string manipulation in C. Insane. Use your tools; that's why you license them.

Know that an overuse of lazy-loading can get you into insanely inefficient queries. That is, just because you're "lazy loading" doesn't mean that you're using your rbdms correctly. You should have what amounts to a query builder inside of your business logic. Understand your use cases, write a view or sproc, and let your rdbms optimize. Don't get lazy with the justification that you're going to lazy load and that it's the same as writing SQL [in that it's work pushed to the dbms]. It's not the same.


Also keep in mind that Dependency Injection isn't nearly as fancy as it sounds. I think DI is usually couched in a very specific context that also involves an injection system, making the actual injection a somewhat obfuscated process, as I complained earlier. Getting familiar with all of that system's dependencies can be overwhelming at first glance, but, trust me, the concept itself is simple.

AndN .et MVC already has DI installed! Though I can never approve of sleeveless shirts for men in tutorial videos, this one is otherwise quite useful showing how quickly and easily DI can be in a .Net MVC project.

And even then, keep in mind how simple Inversion of Control really is. You probably do it a lot already to keep your code defensive and maintainable. You don't want your objects to depend on anything extraneous, so you'll often find yourself sending along something major to help your business objects get their work done. For instance, when you send along event handlers to widgets, that's a sort of IoC already! Told you you were familiar with it.

Labels: , , ,


posted by ruffin at 4/27/2016 08:00:00 AM
0 comments
 
Tuesday, April 26, 2016

Edit (27 Apr 16): I should've probably led by saying that I am a big fan of Inversion of Control. That also means I'm a decent fan of DI. But I'm also a fan of not over-engineering, and somehow the "culture" around DI is one where over-engineering seems to be fairly commonplace (see the Joel on Software post I talk about, below -- he's not talking about DI specifically, but I think you can inject it (hahahahaha) into his generic critique in this case).

I love separation of concerns. What I don't love is hipster programming. If you're never going to reuse something, and it's significant to insane work to abstract it, don't. If abstraction was a bit more, knock yourself out, but, for instance, QueryOver in NHibernate when you're so deeply invested in SQL Server there's no great business case to leave, stop it. If your devs know SQL, stop it already.

A better solution to a potential change in stack is to become familiar with microservices, and use them appropriately. The only place I can think of where this sort of gross abstraction might make some sense is when your stack is just getting off of the ground. But then it's no big deal to rip it all up if your old, crufty C# guy leaves and is replaced by Node Grrrl.


Was doing some quick reading before talking about Dependency Injection tomorrow, and ran into a link from an SO question to a Joel on Software post I don't think I've run across before, Don't Let Architecture Astronauts Scare You:

These are the people I call Architecture Astronauts. It's very hard to get them to write code or design programs, because they won't stop thinking about Architecture. They're astronauts because they are above the oxygen level, I don't know how they're breathing. They tend to work for really big companies that can afford to have lots of unproductive people with really advanced degrees that don't contribute to the bottom line.

A recent example illustrates this. Your typical architecture astronaut will take a fact like "Napster is a peer-to-peer service for downloading music" and ignore everything but the architecture, thinking it's interesting because it's peer to peer, completely missing the point that it's interesting because you can type the name of a song and listen to it right away.

All they'll talk about is peer-to-peer this, that, and the other thing. Suddenly you have peer-to-peer conferences, peer-to-peer venture capital funds, and even peer-to-peer backlash with the imbecile business journalists dripping with glee as they copy each other's stories: "Peer To Peer: Dead!"

The Architecture Astronauts will say things like: "Can you imagine a program like Napster where you can download anything, not just songs?" Then they'll build applications like Groove that they think are more general than Napster, but which seem to have neglected that wee little feature that lets you type the name of a song and then listen to it -- the feature we wanted in the first place. Talk about missing the point. If Napster wasn't peer-to-peer but it did let you type the name of a song and then listen to it, it would have been just as popular. [emphasis mine, as usual -mfn]

Man, that's good.


Honestly, Wikipedia currently does an excellent job explaining the pros and cons of Dependency Injection. Here are a few from each...

[Some] Advantages [taken from Wikipedia's entry on DI]

  • Dependency injection allows a client to remove all knowledge of a concrete implementation that it needs to use. This helps isolate the client from the impact of design changes and defects. It promotes reusability, testability and maintainability.[20]
  • Dependency injection allows concurrent or independent development. Two developers can independently develop classes that use each other, while only needing to know the interface the classes will communicate through. Plugins are often developed by third party shops that never even talk to the developers who created the product that uses the plugins. [that's give or take what the last point said -mfn]
  • Dependency Injection decreases coupling between a class and its dependency.[21][22]

[Some] Disadvantages [taken from Wikipedia's entry on DI]

  • Dependency injection creates clients that demand configuration details be supplied by construction code. This can be onerous when obvious defaults are available.
  • Dependency injection can make code difficult to trace (read) because it separates behavior from construction. This means developers must refer to more files to follow how a system performs.
  • Dependency injection typically requires more upfront development effort since one can not summon into being something right when and where it is needed but must ask that it be injected and then ensure that it has been injected.
  • Dependency injection can cause an explosion of types, especially in languages that have explicit interface types, like Java and C# [23]
  • Dependency injection forces complexity to move out of classes and into the linkages between classes which might not always be desirable or easily managed.[24]
  • Ironically, dependency injection can encourage dependence on a dependency injection framework.[24][25][26]

Okay, I admit it. I kept all of the disadvantages up there.

I have worked with a system that overused DI before, and we had it so far upstream of our entities and controllers that you could work for months without ever coming into contact with the construction of a repository. That's not necessarily good. The "explosion of types" was definitely a problem, which means that over-abstraction was as well. "DI! DI! We can run the whole world with DI! DI venture capital funds!" /sigh

I like interfaces. And my C# rdbms finally talked its way to using DI. I'm (slowly; I haven't had much time to work with it right now, as I don't have a product for which it's an absolute requirement) factoring it into a portable library, and that means I have to inject a class in that writes to files. Not a big deal, and certainly The Right Way to do it.

What I dislike is when the DI is so abstracted that you're essentially cargo culting your way through repo instantiation, where you can create a repo from scratch and the inheritance hides that some base class is doing all the DI for you. That is, it's way too easy to end up in that last "con" from above: "Ironically, dependency injection can encourage dependence on a dependency injection framework."


Wikipedia has an interesting link to some Uncle Bob Consulting jive. I haven't closely read it all, but some of this rings true on first skim...

But Uncle Bob, you’ve violated DIP by creating concrete instances!
...
I don’t want a bunch of secret modules with bind calls scattered all around my code. I don’t want to have to hunt for the particular bind call for the Zapple interface when I’m looking at some module. I want to know where all the instances are created.

But Uncle Bob, You’d know where they are because this is a Guice application.

I don’t want to write a Guice application. Guice is a framework, and I don’t want framework code smeared all through my application. I want to keep frameworks nicely decoupled and at arms-length from the main body of my code. I don’t want to have @Inject attributes everywhere and bind calls hidden under rocks.
...
But Uncle Bob, That means I have to use new or factories, or pass globals around.

You think the injector is not a global? You think BillingService.class is not a global? There will always be globals to deal with. You can’t write systems without them. You just need to manage them nicely.
...
I like this because now all the Guice is in one well understood place. I don’t have Guice all over my application. Rather, I’ve got factories that contain the Guice. Guicey factories that keep the Guice from being smeared all through my application. What’s more, if I wanted to replace Guice with some other DI framework, I know exactly what classes would need to change, and how to change them. So I’ve kept Guice uncoupled from my application.
...
But Uncle Bob, don’t you think Dependency Injection is a good thing?

Of course I do. Dependency Injection is just a special case of Dependency Inversion. I think Dependency Inversion is so important that I want to invert the dependencies on Guice! I don’t want lots of concrete Guice dependencies scattered through my code. [emph mine again -mfn]

That sounds about right, though it also seems to create a situation where you've got at least one of the "secret module" situations he was trying to avoid.

The takehome message when considering Dependency Injection? Never outsmart yourself. Or, as Zakas put it a while back, "don't be too clever".

Labels: , ,


posted by ruffin at 4/26/2016 01:33:00 PM
0 comments

AppleInsider has a post on Apple & recruiting, and it doesn't sound good for tech workers.

In the past, Apple has relied in part on recruiters to bring in the best and brightest Silicon Valley talent, but that might soon change, according to a report from VentureBeat. Citing an unnamed source, the publication said Apple's "recruiting engine" has slowed down drastically over the past few weeks.

If this was good news, it wouldn't get leaked the day of the earnings report. This means Apple isn't "surge" hiring. That'd mean Apple growth is likely a long-term bad bet. That means my stock is going to take another hit. It's already started.

apple april 26 dip

Argh. I've lost thousands in the last year or so. Why I didn't sell at $120 when I was thinking about it, I don't know. I mean, long term, I guess I'd still pitch in with Apple, which is why I talked myself into leaving my money were it is, but there's something to be said for "profit taking".

To be clear, the "profit taking" proposition is this: Sell when you think they've peaked ($120, even though they eventually hit $130), then wait for the drop (say in a week, when it's $95), buy the same number of shares back, and you get the difference to put into your pocket (here, $25 a share over six months. Sheesh. I'm making myself crazy thinking about it). It's not a vote of no confidence. It's a guess for a temporary downturn, where you can get more stock for your money shortly, if you want, or keep your position with a lot of extra cash in your pocket. This is slightly different than selling short, but the mathes & idea are essentially the same.

But what's worse...

... is if you're a tech worker. If Apple's not recruiting, that's already a significant blow to your demand-side. I'm not sure if I'd label Apple as a canary just yet, but can't talk myself out of it either. If Apple doesn't see room for mad growth, and their software isn't the best of class, well, why should anyone look for mad growth? If I had to guess, I think the tech "lump", if it's not a bubble, is coming down for a while.

Shoulda tried to bite on that iCloud opening when I saw it. That could've been interesting. ;^)

Labels: , ,


posted by ruffin at 4/26/2016 10:16:00 AM
0 comments
 
Thursday, April 21, 2016

I've had my ThinkPad T440 for over three years now, and though I've been exceptionally happy with it, I'm looking to upgrade. Biggest want? A fast processor. Everything else seems pretty fungible from one computer to the next, including screen resolution (the other place my T440 lacks), with the possible exception of ports. But as long as I have a USB in and video out, I'm fine, honestly. I like the "always on" charging port on my T440, which lets me charge my phone anywhere, but that's about the only "want".

Of course this means I'm wasting hours price comparing and processor spec studying. I'm also doing a really poor job putting all the info somewhere I can find it easily. So let's sum, just for me.

Pro tip: Don't get hung up on the huge red number. Also compare the "Single Thread Rating!

Processors (all scores from cpubenchmark.net)

Current Desktop (to make me feel badly):

Intel Core i7-4790K @ 4.00GHz   Average CPU Mark
Description:  Socket: LGA1150
Clockspeed: 4.0 GHz
Turbo Speed: 4.4 GHz
No of Cores: 4 (2 logical cores per physical)
Max TDP: 88 W

Other names:  Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz
CPU First Seen on Charts:  Q2 2014
CPUmark/$Price:  32.96     Overall Rank:  63
Last Price Change:  $339.99 USD (2014-07-09)
11206

Single Thread Rating: 2529
Samples: 9749


Current laptop (ThinkPad T440)

Intel Core i5-3320M @ 2.60GHz   Average CPU Mark
Description:  Socket: BGA1023
Clockspeed: 2.6 GHz
Turbo Speed: 3.3 GHz
No of Cores: 2 (2 logical cores per physical)
Max TDP: 35 W

Other names:  Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz
CPU First Seen on Charts:  Q2 2012
CPUmark/$Price:  16.66     Overall Rank:  558
Last Price Change:  $239.99 USD (2012-11-24)
3998

Single Thread Rating: 1626
Samples: 992


ThinkPad T460p (quad-core)

Entry price is $935. i7 not available yet.

Intel Core i5-6440HQ @ 2.60GHz   Average CPU Mark
Description:  Socket: LGA 1151
Clockspeed: 2.6 GHz
Turbo Speed: 3.5 GHz
No of Cores: 4
Max TDP: 45 W

Other names:  Intel(R) Core(TM) i5-6440HQ CPU @ 2.60GHz
CPU First Seen on Charts:  Q1 2016
CPUmark/$Price:  NA     Overall Rank:  285
Last Price Change:  NA
6443

Single Thread Rating: 1932 [I'm not buying this. Geekbench puts it 11% lower than the i7, below. See that there's only 12 samples -mfn]
Samples: 12

Intel Core i7-6820HQ @ 2.70GHz   Average CPU Mark
Description:  Socket: LGA 1151
Clockspeed: 2.7 GHz
Turbo Speed: 3.6 GHz
No of Cores: 4 (2 logical cores per physical)
Max TDP: 45 W

Other names:  Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz
CPU First Seen on Charts:  Q4 2015
CPUmark/$Price:  NA     Overall Rank:  163
Last Price Change:  NA
8640

Single Thread Rating: 1874
Samples: 127


ThinkPad T460 (dual cores, 3 options)

Entry prices by proc: $875, $922, and $1050.
P50s runs the same stuff, give or take. P50 speeds aren't significantly better.

Intel Core i5-6200U @ 2.30GHz   Average CPU Mark
Description:  Socket: FCBGA1356
Clockspeed: 2.3 GHz
Turbo Speed: 2.8 GHz
No of Cores: 2 (2 logical cores per physical)
Max TDP: 15 W

Other names:  Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz
CPU First Seen on Charts:  Q2 2015
CPUmark/$Price:  NA     Overall Rank:  575
Last Price Change:  NA
3902

Single Thread Rating: 1501
Samples: 388

Intel Core i5-6300U @ 2.40GHz   Average CPU Mark
Description:  Socket: FCBGA1356
Clockspeed: 2.4 GHz
Turbo Speed: 3.0 GHz
No of Cores: 2 (2 logical cores per physical)
Max TDP: 15 W

Other names:  Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz
CPU First Seen on Charts:  Q2 2015
CPUmark/$Price:  NA     Overall Rank:  508
Last Price Change:  NA
4296

Single Thread Rating: 1646
Samples: 227

Intel Core i7-6600U @ 2.60GHz   Average CPU Mark
Description:  Socket: FCBGA1356
Clockspeed: 2.6 GHz
Turbo Speed: 3.4 GHz
No of Cores: 2 (2 logical cores per physical)
Max TDP: 15 W

Other names:  Intel(R) Core(TM) i7-6600U CPU @ 2.60GHz
CPU First Seen on Charts:  Q2 2015
CPUmark/$Price:  NA     Overall Rank:  434
Last Price Change:  NA
4777

Single Thread Rating: 1847
Samples: 161


Current MacBook Pro 13"

Entry prices by processor are $1300, $1400, and $1600.

Intel Core i5-5257U @ 2.70GHz   Average CPU Mark
Description:  Socket: FCBGA1168
Clockspeed: 2.7 GHz
Turbo Speed: 3.1 GHz
No of Cores: 2 (2 logical cores per physical)
Max TDP: 23 W

Other names:  Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
CPU First Seen on Charts:  Q1 2015
CPUmark/$Price:  NA     Overall Rank:  491
Last Price Change:  NA
4375

Single Thread Rating: 1716
Samples: 56

Intel Core i5-5287U @ 2.90GHz   Average CPU Mark
Description:  Socket: FCBGA1168
Clockspeed: 2.9 GHz
Turbo Speed: 3.3 GHz
No of Cores: 2 (2 logical cores per physical)
Max TDP: 28 W

Other names:  Intel(R) Core(TM) i5-5287U CPU @ 2.90GHz
CPU First Seen on Charts:  Q2 2015
CPUmark/$Price:  NA     Overall Rank:  454
Last Price Change:  NA
4636

Single Thread Rating: 1873
Samples: 5

Intel Core i7-5557U @ 3.10GHz   Average CPU Mark
Description:  Socket: FCBGA1168
Clockspeed: 3.1 GHz
Turbo Speed: 3.4 GHz
No of Cores: 2 (2 logical cores per physical)
Max TDP: 28 W

Other names:  Intel(R) Core(TM) i7-5557U CPU @ 3.10GHz
CPU First Seen on Charts:  Q1 2015
CPUmark/$Price:  5.42     Overall Rank:  413
Last Price Change:  $915 USD (2016-02-04)
4959

Single Thread Rating: 1899
Samples: 133


Current MacBook Pro 15"

Worth remembering that these are, entry-price for each proc, $2000, $2100, and $2300

Intel Core i7-4770HQ @ 2.20GHz   Average CPU Mark
Description:  Socket: FCBGA1364
Clockspeed: 2.2 GHz
Turbo Speed: 3.4 GHz
No of Cores: 4 (2 logical cores per physical)
Max TDP: 47 W

Other names:  Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz
CPU First Seen on Charts:  Q4 2014
CPUmark/$Price:  NA     Overall Rank:  152
Last Price Change:  NA
8917

Single Thread Rating: 1888
Samples: 43

Intel Core i7-4870HQ @ 2.50GHz   Average CPU Mark
Description:  Socket: FCBGA1364
Clockspeed: 2.5 GHz
Turbo Speed: 3.7 GHz
No of Cores: 4 (2 logical cores per physical)
Max TDP: 47 W

Other names:  Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz
CPU First Seen on Charts:  Q2 2014
CPUmark/$Price:  NA     Overall Rank:  122
Last Price Change:  NA
9372

Single Thread Rating: 2058
Samples: 135

Intel Core i7-4980HQ @ 2.80GHz   Average CPU Mark
Description:  Socket: FCBGA1364
Clockspeed: 2.8 GHz
Turbo Speed: 4.0 GHz
No of Cores: 4 (2 logical cores per physical)
Max TDP: 47 W

Other names:  Intel(R) Core(TM) i7-4980HQ CPU @ 2.80GHz
CPU First Seen on Charts:  Q2 2014
CPUmark/$Price:  NA     Overall Rank:  85
Last Price Change:  NA
10060

Single Thread Rating: 2234
Samples: 102


Alienware 15 r2

Though prices change on a dime, right now it's $1200, $1250, and $2550

Intel Core i5-6300HQ @ 2.30GHz   Average CPU Mark
Description:  Socket: LGA 1151
Clockspeed: 2.3 GHz
Turbo Speed: 3.2 GHz
No of Cores: 4
Max TDP: 45 W

Other names:  Intel(R) Core(TM) i5-6300HQ CPU @ 2.30GHz
CPU First Seen on Charts:  Q4 2015
CPUmark/$Price:  NA     Overall Rank:  335
Last Price Change:  NA
5734

Single Thread Rating: 1643
Samples: 123

Intel Core i7-6700HQ @ 2.60GHz   Average CPU Mark
Description:  Socket: LGA 1151
Clockspeed: 2.6 GHz
Turbo Speed: 3.5 GHz
No of Cores: 4 (2 logical cores per physical)
Max TDP: 45 W

Other names:  Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz
CPU First Seen on Charts:  Q2 2015
CPUmark/$Price:  NA     Overall Rank:  190
Last Price Change:  NA
8030

Single Thread Rating: 1791
Samples: 1259

Intel Core i7-6820HK @ 2.70GHz   Average CPU Mark
Description:  Socket: LGA 1151
Clockspeed: 2.7 GHz
Turbo Speed: 3.6 GHz
No of Cores: 4 (2 logical cores per physical)
Max TDP: 45 W

Other names:  Intel(R) Core(TM) i7-6820HK CPU @ 2.70GHz
CPU First Seen on Charts:  Q4 2015
CPUmark/$Price:  NA     Overall Rank:  142
Last Price Change:  NA
9069

Single Thread Rating: 1904
Samples: 120


Razer Blade Stealth & QHD+

$1000, $1800 (Pro is the same proc as QHD+, so not including it in "entry price" list)

Intel Core i7-6500U @ 2.50GHz   Average CPU Mark
Description:  Socket: FCBGA1356
Clockspeed: 2.5 GHz
Turbo Speed: 3.1 GHz
No of Cores: 2 (2 logical cores per physical)
Max TDP: 15 W

Other names:  Intel(R) Core(TM) i7-6500U CPU @ 2.50GHz
CPU First Seen on Charts:  Q2 2015
CPUmark/$Price:  NA     Overall Rank:  497
Last Price Change:  NA
4331

Single Thread Rating: 1647
Samples: 499

Intel Core i7-4720HQ @ 2.60GHz   Average CPU Mark
Description:  Socket: BGA1364
Clockspeed: 2.6 GHz
Turbo Speed: 3.6 GHz
No of Cores: 4 (2 logical cores per physical)
Max TDP: 47 W

Other names:  Intel(R) Core(TM) i7-4720HQ CPU @ 2.60GHz
CPU First Seen on Charts:  Q4 2014
CPUmark/$Price:  NA     Overall Rank:  187
Last Price Change:  NA
8100

Single Thread Rating: 1935
Samples: 1959


MacBook 2016

Just for fun. Looks like this is $1300-1600 entry. Wikipedia shows three proc options; I only see two on Apple's Buy site. This is the fastest proc listed on Wikipedia right now...
Intel Core m7-6Y75 @ 1.20GHz   Average CPU Mark
Description:  Socket: FCBGA1515
Clockspeed: 1.2 GHz
Turbo Speed: 3.1 GHz
No of Cores: 2 (2 logical cores per physical)
Max TDP: 7 W

Other names:  Intel(R) Core(TM) m7-6Y75 CPU @ 1.20GHz
CPU First Seen on Charts:  Q4 2015
CPUmark/$Price:  NA     Overall Rank:  622
Last Price Change:  NA
3704

Single Thread Rating: 1501
Samples: 27

My quick take home (again, for my specific use case; it is my blog, after all! ;^D) is that the MacBook Pros are impressively spec'd, and that the T460p, my initial choice b/c of price and quad-core proc, has an excellent single thread on the i5, tempered by there only being 12 samples taken.

I think the take-home is to wait on the new MacBook Pros this summer, to either get a deal on the old or to see if the new procs make sense. The real crux is whether I think I need mobile Mac hardware to write up some Xamarin apps for iOS. I have good but dated desktop Mac hardware, and can't figure out if $300-$500 is worth it to take a Mac on the road. I want to say yes, but with Xamarin Forms, it's not quite the deal breaker it used to be. And man, that T460p is cheap, relatively speaking.


EDIT: One more quick addition -- my Mac mini 2012, bottom of the line, as I try to convince myself to get a Windows laptop and use the mini as a Xamarin iOS build server...

Intel Core i5-3210M @ 2.50GHz   Average CPU Mark
Description:  Socket: PGA988B
Clockspeed: 2.5 GHz
Turbo Speed: 3.1 GHz
No of Cores: 2 (2 logical cores per physical)
Max TDP: 35 W

Other names:  Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
CPU First Seen on Charts:  Q1 2012
CPUmark/$Price:  17.18     Overall Rank:  606
Last Price Change:  $220.33 USD (2016-02-29)
3786

Single Thread Rating: 1518
Samples: 4334

Labels: , , , , ,


posted by ruffin at 4/21/2016 11:54:00 AM
0 comments
 
Wednesday, April 20, 2016

From the Ray Wenderlich (I hate liches) interview of Marco Arment:

It’s easy to look at successful, painstakingly crafted, impeccably designed apps from well-known developers like Panic or Omni and attribute their success to their craftsmanship, design, and delightful details. Far too many developers believe that if they polish an app to a similar level, they’ll be successful, too. And then they pour months or years of effort into an app that, more often than not, never takes off and can’t sustain that level of effort.

This is part of what I tried to say in, "Your app's not Marco's" last year.

If I was going to be blunt, I also don't think Unread has quite as much market appeal as Overcast. Overcast has some serious bugs -- I've had it display many and even download one latest podcast from feeds I've listened to and am not actively subscribed (no response yet from support@overcast.fm) -- but it's arguably a better podcast app [without excuse] than, say, Downcast. I stopped using Unread a few months after I purchased. Even in the non-IAP state, Overcast is a pretty good app. I had to have faster playback speeds, so I shelled out the cash. It hasn't given me a reason to stop using it yet.

Jared Sinclair went all-in with Unread. Look, I'd argue $42,000 over six months of sales is a success. But he went all in for eight months before that sales period started. That's the crux of Marco's warning. Don't do that.

Your app's ceiling is only as high as the need it can potentially serve. See how high the ceiling is sooner than later (he says as he continues to test his markdown editor that he hasn't released...)

Labels: ,


posted by ruffin at 4/20/2016 08:41:00 AM
0 comments

Support freedom
All posts can be accessed here:


Just the last year o' posts:



Powered by Blogger furthurnet.org Curmudgeon Gamer badge