Yvan Rodrigues' problogue

(like a blog, but with less effort)

Disconnected ramblings about software development, iOS, FreeBSD, anti-social networking, kittens, drosophilidae, small business, Android, web services, finches, Windows, electrical engineering, XML, rental cars, rye, or ... FIVE dollars??!... something something beer.

When Windows Update is broken and none of the suggested fixes work.

Set the PC's time to the correct time.

Why is my parcel in Mount Hope ON CA?

If you are tracking a parcel and you see this, it likely means that the delivery has partially or wholly been contracted to CargoJet. They fly out of Hamilton airport which is technically in Mount Hope Ontario. Your parcel will probably be delivered by UPS.

Tags: 

Artist Kelly Reemtsen

I discovered her work while doing some image research. Tools and pretty dresses. I love it.

Tags: 

Outlook for Android reports "Your mail certificate is invalid. Would you like to login anyway?"

After doing some maintenance on my mail server, Outlook for Android started bitching about my certificate. My certificate was fine. 

The problem is that my IMAP server, Dovecot, has discontinued support for the shitty SSLv2 protocol, which is a good thing.

In the Dovecot config, I set ssl_min_protocol to TLSv1. Unfortunately the Android app does not support TLS, so it was unable to negotiate a secure transport. 

To resolve this issue, I changed the minimum to SSLv3, which is bad, but it works for now.

Roundcube not logging in users: "Storage server failed" "Empty Startup Greeting"

After a recent update to Roundcube, users became unable to log in. When they would try they would get an error that the Storage Server failed.

The cause of the issue is not clear, but is related to how the default host name is parsed. In order to restore functionality to my system I had to make two changes to config/config.inc.php

$config['imap_conn_options'] = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false
    )
);
and the host name needed to be prefixed with ssl://
$config['default_host'] = 'ssl://smtp.redcell.ca';

Useful Tips and Useless Quirks I Learned About Travelling in China

When travelling in another country, it's hard not to note some of the quirkier cultural differences. here are some of my observations. I haven't gone out of my way to be politically correct.

I'll keep adding to this list while I'm here.

Useful

Vendors

  • I have only ever been harassed by street vendors at a popular tourist site.

Police

  • Most police stations have one English-speaking officer on duty.
  • Every police officer I have talked to has been friendly and extremely helpful. If you ask them where something is, they will often find an excuse to drive you there, unprompted.
  • I don't think you can walk for 10 minutes without encountering a police station. They are everywhere.
  • The sign will often say "Traffic Police", but they carry a pistol, a rifle, and SWAT shields.
  • The officers that I spoke to had much loyalty to protecting the people of their district, but did not have strong feelings about loyalty to the state. They consider that the job of the military police.

Passports

  • Any non-trivial exchange with the police will involved them photocopying your passport. This is actually kind of handy, because a condition of the Chinese visa is that you report your location to the police. Hotels do this for you. Hostels may or may not.
  • You will also be asked for your passport for many other things, such as buying bus/train/plane tickets.
  • Guard it at all times. I met an Indonesian man who lost his passport, and dealing with the government to reissue his visa took about a week, and may trips to the capitol.

