Everyone’s favorite SSS Is it Christmas is hosted right here on GitHub.
The code is fairly interesting, with a bit of localization and geolocating going on. Check it out!
CARVIEW |
Everyone’s favorite SSS Is it Christmas is hosted right here on GitHub.
The code is fairly interesting, with a bit of localization and geolocating going on. Check it out!
We’ve begun to revamp the GitHub homepage to more accurately reflect what we’re all about. The first step of this redesign was to more prominently feature our private code hosting options. As such, we’ve added a section above the fold that scrolls through a list of companies that are using GitHub. If your company loves GitHub and would like to join this list, just email me a hi-res logo at tom@github.com.
Thanks again for being part of the GitHub community, and we hope you’re having a happy holiday season!
Last week we released a feature for hosting your custom websites for your projects that we call ‘GitHub Pages’. For personal repositories, the process is easy enough – just create a repo named ‘username.github.com’. However, for project pages we faced a decision – do we ask you to create a new repository for each project page (ie: ‘myproject-pages’ or something), do we ask you to put a ‘website’ subdirectory in your project, or do we ask you to create an unrelated branch (ie, a branch that has no common ancestor with your project code)?
The first option would be annoying, doubling everyone’s repository count. The second would dirty up your working directory with code you may not want released with your project. So we decided on the last, but the cost is that an unrelated branch is a concept that can be a bit confusing, in that some people create the branch and then don’t know how to get back to their source code after the process is complete (generally just a ‘git checkout master’, btw).
So, we’ve simplified the process for you. Yesterday we pushed out a Pages generator for each project that will create your new branch and seed it with a nice looking website customized for your project. Then all you have to do is fetch it down and check it out to customize it if you feel so inclined.
You can find the link on the ‘Admin’ tab (yes, you have to be the owner of the project for now). If you do not have a ‘gh-pages’ branch, you should see a ‘Generate Project Page’
Click on that link and you’ll be taken to a form you can fill out to customize your project page:
Any of these fields that you fill out will be used to create your initial web page. There are a few things that are brought in automatically, too. Your project name and description are pulled in (though you can change them), your contact information is added and your git project is scoured for contributors whom are all added.
Furthermore, you can add your Google Analytics “Web Property ID” and it will add the javascript snippet for you. You can also choose a color (a random one is selected) for your page background color and our generator will automatically determine the complementary color to use for titles and links and whether to use a black or white foreground color for your text.
So, if I fill this out and use the color that has been selected for me for my munger project and hit ‘Create Page’, I’ll see a message like this:
And a few minutes later, I have a nice new page up at https://schacon.github.com/munger.
The color choice there may not be your cup of tea, but you can choose any background color you want. It may be helpful as a starting point so you don’t have to do the whole ‘rm .git/index; blah blah’ stuff.
For those of you who had not heard, Perl has moved its 20 year source code history for Perl 5 from Perforce to Git (also, the bird is in fact the word).
At the request of the Perl Git transition team, we’ve setup a mirror of the main repository here on GitHub for Perl developers to fork should they prefer collaborating on GitHub. It is automatically updated every hour, so fork away.
https://github.com/github/perl
Also, as a little background – our friend Sam Vilain, whom we met and had a few beers with at GitTogether 2008, has completed a heroic job of moving the Perl source code over.
From the Use Perl article:
He spent more than a year building custom tools to transform 21 years of Perl history into the first ever unified repository of every single change to Perl. In addition to changes from Perforce, Sam patched together a comprehensive view of Perl’s history incorporating publicly available snapshot releases, changes from historical mailing list archives and patch sets recovered from the hard drives of previous Perl release engineers.
Wow.
The middle of December has brought us a few feet of snow and the return of graphs! I’m looking for new ways to show off the ridiculous amount of data available on the site (just over 67,000 events in total last week), so if you have any ideas feel free to let me know.
passenger is quickly becoming the new standard for easy and robust Rails deployment. Also known as mod_rails, this is an Apache module that makes the process of getting your application published and out there so good it’s almost boring. Installation and configuration are dead simple, and it’s being constantly improved and benchmarked against competing deployment systems. If you need more convincing to try it out, RubyInside has a fantastic collection of blog posts, discussions, and tutorials to help you get started.
grancher is a helpful little tool that can copy files from one git branch to another. This is awesome for those who have their project’s documentation or other files living in their repositories already but want to move them easily to the gh-pages branch. Check out judofyr’s blog post on how this can be done or Grancher’s docs for everything that it can do.
gaebar stands for Google App Engine Backup and Restore. It’s a Django module that helps with pulling down, backing up, and restoring data on your GAE. What’s really neat is that it stores your data as Python code, and then simply runs that code to bring your data back. If your apps are running off this platform gaebar might just be for you (or if you’re worried about Google ever going down).
mytime is a GTD time tracking tool that is used through the system tray. It’s very alpha right now, but I really like the goals of the project: timed todo lists, tagging for tasks, and plenty of reports to track your time. If you’re looking to get into Java, returning to it, or perhaps want to hone your Swing skills a little, this is a small little project that would be fun to hack on.
John Resig (jeresig) is the definition of a JavaScript guru. He’s most widely known for creating jQuery (and his blog), but he’s also been hacking on plenty of projects here on GitHub. From processing-js, a port of the Processing language, to fireunit, a Firebug extension for JS unit testing, this guy is just unstoppable. Recently he’s been working on sizzle, a new CSS selector engine that may be used across many different JS libraries. Some of the coolest stuff coming out in JavaScript is from him, so he’s definitely worth following (and rocking out with).
*I had marked Shoes as the featured project when this post first came out, but it had already been featured a while back. Still check it out though, it’s fantastic.
![]() |
![]() |
With the rollout of GitHub Pages, why not show the world that you collaborate on GitHub? I’ve prepared these ribbons that you can overlay on your site by copying and pasting the appropriate snippet into your site’s HTML. Make sure to change the URL in the link to contain your username instead of “you”.
See the ribbon in use at defunkt.github.com, pjhyett.github.com, and mojombo.github.com.
If you’re not satisfied with one of the colors here, I’ve provided the PSD files (MIT licensed). Feel free to modify as you please. The font being used is Collegiate.
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() |
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() |
If you create a repository named you.github.com
, where you
is your username, and push content to it, we’ll automatically publish that to https://you.github.com. No FTP, no scp, no rsync, nothing. Just a simple git push
and you’re done. You can put anything here you like. Use it as a customizable home for your Git repos. Create a blog and spread your ideas. Whatever you want!
If you create a gh-pages
branch on any regular repository and push content there, we will automatically publish that to https://you.github.com/your-repo. This allows you to create instant documentation sites that are as easy to collaborate on as your code. Since you’ll want a blank slate for your Pages branch, you can use a little Git trick to create a new branch that has no parents. Just follow the instructions at pages.github.com and you’ll be up and running in a few seconds.
In addition to all this, we thought it would be nice to give you an easy way to assemble more complex sites. That’s why we pipe every Pages-bound repo/branch through Jekyll, my very own blog-aware static site generator that was purpose built specifically for this task. With Jekyll, you have access to layouts, includes, filters, syntax highlighting, Textile and Markdown, and intelligent handling of blog entries. All you have to do is follow the Jekyll conventions and we’ll handle the transformation. For an example of a Jekyll site that works on Pages, check out my tpw blog repo.
Now that you know how it works, let’s take a walk through some of the pages that have popped up since we started tweeting about the feature.
We hope you have fun with Pages, I know we’ll have a blast looking at what you all come up with!
You’ve created a repo on GitHub, written a bunch of great code, and now it’s time to push it:
Here’s what happens on GitHub now:
Along with the create events, if you have any service hooks setup, we will pipe one commit to them so others will be notified of the new branch or tag creation. We’ve also added delete events if you remotely delete a branch or tag.
This isn’t the second big feature launch Scott mentioned in his Fork Queue post yesterday (stay tuned about that), but we’re still pretty happy about these additions.
I would like to introduce you to the Fork Queue, the first of two big features that rolled out today. As of a few minutes ago, everybody should now have a ‘Fork Queue’ tab on each of their projects.
When you click on that, you’ll see something like this:
This is a list of all the commits that exist in your projects fork network. If a couple of people have forked your project and then committed to their fork, you will now see a list of each of those commits, grouped by user, under this tab.
What’s more, you can click on a checkbox next to each one and then choose ‘Apply’ from the dropdown menu to cherry-pick those commits onto one of your branches. You can even create a new branch to apply them to for testing. Just click ‘change it’ next to your listed integration branch:
When you choose a few commits and then choose ‘Apply’, it will take each one and cherry-pick them onto whichever branch you designate as your integration branch, one after the other.
When it is done, it will tell you which of the cherry-picks applied cleanly and which failed. You can abort the process at this point, or you can move your branch forward to it’s new head with all those patches pulled in.
You can also ignore commits that don’t apply or you don’t want, so you don’t have to keep considering them.
This tool allows you to do a lot of repository collaboration maintenance entirely from the website. You can setup an integration branch that you ask everyone to make sure their commits apply cleanly to and pull them in one by one, entirely online. It also gives you great visibility to what is out there in your forked network and what you have or have not brought in yet.
For a bit more information, and a demonstration, check out our screencast on it:
We hope this makes some of your project maintenance tasks much easier. We’re planning a lot more for this new feature – if you have any ideas as to how we could make it even better, let us know.
Update: Commits you have rebased in will continue to show up, so just ignore them to make them go away. Also, for projects that have had a ton of forks with pushes, it may be too slow to use right now – we’re working on that. There shouldn’t be too many of those, though.
Update 2: Just to be clear – the suggested workflow for this would be to use the tool to pull in patches from forks into a testing branch and ignore the ones that aren’t ready or don’t apply. Then you would want to fetch that branch down and test the code before merging or rebasing it into your master branch. This allows you to do a email patch style workflow without actually having to deal with patches over email or having to add a remote to your local repo every time someone submits something.
Update 3: There is a bug we’re working on where the fork queue might show you the wrong commit for your master branch. Before you use this, double check that the master head is pointed where you think it is, or you might have some resetting work to do. It shouldn’t happen to many people (it’s if you pushed your remotes to us via ‘—mirror’ or something), but we’ll have it fixed soon.
Welcome to the 8th version of Rebase! I had some issues generating the stats this week, but don’t worry, there’s still plenty of activity and new projects that I’ve got for you. If you’ve got any new ideas for content or data you’d like to see presented, let me know in the comments!
cappuccino takes web application development to a new level. Using a superset of JavaScript called Objective-J, Cappuccino makes it really easy to create sites that look and feel like a desktop application. The API abstracts away the low level details of building a site (HTML, CSS, JS, the DOM, etc) and lets you focus on building your application. Check out 280 Slides to see just how fully featured and integrated the framework is. It also can make some really nice (and addictive) iPhone apps.
shudder is a testing framework for JavaScript that’s based on SpiderMonkey. The project is just getting started, but I’m really liking the RSpec inspired syntax of the test cases. This could really pick up some steam if it was proven on some of the bigger JS frameworks or someone ported tests to it.
railroad isn’t exactly new, but it was just imported onto GitHub this last week. If you ever need to visualize the relationships of classes in your Rails or Merb app, Railroad is your answer. It creates files that dot and neato can read and produce some really nice diagrams of how your application is laid out. Check out plenty of more examples on their homepage.
luv: Who needs another MVC web framework? Who needs to test it? And seriously, who needs to write it in Lua? If you answered “I do!” to any or all of the following questions, Luv is your new favorite project. Luv claims to be faster than many of the modern Ruby, Python, and PHP frameworks, so perhaps we’ll see some benchmarks (or demo sites?) soon. Until then, I’m going to be watching and hoping to see something exciting being done with Lua outside of World of Warcraft add-ons.
John Nunemaker (jnunemaker) is one of the most prolific Rails and Ruby hackers and bloggers and out there. His goal seems to be making coding fun (and slightly wacky too). He started the HTTParty, an easy way to interact with REST and HTTP than mucking around with the other Ruby alternatives. He’s also got plenty of other helpful projects: HappyMapper, an object to xml mapping library, a command line interface to Twitter, and even a way to generate dummy Lorem Ipsum text in your terminal as well. John is always up to something neat and extremely useful here on GitHub, and definitely is worth following just to see what he’s been up to.
We all love stats and graphs, and I especially love bringing them to you. So without further ado I present the long asked for traffic graph for each and every repo on the site. Simply go to the Graphs tab and select the Traffic graph. We’re making the pageview numbers for the last 90 days available to YOU!
Facebook just released their memcached fork. The enhancements are explained in this note.
Since we’ve made all these changes, we have been able to scale memcached to handle 200,000 UDP requests per second with an average latency of 173 microseconds. The total throughput achieved is 300,000 UDP requests/s, but the latency at that request rate is too high to be useful in our system. This is an amazing increase from 50,000 UDP requests/s using the stock version of Linux and memcached.
Since forking a repository is so easy on GitHub, a number of people tend to do it thinking they want to play with the source, but then never actually push back into their fork. Meanwhile, development continues on the main branch, and it’s a little annoying to have to add them as a remote and merge in order to get back up to date. So, we’ve added a new button to your repository details that will show up if you forked a project, didn’t push to it, and the source repo has moved on:
If you click on ‘Fast Forward’, it will move all your branches up to wherever the repository you originally forked from now is. Now all of those of you who forked Rails months ago and never did anything with it and are thinking of trying again, go forth and Fast Forward.
SproutCore 1.0 has been released! Check out the new CoreQuery which is the first step to making SproutCore JS-library agnostic.
If you don’t know what SproutCore is, head over to the demos and have a gander. Or check out the GitHub repo.
Congrats guys!