Developers Show Up In Droves to Participate at TigerGraph’s First Ever Graphathon
- Blog >
- Developers Show Up In Droves to Participate at TigerGraph’s First Ever Graphathon
Developers from around the world (52 Countries) flocked to the TigerGraph Graphathon with many submissions that blew TigerGraph staff away. Check out a few of the statistics and winning projects below below!!
GRAPHATHON BY THE NUMBERS
333 Signups
20 Submissions
13 Qualified Projects: .Net Package .JS Wrapper, Chatbot, NLP to GSQL, GSQL RealTime, CLI Tool, PowerBI Sample, App Launcher, Demo Launcher, 1 Web+AI Startup, 1 DashApp
7 Judges from Nike, Optum, IQVIA, YouTube, TigerGraph
Participation from 52 Countries
WINNING SUBMISSIONS
1st Place – Davraz
2nd Place – Plume CPG Analysis Library
3rd Place – TigerGraph.js
Most Popular – MixPose WebApp
Most Creative – TigerNLP
Most Technical – TigerGraph.NET
Best Documented – TigerGraphCLI
PROJECT OVERVIEWS
1st Place: Davraz
Graph visualization and exploration software. Leverages cytoscape.js and provides rich and customized graph visualizations. Aims ultimate complexity management, customization, and user-friendliness.
Inspiration
I’ve been working at i-Vis Research lab for more than one and a half years. I’m working on developing a generic graph visualization tool. When I checked the “Graph Studio” inside https://tgcloud.io/app/solutions, I saw that it looks fancy. The gradient colors and highlighting effects look really nice. But I also see that it can be developed. I didn’t find it good to make explorations and semi-automated graph analysis. For example, compound nodes and edges might make a big difference. Instead of loading a query, I would like to directly write a query and run it then see the results immediately.
I think I’m already doing graph visualization, so I can use my experience to make an alternative or supportive tool to “Graph Studio”. Also, I think I can support other graph databases such as Neo4j easily and make a database-agnostic open-source visualization tool. In addition, I was also thinking about a graph editor for visualizing algorithms with rich styles. So I’m planning to add editing features to this project.
What it does
- Rich customization of graph visualization styles with using cytoscape.js styles.
- Run Interpreted and Installed GSQL queries and see the results as a graph or as a table or as JSON.
- Show results as a table and a graph at the same time.
- Use clustering, compound nodes, compound edges, and 12 different layout algorithms for complexity management.
- It tries to maximize the space for graph rendering. For this, I use “operating system like windows” which can be dragged and resized.
How I Built It
I used angular 10, angular/material for the application. I used cytoscape.js for rendering graphs.I use nodejs for running a server which gets responses from tigergraph cloud database.
Challenges I ran into
GSQL is hard to learn. It behaves as second class citizens. It shouldn’t be like that because edges also store data. Just like nodes they can have properties. Also, I expect to directly run and see the results of a query language. Interpreted queries are like SQL queries but normal queries are like SQL stored procedures. You have to install them.
Bringing data with GSQL is really hard. But it looks great for writing very complex and indeed useful queries.
Accomplishments that I’m proud of
Complexity management with compound nodes/edges and clustering. Rich and customizable styles. Let the user see data as table and graph at the same time. Maximize the space for graph rendering by using resizable/draggable windows.
What I learned
I learned about GSQL and more things about user interface development. I learned the logic of the RDF database.
What’s next for _ Davraz _
Many things can be done.
- giving the user the ability to edit graph and save changes to the database
- supporting other graph databases such as Neo4j
- using a data template more advanced and customized features can be added like querying the database with a User Interface component, such that a layman who does not know anything about querying a database can query the database. With this UI component, database queries can be generated from UI components.
- using and viewing graph-theoretical properties (degree, in-degree, etc..) and changing visualization with respect to the values of graph-theoretical properties closeness centrality etc…
- using more advanced clustering algorithms page rank etc..
- adding bird’s eye view for big graphs so that the user won’t get lost inside the graph
- showing statistics about the current graph
- hide/show elements by their types
- more support for time-based filtering and exploration of graph
2nd Place: Plume CPG Analysis Library
Inspiration
Plume is the library built as part of my postgraduate research inspired by the work done by Fabian Yamaguchi, Eric Bodden, Johannes Spath, and Karim Ali commercialized by ShiftLeft. Modelling static analysis problems as graph reachability problems has been done since the 90s but using graph databases to large programs and deep analytics are relatively new.
What it does
Plume allows one to extract a code property graph (a combination of a program’s abstract syntax tree, control flow graph, and program dependence graph) from JVM bytecode and store it in a graph database. The storage backend (graph database) is pluggable and Plume currently supports TinkerGraph, JanusGraph, and TigerGraph. Plume has yet to complete a full interprocedural CPG extraction and thereafter will support program analysis.
The end goal is to perform an array of static analysis on a given program such as dataflow analysis and typestate analysis.
How I built it
Plume is built as a three-part library (only two available until the analysis component is added) composed of the driver, extractor, and analysis respectively. The libraries are written in Kotlin using Gradle as the build tool and TravisCI + Codecov to run testing and measure code coverage.
The driver exposes a generic interface and domain to enforce the use of the CPG schema and implementing classes will communicate and configure to their assigned graph database appropriately. Soot is used to read and analyse the bytecode, extract the control-flow graph, and call graphs.
Challenges I ran into
For a large part of the year, the construction of the graph was done using ASM to build the graph directly from reading the bytecode which is complex and this took too much time and then rather opted to make use of Soot. The driver also had a few iterations before an appropriately generic set of methods could be agreed upon to unite all the functions necessary for the construction of the graph irrespective of which database was used.
Accomplishments that I’m proud of
The ability to create an intraprocedural code property graph and open-source a fairly polished tool that can be used in static analysis in a domain where few code property graph tools exist with easy to follow documentation while supporting multiple graph databases.
What I learned
I started learning Kotlin and have begun to master it through the creation of this library. Beforehand I have not used TravisCI and Codecov to the degree that I have in this project. I also had not made use of the TigerGraph built-in endpoints and also created my own TigerGraph image in order to effectively test and load my CPG schema in during the CI/CD pipeline.
What’s next for Plume CPG Analysis Library
Right now the library only creates intraprocedural CPGs and the next steps are:
- Create an interprocedural CPG with a sound call graph hierarchy
- Perform dataflow analysis
- Perform alias aware typestate analysis
- Support Neo4j and Amazon Neptune as graph databases
- Benchmark all supported graph databases in extraction and analysis speeds
- Publish my findings in a research paper
3rd Place: TigerGraph.js
Inspiration
A few weeks ago, I was looking into integrating TigerGraph with an application I was create with a Node.js backend. However, as a beginner, I found it difficult to navigate through how exactly TigerGraph could be installed with JavaScript. After learning the process, similar to pyTigerGraph, I created a library that would allow full-stack developers and other users to easily interact with TigerGraph using my NPM library: TigerGraph.js.
By creating this library, I think it’ll make TigerGraph easier to use and more compelling to full-stack developers and also beginners who are brand new to JavaScript. (JavaScript was my first language.)
What it does
I created a library (TigerGraph.js) and provided documentation for TigerGraph.js to allow users to more easily use and integrate TigerGraph with Node.js. From the website, you can look at particular commands and use the library to query your graph.
To use it, you can install the library with:
npm install tigergraph.js
Generate a token, then create a connection and then code whatever you please.
How I built it
I used Node.js, which queried the TigerGraph REST API and simplified the requests to a single function. To create the queries, I used the standard https library so importing external libraries weren’t necessary. The createToken was a single function that got exported, but to create the connection, I used and exported a class. Finally, I created an NPM account to publish the library. When creating the commands, I tried to make them similar to pyTigerGraph so going back and forth doesn’t pose a problem. For the documentation, I use mkDocs and their material theme and I published the website on GitHub Pages.
Challenges I ran into
Dealing with Promises and callbacks were difficult for me and took a few days till I was able to complete it. In addition, figuring out how to create the REST calls (especially with the headers) proved to be difficult for me as well. Before, I constantly got bad request errors and I didn’t understand why. After a few days, I realised it was because the token wasn’t sending and I couldn’t send the token through the url; rather, I had to send it through the header.
Accomplishments that I’m proud of
I’m proud that I got the opportunity to create and publish an NPM library. In addition, when I was experimenting with TigerGraph.js and Discord.js, I found it cool how my work is a real library, which can work with other libraries and be used by others. I also found it mind-blowing how I could actually use it with projects.
What I learned
I learned how to use TigerGraph’s REST API and pass a header in a GET request with https. In addition, I learned how to create an NPM library, and I’ve gained a thorough respect for those who create libraries now. I learned how to deal with the asynchronous ways of Node.js by using callbacks and promises.
What’s next for TigerGraph.js
I’m going to create more functions and add more example projects (and finally finish the project that inspired me to build this library!). I also hope to explore more about using this library with JavaScript in the browser by using Browserify. In addition, I also want to maintain the library and explore the gsql endpoints.
Most Popular: MixPose WebApp
Inspiration
We are building a yoga platform because yoga has helped our families get out of depression. As a side effect, it has made us more flexible. Throughout COVID-19, people are required to social distance and loneliness has become a big problem. We want to empower instructors to be able to produce better quality content and allow people to do yoga at home, and if possible, with friends in aid of creating community and battling loneliness.
What it does
We are building a live stream yoga class web application. What makes our app special and unlike other live streaming apps is we are using A.I. pose tracking and stick figures to provide a feedback loop from teachers to users. This way students are able to see each other, and instructors can view all of the students. Tiger graph in the backend helps to do fast analytic tools for instructors so they can see the run their classes better
How I built it
We used TigerGraph and GSQL for data analytics. Exporting firebase data directly into tigergraph. We have created 3 Verticies and 5 different edges for the hackathon itself. Lesson, User and Instructor. In which edges include users being friends with each other, user attending a class, user giving feedback to a class, teachers teach a class and users can follow the teachers. We’ve also created additional GSQL to help facilitate to tools.
We used Agora’s Real Time Engagement Video SDK. Then we are running TensorFlow A.I. pose detection on top, once we get the skeleton points, we can then draw the stick figure through Augmented Reality. Since you can’t inference on top of the HTML video element, We did this is by creating a canvas to redraw all the livestream, then run the inference on top of the canvas itself to draw the detection. After the detection is done, we then draw the stick figure through AR overlay on top of user’s live feed video in real time.
We are also giving choices for users to either join the public channels, their own private channel or create a channel for their friends to take the yoga class together. The instructors will be subscribed to all the channels. This way students can protect their privacy from other students while still allowing teacher to guide them. Because we are using Agora SDK across all platforms, the Android user can actually now see the web users and vice versa, with instructors seeing everyone indistinguishably.
Challenges I ran into
Getting A.I. to run on top of live video feed from Agora’s Video SDK proved to be a little more difficult than we thought, but we were able to solve the problem by redrawing the video feed onto a canvas then doing the inference on top of the canvas itself.
GSQL was another challenge, luckily learning another tool to learn, the detailed step by step experience is being documented at https://www.hackster.io/364351/how-to-use-tigergraph-for-analytics-e476fa
We are writing down our AI solution on https://www.hackster.io/mixpose/running-ai-pose-detection-on-top-of-agora-video-sdk-d812ce Another challenge is some users don’t really want to turn on their camera, so we created a private mode trying to accommodate their privacy concerns via Agora’s SDK.
Accomplishments that I’m proud of
We’ve launched web app on https://mixpose.com and we are now testing it with actual users. This is much more scarier because we want to ensure our users have the best experiences using our application.
Another accomplishment we are very proud of is that we actually have the license to use the music in the demo video 🙂
What I learned
GSQL for the first time, and running graph SQL becomes really powerful
What’s next for MixPose Web
We are ready to take this idea forward and turn it into a startup. 3 of us Co-Founders have quit our jobs to working towards it full steam ahead.
Most Creative: TigerNLP
TigerNLP
Generate GSQL from human sentences.
Currently a prototype. Built for the Tigergraph Graphathon challenge https://tigergraph2020.devpost.com/
Tigergraph GSQL generation based on human input text. Open source, and deployed version available.
Built for improving accessibility and build tools for Tigergraph.
Limitations
Note this project currently isn’t a complete representation of the GSQL language. Sentences are expected to have one subject and possible multiple direct objects or actions. Tiger NLP will currently identify the following constructs:
- Vertices
- Directed edges
- Undirected edges
- Vertex properties
- Edge properties
- Graph
An item is considered a property if it is not used in a vertex capacity. i.e. for elements that are defined using ‘has a’, they would be considered a vertex if we could derive an edge from it but a property otherwise.
Client
The client is the user-facing website.
From the tiger-nlp client directory:
- yarn
- yarn start
Server
The backend runs a flask server that serves the model for generating GSQL from english sentences.
From the ./server directory:
- pip install -r requirements.txt
- python3 -m spacy download en_core_web_sm
- flask run
Most Technical: TigerGraph.NET
Inspiration
.NET is one of the most popular enterprise developer technologies and as graph databases become more mainstream, vendors like Neo4j and DGraph already ship .NET native libraries for their products which allow .NET developers to program graph databases in their own language and connect their existing apps and data sources without relying on manual HTTP calls to an API.
At the same time .NET, C# and F# have unique strengths as a platform and languages for developers, which make .NET an appealing choice for building graph-powered apps that can run both as traditional client-server apps and also as HTML-only SPA apps, together with interactive data-analysis notebooks in Jupyter using C# and F#. Frameworks like Blazor which can compile .NET code to WebAssembly can simplify development of multi-target applications by allowing code to be reused across a solution
Right now the first-choice client library for TigerGraph is pyTigerGraph which is widelt used across the TigerGraph ecosystem. However I wanted to build a .NET native client library for TigerGraph using the following requirements:
- Cross-platform
- No external dependencies
- The same library can be used in CLI and server apps and also target JavaScript and WebAssembly
- Connect to Windows data sources like the Windows Event Log
In addition I wanted to build components that implement common design patterns and practices to solve challenges developers commonly face using the TigerGraph server. My own interest in graph databases is for security and endpoint protection and I want to build open-source apps that can ingest data from a wide set of sources on Windows and Linux and be deployed quickly and easily.
What it does
TigerGraph.NET is a set of libraries, tools and components for building multi-target graph-powered applications using C# and F#. There are several sub-projects under the TG.NET umbrella:
CLI
The CLI project provides a cross-platform client for querying and monitoring TigerGraph servers including free-tier server instances. It talks to the REST++ and GSQL endpoints does not rely on the Java based GSQL client.
Proxy
The Proxy project is a proxy server for TigerGraph that provides common app services like caching and mitigates some of the limitations of using free-tier TigerGraph instances for browser-based apps. The proxy is a small .NET Core app that can run on most Linux environments like on a AWS micro-instance or as a container on Redhat OpenShift and provides a transparent proxy for REST++ and GSQL API requests from client-side code with the following features.
- Authentication: You can set environment variables for your TG_TOKEN, TG_USER and TG_PASS credentials on the server so you don’t have to expose these in your client app code.
- CORS: The server supports CORS headers and CORS pre-flighting requests so you can make calls to your TigerGraph server API from your JS browser code. Normally you would have to configure the TigerGraph Nginx server using gadmin to enable this support but this isn’t available for free-tier instances
- Keep-alive: By default the proxy server pings the echo endpoint of the backing TG server every 15 minutes. By default free-tier instances shutdown after about 90 minutes of inactivity and there is no way of restarting them automatically.
- Caching: The proxy server implements a simple memory-cache which caches graph data requests using the URL requests as cache keys. Apps that use graph data can avoid hitting the TG server on every request. More sophisticated caches and schemes can be implemented pretty easily using the ASP.NET Core libraries and middleware.
TigerGraph.Base
This project contains common data models and code that is shared across projects and can be compiled to both .NEt IL code and JavaScript
Deployment
Deployment scripts are provided for deploying the server to OpenShift.
What’s next for TigerGraph.NET: Libraries and building blocks for graph apps
I will post more updates and video as I continue work on this
Best Documented: TigerGraphCLI
Motivation
Having always held an interest in graph databases and their unique applications in the realm of machine learning and data science, I was intrigued by TigerGraph. When I was onboarding onto the service, however, I found that there was a lot of overhead to simply get started. For example, I had to manually download a jar file to interact with a TigerGraph server, and use Docker to start my own instance of TigerGraph.
Thankfully, tgcloud offers free cloud instances, and pyTigerGraph offered a high-level client library to interface with the jar CLI and REST++ endpoints.
I wanted to make the onboarding experience even smoother. With other enterprise tools such as Kubernetes, a simple-to-use CLI is often the go-to choice for simple commands (for example, listing all the deployments and their status). I wanted to build something similar for TigerGraph.
Implementation
The CLI was built in Python, leveraging the pyTigerGraph library to interface with TigerGraph servers. I used the typer library, which makes it easy to build command line applications in Python.
TigerGraphCLI is on its first stable release, which is also available on PyPI. See installation instructions in the repo.
Next Steps
I would love to continue to make the development experience for TigerGraph better by contributing to both pyTigerGraph as well as TigerGraphCLI. I’m hoping to receive user feedback so I know what features to develop/bugs to squash!
Right now the first-choice client library for TigerGraph is pyTigerGraph which is widelt used across the TigerGraph ecosystem. However I wanted to build a .NET native client library for TigerGraph using the following requirements:
• Cross-platform
• No external dependencies
• The same library can be used in CLI and server apps and also target JavaScript and WebAssembly
• Connect to Windows data sources like the Windows Event Log
In addition I wanted to build components that implement common design patterns and practices to solve challenges developers commonly face using the TigerGraph server. My own interest in graph databases is for security and endpoint protection and I want to build open-source apps that can ingest data from a wide set of sources on Windows and Linux and be deployed quickly and easily.
What it does
TigerGraph.NET is a set of libraries, tools and components for building multi-target graph-powered applications using C# and F#. There are several sub-projects under the TG.NET umbrella:
CLI
The CLI project provides a cross-platform client for querying and monitoring TigerGraph servers including free-tier server instances. It talks to the REST++ and GSQL endpoints does not rely on the Java based GSQL client.
Proxy
The Proxy project is a proxy server for TigerGraph that provides common app services like caching and mitigates some of the limitations of using free-tier TigerGraph instances for browser-based apps. The proxy is a small .NET Core app that can run on most Linux environments like on a AWS micro-instance or as a container on Redhat OpenShift and provides a transparent proxy for REST++ and GSQL API requests from client-side code with the following features.
- Authentication: You can set environment variables for your TG_TOKEN, TG_USER and TG_PASS credentials on the server so you don’t have to expose these in your client app code.
- CORS: The server supports CORS headers and CORS pre-flighting requests so you can make calls to your TigerGraph server API from your JS browser code. Normally you would have to configure the TigerGraph Nginx server using gadmin to enable this support but this isn’t available for free-tier instances
- Keep-alive: By default the proxy server pings the echo endpoint of the backing TG server every 15 minutes. By default free-tier instances shutdown after about 90 minutes of inactivity and there is no way of restarting them automatically.
- Caching: The proxy server implements a simple memory-cache which caches graph data requests using the URL requests as cache keys. Apps that use graph data can avoid hitting the TG server on every request. More sophisticated caches and schemes can be implemented pretty easily using the ASP.NET Core libraries and middleware.
TigerGraph.Base
This project contains common data models and code that is shared across projects and can be compiled to both .NEt IL code and JavaScript
Deployment
Deployment scripts are provided for deploying the server to OpenShift.
What’s next for TigerGraph.NET: Libraries and building blocks for graph apps
I will post more updates and video as I continue work on this
BEST DOCUMENTED: TIGERGRAPHCLI
Motivation
Having always held an interest in graph databases and their unique applications in the realm of machine learning and data science, I was intrigued by TigerGraph. When I was onboarding onto the service, however, I found that there was a lot of overhead to simply get started. For example, I had to manually download a jar file to interact with a TigerGraph server, and use Docker to start my own instance of TigerGraph.
Thankfully, tgcloud offers free cloud instances, and pyTigerGraph offered a high-level client library to interface with the jar CLI and REST++ endpoints.
I wanted to make the onboarding experience even smoother. With other enterprise tools such as Kubernetes, a simple-to-use CLI is often the go-to choice for simple commands (for example, listing all the deployments and their status). I wanted to build something similar for TigerGraph.
Implementation
The CLI was built in Python, leveraging the pyTigerGraph library to interface with TigerGraph servers. I used the typer library, which makes it easy to build command line applications in Python.
TigerGraphCLI is on its first stable release, which is also available on PyPI. See installation instructions in the repo.
Next Steps
I would love to continue to make the development experience for TigerGraph better by contributing to both pyTigerGraph as well as TigerGraphCLI. I’m hoping to receive user feedback so I know what features to develop/bugs to squash!