HNHacker News
TopNewBestAskShowJobs

stevenwei

1,314 karma · joined January 21, 2010

Co-founder of Hindsight Labs. We make Paprika Recipe Manager for iOS/Android/Mac/Windows.

Email: steve@stevenwei.com

submissionscomments
stevenwei··on Hollow Icons are Bad
The red lines indicate areas where cognitive load is occurring. Your brain traces the shapes on the first row an average of twice as much. Your eye scans the outside shape and then scans the inner line to determine if there is value in the “hollow” section.

Icons without this empty core are processed as definite and only the outer lines are processed. Depending on the outline of the shape, this happens pretty fast. No matter the shape, though, the hollow icons take more time to process.

I'd like to see an actual study to back this assertion up. The article makes an off-hand reference to something about how the brain processes the reading of words, but 1) I don't see how that maps to how the brain processes icons and 2) there's no reference cited for that either.

stevenwei··on Introducing Flask-Sockets
Thanks for this. A few months ago I looked into getting gevent-socketio up and running to do real-time messaging between a Flask app and an iOS app. gevent-socketio provides event handling and a messaging protocol on top of websockets that I thought would be useful.

However, based on my testing, in its current state it's nowhere near ready for production. There are some serious bugs relating to memory leaks, improperly closing stale sockets, and deployment on Gunicorn with # workers > 1 is not currently possible. (And in practice I don't think you would want to deploy on anything besides Gunicorn.) The project also seems to be somewhat inactive, there are a lot of open critical issues and there hasn't been any real activity in the last 6 months or so.

At this point I am considering removing the library and using a straight websocket implementation with a simpler protocol instead.

stevenwei··on Introducing Flask-Sockets
Have you put this into production? Are you using Gunicorn on the server?
stevenwei··on App Store Pricing: Worth Less than a Cup of Coffee
I notice that at no point in this process is actually paying for anything mentioned...
stevenwei··on Why do people hate CrossFit?
I'm sorry, but this is is the biggest list of strawman arguments I've ever seen. People dislike CrossFit because elite CrossFitters are perfect physical human specimens and they're jealous? Huh?

Here are the real concerns with CrossFit:

1. Incredibly poor quality control across affiliates means that a lot of instructors are not well trained in teaching how to do mechanically complex lifts to participants that have never done them before.

2. Which leads directly to increased rates of injury amongst participants trying to perform too many reps of the same exercise using too much weight causing their form to break down because their instructors are not paying attention to them. The culture of CrossFit exacerbates this by encouraging you to push yourself beyond your limits...and potentially beyond what is safe.

Now, if you luck out and end up at a good CrossFit gym with good instructors you might not ever experience these problems. But that's the issue. How do you, as an untrained athlete that has never done a power clean before, determine whether or not the instructors at your gym know how to properly teach them?

stevenwei··on If your business depends on Flash, have an exit plan ready
I spent a few years doing Flash/Flex development back then as well. I don't know if this was ever a problem for you, but I always found Flex to be, well, kind of slow.

All that data binding and event bubbling was convenient for the developer, but you certainly paid a price for it at runtime. Most of the Flex apps I encountered during that time period (even very simple ones) just seemed to run so sluggishly. That type of user experience might have been okay for internal corporate type applications but I never really found it suitable for the web. And of course on top of that you had to deal with the SWF loading times too.

Flash/Flex definitely had its time in the spotlight but I can see why it ended up dying out.

stevenwei··on Confusing UI in iOS7
* The worst thing about all this icon frenzy to me is that they often even take up more space than text that could descripe their function. *

That highly depends on the language that you're using... Having localized our app into 16 different languages I've found that there are many languages where the text simply does not fit into the allotted space. In those cases I think using icons are a lot more effective than a bunch of ellipsized text.

