Ventrilo Server Configuration INI explained

Ventrilo is a great little voice app, it has tons of options and it overall great quality whilst using very little bandwidth.
However the server configuration isn’t very well documented which made me a little sad when I was setting up my server.

I decided I’d go through them all, work out what they did and drop my findings here so hopefully others wont have to spend hours figured it out.

All these settings are available in the ventilo_srv.ini file as of version 3.0.3, In some places I’ve included recommendations of what you should use.

Name=Server 1

This sets the name of the server.
Rename the server to whatever you like.

Phonetic=Server 1

Ventrilo has a voice synthesizer that will read the server name.
This setting set how Ventrilo should pronounce your server’s name.

Auth=0

This setting determines if usernames and/or passwords are required to logon to the server.
“0″ Anyone can connect (Public Server)
“1″ Users much have the Global password, set below with ‘Password’
“2″ Only pre-configured user accounts can connect to the server.

Duplicates=1

Allows or forbids duplicate user names.
Set to “0″ to require each user to have a unique user name

AdminPassword=

This is where you set the password to access administrator rights.
It goes without saying, don’t give this to normal users.

Password=

You set the global password clients will need to connect.
Users with specific account don’t need this password

SendBuffer=0

Sets the size of the TCP outbound buffers. “0″ defaults to 131,072 bytes. Probably best to leave this setting as is.

RecvBuffer=0

Sets the size of the TCP inbound buffers, also best to leave this as it is unless you’re an advanced user.

Diag=0

This setting toggles diagnostics for developers, leave set at “0″.

LogonTimeout=5

Specifies how many seconds a client has to log in to the server before the user is disconnected.
Once logged in, the user is fine.

CloseStd=1

This setting deals with running the server as a background service.
“0″ does not close handles while “1″ will close handles. In most cases this should be left set to “1″

TimeStamp=1

Enables or disables times stamps in console messages.
If you are interested in knowing exactly when messages occurred, set this to “1″

PingRate=10

The interval in seconds that the server pings the client.
The default is 10, this seems a little overkill to me so I set at 30

ExtraBuffer=0

Gives additional buffer space to outbound client data streams.
“0″ sets the default to 128,000 bytes.
There’s no real need to alter this, the default allows is plenty.

ChanWidth=0

Sets the number of possible sub-channels that can be created.
“0″ means no limit.

ChanDepth=0

Sets the depth at which channel nesting can go.
Nested sub-channels are sub-channels that retain attributes of the main channel from which they were created.
“0″ sets the maximum at eight.

ChanClients=0

Limits the number of clients in a channel.
“0″ sets no limit.

DisableQuit=0

Enables or disables someone with administrator rights from remotely instructing the server to exit.
“0″ Allows administrator to turn off the server

VoiceCodec=0

Sets which codec should be used by clients.
Refer to the table below to determine this setting.
Generally set to Speex (3) or GSM (0)

VoiceFormat=1

Quality setting for the VoiceCodec used, again refer to the table below.
This can drastically affect the bandwidth required by the server.
Total bandwidth required can be calculated using the following:
(Bytes * Number of people talking) * Number of people connected

SilentLobby=0

Allows (default) or forbids voice in the lobby.

AutoKick=0

This setting determines how long, in seconds, that a client can remain connected to the server.
“0″ sets no limit.

