Git Product home page Git Product logo

plugins's Introduction

Introduction

This is the official repository of pgModeler plug-ins, it intends to keep a library of extensions created by third-party contributions. If you have the interest to create some fancy feature for pgModeler without modify the core code, you can use the plug-ins development infrastructure.

Building plug-ins

pgModeler plug-ins can be build in two different ways:

  1. Together with a pgModeler building process which generates the entire tool including its plugins. This compilation mode doesn't require any special procedure and the complete steps for the tool's building are available at project's official web site.

  2. Standalone building, which means, compile a plug-ins against an existing pgModeler installation. This compilation mode requires the use of the pgModeler's source code and its shared libraries located at the installation folder.

Standalone build

In this procedure we assume that you already have the Qt framework installed, a clean installation of pgModeler, and unrestricted access to its libraries (.so, .dylib or .dll). So, in order to build a single plug-in and make it recognizable by pgModeler you'll need first to download the tool's source code. Just make sure to download the source related to the same version as your pgModeler installation or the building process may fail. Second, clone this repository anywhere in your system since it's from there that we'll run the steps to achieve our goal.

For the steps below, as a convenience, we have aliased some paths in order to shorten the commands executed, make sure to replace them by the real paths according to your system.

  1. Cloning the source code:

    Alternatively, you can download a tarball or zip package and extract it anywhere, skipping to step 2.

    git clone https://github.com/pgmodeler/pgmodeler.git
    

    a) Checkout the tag related to the pgModeler installed on your system. Supposing that the version in your system is 0.9.4, the checkout command must be:

    git checktout v0.9.4
    
  2. Cloning the plug-ins repository:

    git clone https://github.com/pgmodeler/plugins.git
    
  3. Running qmake with custom parameters in order to allow standalone build:

    $QT_ROOT\bin\qmake plugins.pro PGMODELER_PLUGINS=$PGMODELER_PLUGINS_ROOT
                                   PGMODELER_SRC=$PGMODELER_SOURCE_ROOT
                                   PGMODELER_LIBS=$PGMODELER_LIBRARIES_ROOT
    

    In the command above, the variable $QT_ROOT must be replaced by the path to the binaries of your Qt installation.

    The argument PGMODELER_PLUGINS must point to the path where all pgModeler plug-ins are stored in your installation, also know as, plug-ins root directory. If you don't know where they are install, just run pgModeler, open the settings dialog, and locate the Plug-ins settings. In the command above, replace $PGMODELER_PLUGINS_ROOT by the path presented in the field Plug-ins root directory on plug-ins settings.

    The argument PGMODELER_SRC must point to the pgModeler source code (either that you've cloned or extracted). Don't forget to replace the variable $PGMODELER_SOURCE_ROOT by that path.

    Finally, the argument PGMODELER_LIBS must point to the path where all shared libraries (.so, .dll or .dylib) related to pgModeler are installed. Replace the variable $PGMODELER_LIBRARIES_ROOT by that path.

  4. Build and install the plug-ins. From the folder where the plug-ins repository was clone, run:

    make && make install
    

If the build process succeeds, will you see that some files are installed in the plug-ins root directory in your pgModeler installation. Now, just run pgModeler to test if the plug-ins are working properly. In case of any problem with any plug-in, pgModeler will refuse to load it and present a detailed error dialog. You can use the presented information to ask for help.

NOTE: If want to build a third-party plug-in that isn't officially distributed, just put its source code folder where all the other plug-ins' sources reside. From that plug-in source code folder, run the steps 3 and 4, not forgetting to replace the plugins.pro, in the step 3, by the project settings (.pro) related to the plug-in.

plugins's People

Contributors

maxzor avatar rkhaotix avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

plugins's Issues

can't compile with pgmodeler 0.9.4-beta

make[1]: Leaving directory '/usr/local/src/pgmodeler-0.9.4-beta/libs/libgui'
cd plugins/ && ( test -e Makefile || /usr/lib/qt5/bin/qmake -o Makefile /usr/local/src/pgmodeler-0.9.4-beta/plugins/plugins.pro CONFIG+=release ) && make -f Makefile 
make[1]: Entering directory '/usr/local/src/pgmodeler-0.9.4-beta/plugins'
cd dummy/ && ( test -e Makefile || /usr/lib/qt5/bin/qmake -o Makefile /usr/local/src/pgmodeler-0.9.4-beta/plugins/dummy/dummy.pro CONFIG+=release ) && make -f Makefile 
make[2]: Entering directory '/usr/local/src/pgmodeler-0.9.4-beta/plugins/dummy'
g++ -c -pipe -O2 -std=gnu++1y -D_REENTRANT -Wall -W -fPIC -DBUILDNUM=\"\" -DBUILDDATE=\"20211018\" -DBINDIR=\"/usr/local/bin\" -DPLUGINSDIR=\"/usr/local/lib/pgmodeler/plugins\" -DPRIVATEBINDIR=\"/usr/local/bin\" -DCONFDIR=\"/usr/local/share/pgmodeler/conf\" -DDOCDIR=\"/usr/local/share/pgmodeler\" -DLANGDIR=\"/usr/local/share/pgmodeler/lang\" -DSAMPLESDIR=\"/usr/local/share/pgmodeler/samples\" -DSCHEMASDIR=\"/usr/local/share/pgmodeler/schemas\" -DQT_NO_DEBUG -DQT_PLUGIN -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_UITOOLS_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I. -I/usr/local/src/pgmodeler-0.9.4-beta/plugins/../libpgmodeler_ui -I/usr/local/src/pgmodeler-0.9.4-beta/plugins/../libpgmodeler_ui/src -I/usr/local/src/pgmodeler-0.9.4-beta/plugins/../libobjrenderer/src -I/usr/local/src/pgmodeler-0.9.4-beta/plugins/../libpgconnector/src -I/usr/local/src/pgmodeler-0.9.4-beta/plugins/../libpgmodeler/src -I/usr/local/src/pgmodeler-0.9.4-beta/plugins/../libparsers/src -I/usr/local/src/pgmodeler-0.9.4-beta/plugins/../libutils/src -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtPrintSupport -isystem /usr/include/x86_64-linux-gnu/qt5/QtSvg -isystem /usr/include/x86_64-linux-gnu/qt5/QtUiTools -isystem /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtNetwork -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -Imoc -isystem /usr/include/libdrm -isystem /usr/include/postgresql -isystem /usr/include/libxml2 -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o obj/dummy.o src/dummy.cpp
In file included from src/dummy.cpp:19:
src/dummy.h:28:10: fatal error: pgmodelerplugin.h: No such file or directory
 #include "pgmodelerplugin.h"
          ^~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [Makefile:420: obj/dummy.o] Error 1
make[2]: Leaving directory '/usr/local/src/pgmodeler-0.9.4-beta/plugins/dummy'
make[1]: Leaving directory '/usr/local/src/pgmodeler-0.9.4-beta/plugins'
make[1]: *** [Makefile:47: sub-dummy-make_first-ordered] Error 2
make: *** [Makefile:313: sub-plugins-make_first-ordered] Error 2

garphicalquerybuilder compile fails on Windows (MSYS2 MINGW64)

I'm trying to compile pgModeler 1.1.0-alpha1 with the graphicalquerybuilder plugin on Windows using MSYS2 MINGW64. Without the plugin, I can compile it with no issues based on the instructions on the website. However, when I add the plugin and try to compile (running make) I get the following error:

make[3]: Entering directory 'pgmodeler/plugins/graphicalquerybuilder'
g++ -c -fno-keep-inline-dllexport -march=nocona -msahf -mtune=generic -Wa,-mbig-obj -O2 -std=gnu++1z -Wall -Wextra -Wextra -fexceptions -mthreads -frtti -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DPGMODELER_DEBUG -DQT_DISABLE_DEPRECATED_BEFORE=0x060000 -DCHECK_CURR_VER -DBUILDNUM=\"20231012\" -DBUILDDATE=\"20231012\" -DBINDIR=\"pgmodeler.pro\" -DPLUGINSDIR=\"pgmodeler.pro/plugins\" -DPRIVATEBINDIR=\"pgmodeler.pro/bin\" -DCONFDIR=\"pgmodeler.pro/conf\" -DDOCDIR=\"pgmodeler.pro/docs\" -DLANGDIR=\"pgmodeler.pro/lang\" -DSAMPLESDIR=\"pgmodeler.pro/samples\" -DSCHEMASDIR=\"pgmodeler.pro/schemas\" -DQT_NO_DEBUG -DQT_PLUGIN -DQT_PRINTSUPPORT_LIB -DQT_UITOOLS_LIB -DQT_OPENGLWIDGETS_LIB -DQT_WIDGETS_LIB -DQT_SVG_LIB -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I. -IC:/Tools/msys64pgmodeler/plugins/src -IC:/Tools/msys64/mingw64/include -IC:/Tools/msys64/mingw64/include/libxml2 -I../../libs/libgui/src -I../../libs/libcanvas/src -I../../libs/libconnector/src -I../../libs/libcore/src -I../../libs/libparsers/src -I../../libs/libutils/src -IC:/Tools/msys64pgmodeler/plugins/graphicalquerybuilder/../../libgui -IC:/Tools/msys64pgmodeler/plugins/graphicalquerybuilder/../../libgui/src -IC:/Tools/msys64pgmodeler/plugins/graphicalquerybuilder/../../libcanvas/src -IC:/Tools/msys64pgmodeler/plugins/graphicalquerybuilder/../../libconnector/src -IC:/Tools/msys64pgmodeler/plugins/graphicalquerybuilder/../../libcore/src -IC:/Tools/msys64pgmodeler/plugins/graphicalquerybuilder/../../libparsers/src -IC:/Tools/msys64pgmodeler/plugins/graphicalquerybuilder/../../libutils/src -IC:/Tools/msys64/mingw64/include/qt6 -IC:/Tools/msys64/mingw64/include/qt6/QtPrintSupport -IC:/Tools/msys64/mingw64/include/qt6/QtUiTools -IC:/Tools/msys64/mingw64/include/qt6/QtOpenGLWidgets -IC:/Tools/msys64/mingw64/include/qt6/QtWidgets -IC:/Tools/msys64/mingw64/include/qt6/QtSvg -IC:/Tools/msys64/mingw64/include/qt6/QtOpenGL -IC:/Tools/msys64/mingw64/include/qt6/QtGui -IC:/Tools/msys64/mingw64/include/qt6/QtNetwork -IC:/Tools/msys64/mingw64/include/qt6/QtCore -Imoc -Isrc -I/include -IC:/Tools/msys64/mingw64/share/qt6/mkspecs/win32-g++  -o obj/graphicalquerybuilder.o src/graphicalquerybuilder.cpp
In file included from src/graphicalquerybuildercorewidget.h:30,
                 from src/graphicalquerybuilder.h:29,
                 from src/graphicalquerybuilder.cpp:19:
src/graphicalquerybuildersqlwidget.h:42:17: error: 'SyntaxHighlighter' does not name a type; did you mean 'QSyntaxHighlighter'?
   42 |                 SyntaxHighlighter *hl_sqlcode;
      |                 ^~~~~~~~~~~~~~~~~
      |                 QSyntaxHighlighter
In file included from src/graphicalquerybuilder.h:28:
../../libs/libgui/src/pgmodelerplugin.h:142:30: warning: 'virtual void PgModelerPlugin::showPluginInfo() const' was hidden [-Woverloaded-virtual=]
  142 |                 virtual void showPluginInfo(void) const;
      |                              ^~~~~~~~~~~~~~
src/graphicalquerybuilder.h:70:22: note:   by 'void GraphicalQueryBuilder::showPluginInfo()'
   70 |                 void showPluginInfo(void);
      |                      ^~~~~~~~~~~~~~
../../libs/libgui/src/pgmodelerplugin.h:139:33: warning: 'virtual QString PgModelerPlugin::getPluginDescription() const' was hidden [-Woverloaded-virtual=]
  139 |                 virtual QString getPluginDescription(void) const = 0;
      |                                 ^~~~~~~~~~~~~~~~~~~~
src/graphicalquerybuilder.h:60:25: note:   by 'QString GraphicalQueryBuilder::getPluginDescription()'
   60 |                 QString getPluginDescription(void);
      |                         ^~~~~~~~~~~~~~~~~~~~
../../libs/libgui/src/pgmodelerplugin.h:136:33: warning: 'virtual QString PgModelerPlugin::getPluginVersion() const' was hidden [-Woverloaded-virtual=]
  136 |                 virtual QString getPluginVersion(void) const = 0;
      |                                 ^~~~~~~~~~~~~~~~
src/graphicalquerybuilder.h:58:25: note:   by 'QString GraphicalQueryBuilder::getPluginVersion()'
   58 |                 QString getPluginVersion(void);
      |                         ^~~~~~~~~~~~~~~~
../../libs/libgui/src/pgmodelerplugin.h:133:33: warning: 'virtual QString PgModelerPlugin::getPluginAuthor() const' was hidden [-Woverloaded-virtual=]
  133 |                 virtual QString getPluginAuthor(void) const = 0;
      |                                 ^~~~~~~~~~~~~~~
src/graphicalquerybuilder.h:59:25: note:   by 'QString GraphicalQueryBuilder::getPluginAuthor()'
   59 |                 QString getPluginAuthor(void);
      |                         ^~~~~~~~~~~~~~~
../../libs/libgui/src/pgmodelerplugin.h:130:33: warning: 'virtual QString PgModelerPlugin::getPluginTitle() const' was hidden [-Woverloaded-virtual=]
  130 |                 virtual QString getPluginTitle(void) const = 0;
      |                                 ^~~~~~~~~~~~~~
src/graphicalquerybuilder.h:57:25: note:   by 'QString GraphicalQueryBuilder::getPluginTitle()'
   57 |                 QString getPluginTitle(void);
      |                         ^~~~~~~~~~~~~~
src/graphicalquerybuilder.cpp: In constructor 'GraphicalQueryBuilder::GraphicalQueryBuilder()':
src/graphicalquerybuilder.cpp:31:43: error: 'getPluginsDir' is not a member of 'GlobalAttributes'
   31 |                         GlobalAttributes::getPluginsDir() +
      |                                           ^~~~~~~~~~~~~
src/graphicalquerybuilder.cpp: In member function 'virtual void GraphicalQueryBuilder::initPlugin(MainWindow*)':
src/graphicalquerybuilder.cpp:110:22: error: 'GuiUtilsNs' has not been declared
  110 |     icon39.addPixmap(GuiUtilsNs::getIconPath("treeview"));
      |                      ^~~~~~~~~~
src/graphicalquerybuilder.cpp:126:22: error: 'GuiUtilsNs' has not been declared
  126 |     icon39.addPixmap(GuiUtilsNs::getIconPath("treeview"));
      |                      ^~~~~~~~~~
src/graphicalquerybuilder.cpp: In member function 'void GraphicalQueryBuilder::adjustViewportToItems(QList<BaseObjectView*>)':
src/graphicalquerybuilder.cpp:240:75: warning: unused parameter 'items' [-Wunused-parameter]
  240 | void GraphicalQueryBuilder::adjustViewportToItems(QList<BaseObjectView *> items)
      |                                                   ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
make[3]: *** [Makefile.Release:4817: obj/graphicalquerybuilder.o] Error 1
make[3]: Leaving directory 'pgmodeler/plugins/graphicalquerybuilder'
make[2]: *** [Makefile:45: release] Error 2
make[2]: Leaving directory 'pgmodeler/plugins/graphicalquerybuilder'
make[1]: *** [Makefile:94: sub-graphicalquerybuilder-make_first-ordered] Error 2
make[1]: Leaving directory 'pgmodeler/plugins'
make: *** [Makefile:318: sub-plugins-make_first-ordered] Error 2

I tried to run the compile with and without the SQL-join solver (after following the instructions on the page) and go the same result). I'm using the default develop branch for the plugins.

