Dangerous Drones Daily

Ok, we are not quite up to daily drone problems. It’s more like monthly but that title doesn’t sell news. Anyway, it’s only a matter of time before someone using a drone causes a serious accident and kills someone. That young man will be sorry for his actions and apologize, saying that he didn’t realize that drones were dangerous, and he never meant to harm anyone.

Below are some of the headlines. I’ll try to keep it up to date.

In other news, readers of Hacker News have voted their favorite movie as Groundhog Day

August 12, 2015

Drone almost hits medical helicopter carrying patient to Fresno hospital

August 10, 2015

4 Commercial Planes Report Drone Encounters at Newark Airport: FAA

August 5, 2015

Drone hits Great American Tower, breaks glass

August 1, 2015

2 airliners fly within 100 feet of drone above New York

July 21, 2015

Lufthansa flight has near-miss with drone near Warsaw / Hacker News discussion

July 18, 2015

Above spectacular wildfire on freeway rises new scourge: drones /
Hacker News discussion

June 30, 2015

Woman Knocked Unconscious at Parade by Falling Drone / Hacker News discussion

May 29, 2015

Jetliner dodges possibly ‘catastrophic’ collision with drone in NYC /
Hacker News discussion

May 26, 2015

Drone crashes on parade spectator in Marblehead

Nov 20, 2014

Pilots Report Drones Flying Near JFK Flight Path

July 8, 2014

Drones nearly collide with NYPD helicopter, two arrested


An Introduction to Ergonomic Keyboards

Today, on the last day, I backed the Kickstarter keyboard project “Model 01: an heirloom-grade keyboard for serious typists” from Keyboardio.

It’s a bit expensive but there are so few good ergonomic keyboards that I had to give them a shot. I tried the keyboard when the founders visited Manhattan. It was hard to tell how I would feel about the palm key, and a few other things, until I’ve used it for a while, but all the ingrediants to a great ergonomic are there, which I’ll summarize below.

Mechanical Switches

Most keyboards use dome or scissor switches, which require you to press a key to the bottom.   Remember the scene in Kill Bill: Volume 2 where Uma Thurman is smashing her fingers into the coffin to escape from being buried alive?

Anyway, mechanical switches register at about the half-way point so you can avoid hitting the bottom.  There are many keyboards with mechanical switches. In addition, these switches usually require less force to press the keys down. These are the common types of switches that you’ll find in keyboards:

  • MX Cherry Brown/Blue/Clear/Green
  • Topre Switches
  • Matias Switches

Xah Lee has a great intro on keyboard switches

Split Keyboard

The Microsoft Sculpt is a good example of this.  It allows for your arms to be placed in a more natural position.  It looks slick, and many people love them, but they don’t have mechanical switches.

Separated Keyboards

A separated keyboard allows the user to place each section at a comfortable width.  The ErgoDox is an example.  However, these usually require that you build your own from a kit.

There’s also the Matias Ergo Pro.

Tented Halves

Tenting also allows users to hold their forearms and wrists in a more natural manner.

Tented Keyboard

The Matias Ergo Pro also has tenting.

Until Next Year

That covers the basics of ergonomic keyboards.  I won’t have the keyboard until next spring so I can’t tell you how it all works in practice, but I’ll be sure to do a review after I’ve had it for a few months.  In the meantime, I’m going to take a soldering class at a local Hackerspace.  I just might build my own ErgoDox.

Top 5 Start-ups Creating iOS Language Learning Apps

The iOS market for language learning software is very competitive. Over $140 million in funding has gone into the top 5 start-ups.

Recently Busuu raised $6.7 million from McGraw-Hill Education. This places them third in funding, far behind DuoLingo and Babbel as show in this table:

iOS App Funding (millions)
Duolingo $83
Babbel $32
Busuu $11
MindSnacks $7.7
Memrise $6.3

Of course h4labs also writes language learning software, and we don’t believe the most money means the best app. In fact, we’re trying to bootstrap our language learning apps into the top 10. Learning a language is difficult and we believe the more tools the better. Please check out our offerings on the App Store and let us know how we can better help you learn your next language:

h4 Spanish LiteSpanish h4 French LiteFrench h4 Italian LiteItalian
h4 German LiteGerman h4 Russian LiteRussian h4 Mandarin LiteChinese

Thermaltake Poseidon Z Keyboard on Mac

Best Buy is having a clearance on the Poseidon Z keyboard, and I’ve been wanting to try out Cherry Blue switches. I think they’re actually the Kailh clones, but for $72 I can live with the small difference. Of course, when I got it home and plugged it in, it didn’t work. The arrow keys, as well as a few other keys, wouldn’t register when pressed. After a quick Google search, I found how to install the proper driver:

Poseidon Z Driver for Mac OS X 10.10/

It did require a reboot. The keys worked but I didn’t have a functioning Command key. I thought the Windows key automatically became Command but it didn’t work so I mapped Alt to Command and Command to Option.


This worked even though my Command key didn’t originally work.   Finally, I’ve got my Blue clicky switches.  Let’s see how other people like them. 🙂




Curling a UIView Up/Down with Swift

I had a problem creating the page curling effect between two views. The solution suggested on StackOverFlow is to use a container that uses auto layout for the two transitioning views, which do not use autolayout. Here’s what the problem looked like:

Here’s what the views should look like:


I committed the working project to my Swift Github repo: https://github.com/melling/Swift under the Xcode project TransitionWithView. Here’s the main functionality:

    func curlUp() {
        let transitionOptions = UIViewAnimationOptions.TransitionCurlUp
            toView: cardBack,
            duration: 5.0,
            options: transitionOptions,
            completion: { _ in
                let transitionOptions = UIViewAnimationOptions.TransitionCurlDown

                    toView: self.cardFront,
                    duration: 5.0,
                    options: transitionOptions,
                    completion: { _ in


    func buildView() {

        let height = 100
        let width = 100

        container = UIView()
        container.backgroundColor = UIColor.blackColor()
        cardBack = UIView(frame: CGRectMake(0, 0, CGFloat(width), CGFloat(height)))
        cardBack.backgroundColor = UIColor.redColor()
        cardFront = UIView(frame: CGRectMake(0, 0, CGFloat(width), CGFloat(height)))
        cardFront.backgroundColor = UIColor.greenColor()

        let viewDictionary:Dictionary = ["container": container]

        let metrics:Dictionary = ["width": width, "height": height]

        let h0Constraint = "H:[container(==width)]"
        let v0Constraint = "V:[container(==height)]"
        addStandardConstraints(self.view, constraint: h0Constraint, viewDictionary: viewDictionary, metrics: metrics)
        addStandardConstraints(self.view, constraint: v0Constraint, viewDictionary: viewDictionary, metrics: metrics)
        centerViewXY(self.view, child: container)
        NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: "curlUp", userInfo: nil, repeats: false)

Using Swift in a Legacy Objective C Project

I started learning Swift this week. I ran into my first time consuming problem when I tried to import my legacy Objective C classes into my Swift code. There are lots of good instructions on how to accomplish this task.


Unfortunately, I skipped over the one comment that said to include Foundation.h into my Objective C code:

Without it, you will see a lot of Unknown type error messages (e.g.
/Users/melling/Dropbox/dev/ios/Clock/Clock/Number.h:13:30: Unknown type name ‘NSInteger’)

#import <Foundation/Foundation.h>

@interface Numbers : NSObject

@property(assign, nonatomic) NSInteger numericalValue;
@property(assign, nonatomic) NSInteger dictId;

@property(strong, nonatomic) NSString *arabic;