VoiceCodec   VoiceFormat   Description
0 0 GSM 6.10 (8 KHz, 16 bit) 1625 bytes/sec
0 1 GSM 6.10 (11 KHz, 16 bit) 2210 bytes/sec
0 2 GSM 6.10 (22 KHz, 16 bit) 4420 bytes/sec
0 3 GSM 6.10 (44 KHz, 16 bit) 8905 bytes/sec
1 0 DSP Group TrueSpeech (8 KHz, 16 bit) 1056 bytes/sec
2 0 Lernout & Hauspie (8 KHz, 16 bit) 600 bytes/sec
3 0 Speex (8 KHz, 16 bit, 0 Qlty) 424 bytes/sec
3 1 Speex (8 KHz, 16 bit, 1 Qlty) 620 bytes/sec
3 2 Speex (8 KHz, 16 bit, 2 Qlty) 865 bytes/sec
3 3 Speex (8 KHz, 16 bit, 3 Qlty) 1110 bytes/sec
3 4 Speex (8 KHz, 16 bit, 4 Qlty) 1110 bytes/sec
3 5 Speex (8 KHz, 16 bit, 5 Qlty) 1502 bytes/sec
3 6 Speex (8 KHz, 16 bit, 6 Qlty) 1502 bytes/sec
3 7 Speex (8 KHz, 16 bit, 7 Qlty) 1922 bytes/sec
3 8 Speex (8 KHz, 16 bit, 8 Qlty) 1922 bytes/sec
3 9 Speex (8 KHz, 16 bit, 9 Qlty) 2384 bytes/sec
3 10 Speex (8 KHz, 16 bit, 10 Qlty) 3168 bytes/sec
3 11 Speex (16 KHz, 16 bit, 0 Qlty) 620 bytes/sec
3 12 Speex (16 KHz, 16 bit, 1 Qlty) 865 bytes/sec
3 13 Speex (16 KHz, 16 bit, 2 Qlty) 1110 bytes/sec
3 14 Speex (16 KHz, 16 bit, 3 Qlty) 1355 bytes/sec
3 15 Speex (16 KHz, 16 bit, 4 Qlty) 1698 bytes/sec
3 16 Speex (16 KHz, 16 bit, 5 Qlty) 2188 bytes/sec
3 17 Speex (16 KHz, 16 bit, 6 Qlty) 2678 bytes/sec
3 18 Speex (16 KHz, 16 bit, 7 Qlty) 3070 bytes/sec
3 19 Speex (16 KHz, 16 bit, 8 Qlty) 3560 bytes/sec
3 20 Speex (16 KHz, 16 bit, 9 Qlty) 4344 bytes/sec
3 21 Speex (16 KHz, 16 bit, 10 Qlty) 5324 bytes/sec
3 22 Speex (32 KHz, 16 bit, 0 Qlty) 669 bytes/sec
3 23 Speex (32 KHz, 16 bit, 1 Qlty) 1061 bytes/sec
3 24 Speex (32 KHz, 16 bit, 2 Qlty) 1306 bytes/sec
3 25 Speex (32 KHz, 16 bit, 3 Qlty) 1551 bytes/sec
3 26 Speex (32 KHz, 16 bit, 4 Qlty) 1943 bytes/sec
3 27 Speex (32 KHz, 16 bit, 5 Qlty) 2433 bytes/sec
3 28 Speex (32 KHz, 16 bit, 6 Qlty) 2874 bytes/sec
3 29 Speex (32 KHz, 16 bit, 7 Qlty) 3266 bytes/sec
3 30 Speex (32 KHz, 16 bit, 8 Qlty) 3756 bytes/sec
3 31 Speex (32 KHz, 16 bit, 9 Qlty) 4540 bytes/sec
3 32 Speex (32 KHz, 16 bit, 10 Qlty) 5520 bytes/sec

ventrilo, server, ventrilo_srv

Steve Jobs in ASCII

Steve Jobs in ASCII

I though I’d remember Steve in my own way. In ASCII

