phoe / clus-data Goto Github PK
View Code? Open in Web Editor NEWData for Common Lisp UltraSpec - http://phoe.tymoon.eu/clus/
Data for Common Lisp UltraSpec - http://phoe.tymoon.eu/clus/
13:57 < phoe> beach: so basically, a statement is a form whose return value is discarded by the evaluation context?
13:57 < phoe> s/form/expression/
13:58 < beach> No, form was right.
13:58 < beach> And, yes, that's a good definition.
13:58 < beach> The glossary doesn't have an entry for it, so you might want to add it to the CLUS.
This is best description of CLUS collaboration plans about CCLDoc add-ons that I can write. By no mean they is canonical list, I just collected and organized things about I talk and heard from wiser than me in CLUS matters folks. Also I don't know how realistic some points are or how much work to do it will be needed trying to realized it. I still try to fully understand my thread of work.
If someone need more information try contact community of CLUS on freenode #lisp, or Discord #clus-general. You can also read paper staying CLUS reason to be and aims. Unfortunately this paper is much outdated https://github.com/phoe/clus-data/blob/master/paper.pdf.
IMPORTANT
Statement of CLUS community now is: Content is a king! So now we are interested with creating web pages that have good CL content, giving it good look is not issue now. Because I have little idea how make web page look good, I decide do disregard this issue totally.
What we need to do with CCLDoc.
Create new tags for things like variable references, glossary entries, code blocks, diffrent kinds of result values, etc.
EXAMPLE
We want write something like
"Function {:cl:functions:some-function}"
which will expand to proper hyperlink to page with some-function.
We want create functions
(load-graph *SOMETHING*)
(output-graph *SOMETHING* "somewhere")
which creates not single HTML, but bunch of HTML pages hyper-linked with each others. This is connected with previous point, we want that all new defined tags expand in proper hyperlinks in this step.
To make former works, we need to define new class, call it GRAPH-DOCUMENT for now, that is related to class DOCUMENT in some not precised now way.
What we are doing now. There are two threads.
Create some proof of concept CCLDoc file (probably "Function GENSYM") that will used desired tags, which after we need to create.
a) Dig up into CCLDoc code enough to make creation of all add-ons possible.
b) Create documentation of code that we understand as side effect of point a).
Unfortunately I now only person that works on second thread. Time will show what I can do in current situation.
If English of this post is bad, give me a sign, I try to correct it.
(let* ((x (list 1 2 3)) (y (list* 4 5 6 x))) (mapcan #'identity (list x y)))
11:34 < beach> The Common Lisp HyperSpec is not great with links and such.
11:35 < beach> Frequently, the link goes to the glossary, and then there is no further link
to a chapter.
11:35 < phoe> To a chapter? What do you mean?
11:35 < beach> I would have to find an example.
11:36 < phoe> AFAIK you can always push the "up" button to land in the proper dictionary,
and the "up" button to land in the respective chapter.
11:36 < beach> Not from the glossary.
11:36 < beach> And that's the problem.
11:37 < beach> clhs string
11:37 < specbot> http://www.lispworks.com/reference/HyperSpec/Body/a_string.htm
11:37 < beach> Take this one:
http://www.lispworks.com/documentation/HyperSpec/Body/f_string.htm
11:38 < beach> Now click on the link so "sequence".
11:38 < beach> You end up in the glossary.
11:38 < phoe> "coerce can be used to convert a sequence of characters to a string."
11:38 < beach> And there is no way to get from the glossary to the sequence dictionary
or the sequence chapter.
This requires substantial work; I will be working on this once the standard dictionaries are parsed, possibly when importing the glossary.
17:13 < phoe> why the fuck http://clhs.lisp.se/Body/f_intern.htm has "Side Effects: None">
17:14 < phoe> this function is modifying the state of the package system
Hey,
I'm writing this to be more of an open letter than a GitHub issue as it's directed not directly at the project, but at the people who are using the project's outcome - possibly including you, if you're reading these words right now.
CLUS is a non-profit project that I'm doing in my spare time. At the moment of writing these words, it has already taken more than a hundred hours of my life, summing it all up. It's not a small amount of time, given that it needed and will further need to be composed between sleeping, studying, relaxing and other real life duties.
At the moment of writing this words, I have finished roughly parsing the dictionaries of the Common Lisp specification. It was a tough job and the biggest chunk of the specification, but was possibly the most important one to begin with and it gives me a solid foundation for working on more and more of the spec and CLUS in general.
If CLUS has perhaps somehow helped you with learning Lisp, if CLUS helped you find a good example for the symbol you couldn't understand, if CLUS is a worthwhile project that you want to support, if CLUS is something you've wanted to see for a long while, if CLUS - please leave your mark here in form of a finny image, an emoji, a pingback from your blog or website, a comment of what you like in CLUS, of how you feel it, of how it helped you or other people.
After these long days of working on CLUS, I know what I need the most to keep on working on it - it's signals from other people that what I'm doing is actually helping them in this or another way and that they consider my work worthwhile. I want to have a place that I can visit during the tough moments that sometimes come, where I can read about how the UltraSpec is changing our little Lisp world for the better, energize myself again and go back to work. That's why I ask you for a favor - if you want to leave a message, please do it here in any form you consider suitable.
~phoe
https://www.hexstreamsoft.com/articles/notes-tips-standard-common-lisp-symbols/
I got this link and I need to check this out someday.
Having some CL syntax highlightning (eg. rainbow parenthesis, and for :keywords
- the function symbols will mostly be links to other pages anyway!) would make the code blocks much easier to read, IMO.
Memo from beach: One item for CLUS. In the description of the functions for setting macro character or dispatch macro character, the only place to figure out the signature of the function seems to be in the example. It wouldn't hurt to state that signature explicitly.
The https://github.com/phoe/clus-data/blob/master/paper.pdf paper (currently in a sketch form, not formatted for submission just yet) is something that I would like to send to the ELS committee in order to give a presentation at the conference.
I would like to request help from the Lisp community, which most likely includes you as well. If you have some time - please review the linked paper. Its text is mostly ready with only the prologue needing to be done.
10:44 <phoe> There is a lot of work to be done that I do not really know how to automate.
10:44 <phoe> The biggest mistake I have made is - I have corrected various minor mistakes in the specification without noting what I have corrected and where.
10:44 <phoe> There is no diff done between the text of dpANS3 and CLUS.
10:44 <phoe> And this is something that needs to be fixed.
10:45 <phoe> The task is to produce, by any means, a list of all differences between the glossaries and dictionary pages of CLUS and dpANS3.
10:46 <phoe> Which is a sizeable and somewhat boring task that requires a lot of concentration or a sufficiently smart approach that can compare the two texts despire their different markup.10:47 <phoe> At least we do not need to take Examples and Notes into account as they are not a normative part of the specification. They're there purely for illustration and can be changed as we see fit.
10:49 <phoe> The approach is either to do it manually or to somehow automate it.
10:50 <phoe> In theory, we could simply copypaste the text from both the original specification and compare it to CLUS.
10:51 <phoe> Since Ctrl+C has the fascinating trait of stripping all formatting and only preserving text.10:53 <phoe> My idea is.
10:54 <phoe> Open up a text editor with two buffers.
10:54 <phoe> Copypaste a page from the original dpANS3 into one buffer.
10:54 <phoe> Copypaste a page from CLUS into the other buffer.
10:54 <phoe> Run diff.
10:55 <phoe> Inspect all differences.
10:55 <phoe> There will be garbage that comes from differences in formatting and such, but we will also be able to see the differences this way.
10:55 <phoe> But the diffing process can be automated through unix diff or any other emacslike diff tool.
10:56 <phoe> So the task that I'd say would be first is - find the proper way of dealing with this, create the method.
10:56 <phoe> I'll create a github issue about this and link it to you in a few hours.
10:56 <phoe> Hours, huh, minues.
10:56 <phoe> Once you have any kind of workable method, please post it there - and let's start rocking.
beach: Here is another item for CLUS: On the dictionary page for FORMAT, it doesn't say what stream is designated when T is given. It would be good to mention that.
We have the TeX source of MOP reference from chapters 5 and 6 of The Art of the Metaobject Protocol.
In order to be able to adapt it to CLUS, we need permission from the owner of the copyrights - it is © MIT Press 1991
I need someone to contact MIT Press, state what we are doing here and request the right to edit and hyperlink the aforementioned part in order to include it in the CLUS.
Additionally, we need to find out whether it is possible to relicense that part under public domain or another permissive license. If this is impossible, then we will need to rethink CLUS licensing.
Use
git config --global --replace-all core.whitespace "tab-in-indent,trailing-space"
to prevent further abomination.
Probably I will get around to writing the perl one-liner for doing this at some point.
I am impressed by your docs effort, it's very commendable,
I m trying to set up context specific documentation to help users easily start working with CL as soon as possible, hence i started my own doc version, at CL-Doc_consolidate i believe we can work together to provide a conducive environment for users to start working immediately
I know there are other similar docs, among them are outdated ones.
for the CL Doc Consolidate project what do you look out for ? how would you like it structured which can interest users?
16:10 < Bike> simple-array definition question. clhs make-array says that if :displaced-to is nil, the new array is not a
displaced array. but clhs array-displacement says it can, depending on implementation, return something for
arrays that were made with :displaced-to nil
16:10 < Bike> am i missing something here
16:15 < phoe> clhs make-array
16:15 < specbot> http://www.lispworks.com/reference/HyperSpec/Body/f_mk_ar.htm
16:15 < phoe> "If make-array is called with adjustable, fill-pointer, and displaced-to each nil, then the result is a simple
array."
16:16 < phoe> oh wait. wrong quote.
16:16 < beach> Bike: See the Cleanup issue.
16:17 < beach> Some implementations implicitly displace some arrays. (For example, adjustable arrays might be represented as
displaced arrays.) Permitting ARRAY-DISPLACEMENT to return non-NIL for those arrays allows those
implementations not to have to record some additional information in the array about whether an explicit
:DISPLACED-TO was provided.
16:17 < beach>
16:17 < beach>
16:17 < beach>
16:17 < beach> Oops, sorry.
16:18 < Bike> That's what I thought, but I don't understand how that's allowed by the definition of make-array
16:18 < Bike> which cleanup issue do you mean?
16:18 < beach> Bottom of the page on array-displacement.
16:19 < beach> If you pass :adjustable t, then the implementation may create a displaced array.
16:19 < beach> clhs array-displacement
16:19 < specbot> http://www.lispworks.com/reference/HyperSpec/Body/f_ar_dis.htm
16:19 < beach> http://www.lispworks.com/documentation/HyperSpec/Issues/iss132.htm
16:19 < beach> http://www.lispworks.com/documentation/HyperSpec/Issues/iss132_w.htm
16:22 < Bike> i understand that, what i don't get is the apparently clear prohibition on make-array: "If displaced-to is nil,
the array is not a displaced array."
16:23 < Bike> is that just wrong? or does "displaced array" not mean "array that returns something from array-displacement"?
16:23 < beach> The latter.
16:24 < Bike> oh, okay.
16:24 < beach> But, honestly, I think they got it wrong. The two pages were probably written at different times.
16:24 < Bike> okay.
16:25 < beach> Note to self: Define "displaced array" better in WSCL.
20:45 < didi> Sooo... I want to extend PUSH to I can push things to my user-defined object. Can I do it?
20:45 < didi> s/to/so
20:45 < Bike> nope.
20:45 < didi> Oh well.
20:46 < Bike> you could define your own macro called push.
20:47 < shka_> push is just for lists
20:48 < shka_> you could just use generic function
20:48 < shka_> as any interface
20:48 < shka_> so you have stack, you have queue, gf can be implemented for both
20:48 < didi> Hum. The manual description says "push item place" and "place---a place, the value of which may be any object. ".
20:49 < phoe> clhs push
20:49 < specbot> http://www.lispworks.com/reference/HyperSpec/Body/m_push.htm
20:49 < phoe> didi: read the Notes.
20:49 < didi> phoe: What do you mean?
20:50 < Bike> or just "prepends item to the list that is stored in place"
20:50 < phoe> it can be any object, sure thing
20:50 < phoe> (defvar *foo* 2)
20:50 < phoe> (push 4 *foo*)
20:50 < phoe> *foo* ;=> (4 . 2)
20:50 < Bike> what
20:50 < didi> Cool.
20:50 < phoe> shka_: so push isn't just for list
20:50 < phoe> lists
20:50 < Bike> well, that's new
20:50 < shka_> push prepends item to the list that is stored in place, stores the resulting list in place, and returns the list.
20:51 < shka_> i don't understand life anymore
20:51 < didi> Did you ever?
20:52 < shka_> are you talking to me?
20:52 < phoe> shka_: haha, yes, it's weird
20:52 < phoe> this page is contradicting itself
20:52 < shka_> YES!
07:59 < beach> "If recursive-p is true, the call to read is expected to be
made from within some function that itself has been called
from read or from a similar input function, rather than from
the top level. "
08:00 < phoe> Yep, that is what I quoted before.
08:00 < beach> Oh, sorry.
08:00 < beach> Missed it.
08:00 < phoe> Therefore it might be UB if there is no non-recursive READ on
the stack but you call a recursive READ.
08:00 < beach> So I take that to mean "the consequences are undefined if READ
is called with RECURSIVE-P being true at the top level".
https://github.com/can3p/ansi-spec - this one fully parses the spec,
although with errorshttps://github.com/can3p/dpANS-parser - this one
fails to parse full spec but correctly parses one of
the chapters and it's a matter of supporting commands
to render others. This one also produces a DOM-like
structure that is consumed then by https://github.com/can3p/dpANS-printer
Wouldn't it be nice to have a ; before the => in the hyperspec, so that one can copy parts of the examples into the repl without having to manually delete the "=> result ..." ?
Examples:
(ldb (byte 2 1) 10) => 1
(setq a (list 8)) => (8)
(setf (ldb (byte 2 1) (car a)) 1) => 1
<fouric> smokeink: i know it's not the hyperspec, but phoe's ultraspec separates out the output from the code: http://phoe.tymoon.eu/clus/doku.php?id=cl:functions:bit&redirect=1id=cl:functions:sbit
<Bike> clhs sbit
<specbot> http://www.lispworks.com/reference/HyperSpec/Body/f_bt_sb.htm
<fouric> would be nice to have clus in there
* fouric would add if he could figure out who owns specbot
<smokeink> the thing is , one would like to paste more than 1 form into the repl , and then play with them. Copy pasting from the ultraspec seems a little better as it doesn't copy any "=>" but it still copies those results, which one doesn't need when fiddling inside the repl
<fouric> oh, i get you
<smokeink> and this should work in an offline ultraspec as well (for example in .chm format)
<smokeink> or .txt format
<fouric> hm, i wonder how difficult it would be to implement a button that hides the output for easy copy-paste
<smokeink> So that one doesn't depend on the bloated browsers of these days & javascript and css and who-knows what
sorry if you ain't takin this kind of complaint but
the notes in with-accessors (ch7 objects), which you have copied from the clhs, have symbol-macrolet bindings like (variable-name () (accessor-name in)), but symbol-macrolet doesn't accept such syntax. it oughta be (variable-name (accessor-name in)).
By beach.
There is a general explanation in the Common Lisp HyperSpec that if a dictionary page mentions an object type, and nothing explicit is said on that page about what happens if the type is violated, then the consequences are undefined (or perhaps unspecified, I don't remember) if it is.
I think many people incorrectly assume that en error will be signaled. It would be worthwhile to remind the reader of such dictionary pages of these consequences. It could be in the form of a link to the general page (with an appropriate text), or a direct statement of what happens if the type is violated.
clhs append http://www.lispworks.com/reference/HyperSpec/Body/f_append.htm
Take that one for example. It says "Exceptional Situations: None". But if the arguments are not proper lists, then the consequences are undefined.
clhs 1.4.4.3
The ``Arguments and Values'' Section of a Dictionary Entry: http://www.lispworks.com/reference/HyperSpec/Body/01_ddc.htm
Notice: "Except as explicitly specified otherwise, the consequences are undefined if these type restrictions are violated."
Note from the CLUS maintainer: While this page explicitly says that there are no exceptional situations, notice that section 1.4.4.3 implies that, if the lists (all arguments except the last) are not proper lists, the consequences are undefined.
And if you compile a list of dictionary entries that need to be amended, I can work on such a list, and create specific notes.
https://github.com/UltraSpec is the future target for housing all UltraSpec data.
I'd like to ask for a feature.
Please provide some redirect service, so that URL.../<package:symbol-name>[:optional function/value/class/package/etc.]
redirects to the right thing, whereever it may hide in the docs; because then the keybinding in editors to open some HTML spec could do the right thing, whether it's a CL symbol or some other thing.
Regarding the dokuwiki restrictions - you could use some escape characteristic. Eg. --
as prefix means rest is base64
.
Thank you very much!
21:08 < theothor`> FWIW, https://dlmf.nist.gov/LaTeXML/ can parse the dpans repos with some tweaks.
Returns xml, and can parse directly to html. It struggles with the table macros, but I
think workarounds are possible. The xml could be parsed to a clos thing also, I guess?
Xach mentioned:
I think on function pages, Syntax or Arguments and Values should precede the short summary, because the summary references the arguments.
Since the description refers to terms in the syntax and arguments/values sections, i think they should precede it.
It doesn't make sense to me to see: "aref - references array at index" when there is no prior description of array and index.
What do you guys think about it?
16:33 < flip214> http://www.xach.com/naggum/articles/[email protected]
16:33 < flip214> and http://www.xach.com/naggum/articles/[email protected]
https://github.com/Hexstream/common-lisp-format-reference
Unlicensed, and therefore free for incorporating in the CLUS.
17:43 < Shinmera> It's a bit weird actually that function designators do not contain '(setf foo) despite '(setf foo) being a valid function name.
17:43 < beach> Indeed. Sounds like an omission.
14:40 < |3b|> phoe: if you are making an update of the spec, it would be nice to have a
fully expanded table of contents, including all section names. there are
lots of sections where i would recognize the name but can't remember
which chapter they are in
We obviously need a real-time way of communicating regarding this project. I have been considering Slack, Gitter and Discord and decided to use the last one as the Lisp Discord server seems somewhat lively.
There are two channels on Lisp Discord server where we'll be able to chat in real time.
I will also try to set up a IRC bridge with #clus
on Freenode for synchronization with non-Discordian people.
Discord link: https://discord.gg/9KNg9Pm
The old dpans2texi.el script, for converting the ANSI draft to Texinfo, includes some minor corrections to the draft. The author's site is no longer online, but the Internet Archive had the tarball, and I've put it up on GitHub for reference in case any of the corrections are worth incorporating into CLUS.
This is an omission in the standard. It states that Since eq is used only rarely in this specification, eql is the default predicate when none is mentioned explicitly.
but CASE, CCASE, ECASE allow the conditional execution of a body of forms in a clause that is selected by matching the test-key on the basis of its identity.
where the term identity is not defined. Common sense and examples state, though, that EQL should be the "official" predicate.
http://www.lispworks.com/documentation/lw71/CLHS/Body/f_mk_pkg.htm
Side Effects should state: The package system is modified.
As we know, accessor description in CLHS is often missleading, using accessor term exchangable with function (see slot-value function in CLHS). I consider this to be suboptimal approach.
I propose that every accessor should be always named as accessor and also include section describing how it may be implemented. For instance:
slot-value
*accessor:
**reader: function
**writer: may expand into function call
@rmhsilva make great job making diffs between CLHS and already done CL UltraSpec. Now we must check this diffs I find all mistekes in CLUS. This is some work to do, I probably can do that, but I need some help with things that I don't understand. I just need to know, if I need to marke things like that or not.
Current state of work is here https://github.com/KZiemian/clus-data/tree/master/diffs
I apologize for my english.
##############################
A) Maybe wrong TeX format of mathematical functions.
Example lines 39-49.
-Hyperbolic sine (e^x-e^-x)/2
-Hyperbolic cosine (e^x+e^-x)/2
-Hyperbolic tangent (e^x-e^-x)/(e^x+e^-x)
-Hyperbolic arc sine log (x+sqrt(1+x^2))
-Hyperbolic arc cosine 2 log (sqrt((x+1)/2) + sqrt((x-1)/2))
+ Hyperbolic sine (ex - e-x) / 2
+ Hyperbolic cosine (ex + e-x) / 2
+ Hyperbolic tangent (ex - e-x) / (ex + e-x)
+ Hyperbolic arc sine log(x + sqrt(1 + x2))
+ Hyperbolic arc cosine 2 * log(sqrt((x + 1) / 2) + sqrt((x - 1) / 2))
Hyperbolic arc tangent (log (1+x) - log (1-x))/2
B) New style of section references.
Example lines 100-103.
-log, sqrt, Section 12.1.3.3 (Rule of Float Substitutability)
+ Function LOG
+ Function SQRT
+ {\secref\FloatSubstitutability}
##############################
2) File cl:declarations:notinline.diff.
Do upacase names in orginal sholud stay that way or not?
Example lines 48-51.
- ;; The globally defined function DISPATCH should be open-coded,
- ;; if the implementation supports inlining, unless a NOTINLINE
- ;; declaration overrides this effect.
+The globally defined function dispatch should be open-coded, if the implementation supports inlining, unless a notinline declaration overrides this effect.
##############################
3) Often <TT>
line is missing. Notice this or not?
Example from file cl:constant_variables:boole-1.diff, line 9-13.
- (boole boole-eqv 17 15) => -31
-<TT>
+(boole boole-ior 1 16)
##############################
4) Similary to that, sometimes <A>
is missing.
Example from cl:declarations:dynamic-extent.diff, lines 7-8.
-(dynamic-extent [[var* | (function<A> fn)*]])
+ (dynamic-extent [[var* | (function fn)*]])
##############################
5) Changed code style.
Example. File cl:functions:adjoin.diff, lines 31-47
- (setq slist '()) => NIL
- (adjoin 'a slist) => (A)
- slist => NIL
- (setq slist (adjoin '(test-item 1) slist)) => ((TEST-ITEM 1))
- (adjoin '(test-item 1) slist) => ((TEST-ITEM 1) (TEST-ITEM 1))
- (adjoin '(test-item 1) slist test 'equal) => ((TEST-ITEM 1))
- (adjoin '(new-test-item 1) slist key #'cadr) => ((TEST-ITEM 1))
- (adjoin '(new-test-item 1) slist) => ((NEW-TEST-ITEM 1) (TEST-ITEM 1))
-<TT>
-Affected By None.
+(defparameter *slist* '())
+→
+*SLIST*
+(adjoin 'a *slist*)
+→
##############################
6) Changed style of symbols notations.
Examples from file cl:functions:adjust-array.diff
A) Quotations added
Example lines 42-43.
-A is not displaced before, but is displaced to C after the call
+''A'' is not displaced before, but is displaced to ''C'' after the call
B) Changed citation style.
Example line 63.
-<TT> A gets a new ``data region,''
Linia 65.
+A gets a new "data region,"
##############################
##############################
##############################
Some file were missed by diff and they diffs are empty. This is a list of that files NOT checked by us to this moment.
cl:functions:hash-table.p.diff
cl:types:restart.diff
cl:types:satisfies.diff
cl:types:standard-class.p.diff
cl:types:standard-object.diff
cl:types:storage-condition.diff
cl:functions:setf-table.p.diff
cl:functions:setf-class-name.diff
cl:types:control-error.diff
cl:types:division-by-zero.diff
cl:types:floating-point-inexact.diff
cl:types:floating-point-invalid-operation.diff
cl:types:floating-point-overflow.diff
cl:types:floating-point-underflow.diff
cl:types:generic-function.diff
cl:types:method-combination.diff
cl:types:program-error.diff
cl:types:restart.diff
cl:types:satisfies.diff
cl:types:standard-class.diff
cl:types:standard-object.diff
cl:types:sotrage-condition.diff
01:16 <mrottenkolber> possible relevant: https://github.com/inters/geneva#open-geneva and https://github.com/eugeneia/maxpc#maxpc the former
uses the latter to parse a markdown-like language, in case you want to see an involved example (grammar.lisp)
Hi !
I'd like to help :) but… it isn't clear to me how this works. Could you add build/dev info on the readme maybe ? Where do you get the sources from, how do you process, build and publish them ? How do we get a local working copy ? I see it uses Dokuwiki, I see content in .txt
files, but I'd like more pointers.
I tried installing Dokuwiki locally with no much success (copied to /var/www/dokuwiki
and accessing localhost/dokuwiki/install.php
gave a bunch of errors, looking like if php was not interpreted (apache is running) and it says that my data directory is not correctly secured). Is there an easier way ?
Thanks !
edit: allright, I got a Dokuwiki running with https://hub.docker.com/r/mprasil/dokuwiki/ Now I see folders in /var/www/dokuwiki/, but I don't know how to give it CLUS's pages…
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.