Wednesday, May 24, 2017

Hammerspoon

So after upgrading to macOS Sierra one of my most critical utilities Karabiner stopped working.  I used it to map a bunch of shortcut keys on the mac to be the same as windows.  I switch between the two OS's all the time and it drives my muscle memory crazy having to use two different sets of keyboard shortcuts.  Unfortunately, Karabiner isn't supported under sierra.  Karabiner elements doesn't have the features I need like many to many key mappings (mod key combos to different mod key combos).  There is a fork that wwwjfy did that solves the one to many mapping but doesn't solve the man to many mappings.  In the end I completely ditched karabiner elements and uninstalled it.

In comes Hammerspoon and with a little scripting I think I have it all tweaked the way I like it.  My goal was to duplicate this mapping but use Hammerspoon instead:


First thing is to swap the option and command keys (the usual keyboard settings) if you are using an external keyboard.  I do this for all external keyboards but leave the apple internal keyboard as default:

Once you install hammerspoon and enable accessibility,  choose open config.  You should get a blank init.lua file.  Just paste the following.  Leave off the visual studio section if you don't use visual studio for mac.  Then, reload the config.  


-- home/end
hs.hotkey.bind({''}, 'home', nil, function() hs.eventtap.keyStroke({'command'}, 'left')end)
hs.hotkey.bind({"ctrl"}, "home", nil, function() hs.eventtap.keyStroke({"cmd"}, "up")end)
hs.hotkey.bind({""}, "end", nil, function() hs.eventtap.keyStroke({"cmd"}, "right") end)
hs.hotkey.bind({"ctrl"}, "end", nil, function() hs.eventtap.keyStroke({"cmd"}, "down") end)

-- home/end + shift
hs.hotkey.bind('shift','home', nil, function() hs.eventtap.keyStroke({'shift','cmd'},'left')end)
hs.hotkey.bind('shift','end', nil, function() hs.eventtap.keyStroke({'shift','cmd'},'right')end)
hs.hotkey.bind({'shift','ctrl'},'home', nil, function() hs.eventtap.keyStroke({'shift','cmd'},'up')end)
hs.hotkey.bind({'shift','ctrl'},'end', nil, function() hs.eventtap.keyStroke({'shift','cmd'},'down')end)

-- cut/paste
hs.hotkey.bind('ctrl','c',nil,function() hs.eventtap.keyStroke('cmd','c')end)
hs.hotkey.bind('ctrl','v',nil,function() hs.eventtap.keyStroke('cmd','v')end)
hs.hotkey.bind('ctrl','a',nil,function() hs.eventtap.keyStroke('cmd','a')end)
hs.hotkey.bind('ctrl','z',nil,function() hs.eventtap.keyStroke('cmd','z')end)
hs.hotkey.bind('ctrl','x',nil,function() hs.eventtap.keyStroke('cmd','x')end)

--file ops
hs.hotkey.bind('ctrl','s',nil,function() hs.eventtap.keyStroke('cmd','s')end)
hs.hotkey.bind('ctrl','o',nil,function() hs.eventtap.keyStroke('cmd','o')end)
hs.hotkey.bind('ctrl','n',nil,function() hs.eventtap.keyStroke('cmd','n')end)

-- search 
hs.hotkey.bind('ctrl','f',nil,function() hs.eventtap.keyStroke('cmd','f')end)
hs.hotkey.bind('ctrl','g',nil,function() hs.eventtap.keyStroke('cmd','g')end)
hs.hotkey.bind('ctrl','r',nil,function() hs.eventtap.keyStroke('cmd','r')end)
hs.hotkey.bind('','F3',nil,function() hs.eventtap.keyStroke('cmd','g')end)
hs.hotkey.bind('ctrl','F3',nil,function() hs.eventtap.keyStroke({'shift','cmd'},'g')end)

--visual studio
hs.hotkey.bind('ctrl','h',nil,function() hs.eventtap.keyStroke({'alt','cmd'},'f')end)
hs.hotkey.bind('ctrl','.',nil,function() hs.eventtap.keyStroke('alt','return')end)




Saturday, March 04, 2017

Nintendo Switch



A few initial thoughts.  I've put a few hours in and just finished the Great Plateau area in Zelda.

