Ruby Coding Resources

Updated Jan 9th, 2016

These are the resources which I found helpful while learning to program in Ruby. You’ll find each link followed by a short description of what it is and why it is useful. This is a work in progress as I am learning Ruby now.

Ruby Games and Alternative Practice

Ruby Warrior – A sluggish game where you write code to move a warrior through various levels. It helped me to approach programming from the angle of directing objects. Though lots of people talk about object oriented programming, I never understood the meaning of that. This game helped me to ‘get it’. It was while playing this game and going through Learn to Program by Chris Payne that I started to understand the meaning of object oriented programming.

RubyMonk – Looks like an interesting way to build skills. I plan to blast through it after I’m really good at the AppAcademy problems. The idea is that I’ll use them to clear my mind so when I return to the a/A coding interview, I’ll clean them out with a fresh mind. At that point, I’ll apply.

Ruby Koans – This one requires a strong understanding of the command line in order to get started. When I started, I couldn’t figure out how to even start this one, but now I find it really useful. The thing I like is that it’s consistent learning. When you hit a dead end, the program provides you with the answer so you can keep learning. It’s based off running tests and learning from your mistakes. It’s on Github here.

Try Ruby – I just learned about this one. Still exploring it, but it comes highly recommended and it looks fun. (Jan, 9, 2016)

Additional Reading for Deeper Understanding

Learn to Program by Chris Pine – This is an excellent way to begin your programming. If I were to start all over again learning Ruby, this would be the first thing I would read.

Why’s (Poignant) Guide to Ruby by _why (PDF here) – This is a wacky way to learn if you’re into eccentric stuff. Though the wacky analogies are helpful mnemonics, this piece doesn’t come close to the simplicity of Learn to Program by Chris Pine.

Programming Ruby The Pragmatic Programmers Guide – I haven’t yet dug into this one yet but it looks a bit more dense than the previous two. I’m guessing that it provides even greater depth that the pervious two as well. Once I read it, I’ll update this. (Jan 9, 2016)

 

Deeper Understanding:

The AppAcademy.io introduction was quite useful.

Elegant breakdown of what coding is – http://eloquentjavascript.net/

Dense but Useful Description of Binary Numbers – A Tutorial on Binary Numbers

Codecademy’s Glossary is a great resource – https://www.codecademy.com/articles/glossary-ruby

  • Note: When looking for information, use ctrl + f and seek the keyword you want

 

I used this to learn the connection between the programs we write in Ruby and how to make them work in browser:

Getting Started with Ruby

AppAcademy Suggested Reading:

  1. Beginning Ruby
  2. Ruby in 100 Minutes (my notes)
  3. Chris Pine’s Learn to Program
  4. Ruby Monk’s Ruby Primer
  5. Michael Hartl’s Rails Tutorial
  6. Zed Shaw’s The Command Line Crash Course

Outside the Box Dropshipping Niche Creation Ideas

I would love to see a strategy on finding less commonly thought of niches for DropShipping businesses… Here’s a list of 10 ideas that might be ‘thinking outside the box’:

Potential Tools For Developing Niche Ideas:

  1. Google Autofill – For example, I type in ‘Motorcy’ and google auto fills ‘motorcycle helmets’ and ‘motorcycles for sale’ This might be worth trying for something you’re interested in.
  2. Trending eBay stuff – http://www.ebay.com/cln– eBay is going to be a treasure trove, but how to boil it down? Perhaps digging through what’s trending right now…
  3. CraigsList stuff for Sale – Perhaps we could sort Craigslist based upon price. I’m thinking Los Angeles, Chicago, Houston or New York craigslist would be good and see if something is coming up and working. If people could sell second-hand goods for a reasonable price, maybe you could find the deal that offers new stuff. Then you could advertise on CraigsList too.
  4. Watch Reality TV – I’m guessing the upper-middle-class folks probably watch reality TV so if we watch an episode of Ted Nugent’s Gun Country, maybe we see some of the stuff that these people like to buy and use (I really don’t like reality TV so this is an abhorrent idea to me… but maybe it’ll work for someone reading this.)
  5. Alibaba – I don’t know this site well, but there is lots of opportunity to look for products… but also to read success stories. Perhaps if you find a story of a Chinese guy who crushed it with a product in China or some other country, you could check that product competition in the USA. If the USA guys aren’t doing it well, you might have identified a good niche!  < Ali Baba success stories = http://news.alibaba….uccessStory.htm >
  6. Reddit – I just did a quick search on Reddit for “can’t find” – Here are 2 examples:      https://www.reddit.com/r/EtsyAddicts/     |      https://www.reddit.com/r/wherecanibuythis/
  7. Google Keyword Research Tool – I’m having a hard time getting Google to feed me millions of great ideas… but there must be way to get google to tell us a list of what people are searching for.
  8. Country specific classified ads – For example GumTree.com.au is Australia’s version of CraigsList. Clasificadosonline.com is the one in Puerto Rico. You can sort by price across lots of other items. What are some other countries with country-specific classifieds?
  9. What events do you love? – I like going to BurningMan so I started thinking about the cool stuff people have there. LED Poi is an idea worth thinking about. Do you go to any festivals? What sort of stuff is there that people might work?
  10. Ask your friends who like stuff like this – I just asked my friend what she thought and she told me an idea that I’m almost certainly going to put on the short list.

