abakan-zz / ablog Goto Github PK
View Code? Open in Web Editor NEWABlog for blogging with Sphinx
Home Page: ablog.readthedocs.org
License: Other
ABlog for blogging with Sphinx
Home Page: ablog.readthedocs.org
License: Other
I sometimes write several posts at once. It would like to have them in one file. For example::
Page title
==========
First title
-----------
.. post:: 21.07.2014 12.00
:tags: friends
Blabla
Second title
-----------
.. post:: 21.07.2014 12.00
:tags: friends
Blablabla
This currently is not supported. It leads to a warning::
WARNING: multiple post directives found, first one is considered
Enable formatting of items in post lists. Post list should accept options for date and item formatting
.. postlist: 5
:date: %b %d
:format: {date} - {title} by {author} in {category}
:format:
should recognize date
, title
, author
, category
, language
, and tags
keys.:date:
should default to post_date_format_short
Post title is shown twice in feeds, once as title of the post and then as part of post content (when feeds contain full text post). Remove the title from the copy of document or section.
Ablog deploy gives an error when used for the first time: "at least specify master while pushing"
I am guessing you have to use "git push origin master" instead of "git push".
I resolved it by cd username.github.io && git push origin master
In development, the following bad link is always created.
For example:
http://127.0.0.1:8000/posts/opam-package-checklist/True
Any clue as to why this is happening?
EDIT:
In the source this is the following link:
<link href="True" rel="stylesheet">
Issue: sphinx-doc/sphinx/issues/2625
I'm using ablog
and trying to add some meta tags for each post using the following:
.. meta::
:keywords: custom meta
.. post:: Feb 8, 2016
:tags: Tag1, Tag2
:category: Blog
Blog content
Hello from document
================================
some text in here
When I use the meta
directive, I'm throw the following (rather vague) error:
$ make html
sphinx-build -b html -d build/doctrees source build/html
Running Sphinx v1.4.2
Initializing Spelling Checker
loading pickled environment... done
building [mo]: targets for 0 po files that are out of date
building [html]: targets for 1 source files that are out of date
updating environment: 0 added, 1 changed, 0 removed
reading sources... [100%] document
looking for now-outdated files... none found
pickling environment...
Exception occurred:
File "/usr/local/lib/python2.7/site-packages/sphinx/environment.py", line 136, in topickle
pickle.dump(self, picklefile, pickle.HIGHEST_PROTOCOL)
PicklingError: Can't pickle <class 'docutils.parsers.rst.directives.html.meta'>: attribute lookup docutils.parsers.rst.directives.html.meta failed
The full traceback has been saved in /var/folders/jy/sqr_5svd1dz6f9d6zzw_bwvh0000gn/T/sphinx-err-w6Uk50.log, if you want to report the issue to the developers.
Please also report this if it was a user error, so that a better error message can be provided next time.
A bug report can be filed in the tracker at <https://github.com/sphinx-doc/sphinx/issues>. Thanks!
make: *** [html] Error 1
Please read the issue on sphinx for more details: sphinx-doc/sphinx/issues/2625
Any ideas on an easy fix? I can't even find the problem.
I tested this on a brand new project with sphinx-quickstart
and ablog, it's definatley an issue in ablog, but I couldn't track down what.
It seems like sphinx is trying to serialize all the meta data to write to disk, but it's failing to do so with ablog
(specifically the post
directive), somehow we have to make the meta data stored within the sphinx environment picklable
(serializable).
I'm not really a python developer (well.. I think I can call myself a noob now), but I'm struggling to traceback the issue.
I thought it could be related to this line, but again, not sure.
https://github.com/abakan/ablog/blob/devel/ablog/post.py#L223
Hey, I'm using this for my blog, it's awesome, I even managed to write a plugin which inserts a "bar" under the first header of each section with the date, tags and author.
I wanted to further style the postlist
directive, I noticed everything is generated via nodes, could we perhaps replace the node generation with rendering a jinja template?
Like all other templates, this one should be able to be overridden by the user, we'd use this for the homepage most probably, so it would be nice to be able to style it as the user wishes.
https://github.com/abakan/ablog/blob/devel/ablog/post.py#L370
This is a snippet of my plugin, inside of creating new nodes, just render a template.
Could this be done?
with open(fName, 'rb') as f:
try:
# Render our template with our context
template = Template(f.read())
context = {
'post': post,
'ablog': blogObject,
'post_date_format': blogObject.__getattr__('post_date_format')
}
# Add our pathto extension for jinja rendering
htmlBuilder = StandaloneHTMLBuilder(app)
def pathto(otheruri, resource=False, baseuri=htmlBuilder.get_target_uri(post.docname)):
if resource and '://' in otheruri:
return otheruri
elif not resource:
otheruri = htmlBuilder.get_target_uri(otheruri)
return relative_uri(baseuri, otheruri) or '#'
else:
return '/' + posixpath.join(app.virtual_staticdir, otheruri)
context['pathto'] = pathto
context['hasdoc'] = lambda name: name in app.env.all_docs
context['toctree'] = lambda **kw: app._get_local_toctree(post.docname, **kw)
new_content = template.render(context)
# Causes error, research what this is used for
# html = publish_string(source=new_content, writer_name='html')
markup = jinja2.Markup(new_content)
attributes = {'format': 'html'}
node = nodes.raw('', markup, **attributes)
# exit, we have our template and node
return node
except Exception as e:
msgList = (Fore.RED, sys.exc_info()[0], e.message, post_bar_html_template, Style.RESET_ALL)
app.warn("%sUnexpected error: %s, %s in %s %s" % msgList)
return
Thanks! Awesome project! - I love sphinx! I learned a lot from this extension. Thanks! 👍
Hi Ahmet, you're doing a fantastic job with 'ablog'. Keep on!
I'm having a problem with urls in atom feeds: It works if I have a post ./blog/coolpost/index.rst but it doesn't if I have ./blog/coolpost.rst
The problem is that in the feed the url is ./blog/coolpost and the '.html' is missing. I guess what's missing is a call to self.get_target_uri(otheruri) in the Sphinx builders/html.py as the pathto() function is doing it.
What do you think?
I don't understand why ablog does this.
I've been profiling ablog runs, and it seems to be reasonably expensive, and I'm not clear on the inspiration of this feature.
Reverse the order of links to archives pages in archives.html
so that most recent year is at the top.
Have an option to include the full post text in the RSS feed.
I'm trying to build cyrilic article like this:
.. post:: Apr 15, 2014
:tags: earth, love, peace
:category: python
:language: ru
Привет Мир!
===========
...
But getting error:
File "/home/user/.virtualenvs/blog/local/lib/python2.7/site-packages/sphinx/application.py", line 408, in emit
results.append(callback(self, *args))
File "/home/user/.virtualenvs/blog/local/lib/python2.7/site-packages/ablog/post.py", line 411, in process_postlist
emp.append(nodes.Text(str(item)))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 5-11: ordinal not in range(128)
I started getting this error suddenly, the difference seems to be going from sphinx 1.4.9 to 1.5. Seems the blog
path has not been created in the output path (docsbuild
). The open
call fails because it tries to open blog/atom.xml
but the blog path does not exist. Maybe some implicit assumption in ablog is violated in 1.5.
Traceback (most recent call last):
File "/home/travis/build/VUnit/vunit/.tox/py27-docs/lib/python2.7/site-packages/sphinx/cmdline.py", line 296, in main
app.build(opts.force_all, filenames)
File "/home/travis/build/VUnit/vunit/.tox/py27-docs/lib/python2.7/site-packages/sphinx/application.py", line 327, in build
self.builder.build_all()
File "/home/travis/build/VUnit/vunit/.tox/py27-docs/lib/python2.7/site-packages/sphinx/builders/__init__.py", line 211, in build_all
self.build(None, summary='all source files', method='all')
File "/home/travis/build/VUnit/vunit/.tox/py27-docs/lib/python2.7/site-packages/sphinx/builders/__init__.py", line 325, in build
self.finish()
File "/home/travis/build/VUnit/vunit/.tox/py27-docs/lib/python2.7/site-packages/sphinx/builders/html.py", line 469, in finish
self.finish_tasks.add_task(self.gen_additional_pages)
File "/home/travis/build/VUnit/vunit/.tox/py27-docs/lib/python2.7/site-packages/sphinx/util/parallel.py", line 40, in add_task
res = task_func()
File "/home/travis/build/VUnit/vunit/.tox/py27-docs/lib/python2.7/site-packages/sphinx/builders/html.py", line 494, in gen_additional_pages
for pagename, context, template in pagelist:
File "/home/travis/build/VUnit/vunit/.tox/py27-docs/lib/python2.7/site-packages/ablog/post.py", line 660, in generate_atom_feeds
with open(feed_path, 'w') as out:
IOError: [Errno 2] No such file or directory: u'/home/travis/build/VUnit/vunit/.tox/py27-docs/tmp/docsbuild/blog/atom.xml'
I just want to align postlist dates at right side and can't since they is not wrapped to any tags. Also HTML in postlist.format is escaped. So maybe it's possible to allow html in format or just wrap each thing like {date}
to span
with class?
If an RST page is marked with .. post::, using any cross-referencing syntax in the first paragraph of the post will produce an exception during the build process.
Error message (the relevant part): "NotImplementedError: Unknown node: pending_xref"
If the reference is used
Tested with sphinx 1.2 and 1.3.x
I'm interested in doing an alternate template, but I fear this will mean essentially forking ABlog. Any plans for a configuration option or plugin approach to use external packages for a template?
By default disqus had a problem connecting to their server.
I saw that if I remove "disqus_title", " disqus_URL" and "disqus_identifier" from templates/page.html, it worked fine.
Please look into it
Is there a way to use the font-awesome icons in post or page content?
Hi Ahmet,
Transifex offers translation services for opensource community projects for free. Nikola uses that: http://getnikola.com/ and https://www.transifex.com/projects/p/nikola/
I prefer ablog
very much! Maybe you want to place ablog for translation on Transifex as well?
I am getting a KeyError on the key 'refdoc' in ablog. See the attached error file.
Is there a work-around?
Ablog works correctly when compiled under Windows
using the ReadTheDoc theme
.
However, when compiling the same RST
files with Ablog on ReadTheDoc server
, we get this error message:
Traceback (most recent call last):
File "/home/docs/checkouts/readthedocs.org/user_builds/sphinx-1/envs/latest/local/lib/python2.7/site-packages/sphinx/cmdline.py", line 254, in main
app.build(force_all, filenames)
File "/home/docs/checkouts/readthedocs.org/user_builds/sphinx-1/envs/latest/local/lib/python2.7/site-packages/sphinx/application.py", line 212, in build
self.builder.build_update()
File "/home/docs/checkouts/readthedocs.org/user_builds/sphinx-1/envs/latest/local/lib/python2.7/site-packages/sphinx/builders/__init__.py", line 214, in build_update
'out of date' % len(to_build))
File "/home/docs/checkouts/readthedocs.org/user_builds/sphinx-1/envs/latest/local/lib/python2.7/site-packages/sphinx/builders/__init__.py", line 256, in build
self.env.topickle(path.join(self.doctreedir, ENV_PICKLE_FILENAME))
File "/home/docs/checkouts/readthedocs.org/user_builds/sphinx-1/envs/latest/local/lib/python2.7/site-packages/sphinx/environment.py", line 146, in topickle
pickle.dump(self, picklefile, pickle.HIGHEST_PROTOCOL)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
Exception occurred:
File "/home/docs/checkouts/readthedocs.org/user_builds/sphinx-1/envs/latest/local/lib/python2.7/site-packages/sphinx/environment.py", line 146, in topickle
pickle.dump(self, picklefile, pickle.HIGHEST_PROTOCOL)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
The full traceback has been saved in /tmp/sphinx-err-VjNexP.log
We are using a requirements.txt
file that includes ablog
and alabaster
and werkzeug
.
What are we doing wrong?
Hi Ahmet,
this is just to let you know, that I'm trying to spread the news about ablog: http://mbless.de/blog/2014/11/19/basic-installation-of-sphinx-and-ablog.html
I'm thankful every day for your ablog!
I got such error when I was trying to install ablog
% pip install ablog
Downloading/unpacking ablog
Running setup.py egg_info for package ablog
Traceback (most recent call last):
File "<string>", line 14, in <module>
File "/tmp/build/ablog/setup.py", line 62, in <module>
'ablog{} = ablog.commands:ablog_main'.format(sys.version_info[0]),
ValueError: zero length field name in format
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 14, in <module>
File "/tmp/build/ablog/setup.py", line 62, in <module>
'ablog{} = ablog.commands:ablog_main'.format(sys.version_info[0]),
ValueError: zero length field name in format
----------------------------------------
Command python setup.py egg_info failed with error code 1
Storing complete log in /home/ytj/.pip/pip.log
I guess this is because ablog doesn't support python2.6 (all dependencies and they support python 2.6+ and 3.3+, so I think this is ablog's issue). It would be better if we could specific the supported python version in README.
If github_pages
is not set in conf.py
an AttributeError is raised:
$ ablog deploy
Traceback (most recent call last):
File "/usr/local/bin/ablog", line 9, in <module>
load_entry_point('ablog==0.8.0', 'console_scripts', 'ablog')()
File "/usr/local/lib/python2.7/dist-packages/ablog/commands.py", line 401, in ablog_main
namespace.func(**namespace.__dict__)
File "/usr/local/lib/python2.7/dist-packages/ablog/commands.py", line 318, in ablog_deploy
github_pages = (github_pages or getattr(conf, 'github_pages') or None)
AttributeError: 'module' object has no attribute 'github_pages'
Having an issue with updating our blog because ablog is breaking when built with the Sphinx JSON backend. You can see this here:
https://readthedocs.org/projects/readthedocs-blog/builds/3323603/
It appears that the logic here is quite naive: https://github.com/abakan/ablog/blob/master/ablog/post.py#L340 -- I wish there was a better way to say that a Sphinx backend builder generates HTML. This should really be an attribute on the builder, instead of a hueristic on the builder name. Perhaps we should add this to Sphinx.
Try running $ ablog serve
followed by C-c
and $ ablog serve
again. You will usually get:
Traceback (most recent call last):
File "/usr/bin/ablog", line 9, in <module>
load_entry_point('ablog==0.8.3', 'console_scripts', 'ablog')()
File "/usr/lib/python3.5/site-packages/ablog-0.8.3-py3.5.egg/ablog/commands.py", line 408, in ablog_main
namespace.func(**namespace.__dict__)
File "/usr/lib/python3.5/site-packages/ablog-0.8.3-py3.5.egg/ablog/commands.py", line 203, in ablog_serve
httpd = socketserver.TCPServer(("", port), Handler)
File "/usr/lib/python3.5/socketserver.py", line 443, in __init__
self.server_bind()
File "/usr/lib/python3.5/socketserver.py", line 457, in server_bind
self.socket.bind(self.server_address)
OSError: [Errno 98] Address already in use
Quite annoying for development...
Please let me know how to resolve the issue.
Python complains that needs overwrite existing files.
Is it possible to paginate the post listing pages (blog main, categories, tags)? I currently have over 300 posts, so it makes for very long pages!
Add option to disable bullet style listing of PostList (sometimes I just want to show my certain posts but without a list!)
Excerpts should end with ellipses.
"ablog post hello-world" should by default make a new file hello-world with a .rst extension, and with the title of the new post as Hello World, that is, the file name. Right now it is just New Post. (Why? Because it is a better experience)
Just suggestions. Wonderful tool already, and I like python. If you don't have time for implementing this, I can try doing it if you like.
Hi, @abakan, thanks for excellent blog engine. It will be good to have sitemap generator.
I've created temporary solution in my blog: https://bitbucket.org/emacsway/emacsway/src/default/_sitemaps.py
Add :language:
option to post
directive, that works similar to :author:
and :location:
options, that is:
{'de': 'Deutsch'}
.This may be satisfactory, but having a standard mapping from language codes to language names and then letting the user to overwrite these display names could be useful. What would be the best way to get this?
@marble what do you think?
First let me say thanks for the great blog engine! I was using Nikola, but I found it awkward switching between using Nikola for blog content Sphinx for documentation. So I believe ablog will be a great tool for me.
Now my question: how can I get pages that have the same content as the html_sidebars tagcloud.html
, categories.html
, and archives.html
? I know that each one has their corresponding generated page, but what I would like is a page that has the same summary content as is placed in the sidebar. I believe that doing so would be a simple exercise with sphinx customization and templating, but, unfortunately, that is beyond my skill level right now. (This is another reason why I like ablog, skills I learn for the blogging engine will equally apply for my core sphinx usage.)
Thanks,
Phil
When all tags have the same relative size, they are displayed using the smallest size option ('-1'). When difference between sizes is smaller than the cloud size, a smaller range should be used. If only 1 size, CSS style -3
should be selected.
For example tag Жириновский
, when calling tag.docname
it return empty string. I think problem in this line https://github.com/abakan/ablog/blob/master/ablog/blog.py#L34
string = re.sub(r'[^\w\s-]', '', string).strip().lower()
When adding ..update:: directive in a post using the date format as per defined in conf.py, e.g.,
.. update:: Dec 04, 2015
Added snapshots performance benchmark and analysis :ref:`sec-behaviour-of-vsan-vm-snapshots`.
ablog produced the following errors (note that this only occurs if I add ..update::
directive. The same date format works without issue under ..post::
directive),
Running Sphinx v1.3.3
Initializing Basicstrap theme directives
loading pickled environment... not yet created
building [mo]: targets for 0 po files that are out of date
building [dirhtml]: targets for 14 source files that are out of date
updating environment: 14 added, 0 changed, 0 removed
reading sources... [100%] vmware-snapshot-overview
Exception occurred:
File "/home/lxcuser/sphinx-doc/lib/python3.4/site-packages/ablog/post.py", line 187, in _get_update_dates
(update_node['date'], docname, post_date_format))
ValueError: invalid post update date (Dec 04, 2015
Added snapshots performance benchmark and analysis :ref:`sec-behaviour-of-vsan-vm-snapshots`.) in vmware-snapshot-overview. Expected format: %b %d, %Y
The full traceback has been saved in /tmp/sphinx-err-hsqqb2_s.log, if you want to report the issue to the developers.
Please also report this if it was a user error, so that a better error message can be provided next time.
A bug report can be filed in the tracker at <https://github.com/sphinx-doc/sphinx/issues>. Thanks!
Attached is the actual error log produced by Sphinx
error.txt
This is a repost from a comment on the blog that is probably better captured here.
I have ~1600 posts, and noop rebuilds of my site with take about a minute, and I'd like to cut this way down.
My current theory (which is related to a feature request of sorts) is that generating the blog.html and feeds that must include the full content of the site are neither useful except as an export and taking a long time to aggregate generate in every build.
Is there (or could there be) a way to tweak the number of posts that appear in these archives/listings?
When installing ablog on a test linux server, one of my team mates is getting this error message.
Exception occurred:
File "/home/nutriben/virtualenvs/sphinx/lib/python3.3/site-packages/ablog/blog.py", line 228, in recent
num += 1
TypeError: unsupported operand type(s) for +=: 'NoneType' and 'int'
"nutriben" is the physical name of the site.
The test linx server is:
Are we doing something wrong, or is there a work around for this?
/gg
It would be awesome if there was a specific RSS feed for a specific tag and author. This is nice for including in Planets and other places that only want a subset of content (eg. only Python related posts)
Love the project, it's really well designed!
I'd really like to embed the list of blog posts with excerpts into a rst page. It would be great if the post list directive let you specify an excerpt style so that you get more than just a list.
Am trying to install Ablog under WIndows, but get the following error message.
# ablog (unknown version) from C:\bin\python\lib\site-packages\ablog\__init__.py
# alabaster (0.7.3) from C:\bin\python\lib\site-packages\alabaster\__init__.py
Traceback (most recent call last):
File "C:\bin\python\lib\site-packages\sphinx\cmdline.py", line 245, in main
app.build(opts.force_all, filenames)
File "C:\bin\python\lib\site-packages\sphinx\application.py", line 264, in build
self.builder.build_update()
File "C:\bin\python\lib\site-packages\sphinx\builders\__init__.py", line 245, in build_update
'out of date' % len(to_build))
File "C:\bin\python\lib\site-packages\sphinx\builders\__init__.py", line 319, in build
self.finish()
File "C:\bin\python\lib\site-packages\sphinx\builders\html.py", line 456, in finish
self.finish_tasks.add_task(self.gen_additional_pages)
File "C:\bin\python\lib\site-packages\sphinx\util\parallel.py", line 39, in add_task
res = task_func()
File "C:\bin\python\lib\site-packages\sphinx\builders\html.py", line 482, in gen_additional_pages
self.handle_page(pagename, context, template)
File "C:\bin\python\lib\site-packages\sphinx\builders\html.py", line 786, in handle_page
output = self.templates.render(templatename, ctx)
File "C:\bin\python\lib\site-packages\sphinx\jinja2glue.py", line 138, in render
return self.environment.get_template(template).render(context)
File "C:\bin\python\lib\site-packages\jinja2-2.7.3-py3.4.egg\jinja2\environment.py", line 791, in get_template
return self._load_template(name, self.make_globals(globals))
File "C:\bin\python\lib\site-packages\jinja2-2.7.3-py3.4.egg\jinja2\environment.py", line 765, in _load_template
template = self.loader.load(self, name, globals)
File "C:\bin\python\lib\site-packages\jinja2-2.7.3-py3.4.egg\jinja2\loaders.py", line 113, in load
source, filename, uptodate = self.get_source(environment, name)
File "C:\bin\python\lib\site-packages\sphinx\jinja2glue.py", line 159, in get_source
raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: catalog.html
My template path looks like this:
templates_path = [
'_templates',
'templates_path.append(ablog.get_html_templates_path())'
]
What should I do to correctly install ablog?
Thanks for your assistance.
/gg
postlist
directive lists more posts than specified. See index page of ablog documentation.
Context:
ablog (0.2.1)
alabaster (0.6.0)
docutils (0.12)
Jinja2 (2.7.3)
MarkupSafe (0.23)
pip (1.5.6)
Pygments (1.6)
setuptools (5.7)
Sphinx (1.2.3)
Werkzeug (0.9.6)
wsgiref (0.1.2)
Create default sphinx-doc, with 2 pages, make html
: links contain *.hml
extension;
Add ablog setup in conf.py (w/ or w/o alabaster), make html
: links contain no extension, e.g. link to firstpost.hml
shows as firstpost
.
Explicitly set html_file_suffix
to ".html"
- same (no extension);
Explicitly also set html_link_suffix
- still no extension in links.
Link file is created with *.html
extension.
We have the rule that "the title of a post is the title of the section where the post
directive occured, except if there is only one post in a document". This exception is probably necessary to be backward compatible with existing posts. But it disturbs me in new blogs. Can we make this exception optional? That is, a new configuration option which I suggest to name "always_post_with_section_header" which defaults to False.
Why I want this: I usually create one file per day, with the date as main header. In the morning I don't know how many blog entries I will write.
Example of a day with only one entry:
http://luc.saffre-rumma.net/_sources/blog/2014/0223.txt
And now every reference to this page uses the document title, for example:
http://luc.saffre-rumma.net/ab/tag/lino/
which -in my case- is not what i wanted.
Is it possible to define a separate rst
file to overwrite the ABlog generated tag page? There was hints in #31 that this might be in the works, but I didn't see what happened in that regard.
The headings of certain parts ("Archives", "Recent posts") should automatically be in the correct language. E.g. the prototype site on http://luc.saffre-rumma.net/ is in German, but they remain English.
I recommend the following links before getting started.
http://jinja.pocoo.org/docs/extensions/#newstyle-gettext
http://babel.edgewall.org/wiki/Documentation/messages.html
Getting a pickling error on RTD: https://readthedocs.org/builds/ablog/1368132/
Replaced Sphinx environment topickle
method with a dummy lambda function to circumvent this problem during development.
I cannot use ablog with Sphinx 1.6. It says "ImportError: cannot import name make_admonition in Sphinx 1.6".
I'd like to have a link to the blog page appear in the toctree, but I can't figure out how to do it. Is this possible?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.