Git Product home page Git Product logo

Comments (7)

willuhn avatar willuhn commented on September 21, 2024

Der Stacktrace sind alles nur Folgefehler. Poste mal bitte den gesamten Bereich der Kommunikation mit der Bank.
Im Wiki unter https://www.willuhn.de/wiki/doku.php?id=support:list:banken:misc:pintan#deutsche_bank_maxblue findest du Hinweise zu den Einstellungen für diese Bank.

from hbci4java.

guyyst avatar guyyst commented on September 21, 2024

Unten ist nochmal der gesamte Stacktrace. Den Wiki Artikel kannte ich noch nicht, das ist sehr hilfreich. Leider folgen wir all den Instruktionen für die Deutsche Bank bereits. HBCI Plus ist auch im Online Banking Portal der DB aktiviert. Wir antworten auch auf sowohl NEED_CUSTOMERID und NEED_USERID mit der Filial+Konto+Unterkonto Nummer, und die BLZ wird aus der IBAN des Kontos erlesen. Also die Daten sollten alle richtig sein.

Gerade habe ich auch einmal Hibiscus installiert, und das DB Konto dort ausprobiert. Beim aller ersten mal habe ich eine sehr ähnliche Fehlermeldung wie in meinem eigen Code bekommen, der Stacktrace ist auch unten angehängt. Leider ist jeder Versuch diesen Fehler in Hibiscus nochmal zu erzeugen gescheitert, und erneutes Anlegen der Bankverbindung hat immer funktioniert.


Hibiscus Stacktrace:

[Wed Mar 03 20:19:40 CET 2021][INFO][bg-task:][de.willuhn.jameica.hbci.HBCICallbackSWT.log] creating a connection to https://fints.deutsche-bank.de:443/ and checking the certificate
[Wed Mar 03 20:19:40 CET 2021][INFO][bg-task:][de.willuhn.jameica.hbci.HBCICallbackSWT.status] sending hbci message
[Wed Mar 03 20:19:40 CET 2021][INFO][bg-task:][de.willuhn.jameica.hbci.HBCICallbackSWT.status] waiting for response message
[Wed Mar 03 20:19:40 CET 2021][INFO][bg-task:][de.willuhn.jameica.hbci.HBCICallbackSWT.log] waiting for response message
[Wed Mar 03 20:19:41 CET 2021][INFO][bg-task:][de.willuhn.jameica.hbci.HBCICallbackSWT.status] decrypting response message
[Wed Mar 03 20:19:41 CET 2021][ERROR][bg-task:][de.willuhn.jameica.hbci.HBCICallbackSWT.log] Meldung der Bank: 9050:Teilweise fehlerhaft. org.kapott.hbci.status.HBCIStatus.addRetVal(HBCIStatus.java:72)
[Wed Mar 03 20:19:41 CET 2021][ERROR][bg-task:][de.willuhn.jameica.hbci.HBCICallbackSWT.log] Meldung der Bank: 9099:Verarbeitung zur Zeit nicht möglich. (5: Synch.TAN2Step6) org.kapott.hbci.status.HBCIStatus.addRetVal(HBCIStatus.java:72)
[Wed Mar 03 20:19:41 CET 2021][INFO][bg-task:][de.willuhn.jameica.hbci.HBCICallbackSWT.status] verifying signature of response message
[Wed Mar 03 20:19:41 CET 2021][WARN][bg-task:][de.willuhn.jameica.hbci.HBCICallbackSWT.log] message has no signature
[Wed Mar 03 20:19:41 CET 2021][INFO][bg-task:][de.willuhn.jameica.hbci.passports.pintan.server.PassportHandleImpl.close] closing pin/tan passport
[Wed Mar 03 20:19:41 CET 2021][INFO][bg-task:][de.willuhn.jameica.hbci.passports.pintan.server.PassportHandleImpl.close] pin/tan passport closed
[Wed Mar 03 20:19:41 CET 2021][ERROR][bg-task:][de.willuhn.jameica.hbci.passports.pintan.server.PassportHandleImpl.open] error while opening pin/tan passport
org.kapott.hbci.exceptions.HBCI_Exception: can not create HBCI handle
	at org.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:141)
	at de.willuhn.jameica.hbci.passports.pintan.server.PassportHandleImpl.open(PassportHandleImpl.java:180)
	at de.willuhn.jameica.hbci.gui.action.PassportSync$1.run(PassportSync.java:81)
	at de.willuhn.jameica.gui.GUI$7.run(GUI.java:1081)
