Monday, November 16, 2015

CitiBike Guest

I've been using CitiBike for a couple of years now, and mostly loving it; especially now that they have a bunch of stations in Jersey City!

Here's an idea: make it easier to give rides to guests. Why? I often wind up in a situation where I want to ride my bike with another person, but they don't have a CitiBike membership, so I have to convince them to try it out, and then go to the pay station, insert my credit card, and get the unlock code, all whilst my guest is getting uncomfortable and eventually changes his/her mind.

Instead, I would like it to work like so: *blip* I just got a bike; *blip* I just got a bike for my guest. The advantage? My guest isn't aware of any transactions involved, and doesn't have time to change his or her mind. Here's how it would work:
  1. I use my key to unlock my own bike. The light turns green and I take the bike out.
  2. I use my key to unlock my guest's bike. The light starts flashing green.
  3. If I press "1", my credit card (on file) gets authorized, and the bike gets unlocked. If I press anything else, or don't press anything at all, nothing happens. This way I can never accidentally unlock an extra bike if the previous bike I docked failed to lock. This also has an extra advantage that if I'm just trying to unlock a bike for myself and the light starts flashing green, I will *know* that my previous bike failed to lock and I can inform CitiBike.
The guest's bike would get charged per hour of use, just like it does currently, and I think it would convince many to actually get a membership!

Tuesday, September 01, 2015

Why UltraViolet is a failure.

I bought yet another blu-ray movie with one of those "redeem your digital copy" cards inside. I usually ignore them, but this time I thought, why not? UltraViolet seems to be a thing now; it stood up to the test of time. My optical media isn't going to last forever, so I might as well get my moneys worth!

To start, I searched for an iOS app that plays UltraViolet movies. No such thing. There are apps that supposedly connect with UltraViolet to redeem the purchases, which allow you to then stream or download from a digital retailer, such as Flixter, Vudu, or M-GO.

Fair enough, let's start with Flixter. Netflix? Nope, that was Quickster. Whatever, this one's owned by Time Warner. How are the reviews? Four and a half stars! Great! Oh... no, it doesn't actually play movies. Scroll down. Flixter Video! One and a half stars?! Okay, maybe the reviewers were a little harsh. Nope! Most of the complaints are about not being able to play movies offline, or not being able to play movies at all. Not going to bother with this one.

Moving on: Vudu. Same story.

M-GO. Good reviews. Nice interface. Setting up an account was pretty easy. Okay, now I have to set up an UltraViolet account, too. Now I have to link it to the M-GO account, which is done by entering my UltraViolet credentials on M-GO's site. Not very secure, but whatever – it's not like my UltraViolet account has got anything to steal. Linked!

Finally! Let's add those movies! Enter the redemption code on UltraViolet's site. Choose your digital retailer: Flixter or Vudu. That's it. Try another movie code? Same story. Enter the code directly on M-GO? Doesn't work, of course.

Dear Time Warner and Walmart and all the movie studios that made a deal with these decrepit spawn of digital hell: let me recap my situation. I wasn't entirely happy with how Apple handled things, what with their DRM and being restricted to their ecosystem to watch any of my purchased movies. Honestly, it was mostly a matter of principle, because I was actually able to play those movies on all of my devices. The only real issue was "if I ever switch to Android", which of course doesn't support iTunes purchases. Instead, I now have these mysterious UltraViolet digital... somethings. These somethings have zero chance of being played back on any of my media devices.

Saturday, December 06, 2014

iPhone 6: The Good, The Bad, and The Mediocre

© 2014 Apple Inc.

I finally got my iPhone 6 in the mail, and after playing around with it for a couple of days, I have many a praise, but also a few criticismesses.

The Good.

1. Touch ID.

Yes, I know, it's been there since the iPhone 5S. However, since I'm upgrading from the iPhone 5, it's new to me.

Words cannot express how well this feature works. It is simply amazing! It reads your fingerprints and only your fingerprints, and it reads them every time without fail, in a mere fraction of a second. You can store multiple fingerprints, which is very helpful if you want to unlock the phone with either hand, or maybe if several people are using the same device.

2. Slo-mo video recording at 240 fps.

It's official: my iPhone sees better than I do. Watch a droplet of milk fall into a cup of coffee, a pro skateboarder perform a complicated trick, or your house lights flicker, all at an impressive 720p resolution. Oh yeah, did you know your house lights flicker 60 times per second? I didn't, until I watched it in slo-mo.

