Code Monkey home page Code Monkey logo

marvk / vatprism Goto Github PK

View Code? Open in Web Editor NEW
63.0 4.0 10.0 14.45 MB

VATprism is a VATSIM Map and VATSIM Data Explorer, VATSIM being the Virtual Air Traffic Simulation Network. VATprism allows users to explore available ATC services, connected pilots, Airports, Flight and Upper Information Regions and more!

Home Page: https://vatprism.org/

License: GNU Affero General Public License v3.0

Java 97.86% CSS 2.14%
vatsim vatsim-flight-map vatsim-data aviation geospatial map java javafx flightsimulator flight-simulation

vatprism's Introduction

logo

VATprism Discord Build Status GitHub downloads Help Wanted Feedback Wanted

Welcome to the VATprism repository! VATprism is a data explorer for VATSIM, the Virtual Air Traffic Simulation Network. VATprism allows users to explore available ATC services, connected pilots, Airports, Flight and Upper Information Regions and more!

Motivation

VATprism was born out of a desire to simplify, and make more customizable, access to VATSIM data and is inspired by the excellent VAT-Spy, which, as of this time, unfortunately remains closed source.

Download

For instructions on how to download VATprism, see the Installation section of this readme.

Screenshots

Airport Detail

Screenshot1

Airport Table

Screenshot2

Pilot Detail

Screenshot3

Full text search!

Screenshot4

Fully customizable!

Screenshot5

More information can be found on vatprism.org

Issues

Issue tracking takes place on this GitHub issue repository. You are most invited to contribute bugs, issues, feature or any other constructive feedback as an issue. Before submitting an issue, please check existing issues for duplicates.

Installation

Windows

Simply download the latest installer (.msi) from the releases page and run it. The installer will guide you through the installation.

Note: Windows Defender SmartScreen might show a warning about the installer not being a recognized app. This is harmless and simply an issue of the installer being unsigned.

macOS

Simply download the latest image (.dmg) from the releases page and run it.

Note: macOS might warn you that VATprism can not be trusted because it has been downloaded from the internet. To open VATprism anyway, right click it and press open. Additionally, after updating, you might receive a message saying the application is damaged and cannot be opened. This is an issue with codesign. Navigate to /Applications/ and run codesign --remove-signature VATprism.app, then start VATprism as usual. I hope to be able to resolve this issue in the future, see the corresponding issue for more information.

Linux

Currently, there is no support for native linux binaries. It is still possible to run VATprism, though you are going to have to compile it yourself. For this, please refer to the Build section of this readme.

If there is demand for Linux native binaries in the future, I will think about adding support. Feel free to request Linux builds via the linked issue.

Build

Building the project requires the following tools:

To build the project, clone the repository and run mvn package. To run the project, navigate to target-fat-jar and run java -jar vatsim-map-[VERSION]-fat.jar

Acknowledgements

VATprism uses the VAT-Spy Client Data Update Project as a source of static data and the VATSIM API as a source of dynamic data.

vatprism's People

Contributors

marvk avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar

vatprism's Issues

Add ability to display waypoints on the map

QuteScoop has the ability to display routes along waypoints.

This requires a database of waypoints. If you know about how to read such databases, for example from Navigraph, please feel free to contribute your knowledge in this issue.


This request comes courtesy of tw_simulations

Allow filtering by Squawks

Add a list to Filters allowing the user to filter for specific Squawk codes. Should support RegEx.


This request comes courtesy of Discord user J4nnik#5348

Disabled background painter causes ghost images

Describe the bug
When toggle the Enabled button for Date Line the overlays for i.e. active FIRs seems to stack

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'Preferences, disable Background'
  2. Click on 'Date Line Enable toggle button and toggle i.e. 10 times'
  3. Observe the map when clicking again and again

Expected behavior
Only toggle the option and not stack the overlays on the map

Screenshots
Unbenannt

Redo preferences dialog

While PreferencesFX is a decent framework, it does not offer some required functionality.

TODOs include:

  • Greyed out preferences
  • Better grouping
  • Save to file instead of registry
  • Redo painter preferences as properties instead of annotation meta programming (?)

Issues with resolution changes

When moving the opened window from a 4K - screen to 1080p - screen, multiple scaling issues showing up.

The grab-cursor and the window stays at the 4K-size.

image

Native macOS builds

Create native macOS builds via Github Actions.

If you (yes, you reading this) have a usecase for this, please let me in this issue. If you do, I will consider working on it.

Add watchlists

Requirements

  • whole or partial callsigns
  • cids
  • ratings
  • airports
  • flight status
  • domestic/international

Improve search performance

Currently, when submitting a query to the search, all tables are refreshed in the background even when not visible. This should be circumvented to improve the performance of searches.

Non-staffed airports do not appear in the search function

Airports without any active controller do not appear in the search function. Also they do not appear in the dropdown-menu when right clicking next to them.

WIN10
Vers. 0.1.0-alpha.97+27903f

Non-staffed airport:
Screenshot_9

Staffed airport:
Screenshot_10

