Coder Social home page Coder Social logo

googlecl's People

Contributors

credentiality avatar tommiller avatar

Watchers

 avatar

googlecl's Issues

No obvious way to get a list of photos in an album

I was expecting to be able to do something like:

$ ./google-cl.py picasa list-photos --album=ponies > urls.txt
$ cat urls.txt
http://lh3.ggpht.com/_oXIW_jM0QDA/S3NmKOwLNWI/AAAAAAAAOuk/CB_Am_vB8H0/s720/downl
o
adfile.jpeg
http://lh5.ggpht.com/_oXIW_jM0QDA/S2s49k93CVI/AAAAAAAAOs4/Zqdbu62qMEk/s720/2010-
02-04%2012.51.05.jpg

So that I can say things like:

$ wget `cat urls.txt`

or

$ cat urls.txt | perl -lne 'print "<img src=\"$_\">\n";' >> images.html

I guess the photos have names and tags and whatnot that might also be good to 
see, but most often I've wanted to get URLs of a set of images.

Original issue reported on code.google.com by [email protected] on 5 May 2010 at 9:25

Weird calendar error?

Is this because I don't have a GoogleCL dev cal?

$ ./google.py calendar delete --cal "GoogleCL dev cal" --title "Release.*"
Traceback (most recent call last):
  File "./google.py", line 310, in <module>
    main()
  File "./google.py", line 304, in main
    run_once(options, args)
  File "./google.py", line 226, in run_once
    task.run(client, options, args)
  File "googlecl/trunk/src/googlecl/calendar/service.py", line 209, in 
_run_delete
    options.query, options.cal)
  File "googlecl/trunk/src/googlecl/calendar/service.py", line 117, in 
get_events
    cal = self.get_calendar(calendar)
  File "googlecl/trunk/src/googlecl/calendar/service.py", line 87, in 
get_calendar
    converter=gdata.calendar.CalendarListFeedFromString)
  File "googlecl/trunk/src/util.py", line 104, in GetSingleEntry
    entries = self.GetEntries(uri, title, converter)
  File "googlecl/trunk/src/util.py", line 77, in GetEntries
    f = self.GetFeed(uri, converter=converter)
TypeError: GetFeed() got an unexpected keyword argument 'converter'

Original issue reported on code.google.com by [email protected] on 4 Jun 2010 at 6:57

Browser launch opens new instance (Mac)

What steps will reproduce the problem?
1. Set environment variable BROWSER or config variable auth_browser to a 
browser executable on a Mac.
2. Run a service for the first time.
3. An extra copy of the browser will launch, leading to extra loading time and 
possibly errors opening in the browser.

What is the expected output? What do you see instead?
I expect the script to open a new tab or window in the current running instance

What version of the product are you using? On what operating system?
GoogleCL 0.9.5 on Mac OS X 10.6.3

Please provide any additional information below.
I've attached a patch that will use the current instance of the default web 
browser, no configuration necessary.

Original issue reported on code.google.com by impiaaa on 18 Jun 2010 at 10:08

Attachments:

hardy desktop install error

What steps will reproduce the problem?
1. Download .deb.
2. Try to install.


What is the expected output? What do you see instead?

$ sudo dpkg -i googlecl_0.9.2-1_all.deb 
dpkg: error processing googlecl_0.9.2-1_all.deb (--install):
 cannot access archive: Permission denied
Errors were encountered while processing:
 googlecl_0.9.2-1_all.deb


File (*.deb) permissions are perfectly fine:
$ ll *.deb
-rw-r----- 1 mscurtescu eng 40944 Jun 16 18:19 googlecl_0.9.2-1_all.deb


Also, I can open .deb in file-roller and looks OK.

Original issue reported on code.google.com by [email protected] on 17 Jun 2010 at 1:36

Usage with Google Apps Calendars, Contacts, etc.

When I use a Google Apps email as a username after doing my first "google 
calendar add", I am redirected to a Gmail.com login rather than my Google Apps 
for my domain login, which entirely prevents me from posting to my Google Apps 
accounts.  Is there a way to do this now or will it be possible to do this in 
the future?

