The following list is by no means complete or exhaustive of everything one needs to know to travel in the USA. This is a list of stuff I learnt in the last 1 year of travelling around USA including the visit to a mountain resort with entertainment. These I share with you now and will regularly update as I learn more and any corrections along the way.
If you are planning a road trip I recommend you to consider the option of the campers that camper trailers Sydney have available for this purpose.
Tips
Use a “SuperShuttle” to and from the airport. http://www.supershuttle.com/it’s a shared taxi van of around 9 people. It’s dirt cheap vs. crazy taxi fares and you get to see more of the area as they drop off people around town.
If you live in the valley and have your own car and are taking a short trip of around a week it is cheaper esp. with a coupon & more convenient to leave your car at any of the available airport parking companies. Some which are further away from the airport have shuttle buses that take you to the airport and back for free so don’t worry if it’s 5 minutes outside the airport.
If flying out of Oakland International we use Park ‘N Fly and use this coupon to get a discount on parking.
If flying out of SFO International we use SkyPark and use this coupon to get a discount on parking.
Don’t be shy with the coupons. Everyone in America uses coupons to bring the price down even further!
If you are arriving to the USA don’t bother bringing your wardrobe. Clothes here are cheap. Dirt cheap. Brands and all. Especially during public holidays like Thanks Giving or Christmas time by average 50% off.
If you need to rent a car do it through Enterprise. I find them the most reliable and mostly the cheapest. Sign up on their website to receive regular coupons to bring that price down and don’t forget to read my post on car rental hidden costs to save even further.
For accommodation I highly recommend AirBnB. Airbnb is an online service that matches people seeking vacation rentals and other short-term accommodations globally with locals with rooms to rent. It’s fun, cheaper than hotels, you can be very selective on location (not restricted by hotels location), meet interesting people and live like a local. It works really well in big cities like New York, San Francisco, Los Angeles, etc. Why spend big $$$ on a hotel when all you need is a place to sleep and store your luggage. Use the money you save to buy some fashion!
Americans drive fast on freeways that stretch up to 5 lanes each way. Get ready. Either hire a GPS or bring your own so you’re not slowing traffic down. As long as you’re not doing anything dangerous on the road you will be fine to keep up with the communal speed limit. I’ve seen police sway across all lanes to slow traffic down when it gets too fast.
When it comes to food there are great restaurants in every corner, asking the locals helps a lot as well. For example, I was highly recommended Biloxi Buffet and it did not let down!
The only dangerous creatures are Bears (especially Grizzly) & Mountain Lions. You wont see poisonous spiders, snakes or crazy insects.
For more tips visit each of the places mentioned below. The posts include their own unique tips.
Some of the great places we have visited
New York City (Manhattan) – The city that never sleeps. My favorite! One of the most densely populated areas in the world. Known for its financial and fashion center of both the United States and the world.
Los Angeles – West Hollywood. Home of the movie industry.
Hawaii – Made up entirely of islands like Big Island, Maui etc. Natural scenery, warm tropical climate, abundance of public beaches and oceanic surrounding, and active volcanoes make it a popular destination for tourists.
Monterey – 1-hr drive south of the valley. A beautiful coastal city.
Carmel-by-the-sea – a hidden gem round the corner from Monterey. The beachy town is known for its natural scenery and rich artistic history.
Yosemite National Park – Designated a World Heritage Site recognized for its spectacular granite cliffs, waterfalls, clear streams, Giant Sequoia groves, and biological diversity. Almost 95% of the park is designated wilderness.
Yellowstone National Park – a national park located primarily in the U.S. state of Wyoming known for its wildlife and its many geothermal features. If you’re traveling with a group, you’ll want to consider the Nest Travel Trailer. The Nest Travel Trailer from Airstream has much to offer: a sleek design profile, soft touch panels, and a beautiful exterior. In addition, it provides a full onboard wet bath, space to work and eat, and comfortable sleeping quarters. Whether planning a weekend getaway or a cross-country journey, this travel trailer is the perfect solution to your travel needs.
Las Vegas – The Strip. Internationally renowned major resort city for gambling, shopping, partying (clubs) and fine dining, according to every review on established gambling review sites like piramindwelt.com.
I will be posting individual posts to each of those locations with photos so come back soon.
Right, let’s dig into my favorite language. Python. It’s super easy to read & learn, it’s concise and one of the hot languages in Silicon Valley. In fact, Python is also one of the easiest languages to grasp if you want to learn to code on mobile.
The following assumes you understand basic software engineering concepts.
A bit about Python
Design philosophy emphasizes on code readability. Important because software engineers spend most of their time trying to understand code. (Ref Coding Horror)
Has a nice MVT open-source web framework called Django. Django emphasizes reusability and pluggability of components, rapid development, and the principle of DRY (Don’t Repeat Yourself).
It features a fully dynamic type system with late binding (duck typing) and automatic memory management, similar to that of Scheme, Ruby, Perl, and Tcl. More here.
Currently one of the hottes languages (alongside Ruby/Ruby on Rails) in Silicon Valley especially among startups.
Sample of popular sites build in Python
Google, Dropbox, Reddit, Disqus, FriendFeed (Sold to Facebook to drive their News Feeds), YouTube, Quora (rising star), Douban. Comprehensive list here.
Python
Uses whitespace indentation, rather than curly braces or keywords, to show & delimit block structure. I prefer 4 spaces.
Everything is an object (first class) and everything has a namespace accessed by dot-notation.
Naming convention UpperCamelCase for class names, CAPITALIZED_WITH_UNDERSCORES for constants, and lowercase_separated_by_underscores for other names. See Python style guide and The Zen of Python for guiding principles for Python’s design into 20 aphorisms. Basically write self-documenting code by chosing explicit naming convention.
A comment starts with a hash character (#). For longer then a line (and as Doc strings) use triple quotes: ”’ xyz ”’.
Variable names have to start with a letter or underscore, and can contain numbers but no spaces or other symbols.
File extension is always .py. If you see .pyc this is source code compiled into bytecode for execution by a Python VM (virtual machine).
Use command line python shell to test assumptions by getting immediate results.
No case/switch statements. Switch is better solved with polymorphism (object that has more than one form) instead. Good example here.
Data types
Immutable (can’t be updated or changed): strings, tuple, int, float, complex, bool
Mutable (can be updated or changed): list, dictionary (dict) & mutable except for it’s keys
Editors I use: IDLE (for basic shell work & comes with Python.org install), PyCharm (with Django support) and Sublime Text 2 (lightweight TextMate replacement).
Basics
Arithmetic
Boolean
2 > 3 → False
2 == 3 → False
2 The opposite of == is != (“not equals”):
2 != 3 → True
You can chain together comparison operators:
2 < 3 < 4 → True
Equality works on things besides numbers:
“moose” == “squirrel” → False
True and True → True
True and False → False
True or False → True
not False → True
(2 < 3) and (6 > 2) → True
Under the hood,
True is equal to 1,
and False is equal to 0.
Booleans are a subtype of integers.
Operators
==
Equal to
!=
Not Equal to
is
Identical
and
Boolean and
or
Boolean or
&
Bitwise and
|
Bitwise or
not
Boolean not (not the !)
Built in functions that are always available
len(s)
Return the length of an object. Can also be a sequence (string, tuple or list) or a mapping (dictionary).
print(obj)
Print object(s) to the stream file.
help(list)
See basic help on any object.
dir(list)
Return a list of valid attributes for that object.
# define a new function with 1 default argument. Can also have no arguments.
def function_purpose(arg1=1):
''' This is a doc string '''
print 'Python code'
return (arg1, arg1+7,) # returns 2 values as a tuple (note the comma), else None
# call the function, returns a tuple that we assign to 2 variables
item1, item2 = function_purpose(1)
If you want to assign a value to a variable outside the function within a function you must prepend the variable with “global”.
Calling methods on objects
Just like calling functions, but put the name of the object first, with a dot
words = 'some monkeys here'
e = words.count('e')
# returns 4
Strings
Are a sequence of characters.
# creation
name = 'Ernest Semerda'
# accessing, returns 's'
name[4]
# splitting, returns a list ['Ernest', 'Semerda']
the_string.split(' ')
Strings can be subscripted/sliced like the list (see lists in Data Structures below).
# selected range returns 'nest '
name[2:5]
# get first two characters returns 'Er'
name[:2]
# get everything except the first two characters returns 'nest Semerda'
name[2:]
Sample of some string methods. They come with 8-bit & Unicode support.
name.capitalize() # changes to 'ERNEST SEMERDA'
name.find(sub[, start[, end]])
name.lower()
name.split([sep[, maxsplit]]) and new_name.join(list)
Python is strongly typed which won’t allow you to automatically converted from one type to another.
Python also has a strong tradition of duck-typing (dynamic typing) in which an object’s current set of methods and properties determines the valid semantics. Trusting that those methods will be there and raising an exception if they aren’t. Be judicious in checking for ABCs and only do it where it’s absolutely necessary.
An important feature of Python is dynamic name resolution (late binding), which binds method and variable names during program execution.
# fails because (str + int + str) != str
'There are ' + 8 + ' aliens.'
# perfect, str() = type conversion
'There are ' + str(8) + ' aliens.'
To achieve Reflection, a process by which a computer program can observe and modify its own structure and behavior, use the built-in functions. I.e. getattr
Over a “sys” module’s method “path”:
path = getattr(sys, "path")
Over a function1 with sample input:
result = getattr(sys.modules[__name__], "function1")("abc")
And/or use the Reflection Utilities API for deeper execution frame, execution model, class/obj inspection for methods & attributes etc… See: http://docs.python.org/c-api/reflection.html
Data Structures
Dictionary
Set of key:value pairs. Keys in a dictionary must be unique. Values Mutable.
# creation, empty dictionary
peopleDict = {}
# creation, with defaults
aliensDict = {'a':'ET', 'b':'Paul', 'c':42}
# accessing, returns 'ET'
aliensDict['a']
# deleting, 'Paul' is removed from dictionary
del alientsDict['b']
# finding, returns False (note capital F)
aliensDict.has_key('e')
# finding, returns ['a', 'c']
aliensDict.keys()
# finding, returns [('a', 'ET'), ('c', 42)]
aliensDict.items()
# finding, returns True
'c' in aliensDict
Lists
Lists can carry any items ordered by an index. Lists are Mutable.
Apply set(list) and it becomes a set – an unordered collection with no duplicate elements. Also support mathematical operations like union, intersection, difference, and symmetric difference.
Tuples
Tuples are similar to lists: they can carry items of any type & useful for ordered pairs and returning several values from a function. Tuples are Immutable.
# creation, empty tuple
emptyTuple = ()
# note the comma! = tuple identifier
singleItemTuple = ('spam',)
# creation, with defaults of any type
codesTuple = 12, 89, 'a'
codestuple = (12, 89, ‘a’)
# accessing, returns 1
codesTuple[0]
# Collection iterator over dictionary w/ tuple string formatting
people = {"Ernest Semerda":21, "Urszula Semerda":20}
for name, age in people:
print "%s is %d years young" % (name, age)
To loop over two or more sequences at the same time, the entries can be paired with the zip() function.
# Iterate over a sequence (list) of numbers (1 to 10) with if/else Conditionals. The range function makes lists of integers.
for x in range(1, 10):
if x == 8:
print "Bingo!"
elif x == 10:
print "The End"
else:
print x
While loop
# using request to ask user for input from interactive mode
request = "Gimme cookie please: "
while raw_input(request) != "cookie":
print "But me want cookie!"
Switch-statements do not exist. In OO they are irrelevant & better solved with polymorphism instead. Examples here.
[x * x for x in [1, 2, 3, 4, 5]]
# returns [1, 4, 9, 16, 25]
Can get messy & complicated to read.
print [x * x for x in range(50) if (x % 2 ==0)]
def is_palindrome(word):
word = re.compile(r'[!? ]').sub("", word.lower())
return True if word == word[::-1] else False
Files
# open, defaults to read-only + note single forward slash
contents = open('data/file.txt')
# accessing, reads entire file into one string
contents.read()
# accessing, reads one line of a file
contents.readline()
# accessing, reads entire file into a list of strings, one per line
contents.readlines()
# accessing, steps through lines in a file
for line in contents:
print line
All methods (but not functions) are closures – see “self” below. A closure is data attached to code. All variables are public, private variables are established by convention only.
# SuperHero inherits from Person class - also supports multiple inheritance using comma
class SuperHero(Person):
# constructor
def __init__(self, name):
self._name = name
# method
def shout(self):
print "I'm %s!" % self._name
The __name__ below allows Python files to act as either reusable modules, or as standalone programs. Also think Unit Tests benefits!
if __name__ == '__main__':
# instantiate the class
batman = SuperHero('Batman')
# call to method in class, returns "I'm Batman!"
batman.shout()
# returns "I'm Batman!"
SuperHero.shout(batman)
Modules are Libraries that hold common definitions and statements. They can be combined into an importable module.
More on modules here: http://docs.python.org/tutorial/modules.html
To use a module, use the import statement:
import math
# returns 1.0
math.sin(math.pi / 2)
Some commonly used modules
math – trigonometry, the constants e and pi, logarithms, powers, and the like.
random – random number generation and probability distribution functions.
os – tools for talking to your OS, including filesystem tools in os.path.
sys – various system information, as well as the handy sys.exit() for exiting the program.
import sys
try:
f = open('myfile.txt')
s = f.readline()
i = int(s.strip())
except IOError as (errno, strerror):
print "I/O error({0}): {1}".format(errno, strerror)
except ValueError:
print "Could not convert data to an integer."
except:
print "Unexpected error:", sys.exc_info()[0]
raise
Released in Google App Engine on April 7, 2008. The antigravity module (http://xkcd.com/353/) can be enabled like this:
import antigravity
def main():
antigravity.fly()
if __name__ == '__main__':
main()
Speed – always a common topic
Classic computer programs had two modes of runtime operation = interpreted (as code runs) or static (ahead-of-time) compilation.
Just-In-Time compilation (JIT), also known as dynamic translation is a new hybrid approach. It caches translated code (bytecode into native machine code) to minimize performance degradation. Used in .NET, Java & Python via PyPy.
PyPy is a fast, compliant alternative implementation of the Python language. It has several advantages and distinct features like Speed (Just-in-Time JIT compiler), Memory usage (better then CPython), Compatibility (works with twisted & django frameworks), Sandboxing (run untrusted code), Stackless (providing micro-threads for massive concurrency). Check it out: http://pypy.org/
Finally, it is important that you have a network of like minded people around you whom you can regularly work on Python with, bounce ideas & question and support (help) each other out.
Happy Learning and if you have any questions please contact me. Always happy to help.
Couponstar Ltd, formerly Cashstar International and later Coupons.com Ltd (post acquisition in late 2011) was a journey I will never forget. A journey which changed me. From being a corporate guy to an international entrepreneur. The 5 years building Couponstar Ltd from ground up were boisterous, convivial and challenging. It is also what took me on a journey to Silicon Valley and ignited this blog.
The journey
It all started back in Sydney, Australia, on January 2004. Having been made redundant from AMP Pty Ltd (the best thing that ever happened to me) I joined Cashstar (as it was formerly known) to work with Jared K (a 2 man team) in changing the retail world using coupons.
Early days
We were in the market providing coupon and media solutions to the gaming and entertainment industry in Australia. We licensed Coupons, Inc. technology outside North America and set out to “couponize” the rest of the world with our high-tech customized solutions which were aimed to drive online traffic into bricks and mortar stores.
Below is a picture of the early days (vintage 2004) when it was only me and Jared. We drove 800km in my car from Sydney to Melbourne to attend ADMA (Australian Direct Marketing Association) trade show. Airfares in Australia back then were expensive.. ahh the memories of those early days. I (a software engineer) also got to learn some sales techniques from Jared and via the experience of marketing to customers at ADMA.
The tall blurry banner in the picture above was something we did ourselves in-house to lure by passes getting hooked on trying to read it properly. Then Jared and I would swoop in.
On top of sales & marketing with the help of experts like VICTORIOUS, I also got involved in every aspect of strategic, operational, technical & engineering tasks while we grew the business. Jared & I even folded print & mail envelopes on the floor of our rented space. Hey it had to be done!
Early pivot
With time we grew to a small lean team of 6 in the Sydney office. After a lot of sweat, we also realised early on that Australia just wasn’t the right market for what we were doing. Australia (even today) is slow to adopt new disruptive technology.
So we decided to pivot and opened an office in London under Couponstar Ltd. We realized that Europe had more potential since the market was far greater than Australia and the concept of coupons (vouchers) was partially engraved into the culture for over a century.
Our determination, forward movements and the never say die attitudes sparked Coupons.com’s interest and they invested in us. This helped with the UK & ultimately European expansion. Bonus!
Acceleration
Fast forward to the end of 2008 and Jared and I were in discussions to work out what is the best way forward for the business. Working across multiple continents Australia, USA and Europe was very taxing on us and we knew there were better alternatives. I proposed I come to Silicon Valley and run the international engineering team from Coupons.com and Jared would go to London to focus on the European market from there. It made perfect business sense. And it was also already on Jared’s mind. Bang! Let’s do this.
So I set off on my journey to Silicon Valley in March 2009 and Jared to London. The International business flourished and expanded fast and in late 2011 I got my exit. Couponstar was 100% acquired by Coupons.com. Ultimately giving Coupons.com an International presence.
Below is what the UK office looks like today, 2012. Nicely staffed team of smart folks.
Top 6 lessons
In August 2012 I decided to move on to a new venture and start my own business in Silicon Valley. I am a co-founder / CTO (hello again) of Medlert Inc. We combine industry expertise with innovative technology to deliver critical information to your family, doctor/s and emergency response units to save your life in an emergency. Powered by leading edge secure and encrypted technology to save lives fast.
Yes it’s a totally different shift from saving people money to saving lives.
But before I end this, here are the top 6 lessons from Couponstar days (in no particular order):
Customer is no#1. It is alot harder to get a new customer then look after your current one. Your current customers took alot of hard work to bring on board – look after them! I’m sure you have heard to “always under promise and over deliver.”. We always over delivered and made sure the customer was happy and if not asked how we could improve.
Business intelligence (data) is super important. Collect collect collect and Analyse analyse analyse so you can understand pain points, what isn’t working and what is. This allows you to create action points to correct what isn’t working so that the customer can see the value in your solution and feel confident about their decision. We used a host of client and server side analytics along with feedback forms throughout our service to collect this data. We also found that trends can be a great indicator of something having gone wrong so being able to correct it early is key. Without data, this would not be possible.
Fire fast. The worst is having an unproductive employee dragging not only you but also your team. The rest of the team is very well away of others who are unproductive and this has the potential to rub off on them. So fire fast! Have a chat with the under performer to find out what is going on and should it repeat give them a formal warning and if it repeats again – fire. Your competitors aren’t going to stop while you sort out your internal mess. Act fast.
Never run a data center in-house. This point might not be relevant in today’s times since the boom of cloud computing but still requires mentioning. If data center management is not in your specialty or it takes too much red tape to set up in-house forget it. Leave it to the pros and let them manage it. Believe me, you will sleep better at night, scaling will be a thing of the past and your bills will be much lower.
Automate everything you can. If you find yourself repeating something too many times. Automate it. From data capture to reports. Spend some time automating it so you can move on and focus on stuff that really matters. Like growing the business, customer base, tailor your marketing to specific audiences, technology stability etc… Automation is not putting people out of a job, marketing automation is running lean and mean and most of all FASTER!
Working inter-geographically is not for everyone. We all heard of outsourcing and teams working in different regions of the world – some with success and some without. Work out whether this is a good direction for your business to be pursuing, what are the pros and cons and the unforseen. We worked on GMT, EST and PST time zones – round the clock. It was a drain on people and their productivity. Unless the teams are loosely coupled it may not be worth doing this. This is just one of the reasons we decided to shut the Sydney office and move overseas. Has it worked? To some extent yet. But then you have other issues to deal with 😉
So there you have it. I got involved in helping grow a business past those critical startup years into an international company. Along the way sold to the company we partnered with and landed myself in a country where I had to start from fresh (building credit history, new home, new friends, new location, new experiences). Change is scary and also rewarding. I hope this post inspires at least 1 person to make a difference not only to their life but also the life of the people they will touch through their company. And remember, when it comes to expanding your business’s reach, consider leveraging the power of SEO, like with Roseville SEO, to boost your online presence and connect with more potential customers. For professional SEO marketing services, trust the experts like Battle SEO who can provide Battle-tested SEO strategies. Lawyers who would like to establish an online presence may seek professional lawyer marketing services. And if you are looking for the best indexing tools, then check out IndexMeNow.
J.J. Abrams’ company Bad Robot has released an awesome iPhone app called Action Movie FX.
J.J. Abrams is one of my favorite Directors known for awesome movies Super8, Armageddon, Mission Impossible – Ghost Protocol, Cloverfield and kick ass TV series like Fringe, Lost & Alias etc.. He is an awesome American film and television producer, screenwriter, director, actor, and composer. J.J. Abrams makes kick ass movies and now this kick ass iPhone app. Without further ado, here’s what you too can create at home with your iPhone and Bad Robot’s Action Movie FX app.
Starring.. yours truly. Me! Ernest Semerda. Maybe I should get into the entertainment industry 🙂
Tornado hits Hacker Dojo!
Ula sent a cavalry to the Dojo.. to teach Ernest a lesson!
Ula in training!
Ula was naughty & needed to be taught a lesson 😉
Chopper touch down
Download Action Movie FX iPhone app and start making your own flix!
Is moving to work in Silicon Valley on your goals list? Are you a software engineer or work with technology and always craved for more? Then get your @$$ to Silicon Valley and start making a difference disrupting an industry and learning a ton load of new things in the process. Oh and Happy New Year!
Make sure you are up to date with the latest tech. Australian corporate world (common work environment) is behind with technology so moving to Silicon Valley you may need to ramp up on the tech side. There is also plenty of free education online you can take advantage of.
Organize an E3 (faster & easier for Aussies) or H1B (the common) Visa. You can come to Silicon Valley on your Visa Waiver Program (VWP) for 90 days (3 months), find a job and then get the Visa sponsored by the company.
Find a place to live in the Bay Area (also known as Silicon Valley) / San Francisco areas. If you come on a Visa Waiver Program just rent out a bedroom via AirBnB anywhere you like. Super easy and convenient until you lock down a more long-term accommodation.
Find a job / startup to work at. Or just contact me and I can help you out – we are hiring! A friend came here on a Visa Waiver Program and scored plenty of interviews and locked in a great job in 2 weeks.
Understand employment & contracts in the bay area. There are plenty of perks for great software engineers including long-term financial gains via stock options. Unlike Australia where getting stock options is next to unheard of for software engineers. Check out glassdoor.com to get a feel for the salary range in Silicon Valley.
Before you leave Australia make sure you have attended to the going away checklist; changed to non-resident for tax purposes, notified your banks, given power of attorney to someone you trust etc…
Need help or still not sure?
Look. If you’re a good engineer with the right attitude and want more out of life you need to be in Silicon Valley. If you fear the change it’s ok. It means your human. Contact me and I will help you with your journey from Australia to Silicon Valley and connect you with startups in the bay area.
Don’t waste another day, start today and make a difference in your career and life.
Your driving one day on the America roads and you see a Police car and later a Sheriff car. What gives you may ask. What is the difference between the 2 I hear you ask.. I was in those shoes and here’s what I found.
Police is city/local enforcement while Sheriff is county enforcement.
A Sheriff department will also look after a town where no Police exists. And there are plenty of small towns in the USA. Think Supernatural, when the lads visit those small towns there is always a Sheriff to be seen but never Police who always look and buy ar-15 pistols from Palmetto Armory. It also appears that a Sheriff is more bad ass since they have a bigger job, have access to SWAT, helicopters, always take 911 calls and will chase a criminal across cities throughout the county since it’s their jurisdiction. Those who are involved in a criminal case should consult with lawyers who can answer legal questions like ‘Can the state prosecute without a witness?‘.
Django is a great Web Framework which complements the Python programming language. Having switched to Python development few months ago I was on the lookout for a MVC like Web Framework that emphasizes Convention over Configuration (CoC), Rapid Development Principle of Don’t Repeat Yourself (DRY), Separation of concerns has Python as the underlying core language. And lo and behold Django proved to be that beast.
What is Django
Django is a MVT (model-view-template) framework build on the Python language. The MVT is identical to MVC (model-view-controller) but where in the common MVC pattern the view here is the template and controller the view. They both perform the same function separating the business logic from the presentation from the data layer (model). However Django does goes one step further and provides a view/template without native core language polluting the HTML.
Django emphasizes Reusability and “Pluggability” of components, Rapid Development, and the Principle of DRY (Don’t Repeat Yourself). Stuff you hear a lot with Ruby on Rails – another great web framework built on a solid language, Ruby.
Ok, enough of my rambling about how great this framework is. If you want to read more about it I recommend the following 2 links:
djangobook.com – a step by step how to build everything from templates to internationalized sites.
The LAMP stack
Ok so everyone is talking about a LAMP stack and everyone wants to run their site on a LAMP stack. Why not when you can tap into great open source tools for free. The word LAMP is a bit over emphasised since most sites today run on a custom configured implementation using best of breed open source software.
“LAMP is an acronym for a solution stack of free, open source software, referring to the first letters of Linux (operating system), Apache HTTP Server, MySQL (database software) and PHP (or sometimes Perl or Python), principal components to build a viable general purpose web server” ~ Wikipedia
Few years ago when open source software was limited, LAMP had typically meant Linux, Apache, MySQL and PHP. Today Linux can take many flavours from CentOS, Red Hat or the popular Debian-derived Linux distribution Ubuntu. The web server Apache can be replaced with a super fast & lighter HTTP and reverse proxy server called nginx. MySQL, post Oracle acquisition is often replaced with PostgreSQL or a NoSQL version called MongoDB. And PHP by cleaner & concise languages like Python or Ruby.
In this post I will cover how to setup a LAMP stack where:
Linux = Ubuntu 11.10. This can also work with 10.xx version of Ubuntu.
Apache = we will leave it as is since it is still a great web server but hook in mod_wsgi – a Python WSGI adapter module for Apache. WSGI is nothing more than an interface specification by which server and application communicate. In this case with Python.
MySQL = will stay with MySQL but you can also install MongoDB.
PHP = will be replaced with Python and drop in the Django MVT framework.
Ok let’s get started.
How to Setup Django on Ubuntu
The following assumes you have already installed Ubuntu and LAMP. If not head over to my prior posts on how to:
Now that’s done. Easy hey. Now let’s configure your 1st Django site.
Assuming your site will be called “purpleblue.com”
Configuring your 1st Django site
5. Recall from the LAMP setup that we were storing all web sites in /var/www/ folder. For example purposes, I will use purpleblue_com as my Django project. Notice the use of django-admin.py to create the Django site and the use of underscores vs decimal point. Only numbers, letters and underscores are allowed in the Django project name.
cd /var/www/
sudo django-admin.py startproject purpleblue_com
5.1 Verify new project by typing this in and hitting enter. ls lists the contents of a directory showing all files inc hidden ones, hence the -all option.
ls –all
If you see purpleblue_com listed, then change directory to it.
cd purpleblue_com
and verify you can see 4 .py files – init, manage, settings & urls. Those are Django new project default install files.
6. Now we create a wsgi file for the site so apache knows how to run this site.
import os
import sys
path = '/var/www/purpleblue_com'
if path not in sys.path:
sys.path.insert(0, '/var/www/purpleblue_com')
os.environ['DJANGO_SETTINGS_MODULE'] = 'purpleblue_com.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
TIP: It’s always a good idea to specify the actual application module.
6. Using webmin (ref our LAMP install) setup new apache site for this project.
6.1 Go to: https://YOUR_DEV_VM_IP:10000/
6.2 Servers > Apache Webserver > Create virtual host
6.3 Configure your new host
Document Root = /var/www/purpleblue_com/
Server Name = purpleblue.com
6.4 Click on “Create Now” button. And go back into the settings by clicking on “Virtual Server” button next to your new host.
6.4 Click on “Edit Directives” and paste the following in:
ServerName purpleblue.com
DocumentRoot /var/www/purpleblue_com
<Directory /var/www/purpleblue_com>
Order allow,deny
Allow from all
</Directory>
WSGIDaemonProcess purpleblue_com processes=2 threads=15 display-name=%{GROUP}
WSGIProcessGroup purpleblue_com
WSGIScriptAlias / /var/www/purpleblue_com/apache/django.wsgi
The last 3 lines above allow this Django site to run in daemon mode.
TIP: When you make any .py changes in your Django site, rather then restarting/refreshing apache you can touch this wsgi and the changes will be picked up.
7. Restart apache to take new site & settings into effect.
sudo /etc/init.d/apache2 restart
8. Add the new domain purpleblue.com to your primary OS host file pointing to your VM where the Django project purpleblue_com resides.
9. Test your new project by going to the Server Name (http://purpleblue.com) you just setup. You should see a similar default Django installation page:
It worked! Congratulations on your first Django-powered page.
If you get an error or cannot see the default Django installation page make sure you check out apache log file. Common approach is to grab the tail end of the apache error log file to see what just happened.
tail /var/log/apache2/error.log
Bonus – Django CMS
If you have the time also check out Django CMS that is built on top of the Django Web Framework.
Recently I was helping a friend from Australia with employment contracts & options from few Silicon Valley startups. Then it struck me that I need to share this knowledge with other folks in the same shoes. I cannot believe that I had not blogged about this earlier.
So you already know that Silicon Valley is the world’s hub for startups. Companies that are starting up with big visions to turn into a multi-million dollar company that is going to revolutionize the industry they are focused on. The fact is that only few ever succeed to become a feature article, a story making headlines, leading to an IPO or an acquisition and making its employees wealthy in the process.
So you came to Silicon Valley and are ready to start cracking working for a startup to help it reach success. Here is a few things you need to know about employment and contracts when joining a startup or running your own startup in the valley.
Salary
Check out glassdoor.com to see company salaries, reviews, and interviews – all posted anonymously by employees in Silicon Valley. Don’t forget that the salary is only a part of the whole package so make sure you understand the next topic on stock options which can make that average salary skewed.
The low down is that if you have been head hunted and the company really wants you then you control the price on your head. Not a website showing you what the average Joe out there earns.
Stock options
If you are joining a startup or about to start one you will be hearing a lot about stock option grants, also known as ISO (Incentive Stock Option). The purpose of stock options is to attract and retain the best available personnel and promote the success of the company’s business. Basically to make the employee feel like they own a part of the company and will feast in the rewards of the company’s success. If you’re looking for some of the most reliable dividend stocks I recommend to visit https://www.stocktrades.ca/best-canadian-dividend-stocks/.
“Employee Stock Options are call options which grants its holder the right, but not the obligation, to buy the company’s shares at a fixed price known as the “Grant” or “strike price” before the expiration date is reached.” ~ optiontradingpedia
The long-term goal is that those stock options will be worth something in few years… more than they are at the time of issue. Like x10 more. And the employee will profit favorably during a private acquisition or an IPO (Initial Public Offering on the public stock market) of the company. At that point the stock “option contracts” are said to be “exercised” and converted to real stock and sold to new holder/owner. Assuming that they don’t expire before then.
Typically in an early startup, employee’s wage is sacrificed for more stock options. This is high risk but more of a rewarding strategy assuming the stock options percentage (%) is favorable. I wrote (%) percentage since this is typically worth more than being given a volume that is hard to justify & work out. The reverse holds true that once the company has grown well into few dozen employees and doing well financially, stock options are reduced and wage levels out with industry standards.
Here’s a previous blog post I did on equity split, common terms & compensation 101.
Let’s do the numbers
Issue value = volume x issue stock value Your profits = (issue value * growth (assume x10)) – issue value
So your $100K of stock options could be worth $1 million and you profit $900K before taxes.
If you worked at this company for 10 years and earned a wage of $50K then its like earning $150K per year in wages. Now is this worth it? What are the opportunity costs? Work them out. Since taxes will be different in both scenarios and you may have been able to early a larger wage with bonus per year which would have compounded exponentially – especially if you had invested that money! So is it worth it? Theoretically you could be better off earning a higher wage then taking a pay cut to get more stock options. Work this out and don’t fall prey to what may happen in the future because failure in a startup in pretty high in the early days.
At-Will Employment
California is an At-Will Employmentstate. This means that you or the company has the right to terminate the employment relationship at any time, with or without cause, and with or without notice.
At first this sounds a bit harsh but it has its merits. Back in Australia you have to give the employer notice and this is always a 2-4 week period. You have to. In California if you are leaving on good terms then it’s customary to give a 2-week notice as a nice gesture. However not required by law. Now, if you are leaving on bad terms like say to due unfair treatment, you can just walk out the door immediately. Why waste another breath in a place you are not happy at? However, if you believe your employer is terminating a contract unprofessionally, it’s wise to consult an employment lawyer to understand your rights and options.
The other angle is that the employer can terminate you instantly. Now if this termination is unfair you can seek legal action. For this reason, many employers have what is called Performance Improvement Plan (PIP) which gives the employee a fair chance to succeed. If this doesn’t work out then a termination by law is customary. It also protects the employer from legal action. Which happens very frequently.
Health Insurance
You need insurance in the USA. Without it you can end up a sitting duck should you get sick and not have enough money to cover the bills. Medicine in the USA is very expensive. A standard visit to the GP could cost you around $200.
Just about every startup that has funding will be providing it’s employee a form of medical cover. Typical choice of 2 or more insurers (options) will be available. These 2 options will be in the form of Health Maintenance Organizations (HMO) or Preferred Provider Organizations (PPO).
In a nutshell PPO is choice with higher co-pay and HMO is less choice with lower co-pay.
Co-pay
A co-pay is what you are expected to cover after every medical expense. Say you visit a GP and your co-pay is $10. So you pay $10 to the medical foundation your GP belongs to and your insurance company covers the rest. Same with medicine, it’s all $10 out of your pocket per prescription. PPO co-pay is typically double of HMO so you end up paying around $20.
In or Out of Network
If you select HMO you will need to find a medical group to join. This is called In-Network and is the medical network (a group specialists affiliate themselves with) you will use to find & see the same GP. Yes you must find a GP which is taking patients and then work through them. I personally like the Palo Alto Medical Foundation. A group of large hospitals & medical facilities in the bay area. Once inside this network you GP will only ever assign you to see a specialist that “belongs” to that network.
On the other hand if you have PPO you can opt to see a GP or specialists In-Network (co-pay will be lower) or go outside to another network also known as Out-Of-Network where your co-pay will be higher but you will have the choice and medical coverage to see a specialist of choice. One you selected. It’s what you pay for, the choice.
If you’re healthy and have selected a good network then HMO is a good choice. If you’re paranoid and have health issues get PPO. The price difference isn’t that much.
But be warned, plan choice only ever happens once per year. Typically in December. The only other time you can alter the plan is when a “major event” has occurred like adding your spouse to the plan or loss of employment.
Dental
This usually comes bundled with your employee health plan and is typically the Delta Dental. It will cover around $1,500 worth of dental procedures on a tiered coverage plan with gap where standard checkups are 100% covered, fillings 80% and major work like root canals 50%. Some dentists can cover this gap so ask before you choose a dentist. Typically you need not make any decisions here, it’s a 1 plan for everyone. Use this great opportunity to get your teeth fixed like removing mercury fillings and replacing them with ceramic versions and get that crown you always needed but couldn’t afford in Australia due to bloated dental fees and crappy coverage back home.
In America this is typically 2 weeks. Half of the comfy 4 weeks we get in Australia. However if you are head hunted you can negotiate this to 4 weeks or more. Some companies are now starting to give 4 weeks since a work and life balance is becoming a very popular topic in productivity and employee morale & motivation.
Having 4 weeks per year of holiday leave will give you ample opportunity to travel to beautiful places like Yellowstone, Yosemite, Los Angeles, New York, Hawaii etc. so you get to enjoy your USA adventure while helping a company succeed.
Other perks
Other ways employers have been luring employees is via additional perks.
Travel allowance. If your travel is covered you can not only go green but also have free travel. Bonus!
A fixed amount to buy your own computer equipment like a nice shiny Apple hardware. Everyone loves a Mac.
Free lunch. Such a common trend today. It has 2 benefits. The employee doesn’t have to buy or spend time making their lunch and the employer gets more productivity from their employees since the employee doesn’t have to travel to a shop to buy lunch thus spending less time having lunch. Also the employee gets to socialize with fellow colleagues during lunch hour building a tighter solid organization.
Some notable companies like AirBnB, Facebook, Google, Dropbox et al. provide plenty of perks and sell their way to your hear. Additionally, if your organization is in the process of pre-employment, you might want to use a cognitive ability test that helps you understand if a candidate can do the job.
GTDfaster iPhone app just went up on iTunes App Store and we are super excited!
Thank you to all our wonderful Beta testers. You guys have made a HUGE difference in making this app kickass. As promised we will be sending you promocodes to download the app free of charge.
GTDfaster iPhone app is the 1st glimpse of things to come. Visit http://gtdfaster.com/ regularly to see updates, new features & services we planed for release in 2012. We are aiming to change the way you get things done.. so that it’s faster and your productivity skyrockets. Get more stuff done fast.
Now go and please check out GTDfaster.. and don’t forget to give us a review! You rock!!
Stuff is constantly bouncing around in our heads. Do you remember it all? Do you often forget it and remember it too late? Missed an occasion or forgot a great business idea? All this can lead to untold stress and anxiety as you try to manage it day to day.
The Getting Things Done (GTD) method created by David Allen rests on the principle that a person needs to move stuff out of the mind by recording them externally. This is the GTD principle. The GTDfaster app does exactly that! Following this GTD principle this GTD app helps you be more productive and less stressed so you can get on with life and get stuff done fast!
Any GTD app you pickup should make it easy for you to store, track and retrieve all information related to the things that need to get done. GTDfaster takes care of all of this for you. Here’s how this GTD app excels above other GTD apps:
1. Collect everything (stuff) that catches your attention. Immediately! No need to enter any additional properties until you are ready to process.
2. Gain control over the collected materials by processing stuff in your Buckets. Processing means deciding what to do with—not actually doing— by processing and organizing the items one by one.
3. Retrieve any notes from your finely assembled and customizable list of Buckets. Of course the standard GTD buckets are still there but with the addition of your customized buckets also known as Projects.
The power of GTD is in your hands. It’s simple and efficient.Get GTDfaster today and enjoy the world of GTD productivity. Now you know what all the GTD fuss is about 🙂
Last weekend myself and Omid Mozayani (another Aussie; recent addition to the valley) spent the weekend of Saturday and Sunday, October 8th and 9th, 2011 at Silicon Valley Code Camp 2011. Held at the Foothill College in Los Altos/CA with an attendance of well over 2,000 (registered 3,417) people and 209 sessions organized in a University style setup over these 2 days. Impossible to attend each one but plenty to cherry pick from. It felt like I was back at Uni(versity) running between lectures. I loved it! Here’s what happened.
What is Code Camp
Code Camp is a new type of free community event by and for the developer community where developers learn from fellow developers. It is 2 full days of talking about code with fellow developers. Sessions range from informal “chalk talks” to presentations. Basically there is lots of education, networking and good food.
Choosing what sessions to attend was key since it was impossible to attend everything when you consider that each session took around 45 min. Here is a wrap of the 3 areas I focused on; ECMAScript (JavaScript) with code encapsulation, Writing Clean Code and Web Analytics. This website will highlight key points.
ECMAScript 5 (JavaScript)
Douglas Crockford ran 2 sessions on ECMAScript 5: The New Parts and ECMAScript: What Next?. Crockford is involved in the development of the JavaScript language and popularizing the data format JSON (JavaScript Object Notation), and for developing JSLint. You may recall me talking about JSLint in a previous blog post on JavaScript Patterns.
Old JS compiler ignores it so it’s safe to use today in all your JavaScript.
A bug in JS used to advantage today for backward compatibility.
“Strict mode” will break old bad programs. If you are writing good programs they will just work.
No more implied global variables within functions.
Yipee! Major fail in JavaScript where undefined variables would chain to the prototype making it very difficult to isolate your code, and to reuse it in new contexts.
If you forget to “var” a variable it now becomes undefined so you can address it vs. letting it slide by. Bad coders beware!
To append something to the global object add “window.function/var”.
“apply” and “call” do not default to the global object.
No “with” statement. Read why it was considered harmful to use.
Shawn Van Ittersum presented ideas for organizing, encapsulating, and simplifying JavaScript code, including: creating JavaScript objects and classes with truly private members, using Douglas Crockford’s module pattern and classical inheritance constructs provided by Dean Edward’s Base.js, Prototype, and MooTools; abstracting JavaScript code from HTML templates, CSS styling, and the DOM; designing with polymorphism (duck typing) for code reuse and simplicity; and using JSLint to identify problems in your code before runtime.
The idea behind the power of Encapsulation is simple:
Encapsulation limits widespread interconnection,
Gives you Freedom to change internal implementations without affecting external code and
is referred to as Loose Coupling – an approach viewed as positive in the field of computer science to remove dependency between systems and allow horizontal scaling.
Theo Jungeblut ran this session and basically the crust of the presentation was that writing clean code makes us more efficient.
This presentation was based on C# and Visual Studio 2010. However the following patterns and practices can be applied to every other programming language too.
Over the lifetime of a product, maintaining the product is actually one – if not the most – expensive area(s) of the overall product costs. Writing clean code can significantly lower these costs. However, writing clean code also makes you more efficient during the initial development time and results in more stable code.
Readability
Follow coding guidelines.
Simplification and Specialization
KISS (Keep it simple, Stupid!) – most systems work best if they are kept simple rather than made complex.
SRP (Single responsibility principle) – every object should have a single responsibility, and that responsibility should be entirely encapsulated by the class.
OCP (Open/closed principle) – software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification aka inheritance & encapsulation.
Decoupling
LSP (Liskov substitution principle) – guarantee semantic interoperability of types in a hierarchy, object types in particular.
DIP (Dependency inversion principle) – high-level modules should not depend on low-level modules. Both should depend on abstractions. And abstractions should not depend upon details. Details should depend upon abstractions.
IHP (Information hiding principle) – prevent certain aspects of a class or software component from being accessible to its clients aka encapsulation.
Contracts – 2 categories: preconditions and postconditions where a precondition states that certain things must be true before a method can execute, and a postcondition states that certain things must be true after a method has executed.
LoD (Law of Demeter or Principle of Least Knowledge) – specific case of loose coupling where units (code) only talk to immediate friends (not strangers) assuming as little as possible about the structure or properties of anything else.
IoC (Inversion of control) – reusable generic code controls the execution of problem-specific code. It carries the strong connotation that the reusable code and the problem-specific code are developed independently, which often results in a single integrated application.
SOA (Service-oriented architecture) – develop code in business functionalities (discrete pieces of code and/or data structures) that can be reused for different purposes.
Avoiding Code Blow
DRY (Don’t repeat yourself) – reduce repetition of information.
YAGNI (You ain’t gonna need it) – do not add functionality until it is necessary.
And don't forget, Scout rule = leave a better place!
Recommended book
SOLID (Single responsibility, Open-closed, Liskov substitution, Interface segregation and Dependency inversion) is a mnemonic acronym introduced by Robert C. Martin
Web Analytics
Massimo Paolini presented on Google Analytics. The most profound thing he said which delivered a strong message is:
"Web analytics is about Revenue NOT traffic."
Bang! Right there. Too many site owners are mislead into trying to decipher visitor totals vs. focusing on the true picture; and that is how to understand and optimize their site visitors across online marketing efforts. The process is then rinse & repeat.
Finally, Web Analytics is NOT a precise science. You are looking for trends. Differences. To help you make decisions moving forward. This is because some people clean their systems ie.delete cookies etc..
Presentations from Silicon Valley Code Camp
For more presentations from these 2 days follow the link below to presenter uploaded presentations to SlideShare. Includes 2011 and previous years. Enjoy!