http://siekiera.mimuw.edu.pl:8082/paal/ no longer exists

Running setup.sh paal results in an error:

root@6d55f123b18e:/pgmodeler/plugins/graphicalquerybuilder# ./setup.sh paal
Cloning into 'paal'...
fatal: unable to access 'http://siekiera.mimuw.edu.pl:8082/paal/': Failed to connect to siekiera.mimuw.edu.pl port 8082: Connection timed out

Looks like y'all need another source for paal. In the meantime I've disabled the SQL-join part of the graphical query plugin in order to compile pgmodeler.

Error compiling 0.9.4 on Linux

I'm trying to compile the v0.9.4 with GQB included. I have tried all combinations of main/develop branches for pgModeler and plugins, but get the same result all the time:

...
g++ -c -pipe -O2 -std=gnu++1y -D_REENTRANT -Wall -W -fPIC -DBUILDNUM=\"6715e61d4\" -DBUILDDATE=\"20220106\" -DBINDIR=\"/home/milan/Apps/pgModeler.0.9.4\" -DPLUGINSDIR=\"/home/milan/Apps/pgModeler.0.9.4/lib/pgmodeler/plugins\" -DPRIVATEBINDIR=\"/home/milan/Apps/pgModeler.0.9.4\" -DCONFDIR=\"/home/milan/Apps/pgModeler.0.9.4/share/pgmodeler/conf\" -DDOCDIR=\"/home/milan/Apps/pgModeler.0.9.4/share/pgmodeler\" -DLANGDIR=\"/home/milan/Apps/pgModeler.0.9.4/share/pgmodeler/lang\" -DSAMPLESDIR=\"/home/milan/Apps/pgModeler.0.9.4/share/pgmodeler/samples\" -DSCHEMASDIR=\"/home/milan/Apps/pgModeler.0.9.4/share/pgmodeler/schemas\" -DGRAPHICAL_QUERY_BUILDER_JOIN_SOLVER -DQT_NO_DEBUG -DQT_PLUGIN -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_UITOOLS_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I. -I../../libs/libgui/src -I../../libs/libcanvas/src -I../../libs/libconnector/src -I../../libs/libcore/src -I../../libs/libparsers/src -I../../libs/libutils/src -I/home/milan/Applications/pgModeler.0.9.4/plugins/graphicalquerybuilder/../../libpgmodeler_ui -I/home/milan/Applications/pgModeler.0.9.4/plugins/graphicalquerybuilder/../../libpgmodeler_ui/src -I/home/milan/Applications/pgModeler.0.9.4/plugins/graphicalquerybuilder/../../libobjrenderer/src -I/home/milan/Applications/pgModeler.0.9.4/plugins/graphicalquerybuilder/../../libpgconnector/src -I/home/milan/Applications/pgModeler.0.9.4/plugins/graphicalquerybuilder/../../libpgmodeler/src -I/home/milan/Applications/pgModeler.0.9.4/plugins/graphicalquerybuilder/../../libparsers/src -I/home/milan/Applications/pgModeler.0.9.4/plugins/graphicalquerybuilder/../../libutils/src -Ipaal/include -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtPrintSupport -isystem /usr/include/x86_64-linux-gnu/qt5/QtSvg -isystem /usr/include/x86_64-linux-gnu/qt5/QtUiTools -isystem /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtNetwork -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -Imoc -Isrc -isystem /usr/include/postgresql -isystem /usr/include/libxml2 -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o obj/graphicalquerybuilderpathwidget.o src/graphicalquerybuilderpathwidget.cpp
In file included from src/graphicalquerybuildersqlwidget.cpp:19:
src/graphicalquerybuildersqlwidget.h:29:10: fatal error: baseobjectwidget.h: No such file or directory
   29 | #include "baseobjectwidget.h"
      |          ^~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [Makefile:1287: obj/graphicalquerybuildersqlwidget.o] Error 1
