Giter VIP home page Giter VIP logo

Comments (14)

paulrd avatar paulrd commented on July 17, 2024

Falko has an interesting work around here (see the 'Standalone' section at the end of the README):

https://github.com/friemen/async-ui

from fn-fx.

paulrd avatar paulrd commented on July 17, 2024

Also Nightcode seems to compile to an uberjar without the process hanging but this may be due to using boot rather than Leiningen.

from fn-fx.

nblumoe avatar nblumoe commented on July 17, 2024

I managed to get the application starting correctly with lein run and from an uberjar with the approach described here: https://gist.github.com/dfletcher/441295a027b8c983192f

However, when I close the (last) window of the application, the Java process does not quit but hangs and needs to be killed. This only happens when I require a fn-fx namespace, once I remove that require the process exits as expected.

Is anyone aware of a solution to that or know what might be causing it?

Looking at the threads, I found a ScheduledService Delay Timer which is present when requiring fn-fx and not when removing the require. Not sure if this has anything to do with the misbehavior.

from fn-fx.

nblumoe avatar nblumoe commented on July 17, 2024

@paulrd are you referring to the compilation or running the Uberjar? My issues is only when running it (I managed to get the compilation working).

from fn-fx.

nblumoe avatar nblumoe commented on July 17, 2024

Here is a threaddump from VisualVM:

2017-01-18 17:03:18
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.92-b14 mixed mode):

"RMI TCP Connection(8)-10.3.200.152" #27 daemon prio=9 os_prio=31 tid=0x00007fd8cb213000 nid=0x9f33 in Object.wait() [0x000070000755e000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x0000000772ba5830> (a com.sun.jmx.remote.internal.ArrayNotificationBuffer)
	at com.sun.jmx.remote.internal.ArrayNotificationBuffer.fetchNotifications(ArrayNotificationBuffer.java:449)
	- locked <0x0000000772ba5830> (a com.sun.jmx.remote.internal.ArrayNotificationBuffer)
	at com.sun.jmx.remote.internal.ArrayNotificationBuffer$ShareBuffer.fetchNotifications(ArrayNotificationBuffer.java:227)
	at com.sun.jmx.remote.internal.ServerNotifForwarder.fetchNotifs(ServerNotifForwarder.java:274)
	at javax.management.remote.rmi.RMIConnectionImpl$4.run(RMIConnectionImpl.java:1270)
	at javax.management.remote.rmi.RMIConnectionImpl$4.run(RMIConnectionImpl.java:1268)
	at javax.management.remote.rmi.RMIConnectionImpl.fetchNotifications(RMIConnectionImpl.java:1274)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:324)
	at sun.rmi.transport.Transport$1.run(Transport.java:200)
	at sun.rmi.transport.Transport$1.run(Transport.java:197)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda$106/1328257420.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

   Locked ownable synchronizers:
	- <0x000000076bd71848> (a java.util.concurrent.ThreadPoolExecutor$Worker)

"JMX server connection timeout 26" #26 daemon prio=9 os_prio=31 tid=0x00007fd8cb215000 nid=0xda1f in Object.wait() [0x000070000745e000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x000000076bcdde30> (a [I)
	at com.sun.jmx.remote.internal.ServerCommunicatorAdmin$Timeout.run(ServerCommunicatorAdmin.java:168)
	- locked <0x000000076bcdde30> (a [I)
	at java.lang.Thread.run(Thread.java:745)

   Locked ownable synchronizers:
	- None

"RMI TCP Connection(7)-10.3.200.152" #22 daemon prio=9 os_prio=31 tid=0x00007fd8caa9d000 nid=0xfa07 runnable [0x000070000735a000]
   java.lang.Thread.State: RUNNABLE
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
	at java.net.SocketInputStream.read(SocketInputStream.java:170)
	at java.net.SocketInputStream.read(SocketInputStream.java:141)
	at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
	at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
	- locked <0x000000076ae48da0> (a java.io.BufferedInputStream)
	at java.io.FilterInputStream.read(FilterInputStream.java:83)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:550)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda$106/1328257420.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

   Locked ownable synchronizers:
	- <0x0000000772ba4a08> (a java.util.concurrent.ThreadPoolExecutor$Worker)

"RMI Scheduler(0)" #20 daemon prio=9 os_prio=31 tid=0x00007fd8ca395000 nid=0x1207 waiting on condition [0x00007000070d2000]
   java.lang.Thread.State: TIMED_WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x0000000772bfaf48> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
	at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
	at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

   Locked ownable synchronizers:
	- None

