In this post, I’m going to discuss how to create a GitHub repo and upload (or “push”) it to GitHub, a popular service for hosting Git repositories.
What is revision control and why do I need it?
The concept of revision control is a system which tracks changes to files. In programming, that is usually program code, but documents and text files can also be tracked. Using revision control will give the following benefits:
You will know what was changed, when it was changed, and who changed it
Multiple people can collaborate on a project without fear of overwriting each others’ changes.
Protection against accidentally deleting a critical file. (revision history is usually read-only)
In GitHub, we store revisions in “repositories” or “repos” for short. As of this writing, the #1 service for storing Git repositories is GitHub. They offer free hosting for Git repositories.
Earlier tonight, I had the pleasure of attending a presentation from Chris Munns of Amazon at the offices of First Round Capital about scaling your software on AWS past the first 10 million users. I already had some experience with AWS, but I learned quite a few new things about how to leverage AWS, so I decided to write up my notes in a blog post for future reference, and as a service to other members of the Philadelphia tech community.
Without further preamble, here are my notes from the presentation:
I’ve been playing around with Google’s programming language known simply as Go lately, and have learned quite a bit about concurrency, parallelism, and writing code to effectively use multiple CPU cores in the process.
An Overview of Go
If you are used to programming at the systems level, Go is effectively a replacement for C, but also has higher level functionality.
It is strongly typed
It can be compiled
It has its own unit testing framwork
It has its own benchmarking framework
Doesn’t support classes, but supports structures and attaching functions to variables instantiated from those structures
Doesn’t expose threads, but instead uses a construct called “channels” for communication between different parts of a Go program. More on channels shortly.
So Linode has gotten onto the IPv6 bandwagon. In addition to each Linode getting an IPv6 address, they will also gladly assign an entire /64 netblock to your specific node on request. That gives you all sorts of flexibility for bringing up IPv6 services. And this blog post is going to be all about how to make use of multiple IPv6 addresses.
As of this writing, everything I mention will work on a Linode running Ubuntu 12.04 LTS and Nginx 1.1. There’s no reason that these instructions shouldn’t work on other distros or versions of Ubuntu with some modifications.
When hotel reservations open, that is the single busiest time of the year for Anthrocon’s webserver. In fact, it even caused us performance problems last year. That was not so good.
So this year, I decided to try something different. Instead of leaving the regular website up and running, which involves using Drupal, I instead decided to replace the entire page with a relatively static “countdown” page, which displayed a countdown timer and automatically started displaying the hotel link at 11 AM on the opening day.
First, some stats for the Anthrocon website:
Peak bandwidth: 1.6 Megabits/sec
Peak connections: 1,400 concurrent connections
And now some status for Passkey, who handled most of the traffic:
I got this form letter from this Slashdot post, and it has surfaced in countless other incarnations, too.
FUSSP stands for “Final Ultimate Solution to the Spam Problem. It’s used to describe ideas put forth by people with little sysadmin/email/spam fighting experience who think that they found the magic problem to stop spam. More examples of FUSSPs can be found here.