make[2]: *** Waiting for unfinished jobs....
In file included from src/graphicalquerybuildercorewidget.h:29,
                 from src/graphicalquerybuildercorewidget.cpp:19:
src/graphicalquerybuilderpathwidget.h:31:10: fatal error: pgmodelerns.h: No such file or directory
   31 | #include "pgmodelerns.h"
      |          ^~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [Makefile:1084: obj/graphicalquerybuildercorewidget.o] Error 1
In file included from src/graphicalquerybuilderpathwidget.cpp:19:
src/graphicalquerybuilderpathwidget.h:31:10: fatal error: pgmodelerns.h: No such file or directory
   31 | #include "pgmodelerns.h"
      |          ^~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [Makefile:1161: obj/graphicalquerybuilderpathwidget.o] Error 1
In file included from src/graphicalquerybuildercorewidget.h:29,
                 from src/graphicalquerybuilder.h:29,
                 from src/graphicalquerybuilder.cpp:19:
src/graphicalquerybuilderpathwidget.h:31:10: fatal error: pgmodelerns.h: No such file or directory
   31 | #include "pgmodelerns.h"
      |          ^~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [Makefile:1007: obj/graphicalquerybuilder.o] Error 1
make[2]: Leaving directory '/home/milan/Applications/pgModeler.0.9.4/plugins/graphicalquerybuilder'
make[1]: *** [Makefile:135: sub-graphicalquerybuilder-make_first-ordered] Error 2
make[1]: Leaving directory '/home/milan/Applications/pgModeler.0.9.4/plugins'
make: *** [Makefile:315: sub-plugins-make_first-ordered] Error 2

