Categories

Tokyo: Parting Thoughts

Tokyo is a city of wonders and isolation. I wanted to wait until I left to write this up, because I didn’t want to besmirch the city. Keep in mind, I had the highest hopes for Tokyo, and expectations are everything.

Tokyo is clean and modern, perhaps more than any other city I’ve been in. What was interesting was how something had to go wrong for me to realize that everything was going right. While walking near the prime minister’s residence, I smelled something bad. Was that… the sewers? Yes, it seems so. In Bangkok, you are constantly walking past a sewer that had become ripe, but that was the only time it happened in Tokyo. Someone beeped, and I realized that unlike Cebu, people aren’t doing that constantly. The weather predictions were accurate. In Bangkok and Cebu, not once was the current weather report correct with regards to precipitation, much less what would happen in a few hours.1 A train is a minute late. Huh, that never happens. Unfortunately, the biggest timing problem in Tokyo was the cherry blossoms arriving 2 weeks early, followed by rain and powerful winds, ruining my chance of seeing them on all but one tree. Thus were dashed by dreams of walking around Yoyogi Park while listening to Cherry Blossom Girl.

Of course, it’s also a city where art meets technology, quite literally in places like Akihabara. Streets are filled with electronics, manga, anime, and trendy clothing and cosplay shops. Girls walk around in French maid outfits and cosplay costumes to entice you into their themed cafes. There’s even a real robot shop. In Shinjuku station, I needed to find a micro-USB cable. I saw a sign for a Bic Camera. Well, maybe a small camera shop might have it. Turns out, it’s not a small camera shop. It’s 9 stories of electronics, with a Tully’s Coffee a few floors up like Everest base camp. Another wonderous place of art and technology is the Ghibli Museum, with intricate artistic installations.2

And the food, of course, was great. The first surprise was how cheap it was. Takeout bento boxes, and even a pizza at a sit down restaurant, were $5-6. The freshest sushi possible at Tsukiji fish market (the world’s biggest) was the best I ever had, yet only cost $40 for a breakfast set.3 My Kobe beef dinner was admittedly the most I’ve paid for a meal, but this was an 8 course kaiseki meal, and the steak and Kobe beef sushi was the best beef experience of my life.

Perhaps the most delightful experience came when I would see someone walking on the street wearing traditional Japanese clothing, such as a kimono and tabi. It was like I was witnessing a little act of magic. As if they wandered through a hidden gate in time and are passing through our world for a moment. Sure, you spend any length of time in NYC or LA and you’ll see people in costume, but it’s not the same. You know what’s behind the curtain. There’s no depth to the experience on the part of the observer. Yes, I know my bliss is due to ignorance, but I’m OK with that. That store with the samurai swords and armor that nobody ever visited? That store is for them, when nobody’s looking.

That said, it was for me a very lonely place. To start with, my Japanese was horrible. A big part of that was my method of language acquisition, which I’ve since improved. However, even if you can communicate your needs, you will have trouble understanding the response. Remember, there are many, many ways to answer a question, and whatever course or software you are using, it probably only teaches one of them. If your conversation partner doesn’t use that, you are out of luck. Despite what I was told about the younger generation speaking English, I found that to be exceedingly rare. And even the expats are there to learn the language and practice it; they’re not interested in speaking English with you. I probably would have had better luck in Roppongi, the main expat neighborhood.4 However, as it is frequented by out of town executives, it’s one of the most expensive areas, perhaps second to Ginza.

The other big shock to my system was the way strangers acted toward one another. Japanese people have a famous reputation for courtesy and politeness. This is true for anyone they have the slightest formal relationship with, including people who just walked into their store. But on the street, it’s a different story. I had just come from Bangkok and Cebu, where I was constantly smiling at people and having that returned. In Tokyo, nobody even looks at you. In rare cases where they did look at me, and I’d smile or nod in their direction, they did not return the gesture. Well, once someone did, but gave such a forced performance it was like I had trapped her in some social obligation she was desperate to get out of. I started off in the land of smiles and ended up in the land of surgical masks.

Please note, I am not playing the gaijin card here. Nobody is smiling, or looking at, or making small talk with, anybody, regardless of race or ethnicity. Well, obviously, they are with their friends, but I’m not talking about that. I’m talking about simply acknowledging the existence of your fellow man. A friend said that there are a lot of lonely people in Tokyo. Like any big city, people come from elsewhere to work, even if they have no support group. This has given rise to places like maid cafes for otaku (the geeks), which are actually quite chaste, but you pay a cover charge for girls to chat with you, and more money to play board games with you. For the adults, there are hostess bars, and even host bars. These are basically bars where you buy attractive people drinks so they will talk with you, and walk out with a bill for hundreds or even thousands. In fact, one of the sources for hostesses are women who have become addicted to host bars and need to work as a hostess part time to support their habit. When you combine this with insane work schedules by western standards, you start to see why depression – and the very taboo subject, suicide – is a serious problem in Japan.

I certainly do not regret visiting Tokyo, but in hindsight, it’s the first place where I would have been better off as a tourist than as a resident. Planning an activity packed week or two would not have given me time to notice the dark side. It would have also saved me a bundle.

  1. It was clear in Cebu that nobody even bothered checking. They just looked up at the sky and made an educated guess about the next few days. []
  2. Note that the museum is very kid friendly, but not English friendly. Guides speak it a little, but all signage is in Japanese only. []
  3. This was Daiwa Sushi. Bit of a wait, but nothing compared to the 3 hours for Sushi Dai next door, and by all accounts Sushi Dai is only marginally better, if that. []
  4. I was in Hatagaya, a residential neighborhood. It was extremely walkable, though. []

Web Framework Performance Benchmarks

This is making the rounds and is pretty interesting:

http://www.techempower.com/blog/2013/03/28/framework-benchmarks/

My framework of choice, Grails, doesn’t look spectacularly fast, although I already knew that. However, it is nice to see that it is notably faster than RoR (which appears to be a complete dog) and Django, and will probably improve quite a bit with v2.2 on  Groovy 2.0 and Java 7.

However, it seems a big part of the performance lag is because it’s built on Spring, and to my surprise Spring isn’t a great performer, either. It is nice to see that straight up Servlets and Vert.x are beasts, so another score for our dear JVM.

