Monday, 24 June 2013

Marketing deception is not a way to win me as a customer

I own a car. As a requirement of owning a car that consumes petroleum fuel, I must take it in for servicing every few thousand kilometres or every six months depending on which comes first. It required during this servicing that its fluids and lubrication are changed, as well as check to see if there is any required maintenance to parts. While a bit of a hassle, it's necessary to ensure that my vehicle continues to operate for as long as it is possible.

Conveniently, a car dealership that services my brand of car is located en route to my office downtown. I choose to take my car there because the dealership where I had gotten my car in the first place is not located in a convenient spot and requires me to pay a toll to go and pay a visit. I can drop my car off at this place and they offer a nice shuttle service that will drop me off at my office. When I am done working for the day, it's just a short train and bus ride to pick up my car.

This is the relationship I expect to have with Destination Hyundai. They service my car, I pay them to service my car, I go home with my car, and business continues on as usual for all parties.

This is not the relationship I expect with Destination Hyundai. Why do I need an SMS message? Are you going to pay for the messages received on those with plans not as gracious as mine?

This is also not the relationship I expect with Destination Hyundai. Inside was 'awesome' details on 84-month financing at 0% interest with the purchase of a new car. Why do you guys think that I need a new car?

When I got the spam message, I was pretty livid and posted the above screenshot on Twitter. They were kind enough to provide me with an opt-out option, but when did I opt in to the direct marketing? When did I opt in to the deceptive letters being delivered to my mail?

After ranting about it on Twitter, I eventually got a call from one of their marketing coordinators. It was explained to me that they were really sorry about this and that I had been removed from their marketing list. Of course, I had questions for her and she was unable to answer some of these:

  • After stating that an employee at the service desk had likely selected me for being included in their marketing, I then asked if that employee was to get a 'spiv' out of the deal. Being involved with marketing, she was unable to answer that question.

  • When asking her about the physical letter I received in the mail, she told me that a third party mailer was sending these out and that she would investigate. I don't buy this one because if you're in charge of marketing, you're going to know how these are going to be sent out. It's either scummy at its finest (and I question if it is even legal but I am not a lawyer either) or the people at the helm of marketing are woefully unaware of things.

  • Lastly, a policy the dealership has is to add their own licence plate frame around the car's set (and replace the existing ones too) to advertise their business. You also have to opt-out of this and this policy of theirs ended up with their dumb frames on both my car and my girlfriend's. The coordinator was unable to explain this one to me.

Here's some context on the last point:

I didn't ask for them to install these borders. They just went ahead and installed them. When I took my car in for servicing the next time around, I requested that they removed them and so they did. When my girlfriend had her car serviced there recently, she too had the borders added to her plates (after them having removed the original dealership ones)

The licence plate one really is the one thing that makes me not believe that this me being forced to accept their marketing was a mistake. It is on this basis that I do not buy that customers are opted-out by default. This is not a relationship I wish to engage in.

So as a result, I will take the inconvenient option to get my car serviced as opposed to visiting Destination Hyundai.

Monday, 10 June 2013

Thanks to Sony, the concept of sharing games has been simplified

I wonder if this is doable on the Playstation 3, Playstation 2, Playstation, Sega Dreamcast, Sega Saturn, Sega Genesis, Sega Master System, Sony Playstation Portable, Nintendo Wii U, Nintendo Wii, Nintendo Gamecube, Nintendo 64, Super Nintendo, Nintendo Entertainment System, Nintendo 3DS, Nintendo DS, Game Boy Advance, Game Boy Color, Game Boy, or Virtual Boy?

What about other or obscure consoles like the 3DO, Atari Jaguar, Atari Jaguar CD, Atari 2600, Commodore CD-32, NEC PC Engine, NEC PC-FX, Neo Geo, Neo Geo CD, Neo Geo Pocket, Wonderswan, Wonderswan Color, Atari Lynx, Sega Nomad, Sega Game Gear, Sega Pico, Sega SG-1000, Action Max, Amstrad GX4000, Atari 7800, Atari XE, Casio PV-1000, Commodore 64, APF-MP1000, Arcadia 2001, Atari 5200, Bally Astrocade, ColecoVision, Fairchild Channel F, Interton VC 4000, Intellivision Odyssey 2, RCA Studio II, Vectrex, Super Vision 8000, VTech CreatiVision, Philips CD-i, FM Towns Marty, LaserActive, Pippin, or Playdia?

Fascinating news from Sony on their attempts to simplify this whole market.

Oh yeah. What is Microsoft doing these days?

Tuesday, 4 June 2013

File sharing via Reddit

A few months ago, a friend and I were having a drink and we ended up talking about how Reddit in some ways has behaviours and layouts that sort of remind me of Usenet. They have a lot of differences of course, but in some ways they're also quite similar.