- Hardware is really nice.  It feels like a quality tablet.
- I applied the screen protector that comes with the official case successfully with spot on alignment and no air bubbles or dust.  This is the first thing I did after taking it out of the box.  Just run the shower to steam up the bathroom slightly and lots of scotch tape and make sure you lift every spec of dust off first.
- You do initial setup in portable mode.
- Setup wifi, apply day 1 patch
- Stuck in a 200gb micro sd card.  Patch again.  Odd that after inserting an sd card you get prompted for a second system update.  Screenshots by default save to sd when there is one.
- Switch sound to surround.
- No way to pair bluetooth headphones.  Seriously Nintendo?
- Pro controller is awesome.  It feels very similar to the xbox one controller.  It's very comfortable, the size is just right, and you get a real d-pad.  The price is a bit insane though when you can get an xbox one type-s controller for < $40.
- The frame rate drops in dock mode are noticeable.  It doesn't kill the experience but it does become annoying occasionally.  I hope they can fix it with a patch.
- Playing in portable mode is ok.  The Joycon analog sticks feel very similar to the ps vita.  That is it is small, short, with less travel distance.  It's better than nothing but not nearly as nice as the sticks on the pro controller.  Right analog stick is a bit of a stretch for my thumb.  You can't really use your middle fingers for the lower triggers while holding the switch since you need those fingers to support it.  So you are left using your index fingers to hit the triggers and bumpers.
- I bought an anker usb-c to usb-a 3.0 cable and it works fine charging while on the go from this battery.  It took the battery from 93% to 100% while playing zelda so it had no problems keeping up.
- Motion controls MUST DIE.  Good thing you can turn it off in the options.
- Switching between dock and portable mode is completely seamless.
- System updates happen SUPER FAST.  Everything feels faster than the clunky wii u.
- Loving Zelda so far: open world that isn't ubisoft or bethesda.  It really is refreshing.

The more I play the more I'm impressed.  If you approach this as a home console first you might be a bit disappointed.  It's not going to be able to compete with my ps4 pro.  But if you look at it as the most advanced portable gaming system that also easily hooks up to your TV and has a nice full size pro controller then it really is a nice piece of tech.  Being able to game on my 80" for a couple of hours, getting to the last dungeon in the starter area, having the wife come home, then pop the switch out and join her on the couch downstairs and finish off the dungeon.....yeah I see the appeal.  Finally we have a portable game system that truly is no compromise with real AAA games errrr.....game so far.

Having the pro controller lets you leave the Joy-Con on the switch where they will charge while in the dock while you play with the pro controller.  Then when I go portable I just plug the pro controller into one of the dock usb ports and it charges while I'm playing portable.

Monday, February 20, 2017

Apple Watch Series 2 (42mm, space gray aluminum) - A Fitness Perspective



I've been a big fan of pebble for the last couple of years.  I started with the original pebble and then upgraded to Pebble Time in early 2016.  It had an always on e-ink color screen, amazing battery life, water resistant, thin, light, and worked pretty reliably with my iPhone.  I mostly used it for notifications, calendar, an occasional app, and fitness tracker.  For serious workouts I still relied on my TomTom Spark 2 cardio + music.  That is a great workout watch given the price and size of the thing.  The only thing I wish it had was at least a few smart features like notifications which they promised over 1.5 yrs ago and never delivered.  Oh well.

I've been pretty happy with my dual watch setup up until Pebble being killed off by the Fitbit buyout.  Yes, I know all about the promises of keeping the cloud services alive for a year and all the open source efforts going on but the thing is there will never be another pebble watch made.  What is out there is all there ever will be.  I looked at some other options like Martian, Vector (now also bought out by Fitbit), Garmin, etc.  Nothing really appealed to me.

So my wife got me an Apple Watch for Valentines Day though $400 for a watch seemed like way too much even given the typical Apple tax.  I knew it was more of an everyday watch and it really excels at that but I wanted to really dig into the fitness side of things and see how well it stacks up to my TomTom.  I'm already pretty invested in apple stuff (iphone 7 plus, macbook pro 15" mid 2014, ipad air 2). They only thing I really miss from my pebble so far is the always on face.  No real custom watch faces is also a bit annoying but with complications and photo watch face you can kind of create your own.

I went with a standard black sports band and also picked up this black Milanese Loop for $14.  I highly suggest you swing by an apple store and just try a bunch of bands on with your watch and see what looks and feels nice to you then go after market.  Because $200 for a Milanese loop band is INSANE.

Indoor Gym - Workout app (47 min)
- 47 min strength workout.  I used the built in workout app and picked other.  It seemed to work ok but calories burned was quite a bit lower than my TomTom.  Everything feeds into activities and health kit so myfitnesspal has no problems reading in the data from health  kit.