Find cause of and fix ConcurrentModificationException

Dez. 15, 2020 7:15:38 PM com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged
INFO: Could not load @font-face font [file:/D:/20%20Programming/IdeaProjects/vatsim-map/target/classes/net/marvk/fs/vatsim/map/view/fonts/JetBrainsMono-Regular.ttf]
Dez. 15, 2020 7:15:38 PM com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged
INFO: Could not load @font-face font [file:/D:/20%20Programming/IdeaProjects/vatsim-map/target/classes/net/marvk/fs/vatsim/map/view/fonts/JetBrainsMono-ExtraBold.ttf]
[pool-2-thread-1] ERROR net.marvk.fs.vatsim.map.view.map.MapView - 
java.util.concurrent.ExecutionException: java.util.ConcurrentModificationException
	at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
	at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
	at net.marvk.fs.vatsim.map.view.map.MapView$Renderer.lambda$start$0(MapView.java:419)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
	at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.util.ConcurrentModificationException
	at java.base/java.util.AbstractList$Itr.checkForComodification(AbstractList.java:399)
	at java.base/java.util.AbstractList$Itr.next(AbstractList.java:376)
	at net.marvk.fs.vatsim.map.view.painter.PainterExecutor.paint(PainterExecutor.java:34)
	at net.marvk.fs.vatsim.map.view.map.MapView$Renderer.lambda$redraw$1(MapView.java:435)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
	... 1 more

ATC online-time not refreshed properly

Auto-refresh is active but in the airport-window the ATC online time is not refreshed correctly.

The screenshot shows the airport window with all active controllers in EDDM:
Screenshot_11

This screenshot shows the controller window for EDDM_N_APP. Here the online time is refreshed correctly:
Screenshot_12

I tried to manually update the data by clicking the refresh button but it shows no effect.

WIN10
Vers. 0.1.0-alpha.97+27903f

Exception when reloading clients

[JavaFX Application Thread] ERROR de.saxsys.mvvmfx.utils.commands.DelegateCommand - Exception in Command Execution
java.lang.ClassCastException: class net.marvk.fs.vatsim.api.data.VatsimPilot cannot be cast to class net.marvk.fs.vatsim.api.data.VatsimController (net.marvk.fs.vatsim.api.data.VatsimPilot and net.marvk.fs.vatsim.api.data.VatsimController are in unnamed module of loader 'app')
	at net.marvk.fs.vatsim.map.data.Controller.setFromModel(Controller.java:29)
	at net.marvk.fs.vatsim.map.data.Controller.setFromModel(Controller.java:10)
	at net.marvk.fs.vatsim.map.data.SimpleRepository.reload(SimpleRepository.java:77)
	at net.marvk.fs.vatsim.map.data.ClientRepository.reload(ClientRepository.java:114)
	at net.marvk.fs.vatsim.map.view.main.MainViewModel$ReloadRepositoryAction.action(MainViewModel.java:104)
	at de.saxsys.mvvmfx.utils.commands.DelegateCommand.callActionAndSynthesizeServiceRun(DelegateCommand.java:166)
	at de.saxsys.mvvmfx.utils.commands.DelegateCommand.execute(DelegateCommand.java:134)
	at net.marvk.fs.vatsim.map.view.main.MainViewModel.lambda$new$0(MainViewModel.java:64)
	at net.marvk.fs.vatsim.map.view.Notifications$VoidNotification.lambda$subscribe$0(Notifications.java:26)
	at de.saxsys.mvvmfx.utils.notifications.DefaultNotificationCenter.publish(DefaultNotificationCenter.java:163)
	at de.saxsys.mvvmfx.utils.notifications.DefaultNotificationCenter.publish(DefaultNotificationCenter.java:60)
	at net.marvk.fs.vatsim.map.view.Notifications$VoidNotification.publish(Notifications.java:30)
	at net.marvk.fs.vatsim.map.view.toolbar.ToolBarViewModel.refresh(ToolBarViewModel.java:22)
	at net.marvk.fs.vatsim.map.view.toolbar.ToolBarView.refresh(ToolBarView.java:43)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:564)
	at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:76)
	at jdk.internal.reflect.GeneratedMethodAccessor17.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:564)
	at com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:273)
	at com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:83)
	at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1857)
	at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1729)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
	at javafx.event.Event.fireEvent(Event.java:198)
	at javafx.scene.Node.fireEvent(Node.java:8886)
	at javafx.scene.control.Button.fire(Button.java:203)
	at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:208)
	at com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
	at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
	at javafx.event.Event.fireEvent(Event.java:198)
	at javafx.scene.Scene$MouseHandler.process(Scene.java:3856)
	at javafx.scene.Scene.processMouseEvent(Scene.java:1851)
	at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2584)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:409)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:299)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:447)
	at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:446)
	at com.sun.glass.ui.View.handleMouseEvent(View.java:556)
	at com.sun.glass.ui.View.notifyMouse(View.java:942)
	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
	at java.base/java.lang.Thread.run(Thread.java:832)

Windows Installer Warning