Hope this helps team. Please feel free to come up with your own list of 10 ideas for niche creation and share it down below. :D Pay it forward. Huzzah

Ruby Notes – Ch3 AppAcademy.io Coding Test

The following are my notes from the appacademy.io chapter 3 introduction to programming.

Adding and/or Removing from Arrays

  • pushadds elements to the end of an array
  • unshiftadds elements to the beginning of an array
  • shiftremoves an element from the beginning of an array
  • popremoves an element from the end of an array

while cool_things.length < 3
puts("Tell me something cool.")
one_cool_thing = gets.chomp cool_things.unshift(one_cool_thing)
end
puts("Here are your cool things in order:")
idx = cool_things.length - 1
while idx >= 0
puts(cool_things[idx])
idx = idx - 1
end

The above code asks us to do things in order:

  1. Limit array – while…
  2. Ask for inputputs…
  3. Record input to arraygets..
  4. Instructs to add input to top of arrayputs(cool_things[idx])
  5. Ends the array – end

This prints the three things the user enters in order. How to have users generate an array without knowing how to type the array code ( variable = [“1”, “2”, “3”] ) *This would be a useful tool if you wanted to create arrays quickly without having to type the quotations so often. 

Here’s a screen shot of defining the difference between push and unshift. The key in seeing the difference is to look where the code reads, “Here are your cool things in order:”. It does this twice and they are different because push adds the variable to the beginning of the array and unshift adds it to the end.

push | unshift
push | unshift

 

Side Note: puts(“ringo”.length) #puts integer 5 | Strings can become arrays

Side Note #2: If you type “clear” into the terminal and press enter, it clears the screen. Wish I had known about that a few hours ago….
ran_num = [1, 2, 3, 4]
puts(ran_num[1])

#Puts the number 2

Update: I’m having a hard time committing this to memory so I’m doing the same memory commitment process I used in the notes for section 2. Essentially, I’m writing programs that ask me 3 things I love and then spit the responses back to me in order.

COMMITTING CONCEPTS TO MEMORY EXERCISE: The idea here is to write each program as well as I can without any outside help from blogs, the internet or the course work.

Once the program is written to the best of my ability, I’ll run it to see if I got it right. If I didn’t get it right, I’ll use the material to fix up the code. Then I’ll try again. I’ll keep trying to write the code until I get a program right all on my own. Then I’ll do it two more times without error.

The hope is that this commits the process to memory… but most valuably, it forces me to nail down specific reasons and connections between each line of code.

  • Program 1 – Favorite Song

adding to arrays and printing the array

  • Program 2 – Favorite Material

Adding to arrays with ruby

  • Program 3 – Favorite Metal

Learning arrays in Ruby

I’m confident I understand this concept of writing code that records a purposeful number of inputs and then can read them out either in order or backward order.

Removing from Arrays:

This is straight forward. I feel the best way to describe this is to show two examples:
arr = [2, 3, 5, 7]
item = arr.pop
puts(arr)

prints: 2 3 5
arr = [2, 3, 5, 7]
item = arr.shift
puts(arr)

Prints: 3 5 7

 

Setting Positions in an Array