Original issue reported on code.google.com by [email protected] on 18 Jun 2010 at 10:23

oauth breaks hardy

Looks like hardy with default python-gdata is totally broken now, for two 
reasons.  One, the usage string imports all the service modules, and some don't 
have corresponding gdata modules they can load.  And two, OAuth doesn't seem to 
be supported.

But, it also looks like hardy accounts for a small minority of ubuntu users:
http://credentiality2.blogspot.com/2010/06/os-statistics-from-wikimedia.html

with almost all linux users using either karmic or lucid.  So I suppose we 
should probably stop trying to support hardy :(

Original issue reported on code.google.com by [email protected] on 18 Jun 2010 at 1:01

calendar today broken?

btw this is with gdata1.2 and python2.5

$ ./google.py calendar today
Please specify delimiter: x
Traceback (most recent call last):
  File "./google.py", line 310, in <module>
    main()
  File "./google.py", line 304, in main
    run_once(options, args)
  File "./google.py", line 226, in run_once
    task.run(client, options, args)
  File "googlecl/trunk/src/googlecl/calendar/service.py", line 200, in 
_run_list_today
    _run_list(client, options, args)
  File "googlecl/trunk/src/googlecl/calendar/service.py", line 186, in 
_run_list
    calendar=options.cal)
  File "googlecl/trunk/src/googlecl/calendar/service.py", line 157, in 
get_events
    return self.GetEntries(query.ToUri(), title,
  File "/var/lib/python-support/python2.5/gdata/service.py", line 1122, in 
ToUri
    return atom.service.BuildUri(q_feed, self)
  File "/var/lib/python-support/python2.5/atom/service.py", line 415, in 
BuildUri
    parameter_list = DictionaryToParamList(url_params, escape_params)
  File "/var/lib/python-support/python2.5/atom/service.py", line 383, in 
DictionaryToParamList
    for param, value in (url_parameters or {}).items()]
  File "/usr/lib/python2.5/urllib.py", line 1210, in quote_plus
    if ' ' in s:
TypeError: argument of type 'int' is not iterable

Original issue reported on code.google.com by [email protected] on 4 Jun 2010 at 7:00

Python 2.6 required?

python 2.6 doesn't come with ubuntu hardy, btw, so we should probably avoid 
depending on it if possible.

$ ./google.py calendar add "Lunch with Jim at noon tomorrow"
./google.py:67: Warning: 'with' will become a reserved keyword in Python 2.6
  File "./google.py", line 67
    with open(options.summary, 'r') as summary_file:
            ^
SyntaxError: invalid syntax

Original issue reported on code.google.com by [email protected] on 4 Jun 2010 at 6:06

oauth changes broke my install

$ ./google calendar today
Did not find config / preferences file at /home/[redacted]/.googlecl/config
Traceback (most recent call last):
  File "./google", line 339, in <module>
    main()
  File "./google", line 319, in main
    util.load_preferences()
  File "googlecl/util.py", line 682, in load_preferences
    with open(pref_path, 'w') as pref_file:
NameError: global name 'pref_path' is not defined

Original issue reported on code.google.com by [email protected] on 9 Jun 2010 at 11:24

youtube list error

Got this error from "google youtube list" on karmic

Traceback (most recent call last):
  File "/usr/bin/google", line 448, in <module>
    main()
  File "/usr/bin/google", line 442, in main
    run_once(options, args)
  File "/usr/bin/google", line 337, in run_once
    task.run(client, options, args)
  File "/usr/lib/pymodules/python2.6/googlecl/youtube/service.py", line 200, in _run_list
    entries = client.GetVideos(title=options.title)
  File "/usr/lib/pymodules/python2.6/googlecl/youtube/service.py", line 91, in get_videos
    converter=gdata.youtube.YouTubeVideoFeedFromString)
  File "/usr/lib/pymodules/python2.6/googlecl/service.py", line 110, in get_entries
    feed = self.GetFeed(uri, converter=converter)
  File "/usr/lib/pymodules/python2.6/gdata/service.py", line 1074, in GetFeed
    result = GDataService.Get(self, uri, extra_headers, converter=converter)
  File "/usr/lib/pymodules/python2.6/gdata/service.py", line 1018, in Get
    'reason': server_response.reason, 'body': result_body}