Grab the code below. Feel free to use this wherever you like, personally I’ve added it to motd.tail.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
ymmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmy
dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNmh+o/+++syhmMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmy+/-.`            -/sdNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmh/`                       `-sNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMMMMMMMMMNy:`             ` `              :hMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMMMMMMMdo`        ````.```..``````````       -yMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMMMMMm:`    `...---......--::-.........``      .sMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMMMMd.     ./+o+/:-:-:-:::-:/:/:::::-::-..`      :mMMMMMMMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMMNo`    `/sysyyy+++++sosys+////++/+////:-.`      .dMMMMMMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMN:    `-yhdddhhhyyyyhhddmmdhyo+++oooo+/:-.``      `dMMMMMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMm-     .ohdmmdddddmdmNNNNNNmmmmhyssso++/---.``      `yMMMMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMm.     .+ddmmmmmmmmNNNNMMMMNNNNNmddhhyso+/:-..`        oMMMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMy      /hdmmmmNNNNNMMMMMMMMMNNNNNNmmmdhyso/-..``        oNMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMh`     `odmmmmmNNNMMMMMMMMMMNNMMNNNmNmdhyy+:-.```         oMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMo``    `ydmmmmmmNNMMMMMMMMMMMMMMMNmmmmdhhy+:-.````        oMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMd..    .sdmmmmNNNNMMMMMMMMMMNNMMNNmdmmhyyo/:-.````        :MMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMM-.`  `.+hmmmmmNNNNMMMMMMMMMNMMMNNmmNmhsso++:--```` ``    .MMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMN/:-`.-./hdmmmNNNNNNMMMMMMNNNMMMNNNNNmhyyyso+/:.` ` ``.   `NMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMho:`.:+++hddmmmNNNNMMMMMMMMMMMMMNNNNNmmddyyys+-``   `..    sMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMNo//:+oyy/hddmmNNNNMMMMMMMMMNMMMMNNNNNNmNdhyhy+/-.`   `.`   +hmMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMy:-:--/+s/+ddmmmNNNMMMMMMNMMMMMMMMNNNNNmNmdhdhyso:-`    ``   ```yMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMM- -:.`.+:/ydddmNNNMMMMMMNNNNMNNMNMNNNNNmmddhdddhs+-.`           /MMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMM:`oo--.--shds/::/+ydmmNNNNNNNmdNNNNNNNmdyyysooo/-..``           /MMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMM+-oso-.``ydyoss+/-::::/+ooyhhyyNmmmdys+:..-------..             hMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMd:-..`.-+/hmhhyo+:::`.  .`.-/ymNNNd+.````.`-  `` `.-`          -MMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMNs.`-+:+dsodmhy://hm+-.:/.-oodNMMNh/    `+s/.-:-`  `.``        :MMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMd/`-h+shmssddhdNNNNmdhhs+smhohMMNh/`.``/shhhyso/.`-:.``       /MMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMms+:os+hmmdyyyNNNNNNNmdhsdmysNNNNd/`..`-oyddddyo/+y+:.`       hMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMyydos/hdmNmmNNNNMMMNmmNmmNNNMMMNd:```.-ohddmmmddhhs/.       `NMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMNhmdy:oddmmmmmNNMMNNmNmdmNMMMMMMm/``.-:+yddmmmhyyy+.`    `  :MMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMydmh++shhddmmmNNNNmmmmmmNMMMMMMmo-` `-+yhdddhsoo/-`       `dMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMNddhyo/+s+yyddmNNNNNmdmNNMMMMMMmo```  :osyhys+::-.      ``yMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMNmyy//+ossydmNNNNNmmmNNMMMMMNm/```` `/oyhys+/.``      odMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMMMhhsoooosshdNNNNNmdmNMNmNMMNNo`     .+sys+:-`        mMMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMMMhdhdsssyosdNNNNmmNMMMNmmNNmh-      .:/++/-`     `  `MMMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMMMmhddyyhhosmmmNmmmmmNddh+oo+-`      `..::-:` ``` `  :MMMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMMMMmhysdhdyydmmdhyooyysoyo/-....      ````..` `..    sMMMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMMMMMdysdmdhdhdd+/:.:/o+//://.`.-`        `...`-.`   `NMMMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMMMMMMmshhdyhyho:.``.-:/++++//::-.`      ``+--.-.`   oMMMMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMMMMMMMNhydhyyys-` -yhddmNNmmmddys+-`` ``.-:...-`   .NMMMMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMMMMMMMMNhhs+///.`-shdddmdhosss++++-`` ``-/.`  ` `  :NMMMMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMMMMMMMMMmy/-://.:oyhmhhyo:.::-.-..`````.+/`    `    /NMMMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMMMMMMMMMNsho+//:/+symdmmhosssoo:-.`.::-:++`          /hNMMMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMs/yy/::/o+shsyNmhhmddy/--.:oys/..             .ymMMMMMMMMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMm::/++/ossddysyoo+/+//...--+o+.`                `/sshdmNMMMMMMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh-////:+yymhhs//+-:oo/..+:/./.                        `-odmNNMMMMMMMMd
dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd`/ooo:-.-oos++oooodNm. -.-.`                              `-/oymNMMMd
dMMMMMMMMMMMMMMMMMMMMMMMMMMMNm+ `/oyoo/.``-smNNNmmhh/                                          .+ymh
dMMMMMMMMMMMMMMMMMMMMMMMMms/-`    `:ssso/.-dmNNMNNNmdo.                                            -
dMMMMMMMMMMMMMMMMMMMMNdy+`           `-:+++:sNNMMMNNNNmy:`                                          
dMMMMMMMMMMMMMMMMNNh/.                   :dNNmmNMMMMMMMNmy/`                                        
dMMMMMMMMMMMMNmy+-`                     .NNNNNNdmMMMMMMMNhso.                                      
dMMMMMMMMMNd+-                          .NNNNNNNNNMMMMMMms:o-                                      
dMMMMMNNy/.                             .sNNNNMNNmNNNNNms/:-` ..                                    
dMMNh+-                               .ydddmNNNMNdhdmmdhoo:.`  --                                  
so-`                                  sdNNNNNNNMNhsohhyyoo/.`   ``                                  
                                    ./hNNNNNMNmNms+ss+//+/:-``    `                                
                                   yNMmNNMMNNNNmh+oyo/::///-.`                                      
                                  :NMMNNNMNmddmddyysyo+///:/-.`                                    
                                  yNMMMMNmmyhdhhhyyyyso+/://:..`                                    
                                  sNMMMNNmdhshhhyysyyyyso/::-..``                                  
                                  :mNmddhyssyyhhyyyyyhhy+:/::--..```                                
                                   +hdhyyyyyhyhyyhyyhhhys+//o/::...`

