melix / asm-bytecode-intellij Goto Github PK
View Code? Open in Web Editor NEWAn ASM (http://asm.ow2.org/) plugin for IntelliJ IDEA
An ASM (http://asm.ow2.org/) plugin for IntelliJ IDEA
IntelliJ 13 CE: 13.1.14
Plugin Version: 0.3.4
I got the following exception:
Plugin 'ASM Bytecode Outline' failed to initialize and will be disabled. Please restart IntelliJ IDEA.
com.intellij.diagnostic.PluginException: org/objectweb/asm/idea/config/ASMPluginComponent : Unsupported major.minor version 51.0 [Plugin: ASM Bytecode Outline]
How about compiling this plugin in Java 6?
Because in Mac the recommended Java version for IntelliJ is still 6 AFAIK.
Please add support for Android Studio
Short explanation:
Does not correctly show the bytecode for an inner-class of a class in a library (jar-file).
More in-depth explanation:
When I open a class file from a external library (say for instance, a jar file) and it has an inner-class, when attempting to show the bytecode for the inner-class, it will instead show the bytecode for the actual class and not the inner-class.
This is not an issue for actual class files (that are made in the project), however it is an issue for classes in libraries.
Versions used:
ASM Bytecode Outline: 0.3.5
IntelliJ IDEA 15 EAP Community edition : IC-142.3926.4
Java JDK & JRE: 1.7-80 & 1.8-45
Note: The plugin worked perfectly fine when on older version of IntelliJ, except for this minor issue.
If you need more info about this, or I am perhaps not explaining the issue correctly or simply overcomplicating the issue, please let me know so I may fix it.
I'm not sure if this happens to anonymous classes, but I'd imagine that it's also happening for it, too.
It would be handy if clicking on a line in the tool window editor (bytecode or ASMified views) moved the editor of the class to the corresponding line.
Eventually, provide bidirectional syncing.
IDEA 10 CE:
java.lang.ClassNotFoundException: com.intellij.openapi.graph.base.Graph
at com.intellij.ide.plugins.cl.PluginClassLoader.loadClass(PluginClassLoader.java:70)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at com.handyedit.codeexplorer.ui.action.analyze.BaseAnalyzeAction.getContext(BaseAnalyzeAction.java:80)
at com.handyedit.codeexplorer.ui.action.analyze.MethodCallChainsFromAction.update(MethodCallChainsFromAction.java:49)
I used this on Android Studio,but it didn't work.
I wonder if this support to Android Studio?
Compilation completed successfully in 6s 25ms
NoClassDefFoundError: reloc/org/objectweb/asm/ClassVisitor
When I try to view the bytecode for a .class file that resides outside the current project root directory I get the following exception:
https://gist.github.com/860025
This is with IntelliJ 10.0.2 and plugin version 0.3.1.
Thanks for providing such a great tool! My life got a bit easier the moment I discovered it.
Argument for @NotNull parameter 'module' of com/intellij/openapi/roots/ModuleRootManager.getInstance must not be null
java.lang.IllegalArgumentException: Argument for @NotNull parameter 'module' of com/intellij/openapi/roots/ModuleRootManager.getInstance must not be null
at com.intellij.openapi.roots.ModuleRootManager.getInstance(ModuleRootManager.java)
at com.intellij.openapi.roots.CompilerModuleExtension.getInstance(CompilerModuleExtension.java:34)
at org.objectweb.asm.idea.ShowBytecodeOutlineAction.actionPerformed(ShowBytecodeOutlineAction.java:85)
at com.intellij.openapi.actionSystem.ex.ActionUtil$1.run(ActionUtil.java:197)
at com.intellij.openapi.application.TransactionGuardImpl.runSyncTransaction(TransactionGuardImpl.java:88)
at com.intellij.openapi.application.TransactionGuardImpl.submitTransactionAndWait(TransactionGuardImpl.java:156)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:211)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.lambda$actionPerformed$2(ActionMenuItem.java:304)
at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:905)
at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManagerImpl.java:124)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:284)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$fireActionPerformed$0(ActionMenuItem.java:112)
at com.intellij.openapi.application.TransactionGuardImpl.runSyncTransaction(TransactionGuardImpl.java:88)
at com.intellij.openapi.application.TransactionGuardImpl.access$300(TransactionGuardImpl.java:40)
at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:113)
at com.intellij.openapi.application.TransactionGuardImpl.submitTransaction(TransactionGuardImpl.java:123)
at com.intellij.openapi.application.TransactionGuard.submitTransaction(TransactionGuard.java:109)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:112)
at com.intellij.ui.plaf.beg.BegMenuItemUI.doClick(BegMenuItemUI.java:513)
at com.intellij.ui.plaf.beg.BegMenuItemUI.access$300(BegMenuItemUI.java:45)
at com.intellij.ui.plaf.beg.BegMenuItemUI$MyMouseInputHandler.mouseReleased(BegMenuItemUI.java:533)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:795)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:627)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:387)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
java.lang.ClassCastException: class com.android.tools.idea.uibuilder.editor.multirepresentation.sourcecode.SourceCodeEditorWithMultiRepresentationPreview cannot be cast to class com.intellij.openapi.fileEditor.impl.text.PsiAwareTextEditorImpl (com.android.tools.idea.uibuilder.editor.multirepresentation.sourcecode.SourceCodeEditorWithMultiRepresentationPreview is in unnamed module of loader com.intellij.ide.plugins.cl.PluginClassLoader @26fb713f; com.intellij.openapi.fileEditor.impl.text.PsiAwareTextEditorImpl is in unnamed module of loader com.intellij.util.lang.PathClassLoader @1c53fd30)
at org.objectweb.asm.idea.ShowBytecodeOutlineAction$3.compute(ShowBytecodeOutlineAction.java:159)
at org.objectweb.asm.idea.ShowBytecodeOutlineAction$3.compute(ShowBytecodeOutlineAction.java:155)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:920)
at org.objectweb.asm.idea.ShowBytecodeOutlineAction.findClassFile(ShowBytecodeOutlineAction.java:155)
at org.objectweb.asm.idea.ShowBytecodeOutlineAction.access$000(ShowBytecodeOutlineAction.java:63)
at org.objectweb.asm.idea.ShowBytecodeOutlineAction$2$1.run(ShowBytecodeOutlineAction.java:117)
at com.intellij.openapi.application.TransactionGuardImpl.runWithWritingAllowed(TransactionGuardImpl.java:215)
at com.intellij.openapi.application.TransactionGuardImpl.access$100(TransactionGuardImpl.java:22)
at com.intellij.openapi.application.TransactionGuardImpl$1.run(TransactionGuardImpl.java:197)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:873)
at com.intellij.openapi.application.impl.ApplicationImpl$3.run(ApplicationImpl.java:511)
at com.intellij.openapi.application.impl.FlushQueue.doRun(FlushQueue.java:69)
at com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:112)
at com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:42)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:898)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:746)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$6(IdeEventQueue.java:439)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:803)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$7(IdeEventQueue.java:438)
at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:106)
at com.intellij.ide.IdeEventQueue.performActivity(IdeEventQueue.java:604)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:436)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:873)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:484)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:92)
If the output directory doesn't exist when you click on "Show bytecode outline", then the outline window is not showed. You have to click another time to get it open.
Showing bytecode inside the local class of:
public class LocalClasses {
public static void main(String[] args) {
String test = "Test";
class TestPrint {
void print() {
System.out.println(test);
}
}
new TestPrint().print();
}
}
Causes an error in the IDE like so:
null
java.lang.NullPointerException
at java.lang.StringBuilder.<init>(StringBuilder.java:112)
at org.objectweb.asm.idea.ShowBytecodeOutlineAction$3.getClassFile(ShowBytecodeOutlineAction.java:178)
at org.objectweb.asm.idea.ShowBytecodeOutlineAction$3.compute(ShowBytecodeOutlineAction.java:163)
at org.objectweb.asm.idea.ShowBytecodeOutlineAction$3.compute(ShowBytecodeOutlineAction.java:155)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:895)
at org.objectweb.asm.idea.ShowBytecodeOutlineAction.findClassFile(ShowBytecodeOutlineAction.java:155)
at org.objectweb.asm.idea.ShowBytecodeOutlineAction.access$000(ShowBytecodeOutlineAction.java:63)
at org.objectweb.asm.idea.ShowBytecodeOutlineAction$2$1.run(ShowBytecodeOutlineAction.java:117)
at com.intellij.openapi.application.TransactionGuardImpl$6.run(TransactionGuardImpl.java:318)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.runNextEvent(LaterInvocator.java:417)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:401)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:843)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:679)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:391)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
virtualFile.findFileByRelativePath() uses slashes for directory separators even on Windows.
To work around a strange issue in IntelliJ which doesn't appear when debugging the project, we always trigger a compilation, even if the .class file is up-to-date. Find a way to avoid that, investigating the bug which shows up when we uncomment the isUpToDate call.
Found in idea.log
2018-07-04 17:13:57,520 [ 86208] WARN - openapi.wm.impl.ToolWindowImpl - ToolWindow icons should be 13x13. Please fix ToolWindow (ID: ASM) or icon jar:file:/D:/Dateien/.IntelliJIdea2018.1/config/plugins/ASM-BO/lib/ASM-BO.jar!/images/asm.gif
java.lang.IllegalArgumentException
at reloc.org.objectweb.asm.ClassReader.<init>(Unknown Source)
at reloc.org.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.objectweb.asm.idea.ShowBytecodeOutlineAction$4.run(ShowBytecodeOutlineAction.java:228)
at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:975)
at org.objectweb.asm.idea.ShowBytecodeOutlineAction.updateToolWindowContents(ShowBytecodeOutlineAction.java:214)
at org.objectweb.asm.idea.ShowBytecodeOutlineAction.access$100(ShowBytecodeOutlineAction.java:63)
at org.objectweb.asm.idea.ShowBytecodeOutlineAction$2$3.run(ShowBytecodeOutlineAction.java:145)
at com.intellij.util.concurrency.ContextRunnable.run(ContextRunnable.java:27)
at com.intellij.openapi.application.TransactionGuardImpl.runWithWritingAllowed(TransactionGuardImpl.java:209)
at com.intellij.openapi.application.TransactionGuardImpl.access$100(TransactionGuardImpl.java:22)
at com.intellij.openapi.application.TransactionGuardImpl$1.run(TransactionGuardImpl.java:191)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:843)
at com.intellij.openapi.application.impl.ApplicationImpl$4.run(ApplicationImpl.java:463)
at com.intellij.openapi.application.impl.RwLockHolder.runWithEnabledImplicitRead(RwLockHolder.kt:75)
at com.intellij.openapi.application.impl.RwLockHolder.runWithImplicitRead(RwLockHolder.kt:67)
at com.intellij.openapi.application.impl.ApplicationImpl.runWithImplicitRead(ApplicationImpl.java:1430)
at com.intellij.openapi.application.impl.FlushQueue.doRun(FlushQueue.java:82)
at com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:124)
at com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:44)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:792)
at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:739)
at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:733)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:761)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.kt:695)
at com.intellij.ide.IdeEventQueue._dispatchEvent$lambda$12(IdeEventQueue.kt:589)
at com.intellij.openapi.application.impl.RwLockHolder.runWithoutImplicitRead(RwLockHolder.kt:44)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.kt:589)
at com.intellij.ide.IdeEventQueue.access$_dispatchEvent(IdeEventQueue.kt:72)
at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1.compute(IdeEventQueue.kt:355)
at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1.compute(IdeEventQueue.kt:354)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:793)
at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1.invoke(IdeEventQueue.kt:354)
at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1.invoke(IdeEventQueue.kt:349)
at com.intellij.ide.IdeEventQueueKt.performActivity$lambda$1(IdeEventQueue.kt:1014)
at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:106)
at com.intellij.ide.IdeEventQueueKt.performActivity(IdeEventQueue.kt:1014)
at com.intellij.ide.IdeEventQueue.dispatchEvent$lambda$7(IdeEventQueue.kt:349)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:848)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.kt:391)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:92)
Intellij version: IntelliJ IDEA 2023.3
JDK version: Temurin Java 17
plugin version: 0.3.5
If the class you are trying to look at is in a test directory, it won't show its bytecode.
I get an internal error, because it couldn't find the .class file.
But it'd be cool to have support for all classes (including JDK ones)!
Module is null for file /Library/Java/JavaVirtualMachines/1.6.0_22-b04-307.jdk/Contents/Home/src.jar!/src/java/util/concurrent/Semaphore.java
java.lang.Throwable
at com.intellij.openapi.diagnostic.Logger.error(Logger.java:48)
at com.intellij.compiler.impl.OneProjectItemCompileScope.getAffectedModules(OneProjectItemCompileScope.java:74)
at com.intellij.compiler.impl.CompositeScope.getAffectedModules(CompositeScope.java:91)
at com.intellij.compiler.impl.CompileDriver.attachIntermediateOutputDirectories(CompileDriver.java:359)
at com.intellij.compiler.impl.CompileDriver.addAdditionalRoots(CompileDriver.java:344)
at com.intellij.compiler.impl.CompileDriver.isUpToDate(CompileDriver.java:199)
at com.intellij.compiler.CompilerManagerImpl.isUpToDate(CompilerManagerImpl.java:248)
at org.objectweb.asm.idea.ShowBytecodeOutlineAction$2.run(ShowBytecodeOutlineAction.java:107)
at com.intellij.openapi.application.impl.ApplicationImpl$6.run(ApplicationImpl.java:382)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:680)
at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:130)
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.