gdata.service.RequestError: {'status': 400, 'body': 'Max-results value is too 
high. Only up to 50 results can be returned per query.', 'reason': 'Bad 
Request'}

Original issue reported on code.google.com by [email protected] on 18 Jun 2010 at 12:17

Does not work behind proxy.

This is the error i get:

Traceback (most recent call last):
  File "/usr/bin/google", line 448, in <module>
    main()
  File "/usr/bin/google", line 442, in main
    run_once(options, args)
  File "/usr/bin/google", line 320, in run_once
    if client.RequestAccess():
  File "/usr/lib/python2.6/site-packages/googlecl/service.py", line 197, in request_access
    request_token = self.FetchOAuthRequestToken()
  File "/usr/lib/python2.6/site-packages/gdata/service.py", line 416, in FetchOAuthRequestToken
    response = self.http_client.request('GET', str(request_token_url))
  File "/usr/lib/python2.6/site-packages/atom/http.py", line 132, in request
    connection = self._prepare_connection(url, all_headers)
  File "/usr/lib/python2.6/site-packages/atom/http.py", line 240, in _prepare_connection
    p_sock.connect((proxy_url.host, int(proxy_url.port)))
  File "<string>", line 1, in connect
TypeError: coercing to Unicode: need string or buffer, NoneType found

I have set the proxy in the env variables (both http and https)

Original issue reported on code.google.com by [email protected] on 18 Jun 2010 at 9:53

Missing boolean configuration option causes error

What steps will reproduce the problem?
1. Delete one of the boolean variables from the "prefs" file 
(~/.googlecl/prefs)
2. Run the program, with any service/task command

What is the expected output? What do you see instead?
Expect the task to run, instead get
{{{ 
Error in configuration file: argument of type 'bool' is not iterable
Quitting...
}}}


Original issue reported on code.google.com by [email protected] on 28 Apr 2010 at 5:10

youtube funky?

I /think/ this is a separate bug, but I noticed the youtube error right
after.  Hitting control-d caused this traceback:

> Traceback (most recent call last):
  File "./google-cl.py", line 287, in <module>
    main()
  File "./google-cl.py", line 275, in main
    run_interactive(parser)
  File "./google-cl.py", line 134, in run_interactive
    command_string = raw_input('> ')
EOFError

(As you're probably aware, ^d is EOF and is generally a way to get out of
interactive sessions).

Here's the youtube-specific part:

$ ./google-cl.py youtube list
No token for youtube
Traceback (most recent call last):
  File "./google-cl.py", line 287, in <module>
    main()
  File "./google-cl.py", line 281, in main
    run_once(options, args)
  File "./google-cl.py", line 200, in run_once
    util.try_login(client, options.user, options.password)
  File "src/googlecl/trunk/src/util.py", line 601, in try_login
    client.Login(email, password)
  File "src/googlecl/trunk/src/youtube/service.py", line 114, in Login
    with open(os.path.expanduser('~/google/devkey'), 'r') as devkey_file:
IOError: [Errno 2] No such file or directory: '[MY HOME
DIRECTORY]/google/devkey'


Original issue reported on code.google.com by [email protected] on 24 May 2010 at 7:54

-u not persistent?

Today googlecl keeps asking me for a username.  Seems like before it used to 
remember what I typed in last time.

Original issue reported on code.google.com by [email protected] on 14 Jun 2010 at 10:10

blogger post works from command line but breaks from interactive mode

$ google blogger post --tags "GoogleCL, awesome" --title "Test Post" "I'm
posting from the command line"
Please specify blog: myblog
$ google
> post --title "deleteme" "please delete"    
Traceback (most recent call last):
  File "/usr/bin/google", line 306, in <module>
    main()
  File "/usr/bin/google", line 292, in main
    run_interactive(parser)
  File "/usr/bin/google", line 138, in run_interactive
    run_once(options, args)
  File "/usr/bin/google", line 171, in run_once
    globals(), locals(), -1)
ImportError: No module named post.service

