So we have a completed 404 Finder, but in my view it is only a skeleton project. What if the user accidentally enters a bunch of white space? What if the user doesn't input or incorrectly inputs the "http://" part? I'm going to answer each of these questions and more in this post.
User Story: Excessive Whitespace
Let's say our user enters too much whitespace by accident (or to test our script). What do we do? Honestly, I'm not sure how to handle whitespace in the middle of a URL. For instance, the user inputs "http://www.g o o g l e.com." I'm not sure how to handle that other than send it back to the user and tell them that it was malformed. However if the user inputs " http://www.google.com " I know how to handle that and its quite easy. Just run .strip for each item in your good URL array. This method removes trailing and leading whitespace. But this brings a bigger question: how do we know which URL's are good and which are poor input.
User Story: Run poor URL's without breaking the script!
So let's say we enter in a bad URL: "htp://www.goole.com." Our script is designed to get response codes! You can't get the response code of something that doesn't exist. We need to tell the computer to sort these out. Originally my instinct was to use .slice and sort through the array's first characters, for instance .slice(0,7). However, I discovered the wonderful regular expression and the website: regexpr.com. So I made a regular expression that found matches for "http://" and then sorted them. Now, whenever you have a match that is more than one character, you will be returned an integer 0. Whenever you have only one match, you will be returned an integer telling you which character in the string it matches. For instance if I were matching 'o' in the string 'dog', I would get back integer 1. However, if there are no matches, then I will get back a nil. This helps me sort my URL's. I create two arrays. One for malformed URL's and then one for the one's I'll be running. Here's a good demonstration of a regular expression sorting the URL's. Keep in mind, the regular expression is defined globally.
This checks to see if the regular expression has a match by testing for being returned a nil response. If it does, then it is malformed. If not, then the regular expression returned an integer and it matched. In this case it must return 0 or nil since I'm testing for more than one character. Now, you might be wondering why I'm typing "https?:\/\/" into my regular expression. Regular expressions are situated between two slash marks. One slash begins the regular expression and one ends it. This means, like using quotes within quotes in a string, that I must break slashes. So I use "\/" to mean "/". And the reason for the 'https?'? A user could enter in "https://www.amazon.com" and I should still be able to test for it. It's not wrong or malformed. So entering a 's?' along with the 'http' means that I can test for 'http' and 'https' with the 's' character being optional.
I hope this helps folks in some way and that I'm explaining it well! I work full time while learning to code, so if you see any errors or have any suggestions, let me know!
Making a 404 Finder. Part 3
So one thing to note about working in the law enforcement field is that we're late to everything and technology is one of the big ones. I use computer programs that look like they come out of the 1980's. One of my favorite coworkers is a 67 year old man. He gets so flustered around computers that he'll leave a job with cushy days off and daytime hours (rare in law enforcement) if it involves computers. I imagine that the client I'm making my 404 finder for is him. I want to make things as streamlined and easy as possible. As far as our project, what do we have so far? Well we have a script that reads a file, assigns the string data in the file to a variable in our program, and then splits each URL into its own data point on the assumption that our use will input items with a space between each item.
Now we have to run through this array and find out the response code and then sort each URL into its respective group. For this we need to create some empty arrays which will be our groups.
Sweet! Now all we have to do is run our comparison and then use the .push method to push the items into their own arrays. Now, since the first language I learned was JavaScript, my first instinct was use a for loop. However, a .each is more appropriate iteration in Ruby. Not only is this more efficient, but it is also a lot easier than formatting a JavaScript for loop.
So this iterator will sort through your .txt file and tell what kind of link each link is! Now, you could consider yourself done, but that is entirely dependent on your user stories. I've got a few more ideas to make my code a little more friendly to people like my coworker.
Making a 404 Finder. Part 2
So in my last post, I walked you through the beginning steps of creating a 404 finder. What we discovered was that Ruby has a nice little class (Net::HTTP) and a method (.get_response) that when used returned to us, a string value indicating the URL's response code. I also laid out what we can now do with this response code. I chose (possibly due to a lack of experience) to use an if...else statement and I'm going to sort it into 6 classes:
- Informational (100 code)
- Successful (200 code)
- Redirectional (300 code)
- Client Error (400 code)
- Server Error (500 code)
- 404 Errors (404 code)
I can sort this for instance by saying if the response code is greater than or equal to 100 or less than 200 then it is informational. Or if it is greater than or equal to 400, not equal to 404, and less than 500 then it is a client error and will be sorted into that bunch. Now be careful, if you choose to sort more than that, you might run into trouble: the get_response() method returns a string. Remember that in Ruby, if a = '33' and b = '230,' Ruby will return a as larger when compared to b due to being a string. If you use a to_i method on both variables, you will get a correct comparison.
Before we do that, we must go back to our original user story: take a .txt file filled with URL's and then run them through our program to find out which links are working and which ones are broken. So we need to a group of some string data's, which happen to be URL's, and then sort through them using our code and place them into their own groups. So, we will be working with array's. We will be putting our URL's into an unsorted arrays, run our code through the array, then place them into their own arrays.
The next part here is on you. Go ahead and create a .txt file and put some URL's of each type in there. Broken, successful, informational etc. Once you've done that, we need to figure out how to put that information into an array we can read. To do this we need to use the File class. The easiest way to do this is assign a variable to File.open('yourtxtfile.txt', 'r'). This tells the computer to: open the .txt file and then read (hence the 'r') it. However, that variable we just assigned is still a file type and we can't run any methods on it besides read and write. To check this you can always put a variable and .class next to it. The computer will tell what kind of data it is!
So we have a variable that is reading the data inside the file. If we assign that variable to another variable and use a .read method on it we'll have a string value to work with. Here's what your code should look like (I called my URL file ural.txt):
We're still not done. We now have one big long string with a bunch of URL's in it. How do we turn that into an array. One thing I remember from JavaScript that is also in Ruby is the .split() method. This takes an argument between the parenthesis that takes a string and splits it with whatever character you provide. Here's how it works:
The next part here is on you. Go ahead and create a .txt file and put some URL's of each type in there. Broken, successful, informational etc. Once you've done that, we need to figure out how to put that information into an array we can read. To do this we need to use the File class. The easiest way to do this is assign a variable to File.open('yourtxtfile.txt', 'r'). This tells the computer to: open the .txt file and then read (hence the 'r') it. However, that variable we just assigned is still a file type and we can't run any methods on it besides read and write. To check this you can always put a variable and .class next to it. The computer will tell what kind of data it is!
So we have a variable that is reading the data inside the file. If we assign that variable to another variable and use a .read method on it we'll have a string value to work with. Here's what your code should look like (I called my URL file ural.txt):
We're still not done. We now have one big long string with a bunch of URL's in it. How do we turn that into an array. One thing I remember from JavaScript that is also in Ruby is the .split() method. This takes an argument between the parenthesis that takes a string and splits it with whatever character you provide. Here's how it works:
So in my nonsensical string, the .split method with the argument 'g,' removed the 'g's and returned 5 strings in one array. This is quite useful. I'm counting on my user inputting the URL's into the file with one space in between each URL. So now, I can run .split(' ') on the string variable contents and I should return an array with each URL occupying its own space.
Now we can program our computer to check each URL's response code and we won't have input them manually! But that's a topic for a different day.
Now we can program our computer to check each URL's response code and we won't have input them manually! But that's a topic for a different day.
Making a 404 finder. Part 1
Objective: I have been tasked to create a script that will determine whether URL is a broken link or not. This script will take a text (.txt) file with a list of URL's and check its status.
So, how do we do this? First we need to understand the internet and what a HTTP code really is. What is a 404 error? When you get on the internet you use a browser to interact with web pages. Your browser sends a request to a server which holds the contents of your intended web page. That server sends a response back. This response is key to our URL finder. Here are the HTTP responses in a nutshell (keyword: nutshell):
100 series code: Informational URL's
200 series code: Successful URL's
300 series code: Redirectional URL (Think typing Wikipedia.org instead of Wikipedia.com)
400 series code: Client Side error
500 series code: Server Side error
So, let's go back to one of our original questions: what is a 404 error? A 404 error is a client side error, or more specifically a response code sent to indicate that the link is not functional. The question is what can we type into our text editor to see get said response data and use it to determine whether something is a broken link or not?
Well you have to do a little research (which is what coding often times is). When you do that, you discover that Ruby has a wonderful class to manipulate HTTP. The class Net:HTTP has a method that can get us the response code of a specific URL. Firstly, you'll have to require the class by the command require 'net/http'.
Now we can start using some of the methods! Net::HTTP can send a request to get a response code through the code line: 'Net::HTTP.get_response(URI(#link))'. Try running the code yourself and you should get some type of code that falls between 100 and 500. Your output is a string. So for 'https://www.wikipedia.com,' you'll receive a string with the value of '200.' To make things we can assign this to a variable and convert it to an integer using .to_i and then sort it. We can use a case statement or a comparison operator to have our computer sort it for us.
Now that we have things sorted (pun) out and we know how to turn a website's response code into something we can manipulate, our work is pretty much laid out for us. What are the user stories? We can discuss this more in detail in our next part.
So, how do we do this? First we need to understand the internet and what a HTTP code really is. What is a 404 error? When you get on the internet you use a browser to interact with web pages. Your browser sends a request to a server which holds the contents of your intended web page. That server sends a response back. This response is key to our URL finder. Here are the HTTP responses in a nutshell (keyword: nutshell):
100 series code: Informational URL's
200 series code: Successful URL's
300 series code: Redirectional URL (Think typing Wikipedia.org instead of Wikipedia.com)
400 series code: Client Side error
500 series code: Server Side error
So, let's go back to one of our original questions: what is a 404 error? A 404 error is a client side error, or more specifically a response code sent to indicate that the link is not functional. The question is what can we type into our text editor to see get said response data and use it to determine whether something is a broken link or not?
Well you have to do a little research (which is what coding often times is). When you do that, you discover that Ruby has a wonderful class to manipulate HTTP. The class Net:HTTP has a method that can get us the response code of a specific URL. Firstly, you'll have to require the class by the command require 'net/http'.
Now we can start using some of the methods! Net::HTTP can send a request to get a response code through the code line: 'Net::HTTP.get_response(URI(#link))'. Try running the code yourself and you should get some type of code that falls between 100 and 500. Your output is a string. So for 'https://www.wikipedia.com,' you'll receive a string with the value of '200.' To make things we can assign this to a variable and convert it to an integer using .to_i and then sort it. We can use a case statement or a comparison operator to have our computer sort it for us.
Now that we have things sorted (pun) out and we know how to turn a website's response code into something we can manipulate, our work is pretty much laid out for us. What are the user stories? We can discuss this more in detail in our next part.
Terminal: Top to Bottom
I remember the first time I did a pair programming event and had to use a terminal for the first time... It seemed like a thousand different steps with no real logic. Whatever instructions I was given sounds like: "OK Matt, type 'bash dash m and a plus sign and the words cp dash r and the letter y.'" What is that?
However, it has become so intuitive to me now. Whenever I create a program, it is second nature to me to "subble" it (subl programname.rb or .js or .html whatever it is). In fact, my friend and I were working on a small side project this weekend in HTML and CSS. He's a very skilled programmer who learned HTML, CSS, and JavaScript through Free Code Camp. I highly admire FCC, but they teach you nothing about how to use the terminal. I was able to teach him a lot of what I've learned.
While it's cool to manipulate files and seem like a genius doing it, I must admit there is much for me to learn. I am nearing the end the Zed Shaw's Learn Ruby the Hard Way and I made it to exercise #50. The goal was to create a simple "Hello, World!" web application. I made the application and ran it with the ruby command in the terminal. My intuition, from doing mathematics, is to break it down. So I change directory (cd) all the way down to the specific file. While the program ran without a flaw, Zed was one step ahead of me (and probably a lot of other aspiring developers) and pointed out the mistake.
When you run something in the terminal, you need to run everything from the top down. My program worked because it simply did not have any other dependencies. Whenever it does have dependencies, you need to specify to run the program within a directory rather than changing the directory the computer is looking at. Whenever you use the cd command into a directory, that directory is like the computer's whole world at that moment. To illustrate, I will show you a tinker project I came up with. I tinker in order to understand truly what's going on under the hood of anything, including a computer! Keep in mind, I'm writing these commands for the Mac.
mkdir Tinkering
cd Tinkering
mkdir TinkerOne TinkerTwo
cd TinkerOne
subl tinker_requirement.rb
inside tinker_requirement.rb:
class Tinker
def Tinker.test
puts "See you need to run from within the parent directory!"
end
end
(Command + S to save)
in the terminal again:
cd
cd Tinkering
subl tinker_test.rb
inside tinker_test.rb:
require './TinkerOne/tinker_requirement'
Tinker.test
(Save)
Now, if you know ruby, you know you have one program that contains a class with the method called ".test" that will print the string above. Whenever I run the program tinker_test.rb, it calls the class and method from tinker_requirement.rb to print that string into my terminal. Now try this
cd Tinkering/TinkerTwo
ruby tinker_two
You'll get a "cannot load such file" error meaning the computer doesn't know what file you're referring to in the require statement. Therefore the class and the class method cannot be executed. However back out:
cd
cd Tinkering
ruby TinkerTwo/tinker_two.rb
What do you get? You get the string defined in the method of the class Tinker.
"See you need to run from within the parent directory!"
Hope this helps! I still have a lot to learn, but teaching helps one learn faster!
Matt
However, it has become so intuitive to me now. Whenever I create a program, it is second nature to me to "subble" it (subl programname.rb or .js or .html whatever it is). In fact, my friend and I were working on a small side project this weekend in HTML and CSS. He's a very skilled programmer who learned HTML, CSS, and JavaScript through Free Code Camp. I highly admire FCC, but they teach you nothing about how to use the terminal. I was able to teach him a lot of what I've learned.
While it's cool to manipulate files and seem like a genius doing it, I must admit there is much for me to learn. I am nearing the end the Zed Shaw's Learn Ruby the Hard Way and I made it to exercise #50. The goal was to create a simple "Hello, World!" web application. I made the application and ran it with the ruby command in the terminal. My intuition, from doing mathematics, is to break it down. So I change directory (cd) all the way down to the specific file. While the program ran without a flaw, Zed was one step ahead of me (and probably a lot of other aspiring developers) and pointed out the mistake.
When you run something in the terminal, you need to run everything from the top down. My program worked because it simply did not have any other dependencies. Whenever it does have dependencies, you need to specify to run the program within a directory rather than changing the directory the computer is looking at. Whenever you use the cd command into a directory, that directory is like the computer's whole world at that moment. To illustrate, I will show you a tinker project I came up with. I tinker in order to understand truly what's going on under the hood of anything, including a computer! Keep in mind, I'm writing these commands for the Mac.
mkdir Tinkering
cd Tinkering
mkdir TinkerOne TinkerTwo
cd TinkerOne
subl tinker_requirement.rb
inside tinker_requirement.rb:
class Tinker
def Tinker.test
puts "See you need to run from within the parent directory!"
end
end
(Command + S to save)
in the terminal again:
cd
cd Tinkering
subl tinker_test.rb
inside tinker_test.rb:
require './TinkerOne/tinker_requirement'
Tinker.test
(Save)
Now, if you know ruby, you know you have one program that contains a class with the method called ".test" that will print the string above. Whenever I run the program tinker_test.rb, it calls the class and method from tinker_requirement.rb to print that string into my terminal. Now try this
cd Tinkering/TinkerTwo
ruby tinker_two
You'll get a "cannot load such file" error meaning the computer doesn't know what file you're referring to in the require statement. Therefore the class and the class method cannot be executed. However back out:
cd
cd Tinkering
ruby TinkerTwo/tinker_two.rb
What do you get? You get the string defined in the method of the class Tinker.
"See you need to run from within the parent directory!"
Hope this helps! I still have a lot to learn, but teaching helps one learn faster!
Matt
Why I'm Doing This
Truth be told, I never knew exactly what I wanted to do with my life until I discovered coding. I only knew that I wanted to do something that was valuable to others and I wanted to make a lot of money doing it. My family continually pushed me to enter into science and engineering, but I was scared because of the math involved. I did what all kids who are unsure of what path to take in college do, I majored in business and graduated in 2013 from Ohio University.
Since graduating, I've held a couple job titles while in search of something that would satisfy my two aforementioned criteria. I've worked for a freight company, braving the elements and working with hands. I moved up in that job, but the long hours and working conditions pushed me to find my path in life. I fooled around in nursing and didn't like it. I eventually retook some math and science classes and found that I really enjoy them and I'm good at it. I came to the decision that I would become some sort of engineer. I wasn't sure which kind, all I knew was that engineers help create products that people use on a daily basis to make life easier. I started taking engineering survey classes and found that I really enjoy working with software. Making a computer say "Hello, World!" is a pretty cool experience. Imagine what else you could do!
I found a new job working for my local Sheriff's Office in the jail and got so caught up in that job that I forgot about programming for a few months. While this job does afford me a lot of time to learn programming, the money I make isn't substantial enough to pay for my education and I have enough student loans, I don't want or need anymore of those. So, I am learning to code on my own. The great thing about this industry is that you can unlock the doors and get jobs without a degree! I've taken a few paths on this journey. I started with a textbook on Python and found myself ineffective. I ventured into Free Code Camp and learning JavaScript and even made a couple websites. This includes a Star Trek Random Quote Machine, a tribute page, and a personal portfolio. While, I learned a lot the community is a little lacking and no man is an island in the coding world. Luckily I found a coach and mentor, by the name of Josh Kemp. He and I are venturing through the world of Ruby with a goal of landing an entry-level position in four months that will eventually lead to me becoming a software developer by January 2017.
Of course, learning to code requires a significant amount of discipline that has led me to spend at least 3 hours a day coding. I've skipped going on dates, hanging out with friends, going to concerts, etc. to learn to code. People often inquire "why are you doing this?" I felt that I would share my reasons why:
1. Money. Boo. This isn't a good reason to do something and I think millennials get this. People of my generation are said to be intrinsically motivated (i.e. motivated primarily by factors other than money.) So I list all of my motivators that aren't money!
2. I love coding problems. It may be frustrating for others, but I enjoy the battle of exploiting a problem and finding a solution. When I was kid, I would play StarCraft religiously and I found that my best moments (the ones where I still watch the replays) were the long, drawn-out battles where I had to attack my opponent from every angle. You would test and test and test to exploit a weakness in the enemy defense and eventually overcome after hours of testing. In a weird sort of way, coding creates the same feeling. You get a problem, say reversing a string, and while you don't know everything you know where to look. You delve into the documentation, hitting stackoverflow, MDN, and a thousand other websites, and you try running the program. You fail and fail and fail until you get it right. There's no greater feeling than the moment when you finally get it right. That sense of accomplishment is unbeatable in my opinion. If you're like me, you'll laugh at yourself because you should've known to use camelCase.
3. Of course, doing those problems means that I can eventually create a working product. Whatever that is, I know that it is going to help someone. It could help businesspeople or the general public.
4. Being creative instead of a drone. Every job I've had, I've been a drone. This isn't always bad and it isn't bad for everyone, but I believe I was meant to do something else. After exploring some of the software companies around the area at events like PairColumbus or the Columbus Web Group, I found that these companies foster a work environment of creativity. The company that inspired me to learn to code, covermymeds, has pool tables, open floor plans, an on-staff chef, and a little brewery. Hearing people talk about the company, the teams they work with, and the products they create inspires a little healthy envy in me. I am motivated because I want to experience the same thing in my work.
5. "Your code was merged..." I love the coding community. It is full of people from all walks of life who aim to create. The best part is most people in this community realize that coding is hard! How many times have you done something that was difficult and failed only to hear "you're stupid!" or "come on, you should get this by now!" While the coding community has its harsher elements, most of the people I've met will meet you where you are and they're eager to help. Their vocabulary is often "instead of this, try this." They often times teach you socratically, which is the least insulting form of pedagogy.
Of course, there's more to the story with #5, which is the most important reason to me. A month after I typed my first "Hello,World!", I learned HTML and CSS. I was simply proficient, but when I went to PairColumbus at the beginning of February, my friend David wanted me to help him with the creation of a song lyrics app. He wanted song lyrics to appear on an element that looked like notebook paper. At first, my reaction was "uhhhh...." I didn't know where to start, so I started researching. Eventually I found the right code and modified it to make it look the way David wanted.
I felt that I hadn't contributed much, but I also know I am a beginner! However, I felt rather wonderful when I got an email from GitHub saying David had merged my code into his own. While I hadn't found the cure for cancer, I knew that David would be successful creating his app and once released, I would see a piece of my hard work along with everyone using the app.
So why am I doing this? I want to get paid doing something I love, like coding and creating! I know that if I continue on this path, my hard work will useful to someone else and help others and I'll make a fine living doing it. So, I finally found what I want to do with my life. I want to touch the-world.rb.
Since graduating, I've held a couple job titles while in search of something that would satisfy my two aforementioned criteria. I've worked for a freight company, braving the elements and working with hands. I moved up in that job, but the long hours and working conditions pushed me to find my path in life. I fooled around in nursing and didn't like it. I eventually retook some math and science classes and found that I really enjoy them and I'm good at it. I came to the decision that I would become some sort of engineer. I wasn't sure which kind, all I knew was that engineers help create products that people use on a daily basis to make life easier. I started taking engineering survey classes and found that I really enjoy working with software. Making a computer say "Hello, World!" is a pretty cool experience. Imagine what else you could do!
I found a new job working for my local Sheriff's Office in the jail and got so caught up in that job that I forgot about programming for a few months. While this job does afford me a lot of time to learn programming, the money I make isn't substantial enough to pay for my education and I have enough student loans, I don't want or need anymore of those. So, I am learning to code on my own. The great thing about this industry is that you can unlock the doors and get jobs without a degree! I've taken a few paths on this journey. I started with a textbook on Python and found myself ineffective. I ventured into Free Code Camp and learning JavaScript and even made a couple websites. This includes a Star Trek Random Quote Machine, a tribute page, and a personal portfolio. While, I learned a lot the community is a little lacking and no man is an island in the coding world. Luckily I found a coach and mentor, by the name of Josh Kemp. He and I are venturing through the world of Ruby with a goal of landing an entry-level position in four months that will eventually lead to me becoming a software developer by January 2017.
Of course, learning to code requires a significant amount of discipline that has led me to spend at least 3 hours a day coding. I've skipped going on dates, hanging out with friends, going to concerts, etc. to learn to code. People often inquire "why are you doing this?" I felt that I would share my reasons why:
1. Money. Boo. This isn't a good reason to do something and I think millennials get this. People of my generation are said to be intrinsically motivated (i.e. motivated primarily by factors other than money.) So I list all of my motivators that aren't money!
2. I love coding problems. It may be frustrating for others, but I enjoy the battle of exploiting a problem and finding a solution. When I was kid, I would play StarCraft religiously and I found that my best moments (the ones where I still watch the replays) were the long, drawn-out battles where I had to attack my opponent from every angle. You would test and test and test to exploit a weakness in the enemy defense and eventually overcome after hours of testing. In a weird sort of way, coding creates the same feeling. You get a problem, say reversing a string, and while you don't know everything you know where to look. You delve into the documentation, hitting stackoverflow, MDN, and a thousand other websites, and you try running the program. You fail and fail and fail until you get it right. There's no greater feeling than the moment when you finally get it right. That sense of accomplishment is unbeatable in my opinion. If you're like me, you'll laugh at yourself because you should've known to use camelCase.
3. Of course, doing those problems means that I can eventually create a working product. Whatever that is, I know that it is going to help someone. It could help businesspeople or the general public.
4. Being creative instead of a drone. Every job I've had, I've been a drone. This isn't always bad and it isn't bad for everyone, but I believe I was meant to do something else. After exploring some of the software companies around the area at events like PairColumbus or the Columbus Web Group, I found that these companies foster a work environment of creativity. The company that inspired me to learn to code, covermymeds, has pool tables, open floor plans, an on-staff chef, and a little brewery. Hearing people talk about the company, the teams they work with, and the products they create inspires a little healthy envy in me. I am motivated because I want to experience the same thing in my work.
5. "Your code was merged..." I love the coding community. It is full of people from all walks of life who aim to create. The best part is most people in this community realize that coding is hard! How many times have you done something that was difficult and failed only to hear "you're stupid!" or "come on, you should get this by now!" While the coding community has its harsher elements, most of the people I've met will meet you where you are and they're eager to help. Their vocabulary is often "instead of this, try this." They often times teach you socratically, which is the least insulting form of pedagogy.
Of course, there's more to the story with #5, which is the most important reason to me. A month after I typed my first "Hello,World!", I learned HTML and CSS. I was simply proficient, but when I went to PairColumbus at the beginning of February, my friend David wanted me to help him with the creation of a song lyrics app. He wanted song lyrics to appear on an element that looked like notebook paper. At first, my reaction was "uhhhh...." I didn't know where to start, so I started researching. Eventually I found the right code and modified it to make it look the way David wanted.
I felt that I hadn't contributed much, but I also know I am a beginner! However, I felt rather wonderful when I got an email from GitHub saying David had merged my code into his own. While I hadn't found the cure for cancer, I knew that David would be successful creating his app and once released, I would see a piece of my hard work along with everyone using the app.
So why am I doing this? I want to get paid doing something I love, like coding and creating! I know that if I continue on this path, my hard work will useful to someone else and help others and I'll make a fine living doing it. So, I finally found what I want to do with my life. I want to touch the-world.rb.
Subscribe to:
Posts (Atom)