Describe the bug
While installing the VATprism I got a malware warning!

To Reproduce
Install the Programm on a Windows PC, that it has not been installed yet.

Expected behavior
A blue warning screen comes up

Screenshots
2018-06-23_18-46-53

(Not from this app; Google ;)

Additional context
Had this with other apps as well;
I think you cant do anything about it x(

Guard against API returning null

[JavaFX Application Thread] ERROR de.saxsys.mvvmfx.utils.commands.DelegateCommand - Exception in Command Execution
java.lang.NullPointerException: Cannot invoke "net.marvk.fs.vatsim.api.data.VatsimData.getClients()" because the return value of "net.marvk.fs.vatsim.api.VatsimApi.data()" is null
	at net.marvk.fs.vatsim.map.data.ClientRepository.extractModelList(ClientRepository.java:70)
	at net.marvk.fs.vatsim.map.data.SimpleRepository.reload(SimpleRepository.java:48)
	at net.marvk.fs.vatsim.map.data.ClientRepository.reload(ClientRepository.java:117)
	at net.marvk.fs.vatsim.map.view.main.MainViewModel$ReloadRepositoryAction.action(MainViewModel.java:104)
	at de.saxsys.mvvmfx.utils.commands.DelegateCommand.callActionAndSynthesizeServiceRun(DelegateCommand.java:166)
	at de.saxsys.mvvmfx.utils.commands.DelegateCommand.execute(DelegateCommand.java:134)
	at de.saxsys.mvvmfx.utils.commands.CompositeCommand.lambda$execute$2(CompositeCommand.java:148)
	at java.base/java.lang.Iterable.forEach(Iterable.java:75)
	at de.saxsys.mvvmfx.utils.commands.CompositeCommand.execute(CompositeCommand.java:148)
	at net.marvk.fs.vatsim.map.view.main.MainViewModel.<init>(MainViewModel.java:61)
	at net.marvk.fs.vatsim.map.view.main.MainViewModel$$FastClassByGuice$$18387162.GUICE$TRAMPOLINE(<generated>)
	at net.marvk.fs.vatsim.map.view.main.MainViewModel$$FastClassByGuice$$18387162.apply(<generated>)
	at com.google.inject.internal.DefaultConstructionProxyFactory$FastClassProxy.newInstance(DefaultConstructionProxyFactory.java:82)
	at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114)
	at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:91)
	at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:296)
	at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1100)
	at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1138)
	at de.saxsys.mvvmfx.internal.viewloader.DependencyInjector.getInstanceOf(DependencyInjector.java:70)
	at de.saxsys.mvvmfx.internal.viewloader.ViewLoaderReflectionUtils.lambda$createAndInjectViewModel$4(ViewLoaderReflectionUtils.java:265)
	at de.saxsys.mvvmfx.internal.viewloader.ReflectionUtils.lambda$accessMember$3(ReflectionUtils.java:165)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:312)
	at de.saxsys.mvvmfx.internal.viewloader.ReflectionUtils.accessMember(ReflectionUtils.java:161)
	at de.saxsys.mvvmfx.internal.viewloader.ViewLoaderReflectionUtils.createAndInjectViewModel(ViewLoaderReflectionUtils.java:261)
	at de.saxsys.mvvmfx.internal.viewloader.FxmlViewLoader.handleInjection(FxmlViewLoader.java:377)
	at de.saxsys.mvvmfx.internal.viewloader.FxmlViewLoader.access$000(FxmlViewLoader.java:48)
	at de.saxsys.mvvmfx.internal.viewloader.FxmlViewLoader$DefaultControllerFactory.call(FxmlViewLoader.java:357)
	at de.saxsys.mvvmfx.internal.viewloader.FxmlViewLoader$DefaultControllerFactory.call(FxmlViewLoader.java:332)
	at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:940)
	at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:982)
	at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:229)
	at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:754)
	at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2808)
	at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2634)
	at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
	at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2517)
	at de.saxsys.mvvmfx.internal.viewloader.FxmlViewLoader.loadFxmlViewTuple(FxmlViewLoader.java:216)
	at de.saxsys.mvvmfx.internal.viewloader.FxmlViewLoader.loadFxmlViewTuple(FxmlViewLoader.java:82)
	at de.saxsys.mvvmfx.FluentViewLoader$FxmlViewStep.load(FluentViewLoader.java:333)
	at net.marvk.fs.vatsim.map.App.startMvvmfx(App.java:28)
	at de.saxsys.mvvmfx.guice.MvvmfxGuiceApplication.start(MvvmfxGuiceApplication.java:88)
	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
	at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
	at java.base/java.lang.Thread.run(Thread.java:832)

Add ability to get atc bookings

QuteScoop has the ability to display atc bookings as a list and even as a preview on the map.

This would certainly be a useful feature to have, but might require some reworking and some additional data types.


This request comes courtesy of tw_simulations

Native Linux builds

Create native Linux builds via Github Actions.

If you (yes, you reading this) have a usecase for this, please let me in this issue. If you do, I will consider working on it.

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.