Caused by: org.kapott.hbci.exceptions.HBCI_Exception: can not register user
	at org.kapott.hbci.manager.HBCIHandler.registerUser(HBCIHandler.java:169)
	at org.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:132)
	... 3 more
Caused by: org.kapott.hbci.exceptions.HBCI_Exception: error while fetching new sysid from institute
	at org.kapott.hbci.manager.HBCIUser.fetchSysId(HBCIUser.java:462)
	at org.kapott.hbci.manager.HBCIUser.sync(HBCIUser.java:656)
	at org.kapott.hbci.manager.HBCIUser.register(HBCIUser.java:704)
	at org.kapott.hbci.manager.HBCIHandler.registerUser(HBCIHandler.java:167)
	... 4 more
Caused by: org.kapott.hbci.exceptions.ProcessException: error while fetching new sysid from institute
	at org.kapott.hbci.dialog.HBCIDialogSync.checkResult(HBCIDialogSync.java:125)
	at org.kapott.hbci.dialog.AbstractRawHBCIDialog.execute(AbstractRawHBCIDialog.java:106)
	at org.kapott.hbci.manager.HBCIUser.fetchSysId(HBCIUser.java:441)
	... 7 more
[Wed Mar 03 20:19:41 CET 2021][INFO][bg-task:][de.willuhn.jameica.hbci.gui.action.PassportSync$1.run] test of passport failed: class org.kapott.hbci.exceptions.ProcessException: error while fetching new sysid from institute
[Wed Mar 03 20:19:41 CET 2021][WARN][bg-task:][de.willuhn.jameica.hbci.gui.DialogFactory.dirtyPINCache] mark pin cache dirty for all passports
[Wed Mar 03 20:19:41 CET 2021][INFO][Thread-10][de.willuhn.jameica.hbci.gui.action.PassportSync$2.run] log target removed
[Wed Mar 03 20:20:11 CET 2021][INFO][main][de.willuhn.jameica.gui.internal.parts.BackgroundTaskMonitor$1$1.run] auto closing monitor snapin

Gesamter eigener Stacktrace:

2021-03-01 14:21:06,270 INFO  [com.BankingSocket] (default task-206) Unhandled HBCI_Exception while processing client message.: org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Erzeugen eines HBCIHandler Objektes
        at snapshot.war//org.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:141)
        at snapshot.war//com.BankingFunctions.generateBankingProcess(BankingFunctions.java:85)
        at snapshot.war//com.BankingSocket.createResponse(BankingSocket.java:129)
        at snapshot.war//com.BankingSocket.onClientMessage(BankingSocket.java:79)
        at jdk.internal.reflect.GeneratedMethodAccessor672.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at [email protected]//org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)
        at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at [email protected]//org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:509)
        at [email protected]//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.delegateInterception(Jsr299BindingsInterceptor.java:79)
        at [email protected]//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:89)
        at [email protected]//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:102)
        at [email protected]//org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
        at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at [email protected]//org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43)
        at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at [email protected]//org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47)
        at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at [email protected]//org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45)
        at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at [email protected]//org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:40)
        at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at [email protected]//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
        at [email protected]//org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:52)
        at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at [email protected]//org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51)
        at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at [email protected]//org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:54)
        at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at [email protected]//org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:252)
        at [email protected]//org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:388)
        at [email protected]//org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:158)
        at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at [email protected]//org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:509)
        at [email protected]//org.jboss.weld.module.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:81)
        at [email protected]//org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:89)
        at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at [email protected]//org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)
        at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at [email protected]//org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(WaitTimeInterceptor.java:47)
        at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at [email protected]//org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(SecurityContextInterceptor.java:100)
        at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at [email protected]//org.jboss.as.ejb3.deployment.processors.StartupAwaitInterceptor.processInvocation(StartupAwaitInterceptor.java:22)
        at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at [email protected]//org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:64)
        at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at [email protected]//org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:67)
        at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at [email protected]//org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50)
        at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at [email protected]//org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:60)
        at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at [email protected]//org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:438)
        at [email protected]//org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:627)
        at [email protected]//org.jboss.invocation.AccessCheckingInterceptor.processInvocation(AccessCheckingInterceptor.java:57)
        at [email protected]//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at [email protected]//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
        at [email protected]//org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:198)
        at [email protected]//org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:191)
        at [email protected]//org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:81)
        at snapshot.war//com.BankingSocket$$$view134.onClientMessage(Unknown Source)
        at jdk.internal.reflect.GeneratedMethodAccessor672.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at [email protected]//io.undertow.websockets.jsr.annotated.BoundMethod.invoke(BoundMethod.java:87)
        at [email protected]//io.undertow.websockets.jsr.annotated.AnnotatedEndpoint$2.onMessage(AnnotatedEndpoint.java:142)
        at [email protected]//io.undertow.websockets.jsr.FrameHandler$7.run(FrameHandler.java:284)
        at [email protected]//io.undertow.websockets.jsr.ServerWebSocketContainer$1.call(ServerWebSocketContainer.java:170)
        at [email protected]//io.undertow.websockets.jsr.ServerWebSocketContainer$1.call(ServerWebSocketContainer.java:167)
        at [email protected]//io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
        at [email protected]//org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
        at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
        at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
        at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
        at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
        at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
        at [email protected]//io.undertow.websockets.jsr.ServerWebSocketContainer.invokeEndpointMethod(ServerWebSocketContainer.java:610)
        at [email protected]//io.undertow.websockets.jsr.ServerWebSocketContainer$6.run(ServerWebSocketContainer.java:596)
        at [email protected]//io.undertow.websockets.jsr.OrderedExecutor$ExecutorTask.run(OrderedExecutor.java:67)
        at [email protected]//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
        at [email protected]//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982)
        at [email protected]//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
        at [email protected]//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
        at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Registrieren der Nutzerdaten
        at snapshot.war//org.kapott.hbci.manager.HBCIHandler.registerUser(HBCIHandler.java:169)
        at snapshot.war//org.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:132)
        ... 85 more