Is there any way to go around the errors above?

Can' not compile on MacOS

When I make pgmodeler...
I have error:
src/sampleplugin.h:54:30: error: unknown type name 'ActionId'
virtual QAction *getAction(ActionId act_id) const;

Plugins not loading, although they have been successfully compiled

Bug description
Cannot load plugins after successful compilation. pgModeler starts, but plugins are not loaded and error is reported before the main window opens.

My qmake was like this:

→ /usr/bin/qmake -r PREFIX=$INSTALLATION_ROOT BINDIR=$INSTALLATION_ROOT \
  PRIVATEBINDIR=$INSTALLATION_ROOT PRIVATELIBDIR=$INSTALLATION_ROOT/lib PLUGINSDIR=$INSTALLATION_ROOT/plugins pgmodeler.pro 
Reading /home/milan/Applications/pgmodeler/libutils/libutils.pro
Reading /home/milan/Applications/pgmodeler/libparsers/libparsers.pro
Reading /home/milan/Applications/pgmodeler/libpgmodeler/libpgmodeler.pro
Reading /home/milan/Applications/pgmodeler/libpgconnector/libpgconnector.pro
Reading /home/milan/Applications/pgmodeler/libobjrenderer/libobjrenderer.pro
Reading /home/milan/Applications/pgmodeler/libpgmodeler_ui/libpgmodeler_ui.pro
Reading /home/milan/Applications/pgmodeler/plugins/plugins.pro
 Reading /home/milan/Applications/pgmodeler/plugins/dummy/dummy.pro
 Reading /home/milan/Applications/pgmodeler/plugins/xml2object/xml2object.pro
 Reading /home/milan/Applications/pgmodeler/plugins/graphicalquerybuilder/graphicalquerybuilder.pro
Reading /home/milan/Applications/pgmodeler/crashhandler/crashhandler.pro
Reading /home/milan/Applications/pgmodeler/main-cli/main-cli.pro
Reading /home/milan/Applications/pgmodeler/main/main.pro

