CARVIEW |
Select Language
HTTP/2 302
server: nginx
date: Sat, 19 Jul 2025 06:28:36 GMT
content-type: text/plain; charset=utf-8
content-length: 0
x-archive-redirect-reason: found capture at 20090901080039
location: https://web.archive.org/web/20090901080039/https://github.com/davepeck/appengine-go/
server-timing: captures_list;dur=0.822820, exclusion.robots;dur=0.025693, exclusion.robots.policy;dur=0.011930, esindex;dur=0.014126, cdx.remote;dur=12.591841, LoadShardBlock;dur=210.799051, PetaboxLoader3.datanode;dur=111.292038, PetaboxLoader3.resolve;dur=56.222836
x-app-server: wwwb-app222
x-ts: 302
x-tr: 290
server-timing: TR;dur=0,Tw;dur=0,Tc;dur=1
set-cookie: SERVER=wwwb-app222; path=/
x-location: All
x-rl: 0
x-na: 0
x-page-cache: MISS
server-timing: MISS
x-nid: DigitalOcean
referrer-policy: no-referrer-when-downgrade
permissions-policy: interest-cohort=()
HTTP/2 301
server: nginx
date: Sat, 19 Jul 2025 06:28:37 GMT
content-type: text/html; charset=utf-8
content-length: 117
x-archive-orig-server: nginx/0.6.26
x-archive-orig-date: Tue, 01 Sep 2009 08:00:37 GMT
x-archive-orig-connection: close
x-archive-orig-status: 301 Moved Permanently
location: https://web.archive.org/web/20090901080039/https://github.com/davepeck/appengine-go/tree/master
x-archive-orig-x-runtime: 152ms
x-archive-orig-cache-control: no-cache
x-archive-orig-content-length: 117
cache-control: max-age=1800
memento-datetime: Tue, 01 Sep 2009 08:00:39 GMT
link: ; rel="original", ; rel="timemap"; type="application/link-format", ; rel="timegate", ; rel="first memento"; datetime="Tue, 01 Sep 2009 08:00:39 GMT", ; rel="memento"; datetime="Tue, 01 Sep 2009 08:00:39 GMT", ; rel="next memento"; datetime="Sun, 22 Nov 2009 04:14:11 GMT", ; rel="last memento"; datetime="Fri, 13 Sep 2024 00:29:53 GMT"
content-security-policy: default-src 'self' 'unsafe-eval' 'unsafe-inline' data: blob: archive.org web.archive.org web-static.archive.org wayback-api.archive.org athena.archive.org analytics.archive.org pragma.archivelab.org wwwb-events.archive.org
x-archive-src: 52_11_20090901051408_crawl102.gpg-c/52_11_20090901075959_crawl101.arc.gz
server-timing: captures_list;dur=1.139572, exclusion.robots;dur=0.018630, exclusion.robots.policy;dur=0.008717, esindex;dur=0.009380, cdx.remote;dur=12.495112, LoadShardBlock;dur=270.182053, PetaboxLoader3.datanode;dur=153.306322, PetaboxLoader3.resolve;dur=269.564252, load_resource;dur=173.953116
x-app-server: wwwb-app222
x-ts: 301
x-tr: 486
server-timing: TR;dur=0,Tw;dur=0,Tc;dur=0
x-location: All
x-rl: 0
x-na: 0
x-page-cache: MISS
server-timing: MISS
x-nid: DigitalOcean
referrer-policy: no-referrer-when-downgrade
permissions-policy: interest-cohort=()
HTTP/2 200
server: nginx
date: Sat, 19 Jul 2025 06:28:38 GMT
content-type: text/html; charset=utf-8
x-archive-orig-server: nginx/0.6.26
x-archive-orig-date: Tue, 01 Sep 2009 08:00:38 GMT
x-archive-orig-connection: close
x-archive-orig-status: 200 OK
x-archive-orig-x-runtime: 474ms
x-archive-orig-etag: "9d1df9a92f9d1040e9b7050feb5f61e0"
x-archive-orig-cache-control: private, max-age=0, must-revalidate
x-archive-orig-content-length: 31105
x-archive-guessed-content-type: text/html
x-archive-guessed-charset: utf-8
memento-datetime: Tue, 01 Sep 2009 08:00:39 GMT
link: ; rel="original", ; rel="timemap"; type="application/link-format", ; rel="timegate", ; rel="first memento"; datetime="Thu, 26 Feb 2009 19:21:12 GMT", ; rel="prev memento"; datetime="Fri, 14 Aug 2009 07:07:27 GMT", ; rel="memento"; datetime="Tue, 01 Sep 2009 08:00:39 GMT", ; rel="last memento"; datetime="Tue, 01 Sep 2009 08:00:39 GMT"
content-security-policy: default-src 'self' 'unsafe-eval' 'unsafe-inline' data: blob: archive.org web.archive.org web-static.archive.org wayback-api.archive.org athena.archive.org analytics.archive.org pragma.archivelab.org wwwb-events.archive.org
x-archive-src: 52_11_20090901051408_crawl102.gpg-c/52_11_20090901075959_crawl101.arc.gz
server-timing: captures_list;dur=0.767244, exclusion.robots;dur=0.026815, exclusion.robots.policy;dur=0.012517, esindex;dur=0.015683, cdx.remote;dur=26.060641, LoadShardBlock;dur=307.879999, PetaboxLoader3.datanode;dur=246.883418, PetaboxLoader3.resolve;dur=131.509589, load_resource;dur=74.584939
x-app-server: wwwb-app222
x-ts: 200
x-tr: 485
server-timing: TR;dur=0,Tw;dur=0,Tc;dur=0
x-location: All
x-rl: 0
x-na: 0
x-page-cache: MISS
server-timing: MISS
x-nid: DigitalOcean
referrer-policy: no-referrer-when-downgrade
permissions-policy: interest-cohort=()
content-encoding: gzip
davepeck's appengine-go at master - GitHub
This repository is private.
All pages are served over SSL and all pushing and pulling is done over SSH.
No one may fork, clone, or view it unless they are added as a member.
Every repository with this icon (
) is private.
Every repository with this icon (

This repository is public.
Anyone may fork, clone, or view it.
Every repository with this icon (
) is public.
Every repository with this icon (

Description: | Dave Peck's Game of "Go" for AppEngine edit |
Homepage: | https://go.davepeck.org/ edit |
Public Clone URL: |
git://github.com/davepeck/appengine-go.git
Give this clone URL to anyone.
git clone git://github.com/davepeck/appengine-go.git
|
Your Clone URL: |
Use this clone URL yourself.
git clone git@github.com:davepeck/appengine-go.git
|
name | age | message | |
---|---|---|---|
![]() |
.gitignore | Loading commit data... ![]() |
|
![]() |
LICENSE | ||
![]() |
README | ||
![]() |
app.yaml | ||
![]() |
cron.yaml | ||
![]() |
go.py | ||
![]() |
index.yaml | ||
![]() |
secrets.py | ||
![]() |
simplejson/ | ||
![]() |
static/ | ||
![]() |
templates/ |
README
Dave Peck's Go service for AppEngine (c) 2009 Dave Peck, All Rights Reserved https://go.davepeck.org/ ABOUT THIS REPOSITORY: This is the ancient game of Go, implemented as a web service for Google's AppEngine. You can see the latest bits running at https://go.davepeck.org/ -- I will always run them there, on my own dime. Currently, this service lets you set up a game of Go with a friend. There are no logins or passwords. When it's your turn, you get an email notification. Or, you can silence email and just leave your browser window open. It will update automatically when it's time for you to move. If you're new to the game of Go, you might consider reading the excellent tutorial at https://is.gd/kD5q I wrote this code as a "weekend hack" -- a fun project that I could get to a reasonable degree of polish in about a weekend. Since that original weekend, I've added chat and a history view. But there is still a lot more to do. There are lots of cool features I'd love the community to work on. I've listed some below; I'm sure you'll have other even better ideas. Also, because I wrote this software as fast as I could, the code is a little rough around the edges. No doubt you will see all sorts of oddities as you look through it; feel free to just help get the service on a more solid footing! Anyway, dive in and enjoy. With a little work, I bet we can turn this project into the best place to play Go on the internets! EXPLORING THE CODE: There isn't too much code. The key files are: go.py currently houses all of the AppEngine server-side code, and all of the logic needed to play go (like liberty counting, Ko detection, etc.) static/js/go.js currently houses all of the browser javascript code, including visuals and AJAX communication static/css/go.css a total mess of a CSS file for the service. templates/play.html templates/history.html these are the two "main" pages. the templates are a little gnarly at the moment. templates/get-going.html the game "creation" form COOL STUFF RECENTLY DONE: - Support for the SGF Go file format. (Thanks to Emil Sit! -- "sit" on github) - Support for chat in the SGF Go file format. (Thanks again, Emil.) - Support for notification via twitter. (A suggestion of Ray Krueger. Dave Peck implemented it.) - Lots of new chat features and improvements, including: 1. Ability to see the full chat history. 2. Ability to refer to specific board squares when chatting. For example, "Dude, you should have moved at A11." will show up with "A11" underlined; clicking on it will cause that grid square to flash. 3. Ability to easily figure out board square names and get them into the chat box. 4. Auto-linkification of valid http, https, and ftp URLs. - Make all pages fully XHTML 1.0 STRICT valid, according to the W3C validator. COOL STUFF I HOPE TO SEE PEOPLE WORK ON: There is a LOT of stuff to do here, so dive in! I'm open to all suggestions and patches. Send 'em my way. This list is in "no particular order": - User accounts I want to make sure that people can continue to use the service without ever having to create an account, choose a password, or login. That said, there are some power users who play many games at once. For them, I want to make sure they can log in and track all their games in one central place. - Ranks, user profiles, and other social features I think community aspects are ultimately important in any single-game site like this - UI Improvements I'm not a designer. I tried to make things simple, but I think there's probably lots of room for improvement, both visually and in terms of the interaction model. I'll leave this open-ended and see what people come up with. - Game branching and speculation I'd like people to be able to look through the history of a game and then "branch" it where some critical move was made, so they can try a new path. - Chat improvement: At the moment, when you chat, the internal representation ties what you said to a particular move. But I don't expose this in the UI anywhere. It would be helpful! - Visual grid numbers/letters Definitely important for advanced players. However, I hope that we can do this in such a way that they are by default off, and when turned on have minimal visual impact. Also, see "better chat features" #2. This is, I think, the killer reason to have grid numbers/letters. - Better layout for 9x9 and 13x13 games. Right now the gameplay visual layout is designed with the 19x19 board size in mind. The chat area, in particular, looks wonky on smaller boards. This is one specific "UI Imprvoement" that's probably worth calling out. - Facebook integration Not sure about this, but perhaps some people would use it? - Free iPhone and Palm Pre front-ends Why not? It would be fun to have them! Their source code could be a part of this repository. - Code cleanup! I wrote this service as a "weekend hack." As a result, there are lots of strange things still in there. Many data structures, local variables, etc. are either extraneous, or duplicated, or something in between. I had the idea that I would do true MVC on the javascript side. The "models" would directly parallel python types on the back end. The views were just about managing visual appearance. And the controllers tied them together. I got partway there, because frankly it just wasn't important to keep this separation when doing a three day hack. I'd like to go back and really clean this stuff up now. Check out go.js for details. The "service" URLs are a bit of a mess. I originally wrote one to check to see if your opponent moved, but what I really should have is a single unified "get state" POST request that takes the desired move number and returns the state. It should work for history as well as game play. I want this in-part for cleanliness, in-part because I think it will make implementing an iPhone front-end easier. - Make it look better in IE7. For example, I use :hover CSS pseudo-classes on a bunch of non-anchor-tags. That's an IE no-no, but I did it anyway. - Clean up the madness that is my CSS file. - Python docstrings, version information, etc. Maybe even break up files into smaller components, gasp. - Anything you think is cool! A WORD ABOUT LICENSES: Dave Peck's Go is open source and is licensed under the GNU Affero GPLv3. This is a very restrictive license. You're welcome to run your own service based on this code, but if you make improvements, you have to share them with the community. In general, I'm not a fan of licenses as restrictive as the AGPL. But I think it is an appropriate license for this project. I hope you'll agree. There are a few other bits of code that are licensed under different terms: 1. The simplejson library is licensed under an MIT License. A number of people have contributed. You can find out more here: https://code.google.com/p/simplejson/ 2. The prototype.js library is (c) 2005-2008 Sam Stephenson and is also under an MIT License. 3. The scriptaculous javascript libraries are (c) 2005-2008 Thomas Fuchs, also under an MIT License. As for the graphics: 1. All of the images used in the main game board are modified versions of files I found on the Wikimedia Commons. These are distributed with the Creative Commons Attribution 2.0 ShareAlike license. Unfortunately, I can't figure out who made them originally -- the user name is Micheletb 2. All remaining images were hand-drawn by me. I hereby put them under the Creative Commons Attribution ShareAlike 2.0 license: https://creativecommons.org/licenses/by-sa/2.0/
This feature is coming soon. Sit tight!