Another thing that caught my attention is that Grails’s ranking improves quite a bit once you move it from EC2 to dedicated hardware. IaaS and PaaS save you some admin work, but also costs you some dev time, but at some point it looks like you’ll get a nice gain from dedicated hardware. It could make something like Rackspace managed hosting on dedicated hardware look reasonable.

With the attention it’s getting, I also expect a shakeup as framework providers help the benchmarkers improve performance. It will be interesting to see how this plays out.

Cebu City: First Impressions

I’ve recently arrived in Cebu City, Philippines. My impressions of the city are colored, of course, by living in the US, but also by spending the previous 2 months in Bangkok. Here’s what struck me.

Arrival

Touch down in Manila (MNL), but almost didn’t make it as Kuwait Airlines in Bangkok (BKK) wouldn’t let me leave without printing out my ticket OUT of the Philippines. I thought this was a bit much considering I already showed all that to the Philippines consulate when I had the visa stamped in my passport. Combined with the 45 minute wait to check in (computer problems?), I was definitely glad I got there early. I’ll admit when I got to Philippine immigration there was a sign listing what you needed, and it did include your flight out. However, they did not ask for it; I’m pretty sure that’s only for people flying in without a visa, in order to get the 21 day temporary visa.

To be honest, I realize I was making a lot of assumptions based on years of flying in the US. For instance, that I would have internet at the airport to grab my plane ticket emails, or that all I needed to check in was my passport and flight number. Those things turned out to be true, but better safe than sorry. Another discovery was that US airports seem to have a common navigation cues and signage, if not layout. I never worry that I’m headed in the wrong direction at a US airport. I’m confident there will be at least a couple small food/drink vendors in the gate area. I don’t even realize I’m making these assumptions, but going through BKK and MNL, those assumptions turned out to be false. There, I was always surprised I actually made it to my intended destination.

After getting through immigration, it was a shuffle to make my connecting flight to Cebu (Mactan). On a whim, I decided to change my Thai baht for Philippine pesos near the MNL baggage claim. I say on a whim because I figured I’d do this, and hit the ATM, at CEB, my final destination. That would have been a mistake, as I had to take the airport shuttle to the domestic flight terminal, and that shuttle isn’t free! It’s dirt cheap at 20P ($.50), but they collect it right before leaving so would have had to jump out and hit an ATM if I had no money, holding up the bus. It occurred to me that I should have changed my money in Bangkok. Lesson learned.

More assumptions dashed upon getting to my serviced apartment. Based on my last 2 places, I expected it would have some of the basics, like towels, soap and shampoo, hangers. And oh, I don’t know, maybe toilet paper? No on all accounts. Everything else about it is quite nice and new, but I was not expecting to have to walk around an unfamiliar neighborhood at midnight looking for TP.

The City

As I walk the streets, I’m brought back to my childhood. See, when I was a little boy, my parents would take me to the Point Pleasant boardwalk, where my favorite ride were these little vehicles (cars, motorcycles, etc.) that would go around in a circle, like a futuristic merry-go-round. It was my favorite because there was a button you could press that would light up the car and emit beeping/buzzing sounds. I pressed this button a lot. Not continually, but almost, stopping just long enough to verify that it wasn’t stuck, and still under my control. The drivers here apparently never outgrew that, because they are constantly beeping. “Can I get over?” “Sorry, I’m getting over.” “Coming round a corner” “Hey, it’s another car!” I am partly to blame, because a lot of the beeping is from cab drivers, who alert every single pedestrian they pass that they are available for hire. On the plus side, no matter the time of day or night, I don’t have a problem getting a taxi, and on average it’s $2 each way with tip. Like in Bangkok, the rip out the seatbelts,1 but unlike Bangkok, they don’t try to rip me off. No argument about how traffic sucks so bad that it will take 30 minutes (in truth, 10), so if they turned on the meter, their children would starve that very night. Meter goes on every time - callooh calay!

Walking, by the way, is a contact sport in Cebu. To say the pavement and sidewalks are uneven would be doing them a kindness. You have to look down where you’re about to walk, that’s for sure. But you also have to look up! Otherwise, you’ll walk into a sign, telephone pole, fence post, or tree, which are all planted randomly in the sidewalk. If you want to cross the street, you’ll want to do it at a lighted intersection, but good luck being near one of those. You’re going to have to jay walk, because it can be a couple miles between lights. Also, I was told the street I live off of, while a 4-lane “national road,” is not considered a main street. This means there’s no traffic enforcement. Sometimes I feel it’s easier to hail a taxi and pay him a dollar to take me across the street.

The other thing I notice walking around is that there are a lot of roosters here. The roosters are quite intent on making this known to everyone within cock-a-doodle distance. I passed 2 roosters on my 1 mile walk to the mall. Sadly, I hear this is due to a major national interest in cockfighting, and if I was on a short leash or stuck under a cage, I’d be upset, too.

Malls

Yes, shopping malls get their own section, especially when a NJ mallrat does the reporting. Not to mention that Cebu *City* is rather suburban and this is a big deal here (I’m there almost daily).

When I get to the nearest mall (Ayala Center), the first thing I notice is a security guard. No, not the one manning the metal detector. Not the one with the wand, nor the one doing the pat-downs.2 The one I noticed was the one carrying a machine pistol. Inside, I notice a guard in an electronics store is armed with a revolver. OK, expensive merchandise. But then I see another at a book store. Then I notice that almost all the guards are armed with pistols.3 I say almost because I recently noticed guards without them, but they still have holsters. The holsters have washcloths in them, presumably for emergency, tactical brow wiping.4 I figure the guns are there to stop (or more likely, deter in advance) any Mumbai-style terrorist act at the mall. But upon continued observation, I see that all the guards in Cebu City are similarly armed, and they are everywhere. Walking around neighborhoods, your in front of your local bakery, etc. I’m not terribly bothered by this until I ask one a question and they don’t really understand me. Most people here have an excellent command of English, but I really want the people with the guns to have a crystal clear understanding of everything.

By the way, at the Marriott (considered a 5 star hotel here), I saw an SUV’s undercarriage carefully checked with a large mirror for bombs, while a K-9 unit hung out on standby. And you thought the mall was secure.

The mall itself is huge and sprawling. A couple city blocks and 4 floors. The other local mall is the same way. At each entrance they have a high-tech touch screen directory. Sometimes it displays the map, sometimes the Windows logo.5 After you’ve wandered past the entrance, good luck finding what your’e looking for, because the budget for directories was spent. There’s also a concierge desk if the directory is broken, but I wish they spent the money on an Android app, or just let me buy a paper map.