** pgModeler build details ** 
 
  PREFIX        = /home/milan/Apps/pgModeler 
  BINDIR        = /home/milan/Apps/pgModeler 
  PRIVATEBINDIR = /home/milan/Apps/pgModeler 
  PRIVATELIBDIR = /home/milan/Apps/pgModeler/lib 
  PLUGINSDIR    = /home/milan/Apps/pgModeler/plugins 
  SHAREDIR      = /home/milan/Apps/pgModeler/share/pgmodeler 
  CONFDIR       = /home/milan/Apps/pgModeler/share/pgmodeler/conf 
  DOCDIR        = /home/milan/Apps/pgModeler/share/pgmodeler 
  LANGDIR       = /home/milan/Apps/pgModeler/share/pgmodeler/lang 
  SAMPLESDIR    = /home/milan/Apps/pgModeler/share/pgmodeler/samples 
  SCHEMASDIR    = /home/milan/Apps/pgModeler/share/pgmodeler/schemas 
 
* To change a variable value run qmake again setting the desired value e.g.: 
  > qmake PREFIX+=/usr/local -r pgmodeler.pro 
 
* Proceed with build process by running: 
  >  make && make install 

Upon starting pgmodeler, I get the following stack trace:

[0] src/settings/pluginsconfigwidget.cpp (151)
  virtual void PluginsConfigWidget::loadConfiguration()
    [PluginsNotLoaded] One or more plugins were not activated due to errors during the loading process! Check the exception stack for more details.

[1] src/settings/pluginsconfigwidget.cpp (143)
  virtual void PluginsConfigWidget::loadConfiguration()
    [PluginNotLoaded] Could not load the plugin `xml2object' from the library `/home/milan/Apps/pgModeler/plugins/xml2object/libxml2object.so'! Message returned by plugin manager: `Cannot load library /home/milan/Apps/pgModeler/plugins/xml2object/libxml2object.so: (/lib/libpgmodeler.so.1: undefined symbol: _ZN12SchemaParser16CharIniAttributeE)'

[2] src/settings/pluginsconfigwidget.cpp (143)
  virtual void PluginsConfigWidget::loadConfiguration()
    [PluginNotLoaded] Could not load the plugin `graphicalquerybuilder' from the library `/home/milan/Apps/pgModeler/plugins/graphicalquerybuilder/libgraphicalquerybuilder.so'! Message returned by plugin manager: `Cannot load library /home/milan/Apps/pgModeler/plugins/graphicalquerybuilder/libgraphicalquerybuilder.so: (/lib/libpgmodeler.so.1: undefined symbol: _ZN12SchemaParser16CharIniAttributeE)'

[3] src/settings/pluginsconfigwidget.cpp (143)
  virtual void PluginsConfigWidget::loadConfiguration()
    [PluginNotLoaded] Could not load the plugin `dummy' from the library `/home/milan/Apps/pgModeler/plugins/dummy/libdummy.so'! Message returned by plugin manager: `Cannot load library /home/milan/Apps/pgModeler/plugins/dummy/libdummy.so: (/lib/libpgmodeler.so.1: undefined symbol: _ZN12SchemaParser16CharIniAttributeE)'

All the files, including plugins, are placed in correct places upon make install:

→ tree .
~/Apps/pgModeler
├── lib
│   ├── libcanvas.so -> libcanvas.so.1.0.0
│   ├── libcanvas.so.1 -> libcanvas.so.1.0.0
│   ├── libcanvas.so.1.0 -> libcanvas.so.1.0.0
│   ├── libcanvas.so.1.0.0
│   ├── libconnector.so -> libconnector.so.1.0.0
│   ├── libconnector.so.1 -> libconnector.so.1.0.0
│   ├── libconnector.so.1.0 -> libconnector.so.1.0.0
│   ├── libconnector.so.1.0.0
│   ├── libcore.so -> libcore.so.1.0.0
│   ├── libcore.so.1 -> libcore.so.1.0.0
│   ├── libcore.so.1.0 -> libcore.so.1.0.0
│   ├── libcore.so.1.0.0
│   ├── libgui.so -> libgui.so.1.0.0
│   ├── libgui.so.1 -> libgui.so.1.0.0
│   ├── libgui.so.1.0 -> libgui.so.1.0.0
│   ├── libgui.so.1.0.0
│   ├── libparsers.so -> libparsers.so.1.0.0
│   ├── libparsers.so.1 -> libparsers.so.1.0.0
│   ├── libparsers.so.1.0 -> libparsers.so.1.0.0
│   ├── libparsers.so.1.0.0
│   ├── libutils.so -> libutils.so.1.0.0
│   ├── libutils.so.1 -> libutils.so.1.0.0
│   ├── libutils.so.1.0 -> libutils.so.1.0.0
│   └── libutils.so.1.0.0
├── pgmodeler
├── pgmodeler-ch
├── pgmodeler-cli
├── pgmodeler-se
├── plugins
│   ├── dummy
│   │   ├── dummy.json
│   │   ├── dummy.png
│   │   ├── lang
│   │   │   ├── dummy.en_US.qm
│   │   │   └── dummy.en_US.ts
│   │   └── libdummy.so
│   ├── graphicalquerybuilder
│   │   ├── graphicalquerybuilder.json
│   │   ├── graphicalquerybuilder.png
│   │   ├── lang
│   │   │   ├── graphicalquerybuilder.en_US.qm
│   │   │   └── graphicalquerybuilder.en_US.ts
│   │   └── libgraphicalquerybuilder.so
│   └── xml2object
│       ├── libxml2object.so
│       ├── xml2object.json
│       └── xml2object.png
└── share
    └── pgmodeler
        ├── CHANGELOG.md
        ├── conf
        │   ├── connections.conf
        │   ├── defaults
        │   │   ├── connections.conf
        │   │   ├── diff-presets.conf
        │   │   ├── example.dbm
        │   │   ├── objects-style.conf
        │   │   ├── pattern-highlight.conf
        │   │   ├── pgmodeler.conf
        │   │   ├── relationships.conf
        │   │   ├── sch-highlight.conf
        │   │   ├── snippets.conf
        │   │   ├── sql-highlight.conf
        │   │   ├── ui-style.conf
        │   │   └── xml-highlight.conf
        │   ├── diff-presets.conf
        │   ├── dtd
        │   │   ├── connections.dtd
        │   │   ├── diff-presets.dtd
        │   │   ├── objects-style.dtd
        │   │   ├── pgmodeler.dtd
        │   │   ├── relationships.dtd
        │   │   ├── snippets.dtd
        │   │   ├── source-code-highlight.dtd
        │   │   └── sql-history.dtd
        │   ├── example.dbm
        │   ├── objects-style.conf
        │   ├── pattern-highlight.conf
        │   ├── pgmodeler.conf
        │   ├── pgmodeler_dbm.png
        │   ├── pgmodeler_logo.png
        │   ├── pgmodeler_sch.png
        │   ├── relationships.conf
        │   ├── schemas
        │   │   ├── application-dbm.sch
        │   │   ├── application-sch.sch
        │   │   ├── commands.sch
        │   │   ├── connections.sch
        │   │   ├── desktop.sch
        │   │   ├── desktop-sch.sch
        │   │   ├── diff-presets.sch
        │   │   ├── file.sch
        │   │   ├── objects-style.sch
        │   │   ├── patterns.sch
        │   │   ├── pgmodeler.sch
        │   │   ├── preset.sch
        │   │   ├── relationships.sch
        │   │   ├── snippet.sch
        │   │   ├── snippets.sch
        │   │   ├── sql-history.sch
        │   │   └── widget.sch
        │   ├── sch-highlight.conf
        │   ├── snippets.conf
        │   ├── sql-highlight.conf
        │   ├── ui-style.conf
        │   └── xml-highlight.conf
        ├── lang
        │   ├── es_ES.qm
        │   ├── es_ES.ts
        │   ├── fr_FR.qm
        │   ├── fr_FR.ts
        │   ├── nl_NL.qm
        │   ├── nl_NL.ts
        │   ├── pt_BR.qm
        │   ├── pt_BR.ts
        │   ├── zh_CN.qm
        │   └── zh_CN.ts
        ├── LICENSE
        ├── README.md
        ├── RELEASENOTES.md
        ├── samples
        │   ├── 3dcitydb.dbm
        │   ├── demo.dbm
        │   ├── oldsample.dbm
        │   ├── pagila.dbm
        │   └── usda.dbm
        └── schemas
            ├── alter
            │   ├── collation.sch
            │   ├── column.sch
            │   ├── confparam.sch
            │   ├── constraint.sch
            │   ├── database.sch
            │   ├── diff.sch
            │   ├── domain.sch
            │   ├── domconstraint.sch
            │   ├── eventtrigger.sch
            │   ├── extension.sch
            │   ├── foreigndatawrapper.sch
            │   ├── foreignserver.sch
            │   ├── foreigntable.sch
            │   ├── function.sch
            │   ├── index.sch
            │   ├── owner.sch
            │   ├── permission.sch
            │   ├── policy.sch
            │   ├── procedure.sch
            │   ├── relationship.sch
            │   ├── rename.sch
            │   ├── rolemembers.sch
            │   ├── role.sch
            │   ├── schema.sch
            │   ├── sequence.sch
            │   ├── table.sch
            │   ├── tablespace.sch
            │   ├── truncate.sch
            │   ├── usermapping.sch
            │   └── usertype.sch
            ├── catalog
            │   ├── aggregate.sch
            │   ├── cast.sch
            │   ├── collation.sch
            │   ├── column.sch
            │   ├── comment.sch
            │   ├── constraint.sch
            │   ├── conversion.sch
            │   ├── database.sch
            │   ├── domain.sch
            │   ├── eventtrigger.sch
            │   ├── extension.sch
            │   ├── foreigndatawrapper.sch
            │   ├── foreignserver.sch
            │   ├── foreigntable.sch
            │   ├── function.sch
            │   ├── index.sch
            │   ├── language.sch
            │   ├── notextobject.sch
            │   ├── objcount.sch
            │   ├── opclass.sch
            │   ├── operator.sch
            │   ├── opfamily.sch
            │   ├── policy.sch
            │   ├── procedure.sch
            │   ├── role.sch
            │   ├── rule.sch
            │   ├── schema.sch
            │   ├── sequence.sch
            │   ├── server.sch
            │   ├── table.sch
            │   ├── tablespace.sch
            │   ├── template.sch
            │   ├── transform.sch
            │   ├── trigger.sch
            │   ├── usermapping.sch
            │   ├── usertype.sch
            │   └── view.sch
            ├── datadict
            │   ├── column.sch
            │   ├── constraint.sch
            │   ├── datadict.sch
            │   ├── index.sch
            │   ├── item.sch
            │   ├── link.sch
            │   ├── styles.sch
            │   ├── table.sch
            │   └── view.sch
            ├── sql
            │   ├── aggregate.sch
            │   ├── cast.sch
            │   ├── collation.sch
            │   ├── column.sch
            │   ├── comment.sch
            │   ├── confparam.sch
            │   ├── constraint.sch
            │   ├── conversion.sch
            │   ├── database.sch
            │   ├── dbmodel.sch
            │   ├── domain.sch
            │   ├── domconstraint.sch
            │   ├── drop.sch
            │   ├── element.sch
            │   ├── eventtrigger.sch
            │   ├── excelement.sch
            │   ├── extension.sch
            │   ├── foreigndatawrapper.sch
            │   ├── foreignserver.sch
            │   ├── foreigntable.sch
            │   ├── function.sch
            │   ├── genericsql.sch
            │   ├── idxelement.sch
            │   ├── index.sch
            │   ├── language.sch
            │   ├── opclass.sch
            │   ├── operator.sch
            │   ├── opfamily.sch
            │   ├── parameter.sch
            │   ├── partitionkey.sch
            │   ├── permission.sch
            │   ├── policy.sch
            │   ├── procedure.sch
            │   ├── relationship.sch
            │   ├── role.sch
            │   ├── rule.sch
            │   ├── schema.sch
            │   ├── sequence.sch
            │   ├── sessionopts.sch
            │   ├── table.sch
            │   ├── tablespace.sch
            │   ├── transform.sch
            │   ├── trigger.sch
            │   ├── typeattribute.sch
            │   ├── usermapping.sch
            │   ├── usertype.sch
            │   └── view.sch
            └── xml
                ├── aggregate.sch
                ├── appendedsql.sch
                ├── basetype.sch
                ├── cast.sch
                ├── changelog.sch
                ├── collation.sch
                ├── column.sch
                ├── comment.sch
                ├── confparam.sch
                ├── constraint.sch
                ├── conversion.sch
                ├── customidxs.sch
                ├── database.sch
                ├── dbmodel.sch
                ├── domain.sch
                ├── domconstraint.sch
                ├── dtd
                │   ├── aggregate.dtd
                │   ├── baseelements.dtd
                │   ├── basetype.dtd
                │   ├── cast.dtd
                │   ├── changelog.dtd
                │   ├── collation.dtd
                │   ├── column.dtd
                │   ├── constraint.dtd
                │   ├── conversion.dtd
                │   ├── customidxs.dtd
                │   ├── database.dtd
                │   ├── dbmodel.dtd
                │   ├── domain.dtd
                │   ├── element.dtd
                │   ├── eventtrigger.dtd
                │   ├── extension.dtd
                │   ├── foreigndatawrapper.dtd
                │   ├── foreignserver.dtd
                │   ├── foreigntable.dtd
                │   ├── function.dtd
                │   ├── genericsql.dtd
                │   ├── index.dtd
                │   ├── label.dtd
                │   ├── language.dtd
                │   ├── metadata.dtd
                │   ├── object.dtd
                │   ├── opclass.dtd
                │   ├── operator.dtd
                │   ├── opfamily.dtd
                │   ├── parameter.dtd
                │   ├── permission.dtd
                │   ├── policy.dtd
                │   ├── procedure.dtd
                │   ├── relationship.dtd
                │   ├── role.dtd
                │   ├── rule.dtd
                │   ├── schema.dtd
                │   ├── sequence.dtd
                │   ├── table.dtd
                │   ├── tablespace.dtd
                │   ├── tag.dtd
                │   ├── textbox.dtd
                │   ├── transform.dtd
                │   ├── trigger.dtd
                │   ├── usermapping.dtd
                │   ├── usertype.dtd
                │   └── view.dtd
                ├── element.sch
                ├── entry.sch
                ├── eventtrigger.sch
                ├── excelement.sch
                ├── extension.sch
                ├── foreigndatawrapper.sch
                ├── foreignserver.sch
                ├── foreigntable.sch
                ├── function.sch
                ├── genericsql.sch
                ├── idxelement.sch
                ├── index.sch
                ├── info.sch
                ├── label.sch
                ├── language.sch
                ├── metadata.sch
                ├── object.sch
                ├── opclass.sch
                ├── operator.sch
                ├── opfamily.sch
                ├── parameter.sch
                ├── partitionkey.sch
                ├── permission.sch
                ├── policy.sch
                ├── position.sch
                ├── prependedsql.sch
                ├── procedure.sch
                ├── reference.sch
                ├── reftable.sch
                ├── relationship.sch
                ├── role.sch
                ├── rule.sch
                ├── schema.sch
                ├── sequence.sch
                ├── style.sch
                ├── table.sch
                ├── tablespace.sch
                ├── tag.sch
                ├── textbox.sch
                ├── transform.sch
                ├── trigger.sch
                ├── typeattribute.sch
                ├── usermapping.sch
                ├── usertype.sch
                └── view.sch