"RMI TCP Accept-0" #18 daemon prio=9 os_prio=31 tid=0x00007fd8ca3a6800 nid=0x100b runnable [0x0000700005984000]
   java.lang.Thread.State: RUNNABLE
	at java.net.PlainSocketImpl.socketAccept(Native Method)
	at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:409)
	at java.net.ServerSocket.implAccept(ServerSocket.java:545)
	at java.net.ServerSocket.accept(ServerSocket.java:513)
	at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:52)
	at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:400)
	at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:372)
	at java.lang.Thread.run(Thread.java:745)

   Locked ownable synchronizers:
	- None

"Attach Listener" #17 daemon prio=9 os_prio=31 tid=0x00007fd8caa5f800 nid=0xf547 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
	- None

"JavaFX-Launcher" #16 prio=5 os_prio=31 tid=0x00007fd8c6b54800 nid=0xcb03 waiting on condition [0x0000700006dc9000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x0000000772b94390> (a java.util.concurrent.CountDownLatch$Sync)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
	at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231)
	at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:873)
	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182)
	at com.sun.javafx.application.LauncherImpl$$Lambda$93/1642360923.run(Unknown Source)
	at java.lang.Thread.run(Thread.java:745)

   Locked ownable synchronizers:
	- None

"ScheduledService Delay Timer" #15 daemon prio=5 os_prio=31 tid=0x00007fd8c62d8000 nid=0xb91b in Object.wait() [0x0000700006cc6000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x0000000772ba3b60> (a java.util.TaskQueue)
	at java.lang.Object.wait(Object.java:502)
	at java.util.TimerThread.mainLoop(Timer.java:526)
	- locked <0x0000000772ba3b60> (a java.util.TaskQueue)
	at java.util.TimerThread.run(Timer.java:505)

   Locked ownable synchronizers:
	- None

"Thread-3" #13 daemon prio=5 os_prio=31 tid=0x00007fd8c5964800 nid=0x9003 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
	- None

"JavaFX Application Thread" #12 prio=5 os_prio=31 tid=0x00007fd8c611e800 nid=0x307 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
	- None

"Thread-1" #11 daemon prio=5 os_prio=31 tid=0x00007fd8c713a800 nid=0x6207 waiting on condition [0x0000700006a3a000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x00000006c000c138> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
	at java.util.concurrent.LinkedBlockingDeque.takeFirst(LinkedBlockingDeque.java:492)
	at com.sun.glass.ui.InvokeLaterDispatcher.run(InvokeLaterDispatcher.java:108)

   Locked ownable synchronizers:
	- None

"QuantumRenderer-0" #9 daemon prio=5 os_prio=31 tid=0x00007fd8c590c000 nid=0x4d03 waiting on condition [0x0000700006937000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x00000006c000c2f0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125)
	at java.lang.Thread.run(Thread.java:745)

   Locked ownable synchronizers:
	- None

"Service Thread" #8 daemon prio=9 os_prio=31 tid=0x00007fd8c7060800 nid=0x4903 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
	- None

"C1 CompilerThread2" #7 daemon prio=9 os_prio=31 tid=0x00007fd8c7060000 nid=0x4703 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
	- None

"C2 CompilerThread1" #6 daemon prio=9 os_prio=31 tid=0x00007fd8c705f000 nid=0x4503 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
	- None

"C2 CompilerThread0" #5 daemon prio=9 os_prio=31 tid=0x00007fd8c7068000 nid=0x4303 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
	- None

"Signal Dispatcher" #4 daemon prio=9 os_prio=31 tid=0x00007fd8c7055000 nid=0x4103 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
	- None

"Finalizer" #3 daemon prio=8 os_prio=31 tid=0x00007fd8c5801000 nid=0x3103 in Object.wait() [0x0000700006222000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x00000006c0013248> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
	- locked <0x00000006c0013248> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
	at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)

   Locked ownable synchronizers:
	- None

"Reference Handler" #2 daemon prio=10 os_prio=31 tid=0x00007fd8c5800000 nid=0x2f03 in Object.wait() [0x000070000611f000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x00000006c000dd30> (a java.lang.ref.Reference$Lock)
	at java.lang.Object.wait(Object.java:502)
	at java.lang.ref.Reference.tryHandlePending(Reference.java:191)
	- locked <0x00000006c000dd30> (a java.lang.ref.Reference$Lock)
	at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)

   Locked ownable synchronizers:
	- None

"main" #1 prio=5 os_prio=31 tid=0x00007fd8c6801000 nid=0x1c03 waiting on condition [0x0000700005b0a000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x0000000772b945d8> (a java.util.concurrent.CountDownLatch$Sync)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
	at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231)
	at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:200)
	at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:143)
	at javafx.application.Application.launch(Application.java:191)
	at fn_fx_ui.javafx_init$_main.invokeStatic(javafx_init.clj:17)
	at fn_fx_ui.javafx_init$_main.doInvoke(javafx_init.clj:16)
	at clojure.lang.RestFn.invoke(RestFn.java:397)
	at clojure.lang.AFn.applyToHelper(AFn.java:152)
	at clojure.lang.RestFn.applyTo(RestFn.java:132)
	at fn_fx_ui.javafx_init.main(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
	at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)

   Locked ownable synchronizers:
	- None