Like in Thailand, employment here is high. By “here” I mean the mall, not the country.6 Individual establishments hire way more employees per square foot than American ones do. At a department store, practically every display or shelving unit has its own attendant. Even small food stands and kiosks have three employees, all diligently engaged with their phones, tablets, or netbooks, and none too happy to serve you. My hunch is that if you had fewer employees, you could pay them more and give them more work to keep them engaged, but it’s a cultural thing to maximize employment, like France’s 35 hour (or less) work week.

Food

Once again, I saw many western/American chains. Starbucks, SBC, CBTL (can you tell I’m a big coffee drinker?), DD, McD, KFC, Pizza Hut, Cinnabon – the list goes on. But in addition to that are a number of much smaller brands, like Sbarro and Shakeys. Yes, Shakeys. If you’re here, hit  Bo’s Coffee, known for its freshly roasted beans. I don’t know why, but CBTL is pretty inferior here by both American and Thai standards.

Not surprising given its history, I see more American expats here, whereas in Thailand the Brits and Aussies took the lead. I even found a restaurant called Army Navy that sells Freedom Fries to accompany their burgers and burritos.7

The supermarket has a few interesting quirks. First, they play dance music. And I don’t mean “upbeat” or “dance-y.” I mean music you’d hear at a rave or a club in LA. It felt like a movie soundtrack, and as I wandered the aisles I pretended I was looking for Sudafed to pass off as drugs like to ignorant high school kids. What I was actually looking for was vitamins, which they don’t sell, which is surprising since the food here doesn’t seem terribly nutritious. A lot of it is just meat and white rice.

So on the way home I hit the pharmacy/convenience store on the corner and asked for Centrum. They replied, “How many?” Um, a bottle? “No.” OK, back to the mall! Stop in GNC, they want an exorbitant price for vitamins. Well, when in Rome. I went to the pharmacy and they filled my order for 30 Centrum multivitamins. Also absent, much to the lament of this lazy single guy, are frozen or prepared meals. OK, one high end supermarket at the mall had Marie Calendars Salisbury steak dinner for $10, Hot Pockets for $7. To put that in perspective, I went to a nice steakhouse and got braised oxtails, garlic rice, vegetables, and bread and paid $10 with tip. Average restaurant meal is $5 with tip. So who the heck is buying Marie Calendars for that kind of money? I’m guessing rich Americans with little time on their hand. Luckily, my apartment manager explained that most just order delivery, since many restaurants are open 24 hours, and motorbike delivery is fast and cheap. BTW, I thought I might just get some eggs for breakfast, but also like Thailand, they don’t believe eggs are something you keep refrigerated. Maybe that’s why the yolks here are kind of red-orange? Could also be the breed of hen, but I can’t bring myself to buy them.

Anyway, as I was about to tell the cashier that the in-store DJ deserves a raise and promotion, she suddenly stopped working and looked down. Then I noticed everyone stopped, including the music, in order to broadcast a Catholic prayer. I noted the time was 3PM, and presume this was like Thailand where everyone stands at attention when the King’s anthem is played in public places in the morning and the evening.

Other Observations

Like Bangkok, gyms are expensive. I went to the nice gym at the mall, which was similar to a 24 Hour Fitness, LA Fitness, etc. They want $90/month. Luckily, I was able to get a membership at the Marriott fitness center for “only” $60. At least I know I’ll be safe from car bombing while I’m pumping iron.

Internet in PH is not great. I’m normally fine with throwing money at the problem, but you need to throw a LOT of money when DSL and cable modems require a 12 month contract, but you’re only staying a month.8 I’m sure there’s an early termination fee, but based on the cost of bandwidth it’s got to be big. Instead, I got a Globe unlimited internet account for my phone, and wifi in my apartment, and speeds for both are around 3Mb/s DL. However, upload is crazy slow and both drop frequently. It could be this city, as I’ve heard people in Manila with LTE are getting 30Mb connections on their phone. Of course, you still need good reception.

The medical industry is huge here. Lots of people walking around in candy striper uniforms or scrubs. It seems like most of the girls I meet have a nursing degree because it travels so well. I’m sure most Americans reading this have met a Filipino health practitioner.9 To be safe, I decide to find out what the best hospital is, because often times there are huge differences.10 Seems the one here is Chong Hua, which is also known as the expensive hospital. To put that in perspective, I’ll relay a story from an expat forum. Guy needs a doctor, so he sees one during clinic hours, requesting the department head with 30 years of experience. Because he’s a new patient, they charge him 400P. Needs some lab work, another 150P. Turns out he needs antibiotics, which is yet another 600P. Wow, almost 1200P, this is getting expensive, right?! It’s less than $30. Some of you have co-pays bigger than that. You can see why it might look tempting to retire here. They also have an “executive checkup,” an exhaustive physical comprising stress tests and lab work and a number of scans, all for about $100. I bet the cost of that back in the US is roughly the price of the plane ticket here. Can you say medical tourism?

The other big industry here is BPO, or business process outsourcing. It’s mostly call centers, and there are lots of signs advertising everything from jobs to office space for it. I knew that PH was a bigger spot for outsourcing than Thailand, and I assumed it was all due to the excellent English spoken here. The people begin learning in elementary school, it’s American English (vs. the Queen’s), if I had to put a pin on the Filipino accent, it’s that they tend to enunciate much better than Americans do. I figure that outweighed the fact that Thai cities seem to have better infrastructure, including internet. However, before I left Thailand I went to a talk on the ASEAN initiative for 2015. I learned it won’t happen by then, but the most fascinating slide showed average yearly salary (in USD) by country. At the top were Singapore and Brunei with $52K. Thailand was $12K. Philippines was $4k. That made it click. In addition to the English, they just cost less. It also explains why so many Filipinos travel internationally for work – it’s easier to find a better salary elsewhere.

