What it’s Like to Ride the $900 AAA Discounted Amtrak Sleeper on the Sunset Limited

I don’t know if I could manage being stuck on a train for ~36 hours but it looks like a fun experience.

Linsoa

Inspired by Derek Low’s account of What It’s like to Fly the $23,000 Singapore Airlines Suites Class, I humbly offer my First Class travel experience on the Sunset Limited powered by Amtrak. 

In 1894, Southern Pacific Railroad Company introduced service from New Orleans to San Francisco by way of Los Angeles on the Sunset Express. It was the most luxurious class of travel at the time and was outfitted exclusively with Pullman sleeper cars, no coaches.

Screen Shot

In 1971, Amtrak took over servicing this route and renamed it the Sunset Limited. The train now begins in New Orleans and ends in Los Angeles with two classes of service.

Reserved Coach:

Screen Shot

“First Class” with three different room configurations. Below is the “Roomette” which we booked:

Screen Shot

We started our ride on Saturday, December 27th @ 9am in New Orleans. We booked a ticket from New Orleans to Tucson, Arizona set to arrive @ 7:45 pm on…

View original post 628 more words

(Sour) Lollipop

I’ve been running Android 5.0 (Lollipop) on my Nexus 5 for a few weeks now and my overall frustration is rising. The new Material Design paradigm is really nice but the amount of UI movement feels a bit overwhelming.

My biggest problem is performance, though. Media will stop playing all of a sudden (I’ve had Google Play Music and Pocket Casts just stop in the middle of a track). Apps will just crash and drop me on the home screen (without a post-crash prompt). Tapping the home screen gas a considerable delay. As does tapping the app drawer. Battery life is also terrible (I usually can’t last a full “work day”).

I’ve found the turning off Chrome’s new tabs as apps feature (which seemed like a nice idea but the execution is just confusing) has helped a bit but overall the system is still struggling.

Here’s hoping 5.0.1 fixes these 🙏.

Posted from WordPress for Android

Books

Madison knows what she’s talking about:

The world needs books. What would the world be like, without books? They fuel our mind like cars and gas. The cars can’t go without gas. Our brains can’t go without books. The world, needs books! We — need books.

(via Post Nation)

golang: Error Checking

There’s a problem with the error checking in this go function:

func GetObjectById(id int64) (o *Object, err error) {
    obj, err := dbmap.Get(Object{}, id)
    if obj == nil {
        return o, errors.New("Object: not found.")
    } else if err != nil {
        return o, err
    }

    return obj.(*Object), nil
}

The docs for gorp state that DbMap.Get will return “nil if no row is found”, so we’re watching for that condition and handling it appropriately.

The problem is that if DbMap.Get returns an error, the return value will still be nil, but because of the order priority in our if/else if clause, we’ll never get to the error check condition. This caught me off-guard yesterday (because of an unrelated database error).

Lesson learned: if a function returns an error, it’s probably best to check that first.

    obj, err := dbmap.Get(Object{}, id)
    // Check the error first!
    if err != nil {
        return o, err
    } else if obj == nil {
        return o, errors.New("Object: not found.")
    }

Memory Cache

The Google App Engine Docs pretty succinctly break down when and when not to use a memory-based cache like memcached.

One use of a memory cache is to speed up common datastore queries. If many requests make the same query with the same parameters, and changes to the results do not need to appear on the web site right away, the app can cache the results in the memcache. Subsequent requests can check the memcache, and only perform the datastore query if the results are absent or expired. Session data, user preferences, and any other queries performed on most pages of a site are good candidates for caching.

Memcache may be useful for other temporary values. However, when considering whether to store a value solely in the memcache and not backed by other persistent storage, be sure that your application behaves acceptably when the value is suddenly not available. Values can expire from the memcache at any time, and may be expired prior to the expiration deadline set for the value. For example, if the sudden absence of a user’s session data would cause the session to malfunction, that data should probably be stored in the datastore in addition to the memcache.

This is something that comes up very often when working with clients on the VIP Team, as the general thinking tends to be that adding something to a cache will magically fix performance problems (which is not true).

How to find good ice cream

Most dessert beginners will rely on Yelp or Foursquare to find the very best ice cream in a city. But when you become a dessert connoisseur… there are a few tricks of the trade in discovering the best ice cream in a city.

1. Delicious smelling waffle cones are always a great first sign.

2. Simplicity in toppings. You have to have the basics and maybe a few highlight items, but if they offer everything under the sun, that’s a bad sign.

3. A diversity of patrons — not just hipsters or tourists, a solid ice cream place is fun for the whole family.

4. Colorful. No one likes a boring looking ice cream shop.

5. Listen to your gut. Instincts are critically important in picking a good ice cream place.

*And remember: No frozen yogurt, ever.

Irony

Delivery to the following recipient failed permanently:

inbox@google.com

Technical details of permanent failure:
Google tried to deliver your message, but it was rejected by the relay

[…]

The error that the other server returned was:
550-5.2.1 The user you are trying to contact is receiving mail at a rate that
550-5.2.1 prevents additional messages from being delivered.

The invitation address for Google’s new “Inbox” service is having a little trouble with email. “The ironing is delicious.” 🙂

(I did receive a confirmation of my invite request a little later, but it’s still funny 🙂 It also looks pretty cool.)