Giter Club home page Giter Club logo

mobius's Introduction

Mobius

The focus of the MOBIUS project is the specification and verification of concurrent JML-annotated Java programs at the source code level as well as at the bytecode level using logic- and type-based techniques and the Proof-Carrying Code paradigm. The properties of particular interest include security (e.g., data is secret and never leaked) and resource guarantee properties (e.g., this method will never use more than this much memory or that much CPU) as well as total functional correctness.

One major component that Dr. Kiniry is responsible for in this effort is the development of an Program Verification Environment (PVE). The MOBIUS PVE is thus, in a sense, a prototype realization of the U.K. Grand Challenge 6 Verifying Compiler, specialized to the domain of Java programs.

The MOBIUS PVE integrates theoretical and technical best-practices, leveraging the hard work of many research groups within, as well as outside of, the grant consortium. MOBIUS participants represent twelve of the top institutions in Europe in this domain (INRIA, ETHZ, Nijmegen, Munich, Edinburgh, Tallinn, Chalmers, Imperial, UCD Dublin, Warsaw, and Madrid) and we work with partners in North America (Iowa State, Concordia University, the University of Central Florida, MIT, the University of Washington, Kansas State University, and others), some of which are supported by an NSF Infrastructure Grant, on which Dr. Kiniry is a named collaborator.

mobius's People

Contributors

kiniry avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mobius's Issues

component=ESCJava2Plugin

{{{

!html

Reply to: Dan Homerick
}}}
{{{
Plugin broken by a classpath error.

The plugin gives the following error when the ESC/Java2 command is used from
the menu.

This is with:
Eclipse Version: 3.3.0
Build id: I20070517-1700

under Linux (Ubuntu 7.04), but is apparently affecting everyone who's tried
the plugin in our class, some of whom are using Windows.

Logging is now on
ESC/Java2 plugin is starting
Running Escjava checker
Using simplify executable at
/usr/local/src/eclipse/plugins/mobius.simplify_1.5.5/Simplify-1.5.4.linux
Exception java.lang.NoClassDefFoundError:
org/apache/bcel/classfile/ClassParser thrown while processing
EscJava_Quicksort
java.lang.NoClassDefFoundError: org/apache/bcel/classfile/ClassParser
at javafe.reader.BCELReader.readJavaClass(BCELReader.java:1027)
at javafe.reader.BCELReader.read(BCELReader.java:999)
at javafe.reader.BinReader.read(BinReader.java:66)
at javafe.reader.CachedReader.read(CachedReader.java:172)
at escjava.reader.RefinementCachedReader.getCombinedBinaries(
RefinementCachedReader.java:324)
at escjava.reader.RefinementCachedReader.readRefinements(
RefinementCachedReader.java:279)
at escjava.reader.RefinementCachedReader.read(
RefinementCachedReader.java:133)
at javafe.reader.StandardTypeReader.read(StandardTypeReader.java:318)
at escjava.reader.EscTypeReader.read(EscTypeReader.java:213)
at escjava.reader.EscTypeReader.read(EscTypeReader.java:235)
at javafe.tc.OutsideEnv.load(OutsideEnv.java:449)
at javafe.tc.TypeSig.preload(TypeSig.java:655)
at javafe.tc.TypeSig.getTypeDecl(TypeSig.java:620)
at javafe.tc.SLResolution.transition(SLResolution.java:84)
at javafe.tc.SLResolution.handleSuperTypeName(SLResolution.java:158)
at javafe.tc.SLResolution.transition(SLResolution.java:120)
at javafe.tc.TypeSig.resolveSupertypeLinks(TypeSig.java:1069)
at javafe.tc.TypeSig.prep(TypeSig.java:1092)
at javafe.tc.TypeSig.typecheck(TypeSig.java:1114)
at escjava.Main.processTD(Main.java:506)
at escjava.Main.handleTD(Main.java:470)
at javafe.SrcTool.handleCU(SrcTool.java:303)
at escjava.Main.handleCU(Main.java:429)
at javafe.SrcTool.handleAllCUs(SrcTool.java:248)
at javafe.SrcTool.frontEndToolProcessing(SrcTool.java:116)
at javafe.FrontEndTool.run(FrontEndTool.java:271)
at escjava.Main.compile(Main.java:226)
at escjava.plugin.EscjavaChecker.run(EscjavaChecker.java:229)
at escjava.plugin.EscjavaAction$Check.checkCompilationUnit(
EscjavaAction.java:485)
at escjava.plugin.EscjavaAction$Check.checkJavaElement(
EscjavaAction.java:411)
at escjava.plugin.EscjavaAction$Check.run(EscjavaAction.java:380)
at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java
:256)
at org.eclipse.ui.internal.WWinPluginAction.runWithEvent(
WWinPluginAction.java:229)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection
(ActionContributionItem.java:545)
at org.eclipse.jface.action.ActionContributionItem.access$2(
ActionContributionItem.java:490)
at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(
ActionContributionItem.java:402)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1101)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3319)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2971)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2389)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2353)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2219)
at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(
Realm.java:289)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(
Workbench.java:461)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(
IDEApplication.java:106)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(
EclipseAppHandle.java:153)
at
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(
EclipseAppLauncher.java:106)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(
EclipseAppLauncher.java:76)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(
EclipseStarter.java:363)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(
EclipseStarter.java:176)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(
NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(
DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:497)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:436)
at org.eclipse.equinox.launcher.Main.run(Main.java:1162)
Escjava checker ended, status code 0
}}}