"VM Thread" os_prio=31 tid=0x00007fd8c6000800 nid=0x2d03 runnable 

"GC task thread#0 (ParallelGC)" os_prio=31 tid=0x00007fd8c7008000 nid=0x2503 runnable 

"GC task thread#1 (ParallelGC)" os_prio=31 tid=0x00007fd8c7009000 nid=0x2703 runnable 

"GC task thread#2 (ParallelGC)" os_prio=31 tid=0x00007fd8c7009800 nid=0x2903 runnable 

"GC task thread#3 (ParallelGC)" os_prio=31 tid=0x00007fd8c6803800 nid=0x2b03 runnable 

"VM Periodic Task Thread" os_prio=31 tid=0x00007fd8c6806800 nid=0x4b03 waiting on condition 

JNI global references: 501

from fn-fx.

nblumoe avatar nblumoe commented on July 17, 2024

I figured out a workaround by force closing the application:

(defn -start [app stage]
  (let [exit (reify javafx.event.EventHandler
               (handle [this event]
                 (println "Closing application")
                 (javafx.application.Platform/exit)))]
    (doto stage
      (.setOnCloseRequest exit)
      (.setTitle "FOO")
      (.show))))

The important part is the EventHandler that calls Platform/exit.

from fn-fx.

paulrd avatar paulrd commented on July 17, 2024

In response to your inquiry, yes, it was only hanging during compilation via 'lein uberjar' if I recall correctly. I haven't tried this library since then, so perhaps the hanging issue is no longer a problem? I'll have to give it a try some time.

from fn-fx.

anuj-seth avatar anuj-seth commented on July 17, 2024

Hi,
I am facing the same problem that "lein uberjar" hangs.
Then I tried using boot for my project and that works without a problem.
I would just like to know if there's something wrong with my setup (project.clj and java version is below) or a problem with leiningen.
Thanks,
Anuj.


java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-0ubuntu0.18.04.1-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

(defproject fn-fx-simple "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.9.0-alpha16"]
[fn-fx/fn-fx-javafx "0.5.0-SNAPSHOT"]]
:main fn-fx-simple.javafx-init
:aot [fn-fx-simple.javafx-init]
:target-path "target/%s"
:profiles {:uberjar {:aot :all}})

from fn-fx.

pmonks avatar pmonks commented on July 17, 2024

@anuj-seth OpenJDK 1.8 isn't supported by fn-fx since it doesn't come bundled with JavaFX and there's no readily available build of OpenJFX for that version of the JRE. I added some more text on this topic to the Usage section of the README yesterday, and would love it if you were able to give that text a review.

Other than that your sample project.clj file looks fine, with a couple of (minor) comments:

  1. Depending on which JRE you choose to resolve the issue of no support for OpenJDK 1.8, you may need to change the fn-fx dependency. This is also documented in the README (feedback welcome!).
  2. I'd suggest updating the version of org.clojure/clojure to "1.9.0" - the GA release has been out for a while.
  3. I don't think you need :aot [fn-fx-simple.javafx-init], unless you're doing something unusual in that namespace that's unrelated to fn-fx.
  4. I think :target-path "target/%s" is redundant. Though it's not causing any harm, I'm a KISS fan so try to remove things like that where I can.

from fn-fx.

anuj-seth avatar anuj-seth commented on July 17, 2024

Hi,
Sorry for the late reply on this.
I updated my system to openjdk11 (also updated my ubuntu to 18.10 along the way).
I still have the same problem that "lein uberjar" hangs though "lein run" works fine.
On the same code when I use "boot" to create the uberjar then it works fine, hence for fn-fx related projects I have decided to move to boot.

I have also uploaded sample projects on github - one that uses lein and hangs and second that uses boot and is able to create an uberjar.
Maybe someday someone with better knowledge of javafx and lein can solve the problem.(https://github.com/anuj-seth/fn-fx-experiments.git)

Thanks for your support.

from fn-fx.

pmonks avatar pmonks commented on July 17, 2024

Issue #25 has some information in it that may be related to this, specifically the use of *compile-files*.

from fn-fx.

roti avatar roti commented on July 17, 2024

I merged pull request #83 which should make fn-fx work with aot, and implicitly with an uberjar. Can you check if it works for you?

from fn-fx.

anuj-seth avatar anuj-seth commented on July 17, 2024

Yes it works.
AOT compilation works, uberjar creation does not hang and I can work on the repl after calling init-javafx!.

Thanks for your effort in making this work.

from fn-fx.

roti avatar roti commented on July 17, 2024

👍

from fn-fx.

Related Issues (20)

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.