Original issue reported on code.google.com by [email protected] on 6 Jun 2010 at 2:59

$XDG_CONFIG_HOME

Instead of saving configuration to ~/.googlecl use $XDG_CONFIG_HOME as a base, 
and then no need for leading dot. Normally $XDG_CONFIG_HOME points to 
~/.config, so the actual config folder for googlecl would be:
~/.config/googlecl/

Also consider $XDG_DATA_HOME and $XDG_CACHE_HOME.

See:
http://www.freedesktop.org/wiki/Specifications/basedir-spec

Original issue reported on code.google.com by [email protected] on 18 Jun 2010 at 8:08

docs help broken

> docs help
Traceback (most recent call last):
  File "./google-cl.py", line 287, in <module>
    main()
  File "./google-cl.py", line 275, in main
    run_interactive(parser)
  File "./google-cl.py", line 144, in run_interactive
    run_once(options, args)
  File "./google-cl.py", line 175, in run_once
    service_module = import_service_module(service)
  File "./google-cl.py", line 93, in import_service_module
    return __import__(service+'.service', globals(), locals(), -1)
  File "/home/jholt/src/googlecl/trunk/src/docs/service.py", line 28, in
<module>
    import gdata.docs.client
ImportError: No module named client

Original issue reported on code.google.com by [email protected] on 24 May 2010 at 7:41

List album access levels

What steps will reproduce the problem?
1. google picasa list-albums

What is the expected output? What do you see instead?

I expect it to list every album (or at least the N it chooses to show shouldn't 
look arbitrarily-chosen).

Instead it shows me three albums, something like the 6th, 13th, and 7th in the 
order they appear in picasaweb.google.com.

What version of the product are you using? On what operating system?

~$ google --version
google 0.9.2
~$ uname -a
Linux philsnow-hostname-redacted 2.6.32-22-generic #36-Ubuntu SMP Thu Jun 3 
19:31:57 UTC 2010 x86_64 GNU/Linux


Please provide any additional information below.

Original issue reported on code.google.com by philsnow on 16 Jun 2010 at 8:41

hardy laptop dependency problem

What steps will reproduce the problem?
1. Download on goobuntu laptop
2. Try to install.


What is the expected output? What do you see instead?

It says that it depends on python-support (>= 0.90.0) but on system only 
0.7.5ubuntu1.


What version of the product are you using? On what operating system?


Please provide any additional information below.

Original issue reported on code.google.com by [email protected] on 17 Jun 2010 at 1:33

  • Merged into: #39

Add support for Buzz

Add support for Google Buzz.
- posting (and editing a post)
- commenting (and editing a comment)
- liking/unliking
- searching

Original issue reported on code.google.com by [email protected] on 17 Jun 2010 at 11:08

Blog post fails silently?

$ ./google.py blogger tag --title "My Programming Post" --tags "Python, 
GoogleCL"
Please specify blog: myblogname
$

But I don't see it showing up.  Maybe it could show me a list of blogs 
before asking which, so I know what to type?

Original issue reported on code.google.com by [email protected] on 4 Jun 2010 at 6:30

Add Apache 2.0 license

There needs to be a COPYING file (or however it is apache2 does it) in svn.
 The license docs should be able to tell you what you need to do to
properly mark everything.

Original issue reported on code.google.com by [email protected] on 6 Jun 2010 at 1:57

Add Gmail as a service

- Allow sending, reading, adding attachments

Original issue reported on code.google.com by ian.dees on 18 Jun 2010 at 9:30

  • Merged into: #40

Argument conventions

I assumed this would download my "ponies" album, but instead it tried to 
download 
all my albums into a directory called "ponies":

$ ./google-cl.py picasa get ponies

I suppose I'm more used to having an optional output directory (-o/--output?) 
and 
a positional album name than the reverse.

A little pontification on the notion of downloading all albums: I have around a 
gigabyte of images. If downloading everything happened in kind of an rsync way, 
so that it doesn't re-download images already on disk, then it could be really 
useful to have it automatically synchronize.  I suppose there are also plenty 
of 
times when someone would want to do a one-off download of everything.  But in 
both cases it probably isn't unreasonable to make it explicit that I want 
everything: --everything?  It was cool that it could recursively snarf 
everything, but somewhat surprising that it was the default.