Finally, everything you hear about the friendly people is spot on. As it’s a smaller city than Manila or Bangkok, I occasionally feel like I’m a spectacle, especially when walking around my neighborhood. But I never feel unwelcome, which is nice.

  1. Pro tip: the front passenger always has them, so get in there []
  2. Interesting note: women will do pat-downs on men, although they are not at  TSA’s level of thoroughness. Some malls do have a men’s and women’s entrance, though. []
  3. To my untrained eyes, mostly .38 and .357 revolvers, with the occasional 9mm. []
  4. Faster than you! (NSFW) []
  5. And sometimes the directory is being used to watch trailers for every movie at the cinema. Sigh. []
  6. It might also be high nationally, I’m too lazy to check. []
  7. Let’s face it, Mexican food is now American food. []
  8. And I was warned that DSL installation takes between 2 weeks and 2 months. Well, I’ve heard similar stories in the states… []
  9. My pediatrician was Filipino and he was awesome. []
  10. Pro tip: sometimes the good hospital is referred to as the “international” hospital because it attracts so many foreigners, like Bumrungrad in Bangkok. []

Bangkok: First Impressions, Observations, and Misconceptions

I’ve been in Bangkok for a week and it’s an interesting city. Even though I heavily researched it (including spending time on expat forums and talking to former residents) there were some surprises. Here are some of them.

  • It is shocking to me how quickly I’ve acclimated to the city and the heat after 5 days. Last night I stepped out my apartment building and thought, “Oh, it’s not too bad.” Checked the local temperature and it read 92F. If the sun isn’t directly on me, I don’t really notice, and I’m usually shaded by buildings or clouds.
  • You’ll be walking down the street and suddenly attacked by some stench. Occasionally, I can’t tell if it’s the open air sewer, nearby garbage pile, or street food vendor. I’m don’t eat at those vendors.
  • My brother remarked that it dawned on him why we’ve been avoiding the puddles so adamantly. “Have you noticed it hasn’t rained since we arrived?” Street vendors dump their garbage curbside, including any ice they have, dish water, etc. Because of this, wet areas are very slippery. Also because of this, flip flops were abandoned. If it wasn’t so hot, I’d consider waders.
  • Overall, Bangkok is not a cheap city. Thailand can be cheap, but Bangkok is a major city and the cost of most things are the same as LA. That’s a subject for a whole article, but here are a few surprises:
    • Coffee, my lifeblood, isn’t cheap. A grande iced coffee/Americano (pronounced a-me-ri-caNO) is $3. You might expect that in Starbucks, but even the mom and pop shops charge that.
    • Food in general isn’t cheap. Sit down restaurants, even cheaper ones, will set you back $6-10 per Thai-sized dish.1 I still pay $2.50 for a frozen meal like I do in the US. You can save some money cooking yourself, which I plan to do. Another surprise – white meat is cheaper than dark meat.
    • I can’t find the equivalent of a discount department store like Walmart, Target, Kmart, etc. The ones I’ve seen carry imported western brands at prices higher than in the US. by “higher” I mean the local Tokyu department store (not in the luxury mall) had a 50% off sale and prices were still higher than I’d pay at Macy’s back home.
    • A store called IT Anything2 wanted $100 for an HDMI cable. Luckily I found a much cheaper vendor on another floor selling one for $10.
    • I bought 2 wash and 2 dry tokens from the front desk. These are normal sized washers and dryers, not large capacity, and this cost me >$10. Then I bought the wrong detergent because the package is all in Thai.3 I gave up and went to a laundry, who cleaned and pressed my clothes for the same price of doing it myself. I eventually had a nice person at the supermarket point me to the right stuff, and found the Thai version of Tide, which was a fraction of the price of the English-labeled version next to it. As they say here: same same.
    • Internet is $33/mo. for an 10/.5 (down/up in Mb/s) connection. It’s not bad, although those numbers are only good within Thailand. I was told a 20MB connection would be $150/mo., and you still won’t download from sites outside Thailand any faster. For reference, my connection back home was 30/5 for $65/mo.
    • Haagen Dazs is $10/pint. At the supermarket. Reminds me of stories from 20 years ago that in Europe, you’d pay $3 for 8 oz. of Coke, room temperature without ice. Thankfully they have Coke Zero here and it’s only .50/can at 7-11.
  • On the flip side…
    • I saw The Hobbit in 3D, HFR (high frame rate – 48 FPS), on 4K projector, in an assigned seat, and I paid $8. My only mistake was not going to the luxury mall across the street which had it in IMAX (plus HFR/3D). I don’t think I’ve seen a theater Movies are once again a cheap date.4
    • Street vendors have very cheap items ($3 t-shirts, etc.), but of course haggling is required. Mall food courts are awesome. It wasn’t a big portion, but I recently got roast duck with rice for $2. You do have to make sure you’re in the actual food court and not a cluster of restaurants. You’ll know because food courts don’t take cash, they have a coupon or charge card system. Some are more expensive, but they usually have more/better food. For instance, I got a big plate of sweet chili fried rice with prawns, cashews, and a fried egg with a bottle of soda for $8.
    • While there’s no discount dept. store, there is Chatuchak Market. This is the flea market to end all flea markets. I won’t be going until this weekend, but several people have told me you can spend the entire day there. When I say it’s big, I mean they have maps, and guide books warn you to procure one or risk getting lost (or at least not find what you need). In fact, there’s no way you’re imagining this large enough - it covers 35 acres. Of course, haggling is required.
    • I am apparently an expert negotiator. When getting our limo service from the airport, I was quoted 2200 THB. I said, “Upstairs, they said 1200.” She comes back with 1100 THB. Saying, “That seems expensive” to a vendor will almost always knock the price down, frequently in half. Doesn’t work in retail stores, though.
    • But the best deal in clothing is bespoke. For the price you’d pay for off the rack at a department store, you can get custom made. I’m getting a custom tailored blazer to my exact measurements and specifications, including Super 180 Italian wool, and it’s costing me $333. Not cheap, but a third of what you’d pay for bespoke in Hong Kong or Saville Row(maybe even less). A shirt is about $45, again to my exact measurements and fabric choice. And this is from Rajawongse, the same tailors that have made suits for every US president since Bush, Sr..5
  • Public transportation via Sky Train is great, but as the name implies, it is in the sky. And often there is no escalator (at least not on your side of the street) so you’re climbing 6 flights of stairs to get to the platform. It will be a while before I get used to that.
  • In California, we have one Dunkin Donuts. It took years for DD to return, but  it’s on a Marine Corp base 1.5 hours away from LA.6 In Bangkok there are, I kid you not, at least 4 in a one block radius near the Siam Paragon shopping center. And they have chocolate butternut! Chocolate butternut is the correct donut. Plus a ton of other specialty donuts you won’t see in the states. Still, it competes with roughly a hundred amazing Asian bakery/pastry shops in that same area, so I haven’t been there yet. But I’ll get there eventually.
  • The other surprise? Coffee Bean and Tea Leaf about 50′ away! So an iced dutch mocha and chocolate butternut donut – a combo you can’t easily get outside of NYC – is in my future. Heck, I was at several DD in FL and still couldn’t find a chocolate butternut.
  • As you’ve surmised, there are a TON of western brands here, but none bigger than 7-11. Remember when Starbucks exploded and you’d have locations across the street from each other? That’s how popular 7-11 is here. There’s one a 3 min. walk up the street and another 2 min. down the street, and I have a mini-mart inside by apt. building and a pharmacy across the street. Convenience rules here.
  • Happy hour starts around 9AM and goes to 8PM.
  • Locking eyes with a taxi driver, prostitute, or aggressive vendor, even for a second, will have them hounding you. As you walk the streets, you have to somehow stay aware of your surroundings while not looking anyone in the eye.
  • I thought I’d be studying the language daily, but to be honest, I get by with a few simple phrases (hello, thank you), pointing, and smiling. Even with vendors who don’t speak English, you can communicate by typing prices on a calculator. I have Google Translate and Google Goggles on my phone, but rarely use them as the former can’t translate Thai to English easily7 and the latter gets confused easily.8.