please update ESC/Java2 plugin webpage to reflect new developments

See below email from Werner:

{{{
From: Werner M. Dietl [email protected]
Subject: Re: ESC/Java plugins for Eclipse

Hi Joe,

I looked at

http://secure.ucd.ie/products/opensource/ESCJava2/

and there I didn't find any mention of Eclipse or an update site.
I assumed that the downloads were just for the command-line tools.

Your query has prompted me to update the front-page. :)

thanks, that's a lot more informative now!

Actually, I saw

http://sort.ucd.ie/projects/escjava-eclipse/

but assumed that it is a dead project, as the "Latest News" are from
2005.

Do you know what the status of the JMLEclipse project of Kansas state
is? The website and downloads are from 2004 and I also assumed that that
project is dead.

In case you want to try our shot at a JML plugin for Eclipse look at

http://sct.inf.ethz.ch/research/universes/tools/eclipse/

I tried it together with your ESC/Java2 plugin and everything worked.

Any comments and feedback on the usefulness of the plugin is welcome!

Best regards,
cu, WMD.
}}}

ESC/Java doesn't want to compile anymore

On my machine (Fedora Core 3) when I do make I get this error:
Makefile.defs:58: *** missing separator. Stop.

if I comment this line (which is just a message) I can go further; but I get further errors. I believe it's due to the version of make I use, which is the normal GNU make that is shipped with fedora.

NullPointerException thrown with @pure modified comes before @modifies spec

See: http://sort.ucd.ie/tracker/?func=detail&atid=441&aid=596&group_id=97

The attached file causes ESC/Java 2.0b1 to throw a NullPointerException. This is the smallest example I could find
that exhibits the bug. Three conditions seem to be necessary:

(1) a @pure modifier on a method
(2) a @Modifies clause on the method, after the pure modifier
(3) another method calls the first one