Original issue reported on code.google.com by [email protected] on 5 May 2010 at 9:44

Adding google calendar entries uses timezone of calendar web app not of submitting host

What steps will reproduce the problem?
1. Use calendar app in Paris converting timezone of web app to France.
2. Travel back to England, converting timezone of laptop to England
3. Add event at a specific time.

What is the expected output? What do you see instead?
I expect to see the event added at the time at which I specified it.  Instead 
it gets added an hour earlier.

What version of the product are you using? On what operating system?
google 0.9.5/Snow Leopard

Please provide any additional information below.
It would probably work for other time zones as well.

Original issue reported on code.google.com by [email protected] on 18 Jun 2010 at 10:29

Youtube error

$ ./google youtube post -u credentiality /cf/DCIM/100EOS5D/MVI_1715.MOV
Please specify category: Education
Traceback (most recent call last):
  File "./google", line 345, in <module>
    main()
  File "./google", line 339, in main
    run_once(options, args)
  File "./google", line 246, in run_once
    task.run(client, options, args)
  File "src/googlecl/trunk/src/googlecl/youtube/service.py", line 212, in _run_post
    tags=options.tags, category=options.category)
  File "src/googlecl/trunk/src/googlecl/youtube/service.py", line 118, in post_videos
    category=self.build_category(category))
AttributeError: 'YouTubeServiceCL' object has no attribute 'build_category'

Original issue reported on code.google.com by [email protected] on 14 Jun 2010 at 8:04

Calendar delete ignores command line option?

$ google.py calendar delete "Dinner party with George"
Please specify query: Dinner party with George
Are you SURE you want to delete event "Dinner party with George"? (y/N): y

Original issue reported on code.google.com by [email protected] on 4 Jun 2010 at 7:33

  • Merged into: #4

oauth bugs

-p seems to no longer work.  export BROWSER=/usr/bin/firefox also didn't seem 
to do anything.

Does the oauth stuff have to happen more than once?  can't have scripts that 
break every few days and require manual re-login from a browser, but just doing 
it once is probably okay.

Original issue reported on code.google.com by [email protected] on 13 Jun 2010 at 4:29

send xoauth_displayname

What steps will reproduce the problem?
1. Start a command for a new user
2. Follow the link
3. On the approval page notice this message: "The site anonymous is requesting 
access to your Google Account for the product(s) listed below."


What is the expected output? What do you see instead?

Instead of "site anonymous" it should say something like "application googlecl".


What version of the product are you using? On what operating system?

0.9.5, Hardy 64


Please provide any additional information below.

You should probably use the xoauth_displayname parameter. See section 
"Identifying your application to users":
http://code.google.com/apis/accounts/docs/OAuth.html#tokensIdentifying

Original issue reported on code.google.com by [email protected] on 18 Jun 2010 at 7:53

blogger post silently fails?

I tried the blogger post example and it silently failed.  Maybe because I 
was logged into a different account in which the blog I specified doesn't 
exist?

Original issue reported on code.google.com by [email protected] on 4 Jun 2010 at 7:30

google youtube list without a linked youtube account fails with stack trace.

What steps will reproduce the problem?
1. google youtube list
2. authenticate

What is the expected output? What do you see instead?

macbook:bin ashley$ google youtube list
Traceback (most recent call last):
  File "/usr/local/bin/google", line 448, in <module>
    main()
  File "/usr/local/bin/google", line 442, in main
    run_once(options, args)
  File "/usr/local/bin/google", line 307, in run_once
    token_valid = client.IsTokenValid()
  File "/Library/Python/2.6/site-packages/googlecl/youtube/service.py", line 98, in is_token_valid
    return googlecl.service.BaseServiceCL.IsTokenValid(self, test_uri)
  File "/Library/Python/2.6/site-packages/googlecl/service.py", line 170, in is_token_valid
    self.Get(test_uri)
  File "/Library/Python/2.6/site-packages/gdata/service.py", line 1108, in Get
    'reason': server_response.reason, 'body': result_body}
