RSS

Author Archives: kurtcampher

Digital VS Offline competitions

Is better to run a brand competition offline/instore or digitally? What are the pro’s and con’s?

From my experience managing the technical aspect of various online competitions and campaigns here is what I have learnt…

There are a couple of things that Digital has over instore/offline:
  • Real time analytics
    • If the instore/offline strategy does not yield the desired results then fixing that will take time and will be costly.
    • On the digital side updating the “code” would be quicker and cheap.
  • Targeting
    • Instore:
      • Current customers for your brand can’t be targeted in any meaningful way.
      • How would you know who they were?
      • You would have to rely on the passer by to make the first interaction and hope they enter the competition.
      • Or you could have someone solicit entries. Another cost ūüė¶
    • Digital:
      • In most cases your brand will¬†already have a database of¬†customers that can be targeted.
      • It would be as simple as sending a personalised SMS/email with a link to the online campaign.
      • FB posts have proven to be effective¬†to boost entries.
      • I was the tech lead on a project where a¬†single facebook post boosted entries 10 fold.
  • Multiplier Effect
    • Instore: You can’t share/tweet/email a physical entry form.
    • Digital: Not only can you share but you could also track who entered the competition from those platforms and alter the strategy based on that insight.
  • Conversion Tracking
    • Instore: If a customer picks up a form and dumps it during the process, how will¬†¬†you know why that happened and what you¬†can do to fix it.
    • Digital: The whole process can be monitored. Events can be tracked and we could easily see where in the user flow they bailed.
I’m not saying that brands¬†should not do instore/offline campaigns or competitions (in fact they should do both) but digital gives them user behaviour, metrics, granular tracking and better analysis of what happened during the campaign.
Hope this helps.

 

Advertisements
 
Leave a comment

Posted by on January 6, 2015 in Uncategorized

 

Tags: , , ,

Lessons learnt with Hiring and Firing

Just some stuff I learnt over a few months. Very specific to web app environments and agencies.

Hiring

  1. Resumes can be mis-leading. If it’s too good t be true… (you know the rest)
  2. Recruiters without a technical background can waste a lot of your time. They have no clue what a good candidate is and will continue to send you bad resumes no matter what you tell them.
  3. Recruiters cannot find good developers (Or at least it’s very hard for them to pull it off) and it’s nearly impossible for them to find GREAT developers.
  4. Great developers are extremely hard to find… ¬†ūüôā
  5. Know and understand the difference between a good and great developer/programmer. This will speed up the hiring process.
  6. Do a telephonic screening before seeing the candidate in person. This can eliminate the bad ones quickly.
  7. Culture-fit and passion is way more important than technical knowledge. This was a hard one to learn for me and wasted lots of time. Technical knowledge can always be taught but passion and culture will uplift the team and create a winning atmosphere. You see passion at work when the dev triple checks his work or re-write some code to follow best practices.
  8. It’s hard to check for passion and culture-fit in an interview but there are some signs:
    1. The latest “thing” they learnt. It’s not what they learnt but rather why they started learning that’s important. Was it because they had to? Was it an itch?
    2. How many new “things” have they learnt? Did they complete the tutorial/course/book?
    3. What did they learn from the process? Are they able to do self-analysis? Are they able to improve?
  9. ¬†Don’t ask dumb OOP questions. 90% of web app devs do not use abstract/interface classes and had no experience with it(This is also something that can be encouraged once they start). If you really must check technical ability right there¬†then give them some example code to improve on and focus on their problem solving skills.

Firing:

  1. Make it quick and painless.
  2. BUT be patient… they might be shy, insecure, etc…
  3. If they don’t fit into the culture after a few weeks you will need to figure out if it’s a personality that just can’t adapt to a knew environment. But would you really want to do that? Is it your job to change someone’s personality? By keeping them around you just torture yourself, them and everyone else.
  4. That’s all I learnt about ¬†“Firing”. ūüôā
 
Leave a comment

Posted by on October 3, 2014 in Uncategorized

 

Valuable Lesson Time: Communication is NB!!!

So I’m a Senior Dev at a digital advertising agency.

I report to the Technical Architect.

A Mid level dev had an idea for solving a problem that we had on a client’s app.

After I mentioned that I thought it was a cool idea he went ahead and started on it assuming my input was the “OK go for it” he needed.

As it turns out it the Mid Level dev never consulted the Technical Architect who quickly saw some issues with his potential solution.

These issues were not picked up by the Mid Level dev or myself and they were valid observations that in hindsight could cause bigger problems later.

So what is the lesson learnt?

The company I work for has a very dynamic environment. It is team orientated, fast moving and uses proven solutions to speed up time to market. Also, our Technical Architect is ultimately responsible for all our projects and needs to be aware of major changes to a plan or solution.

My mistake was assuming that the Mid Level dev would double check that his potential solution with our manager.  I should have followed up on whether that happened or at the very least suggested that he run his solution by some other Seniors.

Another thing I learnt that sometimes “cool” ideas can have hidden long term consequences.

“Cool” does not always mean “best solution”.