Caused by: org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Ermitteln einer neuen System-ID
        at snapshot.war//org.kapott.hbci.manager.HBCIUser.fetchSysId(HBCIUser.java:462)
        at snapshot.war//org.kapott.hbci.manager.HBCIUser.sync(HBCIUser.java:656)
        at snapshot.war//org.kapott.hbci.manager.HBCIUser.register(HBCIUser.java:704)
        at snapshot.war//org.kapott.hbci.manager.HBCIHandler.registerUser(HBCIHandler.java:167)
        ... 86 more
Caused by: org.kapott.hbci.exceptions.ProcessException: Fehler beim Ermitteln einer neuen System-ID
        at snapshot.war//org.kapott.hbci.dialog.HBCIDialogSync.checkResult(HBCIDialogSync.java:125)
        at snapshot.war//org.kapott.hbci.dialog.AbstractRawHBCIDialog.execute(AbstractRawHBCIDialog.java:106)
        at snapshot.war//org.kapott.hbci.manager.HBCIUser.fetchSysId(HBCIUser.java:441)
        ... 89 more

from hbci4java.

willuhn avatar willuhn commented on September 21, 2024

Die Bank sendet hier "9099:Verarbeitung zur Zeit nicht möglich. (5: Synch.TAN2Step6)". Also entweder hat sie tatsächlich eine technische Störung oder an den Einstellungen bzw. dem Verhalten deines Clients beim TAN-Handling stimmt was nicht. Wenn es in Hibiscus funktioniert, dann kann die Ursache nicht HBCI4Java sein.

from hbci4java.

willuhn avatar willuhn commented on September 21, 2024

PS: Ich weiss nicht, was du mit "HBCIVersion 3.0" meinst. Die aktuelle Version von HBCI4Java ist 3.1.53 - siehe https://mvnrepository.com/artifact/com.github.hbci4j/hbci4j-core

from hbci4java.

guyyst avatar guyyst commented on September 21, 2024

Mit HBCIVersion 3.0 hatte ich mich auf den Enum Wert HBCIVersion.HBCI_300 bezogen, sorry für's Missverständnis. HBCI4Java ist bei mir auf dem neusten Stand.


Ich habe mein Problem genauer untersuchen können, da ich vorher nicht dran gedacht hab die messages der überschriebenen log() Funktion in meinem HBCICallback auszugeben.