stevenwei··on CrossFit's Dirty Little Secret
Wait, they're not a franchise model? What is required for someone to open up a gym using the Crossfit name?
stevenwei··on The decline of BlackBerry in one chart
I would love to see a chart with a scale using absolute figures (# of devices sold) instead of percentage market share.

I am more curious just how much bigger the market became post-iPhone.

stevenwei··on How I thought I wanted to become a digital nomad
I think the 'digital nomad' lifestyle is an interesting one and definitely worth experimenting with (especially for folks in our industry who truly can work from anywhere in the world), but it is hard to sustain over time.

If you're trying to get stuff done though, I think a good strategy is to pick a place and stay there for a few months, rather than being 'on the road' and traveling around from place to place. You can still be 'location independent' by renting an apartment for 3 months in a foreign country (like the Costa Rica example that was on HN a few weeks ago). But at least then you'll have more of a sense of routine, waking up in the same place every day, and because you have a full 3 months to explore the place, you won't feel as obligated to rush out and see the sights all the time.

It also really helps to be able to set yourself up in an office with an ergonomic chair, external monitors, and proper mouse/keyboard. That might be a bit more difficult to do if you're in a foreign country, but you can definitely buy used and sell again when you leave.

stevenwei··on Life of a Tech-nomad.
I spent 2 years programming on a 13" Macbook Air while traveling...it was doable, but I'm definitely a lot more productive now with a pair of 27" monitors! (Still plugged into the MBA though.)
stevenwei··on In defense of Core Data (Part I)
Despite it's flaws, I have found Core Data to be quite necessary when working with iOS database driven apps, as it provides some rather crucial functionality that would otherwise be lost (or need to be manually recreated) when working with raw SQLite. Concurrency support (as mentioned) is one such example.

Another important function is the support it provides for object change tracking. As your objects are modified, Core Data will dispatch the relevant notifications so you can keep your views updated with the latest changes. If your objects can be updated from multiple places (say, multiple areas of your UI, plus changes occurring in a background thread if you're importing in bulk, or syncing data to a web service), you'll need some way to react to these updates efficiently. This is something that Core Data provides out of the box that you would otherwise have to handle manually, and refreshing the UI in real-time to database changes is something that is mandatory in any modern app. NSFetchedResultsController takes this one step further by determining which changes are relevant to your table view or collection view and inserting/removing/updating the correct cells as necessary. And it does so efficiently which is incredibly relevant on mobile devices. (Note that ContentProviders on Android have similar capabilities for notifying you when a particular object is inserted/updated/deleted. I prefer the Core Data approach as it actually tracks specifically what has changed.)

That said, Core Data is not without it's flaws. I find it somewhat overengineered in some areas and rather lacking in others. For example, the 'abstraction' of Core Data backends is a weakness rather than a strength. In practice, I would wager that 99% of people using Core Data are using it with the SQLite backend. Having to cater to the existence of an alternate XML backend means that certain actions can't assume (and hence take advantage of) SQLite specific features. For example:

- The inability to issue bulk updates or queries. Instead of doing a DELETE FROM x WHERE y, you have to iterate through all the objects you want to delete or update. This can be slow.

- If you need to do anything custom in a migration, it would be great to be able to write a SQL level migration script instead of going through the extremely cumbersome manual migration process.

Additionally, the recently added concurrency options are still missing support for a very common use case: running your initial fetch on a background thread, and then populating a table view with the objects you just fetched. This is technically possible to do but not very easy, as you can't safely pass managed objects between thread boundaries without a bunch of extra work, and not supported by the native NSFetchedResultsController so you lose the ability to use that. (Again, to compare to Android, their loader framework makes doing background queries very easy to implement.)

Overall I think Core Data is a huge plus for iOS/Mac developers but there is definitely lots of room for improvement.

stevenwei··on What happens when you sit at a desk for 13 years and also exercise
Unfortunately, as people who are tied to their computer screens for most of the day, we have very few options.

Treadmill desks have been growing in popularity lately for this reason.

stevenwei··on What happens when you use a standing desk for two years
I also purchased an adjustable desk base from The Human Solution back in March. I paired it with a 73" x 26" kitchen countertop from Ikea.

I also put my monitors on an Ergotron dual monitor arm (http://www.ergotron.com/tabid/65/PRDID/355/default.aspx) so I can adjust the height of the monitors for sitting vs standing.

Overall I'm quite happy with the setup.

stevenwei··on Why The Tech Industry Is Ruining SF
The same can be said for basically any country and it's native cuisine. E.g. sushi in Japan.

That said, in my experience the US does other countries' cuisines better than most. By that I mean Italian food in the US is much better than Italian food in Japan.

stevenwei··on Yahoo Has Acquired Rockmelt, Apps To Shut Down On August 31st
Many startup employees will work for Yahoo for $150K/year if all their favorite coworkers are working for Yahoo and they get to work on a product they're familiar with.

That seems at odds with the fact that most of these companies products are immediately shut down when the acquisition is announced.

stevenwei··on Two Stories of Passive Income Excess
But if you choose to wake up and do nothing, how long is that income stream going to last?

I think with the tech industry in general, things move along too quickly for these types of 'passive income' to be stable for more than a few years. After a while, if you're not keeping up with the changes, the stream will die out. Unlike, say, passive investments in the stock market (although there's more volatility there, of course).

stevenwei··on Using Nginx and UWSGI
I've been running Nginx + uWSGI for a long time but recently switched over to Nginx + Gunicorn for Gevent support, and so far it seems to be working well.

Gevent's monkey patching approach allowed me to convert a traditional blocking web app (built on Flask/SQLAlchemy) into an evented model without having to rewrite the entire app around an event-driven approach (ala Twisted or Tornado). All you have to do to get Gevent working with Gunicorn is to pass it a command line argument to use the Gevent worker instead of the default synchronous worker.

Gunicorn + Gevent also makes it quite easy to integrate WebSockets into your existing web app, which is something uWSGI doesn't handle very well yet.

All this is to say that though uWSGI is a very solid piece of software, Gunicorn is definitely a reasonable alternative to uWSGI depending on your use case.

stevenwei··on The lack of proper “alter table” support in SQLite
It's probably relevant to note that both Android and iOS ship with SQLite as the de-facto database storage engine, so there's very much a use case for having reliable in-place migrations in SQLite on modern software.

I could certainly see the value of having more robust ALTER TABLE support in SQLite itself, and I don't find the argument that such functionality will go unused very convincing. In real world scenarios almost everyone is going to have to migrate at some point, and the easier this is to accomplish, the better.

stevenwei··on Zynga to Lay Off 520 Employees and shutter NY and LA Offices
It's really casual gaming that's suffering from this: folks are switching from playing those types of games on Facebook to playing them on their phones.
stevenwei··on Too scared to write a line of code
Yes. To add to that:

Sometimes you'll want to plan ahead because the nature of the problem means you'll have a harder time cleaning things up later.

Other times, you want to move quickly because creating castle-in-the-sky architectures is not the best use of your time (especially if it becomes paralyzing).

Experience helps you determine which type of situation you're dealing with.

stevenwei··on Steve Jobs emails that show how to win a negotiation
The Paperwhite really is a fantastic reading device: the e-ink works perfectly under sunlight and the backlight works perfectly in the dark. The only thing I don't like about it is the touchscreen interface can be rather clunky/slow to use.

Also, I can't help but feel that e-ink and LCD displays are going to converge in the not-too-distant future, and at that point there won't be much reason to buy a Kindle over an iPad anymore.

stevenwei··on Aaron Greenspan sues Facebook, Sequoia, Andreesen, YC, others
It seems really odd to me that AirBnb is being included in this list.

    57. Defendant Airbnb, Inc. allows its customers to rent the homes of other
    customers for varying durations, in lieu of a hotel. To process each 
    transaction it holds onto the customer’s funds, and remits those funds
    to the property owner at the conclusion of the stay, minus its fee.
Well, okay, but wouldn't this apply to every company that acts as a marketplace between buyers and sellers?

Is the point of this to show the absurdity of the scope of the Money Transmission Act?

stevenwei··on Eighteen months of Django
I think the standard method of dealing with this is to have your users upload the items to the local web server and then have some sort of async task or cron job responsible for moving the files to S3 later on.

Of course this means you'll have to keep track of where the uploaded file is currently located, but if you ever want to scale to multiple web servers you'll need to do that anyway.

stevenwei··on Use a Software Bug to Win Video Poker? That’s a Federal Hacking Case
> Let's say I run a casino and accidentally set up a modified game of blackjack where the odds favor the customers instead of the house.

There's a rather interesting story about this:

http://www.theatlantic.com/magazine/archive/2012/04/the-man-...

stevenwei··on Meet Mr. Money Mustache, the man who retired at 30
It's fairly self-evident that some places are cheaper to travel (SE Asia, South America) than others (Western Europe, Japan).

Most 20-something backpackers choose to travel to places like SE Asia precisely because it is cheaper.

It's nice to be able to do a mix of both though, there are definitely interesting and worthwhile places to visit that are also unfortunately more expensive (Japan comes to mind!).

stevenwei··on Meet Mr. Money Mustache, the man who retired at 30
> It all depends on where you live. I doubt where he lives (Longmont CO) is that expensive. There are plenty of places in the USA where 25k will go a long way.

Yeah, but that's one of the constraints I'm talking about. There are many worthwhile places to live on the planet that would be out of that range.

> I don't get why people on here are so negative about it. Don't be bitter because you live in the valley and spend 2k+ a month just for a crappy apartment.

I'm not and I don't. :) He just happens to be espousing a (rather extreme) philosophy that I disagree with, and I think people might want to think twice before following in his footsteps.

I agree with you that people that spend so much time at work that they don't have time to spend with their family should probably think twice about that too. Just because I said I disagree with one extreme doesn't mean I agree with the other extreme!

stevenwei··on Meet Mr. Money Mustache, the man who retired at 30
While I do think there is value in aggressively saving and reducing unnecessary expenses (avoiding excessive 'lifestyle inflation'), I can't help but feel that MMM has taken it too far to the extreme. There are tons of interesting and worthwhile experiences out there that you're going to miss out on if you intentionally constrain your budget to $25k/year for the entirety of your life.[1]

There are folks here who have achieved true financial independence by building and selling companies or producing 'lifestyle' businesses that continue to churn out cash without much daily involvement. I find stories of their experiences much more valuable (and educational) than someone who has simply moved the goalposts closer.

[1] Not to mention that doesn't leave a lot of breathing room if you run into an unexpected, expensive emergency situation (e.g. medical expenses).

stevenwei··on Researchers Finally Replicated Reinhart-Rogoff, and There Are Serious Problems
QE1 ran from Nov 25, 2008 to Mar 31, 2010. QE2 ran from Nov 30, 2010 to June 30, 2011. QE3 started Sep 13, 2012 and hasn't ended yet.

(Honest question here) I'm curious when we should expect to see the huge inflation created by the QE program, and why we haven't seen it yet if it began nearly 5 years ago...

Am I missing something?

stevenwei··on Why iOS Devs Should Consider Using Core Data iCloud sync

  iCloud can resolve this problem by letting your users edit data offline and 
  resolving any merge conflicts automatically (and in the case of iCloud Document
  syncing, giving you some options to get feedback from the user to help resolve 
  the merge conflicts). If this worked seamlessly, it would add great value to
  your product. 
If it worked seamlessly, which it doesn't. Conflict resolution is very application specific, I'm not convinced that a one-size-fits-all automated solution will ever be able to handle the edge cases as well as the original developer, who has intimate knowledge of the problem domain and the structure of the data to be synced.

  App Store Features: you might get featured by Apple on the App Store for using
  their latest, greatest technologies.
Don't think this is relevant for iCloud anymore. Besides, Apple has featured tons of apps that do their own proprietary sync or use Dropbox for syncing. (e.g. Evernote, Omnifocus, 1Password). The quality of the app is much more significant than the APIs it uses.

  Future Plans to move to Android / Web: a legitimate concern. But why not wait
  till your iOS product has grown big enough to have substantial demand for
  Android and/or Web, and develop your custom back-end solution then?
Migrating your user's data off iCloud one year later is going to be a massive, massive pain to deal with. And database syncing is not like file syncing, it won't be trivial to integrate another syncing mechanism into the application. Things will start to get quite messy if you also want to interleave iCloud in there for backwards compatibility.
← PreviousPage 2 of 14Next →