markkolich / blog Goto Github PK
View Code? Open in Web Editor NEWThis is my blog. There are many like it, but this one is mine.
Home Page: http://mark.koli.ch
License: MIT License
This is my blog. There are many like it, but this one is mine.
Home Page: http://mark.koli.ch
License: MIT License
Hi,
Could I leave my issue about proxytunnel here? I can't quite get it to work folllowing your blog.
vhost:
<VirtualHost *:443>
ServerName connect.website.com
RewriteEngine On
RewriteCond %{REQUEST_METHOD} !^CONNECT [NC]
RewriteRule ^/(.*)$ - [F,L]
ProxyRequests On
ProxyBadHeader Ignore
ProxyVia Full
AllowCONNECT 2234
<Proxy *>
Order deny,allow
Deny from all
</Proxy>
<ProxyMatch (connect\.website\.com)>
Order allow,deny
Allow from all
</ProxyMatch>
</VirtualHost>
.ssh/config:
Host hazcod
Hostname connect.website.com
Port 2234
ProtocolKeepAlives 30
ProxyCommand proxytunnel -X -p proxy.company.com:3128 -r connect.website.com:443 -d "%h:%p" -H "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32)"
Command:
nin@django:~$ ssh hazcod
Via proxy.company.com:3128 -> connect.website.com:443 -> connect.website.com:2234
analyze_HTTP: readline failed: Connection closed by remote host
ssh_exchange_identification: Connection closed by remote host
proxytunnel 1.9.0 (rev 242) and apache2 (2.4.10-10+deb8u3)
I have a Krups KM7000 experiencing the same issues that yours had, and your blog post is one of the top on DuckDuckGo, but http://mark.koli.ch/ appears to be down. Thanks for hosting the content on GitHub, as I was able to get just the info I needed. Cheers!
On the homepage, click the "Load More" button repeatedly and notice the same blog entry is added to the view multiple times.
Classic race condition w/ the async callbacks firing in response to GET:/api/blog.json
On machines under a heavy load, it may take > 2-seconds to parse a markdown file. And, according to this, the markdown parser timeout is configurable and defaults to 2-seconds:
https://github.com/sirthias/pegdown/blob/master/README.markdown#parsing-timeouts
Hence, you'll see spurious ParsingTimeoutException's when it takes longer than 2-seconds to parse a complicated Markdown blog post/entry.
03/08 11:04:41 DEBUG [curacao-response-42] c.k.b.e.MarkdownContent - Content was null: MarkdownContent(name="null", title="null", file="null")
03/08 11:04:42 DEBUG [curacao-response-41] c.k.b.e.MarkdownContent - Failed to get HTML from Markdown content.
org.parboiled.errors.ParserRuntimeException: Error while parsing action 'Root/Sequence/ZeroOrMore/Sequence/Block/FirstOf/Table/Sequence/Optional/Sequence/NodeSequence/Sequence/TableRow/Sequence/OneOrMore/Sequence/TableCell/Sequence/OneOrMore/Sequence/Inline/Inline_Action1' at input position (line 155, pos 513):
Now that you know the Content-Type, you can base-64 encode the image payload and assemble a valid "data" URI string. Don't bother writing a base-64 encoder from scratch, since there are many wonderful open-source implementations available for free. The most popular seems to be in the [Apache Commons Codec](http://commons.apache.org/codec/) library. Specifically, take a peek at [org.apache.commons.codec.binary.Base64](http://commons.apache.org/codec/api-release/org/apache/commons/codec/binary/Base64.html).
^
org.pegdown.ParsingTimeoutException
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:366) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.MemoMismatchesMatcher.match(MemoMismatchesMatcher.java:41) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.OneOrMoreMatcher.match(OneOrMoreMatcher.java:43) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.OneOrMoreMatcher.match(OneOrMoreMatcher.java:38) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.VarFramingMatcher.match(VarFramingMatcher.java:44) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.OptionalMatcher.match(OptionalMatcher.java:36) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.VarFramingMatcher.match(VarFramingMatcher.java:44) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.FirstOfMatcher.match(FirstOfMatcher.java:41) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.ZeroOrMoreMatcher.match(ZeroOrMoreMatcher.java:39) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.run(BasicParseRunner.java:72) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.ReportingParseRunner.runBasicMatch(ReportingParseRunner.java:86) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.ReportingParseRunner.run(ReportingParseRunner.java:66) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.AbstractParseRunner.run(AbstractParseRunner.java:81) ~[parboiled-core-1.1.6.jar:na]
at org.pegdown.Parser.parseToParsingResult(Parser.java:1495) ~[pegdown-1.4.2.jar:1.4.2]
at org.pegdown.Parser.parseInternal(Parser.java:1482) ~[pegdown-1.4.2.jar:1.4.2]
at org.pegdown.Parser.parse(Parser.java:85) ~[pegdown-1.4.2.jar:1.4.2]
at org.pegdown.PegDownProcessor.parseMarkdown(PegDownProcessor.java:171) ~[pegdown-1.4.2.jar:1.4.2]
at org.pegdown.PegDownProcessor.markdownToHtml(PegDownProcessor.java:156) ~[pegdown-1.4.2.jar:1.4.2]
at org.pegdown.PegDownProcessor.markdownToHtml(PegDownProcessor.java:151) ~[pegdown-1.4.2.jar:1.4.2]
at org.pegdown.PegDownProcessor.markdownToHtml(PegDownProcessor.java:139) ~[pegdown-1.4.2.jar:1.4.2]
at org.pegdown.PegDownProcessor.markdownToHtml(PegDownProcessor.java:112) ~[pegdown-1.4.2.jar:1.4.2]
at com.kolich.blog.entities.MarkdownFile.getHtmlFromMarkdown(MarkdownFile.java:59) ~[blog-1.0-SNAPSHOT.jar:1.0-SNAPSHOT]
at com.kolich.blog.entities.MarkdownContent.getContent(MarkdownContent.java:152) ~[blog-1.0-SNAPSHOT.jar:1.0-SNAPSHOT]
at sun.reflect.GeneratedMethodAccessor34.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_45]
at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_45]
at freemarker.ext.beans.BeansWrapper.invokeMethod(BeansWrapper.java:912) [freemarker-2.3.20.jar:2.3.20]
at freemarker.ext.beans.BeanModel.invokeThroughDescriptor(BeanModel.java:275) [freemarker-2.3.20.jar:2.3.20]
at freemarker.ext.beans.BeanModel.get(BeanModel.java:182) [freemarker-2.3.20.jar:2.3.20]
at freemarker.core.Dot._eval(Dot.java:76) [freemarker-2.3.20.jar:2.3.20]
at freemarker.core.Expression.eval(Expression.java:111) [freemarker-2.3.20.jar:2.3.20]
at freemarker.core.Expression.evalAndCoerceToString(Expression.java:115) [freemarker-2.3.20.jar:2.3.20]
at freemarker.core.DollarVariable.accept(DollarVariable.java:76) [freemarker-2.3.20.jar:2.3.20]
at freemarker.core.Environment.visit(Environment.java:265) [freemarker-2.3.20.jar:2.3.20]
at freemarker.core.MixedContent.accept(MixedContent.java:93) [freemarker-2.3.20.jar:2.3.20]
at freemarker.core.Environment.visitByHiddingParent(Environment.java:286) [freemarker-2.3.20.jar:2.3.20]
at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:193) [freemarker-2.3.20.jar:2.3.20]
at freemarker.core.Environment.visitIteratorBlock(Environment.java:509) [freemarker-2.3.20.jar:2.3.20]
at freemarker.core.IteratorBlock.accept(IteratorBlock.java:103) [freemarker-2.3.20.jar:2.3.20]
at freemarker.core.Environment.visit(Environment.java:265) [freemarker-2.3.20.jar:2.3.20]
at freemarker.core.MixedContent.accept(MixedContent.java:93) [freemarker-2.3.20.jar:2.3.20]
at freemarker.core.Environment.visit(Environment.java:265) [freemarker-2.3.20.jar:2.3.20]
at freemarker.core.Environment.process(Environment.java:243) [freemarker-2.3.20.jar:2.3.20]
at freemarker.template.Template.process(Template.java:277) [freemarker-2.3.20.jar:2.3.20]
at com.kolich.blog.mappers.feed.AtomRssResponseMapper.renderSafe(AtomRssResponseMapper.java:64) [blog-1.0-SNAPSHOT.jar:1.0-SNAPSHOT]
at com.kolich.blog.mappers.feed.AtomRssResponseMapper.renderSafe(AtomRssResponseMapper.java:46) [blog-1.0-SNAPSHOT.jar:1.0-SNAPSHOT]
at com.kolich.blog.mappers.AbstractDevModeSafeResponseMapper.render(AbstractDevModeSafeResponseMapper.java:55) [blog-1.0-SNAPSHOT.jar:1.0-SNAPSHOT]
at com.kolich.curacao.handlers.responses.mappers.RenderingResponseTypeMapper.renderObject(RenderingResponseTypeMapper.java:46) [curacao-2.0-M10.jar:2.0-M10]
at com.kolich.curacao.handlers.responses.MappingResponseTypeCallbackHandler.lookupAndRender(MappingResponseTypeCallbackHandler.java:91) [curacao-2.0-M10.jar:2.0-M10]
at com.kolich.curacao.handlers.responses.MappingResponseTypeCallbackHandler.renderSuccess(MappingResponseTypeCallbackHandler.java:62) [curacao-2.0-M10.jar:2.0-M10]
at com.kolich.curacao.handlers.ContextCompletingCallbackHandler$2.doit(ContextCompletingCallbackHandler.java:184) [curacao-2.0-M10.jar:2.0-M10]
at com.kolich.curacao.handlers.ContextCompletingCallbackHandler$AsyncCompletingCallbackWrapper.start(ContextCompletingCallbackHandler.java:97) [curacao-2.0-M10.jar:2.0-M10]
at com.kolich.curacao.handlers.ContextCompletingCallbackHandler.successAndComplete(ContextCompletingCallbackHandler.java:181) [curacao-2.0-M10.jar:2.0-M10]
at com.kolich.curacao.handlers.AbstractFutureCallbackHandler.onSuccess(AbstractFutureCallbackHandler.java:70) [curacao-2.0-M10.jar:2.0-M10]
at com.google.common.util.concurrent.Futures$4.run(Futures.java:1181) [guava-16.0.jar:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_45]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_45]
at java.lang.Thread.run(Thread.java:744) [na:1.7.0_45]
Caused by: org.pegdown.ParsingTimeoutException: null
at org.pegdown.Parser.checkForParsingTimeout(Parser.java:1500) ~[pegdown-1.4.2.jar:1.4.2]
at org.pegdown.Action$cxzDYiA1YTOH9nKV.run(Unknown Source) ~[na:1.4.2]
at org.parboiled.matchers.ActionMatcher.match(ActionMatcher.java:96) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77) ~[parboiled-core-1.1.6.jar:na]
at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351) ~[parboiled-core-1.1.6.jar:na]
... 115 common frames omitted
Mar 08, 2014 11:04:42 AM freemarker.log._JDK14LoggerFactory$JDK14Logger error
SEVERE: Error executing FreeMarker template
FreeMarker template error:
The following has evaluated to null or missing:
==> e.content [in template "feed/atom.ftl" at line 27, column 28]
Tip: If the failing expression is known to be legally null/missing, either specify a default value with myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthessis: (myOptionVar.foo)!myDefault, (myOptionVar.foo)??
The failing instruction (FTL stack trace):
----------
==> ${e.content} [in template "feed/atom.ftl" at line 27, column 26]
----------
Java stack trace (for programmers):
----------
freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...]
at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:98)
at freemarker.core.EvalUtil.coerceModelToString(EvalUtil.java:382)
at freemarker.core.Expression.evalAndCoerceToString(Expression.java:115)
at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
at freemarker.core.Environment.visit(Environment.java:265)
at freemarker.core.MixedContent.accept(MixedContent.java:93)
at freemarker.core.Environment.visitByHiddingParent(Environment.java:286)
at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:193)
at freemarker.core.Environment.visitIteratorBlock(Environment.java:509)
at freemarker.core.IteratorBlock.accept(IteratorBlock.java:103)
at freemarker.core.Environment.visit(Environment.java:265)
at freemarker.core.MixedContent.accept(MixedContent.java:93)
at freemarker.core.Environment.visit(Environment.java:265)
at freemarker.core.Environment.process(Environment.java:243)
at freemarker.template.Template.process(Template.java:277)
at com.kolich.blog.mappers.feed.AtomRssResponseMapper.renderSafe(AtomRssResponseMapper.java:64)
at com.kolich.blog.mappers.feed.AtomRssResponseMapper.renderSafe(AtomRssResponseMapper.java:46)
at com.kolich.blog.mappers.AbstractDevModeSafeResponseMapper.render(AbstractDevModeSafeResponseMapper.java:55)
at com.kolich.curacao.handlers.responses.mappers.RenderingResponseTypeMapper.renderObject(RenderingResponseTypeMapper.java:46)
at com.kolich.curacao.handlers.responses.MappingResponseTypeCallbackHandler.lookupAndRender(MappingResponseTypeCallbackHandler.java:91)
at com.kolich.curacao.handlers.responses.MappingResponseTypeCallbackHandler.renderSuccess(MappingResponseTypeCallbackHandler.java:62)
at com.kolich.curacao.handlers.ContextCompletingCallbackHandler$2.doit(ContextCompletingCallbackHandler.java:184)
at com.kolich.curacao.handlers.ContextCompletingCallbackHandler$AsyncCompletingCallbackWrapper.start(ContextCompletingCallbackHandler.java:97)
at com.kolich.curacao.handlers.ContextCompletingCallbackHandler.successAndComplete(ContextCompletingCallbackHandler.java:181)
at com.kolich.curacao.handlers.AbstractFutureCallbackHandler.onSuccess(AbstractFutureCallbackHandler.java:70)
at com.google.common.util.concurrent.Futures$4.run(Futures.java:1181)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
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.