This section is fairly straightforward. Positioning in an array seems like it will play an important part in the ability to code.
arr = [1, 2, 3]
arr[1] = "Two"
puts(arr == [1, "Two", 3]

This code shows that you can assign a string to a single part of the array and it will print true when run.

Nil

The manual makes it known that if you ask Ruby to print a value that isn’t stored in an array, Ruby will just print nothing (we call this “nil.”)

Strings are Like Arrays

Just like with arrays, you can print individual elements of a string:
hello_champ = "Champion"
puts(hellow_champ[3])

#prints m

Note: I understand this on a core level so it’s easy to commit to memory. It’s easy for me to read this next code, but it isn’t something I feel like I could write from memory. Check it out:
string = "12345"
idx = 0
while idx < string.length
puts(string[idx])
idx = idx + 1
end

For the above code, I practiced the same memory commitment exercise. I’ll reiterate because it’s been so valuable. I would make up a variable and a string (example = wife = “Veronica”), then I would write the code so that the computer would spell out the individual variables one by one.


wife = "Veronica"
idx = 0
while idx < wife.length
puts(wife[idx])
idx = idx + 1
end

This prints out each letter of Veronica’s name on a separate line. To commit this to memory, I would write a program like this from memory and run it. It took me 2 tries before I could do it from memory. After I got it right without any errors, I did it again and again once more. Once I could do it three times without a mistake, I feel like I can move on as this has been committed to memory.

puts("123" == ["1", "2", "3"])

Just because strings can act similar to arrays, they aren’t exactly the same. The above code works in what it prints out, but if you set them equal, Ruby prints false.

Joining Arrays and Splitting Strings

puts("hello my friend".split)
This prints:
hello
my
friend

This is a quick way to break strings into arrays.

friends = ["Friends ", "are ", "good ", "to ", "have."]
friends_string = friends.join
div_friends = friends_string.split
puts(friends == div_friends)

This prints false, even though it returns an array that was converted to a string and then back to an array. This is the above lesson in which we learn that they are similar, but not the same.

friends = ["Friends ", "are ", "good ", "to ", "have."]
friends_string = friends.join
div_friends = friends_string.split
puts(div_friends.join(" "))
puts(friends.join)
puts(friends == div_friends)

For me, the best way to learn the nuances of the code is to play around with different ideas. split and join make more sense the more I play with them. In the above code, I created an array, joined the array as a string, saved that as a variable, then split the string variable back into and array.

I then printed the initial array and the final array which was converted to a string and back to an array. Even though they print the same, if you ask Ruby if they are equal, it says false. This is an interesting nuance of the language which I would love to hear an explanation for. That is for another time…

join and split commands in ruby

 

Writing your Own Methods

We want to write our own methods to repeat code multiple times.
def cube_numbers(how_many)
var1 = []
idx = 0
while idx < how_many
var1.push(idx * idx * idx)
idx = idx + 1
end
return var1
end
puts ("How many cubed numbers do you want?")
wanted_cubes = gets.to_i
var1 = cube_numbers(wanted_cubes)
idx = 0
while idx < var1.length
puts(var1[idx])
idx = idx + 1
end

While writing the above method, I decided to make it cubed instead of squared like in the example with AppAcademy.io. I also changed all the variables so that while I was typing it out, I had to be very conscious of the connecting variables.

This was important in understanding the code, but I’m not sure that I got it a hundred percent. I can’t write this method system from memory yet.

I’m tempted to move forward without going through the exercise of rewriting it again and again, but the truth is that I need to do this. Methods will be a critical aspect of programming in the future and I need to know them from memory.

Update: This has taken me a while to remember, but I’m even more confident that this is critical to being good at coding. I’ve rewritten the code 4-5 times but still make mistakes. I’ll continue to do so until I can write the blow three programs from memory/understanding.

December 13th, 2015: Still going slow. I’m working to understand the language well enough to complete the practice tests. The day before yesterday, I was able to take the practice tests apart and learn the pieces that went into them for the first time. Before then, the practice test was a foreign language to me. This is slow, lethargic progress, but it is progress none the less. Today I’ll wrap up the notes on this Chapter 3 and get back into the practice test.

Update 2: Dec 14, 2015 – This has taken a long time to remember. There are a few things going on in this code.

  1. Define a process to work numbers and return them
  2. Requesting how the numbers to be returned
  3. Using the request to create an array of requested numbers
  4. Redefining the process to print the array

Update 3: Dec 15, 2015 – Though this has taken a few days to get good at, I’ve not been working on just this. I’ve been working through methods on Codecademy and reading and taking notes on Ruby in 100  Minutes. All this cross reference is helping a lot. When I get stuck on one thing (like remembering this) I go around and re-learn concepts put forth in different ways. This helps because hearing the same thing in different ways is excellent for cementing knowledge. I just sat down and for the first time, can write the squares code of this example with no errors. So I’m ready to write out 3 versions of it (singles, trips and cubes) and then I’ll feel confident with creating methods and puts the number of outputs.

Program 1 – Repeating the Requested Single Numbers

Screen Shot 2015-12-15 at 4.09.17 PM

Program 2 – Tripling the Requested Numbers
Screen Shot 2015-12-15 at 4.20.09 PM
Program 3 – Cubing the Requested Numbers
Num of quads desired?
Note: I slowed this way down to get this method definition and relaying of set numbers syntax committed to memory. Over the course of doing this, I’ve been checking in with the AppAcademy practice tests and I learned that the whole practice test is essentially creating def that make the readout codes work. Therefore, it’s clear that having a powerful grasp of the above concept was critical for passing the tests in the future. Even though this took about 3 days to commit to memory, I feel like it’s been great for my core understanding of how it all works.

 

Breaking Out of Loops

Ok. Loops will be the same process as above. The good news is that it’s much quicker to learn because the loops code is about 9 lines whereas the code for writing methods was about 19.

Program 1 – What’s the center of the Solar System?

Center of the Solar System While loops

Program 2 – First name of the President of the USA?

Screen Shot 2015-12-15 at 5.23.47 PM

Program 3 – the most populous city in the USA

Most populous city in america_While loop practice

sidenote: though tedious, this repetition is critical. I’m ironing out a lot of kinks with each repetition. Also, I’m learning to correct things. Just a second ago I wrote “get.chomp”, when I ran this through terminal, terminal showed me that it was wrong and I self-corrected. Good times.

 

Returning Early

Again, a pair of concepts that were much easier to repeat and commit to memory.
def smallest_square(lower_bound)
i = 0
while true
square = i * i
if square > lower_bound
return square
end
i = i + 1
end
end
puts(smallest_square(60))

The above code was interesting because it displayed a code that was interesting but not very useful. It asked for the lower bound of a number that if squared would equal something. So you input the number (60 in the above example) and it feeds you back the number that, once squared, would be above the lower bound. This is useless unless you could find the lower bound number to be squared right? Right.

So I added a request to print n at each attempt and the code outputted:
1
2
3
4
5
6
7
8
64

That tells em that 8 is the lower square that will devise into 64 which is the lower bound. This was a cool learning bit about where we can type in code to give us different information that can be useful.

 

That’s it for my Notes On AppAcademy intro to Coding.

If you found these useful, check out my notes for chapter 1 or chapter 2. The source material for this chapter can be found on the appacademy.io site here.

 

How I Setup my Coding Workspace and Note Taking on WordPress:

My code workspace for this note-taking process is set up with WordPress as my note screen, this site as my learning material, the Terminal for executing programs, and Atom for writing and saving code. I keep a coding folder on the Desktop and call it aawork so it’s easy to find and open. Here’s what my screen looks like:

Desktop Layout for Learning Ruby Code and Notetaking on WordPress

 

That’s It

Now it’s time to do the next step. This introduction was quite valuable and I feel I learned a lot from it. Truth is, I feel like I just opened up a door. I’m realizing that there is a whole complex, and interesting world behind it.

My objective is simple right now, to get into AppAcademy later in the year (2016). I don’t need to learn to program now, I just need to learn how to do well on the AppAcademy coding challenge.

If you want more notes like this, please feel free to check my notes for chapter 1 or chapter 2. I’ll probably be making < TK – Enter link to notes here > notes on the Introduction to Programming Summary (source material) too.

It’s hard to know how my notes will go as I work through the practice problems because they are on a different platform (c9.io) which may have a system for organizing though native to the platform. I’ll know more as I move through the notes.

Until then, I’ll use this blog to keep track of my progress. I’ll be taking my own notes on ruby resources and this will be a part of the breadcrumb trail from chapter 1, to the most recent of my Ruby studies and notes.

For the next breadcrumb in this series, please feel free to move onto my notes on Ruby in 100 Minutes (here is the source material). This is a page of notes I’m taking on a piece recommended by AppAcademy.

Ruby Notes – Ch2 AppAcademy.io Coding Test

The following are my notes from the appacademy.io chapter 2 introduction to programming.

Methods:

  • +
  • *
  • /
  • chomp
  • puts
  • gets
  • to_i
  • to_s

Methods are the verbs of Ruby.

If -> else, and elsif

if num < 10
puts ("That's not a big number.")
end

If a method is true, Ruby will run the method. If a method is false, Ruby will skip it and move to the next method.

Logical Connectives

If you want to define something in which X is true and Y is true use &&

De Morgan’s LawWiki

The negation of a conjunction is the disjunction of the negations.

The negation of the disjunction is the conjunction of the negations.

This is a strange concept because it’s simple when you play out individual cases, but it get strange when you think of it as a whole. If something is not A, it could still be B, but if it’s B it doesn’t mean it’s not A. See, this is a strange way of speaking. I think the ven diagram on the wikipedia page is the best way to describe it.

Anyways, this is a logical tool to be used in more complex programs.

number = gets.to_i
if (number > 10) && (number < 30 )
puts ("Your number is greater than 30 and less than 10.")
else
puts("Your number is between 30 and 10.")
end

Negation is the last logical connector

Use the ! mark to negate.

Infinite Loops

while loops can become infinite loops

How to write an infinite loop

while 1 == 1
puts ("We're looping.")
end

Screen Shot 2015-12-06 at 2.26.59 PM

Aside: after writing this program and executing it, I had to learn quickly how to stop the terminal from creating an infinite loop.

To end an infinite loop using the Terminal press: ctrl + c

Arrays

variable = ["thing1", "thing2", "thing3"]
puts (variable[1])

This code would print thing2

Positioning in the array above:

  • 0 = thing1
  • 1 = thing2
  • 2 = thing3

Important note = arrays start from position 0

Arrays can also be written like this:

random_array = [
"one",
"two",
"thee",
"four"
]
puts(random_array.lenght)
idx = 0
while idx < random_array.length
puts(random_array[idx])
idx = idx + 1
end
puts("Loop Complete")

The above code runs like this:

Screen Shot 2015-12-06 at 2.51.01 PM

Side Note: idx becomes a way of counting. With the above example it will go up linearly until it reaches the number which is greater than the number of arrays in the array. For the example above, it is 4.

Note on idx: using idx is completely arbitrary. Providing you use a constant variable as your means of counting, you can use any collection of symbols. I ran an array using love instead of idx and it worked exactly the same (except larger file size I’m sure because love is 4 characters while idx is three.)

Note on Learning to Code: When learning to code, writing your notes longhand is a waste of time. It’s better to put it into a blog like this. I already feel like I’m gaining a great understanding of the subject matter.

Exercise That is Really Helpful

I was having a really hard time committing the idx value to memory. The key was to do it over and over again. Here’s an exercise to get you practicing coding at a fast level. It’s also a gratitude practice so your killing two birds with one stone.

For the following exercise, do it based off memory. If you can’t do it based off memory and you need to go back to your notes, don’t count that exercise as a success. You want to keep this exercise up until you have 3 consecutive successes with no notes:

Write 3 programs which use idx to systematically list out your arrays. At the end of each array, write, “I think I’m getting this.”

  • Program 1 – Places you Love
  • Program 2 – Foods you Love
  • Program 3 – People you Love

Here’s how my programs went:

Program 1:

Screen Shot 2015-12-06 at 3.17.55 PM

Program 2:

Gratitude Practice and Coding

Program 3:

Screen Shot 2015-12-06 at 4.39.20 PM

After doing this exercise, I know I can write simple Ruby array programs.

Geeking Out on Percentage Change and File Size:

I’m now realizing why programmers so often use really short file names. It’s because we want to type the names of files fast accurately.

In Program 1, I wrote the name of the program to be gp.rb

I could have titled it great_places_that_i_love.rb

…but then I’d be typing 5,400% more per request. <- Note: This is wrong. I’m not doing my statistical calculation right.

short_var = "gp.rb".length
long_var = "great_places_that_i_love.rb".length
puts(short_var)
puts(long_var)
percentage_length = short_var / long_var
puts(long_var.fdiv(short_var))

The above program prints 5.4 which is the percentage of the absolute change in the file name length. <- Note: when I wrote that, I was misunderstanding the rules of statistics.

In order to get the percentage change from a short file name to a long file name as described above, I need to (source) understand the absolute change divided by the number we started out with.

absolute change / starting number = percentage change

I geeked out and wrote a program that will take your short file name and your long file name and return the percentage change in length. Here it is:
puts("Type your short file name now, please.")
short_var = gets.length - 1
puts(short_var)
puts("Type your long file name now, please.")
long_var = gets.length - 1
puts(long_var)
absolute_change = long_var - short_var
puts(absolute_change)
ac_div_startnum = absolute_change.fdiv(short_var)
puts("Percetage change: ")
puts(ac_div_startnum * 100)

Though this was a fairly silly exercise, I really feel like I understand Ruby more than ever.

That’s It

That concludes my notes for chapter 2. If you’d like to continue on with my notes, please select from more options below.

Chapter 1 notes can be found here.

Chapter 3 notes can be found here.

Ruby Notes – Ch1 AppAcademy.io Coding Test

The following are my notes from the appacademy.io chapter 1 introduction to programming.

There are three types of data in Ruby:

  1. Numbers
  2. Booleans – True or false
  3. Strings – Words or phrases

Ruby is case sensitive

puts can be called methods in Ruby

Integers = Whole #s (ex 42)

Floats = Fractional #s (e.g. 3.14)

Never write commas when writing integers. They will change everything.

Notes on Division

Ruby does not divide into integers. It returns whole #s

puts (9.0/2) | #returns 4.5

puts (9.fdive(2)) | #returns 4.5

Modulo n%m -> returns the remainder from division

Defining Variables

ian_loves = “guitar, wifey, surfing”

Variables must:

  • consist of letters or/and #s
  • first character must be lowerCase
  • no spaces (separate words w/ _ )

Gets Method

The gets method allows you to ask users to define variables
puts("Type in your name, please.")
name=gets()
puts(name)

This would return whatever the user entered

Gets for Strings and Integers

Converting Strings and Integers

  • to_i = to integer
  • to_s = to string

The Chomp Method

chomp makes it so a line break doesn’t happen behind each gets command. It seems like it’s used most of the time. For example:

puts("Type your name, please.")
name = gets
name = name.chomp
puts ("Hello" + name)

use gets.chomp rather than reassigning the variables.

 

Important Note: Feeling good about all of this. I can write program files using Atom and execute the files using terminal.

I went through the Codecademy command line class which was a critical step in understanding how to navigate and execute programs using just typing. This makes it so I can at least pretend to be like the guy in Mr. Robot.

It was today, November 20th, 2015 (these notes were copied her later) that I actually wrote and executed my first computer program. It was a game that said hello.
puts("Hello. What is your name, please?")
name = gets
name = name.chomp
puts("Hi " + name + ", it's nice to meet you.")

Screen Shot 2015-12-06 at 2.11.28 PM

 

That’s it

If you’d like to continue to follow along with these notes, I continue the study in my notes in chapter 2.

TransferWise Review – International Money Transfer Case Study from USD to AUD

TransferWise Review - From USD to AUD

Get your First Transfer Free

The banks are out to get us. I’m seeking ways to fight back. International money transfers are one of the banks little secrets. TransferWise says they can save us. So I tried them. Here is a TransferWise review.

TransferWise Review
Click This Image for a Free Transfer

Planet Money did a great piece on the invisible financial pipes that move money. This was part of their “t-shirt project.” In it, they talk about the Automated Clearing House (ACH) and what it took to move money from their Kickstarter (e.g. Amazon) to their Chase Bank account. Note: Listen to that podcast. It’s excellent.

In Australia, the banks just offer free money transfers. That’s right. It’s free in Australia with bank apps on your phone. Apps like Cash and Venmo are making it easier in America. Transferwise is the only place doing it internationally right now that I know of.

We’re moving money to Australia this month. We’re going to be testing TransferWise.com to see if we can save ourselves some fees.

TLDR – It’s great. Click here to transfer your first bit of $ for free.

A Transferwise Review

A long time ago in a….

TransferWise came across my desk a long time ago in a paid advertisement on Facebook. I clicked through, but didn’t need to move money at the time. After bookmarking the page, I was excited for the opportunity when I would need to move a good amount of money internationally.

November 20th, 2015

Today was that day I found a need to move money from the USA to Australia.

The Transferwise steps were easy to follow. They have a pretty good UI on the surface, but it wasn’t perfect…

I noticed some strange glitches in their software. At one point, it seemed as if I saw someone else’s screen before it flashed back to my screen. Very strange and disconcerting when you’re moving large amounts of money. This happened a few times. It’s a glitchy user experience.

My International Money Transfer Situation

By the way, I’m moving about $4,300 USD from a CapitalOne account to a Commonwealth Bank account. To clarify, thats a United States savings account to an Australian checking account.

I was able to generate a code on the CapitalOne online banking login and use that code to authorize the transfer with the TransferWise.

To my dismay, I learned that the transfer will take 1-5 business days from CapitalOne to TransferWise. Also, my Australian bank will also require 2-3 business days for the money to clear in that account. So 3-8 days in total to move some digits across a line.

Ahhh the wonders of the modern financial system.

Anyways, I clicked transfer and the deal is in action.

As I go back to the site to check the status of the transfer, they have this cryptic page that doesn’t tell me information about fees. I’m unsure of the fee schedule. I can ascertain the conversion rate because they tell me the amount I’m transferring in USD and what we will receive in AUD:

  • $4,300 USD/$5,923 AUD = Which equals a rate of .725 AUD/USD
  • .72 AUD/USD is the mid-market rate as reported by Google

Testing Transferwise vs Midmarket Rate

So it looks great.

I’m in it now. I’ll wait 1-5 business days for CapitalOne to release the money to TransferWise. Then I’ll wait for however long it takes for the money to move through TransferWise to CommonWealth bank. Finally, I’ll wait 2-3 business days for CommonWealth to clear the funds on their end.

November 24th, 2015

Four days have passed.

The transfer has come through. It all cleared. Here is a screen shot of what I’m seeing via the dashboard of the Transferwise website:

Transferwise Screenshot for Case Study
I’ve blacked out my wife’s name. Nothing more.

Transferwise (as per the screenshot above) tells me that the transfer was completed for $5,923.79 AUD.

Commonwealth Bank Transaction Details

 

The amount shown in Commonwealth bank is $5,923.79 AUD.

The deal went through. They transferred what they said they would! Huzzah!

Deconstructing the International Money Transfer via TransferWise

This is the actual rate we experienced transferring from CapitalOne in the United States to the Commonwealth Bank in Australia:

$4,300 USD / $5,923.79 AUD = $.72588 USD/AUD

The mid-market exchange rate from Yahoo Finance saw a low of $0.7187 AUD/USD and a high of $0.7216 AUD/USD the day of the transfer. Here is a screenshot:

Transferwise review Mid-market rate vs actual transfer rate

So depending on the time of transfer, that $4,300 USD would have exchanged at a low of $5,983.03 AUD to a high of $5,958.98 AUD.

Here is a table describing the actual mid-market rate vs. realized exchange rate from the transfer:

The Day’s Price Point Mid-market rate at $4.3k USD Realized from Transfer Amount Unaccounted for in Transfer
When Market was Low  $5,983.03 AUD $6,023.25 AUD  $40.22 AUD
When Market was High  $5,958.98 AUD $6,023.25 AUD  $63.27 AUD

So the real cost of the money transfer was between $40-64 AUD (or $28-46 USD).

Free. Nope. Better than the banks? Good question.

November 24th, 2015 (Later that Night)

I received a receipt clearing some stuff up. This was my mistake. I get way too much Email and this was buried in the fray.

Here is a screenshot of it:

TransferWise Review - Final Receipt
I’ve blacked out my wife’s Email. Nothing more.

Conclusion

My guess is that the banks would offer a less attractive rate and also tag on a boatload of fees.

Transferwise did work. The ordering process was easier than going into the bank and talking to a teller. I will use it again next time I transfer money internationally.

Finally, they gave me a coupon code. If you want to use it, you could wire your first 3,000 GBP (roughly $4,500 USD) for free. If I had this code when I made the transfer, I would have actually realized the mid-market rate.

Here is the coupon code. Sure, this is an affiliate deal. You get your first transfer free if you use this link. Also, I get some money… I think. Or maybe just some free transfers. Either way, if you use this link, we both win. I did not write this article just to send you to TransferWise. I would have written ill of them if they sucked. Then I wouldn’t have put any links to send people to their service.

I wrote this article because I think international business needs to be cheaper, faster and more modern. Have a great time traveling dingo lover.

Updated November 20th, 2015 – Gold Coast, Australia

How to Write an Effective Couchsurfing Request: Inspired by Failure

We love to put couch surfers up in our place. It’s great to have traveler’s come through because they have interesting perspectives and it’s great to make the connections. The truth is that I deny about 90% of the people who reach out to me. Why do I shut most people down? It’s because of messages like this:

Hey, i am travelling a backpacker tour from Sydney to Cairns. And i want to stay two nights in Surfers Paradise. Is it possible that i can sleep at your’s?Pleas call me, because i have not allways Internet, only when there is a free wifi. (his phone number)best regards (couch surfer)

Hey everybody, let’s count the mistakes:

  • 1st = Hey,

So this guy didn’t even bother to write my name in here, that tells me he could be copying and pasting this to everyone on the Gold Coast. Where is the improvement opportunity? Mention the person you are writing to.

  • 2nd = I am traveling a backpacker tour from Sydney to Cairns…

You know what? Everyone seeking a couch to crash on in the Gold Coast is doing that. Want to know another thing? I don’t care. Where is the improvement opportunity? Don’t say mundane, un-inspiring things that matter nothing to the person your hoping to mooch off of.

  • 3rd = I want to stay two nights in Surfers Paradise…

Great, I want a business that cashflows $10,000 a month, a ranch on the beach and a quiver of surfboards. I don’t care what you want. Where is the improvement opportunity? Start with the value you bring to the interaction. Example: “You guys would love my cooking because I make a fantastic German schnitzel ” You see what I did here? It’s not about what you want couch surfer, it’s about telling the dude with the couch that your presence isn’t going to be a friggin headache!

  • 4th = Is it possible that I can sleep at yours?

Check the profile of the couches you are surfing. We offer people a really nice queen bed dummy, not a couch. Where’s the improvement opportunity? “I read that you guys have a bed to sleep on and while I would totally appreciate that, I’m super easy and I’d be happy to sleep out back on the grass.” You see what I did here? With this statement, you make a point that you read about the couch while reaffirming that you aren’t going to be a soul sucking drain on life while you couch surf.

  • 5th = Pleas call me, because i have not allways Internet, only when there is a free wifi.

Sure dude, I’ll call you. I love calling stranger vagabonds with absolutely nothing to offer. Get lost. Where’s the opportunity for improvement? “Though my access to internet is going to be spotty over the next few days, I’d be honored to connect in anyway possible. My phone number is 0404533938 but if you just reply to this message with your number, I’ll be happy to text you when I get into town.” You see what happened here dummy? You explain the situation and offer a solution that doesn’t require the couch baron to do extra work to get your lazy tail to his place. Oh and texting is the way to go. “Please call me”? I hope you like the $30 crappy hostel in Surfers.

  • 6th = best regards,

Tips on CouchSurfingReally? best regards? You couldn’t even be bothered to put a capital letter at the front? Where’s the room for improvement? Look dummy, proper CouchSurfers sign off with better salutations. Next time try: -With Awesomeness -Wheeeeeeee -Graciously -Excitedly – YOU ROCK!

So yeah, your CouchSurfing request was a 100% failure. With luck, I hope someone else reads this and is inspired to have an excellent request and experience with CouchSurfing.
Now here’s the interaction part. Write a compelling CouchSurfer request in the commment section below. Winner gets a pizza.

I Got Robbed: Pick Pockets are Good in the Philippines

 I Got Robbed!

The other day I got my iPhone 4 stolen right out of my pocket without me even knowing. Don’t worry Mom, no violence occured… but I got duped. This is the first time I’ve ever been duped and I hate it.

Here is the Story

I was riding in a Jeepney from my home to my favorite coffee shop at the Baniland Town Center in Cebu City, Philippines. The Jeepneys are interesting old Jeeps left over from the American presence in  World War II (I film some of them in this video.) Since the 1940’s they have been outfitted with  two rows of benches running parallel with the street, pointing inwards towards each other. These are the home made passenger vehicles of the Philippines. I was listening to an internet business podcast on my iPhone with my apple earbuds, while sitting on the passengers side bench.

To signal the driver to pull over in a Jeepney, the passenger uses coins to tap the handrail which is welded to the ceiling of the vehicle. With a loud “Tack-Tack-Tack” sound, I announced to the driver that I wanted to get off. There was a commotion and I assumed the cause to be me requesting a pull over in the wrong spot.

Three little guys sitting in front of me, to my left and right began talking quickly in a strange dialect. “aba aba aba Country Mall yada  blah blah.”

Mad Streets in the PhilippinesI couldn’t understand them of course, and I still had no real understanding of how this mad Jeepney system functions, but I knew the Country Mall was just a 3 minute walk down the road from where I wanted to go so I just chilled and waited for the Country Mall stop.

As the Jeep was pulling into the Country Mall Jeepney bay, one guy sitting directly across from me on the drivers-side bench reached down between my legs in, what I thought was, an effort to find a coin I had dropped from my pocket. He seemed to have a hard time picking it up and then showed me the coin and offered it to me while trying to say something. I couldn’t hear him so I took my ear buds out to listen to what he had to say. I couldn’t understand him and refused the 1 peso coin he had seemed to find between my legs.

All of the sudden, the guy next to me was pointing out that I had a piece of gum stuck to my shoulder. Again, I assumed that these were nice guys alerting me that I had leaned into a piece of chewing gum that had become stuck to my shoulder.

By this time the Jeepney had pulled up to the curb and I got out of the Jeep to pull the gum off my shoulder and toss it in the bushes.

Then I checked my pockets as I normally do to make sure I had everything in order. My heart sank. Surprise surprise, no iPhone.

Challenging Philippines SidewalkI immediately assumed it had fallen out of my pocket on the jeep so I ran over and leaped into the back of the jeep which had started pulling away. I searched around for the iPhone in the place where I was sitting. It wasn’t there and the other passengers were scared of me as I started yelling like a neanderthal. They pointed across the traffic ridden road trying to tell me that someone had taken my iPhone in that direction. I got off the jeep looking around for something to chase. I was ready to be like a lion chasing down some gazelle-like thief through the jungles of urban Cebu.

The witnesses were pointing down a dark ally surrounded by shanty style dwellings and rum vendors. What was I going to do? I don’t remember what the guys looked like. I couldn’t run after them too effectively anyways; I had a decent sized backpack on anyways. It would be like chasing a needle in a hay stack…

…no, it would be like chasing a needle in a needle stack. I was screwed.

The End

Thanks for reading. Leave some comments below and berate me for my foolishness!

🙂 -ian