Outdoor Run - Workout app (3.2 miles)
- GPS map and distance - pretty spot on with my tomtom.  It was .01 miles shorter.  Heart rate seemed fine though I wish it had a heart rate/pace graph.  At least there are splits for the pace.  Music over bluetooth was FANTASTIC.  It paired fine with my mpow headphones and never lost connection, never skipped, and no static.  Compared to my tomtom I have to wear that on my right wrist and even then if I put my right hand down it would cut out for a bit.
- Display was bright and very legible during daylight.  I really like how you can see 5 stats all at once plus the clock is always there in the upper right.  I like to see running time, distance, current pace, average pace, and heart rate.
- Pacing data seemed fine for me though I didn't change pace much.  I didn't have any of the weird stuff going on like DC Rainmaker had in his review but then again I'm a LOT slower (10-11 min/mile).
- Calories burned seemed in line with tomtom.
- Why can't I view my workout I just completed on my watch?  It seems like I have to go to my phone for that.  Annoying.
- Overall I'm really happy with this watch for running and can easily replace my tomtom for that.  I just wish it had some graphs added to the activities app/workouts section and also a way to export the data to at least a few different popular online sites.  For some heart rate graphs I like HeartWatch (really good complication) or Cardiogram.  Both do a pretty good job at displaying heart rate data in all sorts of interesting ways.
- Battery life was just fine.  After a full day of use + the run I still had about 50% left.
- I briefly looked at nike run club and what the display options during running looked like.  It was basically worthless so I deleted it.

Outdoor Run - Runkeeper
- As one of the few apps that support the gps on the watch I decided to give this a try.  It's kind of horrible.  My pace was all over the place, heart rate dropped out a few times, and it crashed mid run.  You can display only 4 stats simultaneously.  Sure you can cycle a few of the areas through different stats and show some fancy graphs but I don't really care about that during the run.  I much prefer the clearer, bigger, and more information dense display from the workout app.  Yeah, I think I'll stick to the default workout app for running.  Maybe strava will be better when it's released in a few weeks.  UPDATE: Runkeeper does have one unique advantage.  You can create custom workouts (very customizeable, beyond just HIIT) and then pick those from the watch.  So if you want interval training I would suggest giving Runkeeper a try.

Indoor bike
- Seemed to work well enough.  Calorie counts were quite a bit lower than tomtom.

Pool Swim (30 min)
- Just fantastic.  It's hands down better than tomtom.  I was able to input 25 yd pool length.  It counted my lengths, distance, pace (with splits), and even heart rate (which tomtom disables during swim) all accurately.  I did the water ejection thing a few times and the speaker was pretty much back to normal.

Outdoor bike - (13 miles)
- I used the cyclemeter app since my setup is all bluetooth wahoo stuff (speed + cadence + rflkt bike computer).  Cyclemeter fully supports apple watch and lets you really customize the display.  I set it up with 6 stats which is basically how I have the RFLKT setup (speed, avg speed, heart rate,  cadence, ride time, ride miles).  It's a bit tiny on the watch and the angle isn't the best especially when down in the aero bars but overall not bad.  It picked up the heart rate from the watch and then it also shows up in the RFLKT.  Typically on my training rides I leave the tomtom at home since I always have my phone with me.  I used a Mio Link for heart rate data (hate chest straps).  This basically lets me use the apple watch instead of the mio link and as a bonus I get the convenience of answering calls and notifications on my wrist.  Overall, heart rate data was acceptable but seemed to lag a bit more than the mio link.

I've had the watch for a full week now wearing it pretty much everyday.  It really is pretty great as an everyday watch.  What is surprising is I think this can also be my everyday triathlon training watch.  I think at this point it is probably good enough to replace a TomTom.  I still won't use it on race day though since it doesn't pair with my bluetooth speed and cadence sensors.  Also, there is no way it's going to compete with more serious multisport watches like a garmin 920xt or fenix 5.  But for the more casual multisport enthusiast the apple watch is probably going to be fine for most people.

UPDATE: 2/27/2017
- Outdoor run - strava:  Works better than runkeeper.  Heart rate seemed solid.  Pace seems like it is the current pace though it is labeled split.  It needs an avg pace display.  Other than that it seems to work fine.  I still prefer the built in workout app for running.
- I did another indoor swim, bike, and another outdoor run using the workout app.  I'm still quite happy using this as my fitness watch.
- If you have issues with bluetooth just turn on airplane mode on and back off on the watch.