Damit habe ich herausgefunden, dass die grundlegende Ursache des Problems daher stammt, dass der Callback reason NEED_PT_PHOTOTAN nicht von execute(), sondern von new HBCIHandler() erzeugt wird (Wie in diesem Kommentar erklärt). Demnach muss eine Antwort sofort geliefert werden, und kann nicht zu einem späteren Zeitpunkt mit continueThreaded() bereitgestellt werden.

Das gleiche verhalten ist mir bereits bei anderen Callback Gründen, wie z.B. NEED_PT_SECMECH aufgefallen (daher mein anderes Github issue). Letztendlich war dieses Verhalten bei NEED_PT_SECMECH jedoch kein so großes Problem, da ich einfach einen Security Mechanisms als Standard wählen kann, ohne den User im Frontend zu fragen, und dann die Option anbiete den Prozess mit einem anderen Mechanismus erneut zu starten.

Die Tatsache, dass NEED_PT_PHOTOTAN nicht von einem Threaded Callback behandelt werden kann ist wesentlich problematischer. Ich muss das photoTAN Bild an das Frontend schicken um es dem User zu zeigen, und müsste dann mit der erhaltenen TAN im Backend den HBCI Process wieder aufnehmen.

Das erklärt auch warum Hibiscus keine Probleme mit der Deutschen Bank bzw. photoTAN hat, da es vermutlich nicht HBCICallbackThreaded verwendet, und alle Prozesse direkt im Client durchführt.


In dem oben verlinkten Kommentar steht, dass der Threading-Mechanismus nur 'im Moment' nicht für new HBCIHandler() verfügbar ist. Gibt es einen groben Zeitplan wann diese Funktionalität hinzugefügt wird, oder welche anderen Möglichkeiten es gäbe photoTAN in einer Client-Server Architektur zu benutzen?

from hbci4java.

willuhn avatar willuhn commented on September 21, 2024

Damit habe ich herausgefunden, dass die grundlegende Ursache des Problems daher stammt, dass der Callback reason NEED_PT_PHOTOTAN nicht von execute(), sondern von new HBCIHandler() erzeugt wird

Ah. Vestehe. Dei ganze Problematik ist dann vermutlich durch PSD2 entstanden. Vorher kam es nur zu TAN-Abfragen, wenn HBCI-Geschäftsvorfälle ausgeführt werden.

Jetzt mit PSD2 ist ja u.U. bereits beim "Login" eine TAN erforderlich. Also noch bevor irgend ein fachlicher Geschäftsvorfall ausgeführt wurde. Dieses interne Bootstrapping des Bankzugangs passiert ja automatisch beim Erstellen des HBCI-Handlers. Und dort werden dann halt auch die TANs getriggert.

In dem oben verlinkten Kommentar steht, dass der Threading-Mechanismus nur 'im Moment' nicht für new HBCIHandler() verfügbar ist. Gibt es einen groben Zeitplan wann diese Funktionalität hinzugefügt wird,

Ich nehme an, du beziehst dich auf diesen Kommentar hier:
https://github.com/hbci4j/hbci4java/blob/master/src/main/java/org/kapott/hbci/callback/HBCICallbackThreaded.java#L82

Der Kommentar stammt noch von Stefan Palme - dem ursprünglichen Autor von HBCI4Java. Der Kommentar ist mindestens 10 Jahre alt. Seit ich HBCI4Java 2011 geforkt habe, hab ich das Thema Threaded Callbacks nie weiter verfolgt, weil ich den Bedarf dafür nie hatte.

Aber wenn du schon so tief in die Materie eingestiegen bist, dass du die Ursache dafür gefunden hast, vielleicht findest du ja eine Lösung dafür, die ich als Patch übernehmen kann.

oder welche anderen Möglichkeiten es gäbe photoTAN in einer Client-Server Architektur zu benutzen?

Da hab ich leider auch keine Ideen. Ich hab das selbst nie so verwendet.

from hbci4java.

guyyst avatar guyyst commented on September 21, 2024

Ich nehme an, du beziehst dich auf diesen Kommentar hier

Jep, falschen Link kopiert^^

Ok, aber das ist alles gut zu wissen. Ich schaue mir an was sich machen lässt um die anderen Callbacks auch in Threads abhandeln zu können.

from hbci4java.

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.