Overall, I’ve found it very easy to adapt to life here and I’m looking forward to exploring more of the city in the weeks ahead.
  1. Don’t expect the portions you get in American Thai restaurants. []
  2. I think this is the Best Buy equivalent []
  3. I later realized from the pictures it was for hand washing. []
  4. Unfortunately, I didn’t bring a jacket or hoodie with me. Even though it was >90F outside, the theater was at ~60F. []
  5. It looks like they also made something for Nancy Reagan. []
  6. Furthermore, there are conflicting reports on whether you can get on base to buy there. []
  7. The keyboard doesn’t change automatically and it can’t do speech to text. []
  8. In a recent test it thought Thai characters were Cyrillic. []

Basically, I’m just gonna walk the earth.

I am beginning a grand adventure. Well, for me, anyway. At the end of this year, I will be flying to Bangkok, Thailand to start a 6 month (or longer) trek abroad. You know, like Caine in Kung Fu. Well, not exactly.

This isn’t a vacation. It’s an experiment in nomadic living, inspired by the likes of Expat Software and The 4-Hour Work Week. Even after the success of Tim Ferriss’s book, this is a pretty foreign concept to most people. Upon hearing it, they think I’m going on a really long vacation, and by extension, I’m some secret millionaire. I’m not (yet). Or that I’ll be backpacking and living in hostels and villages. I’m not doing that either.

I’ll simply be living in other countries, much like I would here. The countries I’ve chosen are more affordable than Southern California (I know, not saying much), although that does get offset by renting fully furnished apartments in major cities, as well as airfare. My goal is to spend the same or less per month than I would here, while making things a lot more interesting – you know, meeting people and getting in adventures. But for the most part, I’ll be coding and learning new things.

Why now? What prompted this? There are several factors:

  1. The real estate agent who surprised me at my door asking to see the place I’m renting, MLS listing in hand. Turns out the owner decided to sell or foreclose and just hadn’t gotten around to telling me. I had until the end of the year to find a new place.
  2. My latest consulting project is wrapping up.
  3. I began a bootstrap startup with a couple other people. Being able to work on it full time will be ideal.
  4. I’m not rich, but I did save up a 2 year runway before I quit to start consulting, and preserved most of it by remaining employed and living reasonably.
  5. I picked up a frequent flyer credit card in 1998 and never used any miles. A friend had clued me in on how bad international flights can be, especially if you’re, ahem, larger than average. So I said I’d only use it on an first class upgrade or ticket for an int’l flight. 240,000 miles later…

1 + 2 + 3 made getting into a mortgage a bad idea. The rest void any other excuses I might have. There just isn’t a better time than now.

The Itinerary

My tentative itinerary is:

  • Jan-Feb: Bangkok, Thailand - I know the most people there and it’s one of the most tourist friendly countries on the planet. It also has great public transportation.
  • Mar: Cebu, Philippines – I don’t know anyone here, but Filipinos speak excellent English and are also friendly to tourists. Cebu City is one of the safer ones, with less traffic and air pollution than Manila, and I’ve seen some very nice vacation photos from here.
  • Apr: Tokyo, Japan – My one indulgence. Like all geeks, it just seems magical and I can’t pass it up while already in Asia. If only I hadn’t forgotten the Japanese I learned in college…
  • May: Kiev, Ukraine – This is the one place where everyone knows my name. Well, my last name, at least. A few programmers I know are from the Ukraine, and Kiev is a major hub for software developers. I expect a lot of networking with fellow techies here. I can’t speak Russian, but my pronunciation of the food is pretty spot on (Baba taught me well), so at least I won’t starve.
  • June: Prague, Czech Republic – When I tell people I’m going here, the reaction is universal: “Oh, wow. You will love it.” This includes all the people who have never been there. I’ve no doubt they’re right.

Here’s the general logic behind it:

  • Major cities maximize my chances of getting good internet.
  • Staying a month in each city gets me a big break on rent. You’ll find that 10 days in a hotel costs roughly the same as one month in a furnished apartment. There are some differences, like paying for utilities in the apt., but you also get a kitchen. In most of the cities listed above, that doesn’t save me much, but will be vital in Tokyo.
  • I’ll be warm (often really hot) throughout the trip, which is nice because I’m not a fan of winter (one of the reasons I live in SoCal). Luckily, winter is the dry season for Thailand and the Philippines, so I won’t get soaked, either. This eases the wardrobe significantly. Bangkok has excellent prices on clothes, including custom tailored clothing in  fabrics meant for hot, humid climes.

After that, things are a bit up in the air. By then, my startup should be live, and there’s a chance I’ll need to come home for that. While in eastern Europe, I’d like to hit Warsaw and Sofia. However, there’s an excellent chance I’ll pick up a couple consulting gigs while abroad (especially as I expand my knowledge of retail ecommerce, analytics, and business intelligence). That should fund some pricier destinations in western Europe, namely Paris and London. That’ll give me a chance to relearn the college French I forgot and explore the land of Monty Python and Downton Abbey. If I get knighted, there’s little chance I’ll return, but I don’t think the odds of that happening are better than 50%. But sooner or later it’ll start getting cold, forcing me to migrate like the majestic turkey back to Southern California.1