Credit to aalib for possibly being the greatest gfx lib on the planet.

Running passenger with multiple different ruby versions apache nginx rvm

It’s becoming more and more of a requirement to run different apps under different versions of ruby
One one project I have needed to take the plunge with Ruby 1.9 for unicode support.

This is no big deal really because Passenger and Rails 3 are pretty stable on Ruby 1.9, however, I still have apps that need 1.8 for various reasons I wont go into.

As it stands, Passenger does not support running apps under different interpreters using the apache or nginx modules, I came across this article

I’m going to try and simplify by just giving installation instructions, but if you want a bit more in-depth info as to the reason for this process head on over to Phusion’s blog.

First of all your going to need RVM and passenger module installed on your apache/nginx instance, I’m going to assume you’ve already got this working and the reason your here is to use multiple different versions of the ruby interpreter with passenger.
NOTE: You should be using the interpreter used for the majority of your apps as the base apache or nginx passenger ruby

Lets assume we already have a working app using passenger with ruby 1.8.7 and we want to get another app running but using ruby 1.9.2

So here’s our basic configuration:

1
2
3
4
5
6
7
8
9
10
11
12
# Basic Apache configuration
PassengerRuby /home/user/.rvm/wrappers/ruby-1.8.7-p330/ruby

<VirtualHost *:80>
  ServerName foo.com
  DocumentRoot /home/user/apps/foo.com/public
</VirtualHost>

<VirtualHost *:80>
  ServerName bar.com
  DocumentRoot /home/user/apps/bar.com/public
</VirtualHost>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Basic Nginx configuration
passenger_ruby /home/user/.rvm/wrappers/ruby-1.8.7-p330/ruby

server {
    listen 80;
    server_name www.foo.com;
    root /home/user/apps/foo.com/public;
    passenger_enabled on;
}

server {
    listen 80;
    server_name www.bar.com;
    root /home/user/apps/bar.com/public;
    passenger_enabled on;
}