When that idea came up, I wondered how difficult it would be to be to use Reddit for what really was the final nail in the coffin for Usenet: file sharing.


One of the problems facing this idea is that there are varying limits on what can be posted on the site. For example, messages between users and comments in posts have a character limit of 10,000, but self-posts can be either 10,000 or 40,000 characters depending on the status the sub-Reddit has. This means that we can only work with files that at most 9 KB in a lot of situations and 39 KB at best.

However, in addition to those limits, you cannot expect to post binary data right into your form post without running into corruption problems should changes be made to the file upon it entering the database. So when you use something like Base64, you end up having to work with smaller files as the encoding process will increase the file size.

On top of that we have to verify that when receiving the file that the data hasn't become corrupted. This means that in addition to the encoded file, we'll need a small header that includes some small details about it.

Storing and receiving data

Based on my last points, in the end I had to create something like this in a Reddit post:

| File name: filename.ext |
| File size: X [bytes/KB] | < Meta data
| File MD5: md5sum |
| Base64 data | < File data

We only need the file name, the MD5, and the Base64 data in this circumstance, but the file size is useful if you end up reading the message as a person and not as the tool.

And speaking of which, that is exactly what I have done. I have written a tool that does exactly this very thing.

Introducing "Karma Share"

Reddit is built based on karma, which is basically Internet points that cannot be exchanged for any monetary value; so why not get karma for sharing files? Well, not exactly yet, as the tool is only designed to send and receive files using private messages.

So using the wonders of Python and the Reddit API, I have created a tool called Karma Share, which is a command line-based application that will send a file via Reddit's private messaging system to any user that you desire.

In addition to sending files, it can also receive them too.

Overview of Karma Share

Karma Share is written using Python 3 and PRAW, a Python library that interfaces with the Reddit API.

To send a file to someone, it just involves invoking this command: push <filename> <recipient> <user> <pass>

And to receive a file, it's as simple as this: pull <user> <pass>

You can also edit the file quite easily and have the username and password stored directly in the script, requiring you to only use "pull" by itself or just "push [file] [recipient]".

Karma Share - Version 0.1
Created by Colin Keigher -

Filename: clients.csv
Size: 3 KB
MD5: 845e0ccf9318e51af4241f4b0e594dc0

*** Attempting to login...
*** Login succeeded!

*** Attempting to send message to AnotherRedditUser.
*** Message sent!

Messages are sent as normal and can be viewed via a browser without any consequences.

It also checks to see if you have already received files and will not discriminate against messages that have already been read; this means that you can avoid worrying about accidentally reading a message that was meant to be downloaded using this tool.

Karma Share - Version 0.1
Created by Colin Keigher -

*** Attempting to login...
*** Login succeeded!

RedditUser has sent you a file!
File name: clients.csv
File size: 3
File sum: 845e0ccf9318e51af4241f4b0e594dc0

RedditUser has sent you a file!
Skipping decoding of oka.jpg as MD5 matches existing file.

RedditUser has sent you a file!
Skipping decoding of qm.gif as MD5 matches existing file.

Read 3 messages and downloaded 1 new items.

The tool makes an MD5 sum of the file before it encodes it and will only send it via the Reddit messaging system provided that the Base64-encoded data and the header values themselves do not exceed the limits imposed by the site. It will also not write the file if it finds that the data has been corrupted upon it being transferred to Reddit.

Pitfalls and the future

The obvious problem here is that we're still limited to files that are a few KB in size. However, it is possible that the tool can be written to do multi-parted files. But there is one caveat to this.

Reddit does limit how many posts you can make in any given period of time and if you're using an account that is either not verified via e-mail or has somehow tripped its anti-spam mechanisms otherwise, it is going to require verification for each and every single post. This will become apparent in the tool when it starts to requesting for a captcha input upon sending a file; the PRAW library provides a link you can click that will show you the required string.

In some cases you can post every few seconds, but in a lot of instances you will find that you can only post every ten minutes. This means that if you're attempting to send 100 KB via Reddit, it's going to take you almost an hour and a half--it's not very effective. For the time being I do not believe that the powers that be at Reddit will have anything to fear as it would take weeks to just upload a 500 MB DVD-quality copy of the latest Top Gear or Game of Thrones episode. But this could be possibly useful for posting a funny cat picture without having to rely on services like Imgur.

Really, this is an experiment and perhaps a useful one in certain circumstances that I have yet to figure out. Also keep in mind that using this tool could get you banned from Reddit so I take no responsibility if you lose any of your Internet points.

Download it!

Want to try it out? It works just fine under Python 3 with the PRAW libraries installed. You can grab it via my GitHub.

The code is licensed under the GPLv3 licence.

Ed: the idea has been turned into a webcomic entry.