If you’re going to be in my area (or more likely, I’m going to be in your area), contact me and we can get together. I’m especially interested in networking with ecommerce professionals and web developers. I’m looking forward to meeting you!

 

  1. I know, turkeys don’t migrate. They handle winter like a boss. []

MySQL Failed to open file – error 2 and 22 on Windows

I recently had to restore a MySQL backup. It had been a while since I used MySQL, having switched to Postgresql sometime back. First thing I noticed was the lack of a GUI admin tool that PG spoils you with. Making matters worse, the command line tool isn’t even added to your path; you can’t just run “mysql” like you can in a Unix shell, much less use the redirect shortcut. And I was getting errors.

Here’s what you need to do to restore a MySQL backup on Windows:

  1. Run the command line tool from the start menu
  2. Open your backup file in a text editor. Does it start with a command to create or “use” the database? If not
    1. Create it, if necessary
    2. Type “use database” filling in your DB name
  3. Type “source path-to-SQL-file“. BUT, you must follow these rules:
    1. Use the full source command, not the \. shortcut
    2. Have no spaces in your path. I copied mine to a root of a drive. Note that spaces in the file name is OK, just not the path.
    3. Do not quote the file name, even if it has spaces. This gave error 22.
    4. Use forward slashes in the path, e.g., C:/path/to/filename.sql. Otherwise you’ll get error 2.
    5. Do not end with a semicolon.

Follow all those rules and it should work fine.

Companies Using Grails

I’m pretty excited about Grails, but am often asked for social proof. Well, by every measure,1 Groovy is the #1 JVM language after Java, and Grails is the #1 full stack web framework.2 But for some, that’s not enough. They want to know who is making it #1? Major companies. Below I’ve listed the household names. I could not get details for some companies, but a Google search will verify the claim (e.g., the Disney developer posting a Grails question to a mailing list).

Last edit: 12/6/2012

  • Atlassian
  • Big Lots – core site
  • CollabNet – web interface to SVN server
  • Disney
  • eHarmony
  • EMC – owns VMWare, which owns SpringSource, which employs both Graeme Rocher (Grails creator) and Guillaume Laforge (Groovy PM and spec lead). So, duh :-)
  • Fidelity Investments
  • HealthPartners – Virtuwell
  • H&R Block – mobile site (now defunct)
  • IEEE
  • Intuit - Intuit Payment Network
  • Janus
  • LinkedIn – Recruiter application
  • LiveNation – TicketWeb
  • Live Gamer
  • Lucasfilm
  • Lyris
  • MoneyGram
  • MTV (and Viacom by extension)
  • Netflix – Asgard, their Amazon EC2 cloud management app, now open sourced.
  • Nissan – Leaf site
  • OppenheimerFunds
  • Precor – Preva product
  • Rally Software
  • Riot Games (makers of League of Legends)
  • Rumble Entertainment (maker of Kings Road)
  • Symantec
  • T-Mobile – internal apps
  • Target
  • Trip Advisor
  • ValueClick
  • Virtual Tourist – core site (parent is Trip Advisor)
  • Volkswagen - UK site
  • Walmart – MP3 streaming site (now defunct)
  • Wired.com
These are household names in some countries outside the US:
  • MACSF – (France) insurance company, internal systems
  • Mercado Libre – (South America) core site
  • Sky – (UK) TV listings, movies, and showbiz sites
  • Vodafone Music – (UK) core site
Colleges and universities:
  • Colgate University
  • Harvard University
  • UCSF
  • University of Minnesota
  • University of San Francisco
  • Yale University

There are lists of many lesser known companies/apps found here and here.3 Another good place to check is Grails Jobs and indeed.com. I used all of them to compose this piece.

  1. Tiobe, job listings, etc. []
  2. Granted, I can only think of 2 others, Play and Roo, but full stack is where you get the most productivity. []
  3. Apologies in advance that I’m intentionally leaving off startups and smaller companies. That’d be too much to manage and it won’t sway managers and architects, which is the point of this piece. []

Merging XML Files With Groovy

I needed to generate an XML file from database tables and the plan was to use Talend Open Studio. Talend is an ETL tool that generates data integration jobs in Java. The community edition is free and I’d been using it for several other data tasks for an ecommerce client. Overall, I think it’s quicker than hand coding in Java, but you can still dip into Java code if you need to and embed the jobs in other programs.

Unfortunately, it’s not so good when it comes to generating moderately complex XML files. By moderately complex, I mean lists of lists like this:

<products>
  <product id="1">
    <categories>
      <category id="1" />
      <category id="2" />
    </categories>
    <skus>
      <sku>12345</sku>
      <sku>67890</sku>
    </skus>
  </product>
<products>

Talend can do this, it’s just obscenely slow for larger file sizes. By “larger” I mean a few MB. It appears this is due to their use of DOM4J instead a SAX parser. Why a few megs of XML data takes up so much memory I don’t know, but that’s the case.1

Talend converts columnar data to XML, so you have to do it in two passes:

Products/Categories (category is the loop element):

<products>
  <product id="1">
    <categories>
      <category id="1" />
      <category id="2" />
    </categories>
  </product>
<products>

Products/SKUs (sku is the loop element):

<products>
  <product id="1">
    <skus>
      <sku>12345</sku>
      <sku>67890</sku>
    </skus>
  </product>
<products>

I noticed when when generating these files individually, Talend is really fast, around 1,000 rows/second on my machine.2 But when you instruct it to combine the files (really append the second file to the first, joining on the product ID), it slows down to about 1 row/sec for a 5,000 row job. Yes, 1,000 times slower. Again, it’s all due to the file size, as when I restricted it to 350 rows it ran at ~120 rows/s. The problem was that in production I need to process about 18K rows and it gets exponentially slower.

The solution is to generate two separate files, then merge them using a SAX parser. I’m just starting to use Groovy, which Talend supports, and was assuming it would be faster to develop in that language over Java. Well, if it didn’t require a ton of trial and error to overcome poor documentation, maybe it would have. Hopefully this heavily commented code makes it easier for the next person.

package com.madeupname
package com.madeupname