According to the JML spec (which I assume you're following here), modifiers are supposed to come after specifications
like modifies, so the correct output is probably an error message of the form "The @pure modifier may not come
before method specifications." But of course there should not be an exception thrown in any case.

As a side note, the ordering requirement between modifiers and specifications arguably serves little purpose, and student
errors like the one that provoked this bug report could be avoided if modifiers could be interspersed with specifications.
But this is probably a JML issue not ESC/Java.

I've specified this is the parser, but since another method has to call the first one the actual exception is probably
thrown from the analyzer, not the parser. Here's the output with the stack trace:

$ ../escj.bat C.java

c:\develop\escjava\654dist-student-help>"c:\develop\j2sdk1.4.2_15\bin\java.exe"
-Dsimplify=c:\develop\escjava\Simplify-1.5.4.exe -classpath "c:\develop\escjava
\esctools2.jar;c:\develop\escjava\Utils\bcel-5.2\bcel-5.2.jar" escjava.Main -cla
sspath c:\develop\escjava\jmlspecs.jar -classpath . -nowarn Deadlock -specs c:
\develop\escjava\specs C.java
ESC/Java version ESCJava-2.0b1
[0.062 s 8363072 bytes]

C ...
Prover started:0.046 s 10483064 bytes
[1.25 s 10705776 bytes]

C: foo() ...
[0.063 s 10180656 bytes] passed

C: bar() ...
Exception java.lang.NullPointerException thrown while processing C
java.lang.NullPointerException
at escjava.translate.TrAnExpr.trSpecExprI(TrAnExpr.java:133)
at escjava.translate.TrAnExpr.trSpecExpr(TrAnExpr.java:129)
at escjava.translate.TrAnExpr.trSpecExpr(TrAnExpr.java:123)
at escjava.translate.Translate.call(Translate.java:4146)
$
at escjava.translate.Translate.trExpr(Translate.java:2912)
at escjava.translate.Translate.ptrExpr(Translate.java:2203)
at escjava.translate.Translate.trStmt(Translate.java:1662)
at escjava.translate.Translate.trStmt(Translate.java:1488)
at escjava.translate.Translate.trBody(Translate.java:228)
at escjava.Main.computeBody(Main.java:1270)
at escjava.Main.processRoutineDecl(Main.java:721)
at escjava.Main.processTypeDeclElem(Main.java:656)
at escjava.Main.processTD(Main.java:597)
at escjava.Main.handleTD(Main.java:470)
at javafe.SrcTool.handleCU(SrcTool.java:303)
at escjava.Main.handleCU(Main.java:429)
at javafe.SrcTool.handleAllCUs(SrcTool.java:248)
at javafe.SrcTool.frontEndToolProcessing(SrcTool.java:116)
at javafe.FrontEndTool.run(FrontEndTool.java:271)
at escjava.Main.compile(Main.java:226)
at escjava.Main.main(Main.java:186)
1.329 s 10221512 bytes total

Re: how to check out ESCTools again?

{{{

!html

Reply to: Joseph Kiniry
}}}
{{{

On 16 Oct, 2007, at 16:30, Gary T. Leavens wrote:

Hi Joe,

On Tue, 16 Oct 2007, Joseph Kiniry wrote:

On 16 Oct, 2007, at 15:33, Gary T. Leavens wrote:

Hi Joe,
I was able to do a checkout from https://mobius.ucd.ie/repos/ of the
ESCTools/slides subdirectory, and I have updated my tutorial in that
and committed.

Thanks.

Not completely obvious what to do, but workable...

Meaning, we need to better document access to the subversion
repository? Or something else?

Yes, If I just see the Trac page, it wouldn't be clear to me what
to do.

You can perform a checkout from the Mobius Trac server using
HTTPS + WebDAV. https://mobius.ucd.ie/repos/ is the path, use
the code browsing to see the modules/paths underneath.
Anonymous checkout is already supported as well. We will not be
providing ssh access to the repository.

But this helped after I looked up WebDAV and found out that SVN
supports it, so I tried SVN...

Heh. Well, at least you are a real computer scientist. :)

We'll prioritize making all of this crystal clear.

Joe
}}}

summarize all key development decisions from Dublin meeting in wiki