gdata.service.RequestError: {'status': 401, 'body': 
'<HTML>\n<HEAD>\n<TITLE>NoLinkedYouTubeAccount</TITLE>\n</HEAD>\n<BODY 
BGCOLOR="#FFFFFF" TEXT="#000000">\n<H1>NoLinkedYouTubeAccount</H1>\n<H2>Error 
401</H2>\n</BODY>\n</HTML>\n', 'reason': 'NoLinkedYouTubeAccount'}

What version of the product are you using? On what operating system?

google 0.9.5 / Snow Leopard

Please provide any additional information below.
I don't have a YouTube account.

Original issue reported on code.google.com by [email protected] on 18 Jun 2010 at 9:59

No list of tasks (help text is also funky)

$ ./google-cl.py 
> ?
Welcome to the google-cl super alpha
('The only thing working so far is picasa, ', 'so give that a shot by entering 
picasa at the prompt')
('Quitting also works, despite what your parents told you.', ' Enter quit to 
exit.')
> help
Welcome to the google-cl super alpha
('The only thing working so far is picasa, ', 'so give that a shot by entering 
picasa at the prompt')
('Quitting also works, despite what your parents told you.', ' Enter quit to 
exit.')
> picasa
pop from empty list
Must specify at least a service and a task!

Original issue reported on code.google.com by [email protected] on 5 May 2010 at 8:58

googlecl/docs: DeprecationWarning: Please use Upload instead

googlecl-0.9.2
python-gdata 2.0.10

$ google docs upload hello.txt
Loading hello.txt
/usr/lib/python2.5/site-packages/googlecl/docs/service.py:270: 
DeprecationWarning: Please use Upload instead
  entry = self.UploadDocument(media, title)
Upload success! 

Original issue reported on code.google.com by [email protected] on 17 Jun 2010 at 1:13

blogger posting requires -t


This fails, but if I add a -t "foo" it works.

$ ./google.py blogger post -n "Another test post" "Wow, I love posting to 
blogger from the command line"
Traceback (most recent call last):
  File "./google.py", line 290, in <module>
    main()
  File "./google.py", line 284, in main
    run_once(options, args)
  File "./google.py", line 209, in run_once
    task.run(client, options, args)
  File "src/googlecl/trunk/src/googlecl/blogger/service.py", line 177, in 
_run_post
    client.LabelPosts([entry], options.tags)
  File "src/googlecl/trunk/src/googlecl/blogger/service.py", line 119, in 
label_posts
    remove_set, add_set, replace_tags = util.generate_tag_sets(tags)
  File "src/googlecl/trunk/src/util.py", line 462, in generate_tag_sets
    tags = tags.replace(', ', ',')
AttributeError: 'NoneType' object has no attribute 'replace'


Original issue reported on code.google.com by [email protected] on 28 May 2010 at 1:10

Automatic focus switch for user authentication

When required to authorize GoogleCL via the web, automatically switch focus to 
the browser (if launched), and switch back to the prompt once the user has 
authenticated.

Some suggestions for gracefully solving this problem can be found here: 
http://sites.google.com/site/oauthgoog/oauth-practices/auto-detecting-approval

Original issue reported on code.google.com by [email protected] on 17 Jun 2010 at 12:20

blogger post always tries to open files?

It looks like I can say either

 ./google.py blogger post --tags "GoogleCL, awesome" "I'm posting from the 
command line"

./google.py blogger post blogpost.txt 

Does that mean it looked for a file called "I'm posting from the command 
line"?  It's neat that it's intuitive like that, but potentially surprising 
and dangerous if somebody decided to, say, make a blog post whose text is 
just "/dev/urandom"...

Original issue reported on code.google.com by [email protected] on 4 Jun 2010 at 6:46

Support partial feeds and entries

Description here: 
http://code.google.com/apis/gdata/docs/2.0/basics.html#PartialResponse

I think this is slowly making its way into the gdata-python-client, but it 
would be really handy, seeing as we frequently request gobs of entries and only 
use a bit of the data retrieved.

Original issue reported on code.google.com by [email protected] on 16 Jun 2010 at 10:25

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.