import groovy.util.slurpersupport.GPathResult;
import groovy.xml.StreamingMarkupBuilder;

// If there is no match in the products/categories file, use this empty node
def emptyCategoriesXML = '''<sites>
<categories>
	<category />
</categories>
'''

// Uses a SAX parser, less memory and overhead than a DOM parser (XmlParser)
// parse() method returns a GPathResult, which allows you to traverse and 
// manipulate  an XML file or snippet using dot (.) notation. 
def xs = new XmlSlurper()
// Main products file with SKU list
def productsSKUs = xs.parse(new File('/Data/ProductSKU.xml'))
// Products file with list of categories 
def productsCategories = xs.parse(new File('/Data/ProductCategory.xml'))
def emptyCategories = xs.parseText(emptyCategoriesXML)
// Output file
File output = new File('/Data/Products.xml')

// Store category nodes into a Map for fast retrieval later. Key is product ID. 
HashMap<String, GPathResult> productsCategoriesMap = new HashMap<String, GPathResult>()
// Note: if you're using Talend, you can't statically type this and must use this:
// def productsCategoriesMap = new HashMap<String, GPathResult>()
// Loop through all the products. Note that the root category is products 
// (plural), but the GPathResult you get from XmlSlurper assumes you're already 
// in the root category. That's why it's not productsCategories.products.product.each  
productsCategories.product.each {
	// Note you must put the id in a String (Groovy style shown here) 
	// in order to have a String key.
	productsCategoriesMap["${it.@id}"] = it
}

// This allows you to use a DSL to write the file. Note that you are not 
// actually doing the work specified in the closure until you start writing it. 
new StreamingMarkupBuilder().bind {
	// mkp is a special markup namespace for use within this closure. There 
	// are other methods as well, see the docs.
	mkp.xmlDeclaration(["version":"1.0", "encoding":"UTF-16LE"])
	// My root category
	products {
		// Loop through each product and append (insert) the categories 
		// node to the product node with the same product id.
		productsSKUs.product.each {
			if (productsCategoriesMap["${it.@id}"] != null) {
				it.appendNode(productsCategoriesMap["${it.@id}"].sites)
			} else {
				it.appendNode(emptyCategories)
			}
			// Note this is not System.out, it merely ensures the 
			// GPathResult is printed when written.
			out << it
		}
	}
// Here we actually write the file, executing the above closure.
// Note how I specify the character set to match the declaration.
} .writeTo(output.newWriter("UTF-16LE"))

For Talend users, I had to use tGroovyFile instead of tGroovy because it was complaining about a missing library.3 You’ll also want to change the hard coded file paths to use context variables.

To save you some time, here are the links to the relevant documentation:

http://groovy.codehaus.org/api/groovy/util/XmlSlurper.html
http://groovy.codehaus.org/api/groovy/util/slurpersupport/GPathResult.html
http://groovy.codehaus.org/gapi/groovy/xml/StreamingMarkupBuilder.html
http://groovy.codehaus.org/api/index.html?groovy/xml/MarkupBuilderHelper.html

Apologies for complaining about the docs, but I like Groovy and want to see adoption spread. To do that, it has to make the hard things easy. None the docs I read (above JavaDocs, all the XML walk throughs on the official site, and relevant chapters of Programming Groovy) went go beyond the basics of generating XML from scratch (and the JavaDocs are particularly lacking). Groovy could really benefit from a good cookbook site (maybe nowadays that’s Stack Overflow) and most of all, annotated API documentation like PHP has had for years. I found those user contributed notes to be priceless when I was learning it. I think a wiki with comments would be a great home for the Groovy API reference docs.

  1. I note that loading an 8MB XML file has caused Chrome to use tons of memory and crash the tab, so there must be a complexity I’m missing. []
  2. Core i7 quad 1.6, 6GB RAM, SSD. []
  3. Yes, I tried adding tLibraryLoad, but it didn’t help and I got no response on the forums. []

The Paperless Business Card

I have come up with a simple idea that will have a positive, global environmental impact. I’m talking about the end of the business card as we know it. Have you ever had a box of 500, maybe 1,000 business cards, handed out a few, then thrown the rest away when your title or contact info changed? Maybe you’ve done that a few times, or several. How much did that cost you? How did it impact the environment? How did you feel when you threw them away? What if no one ever did that again? Here’s a story about how we can make that happen.

A good friend of mine was asking for advice about business cards. He was going to be traveling in Europe for 6 weeks, meeting a ton of people, and wanted something that would stand out, something creative and memorable. But he also didn’t have a lot of time. My answer was simple. First, when you’re traveling for an extended period of time, hitting a lot of locations, you want to keep it light. The last thing you need is to lug around is a box of business cards.

My advice was to create a single, sturdy business card that simply had a QR code on it. People would scan it with their phones and you’d take it back. It’s both memorable and green, which I think a lot of Europeans would respond positively to. Especially the, ahem, female Europeans whose acquaintance he wanted to make. Moreover, it goes right into their contacts, saving them the trouble of transferring it, which won’t happen if it gets lost (even at the bottom of a purse).

Then another thought hit me – why do you need the card? You can have it as an image on your phone! Their phone photographs your phone and you’re done. To test this out, I went to an online QR code generator, capable of making a vCard/meCard. I took out my relatively new HTC Evo 4G and photographed the screen.

Nothing happened.

Turns out, even though Japanese cell phones have had built-in QR code readers for several years,1 Google and Apple still want you to download a separate barcode reader app for this.2 I’ve been seeing these codes all over the place: business cards, movie posters, real estate signs. I’m sure you have as well, although maybe you didn’t notice them or know what they were called. I was quite surprised to learn that they all rely on a 3rd party app.

All you need to read a QR code is a camera and bit of processing power. There are several free readers for iPhone, Android, Blackberry, Windows Phone 7, Palm OS, and probably several others. You can create several images representing each virtual business card you want to share: work, personal, work + personal, etc.. You can store them in a folder in your photo gallery app, or use it as your phone’s background image so it can be viewed and captured without even unlocking the phone.