Now lets setup bar.com so that it’s using the ruby 1.9.2 interpreter

# setup 1.9.2 and run passenger standalone
$ rvm install ruby-1.9.2 # if you don't already have it
$ rvm use 1.9.2
$ cd /home/user/apps/bar.com
$ passenger start -a 127.0.0.1 -p 3000 -d

Update our web server config to use proxy pass

1
2
3
4
5
6
7
8
# Updated Apache configuration
<VirtualHost *:80>
    ServerName www.bar.com
    DocumentRoot /home/user/webapps/bar.com/public
    PassengerEnabled off
    ProxyPass / http://127.0.0.1:3000/
    ProxyPassReverse / http://127.0.0.1:3000/
</VirtualHost>
1
2
3
4
5
6
7
8
9
10
# Updated Nginx configuration
server {
    listen 80;
    server_name www.bar.com;
    root /home/user/webapps/bar.com/public;
    location / {
        proxy_pass http://127.0.0.1:3001;
        proxy_set_header Host $host;
    }
}

Deploying your app, bundle and reload your apache or nginx instance.
Then point your browser to `bar.com` If you’ve followed all the steps, you’ll have foo.com using 1.8.7 and bar.com using 1.9.2

Enter to win an 8GB iPod Touch just for using twitter

AC Computer Warehouse, who sell new and refurbished laptops and offer an excellent laptop repair service.

They’re holding a contest over the summer and giving away an 8GB iPod Touch to a lucky follower on Twitter or Facebook.