22 directories, 343 files

How to reproduce
Checkout the current 0.9.4-beta1 branch, setup plugins and compile.

Expected behavior
pgmodeler starts with plugins.

Info about your desktop

  • OS: Linux Mint
  • Version: 20.2
  • Window manager: not applicable
  • pgModeler version: v0.9.4-beta1
  • Qt version: Qt 5.12.8 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 9.3.0) on "xcb"

Operation::ObjCreated error unable to make

I came across this error after running make.

make[3]: Entering directory '/c/Users/David/IdeaProjects/pgmodeler/pgmodeler-main/plugins/dummy'
make[3]: Nothing to be done for 'first'.
make[3]: Leaving directory '/c/Users/David/IdeaProjects/pgmodeler/pgmodeler-main/plugins/dummy'
make[2]: Leaving directory '/c/Users/David/IdeaProjects/pgmodeler/pgmodeler-main/plugins/dummy'
cd xml2object/ && ( test -e Makefile || C:/msys64/mingw64/bin/qmake.exe -o Makefile C:/Users/David/IdeaProjects/pgmodeler/pgmodeler-main/plugins/xml2object/xml2object.pro CONFIG+=release PREFIX=C:/Program ) && make -f Makefile
make[2]: Entering directory '/c/Users/David/IdeaProjects/pgmodeler/pgmodeler-main/plugins/xml2object'
make -f Makefile.Release
make[3]: Entering directory '/c/Users/David/IdeaProjects/pgmodeler/pgmodeler-main/plugins/xml2object'
g++ -c -fno-keep-inline-dllexport -march=nocona -msahf -mtune=generic -Wa,-mbig-obj -DHAVE_STRUCT_TIMESPEC -O2 -std=gnu++1y -Wall -Wextra -Wextra -fexceptions -mthreads -frtti -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DBUILDNUM="20221110" -DBUILDDATE="20221110" -DBINDIR="C:/Program" -DPLUGINSDIR="C:/Program/plugins" -DPRIVATEBINDIR="C:/Program" -DCONFDIR="C:/Program/conf" -DDOCDIR="C:/Program" -DLANGDIR="C:/Program/lang" -DSAMPLESDIR="C:/Program/samples" -DSCHEMASDIR="C:/Program/schemas" -DQT_NO_DEBUG -DQT_PLUGIN -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_UITOOLS_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I. -IC:/msys64/mingw64/include -IC:/msys64/mingw64/include/libxml2 -I../../libs/libgui/src -I../../libs/libcanvas/src -I../../libs/libconnector/src -I../../libs/libcore/src -I../../libs/libparsers/src -I../../libs/libutils/src -IC:/msys64/mingw64/include/QtPrintSupport -IC:/msys64/mingw64/include/QtSvg -IC:/msys64/mingw64/include/QtUiTools -IC:/msys64/mingw64/include/QtWidgets -IC:/msys64/mingw64/include/QtGui -IC:/msys64/mingw64/include/QtNetwork -IC:/msys64/mingw64/include/QtCore -Imoc -Isrc -I/include -IC:/msys64/mingw64/share/qt5/mkspecs/win32-g++ -o obj/xml2objectwidget.o src/xml2objectwidget.cpp
src/xml2objectwidget.cpp: In member function 'void Xml2ObjectWidget::generateObject()':
src/xml2objectwidget.cpp:87:92: error: 'ObjCreated' is not a member of 'Operation'
87 | op_list->registerObject(object, Operation::ObjCreated, -1, model);
| ^~~~~~~~~~
make[3]: *** [Makefile.Release:587: obj/xml2objectwidget.o] Error 1
make[3]: Leaving directory '/c/Users/David/IdeaProjects/pgmodeler/pgmodeler-main/plugins/xml2object'
make[2]: *** [Makefile:45: release] Error 2
make[2]: Leaving directory '/c/Users/David/IdeaProjects/pgmodeler/pgmodeler-main/plugins/xml2object'
make[1]: *** [Makefile:95: sub-xml2object-make_first-ordered] Error 2
make[1]: Leaving directory '/c/Users/David/IdeaProjects/pgmodeler/pgmodeler-main/plugins'
make: *** [Makefile:318: sub-plugins-make_first-ordered] Error 2