Breaking Down The Branding Defense
I know, many people use business cards as part of their branding. My brother David is a talented graphic designer who has done this for many clients. But as I sort through a stack of about 30 collected business cards, very few people are doing this. What I’m seeing:

  • 1/3 are nice. Here I include the traditional Fortune 500 business cards. Those have good layout, fonts, print and paper quality, and enforce the brand message (solid, traditional), but don’t differentiate them. Maybe 2 or 3 actually looked kinda cool, but none blew me away.
  • 1/3 are meh. They don’t look like they were created by experienced designers, more like professional amateurs. Or, as is often the case, the client’s choice overruled the designer’s.
  • 1/3 are just bad. Cheap paper and printing, ugly design. These actually hurt the person who hands them out.

While it’s a small sample size, it feels about right. Most people think their card helps them, but most people are wrong. The best defense for paper business cards is that your potential clients are primarily dumbphone owners. For most professionals, that’s a pretty small group. If you take down their info instead of giving yours, you gain a measure of control over the transaction. If that’s not feasible, you can ask your designer about small batch printing and eco-friendly materials.

In contrast, what does the paperless business card say about you or your company? At a minimum, it says you’re tech savvy, even cutting edge, and that you’re environmentally conscious. Some don’t care about the environment, but I can’t think of cases where that mindset makes you look bad.

Resources
You’re sold, right? So, where to go from here? First, make one or more QR codes. You can do that here:3

QR Code and 2D Code Generator
Allows you to create many different QR codes, including vCards and meCards. You can also choose format. I chose PNG (an image file, like GIF or JPEG), then saved it and mailed to to my phone.

ZXing QR Code Generator
From the maker of the free, open source Barcode Reader app. I tested this with a couple generators and it works fine with contacts. It also generates QR codes for you from your contact list, although I don’t know how compliant they are with the vCard or meCard formats.

Google Infographics
Allows developers to create QR codes with a simple HTTP GET or POST request.

Google will find you many more options. After that, you need to find one for your phone. Instead listing them here, just go to your favorite app store. There are many quality, free apps to choose from. My only caveat is that I first tried Google Goggles and discovered it can’t read embedded phone numbers (I tried two different generators, and both vCards and meCards). Pretty major limitation for getting contact info.

How to Help
If you want to help, request that your phone maker or carrier provide this feature natively.

Android barcode reader integration – You can directly vote for this feature in Android by “starring” this request.

iPhone Feedback Form – Ask Apple for QR code reader to be integrated into the camera.

Postscript: Alternatives
There are alternatives to QR codes. One is near field communication (NFC), but most phones, including my relatively new HTC Evo 4G, don’t have an NFC chip/antenna. Another is the app Bump. Bump’s mechanism is extremely clever, and the company appears to have some brilliant, highly credentialed people working there. I think it’s a good idea and it’s on my phone. However, it’s only available for iOS and Android, and the Android version is missing some critical features like multiple contact cards or custom contact cards (it uses Android’s contact info, which doesn’t have a field for your web site). And, of course, neither works with printed advertisements like movie posters.

  1. This article, published in 2004, stated that 60% of all mobile phones came with QR code readers: http://www.hypulp.com/entries/more_qr_codes.php []
  2. Some carriers provide this. A friend of mine has a Windows Phone 7 device and AT&T bundled a barcode reader with it. []
  3. I’m not associated with any of these companies, people, or products. []

Optimal JVM settings for STS

I recently switched from Eclipse 3.6 to STS 2.7.1 (based on Eclipse 3.7). Ditching my old .project and workspace settings files along with the move has made for a smoother experience; it seems these files get corrupted over time,1 and I’m too lazy to do the research to fix them. However, the upgrade resulted in performance issues. For instance, it hung for ~10 seconds every time I saved web.xml, and there were various random pauses. It’s not the hardware: I’m on a Core i7 Quad with 6GB RAM running Win7 x64. I realize you are getting more tooling with STS, but performance was much worse than I experienced with 3.6.

Well, it had slipped my mind that I had updated my 3.6 eclipse.ini settings with those I had found in an excellent Stack Overflow answer from VonC on optimal JVM settings for Eclipse. It hasn’t been updated for 3.7 (nor does it mention STS), but after some experimenting and research it appears to work well for it. Here are my settings, and below I add some commentary on what they do, which is missing from the original answer (although I still suggest you read that, as it covers other situations/issues that may affect you). Keep in mind I’m not a JVM tuning expert, YMMV, etc. Here are the contents of my sts.ini:

-vm
C:/Java/SDKs/jdk1.6.0_24x64/bin/javaw.exe
-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
–launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502
-product
com.springsource.sts.ide
–launcher.defaultAction
openFile
–launcher.XXMaxPermSize
384M
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xmn128m
-Xms256m
-Xmx768m
-Xss4m
-XX:PermSize=128m
-XX:MaxPermSize=384m
-XX:CompileThreshold=1000
-XX:+CMSIncrementalPacing
-XX:+UnlockExperimentalVMOptions
-XX:+UseG1GC
-XX:+UseFastAccessorMethods

-XX:CompileThreshold=1000
This is the number of method invocations/branches before compiling. This is normally set to 10,000, so we’re changing it dramatically, but the original suggestion was leading to errors so I raised it. You will notice on startup that it takes longer, and your CPU usage jumps. However, your performance after that is much better. Those 10s save times for web.xml? Gone after this. I’m willing to take a hit at the beginning for better productivity while coding.

-XX:ReservedCodeCacheSize=64m
Related to the above, I was getting the error “Unhandled event loop exception / out of space in CodeCache for adapters” due to setting the compile threshold to 5. This is another solution to that problem, and may be redundant.

-Xss4m
This is stack size, and was previously set to 1MB, now up to 4MB per thread. Doing this will increase the overall memory used.

-XX:+UnlockExperimentalVMOptions
-XX:+UseG1GC
-XX:+UseFastAccessorMethods

These enable parallel garbage collection. I saw my CPU utilization reach 100% after this, which is rare on a Core i7 Quad. It felt like I was finally using it to its potential.

Again, I’m not an expert. I’ve found it’s more sluggish at first, but response times quickly improve. For me, it’s a clear net gain. Not documented are the things I turned off in preferences because I wasn’t using them (Maven is disconnected, etc.). Visit Windows >> Preferences and filter on startup, see if there’s anything you can get rid of. Finally, I must give credit to my sources outside the original article:

http://ugosan.org/speeding-up-eclipse-a-bit-with-unlockexperimentalvmoptions/

http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

http://performance.netbeans.org/howto/jvmswitches/

  1. I’ve had issues with things like web deployment assemblies, not prompting for workspace on startup, etc. []