3. Flash photography.

I believe the advanced flash was also introduced in 5S, but it is nonetheless remarkable. No more zombie-colored portraits! In fact, I will go ahead and state for the record that at close range, my iPhone 6 produces the best flash photography I've seen so far.

4. Video stabilization.

It's there, it works, and it makes videos look a lot smoother and more professional than they used to be.

5. Speaker.

For some reason, no one mentions this: the iPhone 6 has a massive speaker, compared to the minuscule, tinny-sounding speaker of the iPhone 5. You can actually hear the bass lines this time around, and it won't make that horrible clipping noise when you turn the volume all the way up.

6. Retina.

Not a new feature by any means, but the screen is as gorgeous as ever, perhaps even more so, now that it's quite a bit larger.

7. Background App Refresh and Google Hangouts.

Not really an iPhone 6 feature either; it has more to do with iOS 8 and Google doing a great job on the app.

After jumping through a few hoops, I was able to direct all my Google Voice messages (SMS) to Hangouts, and from there on it was smooth sailing. The push notifications work, and since the app uses background refresh, your messages are already loaded when you swipe on the notification. There's no wait time for the message to load, and you don't even have to be connected to the internet at that point. What does that mean for me? It means I can still read my SMS in a timely fashion, despite the fact that my Gmail emails now arrive with a 15 minute delay. More on that in a bit.

The Bad.

1. I don't like giant phones.

It's a personal preference. Many people like giant phones: there's a reason why Apple made the iPhone 6 Plus. The iPhone 5 was already too big for my liking. The iPhone 6 is so big that I can no longer hold it with one hand and press the home button. I have to use a new "typing grip" as well: holding the iPhone 6 by the sides with my index fingers, and supporting it on the back with the rest of my fingers, while typing with my thumbs. Typing and holding the phone with the same hand is now completely out of question.

2. Camera sticks out.

Everyone knows about this. It's ugly, and if you don't have your phone in a case, it will never lay flat on a table. That said, I always have mine in a case, so it's not a problem.

3. No support for push for Gmail accounts.

This was probably the biggest upset for me. It's not entirely Apple's fault. Some of it is Google's. You see, Apple never supported push via IMAP. However, there was a way to get around that, by setting up Gmail as an Exchange account instead. However, at the end of January 2013 Google disabled the ability to use Exchange to connect to your Gmail account, on any new devices. This means that my email now arrives with a 15-minute delay, which makes SMS forwarding pretty useless.

I tried out a bunch of email apps to connect to Gmail instead, such as the official Gmail app, Mailbox, and myMail. They all seem to share at least one common problem: there is no support for background app refresh. Which means that when you swipe on that email notification, you have to have an internet connection, or else your email won't load. And even if you have it, there is an annoying delay before you can read the email.

Luckily for me, Google Hangouts implemented support for background app refresh, and it works beautifully. They've also integrated Hangouts into the web Gmail client, which works great as well, both for Hangouts/G-Chat and for SMS. So now I can say "adieu" to SMS-to-email forwarding; it has lost its use, and has been superseded by newer and better technology.

4. iOS 8 app crashes and bugs.

iOS 8 is not the most stable of operating systems. Though I'm not seeing as many rendering artifacts as I did with my iPhone 5, both Mail and Camera apps have crashed on me way too many times. There are some interesting bugs as well. For instance, try putting the Camera app into the video recording mode, hit "play" from the Control Center, and then start recording a video. If you listen closely, you will hear the sound of Apple's programmers getting fired. 

The Mediocre.

Battery life.

Sure, it's better than the battery in my iPhone 5, which after two years of use lasts for about 15 minutes during active use. The iPhone 6's battery went down to about 65% after two hours of dicking around. And I'm not talking about heavy usage and playing video games that will make your phone warm enough to heat your apartment during winter. No, just playing around with settings and shooting a few 30-second slo-mo videos. Not great.


Overall, I'm quite pleased with what the iPhone 6 has to offer. The slo-mo feature alone kept me occupied for hours at a time! Now let's get some support for push in Gmail accounts, and "we in beez"!

Friday, August 22, 2014

L00k, I haz JavaScriptz!!! ô-ô

I recently published several JavaScript libraries. Some not so recently:)

#1. Freemason