If you can help out with this. Thank you!

Plugins compilation error

I've built pgModeler 1.0.0-beta flawlessly, but get a compilation error when trying to compile plugins:

In file included from src/graphicalquerybuilder.h:29,
                 from src/graphicalquerybuilder.cpp:19:
src/graphicalquerybuildercorewidget.h:85:34: error: ‘vector’ has not been declared
   85 |   void configureOrderBySpinBoxes(vector<int> ob_cols, int ob_col, int state);
      |                                  ^~~~~~
src/graphicalquerybuildercorewidget.h:85:40: error: expected ‘,’ or ‘...’ before ‘<’ token
   85 |   void configureOrderBySpinBoxes(vector<int> ob_cols, int ob_col, int state);
      |                                        ^
src/graphicalquerybuildercorewidget.h:133:3: error: ‘tuple’ does not name a type
  133 |   tuple<QHash<BaseTable*, int> ,vector<QPair<int, int>>,
      |   ^~~~~
src/graphicalquerybuilder.cpp: In member function ‘void GraphicalQueryBuilder::adjustViewportToItems(QList<BaseObjectView*>)’:
src/graphicalquerybuilder.cpp:240:75: warning: unused parameter ‘items’ [-Wunused-parameter]
  240 | void GraphicalQueryBuilder::adjustViewportToItems(QList<BaseObjectView *> items)
      |                                                   ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
make[1]: *** [Makefile:1275: obj/graphicalquerybuilder.o] Error 1
make[1]: se sale del directorio '/tmp/tmp.znmxTyEm0N/pgmodeler/plugins/graphicalquerybuilder'
make: *** [Makefile:135: sub-graphicalquerybuilder-make_first-ordered] Error 2

Thanks in advance.

Plugin Request: Generate Ecto "schema.ex" and "migration.exs" files for Elixir/Ecto Language Platform

I love pgModeler but am struggling to integrate it into the workflow by Elixir developers. Elixir uses a database persistence framework called "Ecto", which is actually freaking amazing. However, it requires two files be maintained in a "code-first" approach to the database. The first file (called a "schema") governs how application data is cast to/from data types in the UI to database (and that data passes business validations). The second file (called a "migration") is used to create/alter/seed the database itself.

My current workflow is to design in pgModeler, then manually create these two files based pretty much 1:1 from column content already designed into pgModeler. It would be super helpful if the "create code" feature of pgModeler could be templated in such a way as to emit these Elixir/Ecto schema and migration files as an option. Given that the pgModeler files are saved in XML format, I suppose I could probably figure out a way transform from this using Elixir myself, but I was thinking perhaps this plugin architecture might be an easier or more supportable way of doing so instead.

Here is a link to overview on Ecto, if interested. No worries if not a good idea or not enough people use Elixir yet. Just wanted to get the idea out there for consideration. Thank you.

Elixir/Ecto Basic Overview

src/dummy.h:28:29: fatal error: pgmodelerplugin.h: No such file or directory

Bug description
I get the error message below when comping pgModeler. I have compiled earlier versions without problems, eg 0.9.3.

Reproduce

export QT_ROOT=/usr/lib/qt5
export INSTALLATION_ROOT=~/code/pgmodeler/bin/0.9.4-beta1
mkdir -pv $INSTALLATION_ROOT
cd ~/code/pgmodeler
git clone https://github.com/pgmodeler/pgmodeler.git
cd pgmodeler
git pull
git checkout v0.9.4-beta1
git clone https://github.com/pgmodeler/plugins
export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/
qmake -r CONFIG+=release \
PREFIX=$INSTALLATION_ROOT \
BINDIR=$INSTALLATION_ROOT \
PRIVATEBINDIR=$INSTALLATION_ROOT \
PRIVATELIBDIR=$INSTALLATION_ROOT/lib \
pgmodeler.pro
make

Error message

In file included from src/dummy.cpp:19:0:
src/dummy.h:28:29: fatal error: pgmodelerplugin.h: No such file or directory
compilation terminated.

Info about your desktop

  • OS: Ubuntu 20.04
  • pgModeler version: 0.9.4-beta1
  • Qt version: 5

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.