Water

  • There are no public drinking fountains, because the water is not considered potable (even in most hotels). Instead, boiling water dispensers are very common. I think this is one reason that tea is so ubiquitous here; who wants to drink hot water?
  • Most hotels provide bottled water and a kettle.
  • Learn to enjoy Chinese tea. Kind of like Chai, no two are the same.
  • Locals do not use teabags, they just dump the ingredients in water (it looks like you're drinking pot-pourri).
  • Unfortunately for once you do acquire a taste for Chinese tea, it is never served strong.

Taxis

  • Most taxi drivers are kind and helpful, use the meter, and will provide a receipt. Although not expected, I always tips these drivers and usually tell them why.
  • A few will try to take advantage of foreigners, and charge you more; but at least they will do so before they embark.
  • If they actually try to rip you off or fight about the fare, find a police officer (there is always one nearby). A threat to be sent to jail will clear up the issue.
  • You can get a good inter-city rate for a taxi by sharing a taxi. You can do this yourself, ask the cabbie to do so (if in an area where other people going to the destination is likely), or they may just do it themselves.

Buses

  • Finding the bus station can be tricky, because the buses are in the back, and there isn't any English signage. After a police officer took me to the bus station, I said, "I never would have guess this was the bus station." He replied, "But it says so on the big sign out front??"
  • Just hop on any bus if you're not at a bus station. Someone will come to get payment eventually. Local trips will generally cost less than 10 RMB, and 25 RMB for inter-city routes is normal.
  • The bus will not leave a station until every seat has a person on it. If it won't fit overhead, and the bus doesn't have a luggage area underneath, your large pack is going to have to sit on your lap.
  • In some areas, buses have seat belts, and you are expected/required to use them.

Planes

  • Mobile phones must be turned off and put away at all times, except while the plane is at the terminal. This is a CAA regulation. Flight mode doesn't count, it has to be off. If you don't, you will be asked to put it away (and they will make sure you do).
  • This applies to inter-city flights, as well as international flights if the airline is based on China.

Tipping

  • Tipping is not expected in most circumstances.
  • I always tip when anyone goes over and above, and it is appreciated.
  • It is not rude to tell them why, and it encourages good behaviour, and goodwill toward foreigners.

Internet

  • Yes, websites are heavily censored here. Sometimes this is done at a DNS level; usually the connection attempt just times out.
  • Everything Google is blocked. Bing search works, but some results will be censored.
  • VPN services like ExpressVPN do work, but depending on the protocol used, the connection may get dropped regularly.
  • PPTP, while less secure, does seem to universally work without disruption.
  • Generally, use of mobile data is uncommon and expensive.
  • Instead, there is free public wi-fi almost everywhere in urban areas.
  • Unfortunately, in order to access it, you usually need to authenticate with your Chinese phone number or WeChat account, even at McDonalds.
  • Some KFCs do not require authentication, and hotels usually do not, so loitering outside was sometimes an option.
  • I have yet to have a reliable and fast connection.

Strangers

  • I've heard people remark that Chinese people are not friendly, or even rude. I have never had this be the case, but they do keep to themselves unless interacted with.
  • As an example, an elderly lady looked overwhelmed by having to carry her luggage down a long flight of stairs at the train station. No one stopped to help her. I motioned to help, and carried them down for her, and she was extremely grateful.

Security

  • Expect x-rays, metal detectors, and a pat-down everywhere you go. Train stations, bus stations, subway stations, malls, banks; pretty much anywhere people congregate. And they actually do their job.
  • Gas stations are usually barricaded, and the police will let you in.
  • Before letting you in, a search of the cabin/trunk is customary. The are looking for firearms, explosives, or anything that could threaten the attendant or other customers.
  • Passengers must leave the vehicle while it is in the station. Stations have a waiting area with chairs for passengers. I think this is so a group of people do not try to overpower the attendant.

Electricity

  • Almost all power outlets are universal, and can accommodate North American plugs.
  • Not all are grounded, so my 3-prong power bar/extention cord was not always useful.

Interesting

  • In an entire week of travelling all over the country, I have only seen 4 non-Chinese people. It is a reminder of how diverse Canada is; in fact 4.3% of Canadians are of Chinese heritage.
  • In Sandaoling, my room came with a Mahjong table, complete with tiles. It took me a while to notice, because it was covered with a tablecloth.
  • The scale by which wind turbine generators are used here makes ours look like a quaint science fair project (in a sense, it is).
  • KFC is huge here. About as common as Tim Hortons' in Canada.
  • Fast food restaurants often will present you with a laminated menu with pictures, and you can gesture toward what you want.
  • Following the death of Mao Tse Tung and the end of the Cultural Revolution, hundreds of millions of Chinese people have been pulled above the poverty line, initiated by the government of Deng Xiaoping in 1978. Then 68%, now only 10% live below the poverty line (as defined by the IMF).

Noteworthy

  • I've heard people remark that Chinese people are not friendly or rude. I have never had this be the case, but they do keep to themselves unless interacted with.
  • As an example, an elderly lady looked overwhelmed by having to carry her luggage down a long flight of stairs at the train station. No one stopped to help her. I motioned to help, and carried them down for her, and she was extremely grateful.
  • Yes, there is Walmart in China.
  • Although not quite up to the same standards, IHG hotels are very safe bet.

Frustrating

  • Smoking is still widely allowed everywhere, and ventilation is usually bad. In Beijing, smoking is not allowed indoors, but everyone smells like it, picked up from people smoking outside.
  • Many non-smoking hotel rooms smell like smoke, and have an ashtray.
  • Trains (not the bullet ones) wreak of smoke. Very sad for someone who loves riding trains; it makes the experience unenjoyable.
  • In addition to being heavily censored, hotel wi-fi/wired internet connections are very unreliable and slow.
  • If you came to see rural China, with lush vegetation, beautiful gardens, and rice paddies, don't come in winter.
  • The Terracotta Warriors exhibit closes at 4:30pm.

Useless

  • It is very difficult to suppress the urge so sing Convoy out loud when you see one.
  • I'm not saying there is a genetic predisposition or anything, but yes, Chinese drivers are awful.

I'm not racist. Some of my best slaves are black.

I suck at telling jokes. Every once in a while, I come up with a killer punchline though. I thought this one was pretty awesome, but others beat me to it. 

There are no new ideas.

Tags: 

How to retarget a Studio 5000 or RSLogix 5000 project to another controller

This is particulatly handy if a project targets a ControlLogix controller and you re prting to a CompactLogix controller; because you may not have the higher licence installed.

The project must be saved in .L5K format. Simply open it and change the controller string in the header.

Tags: 

Airplane

airplane
Tags: 

Install 64-bit Operating System as a VirtualBox Guest

You have installed VirtualBox, you have an ISO ready to install 64-bit Ubunto, FreeBSD, or your favourite OS, but when you try to create a new VM, 32-bits is the only option.

You may have searched, only to find that everyone says you need to turn virtualization on in your BIOS, but you checked, and you know it's turned on.

Try this: reboot.

Yes, a single reboot, and VirtualBox will offer to create 64-bit VMs.

Why we need walls at customer sites.

Why we need walls at customer sites.
Tags: 

Groundhog Day

Has anyone else noticed that both of the groundhog's possible predictions never come true?

Groundhog sees his shadow: 6 more weeks of winter. This would be amazing! That means spring would start mid-March!

Groundhog doesn't see his shadow: spring is "just around the corner". So, like, mid-March maybe? That would be amazing too.

Every year, we seem to get 8-12 more weeks of winter. I assume this is analagous to the groundhog getting shot in the head with a .22 each February 2; yet this outcome never presents itself.

Tags: 

The Day I Almost Made a Friend

Hey its vez
Tags: 

Lenovo ideacentre Horizon 27 Windows 10 network WiFi driver

After updating my Horizon 27 to Windows 10, it was unable to detect my WiFi adapter.

Lenovo does not have Windows 10 drivers for the (original) Horizon 27. The site identifies the adapter as a Qualcomm Atheros device.

I tried installing the Windows 8.1 driver from Lenovo's site, but it didn't work.

Just for fun, I tried downloading and installing the Windows 10 driver for the Horizon 27 2, the next generation model. It is identified as a Realtek RTL8188CE driver, so I didn't get my hopes up.

After a reboot, it worked! In device manager it is a Realtek RTL8188CE Wireless LAN 802.11n PCI-E NIC.

From what I can tell, the Realtek drivers are written by Atheros, and it wouldn't be a stretch to say that they use the same chipset.

Terminal to GIF creator

Drawing: Kitten

I guess I felt inspired to draw this week.

Tags: 

Drawing: Girl Plays Candy Crush

Tags: 

Drawing: Birdie

Just a drawring of mine.

Tags: 

Unable to unghost an actor in Solidworks Composer

Sometimes an actor will look translucent, but when I select it the opacity is set to the maximum.

In the Assembly tab, click the Assembly Selection Mode button (the first one that looks like a lego brick).

Now the actor's opacity will be correct and it can be adjusted.

Victoria Day, or May 2-4?

Tags: 

I sincerely doubt that.

.NET class library for SainSmart relay boards

SainSmart.NET is a .NET class library (and example application) for controlling USB and network relay boards sold by SainSmart.

I developed this library as part of my current project to automate photography capture of about 15000 35mm slides.

Tags: 

Cannot register ActiveX/COM control, Exception has been thrown by the target of an invocation

A COM component cannot be registered from a network drive.

Tags: 

"No active remote repositories configured." running pkg in jail

Copy

/etc/pkg/FreeBSD.conf
from the host to the jails

Packing for a Month in India

Packed

It was my intention to pack as light as possible for my trip. That said, I needed to bring enough gear that I could remotely solve any kind of work-related emergency that might have come up.

In the end, I ended up heavier than I would have liked. I should have put in the effort to weigh the heavy things make some tough choices. I could have easily shed 5kg, probably more.

This is what I packed, and what I would change.

PS: By removing the unneeded items, I would have saved 6.3 kg (14 pounds)!

Item Quantity Weight Opinion Comments
jeans 1 750g bad I brought jeans because I knew I would be riding a motorcycle. Jeans give more protection on a bike than shorts. At home, even on the hottest 35C days, you can crank the throttle, and you cool right down. The problem was that in India, you can't crank on the throttle. Traffic moves at 40-60, not 80-120, so there is no way of staying cool in jeans. Worse, once your legs start sweating, the jeans absorb the moisture and just get wet, heavy, and smelly. They take up a lot of space and are heavy. I wore shorts almost exclusively. A pair of light cotton pants might have worked, but these are out of fashion and difficult to find.
undies 4 300g good Since they are small and light, I might pack a couple more, but 4 was enough since there was laundry facilities.
shorts 1 350g good Should have brought 2.
socks 3 pair 150g bad I think I wore socks once or twice while I was there (see running shoes).
running shoes 1 pair 800g bad Unless you intend to run, leave the running shoes at home. They are bulky and heavy. I brought them for added protection on the bike, but ended up wearing sandals exclusively.
rubber sandals 1 pair light good These were great for everything. They could get wet at the beach, and be dry for the ride home.
Birkenstock style sandals 1 pair heavy bad Too heavy, and less comfortable than the spongy rubber sandals. Barely wore them.
white long sleeve shirt 2 light ok I brought white long sleeve shirts because I wanted to cover my skin, and hoped the white would keep me cool. The local men wear long sleeve shirts. After a month I started to adapt, but honestly the long sleeves were just uncomfortably hot.
t-shirts 2 light good I wanted to avoid t-shirts because most Indian men wear button-up shirts. Nonetheless, the t-shirts were very comfortable in the heat, and I wish I brought more.
undershirts 2 320g good The tank tops were great for sleeping in and hanging around the house. Although it would have been most comfortable, I did not wear them in public; only the beach tourists do.
swim trunks 1 200g good I didn't swim much, but the trunks were small/light enough that I was glad to have them, and they coulod double as underwear in a pinch.
hoodie sweater 1 400g good I knew the hoodie was bulky and heavy, and I wasn't sure about bringing it, but it was great up in the Himilayas, and even in Goa in the early mornings.
money belt 1 light good Peace of mind in busy airports and train stations.
documents   200g required Passport/visa, International Driver's Permit, cash, driver's license, credit cards.
magazines 6 1200g good, but I had a few unread Popular Mechanics to read. They were very heavy on the way there, but I threw them out or gave them away as I read them, and they were gone for my trip back. If I didn't already have them, I would have downloaded digital copies instead.
prescriptions   light required I packed them into s smaller container for the trip.
prescription sunglasses 1 light n/a I forgot them at home. I wish I had them.
zip ties 30 10g good Solved so many problems. Kept pickpockets out of all my zippered compartments.
binoculars 1 heavy bad I never used them.
pens and pencils 10 120g good 2 pens + pencil + sharpie would have sufficed.
Gravol 1 bottle light ok Didn't use but, glad I had it. A few tablets would have sufficed.
Immodium 2 packs light ok Luckily didn't need it. Glad I had it, didn't need so much.
other pills lots light ok I brought pills for most ailments. I only used the Tylenol-1. Didn't need so much.
toothpaste 1 100g good The travel tube didn't last long so I bought toothpaste there.
shampoo 1 50g good Travel size.
soap 1 50g good I brought a full-size bar. The smell of a familiar soap is surprisingly reassuring.
toothbrush 1 25g good A mini travel brush would have been nice.
deodorant 1 120g ok The turny knob broke so I didn't end up using it. It didn't help as an anti-perspirant, and luckily I don't smell too bad. Access to a shower helps.
q-tips small box 20g good Good for cleaning ears and so much else.
wipes 1 pack 300g good Packs better than toilet paper. Heavy but worth it. Good for cleaning all the things. I bought more there.
carabiner 1 10g good Handy for attaching A to B. They remove zip ties with a twist of the wrist.
nail clippers 1 15g good My nails grow quickly. They got lots of use. Great for cutting zip ties that are done too tight for carabiner.
phone 1 200g good Once I got a SIM card it was an irreplacable source of information.
camera 1 365g bad I barely used my point-and-shoot camera. I used my phone instead, even though the camera had optical zoom and better image quality. I knew I wasn't going to take a ton of pictures. If I was going on "a photo trip", I would bring my DSLR gear. I missed the 300mm telephoto, remote shutter, aperture/shutter speed control, and low-light quality.
tablet 1 1500g good Great for doing research at the coffee shop, etc. Great for large maps while on the road. 1.2kg plus charger.
ultrabook 1 1880g good Great for doing work, writing blog updates, etc. 1.5kg plus charger. I could have gotten by with only this or the tablet, but I don't know which one I would choose. Since my tablet is a full windows PC, maybe it + a keyboard and mouse would have worked.
power bar 1 light good My sister mocked me for bringing it -- until she saw me charge my phone, tablet, laptop, and camera at the same time. This $3 until from the dollar store was very light.
cable lock 1 150g bad I never used this computer lock.
mouse 1 100g good A real mouse makes working so much easier.
portable hard disk 1 200g bad Never used it.
misc. cables, etc.   200g bad It never hurts to have a spare ethernet or HDMI cable, or USB drive, but that weight add up.
water bottle  150g  good  Great for filling when you have access to clean water. 
pajama bottoms 0 light good I didn't bring any, but gave in and bought a pair there. Great for around the house and sleeping on the train.
sunscreen 0 heavy good I should have brought some. Very hard to find in India. Eventually got some (containing skin whitener).

Day 28: Last Day in India

After checkout I headed to Uncle Aloysius' apartment. As I knocked at his door, he arrived from an outing. Perfect timing. Aloysius is my father's cousin.

We spent the day chit-chatting and shared Chinese dinner.

After a nice relaxing day with family I headed to the airport and checked in.

Tags: 

Day 26: Kalka to New Delhi to Mumbai

McDonalds menu at Old Delhi station

I slept the night in Sleeper class, this time with a blanket, and awoke in new Delhi.

I stored my pack at Old Delhi station so I could spend the day looking around.

I walked around the central Rajiv Chowk, looking for an internet café. I found it, but it was just a computer and a printer; and they didn't serve coffee.

I had two very friendly people come up to me to chat.

"Where are you from?"

"Canada"

"French or English?"

Hmmm, I thought after speaking to the second one, that's odd that they both asked? I eventually figured out that it was their job to befriend tourists, recommend a shopping mall, and arrange to take you there.

I went back to the station to get my things, and then took the Metro to New Delhi station, where I boarded the 16h express train to Mumbai. This time I took AC Three Tier class, which is like Sleeper but with linens, food, and air conditioning.

When I boarded there was a guy in my seat talking to his friend. He seemed quite irate that I asked for my seat.

One of my fellow passengers was playing some nice Indian music softly. The guy in my seat pulled out his tablet and starts watching a movie at maximum volume. What a dick! Then he pulled out his phone and invited his friend to come join us from another car.

I sat by the window enjoying the view. Then in the reflection I noticed that this guy and his friend from the other car are making fun of me, my attire, and are planning a prank in which they will kick my bed all night and pour water on me. This was all in Hindi, of course, but the guy would make an excellent mime.

I asked the guy in the seat next to me, with whom the jerk was originally sitting, to tell his friend that he is being a cock, that I found it quite insulting, and that only an asshole would treat a guest to their country in this way. He spoke English, and had gone to college at Fanshawe in London Ontario. He said something to his friend, who looked a bit embarassed, and shut up for the rest of the night.

I woke up in Mumbai.

Day 25: Kalka to Shimla to Kalka

Narrow gauge train
My young travel companion
Long tunnel
Schedule
Station signs
Turntable
Mountain-side town
Snow capped peaks
I can dig it.
Nifty carts

A UNESCO World heritage Site, the Kalka-Shimla Railway was bulit commencing in 1891. It connected Shimla, in the foothills of the Himilayas at 2186m altitude with Kalka, at an elevation of 658m.

The narrow-gauge rails are 762mm apart, less than half that of "normal" railways, allowing the engine and rolling stock to maneuver around 919 curves, with radii as small as 37.5m.

The line includes 864 bridges and 103 tunnels.

My train from New Delhi arrived about 6:30, and I hurried to buy my INR230 ticket and climb aboard for the 6 hour, 97km trek that I travelled more than 2250km to see.

It was totally worth it. I've posted a handful of photos, and I have dozens more of beautiful mountainscapes that are done no justice by the camera. You had to be there.

The air grew cooler and thinner as we ascended the mountains. There were at least 10 stops at stations along the way. Each had its own chai wallah, curry booth, and sweets shop. All of us hopped on and off, scurrying back when the engine honked its departure horn.

Manual switches and mechanical semaphores, driven by pushrods, cables, and pulleys still control traffic on the line.

Expecting a few tiny villages along the way, I was amazed to find huge towns each with thousands of people, houses decorating the steep rock cliffs like a European picture postcard.

I thought San Francisco had steep hills, but upon reaching Shimla, I realized my plan to stay a while and explore would be almost impossible. In the thin mountain air, at over 7000ft ASL, my body couldn't complete the 2km walk uphill to the post office to find a postcard. The taxi drivers refused to drive me such a short distance. Even at the cool temperatures, a veritable rainfall fell from my pores.

I returned to Kalka on the next train, the sun setting as we descended the steep winding rails.

I giggled as four young fellows eagerly debated cricket. Without knowing the language, I understood the conversation implicitly. One argued his opinion about his team, another took the contrarian view, just for spite, while the rest jeered and pointed out the merits of each. It was a scene you could see in any country, for any sport, on the merits of anything at all.

Noticing my observation, they were immediately curious to know my opinion, to which I explained that I had tried to learn the rules of the game a few nights previous, and gave up on trying to understand overs and wickets.

With their various degrees of English proficiency and confidence, we chatted for the next couple of hours back and forth in simple English. They even tought me some Punjabi, which I quickly forgot minutes later.

Our topics included politics, dating and marriage, the Indian baby girl problem, what -35C feels like, education, and anything else we could think of.

Asking if they had girlfriends, they proudly assured me that they did not, being devout Hindus and Seikh, and looking forward to a day when they will meet their wives to be. I remarked that it must be difficult for them, with only 700 girls for every 1000 boys. "No, we are just more motivated," they laughed. I remarked that with a population of over a billion people, reproduction didn't seem to be an issue. My words were a bit to complex. "India is good at babies!" I simplified to roaring applause and laughter. "yes, you are right", they confirmed.

Remarking that it was -35C back home that night, they asked, "How do you live?" I explained that in the winter we just adapted, staying inside most of the time except for the trips to and from work. "No, how to you live?" they repeated. Having never lived in insulated homes with central heat, the concept seemed impossible.

My new friends were a view into a fun, devout, positive, new India; they are driven to seek education, find and honour wives, raise children, and contribute in every way they can to their India.

None of their spiritual practices condoned drinking, so after our trip we shared chai in lieu of Kingfisher, took photos, and went our ways.

They invited me to join them on their journey, but I had a train back to New Delhi to catch. While waiting, I found some shops near the station, indulged in an Indian sweet or two, and picked up a blanket for the cold trip back.

Day 24: New Delhi

Mom watches son showing off that he's ready for the family business

I arrived at Hazrat Nizamuddin station, one of three major stations in New Delhi around noon. The temperature was slightly cooler than in Goa. I had the better part of a day to kill, as my next train, to Kalka would not leave until late evening.

I took the Metro to Old Delhi station to have them stow my heavy bag. I also need to actually book the next trains. The Metro train was insanely packed, and pushing and shoving was the norm. After an attempt to board the first train, I politely withdrew to wait for the next one. When the next one arrived, I followed the locals, pushing, shoving, and elbowing my way aboard. So un-Canadian it hurt, literally.

En route to Old Delhi station, I noticed that a map showed a National Train Museum in the city. A day to kill, and a train museum! I gave up, however, when the train museum's website yielded no response, and both provided phone numbers seemed to be disconnected.

I spent some time in the station waiting room charging devices and trying to get an internet signal, with very little success.

As the sun began to set, I decided to check out the outdoor market that is right across from the train station. Most of the goods were the standard fare: shirts, shorts, watches, and headphones. The food on the other hand was plentiful, varied, and made on site.

After nearly a month in India, I found my first homemade masala chai: tea, fresh spices, milk and sugar, all just like Aunty used to make. Sadly, most chai in india is made from a powder, like Ovaltine, or a prefab baggie.

For supper I had a veggie thali dinner: two curries, daal, 4 chapatis, raita, naan, pickle; This street food was probably the best I had in India, and the whole dinner cost me a whopping 40 rupees. "Drink clean water", one of the owners demanded as he poured me a glass. "You promise clean?", I challenged. "Drink clean water", he insisted. I drank many glasses, dry from the day's heat and sun, and crossing my fingers that my Hepatitis A and Cholera vaccines had kicked in.

I met a young rickshaw enthusist playing on his uncle's vehicle. I asked his mother if I could take their picture and she agreed excitedly. Once I did, another family member, his grandfather I think, barked, "Money! 100 rupees!". I scoffed and placed 5 rupees in the little boys hand and closed it. "Not for him", I explained, pointing. The rest of the family thought this was hilarious.

I boarded the train for the 265km journey from New Delhi to Kalka, at the base of the Himilayas. I had the upper bunk in sleeper class. It was a cold night.

Day 23: Madgaon to New Delhi in 26 hours

Rajdhani Express

The Rajdhani Express is a high-speed train that runs from Madgaon, Goa to New Delhi, 2000km in 26 hours. It left at 10:00, so after tea and goodbyes, I left Porvorim by bus to Madgaon via Panjim, arriving at 9:30. On my last day in Goa, I finally had the bus “system” worked out.

The train would arrive In Delhi the next day around noon. From there, I would need to make my way across the Delhi subway system to another train station to catch the train to Kalma; however that train would not leave until nightfall, so this would leave me the day to explore Delhi a bit (one of the places my sister would not visit, FYI).

I figured out that if I timed things right, I would not need to seek accommodation, instead sleeping on the trains.

The ticket that I booked to Delhi was AC1, first class. I figured the 26-hour trip might be a good time to spend extra for comfort. My only comparison was sleeper class, which I took from Mumbai to Goa upon arriving in India. The two classes are very different experiences, and I now know my preference.

More on that, later.

Day 22: Last Day in Goa

Last day with the bike

Today I needed to return my bike, or rent it for more days. Still wanting to see other parts of India, I decided to make this my last day in Goa.

After tea, Ulrike and I rode scooter and bike to Candolim beach for breakfast, and a last look at the Indian Ocean. We debated the obsession of the largest of the Brits to come to Goa to lie in the sun and turn a painful shade of red; and places we wouldn't travel, based on reputation or hearsay.

We took the ferry to Panjim, dropped the bike off, and stopped for a cold coffee in the air conditioning, during the hottest part of the day.

Ulrike took the scooter back to the house. We weren't sure if it was able to take us both up the long hill to Porvorim, so I took the bus.

Ulrike watched Downton Abbey, as I studied the rail schedules and booked the next day's journey.

India has one of, if not the foremost, rail systems in the world. On this trip I wanted to see at least a couple of its particularly cool parts.

When I visited India with my parents in 1981, steam trains were still widely used throughout the system, and indeed our trip from Goa to Bombay was by steam train. Today, steam has been eliminated from the system, with the exception of one tourist train that runs every other Saturday. I would have liked to have experienced it nonetheless, but unfortunately I would be back in Canada during the next expedition.

While most of the system has standardized on broad gauge track, there are still some lines that use metre gauge (one metre between tracks), or narrow gauge (as little as two feet between tracks). These were constructed particularly in mountainous and hilly regions to accommodate the small radii required for winding mountain paths.

The highest concentration of these metre and narrow gauge lines are to the North, in the Himalayas. The famous Darjeeling line in Sikkim was crucial to the East India Tea Company's delivery of tea and spices from the mountains.

Another line, from Kalka to Shimli in Himachal Pradesh was built for the Viceroy to transport him from India's heat to his cool summer home in the mountains. This line, more than 2000km from Goa, is where I was headed.

Day 21: The 1000 Rupee Train Schedule

Train schedule scavenger hunt
Aldona Bridge
Quarry (camera doesn't capture its iridescent glow)
Trucks loaded on train
Trucker cooking lunch
Mining road intersection
Sunil
Naroa station?
No road here!
Boats at the ferry docks

In General Aviation, there is a term called the one hundred dollar hamburger. It's what recreational pilots call a short flight to a nearby airport, to fly for no reason other than the love of flying. The hamburger at the airport café is as good a reason as any to leave the ground.

Indian Railways publishes a book called Trains at a Glance, that includes not only every schedule for every train, but all kinds of information about the booking process, menus, and more. It is a priceless tool for planning a trip. Although much of this information is available online, it is fragmented over hundreds of webpages, and the actual schedules can be searched, but not just downloaded en masse for browsing. The publication costs just 45 rupees (less than a dollar) and is about the size and thickness of a phone book for a small city.

Today I would buy one. I planned a route that would take me past four train stations. Hopefully I would get lost along the way. The words, I wonder where that road goes... always make Sarah nervous.

My first leg was to Thivim, the closest railway station, about 19km away, Northeast of Mapusa. As I turned off the highway at Mapusa, I saw a beautiful windy road with very little traffic, so I diverted. Some random left and right turns later, I found myself riding through Nashinola, a stunning village, full of hills and flowers; also the location of my grandmother's homestead.

Following another interesting-looking road, I rode through a quarry. Goa has hundreds of mining roads, each consisting of no more than a lane of Goa's signature red soil. These are uncharted in Google maps, but are detailed fairly accurately in Bing maps.

What amazed me is how I could follow a dirt path for long distances on mining roads without seeing anyone for 20 minutes, thinking I need to give up and turn around, only to stumble into a little village of 50 people, complete with a general store, following by another 20 minutes of nothing. As this happened over and over, I realized that I was seeing Goa's agricultural heritage. Villages like Nashinola, no doubt started as the crossing of two dirt roads long ago. As I studied my maps in detail, I realized what a huge fraction of Goa's population is invisible; unseen and unknown to the vast majority, accessible only by axle-breaking mining roads, their citizens living their lives traditionally in small communities.

Thivim station didn't have any copies of the book. There was however an example of something Ulrike was telling me she read about the previous day.

To save fuel and tires, freight trucks actually load their trucks onto flatbed rail cars for long trips. The drivers stay in their cabs for the extended journey, where they sleep and cook meals. About 100 trucks were on board at Thivim, and the train was leaving the station as I arrived. Think of all of the pollution, carbon, tires, accidents, deaths, and traffic that is being averted.

My next stop was Naroa Station. I went via mining roads. A photo shows an "intersection" of two such roads. A few missed turns led me to a dry dock on the North shore of the Mandovi river, where I met Sunil. Currently unemployed, Sunil and his friends gather for chat and games in the early afternoon. Impressed by is English, I listened as he told me about working in Dubai, fishing for mud, how to heal a cut, and the dream of working in Canada, only attainable if he can save 40,000 rupees for the work placement.

Naroa Station was not just a short ride away. I mean, it was a short ride away, but it wasn't there. It seems to have been abandoned long ago. Next.

Now in the middle of nowhere, the next stop was Karmali station. Inconveniently, the Mandovi river and Malar Island were between me and Karmali. As I was essentially following the rail line, this should not have posed a problem, except that the train had a bridge, and I didn't. How could my closest of friends, a map, lie to me? Thankfully, there was a ferry there, and after being accosted by a mentally-challenged person, I was aboard and on my way to Malar. I didn't check if there was a ferry on the other side of the island.

There was. The North/East half Naroa island was filled with dense communities of small houses and had the feeling of a European village, windy, intersecting roads at all angles, and often paved with stone. The South/West half was primary wetlands. At the end of the road I found the other ferry to Old Goa on the South shore of the Mandovi.

Karmali should have been easy to find. I had been there before. Twice. I had a map. I found it on my fifth attempt. They had a copy! Faced with success, I realized I had not brought my backpack, so I fashioned the book into a seat pad of sorts.

I checked with Ulrike to what she was up to, and met her at the Urban Café in Panjim.

It's harder to get lost with a GPS, but you can if you want to. 6 hours, 45 rupees for the book, petrol, and I assume I ate or drank something along the way. 1000 rupees well spent.

Day 20: Mapusa Market

Keep your ducks in a row, and your chickens... stoned?
NO handbags or purses (or whatever else they are).

I was awoken at 3:30 by a torrential downpour. Rain is quite rare in the winter in Goa, but it does happen occasionally. This is the first, and likely only, rain that I will see on my trip.

The rain and its humidity seemed to bring out more mosquitos. After an hour of killing them, and piling their corpses as a warning to the others, I gave up on getting back to sleep. I chatted with Sarah and then got up and made tea.

I was planning on going to the Goa Science Centre today, followed by SEQC quiz night, but the rain would have made the trip miserable by motorcycle, and impractical otherwise.

Ulrike and I took advantage of a brief pause in the rainy day to go to Mapusa market, an outdoor market for food, clothes, and household items. It got:

  • a leather wallet, INR 100
  • a leather belt, INR 100
  • cargo shorts, INR 60
  • 500g of cashews, INR 275
  • two things for wife-unit
  • a chiku milkshake, INR 30

The chickens in the photo were disturbing. They are alive, and no, chickens do not normally lie in neat rows.

Ulrike found a booth at which, I assume the movie studios, in an insightful new sales strategy (no doubt copying Apple's dollar-a-song iTunes model), were selling new releases such as Birdman and 50 Shades of Gray on DVD for 50 rupees.

Day 19: Quiz and Maracas, but not Together

Ulrike Rodrigues and Ralph Pinto at Maracas

I finished my taxes.

Ulrike and I had lunch at Maracas, where I introduced her to Ralph Pinto, the owner.

I attended SEQC quiz night in Madgaon. The topic was science. My team kicked butt.

Day 18: Taxes

Apartment building construction

Thats it.

Today I did Red Cell's corporate income taxes which are due tomorrow. I did them at the new public library. It doesn't have WiFi, had oppressive security, and a lady yelled in Konkani in the room next to me for 3 hours.

I stopped for a cold coffee with Ulrike and Jessica at the Crown Hotel before calling it a day.

The picture is from the hotel. I took it for Maren. I though she would appreciate the scaffolding. I think it is made of cane.

Day 17: Recovery

Yvan, Matt, and Becky

I worked during the day, primarily at the Urban Café.

Ulrike checked out Goaphoto 2015.

I had a nice beef tenderloin at Maracas, followed by their weekly quiz night. Look, I'm being social!

This was our quiz team, "The Foreigners", me, and Matt and Becky who are Brits who have lived here for 7 months, because Becky's company opened an office here. Becky's voice is delightfully like Hermione Granger's.

"Are you mad, Harry?"

Day 16: Nature. Check.

Trip map
Anjuna Dam
Lake Anjula
King cobra

Yesterday I used Google Earth to plan an amazing motorcycle trip. The loop took me along the northern edge of Goa, up the Western Ghat mountains, into the Mhadei Wildlife Sanctuary, East through Maharashtra, South through Karnataka, and West back to Goa. The trek would begin about 50m above sea level and would peak at almost 1000m (3280ft).

I began the trip around 10:00, leaving to the North up NH17, and East at Mapusa toward Mhadai. Near the entrance to the park is Anjuna Lake, and the Anjuna Dam. Once in the park, I made a few stops.

The first was a path by a small stream. I entered the trail only about 50m to get away from the road to discover what I could hear and see. As I stood quietly, I realized I was surrounded by hundreds of monkeys. They climbed and swung from tree to tree. Although I got a few pictures, they were very difficult to photograph. They were in constant motion, and due to the canopy of the trees, light was insufficient for a fast shutter setting.

The next stop, much further up the mountain, was a lookout that faced Anjuna Lake. It is a beautiful view of the Western Ghats facing the West, Anjuna Dam in the distance.

Although the temperature started to cool as I climbed the mountains, I decided to change out of my jeans, and in to my shorts. I wouldn't normally wear jeans, but I've had enough mosquito bites this week; and covered legs are recommended for snake encounters. However, noon approached, and the heat was increasingly uncomfortable.

Further along, my map showed a mountain road. It turned out to be a trail. I could see on the map that there was a waterfall nearby, so I hoped the trail would lead to a view of the falls. I got off the bike and started trekking. Had I read the sign at the entrance to the trail I would have realized that it was a 6km trail to the peak of Vagheri, the main direction being up.

Tigers have not been confirmed in Mhadai in about 8 years, but it is ideal habitat, and it is estimated that there could be up to 50 living in the 400km² Mhadei and Bhagwan parks. Tigers like jungle, water, trees, and paths, so who knows!

After about 30 minutes of walking, the path on my map had run out, yet the path ahead just kept going. I couldn't hear any sign of waterfalls, so I gave up and turned around. It was around noon by now, but even in the shade, such a steep climb is exhausting in 30C temperatures.

As I walked back down the path, the leaves crunching under my feet, I kept an open ear for any signs of mammalian life. Many lizards scattered as I walked, and possibly the odd mouse. It would have been cool to see a boar, deer, or monkey at least.

I heard rustling in the bushes ahead. Then I heard what sounded like a large mammal taking a pee. Holy shit, I thought; this could be a tiger. I stood dead still as the sounds moved in the bushes, my eyes focused on the location of the sound, looking for motion. It took a few seconds before I realized that the motion no longer coming from the bush, but it was crossing the path in front of me.

Let me clarify, that I am not afraid of snakes, as such. Back home, a walk in the tall wild grass will often stir up a few garden snakes. They are usually about 20cm to 40cm, are quite narrow, and kind of cute. I don't go picking them up, but they don't bother me. Last night, I was reading up on Indian snakes, just in case I encountered one. That's why I had worn the jeans (that I changed out of). Of course, India has venomous snakes, and although for the most part they try to ignore humans, some 40,000 people die of snake bites each year. It is obviously a populous country, and on a per-capita basis it would  be comparable to about 1100 Canadians, about the same as the number of deaths by accidental falls. Nonetheless, while death-by-tiger would be the ultimate honourable sacrifice for my favourite mammal, death-by-snake-bite would leave me humiliated for eternity.

I mention this because the snake that was crossing in front of me was about 250cm long, and 8cm in diameter. At this point I was about 6m from the creature. Remembering my previous night's reading, I slowly stepped backward and grabbed my camera. It stopped to check me out. Remembering that stomping on the ground would send the snake vibrations that a large scary predator was nearby, I gave it ago. Now, I didn't spend any time while learning about snakes to memorize all the patterns and colours, and which ones were venomous, I did recall that only the cobra does that thing where it lifts the front third of its body and makes that hood shape and flicks its tongue at what it perceives as a threat — like the snake in front of me was doing.

Adrenaline kicked in, and I don't remember what I did next, but it resulted in the snake slithering away and doing its thing. I confirmed that its noise was going well into the distance before proceeding.

The rest of the trip was beautiful and enjoyable. If you made a list of what motorcyclists love, it would include twisty roads, mountains, little traffic, and perfectly manicured asphault. That was exactly what I got; at least while in Goa and Maharashta. The roads in Karnatika were awful. I had to ride for several hours in first gear, dodging pot holes, some 3m in diameter and 15cm in depth.

Sister wasn't home yet when I returned, so I went to the local shops and had a beer with the local men at the "wine store". Ulrike arrived shortly after I returned. I fired up the computer, curious about what snake I found. It was a King Cobra. In fact it looked exactly like this one:

I think that was my last nature walk in India.

Day 15: Hot and Humid in the 'hood

Bannu feeds the neighbourhood dogs

Today was mainly a research and planning day.

I got the scoop on the Ali Salem Bird Sanctuary, the tigers waterfalls in the Mhadei Wildlife Reservation, some amazing roads to check out on the motorbike, and a train route that winds up the Western Ghats, through tropical rainforest. All are nearby.

For reference, pepper spray is available on Amazon.in, but anti-venom is not.

I went through the infuriating process of trying to get a (second) SIM card in India.

During a walk to the shops, Ulrike and I ran into Bannu, feeding the neighbourhood dogs. They all know to show up at 5:30 for chicken and rice.

Day 14: Shave and a haircut, 10000010 bits

Yvan

Best value so far: INR 130 for shave, haircut, and head massage. I'm definitely a fan of the straight razor shave and massage; all told, about 45 minutes.

I got a button sewn onto my shorts while I wore them.

The neighbour really wanted to visit us. We weren't sure why, but thought it could be exciting. Weren't we disappointed when he tried to recruit us for Amway.

Day 13: Sunday at the Beach

Ulrike at Ozran Beach

Happy birthday, Mama!

Sunday was a "day off".

It was mostly spent at Ozran beach, a small beach south of Vagator.

We rode our bikes home, ate "Chinese food", and watched The Kings of Summer.

Waking Up Over Tea and Paó

Tea and Paó

We are usually up around 8:00, and Ulrike has introduced me to the ritual of Tea and Paó on the front veranda. The air not cool, but not yet hot, it's the perfect time to wake up, breathe the fresh air, listen to the birds and dogs, and maybe do some planning.

Tea and milk is accompanied by Paó with butter and marmelade.

Paó is a legacy from Portuguese colonization. Baked in a central location during the wee hours in the morning in mud-lined ovens, it is distributed by Paó wallers on bicycle, their horn honking as they wind through the residential laneways. It is the perfect combination of thin chewy crust and soft doughiness.

You soo soo in public once, and the girls never let you live it down.

Cows Vacation in Goa Too!

Day 10: Coffee Talk in Panjim

Fear Him!

Today we rode into the city to see a movie (Jupiter Rising) with Jessica. It was cancelled for reasons unexplained.

Instead, we went to the market, where I picked up some things for Sarah, had iced coffee at the Panjim Inn, and walked around the area, including a stop at the Church of Our Lady of Immaculate Conception.

Before leaving town, I traded my bike for another one, this time with working lights.

Yes, I will shut up about the cashews now.

Cashews with skins

Papa would always return from Goa with Feni and bags of cashews like these, with the skins still intact. A bit of an acquired taste, the skins add the slightest bitter/sour/nutty flavour that beautifully complements the natural buttery flavour of the nut.

Every time I go to an Indian or asian market back home I check to see if they have any of these nuts, but they never do. My best guess is that they are considered inferior to the peeled raw and roasted nuts that are ubiquitous.

I found them bagged at the local general store, and they're as great as I remember.

Day 9: A Day to Catch Up, and Parks Can Be Sad Too

The Sad Park

On a cool and humid morning, a thick mist lingered outside. As it condensed on the leaves of the trees overhead, water droplets formed into drops. The trees magically rained, the skies sunny, albeit diffused overhead.

After morning tea, I walked to the shops to get a few things, including money from an ATM to pay for them. The neighbourhood general store has a little bit of everything. I brought home:

  • Coke (it has been a while)
  • Maaza (a mango drink with real juice, bottled by Coca-Cola)
  • Cashews with skins
  • Kingfisher Draught Tall-boy
  • Gulab Juman (cake balls in rosewater syrup)
  • Toothpaste, tissues, and other necessities

The ice cream cone didn't make it home.

On the way to and from the shops is what I call The Sad Park. The sign at its entrance, "SCHBS LTD. DEFENSE COLONY CHILDREN'S PARK", is the only part that isn't rusty, broken, or overgrown. You can walk through the rusted gate to get a little shade, or maybe slide down the uncomfortable-looking (yet elaborate) concrete slide, but the teeter-totter decays on the ground next to its pivot.

I can imagine 40 years ago; the screams and cheers of children playing here could be heard throughout the neighbourhood as the sun lowered in the sky.

Tags: 

Day 8: Laundry, Knives, Banks, and Film

Knife man!

Back in Guelph, on a hot summer's day, you may hear the sounds of bells ringing, gaining in volume. It's one of two people, the Dickie Dee (ice cream) boy, or the knife sharpener.

During morning tea we heard the bells and glanced up the street. A young man carried a welded steel frame with a grinding wheel and pedal — he is a knife sharperer. Note I said carried. I felt for the poor guy. If I had my tools with me I'd offer to weld on some wheels to this thing, probably 20kg or more. Ulrike rushed to the kitchen and returned with a handful of knives and an assignment.

Today was laundry day. We had both run out of underthings, and my whole wardrobe was ready for a wash. The little washing machine is the most high-tech device in the house. In the humid weather, the drier (clothes line) on the other hand, took quite a bit longer; so I spent most of the day in underwear.

After days of fighting with the Vodaphone SIM card, I gave in and went to the Vodaphone store. The girl at the desk confirmed that yes, it was weird that I had a signal, yet could not connect, but in a few minutes she diagnosed the problem. Although I had just added a INR 1250 data plan to the SIM, it needed at least 1 rupee on balance in order to connect to the network. Simple, yet absent from the FAQ and every search I tried.

While in the village I tried to withdraw money at the ATMs, having used my last 10 rupees to add to the Vodaphone card. A few days earlier I had pulled INR 10,000 out of an ATM in Bombay without difficulty, but for reason still unknown, it was not so easy here. After an hour and 8 banks, the ATMs read CALL BANK, an indication that my account was locked out.

That wasn't supposed to happen. I had called all of my banks before leaving Canada, ensuring they note the timeframe and destination of my travels. ScotiaBank assured me that if I encountered any problems, I need only call the number on the back of the card collect, and they would accept the charges. After 2 hours of trying I summized that if there was indeed a way of calling Canada from India collect, it was beyond my abilities. I couldn't even figure out the equivalent of dialling 0 to speak to an operator.

GOA Photo FestivalUlrike, her writer-friend Jessica, and I went to the 2015 Goa International Photo Festival. The exhibits included photos of India by Indians, winners of the World Press photojournalism awards, and other international photographers.

Day 7: Kama Calangute

Take Away Sperm

Details to follow.

My Valentine

Yvan in Panjim

To my beautiful and loving wife, Sarah:

I miss you so much, and think about you all day, every day. I would say I wish you were here, but that would be a selfish sentiment. I know you'd melt. As to whether you'd rather be home in -25C temperatures, I don't think either of us could say for sure..

Thank you for being independent enough to let me leave you for a month, but not so much that you won't want me back.

Soon we will be back in each other's arms, and we'll both have so many stories to share.

Baby, you're the greatest.

Day 5: Goa Carnival, and Stretching Out

Story to follow.

Day 4: Mumbai to Goa

Sleeper class on the Mondovi Express

The flight arrived ni Mumbai more or less on time.

I had booked berths in a couple of trains (in case one fell through). If I could make it to Vasai Road Station in about 90 minutes, I'd make it to the train on time.

Asked a taxi driver, hoping to make a fare, how long it would take to get from the airport to Vasai Station. He told me about 2 hours. After I explained that I needed to catch a train in less than an hour, the estimated time of arrived went from 2 hours to 1. Hmmm... I said it was OK, I would catch my other train instead, but he was quite persistent that he could make it. Tired from sleeping all day, who was I to disagree.

It was like I was in a chase scene in a Hollywood movie. At speeds up to 130km/h on busy streets intended for 40km/h traffic, death was a legitimate concern. We arrived 10 minutes before my train was supposed to leave. I thought I took video along the way, but apparently I didn't press Record.

Unfortunately, not understanding the layout of the station, I was on the commuter side of the station. I waited for my train at the brightly lit platform. As I did, little did I known that my train was leaving from one of the dark until platforms, six tracks over.

It took me a while to realize that I had missed my train. I asked a lot of people about it, by no one spoke English. Finally I found the Station Manager who explained that he looked for me at that track, but I wasn't there. That train would have been a first-class air-conditioned single occupancy berth.

I figured out how to take the commuter train to the Dadar station in Bandra so that I could catch the Mondovi Express a few hours later. By this time it was about 4 in the morning and I was surrounded by very sleepy commuters on their way to work.

It had been a long time since I had anything to eat or drink, and I didn't have any rupees. Luckily there were ATMs at Dadar station, so I took out some money and got some breakfast.

My train arrived more or less on time, my berth waiting for me. I had the upper-side berth in Sleeper class. Each car seats or sleeps 72 people, separated into sections, each with 2 side berths against one side, and two sets of 3 berths across from each other, perpendicular to the side, like this:

Sleeper class layout

Sleeper class is not air conditioned, and it was in daytime configuration, meaning the middle bunks were decommissioned to let people sit. With the windows open, the lack or air conditioning wasn't really an issue. After trying to stay awake, I gave in and crawled up to my bunk, and slept pretty much the whole way to Goa, or about 12 hours. It did get pretty hot up there during the daylight hours. Toward the end of my journey I had a couple of samosas on the train.

Upon arrival I took a taxi to Porvorim, and with a few stop for directions, ultimately pulled up at the house just as Ulrike was standing outside.

Day 3: Asleep at FL350

View from the back of a Boeing 777

I slept.

A lot.

Today may not have actually existed, due to the miracle of time air travel. I'm not entirely sure. If as I suspect, time jumped directly from February 11 to February 13, please disregard this post.

I do remember booking a train to Goa while at London Heathrow, and eating the best airplane food enroute BOM on Jet Airways. In particular I remember two courses of ice cream bars.

With about 500 people aboard the Boeing 777, I certainly wouldn't call it spacious, but real food and ice cream bars go a long way.

Photo: BMI Alan

Tags: 

Day 2: Take Two

Stupid winter

I spent a few hours on the phone with Expedia and Turkish airlines. When the Expedia guy told me about the $430 rebooking fee, he neglected to mention the "plus difference in ticket price" part. Not surprisingly, a same-day ticket to India is quite a bit more than one booked a month in advance. In short, they wanted almost $2000 to rebook the flight.

First, I don't have a spare $2000 kicking around; secondly, other airlines are offering the same flight for about $500 less, no strings attached. Nonetheless, not something could afford.

The Turkish Airways rep added fuel to the fire by telling me they will not honour the return portion of my return ticket, because I was a "no-show" for the first segment. Some bullshit about airline policy. The fuck they wouldn't. Now it's personal.

Feb 23 note: Planning on showing up for return flight (still noted as valid on website). If I have to buy a ticket I will sue and take this "policy" to the Supreme Court if I have to.

I spent a few hours researching and considering my options. The one I ended up choosing was a $600 one-way flight through Priceline.com, offered after a failed name-your-own-price attempt.

With only 2 hours to departure, I dropped everything and headed to the airport (checking first for my passport), dropped off the rental car, and made it to the gate with 30 minutes to spare.

Day 1: False Starts and Turkish Hospitality

Turkish Hospitality

They say that absent mindedness and brilliance often come together and in proportion to one another.

On February 10, I must have been particularly brilliant.

Not one to pack weeks, or days, or day in advance, I do nonetheless take an organized and thorough approach. I had started my packing list and to-do-before-departure list days before. I had to make a few sacrifices on the to-do list, but the packing list was complete; by my departure date everything was packed, checked twice, and so reflected on the list.

I had heard a wise travel trip is to photocopy all your important documents: passport, visa, driver's license, etc. The idea is to make two copies: one to take with you, in case you somehow are separated from the originals, and another to leave at home in the security of a loved one, perhaps to provide to the consulate in the event of disaster or decree of war. I followed this advice to the letter. Better safe than sorry!

After a relatively productive day at the office, Sarah and I drove to the airport, with a brief stop for supper at the South Side Burger Company. I arrived at the airport 2.5 hours before my departure time, and kissed my sticky-bun adieu.

I stopped briefly on the way to the Turkish Airlines ticket counter to ready my documents for inspection and receipt of my boarding pass.

Oh fuck.

No, wait.

Shit.

My passport was curiously absent from my backpack. Immediately, I knew exactly where it was.

I approached the friendly ticket clerk. "I have a problem," I began, explaining my situation. After a brief exchange of words, we had a plan. I would simply connect with Sarah, who would be delighted to retrieve my passport from whence I left it (the platen of the photocopier of course), rushing it back to me at the airport with plenty of time to meet the plane at my gate. "I will explain the situation to my supervisor," the clerk explained. I would get my passport 30-45 minutes before the flight, head through security, to my gate with time left to peruse the magazines at the gift shop. "You are checked in, and we only need to see your passport."

Moments later I received an SMS confirming that I was checked in, along with a confirmation code.

Getting in touch with Sarah was tricky, but she nonetheless came through for me. Some 90 minutes later, my passport in hand, I rushed to the ticket counter to collect my boarding pass.

It was unstaffed. All the ticket agents had disappeared, and with 45 minutes remaining before my flight, not even the supervisor was in sight. I had already checked in, so maybe I didn't need a physical boarding pass. Most airlines got rid of those years ago.

SMS confirmation code in hand, I rushed to the security line to get to my gate. The guard at the entry to the security queue stopped me and demanded my boarding pass. I explained that I didn't have one, and that I couldn't get one because all the ticket agents were gone, and that I had an electronic confirmation do-jiggerer right here, and "I need boarding pass. I must scan barcode."

I spent 5 minutes trying to find anyone resembling a Turkish Airlines agent to no avail. I appealed to a helpful looking airport employee. She suggested I pick up the info help phone and ask the to page the Turkish Airlines supervisor. Brilliant!

I picked up the phone and waited while it auto-dialed my new best friend, perched to make my request. Sadly my new best friend had an automated call attendant, but that was OK. My call was important to him, I just needed to stay on the line. The call duration timer on the help phone incremented. 0:10... 0:30... 1:00... 5:00... 10:00... 16:00... and he granted my wish.

I sat by the ticket counter in anticipation of the page, and the apologetic supervisor rushing to print my pass. Some 10 minutes later, I heard the page at last.

No one came.

Desperate, I ran back to security to reason with the guard. Maybe I just didn't explain myself well enough. You see, I've checked in already. I'm good to go.

"I need barcode."

Back at the ticket counter I sat hopefully. A security guard noticed that I was in an empty queue to speak to a non-existant agent. He directed me toward a Turkish Airlines office where I found a person to hear my woes. She pointed out that the flight was leaving now ,and there was no way I could be aboard.

"What are my options?" I pleaded.

"There is another flight at the same time tomorrow. You will need to take that one."

With acceptance, I agreed, "OK, please put me on that one." This is the point where companies with exemplary customer service shine. They empower their front-line staff to solve problems quickly and with empathy for their travel-weary pax. A few keystrokes, and I'd be all set for Plan B. Unfortunately, I was flying Turkish Airlines, not Southwest or WestJet.

 

The sign read, "Turkish Hospitality". My sister and I, during a visit to her a few years earlier, were searching for a good cup of coffee from a mom and pop shop in Vancouver's west end. "What do you think that means?" we wondered aloud. Long story short, it meant that you got a warm cup of coffee half an hour after ordering it, with a side-order of contempt.


"Call your travel agent and ask them to rebook."

Unwilling to call Sarah for a third trip to the airport, I wandered toward Car Rentals. As always, the Enterprise agents greeted me with a friendly attitude, and empathy for my situation. After glancing at my driver's license, the booking agent wished me a happy birthday and was excited to see someone from his alma mater. He apologized profusely for charging me the discounted rate, still a bit high due to the last-minute booking.

Once home, I called Expedia. After 45 minutes on hold I got to speak with an agent. There would be rebooking fee, collected on behalf of the airline, but it could be done. He called Turkish Airlines on their travel agent line to complete the transaction.

They were closed.

freebsd-update will not upgrade from 9.0-RELEASE

When attempting to update from a fully-patched 9.0-RELEASE, you may encounter results like these:

Looking up update.FreeBSD.org mirrors... 5 mirrors found.
Fetching metadata signature for 9.0-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.
Inspecting system... done.

WARNING: This system is running a "venus" kernel, which is not a
kernel configuration distributed as part of FreeBSD 9.0-RELEASE.
This kernel will not be updated: you MUST update the kernel manually
before running "/usr/sbin/freebsd-update install".

The following components of FreeBSD seem to be installed:
src/src world/base world/doc

The following components of FreeBSD do not seem to be installed:
kernel/generic world/games world/lib32

Does this look reasonable (y/n)? y

Fetching metadata signature for 10.0-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.

The update metadata is correctly signed, but
failed an integrity check.
Cowardly refusing to proceed any further.

You will find lots of people telling you to run this command

sed -i '' -e 's/=_/=%@_/' /usr/sbin/freebsd-update

It won't work. Instead you need to apply this patch:

Index: freebsd-update.sh =================================================================== --- freebsd-update.sh (revision 265210) +++ freebsd-update.sh (working copy) @@ -1110,7 +1110,7 @@ fetch_metadata_sanity () { # Some aliases to save space later: ${P} is a character which can # appear in a path; ${M} is the four numeric metadata fields; and # ${H} is a sha256 hash. - P="[-+./:=%@_[[:alnum:]]" + P="[-+./:=%@_~[[:alnum:]]" M="[0-9]+\|[0-9]+\|[0-9]+\|[0-9]+" H="[0-9a-f]{64}"

An Update is Available for Your Computer

Single Threading, or Why won't my application use more than 12/25/50% CPU?

I get this question a lot.

You're running a graphics program or some other application that is performing a complex operation that is taking several minutes, yes the CPU usage won't surpass one of these values.

If the value changes up and down, your application is probably I/O-bound, meaning the CPU is waiting for the disk or network to catch up before it can do the next step.

However if it is pegged at one of these values, it is because the CPU-bound operation is single-threaded, and you have a multi-code and/or hyperthreading CPU. In my case, I often see a process pegged at 12/13% because I have a 4-core hyperthreaded (8 virtual CPUs) i7-2600K processor, and the application has not or cannot split the operation over multiple threads.

Text missing when you open a CAD PDF in Illustrator

Illustrator is usually prettey good about opening PDF files and keeping the text in tact, although usually with some font substitution issues.

I have found that when opening CAD drawings from PDF files that it says it is going to substitute fonts, but when the file opens, all text is missing. There is a quick workaround:

  1. Create a new empty document the same size or larger than the source PDF.
  2. Use File | Place to place the PDF in the empty document.
  3. Use Object | Flatten Transparency...
  4. Check Convert all text to outlines.
  5. Uncheck Convert all Strokes to outlines.

Businesses I predicted would fail

Name Date of Prediction Date of Failure Reason for Prediction Destiny
Blackberry 2007 2013 RIM decided to focus on the saturated consumer market and ignore its enterprise market. I sold my shares for a tidy profit. Less than 2.3% market share and $6 billion loss in 2014.
Eaton's 1992 1997 No focus, decline of department stores, overpricing, poor marketing choices, understaffing, closure of key departments. Bankrupt and acquired by Sears
Zellers 1994 2011 Entry by Walmart into Canadian market, poor inventory control, inconsistent brand, degredation of physical stores, poor upkeep of displays Liquidated, real estate bought by Target.
Target 2011 2015 Chose to enter Canadian market at time when Zellers failed and Walmart thriving, no e-commerce, poor online presence, poor market research, failure to replicate US stores in Canada. Ceased all Canadian operations.
Sears 1997 waiting Competition between catalog and in-store sales. Confusing e-commerce strategy, decline of department stores, understaffing, fragmented business strategy.  
General Motors 1995 2009 Brand fragmentation, poor choices in product line. Filed for bankrupcy protection in 2009. Discontinued failed brands.
Syquest 1995 1998 Slow reaction to success of Iomega Zip drive Bankrupt and acquired by Iomega
Quark 1999 debateable Lack of innovation, leaving a captive market for Adobe InDesign, failure to release OSX version of product until 2003 (two years too late), overpricing. Went from 95% market share to immeasureably small.
Apple 1999   PC market share falling from 10% rapidly, fragmentation of product line, poor licensing choices. I got this one wrong. One word: iTunes. The dollar-a-song model reestablished revenues that funded the R&D for iPhone and rescued the recording industry.

Looking for an objective about your business? I can help.

Chris, the Ramones, and the summer of '89

The Ramones

Sensory memory. I's when a sound, smell, taste, etc. takes you back to latent memory.

The CBC just played Teenage Labotomy and I was instantly transported to the summer of 1989. It was a summer that I hope most kids get: the indulgence of doing as little as possible.

I spent most of that summer with my best friend Chris.

Chris and I both lived on Pine Grove Crescent in Lisle Ontario. More accurately, Pine Grove Crescent was a "suburb" of about 50 people about a kilometre outside the metropolis of Lisle, population 300 or thereabouts.

Chris got me my job at the Sweet 'n' Spicy Restaurant in Alliston. We worked together as dishwashers. We worked hard, and we had a lot of fun. We weren't old enough to drive yet, and so we spent many nights together at 2am riding our bikes the 15km or so home, usually with a couple of beers under our belt.

Much of that summer was spend hanging around the neighbourhood. Chris was into skateboarding, the Ramones, and Thrash culture. He usually (willingly) dragged me along, and I even picked up a few moves on the quarter-pipe.

Most days included a bike ride into downtown Lisle (where the two roads intersect) to the the gas station/restaurant/movie rental place/arcade (all the same tiny place) to play pinball, video games and flirt with the girls.

Chris, if you're reading this, give me a call.

Tags: 

Xmas List

Tags: 

Days in which everything works the first time look like this.

Tags: 

How to add a tab to a Table of Figures in Word

You have a Table of Figures in word and the descriptions do not line up, and some of the lines wrap. Since there isn't a tab after the figure/table number, lines do not wrap correctly.

There isn't a way to do this by setting a format when you create the table. You have to start when you are creating each of the captions.

You have to add a tab in each caption e.g. Figure 23:<tab>A photo of a kitten.

Then once you build your table you can set up tabs for the style used in your Table of Figures.

We miss you so much, Maggie.

We never expected to lose you so soon.

You are sweet and gentle and kind; quiet, but ready to give a non-intrusive tap on the shoulder when you need a pat or fell left out.

I know you often felt stressed out, but I hope you enjoyed spending the last eight years with us.

Xamarin Certified Mobile Developer

I took my exam yesterday. If you know anyone who needs cross-platform mobile apps, let them know that you know a Xamarin Certified Mobile Developer.

Tags: 

No, I didn't mean tampons.

Tags: 

How to use ActivStats for Data Desk with Minitab

So you are taking a statistics course, and the textbook includes a DVD-ROM with ActiveStats for Data Desk, but the course requires you to purchase ActiveStats for Minitab.

The bad news is that ActiveStats for Minitab will cost you another 60 bucks or more.

The good news is that Minitab is an excellent statistics package and it is way better than Data Desk; and if you're willing to make a tiny effort, you don't need to buy ActiveStats for Minitab.

What we are going to do is let ActiveStats open data sets in Data Desk, and then copy-and-paste them into Minitab.

There are two circumstances you will need to do this.

  1. An instructional exercise asks you to plot or analyze something.
  2. A homework assignment asks you to plot or analyze something.

They both work the same way. Let's look at an example.

For every exercise in ActiveStats for Data Desk, there is an equivalent one in ActiveStats for Minitab. They are not always named the same thing, but they are otherwise identical.

In chapter 7-4, there is an exercise called Examine Mortality and Education Using Data Desk. We'll do it in Minitab.


If we click the icon, the exercise is opened in Data Desk.

One of the little windows contains the data set. Select the each of the data columns by holding down shift while clicking each one. Ignore the once called Reference.

Now copy these by pressing Ctrl-C or Edit|Copy Variables. You will be asked if you want the variable names in the first row. Click Yes.

Now fire up Minitab with an empty project. Position the cursor by clicking in the grey cell that is one over and one down. Press Ctrl-V or Edit|Paste Cells. Poof! There is your data set.

Now all you need to do is complete the exercise in Minitab. You may need to use your brain to find the equivalent function in Minitab for each in Data Desk, but they are both statistics software and the terminology is similar or identical.

For this exercise we need to calculate the Pearson Product-Moment correlation, and plot a Scatterplot. Hmmm... I bet Scatterplot is under the Graphs menu... yup. And correlation?

Found it!

Enjoy learning about statistics and sticking it to the man. If this article saved you $60, please consider donating $10 or more to the Guelph Humane Society. The pups and kitties will be grateful.

Centring in CSS: A complete guide

Server error: '501 5.1.3 Bad recipient address syntax'

A user of my mail server recently had some recipients of a message returned. He received this message from my server.

The following recipient(s) cannot be reached:

       'redacted@civ.utoronto.ca' on 8/20/2014 10:35 AM
             Server error: '501 5.1.3 Bad recipient address syntax'

       'redacted@wlu.ca' on 8/20/2014 10:35 AM
Server error: '501 5.1.3 Bad recipient address syntax' 'redacted@uoguelph.ca' on 8/20/2014 10:35 AM
Server error: '501 5.1.3 Bad recipient address syntax' 'redacted@uoguelph.ca' on 8/20/2014 10:35 AM
Server error: '501 5.1.3 Bad recipient address syntax' 'redacted@eng.uwo.ca' on 8/20/2014 10:35 AM
Server error: '501 5.1.3 Bad recipient address syntax'

The other recipients were delivered successfully. On the server-side, Postfix logged:

Aug 20 14:35:17 darwin postfix/smtpd[63431]: warning: Illegal address syntax from 
or087.uwaterloo.ca[129.97.9.53] in RCPT command: <'redacted@uwo.ca'>
Aug 20 14:35:17 darwin postfix/smtpd[63431]: warning: Illegal address syntax from
or087.uwaterloo.ca[129.97.9.53] in RCPT command: <'
redacted@wlu.ca'>
Aug 20 14:35:17 darwin postfix/smtpd[63431]: warning: Illegal address syntax from
or087.uwaterloo.ca[129.97.9.53] in RCPT command: <'
redacted@eng.uwo.ca'>
Aug 20 14:35:17 darwin postfix/smtpd[63431]: warning: Illegal address syntax from
or087.uwaterloo.ca[129.97.9.53] in RCPT command: <'
redacted@grandriver.ca'>

The problem is that these particular addresses were literally enclosed by apostrophes. I don't know why the user's client (Outlook) misformatted these addresses. He confirmed that he did not copy them from another application or change anything at his end.

To fix the problem I configured Postfix to filter and rewrite the address when it is sending commands to other MTAs.

I added to main.cf:

# Strange filtering
smtpd_command_filter = pcre:/usr/local/etc/postfix/command_filter
and created the file command_filter:
# Fix malformed emails that are surrounded in single quotes.
/^RCPT\s+TO:\s*<'([^[:space:]]+)'>(.*)/     RCPT TO:<$1>$2

This fixed this oddity in which RCPT TO commands were not RFC 821-compliant.

postgrey won't start after FreeBSD upgrade

echo 'postgrey_flags="--inet=127.0.0.1:10023"' >> /etc/rc.conf
chown postgrey:postgrey /var/db/postgrey
/usr/local/etc/rc.d/postgrey start

Oh google

Tags: 

Bicycle engine clutch gear replacement (Part 5: Bearing assembly)

Supplies: New bearings (optional), grease (wheel bearing grease, CV joint grease, or molybdenum grease), degreaser, block of wood
Parts: clutch gear (disc), clutch pads
Tools: arbor press or vise, drill, large socket

  1. Thoroughly clean the bearings and bearing race with degreaser
    Cleaning bearings
  2. Apply enough grease to the race to make it sticky.
  3. Pro tip: If you leave the bearings and race in the magentic part tray for a while, they will become magnetized and will almost assemble themselves.
  4. Install each of the bearings into the race.
    Installing bearings into race
  5. When all bearings are installed, thoroughly coat them in grease. Get it right up in there into their private parts.
    Greasing the bearings
  6. Seat the race into the new clutch disc.
    Installing bearing race
  7. Make a tool like the one shown.
    Press tool
  8. Sandwich the assembly tool, clutch gear, bearing race, flywheel and a large socket together.
  9. Use an arbor press or vise to press the assemblies into place.
    Pressing everything together
  10. Pro tip: Preheat the bearing race with a hot air gun to make it expand before assembly.
  11. Wipe away all excess grease.
  12. Install the clutch pads into the clutch disc.
    Installing clutch pads
  13. Use a wooden block and hammer to seat the pads, if necessary.
    Seating the pads

Bicycle engine clutch gear replacement (Part 4: Repairing gearbox and cover)

Supplies: epoxy putty, Goop, rubber gloves
Tools: flat file, die grinder or dremel, gasket scraper

If this were any other vehicle, most people wouldn't attempt to repair a gearbox in the state, they'd just order replacement parts. Well, the only replacement part for this problem is a new engine, and although I did tell you to buy a spare engine, this break can be repaired.

If you have a TIG welder you might be able to repair this. I would be surprised though, because the metal is of such poor quality, I think it would just evaporate.

I used a combination of epoxy putty and silicone adhesive. Epoxy putty comes in a stick and is sold in a tube under names like JB Weld. It costs about $5-7 a tube. If you chop off a chunk, it will look something like:

Epoxy putty

  1. Use the gasket scraper to remove all remnants. A screwdriver or razor blade can work in a pinch, but be careful. The steel in the screwdriver or blade is harder than the aluminum allow and can scratch or gouge it.
    Gasket scraping
  2. Time to put on the gloves.
  3. As you can see, the two parts of the epoxy are rolled together. To activate the epoxy you thoroughly mix the two parts by smooshing it like playdoh. After about a minute it will start to warm up and is ready to mould. The clock is ticking. In about 5 minutes it will be unworkable.
  4. I split up the putty and moulded it to repair both the gearbox and the cover. The cover worked pretty well, but unlike playdoh the epoxy is not sticky, it is quite dry. I gave up on having it stick in place and instead just made it fit perfectly, as if it were stuck in place. After a few minutes it was hard, and I had a nicely cast piece that wouldn't stay in place.
  5. Goop to the rescue! Goop is a silicone-based adhesive and it is amazing at bonding things that usually don't like to bond, like glass and metal. It comes in gel form in a tube like toothpaste. A tube is about $10 I think. I generously coated the cast gearbox piece in Goop and held it in place for about a minute. It cures quickly once exposed to air.
  6. When both parts were repaired it was time to touch-up the repair. I used a file to smooth the mating edges of both pieces so that they were flat in the same plane as the rest. I test-fitted the gears and there was a bit of interference in a high spot, so I ground it down using an air die grinder.
  7. A few blasts of compressed air cleaned up the job. If successful, the two pieces should mate perfectly (no gaps) and the gears should be able to turn freely.

Bicycle engine clutch gear replacement (Part 3: Clutch assembly and bearing disassembly)

Tools: awl, hammer, magnetic part tray

  1. First we need to split the clutch assembly into its two components: the flywheel and the clutch disc. Use an awl and hammer to gently tap the pieces apart. Do this in the parts tray, because the bearings could spill out at any time.
    Separating the clutch assembly
    Separated halves
  2. The clutch disc and the bearing race should separate easily.
    Bearing race
  3. Collect all the ball bearings. They are very small, and like to hide.

Bicycle engine clutch gear replacement (Part 2: Gear removal)

Getting to the clutch gear

Tools: small flat-head screwdriver

  1. Disengage the clutch and lock it.
  2. Remove the gearbox cover by removing the five Phillips screws.
  3. Remove the flower-but retaining screw with the small flat-head screwdriver.
  4. Remove the flower nut by hand.
  5. Remove the pressure plate and return spring

Removing the clutch gear

Tools: 2 socket wrenches, 14mm socket, two 19mm socket, Super Magic Tool (SMT)

  1. Remove the clutch-lever cover by removing the three Phillips screws.
  2. Remove the 14mm nuts at the gearbox end by using two socket wrenches simultaneously, one on the gearbox end and another on the clutch level end. This will prevent and strong forces from being applied to the chain.
  3. Install the large end of SMT into the clutch gear assembly.
    Installing SMT
  4. Using a 14mm socket, turn the small half of SMT into the large half. It acts as a gear-puller to remove the gear assembly.
    Gear assembly removal
  5. Find the Woodruff key before it is lost, and put it in the magnetic part tray.

Pro tip: If your gearbox exploded like mine did, and the Woodruff key is missing like mine was, the two may have something in common.

Removing the Drive Gear

Tools: Big-ass flat-head screwdriver, SMT, magnetic part tray

  1. Remove the retaining screw with bag-ass screwdriver.
  2. Install the medium size end of SMT into the gear,
    SMT installation in drive gear
  3. Using a 14mm socket, turn the small half of SMT into the large half. It acts as a gear-puller to remove the gear assembly.
  4. Find the Woodruff key before it is lost, and put it in the magnetic part tray.
    Woodruff key

Super Magic Tool (SMT)

Super Magic Tool (SMT)
Pair of wrenches using SMT

If you plan to work on your chinese bicycle engine, you need Super Magic Tool. Technicians call this a Specialized Service Tool, or SST; but I like SMT better. If you bought the engine as a kit, it probably came with SMT. If not, do not attempt disassembly/assembly without it. Pick one up for three bucks.

It is the fucking bees' knees.

The engineers that designed this engine cleverly threaded just about every shaft, passage, hole with one of three sizes of fine threads. SMT can be installed into or over any of these. It is a press, a puller, and an alignment tool, all in one.

Bicycle engine clutch gear replacement (Part 1: Trouble)

I have one of those chinese bicycle engines that you see all over the place. In my home town of Guelph, I see one almost every day. You see them sold all over the place: online, the back of Popular Mechanics, eBay. I got mine from a Canadian company called ZoomBicycles a few years back. They are all the same engines.

If you want a fun way to give new life to an old bicycle, one of these engines is a great way to do so. That said, if you are not mechanically inclined and/or have no interest in learning, these are not for you. I've spent about 1 hour riding my motorbike, and about 24 fixing it.

You see, these little two-stroke engines are beautifully engineered. Unfortunately they are made with poor materials, which is not surprising since you can find them for about $100 for a complete kit if you shop around.

Pro tip: In addition to the kit, buy a spare engine, carb, gasket kit, 10+ clutch pad sets, spare clutch and drive gears. They can take weeks to order from China (some are available in North America).

I won't go into detail about the installation. It takes a few hours, the instructions are pretty good, and unless you're missing any major parts, they usually run the first time.

One recommendation though: the manual recommends a fuel:oil mix of 16:1 for the first two tanks. I know where they are coming from, because you want lots of lubrication while the rings wear in; however at 16:1 combustion is far from optimal, and yoy may spend lots of time try to tune a poorly running engine when it is actually fine.

Pro tip: Use a fuel:oil ratio of 20-25:1 for the break-in period.

Trouble

One day I got the bike running and decided to drive it home from the office, about 7km, or 15 minutes on the bike. After about 1km I lost power and heard angry noises coming from the engine. I headed back to the office and took the gear cover off. Wow. A gear had chipped a tooth, which caused a chain reaction that caused teeth on both gears to chip. Then a piece of shrapnel left the engine, via the engine wall. It tore a large chunk out of the gearbox and its cover.

Above: Note the missing teeth.
Below: That hole is not supposed to be there.

The aluminium that these parts are cast from is quite brittle.

Declawing is amputation

Declawing sounds innocent. You remove the nail so it won't grow back, right?

Cat paws and human hands and feet actually have very similar anatomy. Declawing actually is an amputation of the last bone in the paw and the connecting tendon.

It often leaves cats in pain, and arthritis at age 2 or 3 is common.

Learn more at the Paw Project.

"You don't currently have permission to access this folder" on symbolic link

You will face this error when creating a symbolic link (using mklink for example) to a network path.

I encountered this when trying to workaround Visual Studio's insistance that projects not be opened from network drives.

Symbolic links can only be created on local drives.

Profile of Mac vs. PC users

Tags: 

Does your family know what you do?

A fictional conversation between me and a well-intentioned family members.

Them: I was telling Jim at work about what you do and I gave him your contact info, he's looking for a Web Designer.
 
Me: Oh. Ummm. I'm not a web designer.
 
Them: Yeah, but you do web pages.
 
Me: Actually, I'm an Integrated Technology Solutions Consultant. I solve business problems by engineering custom hardware and software to automa---
 
Them: ---BUT I've seen you do web pages, and you did that nice site for XYZ Inc.
 
Me: Well, yeah, but that was part of a bigger project, I was creating an extranet to expose an e-commerce component that I integrated with their legacy back-end information system.
 
Them: Yeah THAT ONE, that's what I mean, you made it look really nice.
 
Me: Actually I outsourced the design for that project, I just assembled their---
 
Them: ---AND you designed that site for ABC Ltd. and it looks nice.
 
Me: Yeah I guess, but that project had a slim margin and I just made do with my own---
 
Them: ---PERFECT. I'm sure that would be fine for Jim.
 
Me: I'm really trying to focus on Industrial Automation. What sort of business is Jim in again?
 
Them: I think mousetraps..., or maybe its metal scrap...
 
Me: Uh huh---
 
Them: ---It might have been house wrap... I wasn't really paying attention.
 
Me: Right.
 
Them: He was wondering what it would cost.
 
Me: Well, I usually don't touch anything for under $5000--
 
Them: WHOA why does it cost so---
 
Me: --- well, there are a lot of factors to consider, is it data-driven, there's the cost of writing a proposal, I write a project plan, analyse his needs, define the scope, stakeholders, risks, define metrics for success, I need to hire a designer and a photographer, the content needs to be written and proofread, I do A/B testing and penetration tests, there's documentation to be written, and of course I have to cover the overhead of rent, my assistant, insurance, etc.
 
Them: No, no, he just needs something simple, can't you just whip something up?
 
Me: Well, projects that seem simple have a way of bloating into megaproject---
 
Them: BUT he said a guy from the Yellow Pages called and said they'd do one for $70/month if he bought an ad, and it would have Flash, and---
 
Me: Well I've seen some of those sites... umm... if that's all he needs I'd say go for---
 
Them: ---But then he said his nephew was good at computers and he could do it cheap.
 
Me: Actually that's a great way for young people who are learning to gain experience, he should take him up on---
 
Them: ---but he wants it to look professional.
 
Me: Uh huh.
 
[awkward silence]
 
Me: Hey! I heard an ad for SquareSpace on TWiT -- it actually sounded like you can make some pretty nice sites from their templates and it's only like $8 a month.
 
Them: Yeah, I think his business is really going to take off. It's going to be BIG. You know, you need to take these small jobs to build up a reputation---
 
Me: Actually I'm really well respected among my peers. Remember all those articles I wrote and how well received they were? And I've never had to look for work since I started the business, my skills are actually specialized and there is a lot of demand---
 
Them: ---look, if you don't want to do it just say so.
 
Me: I don't want to do---
 
Them: ---I was just trying to help, and Jim's such a nice guy and I just thought---
 
Me: Fine. Tell him to email me.

Tags: 

AFI's 100 Years… 100 Movies

In 1998, the American Film Institute (AFI) unveiled a list of the 100 best American movies, as determined by a poll of artists and leaders in the film industry from a list of 400 nominated movies. It became a must-watch list for a generation of film buffs who had enjoyed the films when they were released, and a generation of budding film buffs who discovered these masterpieces for the first time.

This app encourages you to browse both lists, enjoy the original movie posters, make your own watch list, rate each of the titles, and learn about the directors, actors and writers of these films.

Awesome Tips and Tricks

Tags: 

Speakout Wireless: But that's just stupid.

I needed a mobile account for a test device today, so I pulled a Speakout SIM out of my GSM drawer. It has been many months since I last used it, so I fully expected there to be no available call balance on the account, and that a new account and phone number would need to be reassigned.

When I tried to activate the SIM on their website, it told me that it had already been activated. Fair enough.

Since they use your phone number as an account number, I tried adding $25 to the account. It happily took my money, but gave me an error that the funds were not added to my account and that I should call service. A little annoying but sure, it has been a while, and this falls outside the realm of "normal" service activation.

When I reached an agent, she explained that once A SIM on an account goes dormant, it cannot be reactivated. You have to buy a new SIM. The old one is garbage. But... huh? It turns out that after your balance expires, you have 45 days to top it up. After 45 days, the SIM cannot be reactivated.

There is no technical reason for this. Heck, I'd pay $5 just for the convenience of being able to use the old one. That's just stupid.

Luckily my drawer also have some fresh SIM cards, so at least I don't need to make a trip to the store just to buy a SIM card.

Orient the bed to the North, of course.

My father was nothing short of a brilliant man. He was an engineer. He spoke 7 or 8 languages, 4 of them fluently. He was well travelled, well read, and well spoken.

He was also vehemently skeptical of the occult, astrology, and all things flaky. 

Every once in a while he would spew the odd wisdom, that I simply assumed was the truth, and usually it was.

Not long ago I found myself explaining to my wife Sarah that the bed should be oriented such that your head points North. I have always done so. When asked why, I didn't have an answer. It's just what Papa said.

Today something made me think of this again, and I thought I'd look it up on the internets. Apparently, the hot topic of nocturnal directionality has been around for eons.

Some say that sleeping with your head oriented to the North results in horrible dreams and exhaustion. That is pretty close to home.

In Hinduism it is said that you should not sleep with your head pointing North or West. Vishnu Purana says: "It is beneficial to lie down with the head placed eastward or southward. The man who lies down with his head placed in contrary directions becomes diseased."

Yet others following Hinduism suggest that the opposite is true. Proponents of sattvik living suggest that there are frequencies present everywhere, and that sleeping toward the North avoids alignment with the negative Patal and tiryak frequencies.

Feng Shui proposes the same sentiment, though prefers Easterly orientation.

I have also seen reference to a tradition that people in the Northern hemisphere should orient to the North, and the opposite for the Southern hemisphere. My father grew up 15 degrees North of the equator.

There may be some science behind all of this. It is theorized that humans like many other species have an internal magnetic compass, our heads being the North pole and our feet at the South. In birds and fish it is thought that this compass aids in navigation.

When two magnets are oriented such that their like poles are aligned, a repulsive force is created by the magnetic fields. Is it possible that sleeping with our heads pointing North results in a constant experience of a repulsive force at the cellular level that could affect our health?

Studies have suggested that humans who sleep in an East-West position have far shorter R.E.M. sleep cycles, in which dreams occur, compared with North-South sleepers who got more REM sleep.

I have found no shortage of testimonials of people who after reorienting to sleep South-facing experience more energy and focus and decreased stress. The same seems to be true about each direction.

One uncited source reports that babies, left to their own devices, will orient themselves toward the North.

Now I feel even less certain.

Candy Crush Saga Cheats

I gave in and I tried this Candy Crush game that everyone was talking about. I'm hooked.

Let me be clear. Five lives per day is a perfectly healthy number. It gives you some time for leisure, and then you are forced to assimilate back into society as a contributing member.

That said, I get just as much fun from taking toys apart as from playing with them, so I started tearing it apart to see what I could do about these limited lives.

These are notes, not instructions. A developer should have no problems here, but if you need step-by-step instructions you'll need to look elsewhere. Better yet, just buy some more lives/items.

The Save File

Your belongings in the gave are saved in a save file, called save_XXXXX.dat, where XXXXX is some sort of timestamp. This file is present in the app's sandbox once you have played the game. It is a binary file. If they used a serializer, I'm not sure which one.

For an iOS device you can read and write to the filesystem using DiskAid.

The process for reverse-engineering save files is no mystery. Copy the save file. Make a change. Copy the save file. Compare.

I used VBinDiff for the binary diffs and Fhred as my hex editor.

Here are my findings so far. Values are big-endian.

Item Byte Offset Bits Tested Bits Predicted
Disco ball 0x0050 32 32
Coconut ring 0x0068 16 32
Jelly Fish 0x005c 8 32
Wrapped & Striped 0x00a4 16 32
Lives 0x0290 16 32
Lollipop hammer  0x0074  8 32
Lucky Candy 0x0098  32
       
       

The connection name 'LocalSqlServer' was not found in the applications configuration or the connection string is empty.

You just added a Razor web page to a traditional ASP.NET project and now you get this error.

A new section has been added to your

Web.config
file. Modify it like so:

[geshifilter-xml] <appSettings> <add key="webpages:Enabled" value="true" /> <add key="enableSimpleMembership" value="false" /> </appSettings> [/geshifilter-xml]
Tags: 

Deployment failed because of an internal error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

I encountered this error when deploying an Android app that was built for an older version (4.2.x) of Mono for Android.

[geshifilter-blockcode]Detecting installed packages Waiting for packaging to complete Installing application on device Deployment failed because of an internal error: Unexpected install output: &nbsp;&nbsp;&nbsp; pkg: /data/local/tmp/ca.guelph.visit-Signed.apk Failure [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED] Deployment failed. Internal error.[/geshifilter-blockcode]

The cause of the problem was these lines in the AndroidManifest.xml:

[geshifilter-xml]<!-- Allow the application to access Google web-based services. --> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> <!-- Notice here that we have the package name of our application as a prefix on the permissions. --> <uses-permission android:name="Visit.Guelph.permission.MAPS_RECEIVE" /> <permission android:name="Visit.Guelph.permission.MAPS_RECEIVE" android:protectionLevel="signature" />[/geshifilter-xml]
Tags: 

How to write to stderr in .NET

[geshifilter-cs]TextWriter stderr = Console.Error; stderr.WriteLine("Error, world!");[/geshifilter-cs]
Tags: 

Unlimited online storage $45 for two years. Too good to be true? Probably.

OLScs

Actually this site offers unlimited free storage, with some restrictions. I signed up for the paid plan at $45 for two years. Not only is it cheap, but the features are amazing:

  • Dedicated IP address
  • Lots of connectivity options:
    • Automated backup software
    • SSH / SCP / SFTP
    • Rsync
    • Network drive
  • Streaming media
  • Unlimited user accounts
  • Public links for sharing
  • User and group file sharing
  • Webhosting
  • MySQL server
  • Mobile app

You know what they say about things that are too good to be true. I'll let you know.

Follow-up #1

At least 10 or more people have had a bad enough experience with this company to complain online at RipoffReport, and Dalino Pianini wrote How OLScs Lost My Data on his blog. There are a couple of positive, and many negative reviews at photo.net.and Webutation.

The main concerns of the reports are:

  • Customer service that is slow, non-responsive, and rude
  • Unrecoverable data loss
  • High downtime
  • Differing definitions of unlimited

Since I only signed up to add extra redundancy to my backups, I'm debating whether to see if I have a different experience, or if they will honour their 45-day money-back guarantee.

Follow-up #2

The main reason I was drawn to this service was the features, in particular the support for standard protocols like SSH, SCP, SFTP, and Rsync. The software that this site uses is ownCloud. This open-source do-your-own-cloud software is absolutely amazing. If you are looking for a storage provider, I strongly recommend finding a reputable company that uses this software. Alternately, if you have your own server, or want to spin one up on EC2 or another cloud provider, this software would be perfect.

Tags: 

Block length does not match with its complement

Problem: You are using System.IO.Compression.DeflateStream to decompress a stream, and you are getting this message.

Solution: Seek forward 2 bytes first. There is a two byte signature 0x789c at the beginning of the deflated file.

Tags: 

So you broke Drupal's tables...

If you have missing tables, you know there isn't an easy way to tell drupal or a module to recreate those tables. For example, this site was missing the

field_data_comment
table, or something like that.

To fix it, create a new Drupal installation and install all of the modules that have tables that need repairing.

Now, dump all of the table definitions from the fresh installation:

[geshifilter-mysql]mysqldump <freshdb> --no-data --skip-add-drop-table > fix-mysql.sql[/geshifilter-mysql]

and apply the script to your broken installation:

[geshifilter-mysql]mysql --database=<brokendb> < fix-mysql.sql --force[/geshifilter-mysql]

Ignore all the error messages. Those that the existing tables that we don't want recreated.

Tags: 

Thunderbird is very slow

My portable installation of Thunderbird was misbehaving. A simple operation like opening or deleting a message could take a minute or two.

The solution was close Thunderbird, delete any files ending in -wal, and restart Thunderbird. It is now back to normal.

Tags: 

Matter.js: A Physics Engine in Javascript

How to install PECL uploadprogress on FreeBSD

You need this PECL extension to be installed if you would like to see an upload progress indicator in Drupal. Installation is easy, but not obvious.

[geshifilter-blockcode]cd /tmp # Substitute the latest version from http://pecl.php.net/package/uploadprogress fetch http://pecl.php.net/get/uploadprogress-1.0.3.1.tgz tar xf uploadprogress-1.0.3.1.tgz cd uploadprogress-1.0.3.1 phpize ./configure make build install echo "extension=uploadprogress.so" >> /usr/local/etc/php/extensions.ini cd /tmp rm -R uploadprogress-1.0.3.1[/geshifilter-blockcode]

Igor

This is my cat and best friend Igor who died of cancer.

5 Alternatives to Google Analytics

Tags: 

Float Labels with CSS

Click on the image to see an animated demonstration.

Read how at: http://css-tricks.com/float-labels-css/

Tags: 

iOS filenames cannot contain more than one period.

It took me a while to figure out why my app couldn't file the file day-icon.20.png. When it renamed it to day-icon.png it worked fine.

System.InvalidOperationException: The operation cannot be completed because a build is already in progress.

Building using Xamarin.iOS and Visual Studio 2012 stopped working for me when my debugging target is a physical device. Clicking Start resulted in the message:

System.InvalidOperationException: The operation cannot be completed because a build is already in progress.

It worked fine at invoking the simulator.

This appears to be a bug, but there is a workaround: Go to the solution's Configuration Manager and uncheck Deploy.

This issue and workaround are present in Xamarin.iOS 1.8.365.

iOS AutoLayout is broken for non-trivial layouts.

A custom control, like the calendar component shown here, requires many subviews. In fact, to generate this view requires about 700 subviews, unless manually user-drawn.

Apple's AutoLayout was introduced in iOS6 to provide a means to layout user interfaces independently of screen size, aspect-ration, and resolution. Unfortunately it is very ineffecient and appears to have an order of O(c^n) i.e. every subview added makes the layout take exponentially longer.

The control that is shown, designed to use AutoLayout, takes up to 10 seconds to render on an iPad. This essentially makes it unusable.

In examining the execution using Instruments I came to the realization that it was all Apple code that was swallowing all this time. Eventually I found two others who came to the same conclusion the hard way:

By turning off AutoLayout, the calendar renders (incorrectly of course) in a fraction of a second. I'll be spending this weekend writing my own MagicLayout code, which will be used by the cross-platform component library that is in development.

Future Shop: do you read e-mails before answering?

I have a raincheque for this item. Can I scan it and send it to you?

Dear Yvan,
 
Thank you for contacting Future Shop regarding the status of order #283030263.
 
Regarding the status of your order, shipping is now in progress. This means that your order is currently completing its fulfillment process. We will just have to wait for the funds to be captured and after that it will move toward shipping. You will receive a confirmation email 24-48 hours after the order has been placed. Kindly monitor your email from time to time for the update of your order.
 
Please allow 3 business days from the date the order was authorized January 10, 2014  for your order to be released for shipping. If you haven't received shipment notification by about 9pm on January 15, 2014 kindly email us back and we will look into the order.
 
Thank you for contacting Future Shop. We appreciate your business.
 
Sincerely,
 
Kristian.90528
Future Shop
 
Thank you for your response; however you did not answer my question. I asked:

I have a raincheque for this item. Can I scan it and send it to you?

My local store gave me a raincheque for this item but they are unable to fulfill it. Can you process a partial refund if I send you the scanner rebate?

Thank you. 

Dear Yvan,
 
Thank you for contacting Future Shop regarding the status of order #283030263.
 
Online Purchases
 
Best Buy/Future Shop Private Label Cards
Visa
MasterCard
American Express
Future Shop/Best Buy Gift Cards
 
For online purchases, you can use the following combination of Payment Methods
 
- 1 Credit Card; or
- 1 Credit Card and 1 or 2 Gift Cards; or
- 1, 2 or 3 Gift Cards
 
Thank you for contacting Future Shop. We appreciate your business.
 
Sincerely,
 
Benjamen.55444
Future Shop

I have already paid. Please see my question.

Follow-up:

I never did get an acknowledgement, response, or answer to my question.

I did however take my online purchase to my local store. Although I had to wait 10 minutes in the customer service line, the person who helped me was excellent. I explained that I got the raincheque in the store, and that the store didn't seem to be getting any inventory, and that I made the purchase online instead. Without hesitation, she pleasantly offered to apply a price correction, refunding the difference in price to me expediently.

How to find Startup items in Windows 8

Tags: 

Music to my ears

Tags: 

FreeBSD Kitten

FreeBSD kitten

I walked away for a few minutes and apparently the kitten decided to monitor top; then fell asleep.

28 sleeping processes. 1 running process: moused.

Cross-platform user interface development for iOS, Android, and Windows Store

I am currently developing a C# / .NET user interface platform that will finally allow you to write the UI once in C# and create:

  • iOS applications using Xamarin.iOS
  • Android applications using Xamarin for Android
  • Windows Store (WinRT) applications

I will consider adding Windows Phone and Silverlight, which should be easy ports.

The platform will include an attractive and flexible calendar control.

The project will represent about 500 hours of development. The components will be released under commercial license. The target price is $200-300. I hope to release many building blocks of the platform under an open-source permissive license.

The calendar component is currently in alpha release.

If you would like more information, or would like updates as they become available, please contact me.

Test .NET snippets in the browser

Let the spam begin! Thanks Adobe.

It didn't take long, but I'm now regularly receiving spam to several uniquely Adobe email addresses. Password recovery must have been a pain in the ass, because I apparently I signed up with about 7 accounts.

Tags: 

Macromedia accounts compromised as part of Adobe leak

Dreamweaver and Fireworks used to be Macromedia products, before Macromedia was purchased by Adobe. As I discovered after receiving email this week to macromedia at yvanrodrigues.com, that user database was merged into Adobe's.

List of websites that enforce weak password policies

Please contact me to add a website to the list.

  • Paypal.com 8-20 characters
  • 407etr.com 6-12 characters
  • adobe.com 6-12 characters (fixed, after 150M accounts were hacked)
  • nokia.com 6-18 characters

 

Your password is too long

There is a world-wide shortage of bytes. Think of the children. Shorten your password now!

Unity: ArgumentException: The Assembly UnityEditor is referenced by TouchScript.Editor. But the dll is not allowed to be included or could not be found.

You may get this error in Unity when building. Often it is due to a missing DLL, or linking directly to the Unity runtime.

In my case it turned out to be simple. I have the same DLL (TouchScript.Editor.dll)  in two places in my project.

Grouper app reviewed on ILoveFreeSoftware.com

My Grouper app was recently reviewed on ILoveFreeSoftware.com.

Windows 8 actually allows you to create a group of tiles similar apps, for example a group of all social apps, group of chatting apps, group of movies and music apps etc. You don’t need to download anything extra for grouping apps together. However Windows 8 doesn’t provide any mechanism to name these groups of apps. So, you need to install this simple light weight utility app Grouper from the Productivity Category in Windows Store. You can use the Windows 8 Search Charm to locate the app in Windows Store or click on the download link given at the end of this article. Then follow the steps of this Windows 8 tutorial.

Read the full article.

Intermec printer "RFID error"

I have an Intermec PM4i that I've been working on this morning. When I tried to print using the Windows IPL driver, I got the error RFID error, even though the unit doesn't have RFID installed.

The problem is actually due to trying to communicate IPL while the printer is in Fingerprint mode. If IPL mode isn't available, update the firmware to one that supports IPL.

A handy online function plotter

Ads not showing in Windows Store app?

If so, and you have checked that the ApplicationId and AdUnitId are valid, you probably don't have Internet turned on in the application manifest.

Tags: 

How to clear the back stack in Windows RT (Windows Store) apps

Once you have set

Window.Current.Content
to a
Frame
, save a copy of the navigation stack.

[geshifilter-cs]// After the main application frame is established, save its navigation state. var appFrame = Window.Current.Content = new Frame(); var emptyNavState = appFrame .GetNavigationState(); // Here we're pushing a page onto the stack. appFrame.NavigateTo(foo); // If we want to clear the stack, this won't work: // appFrame.GoBack(); // So instead we simply restore the navigation state to its empty state. appFrame.SetNavigationState(emptyNavState); [/geshifilter-cs]
Tags: 

OutOfMemoryException on Graphics.FromImage

I encounted this exception while resizing an image of only 539x539px.

Upon closer inspection, the problem was that the image's PixelFormat was not one supported by the framework (System.Drawing.Imaging.PixelFormat.8207 which is CMYK).

Tags: 

Tetris

I tripped across Erik's work while searching for a cascading grid layout. The breadth, detail, and creativity in his work is quite amazing. Many of his pieces play with illusion in the style of M.C. Escher.

How to write a design brief or specification document

Writing a Design Brief

Before asking one or more graphic designers to submit designs, time should be taken to write a solid design specification, or brief. The quality of designs received is in reflective of the quality of the brief.

The art of the brief is to give enough information to inspire the designer without inadvertently planting an idea that will limit or bias the his or her creativity.

Introduction

Explain what is being designed, and possibly why. How will it be used, and by whom? Where are we starting, and what does the finish line look like?

Be as specific as possible e.g. “a logo for business cards and envelopes”, or “a home page, a content page, and a report page with charts”.

About the Client

Introduce the client and the nature of the client’s business without revealing the client. This is not for fear that the designer will contact the client but rather that he or she may encounter information that could steer the design in the wrong direction; for example seeing and old logo that the client hates.

Tell the designer about the brand, especially if one has been well established. What colours does the client’s logo contain?

Include any pertinent details about the client’s industry and even its competitors.

Constraints

List all established constraints to avoid wasted time. Stating that a design must be high-contrast for accessibility, or no wider than 960 pixels will allow the designer to focus on only what is practical.

Directions

Brief the designer on the goals and target market for this design.

Are there colours, or colour palettes to adhere to or to avoid? Or other traits, like the client likes/hates rounded corners. Again, mentioning that the client hates rounded corners will help eliminate those designs before we even start, but saying that the client likes them could result in 25 designs, each with round corners.

What values, feelings, or messages should the design convey? Are there themes to consider or avoid.

Consider using metaphors or comparisons to express intangible traits. “Like that Mac guy in the Apple ad, but less of a jerk”, “more like the Beatles than the Rolling Stones”, or “smokes dope, but doesn’t inhale.”

Inspiration

Provide sources of inspiration. This should be as varied as the expectation of diversity.

If “the Victoria’s Secret website” is the only source mentioned, you will probably receive something that resembles the Victoria’s Secret website. If five different clothing websites are specified, each having its own style, the designer will be forced to get a sense of the client’s preference without fixating on one particular style.

If possible, detail about what or why the client likes about each: the typography of one site, the mood of another, the proportions of a third. Make note of any exceptions, “love the colours but its needs way more whitespace”.

Consider

Supply any elements that each design must include. This may include a fake logo that resembles the clients logo in colours and proportions.

Supply any text that will be present such as fake phone numbers or e-mail addresses. Request that any paragraph text be greeked or direct them to http://lipsum.com

If designs will/should contain photographs or drawings, supply a collection of images that the designer is allowed to use and make it clear that other images are not allowed. This keeps the designer focused on layout instead of image selection and likewise enables the client to focus on the designs instead of the photographs.

My zombie bite calculation

The Zombie Bite Calculator

Created by Oatmeal

Tags: 

Fluent French: Experiences of an English speaker

I tripped across this great article by Eric T. Mueller that details some of the nuances associated with learning the French language from an Anglo's point of view.

Citation: Mueller, Erik T. (1998). Fluent French: Experiences of an English speaker. New York: Signiform.

AttachmentSize
PDF icon Fluent-French.Eric-Mueller.pdf1.17 MB
Tags: 

How to convert DMG to ISO on OSX

hdiutil convert <dmg_filename> -format UDTO -o <iso_filename>

Changing or discontinuing a service? Make sure both your clients and staff are in the know.

I have been a customer of iWeb for 5 years. I chose them because they were a Canadian hosting company that offered good value on dedicated servers, and because they supported FreeBSD. Over the years I have leased 5 servers from them concurrently. On February 5 I experienced problems during an OS update and needed help. Instead I got a rude surprise.

 

Hi there, I wanted to send some feedback, and I waited a few days to cool off a bit. :)

I chose iWeb for a few reasons. You are Canadian; you have well-reputed support staff; you support open-source by mirroring many projects; your prices for dedicated servers are affordable; and you support FreeBSD.

You can imagine how frustrated (to put it mildly) I was last week when my server went down after a routine OS patch and I contacted support only to get the answer "we don't offer anymore support for FreeBSD".

I follow iWeb on Twitter, I read the iWeb blog, and I log into the customer hub regularly. Not only had no one thought to contact customers using FreeBSD to give us warning prior to dropping support so we could make other arrangements, but as far as I can tell there was no public announcement whatsoever.

Of course this isn’t about FreeBSD. I’m disappointed that you chose to drop support and it will certainly affect my choice of provider in the future, but I acknowledge that these are usually decisions based on numbers and economics. Perhaps you found it hard to find qualified support staff; perhaps its part of your focus on your smart server product; perhaps there just isn’t enough demand. It’s about being told that you chose not to support me long before I needed your support.

I have considered your managed services in the past, but the main reason I have opted not to subscribe for added support is that anytime I have had a problem that in sysadmin terms is fixable (a broken gmirror that won’t repair, an inconsistent network connection, or in this case an OS patch that conflicted with the hardware) the only solution I am offered is a new hard drive and a reinstall. While I have 10+ years experience as a sysadmin, I look to your staff when I don’t have time, physical access, or patience to deal with a problem.

In this case, as you can see in the ticket, after I was told that the OS was no longer supported, my subsequent questions were not even properly considered. When I determined that the NIC that was installed to try to help with the problem was making it worse, I asked that it be removed and was told “You can try to disable the nic in the BIOS. As said earlier, we do not offer any support for FreeBSD. We can re-install your server and connect your old disk via USB to allow you to recover your data.†It took another hour debate of back and forth for them to simply remove the NIC.

Once the second NIC was removed I was again able to boot enough that I could see that when the OS patch was installed, a new driver switched the em0 and em1 interfaces and effectively broke em0. The simple command “freebsd-update rollback†restored the server to its previously working state.

Please use this feedback constructively. I encourage you to contact your customers individually and make a public announcement both about this change in support; and in the future, 3-6 months before dropping support for any other operating systems.

Yvan

The next day an announcement was posted on iWeb's website.


 I received a response a few days later.

Hello Mr. Rodrigues,

Thank you for your feedback to management. Your comments are appreciated.

Please accept our apologies for the treatment of your ticket 6129693, in which you were twice given misinformation about the operating systems we are currently supporting. We can clearly see how this misinformation not only adversely affected the treatment of your issue, but how it has given you a misimpression of iWeb and our attitude towards our clients.

In fact, we do currently support BSD and will continue to do so until April 30th, 2013. This information is currently being disseminated to our clients in advance of the end of life for this product for exactly the reasons you cited in your email; we do not wish for any client to be caught unawares by this change and wish to give ample time for alternate arrangements to be made.

The system administrators who treated your ticket were either uninformed or misinformed on this issue; an grievous error that we assure you will be addressed internally. We are sincerely sorry for this lapse in service and would like to offer you full credit on your current invoice for server  CL-T012-164CL along with our apologies.

Have the issues with the server been successfully resolved at this point, or would you like further assistance from one of senior agents in order to have things as you would like? We would be most happy to have someone help you on this, you have only to give the word.

Please advise if the proposed credit is amenable to you and we can do anything to help.

Sincerely,
Misty


Hello, Misty,

Sorry for not getting back to you sooner -- the e-mail that I have registered with iWeb is a secondary one that is only used for support tickets when my main SMTP server goes down. My main contact is [redacted].

Thank you for this and your previous e-mail in response to my concern about iWeb's discontinuation of FreeBSD support, specifically with concern to that support ticket.

I appreciate the credit for the KVM and the month of service on that server.

I saw that you have since officially made the announcement about discontinuation of support of FreeBSD as well as some older Windows platforms. Please heed my advice in the future that you give 6-12 months notice on future support changes. This is common practice and is what most of your competitors follow. As you can understand, to organizations with a large IT infrastructure, even 3 months is considered short notice, and 1-2 months could incite panic.

It is my understanding that come April 31 my FreeBSD server itself will not be affected but that support or reinstallation will not be offered; that is, I am responsible for all support. Please let me know if this is not the case.

I have a request that I hope you will consider.

It would be of great value to people like myself, both users of widely adopted operating systems such as FreeBSD as well as niche ones (BeOS, other linuxes, etc) if you would offer a "bare-metal dedicated server" program.

The idea is that customers could order a dedicated server and you would connect a DVD drive and KVM for the customer to install the OS of their choice. It would be understood that your only support obligation would be to reconnect the drive and KVM when requested (which you already do) and replace faulty hardware. Customers could send you an installation DVD by courier or perhaps for a small fee such as $25 you could burn an ISO when requested. Perhaps it could come with a "do-it-yourself" support tier that included one emergency KVM hookup per month.

My suggestion would accomplish a few things. (a) it would be very helpful to customers with specialized needs; (b) you would be offering a very unique service in your market -- filling the gap between off-the-shelf leased servers and colocation; (c) it would strengthen your image as a customer-focused company. It could even be marketed with an angle like "Canadians embrace diversity, and so does their most reliable hosting provider".

If this isn't a possibility, the only additional thing I would request is a free month of service for overlap if/when I'm ready to migrate to another supported server.

Thank you.

Pushing software to its limits

When one uses software "normally", that is, how 90% of users use it, it usually works the way it was designed.

When you start to use new or seldom-used features, you quickly discover bugs that are either unreported or are a low-priority for the developers to fix.

I've recently completed an educational game for a client that pushed these boundaries.

The client has had frustrating experiences in the past with mandatory frameworks. Their last software required AIR which turned out to be a huge support headache, and the alternative such as Silverlight, Shockwave Flash, or even .NET would make support no easier.

We decided to use HTML5 instead.

More to come

mod_auth_cas.so: undefined symbol: CRYPTO_THREADID_get_id_callback

Today after updating some ports and restarting apache, CAS stopped working and I got the message:

[geshifilter-blockcode]mod_auth_cas.so: undefined symbol: CRYPTO_THREADID_get_id_callback[/geshifilter-blockcode]

This seems to be a regression of an old bug. To fix it, unpack the source code, apply this patch (see diff) and rebuild and reinstall

mod_auth_cas.so
.

The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine.

screen shot

I encountered this error when installing a client's website on my server. The underlying problem is that the application pool only runs 64-bit code by default and there isn't a 64-bit OLEDB driver for the Jet database.

To resolve the issue, in the application pool's settings change Enable 32-Bit Applications to True.

Tags: 

WebIssues: An issue tracker worthy of support

WebIssues screen shot

I think any project that could have multiple issues requiring resolution, especially on an ongoing basis deserve an issue tracker, also known as a ticket system.

In the past I have used Eventum, RT, and Bugzilla, Mantis, and the Google Code IssueTracker. My favourite of these is Eventum, but when considering a new tracker I did some looking around.

I have found that most trackers can be divided into:

  • general-purpose trackers (like the ones mentioned above)
  • do everything including tracking trackers (Horde)
  • trackers designed for software development, usually supporting an agile workflow.

While browsing SourceForge I stumbled upon WebIssues. It is a general-purpose tracker but it has some nice features that make it unique.

  • In addition to a web-based client, it has a full-featured cross-platform desktop client with native support for Windows, Linux, and OS X.
  • It supports three different database back-ends, MySQL, PostgreSQL or SQL Server.
  • It has an attractive user-interface yet is fast and solid.
  • It supports different types of tickets, such as bugs and tasks. Each type has customizable attributes and new types and attributes can be added. It even comes pre-loaded with a type called forum that can be used as a simple message board.
  • Reports can be exported to CSV, HTML and even PDF format.
  • It is well documented, including:
    • a comprehensive user manual in English and Polish in online, downloadable HTML, and PDF formats.
    • developer documentation that introduces contributors to the concepts used in the software.

I tried the software and it installed on the server like a dream. It was simply a matter of creating an empty database and user on my MySQL server, unpacking the server component to a directory on my webserver, and running the simple web-based installer. Many applications try to install this seamlessly, but few achieve it without a snag or two.

I was thrilled to discover that not only is the client available as a portable application, but it is packaged in PortableApps (paf) format. It's no secret that I'm a huge fan of PortableApps.

Unfortunately one feature it doesn't have, one that I consider a necessity is an inbound e-mail gateway, so that users can create new tickets and update tickets simple by sending an e-mail to support@example.com

Of course the beauty of open-source software is that contributions are welcome. I have joined Michał Męciński and the WebIssues team to add an inbound e-mail gateway.

Michał's code is very clean, and I was able to add the new functionality in about 10 hours. It is currently being tested at my site, and I'll merge it with the rest of the project when it has been thoroughly tested. It will still require another 20-30 hours to smooth out the rough edges and document it.

WebIssues started in 2005 as Michał's master's thesis. He made it available publicly in 2006 and it won the Qt Centre Programming Contest in 2008. The current branch was released in December 2011 and the latest release, 1.0.4 was released just a couple of months ago.

If you are considering a ticket system, please take a serious look at WebIssues.

If you think a system like this would be useful in your business but you don't know where to start, please contact me.

FreeBSD bug i386/176073: Update from 9.0-RELEASE-p3 to 9.1-RELEASE-p0 "breaks" network interface

I discovered this problem while performing a routine binary upgrade from

9.0-RELEASE-p3
to
9.1-RELEASE-p0
. I checked
UPDATING
and there were no warnings about known issues relating to my NIC.

[geshifilter-blockcode]freebsd-update -r 9.1-RELEASE upgrade freebsd-update install (reboot) freebsd-update install[/geshifilter-blockcode]

After the reboot my primary network interface

em0
reported
no carrier
. To make a long story short, the interface previously known as
em1
was now
em0
and the interface previously known as
em0
was no longer enumerated.

Scrolling back through the console messages showed:

[geshifilter-blockcode]em0: Setup of Shared code failed device_attach: em0 attach returned 6[/geshifilter-blockcode]
pciconf -vl
showed that the interface previously enumerated as
em0
was now
none0


I have read about other similar issues by other people in the forums, but not necessarily with my NIC (Intel Pro/1000). I think the common denominator may be the chipset. As this is a leased server in a datacentre I don't have much to go on except that it is a SuperMicro PDSBM which appears to use the Intel 946GZ
(Lakeport-G). Perhaps something to do with a pci-related driver has changed.

Follow the bug report here.

Bulk labelling volumes in Bacula

My EC2 Bacula storage configuration consists of a single pool containing multiple storage devices. Each storage device is a 100GB EBS store, and each contains a fixed number of prelabelled 1GB volumes.

Here's a little script I whipped together to prelabel the volumes with an incremental identifier.

NAME
    bulklabel -- label new Bacula volumes with incremental names

VERSION
    1.0 February 5, 2013

SYNOPSIS
    bulklabel <pool> <storage> <start> <count> <prefix>
    bulklabel <pool> <storage> <start> <count>

    pool:    name of pool resource
    storage: name of storage resource
    start:   first numerical identifier
    count:   number of volumes to create
    prefix:  optional volume name prefix

EXAMPLES
    bulklabel Default FileStorage1 10000 100 Vol-
        will create 100 volumes named Vol-10000, Vol-10001...
    bulklabel Scratch Tape1 20000 50
        will create 50 volumes named 20000, 20001...

COPYRIGHT
    (c) 2013, Yvan Rodrigues http://yvanrodrigues.com
              Red Cell Innovation Inc. http://two-red-cells.com

LICENSE
    FreeBSD license
    http://en.wikipedia.org/wiki/FreeBSD_License

Xamarin Authorized Consulting Partner badge

Xamarin Consulting Partner badges

Xamarin doesn't have much in the way of graphics for its partners so I made these badges. Other partners may find them useful.

Vector single-path Android logo

Android logo

I needed to use the Android logo today, but the SVG I got from WikiCommons was made of many paths that used their strokes to exclude parts of the image instead of properly constructing the paths.

Here is the logo as a single path. It can be scaled, recoloured, or put on a background without any problems.

AttachmentSize
File Android vector logo3.41 KB
Tags: 

Why does Rogers have such contempt for their current customers? It's good for business.

cat and mouse

I just got off the phone with Rogers after changing my internet plan from the Extreme Plus (45Mbps/4Mbps/150GB @ $74.99/mo) plan to their 300GB Express (25Mbps/2Mbps/300GB @ $71.99/mo).

You see, Rogers raised their prices today, and my bill was getting a bit pricey. I don't need 45Mbps, and if I did I would use up that 150GB pretty quick. The new price is about $30 more than their competitor, who ironically leases their lines from Rogers.

When they raised their prices they sent me mailer to inform me. It listed all their plans with the old and new rates. When I saw the 300GB plan I was pleased to know I could get twice the volume by sacrificing some speed (I've been burned by overage charges and didn't want to pay an extra $20 a month for 80GB more on the chance I went over my monthly allotment) .

So I called up customer service. The rep said she couldn't offer me the 300GB plan. Oh for fuck's sake. I read between the lines. I've played this game before.

OK, I'd like to cancel my service please.

I'm sorry to hear that. You'll need to call this other number for cancellation.

Fine.

Hi, yes, I'd like to cancel my service.

No problem, we can take care of that, but I'll need to put you through to another department.Hi, yes, I'd like to cancel my service. I need more volume and I don't want to pay more.Well, I have a 300GB plan I can offer.

Of course once I got through to the retention department (as it's called in the biz) I was easily able to get the plan I wanted, and both the rep and I knew we were just going through the motions of this stupid cat-and-mouse game.

Everyone in business knows that it's so much cheaper to retain an existing customer than find a new one, and yet companies like this show contempt for their customers by offering new customers 6 months of cheap rates and other incentives; and only offering value to existing customers when they threaten to leave.

It's also well known that both customer and employee satisfaction increases when front-line employees are empowered to offer the best solution possible to their clients.

That means the only logical explanation is that Rogers has done the math. This isn't a misguided policy. It's a business strategy. They know their policies piss off existing customers; they willfully bend over for new customers; and they're willing to accept the consequences of trading loyal customers for new ones, because there is a net economic benefit. They use the same strategy in their wireless, cable TV, and even magazine markets.

Do Rogers' executives adopt this strategy at home too?

Honey, I know we've been married for 10 years, but I'm not willing to put any more work into this relationship. I think I'm ready for someone younger and more naïve.

You've got to be kidding. If you're going to be a prick, I'm leaving. I want a divorce.

Oh. That sounds expensive and inconvenient. What if I let you drive the Lexus. Will you stay?

How to close the browser in javascript

Intuitively, you would think that if you want to close the main browser window, all you would need is:

[geshifilter-javascript]window.close();[/geshifilter-javascript]

This will actually work on a "fresh" window, but if use has navigated away and back to the page, it may not work.

I have found the following to always work.

[geshifilter-javascript]function CloseApplication() { window.open('', '_self', ''); window.close(); }[/geshifilter-javascript]
Tags: 

No xbox partition table found

While attempting to soft mod an old XBox using the cable swap method, XboxHDMaker kept giving me the error:

No xbox partition table found on /dev/hda drive is not locked but locking is enabled dont reboot untill you have build a working xbox hdd since reboot will lock the drive press ant key to abort operation.

The hard drive in question had a valid partition table, but several attempts left me with the same message.

I believe the issue is that I was not restarting the PC. The PC was already booted into the Linux live CD. I shut down the PC and rebooted it to the BIOS setup screen. At this point I swapped cables. It worked!

Dear "()<>[]:,;@\"!#$%&'*+-/=?^_`{}| ~ ? ^_`{}|~.a"@example.org

As I ranted in a recent tweet, "A plus sign is a perfectly valid character in an e-mail address." Yet about half of all sites I visit tell me my e-mail address is invalid when they encounter +.

The format for e-mail addresses is defined in RFC 5321, RFC 5322, and summarized nicely in RFC 3696. For the record, these are all valid e-mail addresses:

I thought my server seemed slow.

Before
After

but this confirms it. Bear in mind that upload is server to client. I'm betting on a bad cable between the server and the switch, but we'll see what iWeb says.

Follow-up: They had originally configured the NIC for auto-negotiate which it didn't like. Setting it to 10/full fixed it.

Tags: 

Tibetan Line Breaking

Tibetan text

From UAX #14: Unicode Line Breaking:

The Tibetan script uses spaces sparingly, relying instead on the tsheg. There is no punctuation equivalent to a period in Tibetan; Tibetan shad characters indicate the end of a phrase, not a sentence. Phrases are often metrical—that is, written after every N syllables—and a new sentence can often start within the middle of a phrase. Sentence boundaries need to be determined grammatically rather than by punctuation.

Traditionally there is nothing akin to a paragraph in Tibetan text. It is typical to have many pages of text without a paragraph break—that is, without an explicit line break. The closest thing to a paragraph in Tibetan is a new section or topic starting with U+0F12 or U+0F08. However, these occur inline: one section ends and a new one starts on the same line, and the new section is marked only by the presence of one of these characters.

Some modern books, newspapers, and magazines format text more like English with a break before each section or topic—and (often) the title of the section on a separate line. Where this is done, authors insert an explicit line break. Western punctuation (full stop, question mark, exclamation mark, comma, colon, semicolon, quotes) is starting to appear in Tibetan documents, particularly those published in India, Bhutan, and Nepal. Because there are no formal rules for their use in Tibetan, they get treated generically by default. In Tibetan documents published in China, CJK bracket and punctuation characters occur frequently; it is recommended to treat these as in horizontally written Chinese.

Tags: 

How to load Google Play onto the Hipstreet Equinox 2

Since my review of the Hipstreet Equinox 2, I've had a lot of questions about how I was able to install Google Play onto the device (which then makes loading tons of other first-tier apps, like Netflix, Google Maps, etc. onto the device quite easy).

Like many of the cheapest Android devices, the Equinox 2 did not go through Google's validation process and therefore is not allowed to be preinstalled on the device. Presumably this accounts for part of why these devices are cheap. Instead it ships with GetJar, which although it gives you access to thousands of apps, does not let you get the most popular ones.

Some apps can be downloaded directly from the publisher, others can be found by searching for torrents, and many are available on Usenet. These can then be sideloaded onto the device using one of many different methods. The problem is that you may be downloading a virus, or accidentally be pirating a commercial app.

The device is already rooted when you get it so you would think you might be able to sideload Play onto the device. Indeed, there are many places you can download all the various versions of Play (or Android Store or whatever it was called) and you can sideload them onto the device. The bad news is that it always crashes. If you are lucky it will get as far as showing its splash screen.

The process I used to sideload the app involves a few steps. If you are not technically inclined, this method isn't for you.

  1. Install the Android SDK on your computer.
  2. Download the Google apps bundle.
  3. Copy files to the filesystem.

Install the Android SDK on your computer

The Android SDK (also known as the Android Developer Tools or ADT bundle) includes everything needed to develop apps for Android devices, and deploy them onto a device. It's the latter part that is important. It is available here for PC, Linux, and Mac

When you plug in your device into your PC, hopefully it will install two drivers. The first is the mass storage driver, which lets your computer use the device like a USB memory stick. The second driver is called Android Device Bridge (ADB). For us, this is the important one.

On a Mac a driver is not required. On a PC it is. Unfortunately Hipstreet/Kobian does not publish an ADB driver for the device, so your Windows Device Manager will probably indicate an unrecognized device. I modified the Google driver to work with this device and you can download from this article.

Once the SDK is installed and the driver is working, you'll need to find the directory where the SDK was installed to find the platform-tools directory.

On my PC this is located not in Program Files, but your user directory, e.g. C:UsersYvanAppDataLocalAndroidandroid-sdkplatform-tools.

On the Mac it depends where you unpack it.

Now familiarize yourself with the adb tool.

Download the Google apps bundle

Although it is free software, I'm not what the rules are about redistribution so you're on your own to find this. The one I used is called gapps-ics-20120429-signed (Google Apps for Ice Cream Sandwich). It includes pretty much all the Google stuff that would normally preload on a device, about 25 programs.

Copy files to the filesystem

Use the adb tool to copy files to the appropriate directories on the device. You need to use this tool, because these system directories are not accessible from the GUI, even on a rooted device. If you find an app that lets you copy files to the system directories, you can skip step 1 and use that tool.

Bacula bug 1975: bconsole does not cope with attempt to label with existing label

When labelling a new volume, if an existing volume name is entered, subsequent entries are ignored and the original one is attempted each time.

bacula-dir# bconsole
Connecting to Director localhost:9101
1000 OK: bacula-dir Version: 5.2.10 (28 June 2012)
Enter a period to cancel a command.
*label
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
Automatically selected Storage: File
Enter new Volume name: 10020
Media record for new Volume "10020" already exists.
Enter new Volume name: 10021
Media record for new Volume "10020" already exists.
Enter new Volume name: 10022
Media record for new Volume "10020" already exists.
Enter new Volume name: 99999
Media record for new Volume "10020" already exists.
Enter new Volume name: .
*label
Automatically selected Storage: File
Enter new Volume name: 10021
Defined Pools:
1: Default
2: File
3: Scratch
Select the Pool (1-3): 2
Connecting to Storage daemon File at bacula-sd.redcell.ca:9103 ...
Sending label command for Volume "10021" Slot 0 ...

Workaround: exit the prompt with "." and reissue the label command.

Update: The bug has been fixed and will be corrected in version 5.2.14.

Tags: 

If you can't see SketchUp

If you run SketchUp with multiple monitors, this may happen to you. You start up the software and see its icon in the task bar, but there aren't any windows to be seen.

The software actually started OK, but the main window is off-screen.

To reset the window position, run

regedit
and go to
HKCUSoftwareGoogleSketchUp8CSkDialogx
and set the value to 0. If that doesn't work, look for another key with
Dialog
or
Dlg
in it.

Mollom: The configured Mollom API keys are invalid.

When configuring Mollom for Drupal, you may get the message

The configured Mollom API keys are invalid.

even though your keys are correct.

The problem is most likely that your server's clock is out of sync. An error of more than a couple of minutes will result in this error. 

Tags: 

Dear America, we have guns too, but WTF?

How many tapeworms could your stomach support?

How many tapeworms could live in your stomach?

Created by Oatmeal

Tags: 

My Android

Tags: 

Nigerian fraud victims: things are going to be O.K.

In this morning's e-mail:

Good day.

This to inform you that your e-mail address was found among the list of people that has been scammed by Nigerian impostors, It might interest you to know that a total sum of $3.5million had been set aside for compensation which will be deliver to you in a consignment box ,it was endorsed by the Presidency Federal Republic of Nigeria in conjunction with the homeland security during our first meeting this year.

Meanwhile, you are to contact the chamber in charge in respect of Barrister Richard Nelson with the details below

Name: Barrister Richard Nelson
E-mail: j.middleton788@gmail.com

For further progressive on how to make sure your fund is delivered to you,kindly fill the below requirement.

Full Name
Delivery address
Telephone number
Any form of identification of yourself

Be aware that all beneficiary will be responsible for shipping charges which cannot be deducted from the fund because there is a bond holding the consignment that stated that only the sole beneficiary of the fund is permitted to open it,the shipping charges is only $105 Also note that the federal high Court here will alert the United State Bureau and also your state police immediately your shipment leave  the shore of Nigeria so as to avoid any restriction and problem before the fund get to its port of destination.

Below is the cashiers details to send the shipping charges via western union money transfer.

NAME: SAFIAT BELLO
ADDRESS: Lagos Nigeria, 23401
QUESTION: Color
ANSWER: Green
AMOUNT: $105

Get back with the MTCN# for easy confirmation.

Thanks.

Best Regard.
Federal High Court Of Nigeria.

Tags: 

Debugging android over TCP/IP is easy.

adb tcpip <tcp_port>
adb connect <ip_address>
abd devices
Tags: 

Equinox2 ADB Driver

I couldn't find an Android debugging driver for this unit, so I had to roll my own, based on the Google driver.

AttachmentSize
Package icon equinox2_usb_driver.zip8.27 MB

Hipstreet Equinox 2 10.1" Android Tablet Unboxing and Review

I needed an Android device for a current project for testing.

Currently surrounded by 5 screens, adding another wasn't something that particularly excited me. I'm not a huge fan of my iPhone, so another phone was an option, but I can't afford a new one, and I'm not knowledgeable enough about older models to choose one that would be a good fit.

A tablet could be useful, and the Nexus 10 is tempting, but it's not available just yet and if I am going to spend more than $400 on a tablet, it is probably going to be a new Windows tablet. I want something cheap.

I briefly considered a Blackberry Playbook, not because I really want one, but because they're practically giving them away at $150 – great value if you can use it. Unfortunately, although the Playbook can execute Android apps, they must first go through some kind of conversion process. I'm not looking for more complications, and I almost certainly wouldn't be able to debug my app remotely in Visual Studio via USB with a Playbook.

I settled on the Hipstreet Equinox 2, a recently-released second-generation 10.1" tablet. Like most people I'm pretty hesistant about the Hipstreet name, a name associated with cheapest-of-the-cheap MP3 players available at Walmart. At $199 however, this model boasts many features that its competitors in the $150-250 don't, and reviews of the prevous Equinox generation indicate that it wasn't too bad. The truth is, I couldn't find a single review of this product, so I hope this article, and maybe a review to follow, is useful to someone.

I ordered the tablet from Dell.ca and it arrived at my door 40 hours later. It came in a shrink-wrapped solid "board game"-style box. Sorry about the quality of the photos, the only camera I have on me is my iPhone.

Included in the box:

  • DC charger
  • Male mini-USB to female USB (17cm)
  • Male mni-USB to male USB (100cm)

The battery is fully discharged. The screen film instructs the user to charge the unit for a full 6 hours before use.

Ports:

  • Micro-SDHC (up to 32GB)
  • Power/charge
  • Micro-B USB for connection to host (cable included)
  • Micro-B USB for accessory (converter cable to full-side USB included)
  • Mini HDMI (type C)
  • Headphone

Buttons:

  • Power
  • Volume up
  • Volume down
  • Back 

Other:

  • Forward-facing camera 

Size:

  • Mass: 600g
  • Screen diagonal: 256mm (10.1")
  • Dimensions: 262 x 185 x 10mm

The construction is sturdier than I expected. It is very solid and doesn't budge in the twist test.

Start-up

Once powered up, a swipe of the finger results in the home screen. A welcome video is placed on this screen. It explains (in English) how to turn on the unit (?), set up WiFi, configure your e-mail, and so on. At maximum volume, the video would definitely not be audible in a noisy environment.

The home screen icons are:

  • Camera
  • Dolphin Browser
  • Music
  • GetJar (app store)
  • Email
  • Super HD Play (video player)
  • Settings

First Experiences

These are first experiences with the Android operating system, not necessarily this unit.

Although I will let it charge for 6 hours, I need to get some work done, so I go about setting it up.

As I configure my e-mail I realize I have no idea how to make the screen-keyboard go away. On the 7th guess, I enter the correct password.

Although the unit doesn't include a GPS, it does use WiFi geolocation when possible to guess your location +/- 100m.

There are many ways to unlock the device, including facial recognition.

A speech-to-text icon is prominent throughout the UI. It uses Google speech-to-text. I look forward to checking this out.

The settings imply that use of a USB mouse will work. So will USB Ethernet and GSM/3G modem.

Oooh, a developer settings screen. There are some very useful options here, like showing all touches, flashing screen areas that update, CPU usage stats, Activity purging. I've never had a device cater to my needs like this before!

The device seems to neither be charging nor losing charge while I'm using it when plugged in.

Installing Apps

One of the main complaints people seem to bitch about in online reviews of cheap Android devices is that they don't include the Google Play store. Instead they have something called GetJar. Personally, I'm not sure what all the fuss is about. Supposedly it offers more than 600,000 available downloads. As long as I can get Angry Birds and a few other necessities, I don't really need to find a new way to give people my money. For what it's worth, I've heard of people successfully installing Google Play and the Amazon App store on cheap tablets.

Update: I actually came across many apps that I want that were not easily available from sources other than Google Play. It took many hours, but eventually I devised a way to load up all of the most up-to-date Ice Cream Sandwich stock apps, including Google Play.

Note: The tablet is already rooted when shipped.

Installation of apps from GetJar is very fast. Download and installation of the Twitter app took less than seconds, something that would take about a minute on my iPhone.

Oh good, Angry Birds and Angry Birds Seasons are in the top 20 list. This is going to be easier than I thought. They're free too.

Hmm.. no Netflix app in Getjar.

Dolphin Browser

When I fire it up it asks if I want to enable Flash support never, always or on demand. I like that. It also asks me if I want to emulate a desktop, iPhone, iPad, or Android phone. Then it crashes. Hmm.

All my fingerprints are getting pretty noticeable now.

The most important sites, Red Cell Innovation Inc., and CodeProject work fine, so that's all that matters.

Follow-up: 45 days later

  • Dell put these on sale 30 days after I bought this one, so I called them up and got a price protection credit for $50.
  • I'm glad I put the Play Store and the Google apps on it. The Play Store experience is much better than any other repositories, and it auto-updates downloaded apps without intervention. It makes the whole experience much closer to that of a Nexus device.
  • Physically the device is holding up well. There are some fine scratches on the screen, which isn't surprising, as I've done nothing to prevent them.
  • The screen could definitely be more sensitive. It's fine for a game of Angry Birds or tapping out a short e-mail, but it's not as sensitive as my old iPhone.
  • The mini-HDMI connector seems a little flaky, but it could be my cable's fault.
  • With regular use, the battery needs charging every other day. One could go a lot longer with occasional use.
  • The speaker is way too quiet. To listen to a podcast in bed I need to listen at maximum, or close to it. It isn't suitable for anything except a quiet room without headphones. To make things worse, the speaker is on the back, so if you put it down on its back most of the sound is muffled.
  • If you like other browsers, Opera Mini, FireFox, and Chrome all run well. I find Chrome a bit slow and my preference is probably Opera Mini.
  • Video play from a file or Netflix is pretty smooth, even when connected to an external display.
  • The hardware volume and back buttons only work when the unit is turned on and unlocked.
  • I have never had to cold boot the device, though I have inadvertently done so by letting the battery drain completely a few times.
  • Overall for its price I think this unit gives good value. I have not seen any other 10" tablets for $150.
  • The built-in e-mail app is nice but its one shortcoming is that is has to poll IMAP servers every x  minutes (minimum 5), instead of keeping a socket open.

'Provide value on 'System.Windows.Baml2006.TypeConverterMarkupExtension' threw an exception.' when using an ImageBrush as an opacity mask in WPF

You wouldn't know from the error message, but the problem was that the image file was set to be Content. It should be Resource.

Tags: 

java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams

I spent a few hours debugging this exception in an Android app. When you create a new View you usually set its

LayoutParams
. The trick is that you need you use the Type of
LayoutParams
that is from the parent view's class. So if you're adding a
LinearLayout
to a
FrameLayout
, you need to set
LayoutParams
to an instance of
FrameLayout.LayoutParams
.

Tags: 

No resource found that matches the given name (at 'property' with value '@drawable/your-filename') or aart.exe exited with error code 1

This occurs when the filename uses characters that aren't valid in C#.

Use underscores instead.

Tags: 

Newly coined word: queck

Pronunciation
/kwɛk/ (rhymes with fleck)
Definition
A set consisting of a question and its accompanying answer(s).
Origin
Created while writing an educational video game by Yvan Rodrigues in 2012 to describe sets of questions and their answers without using the word "question".
Examples
The quiz game has a library of 500 quecks.
Each multiple-choice queck has four possible answers.
Trivial Pursuit expansion packs typically contain 1650 quecks.

The .ws TLD for web services... pass it on.

Does anyone disagree that the availability of

.ws
domains is pointless?

Perhaps in an attempt to generate revenues like Italy (

.it
), Tuvalu (
.tv
), Montenegro (
.md
), and Tonga (
.to
) did, Samoa (formerly Western Samoa) made available this ccTLD for general registration (that is, residency is not a requirement). Global Domains International Ltd. represents the TLD on behalf of Samoa and markets it as Your Internet Address for Life, essentially an all-purpose alternative to
.com
.

I'm of the opinion that the last thing the world needs is another one-TLD-for-all-your-needs. However, for the last five years I have been registering

.ws
domains for the purpose of web services. It's a nice way to distinguish websites-for-people from webservices-for-computers. You can even create subdomains for types of services, such as
schema.example.ws
,
soap.example.ws
,
wsdl.example.ws
,
rest.example.ws
, etc.

All the cool kids are doing it. Pass it on... it might even help out a country where the GDP per capita is about 1/10th of Canada or the U.S.A.

MonoTouch: NSUnknownKeyException - This class is not key value coding-compliant for the key

This error can occur in the constructor of

AppDelegate
(when it calls
base.ctor()
).

This occured to me when I have specified the application's entry point in

Info.plist
in the Main Interface setting.

A similar error will occur any time an outlet exists for a control that no longer exists in Interface Builder.

Caine's Arcade: just try not to smile.

Tags: 

This makes me laugh every time

Tags: 

Stock photography that you'd like to pitch to your client but probably shouldn't.

I'm currently creating a very visual website for a countertop retailer. I'm drawn to images like these. "It probably won't save your marriage, but it may just spice up your affair."

Look closely at the last three.

Credit: DepositPhotos

Websites that have sold my personal information or have been hacked and compromised

Whenever a website asks me to sign up or share personal information, I always use a unique, tracable e-mail address. These are those to which I now regularly receive spam.

Viewing SVG and other HTML5 content when debugging in Visual Studio

Introduction

When working on modern web applications that use features that are recently supported by browsers such as SVG, you may find that images do not render correctly, or at all in the browser.

Background

When most of use develop and test web applications locally, we use the built-in web server, called ASP.NET Development Server/10.0.0.0. This works fine for testing, and most applications will eventually get deployed to a web server running IIS 7.0 or later.

The Problem

The ASP.NET Development Server is not aware that it should serve SVG with a MIME content-type of

image/svg
. Instead it uses the generic
application/octet-stream
. A modern web browser on the other hand will typically either request
image/*
or explicitly request
image/svg+xml
. If the response is
application/octet-stream
, it will ignore the response (tested in IE9, FF14).

The usual way of fixing this is to add this code block to web.config:

Unfortunately ASP.NET Development Server is unable to understand this directive.

To workaround this problem, install and use IIS 7.5 Express to serve the content locally. This will require instructing Visual Studio to use IIS instead.

Tags: 

Fruit fly carnage

This DIY fly trap did the trick in our kitchen. It consists of a dish of cider vinegar in plastic stretch-film with a 1cm diameter hole in the top.

Tags: 

Ports upgrade broke my mail server

A day or two ago I upgraded the ports in my jails. This stopped postfix from accepting mail. The problem was that postgrey, which listens for postfix on

tcp/10023
stopped running. It produced an error about not being able to bind to
::1
. I got it back running again by altering the flags in the startup script (
/usr/local/etc/rc.d/postfix
) from:

postgrey_flags=${postgrey_flags:-"--pidfile=${postgrey_pidfile}  --inet=10023 -d --user=postgrey --group=postgrey --dbdir=/var/db/postgrey  --x-greylist-header=${postgrey_greylist_header}"}

to

postgrey_flags=${postgrey_flags:-"--pidfile=${postgrey_pidfile}  --inet=127.0.0.1:10023 -d --user=postgrey --group=postgrey --dbdir=/var/db/postgrey  --x-greylist-header=${postgrey_greylist_header}"}

This forces binding to the IPv4 port only.

How freebsd-update broke my jails

I usually perform a binary update of my jails using

#freebsd-update fetch install #freebsd-update -d /usr/jails/basejail fetch install

This has worked for years. After doing it yesterday I was unable to login to any of my jails and pretty much everything broke. For example logging in using

ssh
gave logged the error:
/bin/sh permission denied

After spending the day on it I have discovered that the upgrade process changed permissions on

/usr/jails/basejail
to
700
. Changing it to
755
fixed everything.

When your iPhone has hiccups…

Introduction

My softball team thought it would be fun to play intro music for each person as they went up to bat, like some major-league teams. I welded together a portable sound system complete with pneumatic wheels, second-hand shelf speakers, an AGM battery, and a 40W head unit.

I recently purchased a refurbished iPhone 3GS from an online retailer. I needed one for testing an application that I've been hired to build. Since I had the iPhone anyway, I figured the touch interface would work well for our team's sound box.

The Problem

The first problem, I learned, is that the iPhone cannot play a single song, then stop. It always continues on to the next song unless it is the only song in a playlist. Luckily I wasn't the only person who found this extremely stupid, and before reaching for my compiler I checked the App Store and found Benjamin Pung's One track Mind app.

The next problem was that when I plugged in the cord from the headphone jack of the iPhone to the Line In jack of the head unit, there was an annoying beat, beat, beat sound.

For the benefit of those searching, it could also sound like: click, click click; thump, thump, thump; pop, pop, pop; beat, beat beat.

I considered loose connections, impediance mismatch, and EM interference, but I was able to rule those out. Oddly, rebooting the device would make it work normally until I fiddled with the jack (I still haven't figured this out).

It is noteworthy that this symptom is not present when listening with headphones (this is where, I believe, impediance plays a role).

The Solution

Many internet searches informed me that this was a very common problem without a solution.

I notice that pushing the plug into the jack forcefully and holding made the noise stop. I also noticed that when I did so, there was just a little end-play; maybe 0.2mm. I had a hunch.

I grabbed a toothpick and went digging. I scraped the tip of the toothpick against the bottom of the jack repeatedly, and was able to pull out several small pieces of what I'll call lint – probably a mixture of dust, fibres and oil.

I plugged it in to the stereo and ta da! No more noises. No more end-play.

Moral

Once again, the simplest solution (though not necessarily the most obvious one) usually is the correct one.

I'm posting this tip because many people have this problem, and most keywords like click, beat, and pop result in pages of results completely unrelated information (thanks Dr. Dre).

jQueryMobile: Keeping the header and footer in nested listviews

When I used a nested listview for the first time, I was a bit surprised to find that it created new a new header dynamically instead of just keeping the header and footer of the parent. For my current project this is really important, so I searched around and found many people with the same expectation.

I've modified

$.mobile.listview._createSubPages
to support this functionality by setting data-dynamic to
true
or
false
on the

        . Ideally this could be implemented as an event or callback so that the coder could override the

    _createSubPage

      behaviour.
    Tags: 

    If Fiddler was portable… wait, it is!

    Fiddler, the HTTP debugging proxy is an excellent tool. I use it almost every day for AJAX development, server debugging, and examining almost anything else that flys through tcp/80 on which I need to keep an eye.

    I'm a huge fan of portable apps. In fact, the fifty or so portable apps that I use regularly follow me from computer-to-computer thanks to Dropbox. I was just thinking how great it would be if Fiddler was portable. I checked the download page but was disappointed to see a portable version wasn't offered. Then I wondered…

    I downloaded Fiddler4 and used 7-Zip to open

    Fiddler4BetaSetup.exe
    . I wasn't surprised that I could open it; after all, many installers are self-extracting .exe's. What did surpise me is that when I unzipped the whole lot to its own directory, it ran perfectly. I haven't testing it thoroughly to see if anything is broken, but it did the job and I'll certainly be adding it to my portable toolkit.

    Tags: 

    How to enable password changing on remote host in roundcube on FreeBSD

    Roundcube

    Roundcube comes with a password change module, through it's disabled by default. Configuring it to change passwords on another server's

    passwd
    database is another matter. The instructions only cover using
    chpasswd
    on a Linux server to update the local password database.

    On the mail server:

    • adduser roundcube
      , set a shell and create a home directory.
    • visudo
      , adding
      roundcube ALL = NOPASSWD: /usr/sbin/pw

    On the web server:

    • chpass www
      , assigning a shell to allow logins.
    • su www
      , impersonate www.
    • ssh-keygen -t rsa
      , create an RSA private/public key pair.
    • scp /home/www/.ssh/id_rsa.pub roundcube@<em>remotehost</em>/~/.ssh/authorized_keys
      , copying the public key to the mail server to allow passwordless logins.

    The
    chpasswd
    driver (
    /www/roundcube/plugins/password/drivers/chpasswd.php
    will require modification.

    [geshifilter-php]function password_save($currpass, $newpass) { $cmd = rcmail::get_instance()-&gt;config-&gt;get('password_chpasswd_cmd'); $username = $_SESSION['username']; $handle = popen($cmd, "w"); fwrite($handle, "$newpass "); if (pclose($handle) == 0) { return PASSWORD_SUCCESS; } else { raise_error(array( 'code' =&gt; 600, 'type' =&gt; 'php', 'file' =&gt; __FILE__, 'line' =&gt; __LINE__, 'message' =&gt; "Password plugin: Unable to execute $cmd" ), true, false); } return PASSWORD_ERROR; }[/geshifilter-php]

    And so will this line in
    /www/roundcube/plugins/password/config.inc.php

    [geshifilter-php]// chpasswd Driver options // --------------------- // Command to use $rcmail_config['password_chpasswd_cmd'] = "ssh roundcube@mailhost sudo pw usermod -n {$_SESSION['username']} -h 0 2&gt; /dev/null";[/geshifilter-php]
    Simple Copyright Policy: If you want to reproduce anything on this site, get my permission first.