A build utility that is super-simple to use and doesn't require any configuration. Here's an example:
var build = require('freemason').tasks;

#2. Require

Client-side asynchronous script importing, built on top of LABjs. Here is an example:
var YourModule = require('/path/to/your_module.js', function() {

#3. Wedge

A browser compatibility shim. Currently supports IE 8+.

#4. TemperSynth

A musical synthesizer with dynamically controlled scale temperament. This was my music hackathon project @ Spotify.

Thursday, May 22, 2014

Friday, November 15, 2013

Recruiter Professionalism

I've been searching for a new job since last week, and my life has been pretty much consumed by phone calls and interviews. Some good, some bad, some... ugly.

This morning, a certain recruiter, let's name him Ryu, calls me. Immediately after I pick up the phone, he puts me on hold for several minutes, and then the call ends abruptly. A minute later, Ryu calls me back, saying that he wants me to come in for an job interview with a certain company next week. "This will not be a technical interview," he says, "they just want to meet you, and then maybe you can meet their design team on another day, and if everything goes well they'll schedule you for a technical interview."

All this is really starting to sound like a lengthy process to me, so I let Ryu know that I am expecting offers to start coming in next week, and he of course wants to know which companies I'm expecting offers from. "Two of these companies are through personal connections," I say, "so I can't really tell you what they are." Without giving me the opportunity to tell him about the third company that I can indeed mention, he interrupts me.

"Well I'm not going to represent you if you can't tell me who you're interviewing with!" Ryu says with increasing fervor. I proceed explaining to him that those companies have specifically asked me not to reveal their identities to recruiters. "That's fine then, I'm just not going to represent you!" he repeats.

At this point I feel that this conversation isn't going anywhere. "Okay man, it was great talking to you." I say and hang up. A few seconds later Ryu calls me back. I patch him through to voicemail. Here is the transcription, verbatim:
Ah... I wasn't done, but... I wish you all the best Alex, you shouldn't hang up on me, because it's a small world, but... shame on you. That... That's just disrespectful, and I don't disrespect people, and... ah... I wish you all... all the best, but shame on you and ah... I... I... I... I hope you can work on your people skills, 'cause that was just... unprofessional. Bye.
Hm. Hadn't he just pointed out that he wasn't going to represent me? Twice? I felt the need to reply at this point. Maybe because I was so ashamed of myself. Here's what I wrote to Ryu in an email:
Hi Ryu,

"I'm not going to represent you" sounded pretty final to me. Not sure what else you were going to say, but speaking of being unprofessional: "shame on you", threatening me, and to a lesser extent putting me on hold and hanging up on me (yes, you just did that) qualifies as such.

Not representing me is your own personal choice, and clearly I'm not in a position to convince you otherwise. I hope you have a wonderful day, and many new clients.

- Alex S.
Seven minutes later, he replies to my email. Again, verbatim:
I got disconnected because my phone cut out

You were being irrational and the fact you don’t trust me says a lot

Good luck to you and shame on you for these threats
Uh. I'm not sure what confuses me more: the lack of punctuation, the fact that he is accusing me of being irrational and threatening, or the ambivalent last sentence? Either way, I am very, very ashamed of myself.

Sunday, September 22, 2013

What the iPhone 5C actually is.

Photo © Apple.

People, the "C" in "iPhone 5C" stands for "colorful", and not "cheap" or "China" as the Internets are speculating. Apple's website says so, right there in the tagline, so let's end this debate.

A more interesting question is, what is an iPhone 5C under the skin? Simply put, it is an iPhone 5 with a plastic back and a slightly upgraded camera. If you want to get technical, the guts have been reworked, but the components are mostly the same.

But why not just sell the old phone, like they did before? Two reasons. The obvious one is that a redesigned phone will sell better than last year's model. The other potential reason is that Apple is reducing the manufacturing costs by replacing an expensive dye-cut aluminum case with molded plastic. Moreover, the more expensive iPhone 5S uses the same case as the iPhone 5, albeit with three different finishes, so it's quite possible that Apple kept the tooling and the production capacity for the expensive aluminum case exactly the same.

It's nice to see a rounded plastic back making a comeback, though. I've been missing the ergonomic feel of my iPhone 3G for quite some time now. Apple's silicone covers for the iPhone 5C, however, are hideous.

Friday, August 23, 2013

The new Batman movie will star Ben Affleck as Batman, Kevin Smith as Superman, and Chris Nolan as Heath Ledger; directed by Christian Bale and produced by Bruce Wayne.

Tuesday, August 13, 2013

Geotracking Paranoia

An article repost hit Facebook today about the "new hidden threat" of geotagging to your children, along with a short video segment from NBC on the topic. This "news" is spreading like wildfire, so before it gets out of control, please let me intervene.

The video mentions that this concerns "unwitty" users. If you are, in fact, unwitty, here is a couple of suggestions:
  1. Don't have children in the first place. You are endangering their lives every day by being unwitty.
  2. Don't use technology. You clearly don't know how it works or what it does.
If you're unsure whether you're unwitty, or if you're unsure whether you should be legitimately paranoid about geotagging, here are a few questions you could ask yourself:
  1. Did you know that Twitter is a public broadcast service, not a private photo gallery? If you did, you probably already knew that anyone, literally anyone, can read your posts.
  2. Did you know that your photos can be geotagged, and that you can turn that feature on or off at the time of your post?
  3. Can you put two and two together, and figure out that if you publicly post geotagged photos, everyone, and I mean everyone, will know exactly when and where the photo was taken?
  4. Did you know that even if your posts are completely private, the sites you're posting to still have full access to everything you're posting, and that all of that information can be released if subpoenaed by the government?
If you already knew all of that, there is one more question you need to ask yourself:
  1. Does the ability to plot data points on a map scare you?
If yes, you should put at least ten locks on your front door, at least fifteen on the back, board your windows shut, and hire at least two armed bodyguards to stay with you at all times, and also one bodyguard per child to stay with them.

If not, go on about living your life. Your children are safe as long as you're not being a dumbass.

Monday, August 12, 2013

Letterpress Strategies

I've been playing Letterpress on iOS for a while now. It's a great puzzle game; sort of a hybrid of scrabble and chess. If you haven't tried it yet, give it a shot!

Long story short, I got pretty good at it, and I'd like to share some strategies with you. They're somewhat ordered from the most basic to the most advanced. Without further ado, here they are:

If blue takes the "M" tile, Red can
 win the game on the next turn
with "FULLY". 

Mind the endgame.

One of the first and most important things I learned about letterpress is that you could be winning by a hefty number of points, and the next turn you lose the game. Always ask yourself, can your opponent close the board with the next turn after you've made yours? And if so, will they outscore you? Sometimes you will have to purposely not use an open tile, making it less likely for the opponent to use all the remaining open tiles to win the game.

The scores may be even, but blue
has the advantage with three
blocked tiles

Blocking tiles is what matters most.

Even if you just used half the tiles on the board, if you didn't block them off, they can easily turn over to your opponent.

Don't be fooled by the running score. The score only matters at the end of the game. Oftentimes, using shorter words that block more tiles is better that using longer words that don't block as many tiles.

Block corners first. 

Blue blocked off "E", which is the
most commonly used letter in
English. He could've blocked "D",
But there are three of those on
the board.
Corner tiles are the easiest to block, since they only require two adjacent tiles. Sides need three adjacent tiles, and the tiles in the middle of the board need four.
If you have the first turn, try blocking corners on your first move. It will provide for a nice head start. If a corner is already blocked by your opponent, try blocking a different corner.

Block commonly used letters with rarest occurrence on the board. 

Think vowels, especially "E". If there is only one "E" on the board, and it's in a corner, try to block it off. It will be very easy for you to defend, and hard for your opponent to take.

Blue left "Q" for the last turn.

Blocking hard letters. 

Letters that are hard to use, like "Q" or "Z" don't necessarily have to be blocked off. They will be harder (or impossible) to use for the opponent anyway. However, you can also use these letters to either securely block other tiles, or to detract the opponent from blocking his.

Save super-hard letters for endgame. 

Sometimes there is only one possible word you can make with a certain letter, and it's a short word. If you use it too soon, you may be giving your opponent a free turn to block more tiles.

Don't let blocked tiles lead you away from using them. 

If blue needs one "F" in his word,
It's better for him to use the one
that's already taken by his
They won't turn over to you, but they are still very much in play, and can let you make better and longer words. In the example above, Blue can play "QIS" to win the game, even though "I" is blocked off.

Turning over vs. taking a new tile. 

The same letter can often be found on both an unused tile and a tile that has been taken by your opponent (but not blocked). Unless taking the unused tile will block another tile, it is almost always better to turn over your opponent's tile.


Blue has "E" double-blocked.
It's highly unlikely that Red will
ever take it back.
Blocking tiles is good, but blocking tiles that block the said tile is even better. Aim for a solid, continuous block of tiles, rather than blocking on the opposite sides of the board. Sometimes your opponent will want to take a specific blocked tile. A single-blocked tile can be turned over to your opponent in just two turns, but a double-blocked tile is generally not worth consideration.


Unblock the opponent's tiles. Your primary goal is to block as many tiles as you can, but if you think a turn ahead, you can chip away at blocked tiles, and take them in two turns. When you spot your opponent setting up to take a lot of tiles, it's time to turn over the tiles that would allow them to do so. If you can block tiles at the same time, all the better.


Some words have different forms, like plural or past tense. In most cases, the longer form of the word is the one you should use, since the shorter form will then count as having been played, and cannot be used again. For example, if both "RIVER" and "RIVERS" can be played, choose the latter; "RIVER" can no longer be played after you've played "RIVERS". However, there are exceptions.
Both "FRIED" and "FRIES" are
possible. In this case, avoid the
word altogether.

Firstly, if the word's shorter form is not actually part of the longer form,  consider how many tiles can be turned over if the opponent chooses the other form of the word. For example, if you play "STRATEGIES", the opponent can still play "STRATEGY", possibly to his  advantage. In many cases, it is better to choose a different word entirely.

The same goes for anagrams. If you play "USURPERS", the opponent can play "PURSUERS", potentially turning over all of the tiles used in that word. Again, in this case it's probably better to come up with a different word.

Lastly, if a word has more than two forms, like a plural form of the noun and a past tense of the verb, it may be better to play the short form of the word. For instance, if "SURPRISED", "SURPRISES", and "SURPRISED" are all on the board, it may be better to play "SURPRISE", so that if your opponent plays "SURPRISES", you can then play "SURPRISED", thereby turning the tiles over to yourself.

Remember, this mutation strategy is to be used for tiles that you do not block. If you do block them, you needn't be worried about the next turn.

It's not obvious, but Blue can play
"FIZZY" on the next turn to block
four tiles, and also unblock
Red's "S"!


This is an advanced strategy that requires you to think both about your opponent's next turn and about yours. I use this when there are no good ways to block off many tiles in a single turn. The trick is to make two words to be played: one that would be hard for the opponent to turn over, and a second word that will "fill in" the adjacent tiles and block a number of tiles. This is quite hard for the opponent to defend against, unless they guess what the second word is, or can otherwise block the tiles you're after.

Review the word list. 

You never know when someone missed a word form, or when you can think of a combination of two words already on the list, or just use the list as a reminder of possible prefixes, suffixes, and endings that help you form longer words.

Write down words that you think of.

Say you've thought of a nice long word, but it doesn't make the cut for the current turn, because it doesn't block enough tiles. Save it for a later turn. This is especially useful if you're playing several Letterpress games at once.

Last but not least, be vigilant. 

If your opponent makes a mistake, like not going for the plural, use it as an opportunity to undo their turn. And remember, winning with a score 13-12 is still winning!

Wednesday, July 31, 2013

How to prevent your car from catching on fire.

© Jane Tuv
Apparently a van caught on fire this morning in Flatiron, Manhattan. No one seems to have been hurt, thankfully.

This made me recall a few times in my old driving days, when the cars I drove had something seriously wrong with them. So in response, here are a few tips that will keep your car from catching on fire:

  1. Watch your temperature gauge. It should hover in the middle once your car is warmed up. If it gets significantly past that, pull over, shut the engine off, open your hood, and let your car cool down before trying anything else.
  2. It there's a gas station, an auto parts shop, or any kind of an auto repair shop nearby, consider getting some coolant/antifreeze. Most problems with overheating I have had in the past were from low coolant levels. Your coolant tank will have a max fill line, so top if off if necessary. If there's a coolant leak, you may have to do this several times until you get to a repair shop.
  3. If you smell raw gasoline, and you're not near a gas station or a tanker, pull over, shut the engine off, get out of the car, and move away about a hundred feet. Then call a tow truck.
  4. If you see black smoke coming out of your engine compartment, do the same thing as in the step above, only faster, and call 911 instead of a tow truck.