To enter all you need to do is:

  • Follow them (http://www.twitter.com/accomps)
  • Retweet the following – “I’ve just entered to win an 8GB iPod Touch. Just follow @accomps and retweet http://bit.ly/win-ipod-touch”

Alternatively visit their facebook page for more info.

Ridiculously easy to enter, go over and check it out their site.

My Nectar app for Android, the story, the legal threat

This shorty story/dialog will answer questions you may have as to the sudden disappearance of ‘My Nectar’ the Android app

In January I released the ‘My Nectar’ app to give collectors of nectar points quick access to their points balance on their Android phones, the app was listed absolutely free, all my development costs were paid for out of my own pocket, aren’t I just a nice guy. The official Nectar app released in the late summer of 2010 was and still is only available for Apple’s iOS.

Whilst the app is simple, I figured it would be useful for others that regularly collect nectar points, avoiding the need to visit their bloated website, it would be nicely to quickly get information about your points balance.

Feedback after the release was mostly good, a few people complaining it didn’t do much, true but it did to everything it was supposed to, unlike plenty of other apps out there.

Early evening yesterday (16th Feb 2011), I received the following email from Alex Schajer, Head of Digital Technology at Groupe Aeroplan Inc. the Canadian parent company of Nectar

Hello Rob,

Thank you for your interest and enthusiasm in building an Nectar Android
app. We appreciate that you have spent some time developing this app but
we would ask you to please remove the app from the Android Market. There
will be an official Android app available shortly featuring all of the
functions of the iPhone version. Please bear with us whilst we go
through the final rounds of testing.

Can you please respond within the next few days to let me know that you
have removed the app from the Android Market,

Many thanks,

Alex Schajer
Head of Digital Technology

Whilst the email from Alex was fairly polite, I felt quite insulted, I was trying to do a good thing, helping their customers infact, for absolutely no financial gain of my own.

Hurt, I sent a brief reply back to Alex.

Sorry but sending this email does not show appreciation at all. I don’t see the problem?
The android market is an open free platform. I’m not doing anything illegal. The app is free and merely helping your customers get some simple information on their android phone.

Regards
Rob

After sleeping (or not sleeping) on the Alex’s email, I thought, maybe I was a little hostile with my reply so I followed up my reply with the following

Morning Alex,
I have been thinking about your email last night.
I appreciate that maybe you don’t want people to find my app over yours.

As you correctly mentioned, I have spent a considerable amount of my
personal free time producing the app to fill a hole left by the lack
of an Android app, many people have found this a simple useful tool to
quickly lookup their current points balance, I made the app out of
love for shopping and collecting points, for no personal monetary
gain, as you already know, the app is offered on the Android Market
free of charge.

I would be happy to remove the app from the Android Market and provide
you with the app’s code,
and transferring ownership of my app to you for a small token gesture from
you of 1000GBP

I look forward to hearing from you.

Regards,
Rob

I reasonable request, I’d put a lot of time and effort into creating and supporting the app, I though only fair that if I was to be bullied out of the free open platform for which I’ve paid my $25 developer fee just like the next, I should be given something as a token gesture for my Love for Nectar and helping to improve their service for the Android audience they decided to neglect in the first place.

//update
A few days passed with no reply from Alex
Then on the 21st Feb 2011, I received the following email from Jeremy Henderson-Ross, Legal Director & General Counsel at Groupe Aeroplan Inc.

Rob

It has come to my attention that you have launched a Nectar ‘app’ on the Android Market which uses the Nectar brand.

Loyalty Management UK Limited (“LMUK”) owns numerous registered trade marks for the word “Nectar” in the United Kingdom and the European Union. Details of our registered UK trade marks and CTMs are available online at the UKIPO and OHIM websites. Nectar is therefore LMUK’s brand in the loyalty programme sector and we take the protection of our brand very seriously. As a result, we take a very serious view of your app and use of the Nectar brand and consider these acts to be an infringement of our rights

In addition your app is likely to confuse people into believing that the Nectar app is registered to, operated or authorised by, or otherwise connected with LMUK. This amounts to trademark infringement and the common law tort of passing off and entitles us to commence legal proceeding for trademark infringement and/or passing off to prevent you continuing such use of the Nectar app.

These infringements of our rights are unacceptable to us. We would prefer to resolve this matter with you on an amicable basis without the need for legal proceedings. On this basis we require you to cease marketing and use of the Nectar app immediately.

In the meantime, we reserve all rights in this matter.

Kind regards

Jeremy Henderson-Ross
Legal Director & General Counsel – Groupe Aeroplan EMEA

Ok, now we’re starting to get heavy, getting their Legal Director involved. Yes I used the word Nectar in the app a trademark LMUK own. But seriously I’m not trying to compete, I haven’t started my own Loyalty scheme called nectar, I’m providing a simple app to improve their service since they don’t have an Android app of their own.

I’m don’t know much about trademarks and all that boring legal shit, I’m just a happy, normal guy, who wanted to help the people who use nectar that have an Android phone. I certainly never meant step on anyone’s toes, I’m not charging for the app, I make no revenue at all from the app, it actually costs me money :/ I mean how stupid must I be?
I really don’t see how it’s passing off, maybe If I was using their brand to sell jars of honey or something even then, their trademark only covers use for classes 9, 16, 35 updated in 2002 to include 39. None of which relate to foot products.

ramble ramble ramble…

Jeremy appeared to know little about my app, and it’s function. The app clearly states in the description and in the app’s about screen that it is a 3rd party application and in no way affiliated with Nectar and the other relevant companies.

Description on Google's Android Market

My Nectar About screen

Jeremy also appeared to have not been made aware of my previous emails to Alex.
I wrote back.

Without prejudice:

Dear Jeremy,

Thank you for your email. As you may or may not be aware, I’ve already sent an email to Alex Schajer and am still waiting for a response.

In response to your claims, if you’ve seen my app, you will be aware that it is my intention to create something that is of use to people who use your service, and certainly never to ‘pass off’ or any ‘infringement of your rights’. Any lay user of the app would be completely aware of this before and during any use of the app.

Designing and building apps is a time consuming and expensive business, and although I am not benefiting financially from this app, it has still cost me money to develop. I would be willing to remove the app from the Android Market if you were to make a small token gesture of remuneration for the effort I’ve put in to the design and build of the app to date. As I have said to Alex Schajer, if you pay me £1000 I will remove the app immediately, and will even give you the source code should you wish to use it for future development.

This token sum will bring the matter to an amicable close and we can all carry on our business as usual.

I look forward to hearing back from you.

Kind regards,

Rob

Reiterating my earlier proposal made to Alex for a small gesture as a thank you for putting my hard work and time into improving their service.

Jeremy replied swiftly

Rob

I am aware of your previous email correspondence with Alex Schajer. We absolutely reject your requirement of a payment to cease using our trade marks in breach of the intellectual property laws I detailed in my previous email. Please confirm that you are to cease use of the app immediately otherwise we will have no other option but to commence legal proceeding for trademark infringement and/or passing off – a course of action we would very much like to avoid.

Kind regards

Jeremy Henderson-Ross
Legal Director & General Counsel – Groupe Aeroplan EMEA

If course he’d like to avoid legal action, it would start to cost them money.
But what’s in it for me for bending over now?

Nothing it seems.

//update2
After much deliberation I have decided to unpublished the ‘My Nectar’ app from the Android Market, I feel like this is giving up, maybe I should have taken it further.
With hindsight I don’t have a fancy title and a large customer focused corporation supporting my efforts.

I was simply trying to do something out of the goodness of my heart for absolutely no personal gain.
As it’s the life of the ‘My Nectar’ app has come to an end very quickly, I’d like to thank everyone who downloaded ‘My Nectar’ and emailed me with feedback, good and bad, feedback helps keep apps user focused and bug free, so thanks to all of you.

Bullies never should never win, but in this case I’ve decided the bully is just too big to fight.

Rob
@robaldred

//As of 22 Feb 2011, the “Official” Nectar app for Android is still no where to be seen.

Override ActionMailer recipient in Rails 2 and 3 for development or testing

If your like me, you might want enable delivering of mail in development, mostly because testing email layout is a pain without actually sending the email to a real client.

In doing this you’ll probably want to avoid the possibility of emails making their way to your customers from your development machine, this can be achieved with a simple initializer to override the destination.

Rails 2.x

1
2
3
4
5
6
7
8
9
10
11
12
if Rails.env.development?
  class ActionMailer::Base
    def create_mail_with_overriding_recipients
      mail = create_mail_without_overriding_recipients
      mail.to = "mail@robaldred.co.uk"
      #mail.cc =
      #mail.bcc =
      mail
    end
    alias_method_chain :create_mail, :overriding_recipients
  end
end

Rails 3.x

1
2
3
4
5
6
7
8
if Rails.env.development?
  class OverrideMailReciptient
    def self.delivering_email(mail)
      mail.to = "mail@robaldred.co.uk"
    end
  end
  ActionMailer::Base.register_interceptor(OverrideMailReciptient)
end

If you prefer to use a plugin, there is one called mail_safe personally, i think it’s a little overkill.

MySQL server has gone away with Rails, Sunspot and Cucumber

When using Rails, sunspot and cucumber with a mysql test database, I received the following the MySQL server has gone away error.
After some googling a came across the `reconnect` option for database config

1
2
3
4
Using the default profile...
Sunspot server is starting...
Sunspot server took 2.72 sec. to get up and running. Let's cuke!
Mysql::Error: MySQL server has gone away: SHOW TABLES (ActiveRecord::StatementInvalid)

Solution is to add

1
reconnect: true

to cucumber section of your database.yml

Thanks to: http://rywalker.com/

Keep track of your mobile usage with ‘My Allowance’ for Android

My Allowance app for Android.
Allows you to keep track of your mobile usage

Including:

  • Current allowance usage
  • Overspend during the current billing period
  • Details of your last and next bill

The app is in its early stages, but I believe has all the information needed to make it useful to people now.
I plan to make improvements to the UI, Speed and add more networks. (At the moment only O2 UK is supported)

All you need is an O2 online account. Input your login details and your away.

You can get it from the Android Market for just 59p

Here’s a couple of screenshots

Any suggestions, issue or feedback, please feed free to comment here, or drop me an email.

–Rob