Moreover, document how these facets relate to various wiki HowTo pages and examples.

  1. [/browse repository] organization (done)
  2. component subsystem naming, packaging, etc. (mobius.sub)
  3. versioning (maj.min.patch)
  4. packaging of subsystems as components (each unit as plugin)
  5. UI integration
  6. CodeCleanup with PVE
  7. component descriptions and architecture overview
  8. [wiki:GeeForge GForge] replacement (you're using it!)
  9. update locations and mirrors
  10. WikiDesign, updates, and migration
  11. coding, documentation, and specification standards
  12. code licensing (e.g., LGPL -- see ticket #13)
  13. RSS feeds
  14. anonymous access policies

Tests failing in ESCJava2 trunk

One or more of the automated JML tests are failing:

{{{
make self_typecheck
/Users/dermotcochran/workspace-mobius/ESCJava2/Escjava/java/escjava/Main.java:60: Caution: Variable jarlocation might not have been initialized
static public final/*@ nullable */String jarlocation; // can be null
^
1 caution

make test_matrix ## FIXME

jml
--sourcepath "/Users/dermotcochran/workspace-mobius/ESCJava2/Javafe/java:/Users/dermotcochran/workspace-mobius/ESCJava2/Escjava/java:/Users/dermotcochran/workspace-mobius/ESCJava2/Escjava/mochalib/java:/Users/dermotcochran/workspace-mobius/ESCJava2/Utils:/Users/dermotcochran/workspace-mobius/ESCJava2/specs"
--classpath "/Users/dermotcochran/workspace-mobius/ESCJava2/Javafe/classfiles:/Users/dermotcochran/workspace-mobius/ESCJava2/Escjava/classfiles:/Users/dermotcochran/workspace-mobius/ESCJava2/Utils:/Users/dermotcochran/workspace-mobius/ESCJava2/jars/mochalib.jar:/Users/dermotcochran/workspace-mobius/ESCJava2/Utils/BCEL/bcel-5.2/bcel-5.2.jar:/Users/dermotcochran/workspace-mobius/ESCJava2/Utils/junit.jar:/Users/dermotcochran/workspace-mobius/ESCJava2/Utils/ant.jar:/Users/dermotcochran/workspace-mobius/ESCJava2/Escjava/xmlrpc-1.2-b1-modified.jar:/Users/dermotcochran/workspace-mobius/ESCJava2/Utils/BCEL/bcel-5.2/bcel-5.2.jar:"
-a -A --purity -n
--keepGoing --source 1.4 --Quiet --recursive
junitutils javafe escjava
Exception in thread "main" java.lang.NoClassDefFoundError: org/jmlspecs/checker/Main
make: *** [jml] Error 1
}}}

Review release process for ESC/Java2

We need a proper release process for ESC/Java2, especially the source and patch releases. Also, the release process needs to reflect the use of subversion rather than CVS; .svn files need to be handled correctly. The release process needs to execute a quicktest in each binary distribution and a test build in source distribution e.g. 'make clean build clean'.

correct MIME types for all binaries in repository

Some of the files in the repository that were moved from CVS were improperly identified as being text files when, in fact, they are binaries. These files will have an incorrect svn:mime-type property. The svn:mime-type should be application/octet-stream and, perhaps as well, the file should have the subversion property svn:executable.

See the Subversion book's section "File Portability" for more information.

Wrong output to Simplify

Was: http://sort.ucd.ie/tracker/?func=detail&atid=441&aid=597&group_id=97:

The execution of

escjava2 B C D

for the included files B.java, C.java and D.java gives the message:

...
D: m() ...
Fatal error: Unexpected output encountered while parsing Simplify's output:
----- Begin unexpected output -----

  Bad input: Probable matching loop; increase PROVER_MAX_FNUR if you believe otherwise.

----- End unexpected output -----
[0.651 s 11152792 bytes] unexpectedly missing Simplify output
...

This bug was found by Adam Iwanicki and Pawel Papis

figure out how to properly to ToDo items in TexInfo documents

We need to perform proper pragma annotation of the BmlReferenceManual to track who is responsible for which section, what writing corresponds to which development, tickets, and wiki entries, etc.

One way to do this is with a ToDo package, much like is done with [wiki:LayTex LaTeX] today.

ESC/Java2.0b2 release does not run on OS X 10.4.10 with JVM 1.5.0_07

{{{

!html

Reply to: Joseph Kiniry
}}}
{{{
Attempting a quicktest results in:

Guessing ESCTOOLS_RELEASE = /usr/local/Java/ESCJava2.0b2/.
ESC/Java version ESCJava-2.0b2
[0.022 s 26188264 bytes]

A ...
/System/Library/Frameworks/JavaVM.framework/Versions/1.5/Home/../
Classes/classes.jar:java/lang/Character$Subset.class: Fatal error:
file does not contain the type java.lang.Character$Subset as expected
1 error
FAILED

}}}

ESC/Java-2.0b1 Support

Do we need to ship a new version that just fixes this bug, as we have seen this several times now...

Begin forwarded message:

From: Qiang Zhang [email protected]
Date: 19 September, 2007 21:28:00 GMT+01:00
To: [email protected]
Subject: ESC/Java2 question

Hi Joe,

I am sorry to email you directly, but it seems kind of hard for me to ask a possibly trival question about ESC/Java2. I looked through all the website and couldn't find a help page.

I just downloaded the binary below directly and extracted it
ESCJava-2.0b1-01-06-07-binary.tgz
then I tried to run the test, but when I did
escjava2 example/0.0/Bag.java I got the output attached below, which seemed unmatched with the description in the documenation. I tried to set the env variables like ESCTOOLS_RELEASE and SIMPLIFY, so that the tool needs not to guess, but it didn't help.

I also tried to download the source tar ball, but when I untared, I found out the directory structure was different from the description in the README.txt, which explained how to build like Javafe. It seemed the files in the source can be executed directly, but the result was similar to the binary one, which meant the output was unmatched with the description in the documentation.

I hope you got time to read the output below, and helped me to make the tool work correctly. Thank you very much!

best regards,
Qiang

;==========================================================
output
;==========================================================
escjava2 examples/0.0/Bag.java

Guessing ESCTOOLS_RELEASE = /v/filer4b/projects-browne/uvv-fall2007/ESCTools
Warning: Guessing SIMPLIFY = Simplify-1.5.4.linux
ESC/Java version ESCJava-2.0b1
examples/0.0/Bag.java: Caution: Using given file as the .java file, even though it is not the java file for Bag on the classpath
[0.04 s 14480360 bytes]

Bag ...
Exception java.lang.NoClassDefFoundError: org/apache/bcel/classfile/ClassParser thrown while processing Bag
java.lang.NoClassDefFoundError: org/apache/bcel/classfile/ClassParser
at javafe.reader.BCELReader.readJavaClass(BCELReader.java:1027)
at javafe.reader.BCELReader.read(BCELReader.java:999)
at javafe.reader.BinReader.read(BinReader.java:66)
at javafe.reader.CachedReader.read(CachedReader.java:172)
at escjava.reader.RefinementCachedReader.getCombinedBinaries(RefinementCachedReader.java:324)
at escjava.reader.RefinementCachedReader.readRefinements(RefinementCachedReader.java:279)
at escjava.reader.RefinementCachedReader.read(RefinementCachedReader.java:133)
at javafe.reader.StandardTypeReader.read(StandardTypeReader.java:318)
at escjava.reader.EscTypeReader.read(EscTypeReader.java:213)
at escjava.reader.EscTypeReader.read(EscTypeReader.java:235)
at javafe.tc.OutsideEnv.load(OutsideEnv.java:449)
at javafe.tc.TypeSig.preload(TypeSig.java:655)
at javafe.tc.TypeSig.getTypeDecl(TypeSig.java:620)
at javafe.tc.SLResolution.transition(SLResolution.java:84)
at javafe.tc.SLResolution.handleSuperTypeName(SLResolution.java:158)
at javafe.tc.SLResolution.transition(SLResolution.java:120)
at javafe.tc.TypeSig.resolveSupertypeLinks(TypeSig.java:1069)
at javafe.tc.TypeSig.prep(TypeSig.java:1092)
at javafe.tc.TypeSig.typecheck(TypeSig.java:1114)
at escjava.Main.processTD(Main.java:506)
at escjava.Main.handleTD(Main.java:470)
at javafe.SrcTool.handleCU(SrcTool.java:303)
at escjava.Main.handleCU(Main.java:429)
at javafe.SrcTool.handleAllCUs(SrcTool.java:248)
at javafe.SrcTool.frontEndToolProcessing(SrcTool.java:116)
at javafe.FrontEndTool.run(FrontEndTool.java:271)
at escjava.Main.compile(Main.java:226)
at escjava.Main.main(Main.java:186)
0.069 s 15127944 bytes total
1 caution

Re: Dead links on ESC/Java2 documentation page

{{{

!html

Reply to: Joseph Kiniry
}}}
{{{
Hi Benjamin,

On 17 Oct, 2007, at 17:05, Benjamin Weiss wrote:

Hi Joe,

in the process of preparing a lab course which will be held in
Karlsruhe next winter and which will include using ESC/Java2, I
noticed that most of the links at

http://kind.ucd.ie/products/opensource/ESCJava2/docs.html

are currently dead.

Cheers
Benjamin

Thanks. We just moved to a new server and are now link-hunting now.
Dermot, can you please fix?

Best,
Joe
}}}

review Mobius PVE project plan with JoeKiniry

I have committed the work that I have done on the Mobius PVE Project Plan to the repository [/browser/websites/MobiusToolsWiki/Plans here] for the moment.

I will review this work with DermotCochran next week. He and I will "own" the document for the moment, with input from SiteLeaders, SophieHadjadj and GillesBarthe.

We plan on setting up an automated publication of this data to the [/wiki MobiusWiki], cross-referenced and correlated with Mobius milestones in our [/roadmap roadmap], in preparation for the GammaRelease and [wiki:DeliverableThreeFive Deliverable 3.5].

build system weirdness (error in Javafe)

Neha Rungta reports:

Dermot told me to go in Javafe and do make clean source which got rid of the
error in Javafe directory. The other build issues went away after a fresh
checkout. I still had to go in the Javafe directory and do a make clean
source before the top level make could finish.

Now I can build on both OSX and Linux boxes.

While it is great that he is building EscJava, this still indicates there is a problem with the build system.

Neha's original report:
{{{
On 12 Sep, 2007, at 23:44, neharungta wrote:

I can't get the ESCTools to build. It dies in the Javafe make giving
me this error.

java/javafe/ast/Visitor.java:153: cannot access javafe.ast.LabelStmt bad class file:
/Users/neha/Documents/test/ESCTools/Javafe/java/javafe/ast/LabelStmt.java
file does not contain class javafe.ast.LabelStmt
Please remove or make sure it appears in the correct subdirectory of the classpath.
public void visitLabelStmt(/@non_null/ LabelStmt x) {
1 error

The Javafe/classfiles is in the classpath but at the moment it is empty
so naturally it can't find the class file it is looking for. I can't
seem to figure out what I am doing wrong.
}}}

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.