Any decision affects an agency/workplace/team in some way. In most cases it’s minuscule but I need to train myself to recognise the signs that it could lead to bigger problems later.

It seems that comes with experience…

Hope this helps you.

 

 

 

 

 

 

 

 

 

 

 
Leave a comment

Posted by on July 22, 2014 in Uncategorized

 

Amazon Redshift

Just started researching Redshift for a project at work and below are some random notes in relation to python and Big Data (buzzword alert) analytics.

Basic Description

  • Fast I/O
  • Designed for data warehousing
  • Speed is due to distributing queries across multiple nodes.
  • Security is built in.
  • Based on PgSQL

AWS Integration

Plays nicely with Amazon S3 and Dynamo. Data can be loaded/unloaded to/from either. So one could easily take Elastic Map Reduce outputted data and store it in Redshift for further analysis.

Architecture Setup

Uses a cluster of nodes where each cluster is a warehouse. Node amount is based on size of data, query performance, etc…

The more nodes the more parallel computing can be achieved.

Setup is broken into Leader and Compute Nodes. The Leader node is the access point via JDBC and the Compute nodes do all the query work.

Loading Data

This was done via S3 using a very awesome python library, boto.

Cleaned raw data goes to S3 and from there we use the Redshift COPY command. With enough nodes loading can go very quick by splitting the input files by the same number of slices on your nodes (explained in the docs  already). This allows for parallel loading.

Can it help me?

So for my data analytics project i needed something that could be scheduled, queried and set up via an api in python. Unfortunately this wont be possible right now as no python query api exists. Hopefully boto will sort that out soon. The api’s available cater for the java and .Net market and according to the docs only handle cluster management. I’m sure this wil change¬†in future. Well hopefully…

Speed

Speed is based on your queries, amount of nodes and cluster setup. But from the little testing I did it was very fast. One table with 500 000 rows was easily queried and the more nodes added the faster it went (naturally). Comparison was against a mysql DB. Please note that this was a very simple test and nothing scientific.

Important Lessons

This is not a transactional datastore and should not be treated as such. This could possibly  be used for ad hoc large table analysis with millions of rows. If it was to be used for my project then it would form part of the ETL layer/phase and would store the cleaned data.

Could still be used to test ideas or for quick analysis but right now i will have to give it a miss.

Hope this helps you.

 
Leave a comment

Posted by on April 12, 2013 in Uncategorized

 

Tags: , , , , , , ,

Elastic Map Reduce tutorial error (The Word Count thing)

So I started working on a Map Reduce project for work and came across an irritating error:

WARN Step failed with bad retval ‘1’

Took me quite a while to find out that the aggregate reduce function (built-in Hadoop lib) expects a key/val pair in a certain format which makes perfect sense. Also what makes it even trickier is that there were no clues in the step, controller or task logs. 

So if you are going to change the tutorial from…

print “LongValueSum:” + word.lower() + “\t” + “1” ¬†¬†

…then make sure you have a custom reduce function that can handle the new format.

 

 

 
Leave a comment

Posted by on April 11, 2013 in Uncategorized

 

Tags: , ,

curl to a file

So i needed to curl a url but download rather than just display its output. For this you would use the “-o” or “–output” flag.

url : http://registro.br/dominio/proclib-l.html

Here you go:

curl -o procs_file.html  http://registro.br/dominio/proclib-l.html

 
Leave a comment

Posted by on February 8, 2012 in Uncategorized

 

Tags: , ,

Splunkd request using urrlib2, splunk-python-sdk

Splunk guys are so cool they put together a splunk python sdk. It comes stock standard with examples, explanations, documentation, etc…

So I’m all ready to play along and none of the examples work(for me at least).

When making a request to splunkd(the service interface) you need to be authenticated. That makes perfect sense. The logic the example uses doesn’t work though:

import httplib
import urllib
from xml.etree import ElementTree

HOST = “localhost”
PORT = 8089
USERNAME = “admin”
PASSWORD = “changeme”

# Present credentials to Splunk and retrieve the session key
connection = httplib.HTTPSConnection(HOST, PORT)
body = urllib.urlencode({‘username’: USERNAME, ‘password’: PASSWORD})
headers = {
‘Content-Type’: “application/x-www-form-urlencoded”,
‘Content-Length’: str(len(body)),
‘Host’: HOST,
‘User-Agent’: “a.py/1.0”,
‘Accept’: “*/*”
}
try:
connection.request(“POST”, “/services/auth/login”, body, headers)
response = connection.getresponse()
finally:
connection.close()

That bombs out immediately. Wiggled and jiggled some code and it still nothing. I then tried the very simple :

params = urllib.urlencode({‘username’:USERNAME, ‘password’:PASSWORD})

resp = urllib2.urlopen(url, params)

print resp.read()

The response is a session key.

Works like a charm!!! I’m still not sure why the first example didn’t though. I have never used httplib and don’t intend to. But I shall investigate!!!

urllib and urllib2 have always been awesome.

Simplicity is priceless.

 

 

 
2 Comments

Posted by on February 1, 2012 in Uncategorized

 

Tags: , , , , , ,