firm1 / zest-writer Goto Github PK
View Code? Open in Web Editor NEWEditeur Hors-ligne de contenus au format zMarkdown.
Home Page: http://zest-writer.readthedocs.io
License: GNU General Public License v3.0
Editeur Hors-ligne de contenus au format zMarkdown.
Home Page: http://zest-writer.readthedocs.io
License: GNU General Public License v3.0
Lorsqu'on passe en mode plein écran et qu'on revient en mode normal, le splitpane ne revient pas de manière ergonomique, il y'a 50% de l'écran pour le sommaire 25% pour le texte markdown et 25% pour le rendu.
L'idée serait de jouer avec les vues pour corriger ça.
Si on va sur le bouton Exporter markdown
, et que nous cliquons sur la croix (= Annuler), l'export markdown
est enregistré dans le dossier de l'application.
Réalisation de la page A propos
accessible depuis la barre de menu.
Et comme dis, je prend directement.
Dans les bloc information, erreur, etc. on a pas les images comme sur le site
Actuellement, le défilement de la zone d'écriture et de prévisualisation n'est pas synchronisé : sans forcément le faire systématiquement, il serait agréable qu'il défile automatiquement jusqu'en bas quand on est en bas du fichier, permettant ainsi de voir la prévisualisation en continu.
Source:AmauryPi
Pour le type de bloc, inutile d'ouvrir un nouveau dialogue, une liste déroulante devrait suffire.
ça peut être sympa de pouvoir remplacer un texte dans la zone de rédaction.
L'idéal serait de coupler la boite de dialogue sur la même que celle de l'issue #70
Les indices de Flesh
et de Gunning-Fog
génère les erreurs suivantes:
https://gist.github.com/WinXaito/a815e0c813c0f722ed88f3f9a3fcbe0c
https://gist.github.com/WinXaito/1ad271f8ddc1fa80ca7391cad63b351e
Lorsque je tente de faire un build de l'application, j'ai plusieurs erreurs m'informant que j'ai des imports non résolus.
Par exemple, dans la classe MdTextController
, il ne parvient pas à résoudre les imports suivants :
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.ButtonType;
import javafx.scene.control.TextInputDialog;
Mais les autres de JavaFX oui.
Une idée ?
Sur un dossier ouvert dans l'arborescence, "Clic droit > Supprimer" ne fait que le fermer, ce qui est bien, mais du coup, il faudrait renommer ça en "Fermer" ou "Retirer du panneau".
A intégrer dans le Build Gradle.
Enfin, les numéros de ligne des blocs de code sont décalés (la ligne est trop basse par rapport au numéro), sur la prévisualisation, chez moi.
:Ce n'est pas en face. Mon perfectionnisme est contrarié.(Sous GNU/Linux, Ubuntu 14.10, KDE Plasma 5.9.0.)
Source:AmauryPi
Il ne semble pas y avoir de WordWrap. Si on fait un long mot, il va allonger le rendu.
On peut se dire qu'il ne va jamais y avoir de long mot, mais dans le cas d'une URL si.
Bonjour,
j'essaye en vain depuis quelques jours d'importer Zest-writer dans eclipse.
Après avoir enfin réussi à trouver le plugin graddle (Je me suis trompé de truc au début, et comme j'était parti je me suis retrouver avec plus de 2000 plugins et des boutons [test1, test] en haut, c'était absolument n'importe quoi...)
L'erreur qui est sorti:
https://gist.github.com/WinXaito/3417e2546fb6e8943ce079d4137161c9#file-zest-writer-imporerror
Mon procédé:
File -> Import -> Gradle project
Je sélectionne le dossier de Zest-writer
et en allant sur suivant puis suivant j'ai cette erreur.
Windows 7 / Java 1.8.0_71 / JRE 1.8.0_61-b15
J'ai voulu te faire un build pour les utilisateurs OS X mais il y a quelques difficultés. Les voici :
:packageClasses UP-TO-DATE
/Users/gerard/Documents/workspace-zds/zest-writer/build/icons/shortcut.iconset:warning: No image found for point size: 256 at scale: 2.
/Users/gerard/Documents/workspace-zds/zest-writer/build/icons/shortcut.iconset:warning: No image found for point size: 512 at scale: 1.
/Users/gerard/Documents/workspace-zds/zest-writer/build/icons/shortcut.iconset:warning: No image found for point size: 512 at scale: 2.
Icon javafx-icon.png for volume rejected from MacOSX bundling because javafx-icon.png does not exist or it is not an image.
java.io.IOException: Exec failed with code 1 command [[productbuild, --component, /var/folders/yd/kdk6_3wn4fvc71sblyjpgnn80000gn/T/fxbundler9213541538047447634/images/image-3179838175649741497/Zest Writer.app, /Applications, --sign, 3rd Party Mac Developer Installer: Pascal Paligot (U2Y4CR4HQY), --product, /var/folders/yd/kdk6_3wn4fvc71sblyjpgnn80000gn/T/fxbundler9213541538047447634/images/image-3179838175649741497/Zest Writer.app/Contents/Info.plist, /Users/gerard/Documents/workspace-zds/zest-writer/build/distributions/Zest Writer-0.1.0-MacAppStore.pkg] in unspecified directory
at com.oracle.tools.packager.IOUtils.exec(IOUtils.java:165)
at com.oracle.tools.packager.IOUtils.exec(IOUtils.java:138)
at com.oracle.tools.packager.IOUtils.exec(IOUtils.java:132)
at com.oracle.tools.packager.mac.MacAppStoreBundler.bundle(MacAppStoreBundler.java:159)
at com.oracle.tools.packager.mac.MacAppStoreBundler.execute(MacAppStoreBundler.java:412)
at com.oracle.tools.packager.Bundler$execute$0.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
at com.oracle.tools.packager.Bundler$execute$0.call(Unknown Source)
at org.bitbucket.shemnon.javafxplugin.tasks.JavaFXDeployTask$_processResources_closure3.doCall(JavaFXDeployTask.groovy:244)
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:497)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:292)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1015)
at groovy.lang.Closure.call(Closure.java:423)
at groovy.lang.Closure.call(Closure.java:439)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1379)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1372)
at org.codehaus.groovy.runtime.dgm$149.invoke(Unknown Source)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:271)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
at org.bitbucket.shemnon.javafxplugin.tasks.JavaFXDeployTask.processResources(JavaFXDeployTask.groovy:226)
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:497)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:226)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:219)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:208)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:585)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:568)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:62)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110)
at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:158)
at org.gradle.internal.Factories$1.create(Factories.java:22)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:155)
at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:36)
at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:103)
at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:97)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:97)
at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:102)
at org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.java:46)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.tooling.internal.provider.runner.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:58)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:47)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:32)
at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:77)
at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:47)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:52)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
at org.gradle.util.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.java:47)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:66)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:71)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.java:41)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
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)
L'idée est de pouvoir ouvrir plusieurs archives en même temps afin de les éditer en parallèle.
Ergonomiquement, il faudrait que les archives soit dans la Tree, les uns à la suite des autres. On peut donc les replier/déplier etc.
A terme on pourrait envisager de déplacer les partie/chapitres entre plusieurs archives ouvertes. Mais on va commencer au plus simple déjà.
PR: Fenêtre d'options #53
Je me dis qu'il pourrait gentiment être intéressant de géré des options, qu'en penses-tu ?
J'ai pensé qu'on pouvais éventuellement mettre un fichier VERSION
ou quelque chose du genre à la racine et faire des contrôles au lancement du programme pour indiquer si une nouvelle Release
est sortie.
Il pourrait être intéressant de créer un nouveau contenu via l'application.
si j'ouvre un extrait A dans un premier onglet, puis un extrait B dans un autre onglet, cliquer sur l'extrait A ne fait rien (alors que ça devrait me ramener sur l'onglet A).
devoir faire "sychronisation=>se connecter => OK => synchronisation => télécharger les contenus" c'est d'un chiant. Faire "télécharger les contenus" qui en fonction de l'état connecté ou non (d'ailleurs un petit voyant vert/rouge serait sympa pour indiquer la connexion) demande les crédentials serait bien plus efficace.
À quand le rendu des maths dans la prévisualisation ? Parce qu'en gros, c'est ce qui me manque le plus pour utiliser/tester plus en profondeur.
Reporté sur le forum.
Il me semble que MathJax soit déjà intégré dans le projet, tu as déjà fais quelque chose pour ? Est-ce sensé fonctionner ?
Il serait sympa de pouvoir rechercher un morceau de texte basique dans la zone de rédaction.
Un raccourci Ctrl+F serait adapté.
Il y a un bug étrange avec les citations (la source est mise en forme, mais pas le contenu de la citation).
Lorsque je saisis du texte, si j'appuie sur Alt+Gr pendant la saisie pour accéder à certains caractères, je perd le focus qui passe sur le menu, ou je me retrouve avec des caractères parasites (par ex. ~~ pour avoir voulu refermer une accolade).
Je me demandais s'il était difficile de mettre en place un système de Plugin ? Cela permettrais de mettre certaines choses en options pour ceux qui préfère un éditeur simple et léger. (Par exemple le rendu, MathJax, etc).
Par défaut depuis le passage au système d'options, on a une police qui n'est pas monospace pour la rédaction.
L'idéal serait d'avoir une police lisible et de la même taille que la police du rendu (Merriweather).
Bonjour,
pour sauvegarder, il faut aujourd'hui appuyer sur le bouton "disquette" (qui en plus n'a pas un énorme contraste). Faire un CTRL+S serait appréciable.
Pousser les jar, rpm, et deb sur bintray
le comportement de l'outil tableau est erratique : si j'ajoute une colonne, je perd tout, si j'ajoute une lignes certaines cases sont modifiées, etc.
Si on écrit ça :
>>>>>>>>>>>>>>>>>>>>> test
le programme plante
via le forum
Actuellement, le défilement de la zone d'écriture et de prévisualisation n'est pas synchronisé : sans forcément le faire systématiquement, il serait agréable qu'il défile automatiquement jusqu'en bas quand on est en bas du fichier, permettant ainsi de voir la prévisualisation en continu.
En terme de rapports de bug, si j'écris :
`Set<Class<? extends Object>>`...Zest Markdown prévisualise
Set>
. Il semble interpréter les balises HTML (ou ce qu'il croit en être).
Aujourd'hui le raccourci clavier Ctrl+L qui es censé permettre d'aller à la ligne ne fonctionne pas, on tape le numéro de ligne, mais on y arrive pas en cliquant sur OK.
Il y'a certainement quelque chose à corriger à cette ligne pour ramener le curseur au bon endroit.
Choisir un répertoire pour stocker les données de travail
Proposer d’ouvrir un fichier au double clic depuis le sommaire
Ce bug touche @artragis, et j'a réussi à le reproduire et donc a comprendre d’où il vient, il s'agit du fait que sur certains systèmes la webview n'arrive pas à charger le chemin vers la ressource contenant les static.
A corriger donc maintenant que c'est identifié
Il serait bien que quand nous cliquons sur un bouton (Gras, italique, etc.) le focus soit garder dans la zone d'édition.
Parce que là c'est vraiment moche ^^ (Linux CentOS 7, jdk 1.8.0_72, compilé depuis les sources).
Sinon, l'éditeur est vraiment cool et pratique à utiliser, merci 👍 !
Via Aabu sur le forum
Sur Linux Mint 17.3 'Rosa' (Cinnamon 64-bit)
La connexion au site semble marcher.
Par contre, le téléchargement des contenus m'amène des dossiers vides et des archives corrompues…
Actuellement la prévisualisation se fait par tranchée de 5 secondes, l'idée serait de faire du vrai temps réel.
Le drag n' drop est totalement chaotique, j'ai supprimé un extrait en voulant en déplacer un. Le fichier n'est pas supprimé par ailleurs (et c'est peut-être mieux ainsi), mais ce comportement est pour le moins étrange. Surtout que j'ai réussi à supprimer la conclusion (qui ne peut pas l'être par clic droit !).
Bloquer le double clic sur un contenu.
Il serait bien de géré les images et les émoticônes.
Actuellement si on ajoute une émoticône, on a une image par défaut et si on fait Clic droit -> Copier dans le presse papier
, l'application crash brutalement.
Certains utilisateurs se connectent à ZdS via leur compte gmail, il pourrait être intéressant de l'utiliser pour synchroniser le contenu.
Alors pour l'occasion j'ai testé zest writer et j'ai croisé un petit soucis, lorsque je veux uploader un tuto, il l'upload bien mais il ne synchronise pas avec le tuto actuel, ce qui fait qu'on a des doublons ^^ VOici ce que m'affiche le soft :
Bonne soirée :)
Reporté par Dryusdan sur le forum
Une façon simple serait de charger le fichiers js de MathJax directement dans la Webview.
Il pourrait être bien de mémoriser la taille et l'emplacement de la fenêtre lors de son redimensionnement et ou positionnement.
(On peut éventuellement faire une option si l'utilisateur souhaite automatique redimensionner la fenêtre à l'ouverture et la repositionner).
Et je prend directement ;p
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.