Coder Social home page Coder Social logo

phoenicisorg / phoenicis Goto Github PK

View Code? Open in Web Editor NEW
667.0 29.0 73.0 17.7 MB

Phoenicis PlayOnLinux and PlayOnMac 5 repository

Home Page: https://phoenicis.org/

License: GNU Lesser General Public License v3.0

Shell 0.55% Java 93.57% JavaScript 1.50% Dockerfile 0.02% Less 4.36%
java javafx wine

phoenicis's Introduction

Phoenicis PlayOnLinux and PlayOnMac 5

CI Codacy Badge Crowdin Badge

Phoenicis is the designated successor of PlayOnLinux and PlayOnMac 4. It allows you to install and use non-native applications on your favorite operating system.

Supported operating systems:

  • GNU/Linux
  • macOS

Supported engines:

Download on Flathub

What is Phoenicis PlayOnLinux?

Phoenicis PlayOnLinux is a piece of software which allows you to easily install and use numerous games and apps designed to run with Microsoft® Windows®.

Few games are compatible with GNU/Linux at the moment and it certainly is a factor preventing the migration to this system. Phoenicis PlayOnLinux brings a cost-free, accessible and efficient solution to this problem.

What are Phoenicis PlayOnLinux’s features?

Here is a non-exhaustive list of the interesting points to know:

  • You don’t have to own a Microsoft Windows license to use PlayOnLinux.
  • Phoenicis PlayOnLinux is based on Wine, and so profits from all its features yet it keeps the user from having to deal with its complexity.
  • Phoenicis PlayOnLinux is free software.
  • Phoenicis PlayOnLinux uses Java.

Nevertheless, Phoenicis PlayOnLinux has some bugs, as every piece of software:

  • Occasional performance decrease (image may be less fluid and graphics less detailed).
  • Not all games are supported. Nevertheless, you can use our manual installation module.

For more information, visit http://www.playonlinux.com

Build and Run locally

Dependencies:

  • Java 11+
  • Maven
  • less (sudo npm install -g less)

Build

mvn clean package

Run

mvn install
cd phoenicis-javafx/
mvn exec:java

For more details (e.g. regarding dependencies) consider the documentation.

Build and Run in Online IDE

You can get a complete Phoenicis development setup with Gitpod, a free one-click online IDE for GitHub:

Open in Gitpod

Scripts

To add or update scripts, please make pull requests to this repository: https://github.com/PhoenicisOrg/scripts

Translate

Phoenicis is localized using Crowdin: https://crowdin.com/project/phoenicis.

If your language is not listed, please create an issue.

Community

phoenicis's People

Contributors

ads20000 avatar asciiwolf avatar codacy-badger avatar dependabot-preview[bot] avatar dependabot[bot] avatar feanor12 avatar gverm avatar imperators79 avatar jlleitschuh avatar johnvonneumann avatar judge2020 avatar lukeshortcloud avatar madoar avatar mariok avatar mdeguzis avatar meysholdt avatar ovari avatar phoenicisbot avatar plata avatar qparis avatar rattydave avatar seijikun avatar starcommander avatar tomahna avatar tutul- avatar vancoding avatar yawkat avatar zemogiter 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  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  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

phoenicis's Issues

Error in WineInstallationTest

Every unit test in WineInstallationTest fail. Here the trace.

com.playonlinux.wine.WineException: Wine has encountered a fatal error
at com.playonlinux.wine.WineInstallation.run(WineInstallation.java:102)
at com.playonlinux.wine.WineInstallationTest.testRun_RunWineVersionWithArgument_ProcessReturnsHelpMessage(WineInstallationTest.java:63)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.io.IOException: Cannot run program "/home/magnus/Workspaces/PlayOnLinux/playonlinux/target/test-classes/com/playonlinux/wine/bin/wine" (in directory "/tmp"): error=13, Permission non accordée
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at com.playonlinux.wine.WineProcessBuilder.build(WineProcessBuilder.java:84)
at com.playonlinux.wine.WineInstallation.run(WineInstallation.java:100)
... 25 more
Caused by: java.io.IOException: error=13, Permission non accordée
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.(UNIXProcess.java:248)
at java.lang.ProcessImpl.start(ProcessImpl.java:134)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 27 more

[Medium] Unit test for Python classes

Currently, python classes are not tested at all.
We need to:

  • Set up unittest for python classes
  • Set up a test suite into JUnit that wil run python unit tests in order to integrate JUnit to maven build
  • Write a sample unit test in Python

Error in TearDown

TearDown integration test fail. Here the trace.

java.lang.Exception: Test class should have exactly one public zero-argument constructor
at org.junit.runners.BlockJUnit4ClassRunner.validateZeroArgConstructor(BlockJUnit4ClassRunner.java:171)
at org.junit.runners.BlockJUnit4ClassRunner.validateConstructor(BlockJUnit4ClassRunner.java:148)
at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:127)
at org.junit.runners.ParentRunner.validate(ParentRunner.java:416)
at org.junit.runners.ParentRunner.(ParentRunner.java:84)
at org.junit.runners.BlockJUnit4ClassRunner.(BlockJUnit4ClassRunner.java:65)
at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:10)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:84)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:70)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:43)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

java.lang.Exception: No runnable methods
at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:191)
at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:128)
at org.junit.runners.ParentRunner.validate(ParentRunner.java:416)
at org.junit.runners.ParentRunner.(ParentRunner.java:84)
at org.junit.runners.BlockJUnit4ClassRunner.(BlockJUnit4ClassRunner.java:65)
at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:10)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:84)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:70)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:43)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

When I'm trying to run playonlinux 5 I'm getting this error:

michel@debian:~/POL-POM-5$ java -jar target/playonlinux-5.0-SNAPSHOT-jar-with-dependencies.jar
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/playonlinux/app/PlayOnLinuxApp : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

[Easy/Medium] Create a scene in InstallWindow in the download fail case

InstallWindow is an observer of RemoteAvailableInstallers class.
RemoteAvailableInstallers' responsibility is to download the list of available PlayOnLinux installers. This class has three possible state:

  • Downloading in progress
  • Download is done
  • Download has failed

The latter case is not handled by InstallWindow class, which means that install window will not tell the user if the download has failed.
To support this, we need to go to the method:
public void update(RemoteAvailableInstallers remoteAvailableInstallers)

Then, create a "failedScene" which contains a text explaining the user that the download has failed, and a button so that he/she can retries. The button will behave exactly the same as refreshButton which is in the same class.

Remove checked exception

At the moment, we are using a lot of home made checked exception:

  • ScriptFailureException
  • ArchiveException
  • SignatureException
    ....

These exception usually catches and rethrows Java exceptions like IOException, which make the code heavier to read.
We should replace those exception with unckecked exceptions like IllegalStateException, IllegalArgumentException, etc..

Problem when executing...

Hi all,

I'm using linux mint 17.2 amd64

I have a successfull compilation using the latest version of jdk 8 using the official "jdk-8u51-linux-x64.tar.gz". But then when I run the file compiled using this comand: "java -jar playonlinux-5.0-SNAPSHOT-jar-with-dependencies.jar" then I get this message and can't open the program.


Exception in Application start method
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$152(LauncherImpl.java:182)
at com.sun.javafx.application.LauncherImpl$$Lambda$31/817978763.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException: Input stream must not be null
at javafx.scene.image.Image.validateInputStream(Image.java:1109)
at javafx.scene.image.Image.(Image.java:694)
at com.playonlinux.ui.impl.javafx.mainwindow.LeftButton.(LeftButton.java:35)
at com.playonlinux.ui.impl.javafx.mainwindow.engines.ViewEngines.drawSideBar(ViewEngines.java:65)
at com.playonlinux.ui.impl.javafx.mainwindow.engines.ViewEngines.(ViewEngines.java:48)
at com.playonlinux.ui.impl.javafx.mainwindow.MainWindow.setUpWindow(MainWindow.java:55)
at com.playonlinux.ui.impl.javafx.JavaFXApplication.start(JavaFXApplication.java:40)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$159(LauncherImpl.java:863)
at com.sun.javafx.application.LauncherImpl$$Lambda$60/884915910.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$172(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl$$Lambda$56/1839075738.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$null$170(PlatformImpl.java:295)
at com.sun.javafx.application.PlatformImpl$$Lambda$58/646900084.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$171(PlatformImpl.java:294)
at com.sun.javafx.application.PlatformImpl$$Lambda$57/154219674.run(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at com.sun.glass.ui.gtk.GtkApplication.lambda$null$48(GtkApplication.java:139)
at com.sun.glass.ui.gtk.GtkApplication$$Lambda$46/430565046.run(Unknown Source)
... 1 more

TestCase ShortcutDTOTest fails since 23dbd1f

Since commit 23dbd1f, the TestCase ShortcutDTOTest fails with the following errors:

java.net.MalformedURLException: no protocol: /tmp/icon
    at java.net.URL.<init>(URL.java:586)
    at java.net.URL.<init>(URL.java:483)
    at java.net.URL.<init>(URL.java:432)
    at com.playonlinux.common.dtos.ShortcutDTOTest.setUp(ShortcutDTOTest.java:38)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runners.Suite.runChild(Suite.java:128)
    at org.junit.runners.Suite.runChild(Suite.java:27)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)


java.net.MalformedURLException: no protocol: /tmp/icon
    at java.net.URL.<init>(URL.java:586)
    at java.net.URL.<init>(URL.java:483)
    at java.net.URL.<init>(URL.java:432)
    at com.playonlinux.common.dtos.ShortcutDTOTest.setUp(ShortcutDTOTest.java:38)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runners.Suite.runChild(Suite.java:128)
    at org.junit.runners.Suite.runChild(Suite.java:27)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

LegacyScript execution fails since f9329e2

Since commit f9329e2, the execution of LegacyScripts fails on my Notebook. This is the exception I am receiving:

Exception in thread "MainThread" Traceback (most recent call last):
  File "/mnt/extern/Coding/Java/PlayOnLinux/POL-POM-5/src/main/python/v4wrapper.py", line 25, in <module>
    from SetupWindow.SetupWindowNetcatServer import SetupWindowNetcatServer
  File "/mnt/extern/Coding/Java/PlayOnLinux/POL-POM-5/src/main/python/SetupWindow/SetupWindowNetcatServer.py", line 21, in <module>
    from SetupWindowNetcatCommandParser import SetupWindowNetcatCommandParser
  File "/mnt/extern/Coding/Java/PlayOnLinux/POL-POM-5/src/main/python/SetupWindow/SetupWindowNetcatCommandParser.py", line 22, in <module>
    from com.playonlinux.framework import EnvironementHelper
ImportError: cannot import name EnvironementHelper
Exception in thread "Thread-8" Traceback (most recent call last):
  File "/mnt/extern/Coding/Java/PlayOnLinux/POL-POM-5/src/main/python/v4wrapper.py", line 25, in <module>
    from SetupWindow.SetupWindowNetcatServer import SetupWindowNetcatServer
  File "/mnt/extern/Coding/Java/PlayOnLinux/POL-POM-5/src/main/python/SetupWindow/SetupWindowNetcatServer.py", line 21, in <module>
    from SetupWindowNetcatCommandParser import SetupWindowNetcatCommandParser
  File "/mnt/extern/Coding/Java/PlayOnLinux/POL-POM-5/src/main/python/SetupWindow/SetupWindowNetcatCommandParser.py", line 22, in <module>
    from com.playonlinux.framework import EnvironementHelper
ImportError: cannot import name EnvironementHelper

The new python-scripts work flawlessly.

Work with SELinux and/OR AppArmor to restrict access,

Having Wine on Linux mean also you have Windows Programs on Linux. This tools contains their own Problems and security holes. In this Modern times most Programs you work with use Internet on a way and could be attacked on this way.

Implement the using of SELinux and/OR AppArmor to prevent a to easy corruption of the Host Linux system.

More important then the using on a normal POL prefix should the normal default wine Installation been secured. A normal Linux system with a Filetype Link to Wine will also start exe files a user double-click.

[Feature Request] POL-POL-4 Backward compatibility

Starting any application fail. Here the trace.

[JavaFX Application Thread] ERROR com.playonlinux.ui.impl.javafx.common.ErrorMessage - com.playonlinux.app.PlayOnLinuxException: Unable to parse the shortcut
at com.playonlinux.library.LibraryEventHandler.runApplication(LibraryEventHandler.java:54)
at com.playonlinux.ui.impl.javafx.mainwindow.library.EventHandlerLibrary.runApplication(EventHandlerLibrary.java:75)
at com.playonlinux.ui.impl.javafx.mainwindow.library.ApplicationListWidget$ApplicationItem.lambda$0(ApplicationListWidget.java:93)
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.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.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$ClickGenerator.postProcess(Scene.java:3470)
at javafx.scene.Scene$ClickGenerator.access$8100(Scene.java:3398)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3766)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:352)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:275)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$300(GlassViewEventHandler.java:388)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:387)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at com.sun.glass.ui.gtk.GtkApplication.lambda$null$450(GtkApplication.java:139)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('#' (code 35)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
at [Source: /home/magnus/.PlayOnLinux/shortcuts/Hearthstone; line: 1, column: 2]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1250)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:579)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:500)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleUnexpectedValue(UTF8StreamJsonParser.java:2094)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._nextTokenNotInObject(UTF8StreamJsonParser.java:612)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:498)
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:2570)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2517)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1728)
at com.playonlinux.library.LibraryEventHandler.runApplication(LibraryEventHandler.java:51)
... 40 more

[Difficult] Switch to Jython 2.7

At the moment, POLv5 uses Jython 2.5.2
When we try to use Jython 2.7, netcat becomes unblocked and is exited before the socket is actually closed on PlayOnLinux core side.
This breaks bash script support

Affected components:

  • python/BashBinder/NetcatServer.py
  • bash/lib/netcat.sh

Possible workarounds:

  • Implement the TCP server in Java
  • Use unix sockets (not supported by Jython 2.7 ; may be supported in a future version)
  • Figure out why netcat behaves differently with Jython 2.7 and fix the issue

[Easy] Implement POL_Download in bash

Currently, POL_Download is implemented in Python:
This feature need to be implemented in bash for backward compatibility.
As the feature is already implemented in the java core, the bash implementation will be straightforward.

The following code will download a script.

from com.playonlinux.framework import SetupWizard
from com.playonlinux.framework import Downloader

setupWindow = SetupWizard("Test script")
Downloader(setupWindow).get("http://files.metaquotes.net/metaquotes.software.corp/mt4/mt4setup.exe").check("e42ebc9ebc2d8975de5a0c94386d1a6a")

setupWindow.close()

To achieve that you need to:

  • Complete bash/lib/scripts (following the same structure than the commands you can find in bash/lib/setupWindow)
POL_Download ()
{
    # Download a file and place it in the current directory
    # Usage: POL_Download [URL] [MD5]

        # To be implemented
}
  • Add a parser case in SetupWindowCommandParser.py responding to the command you have created before.

Implement mime type edit

Please enhance the Usability of Filetypes in the Hostsystem and their Linking into a POL Container.
tools
edit mime links

[Feature Request] Made the Setup Process more clear

I made a Mock-up in the hope it could give you some inspiration.

The main goal of this Feature Request is to run the time consuming download and setup process as early as possible and do some other settings while it is working.

basic

enhance

[Medium] Implement SetupWizard.licence and POL_SetupWindow_licence

This step is currently nor implemented in Python (SetupWizard.licence), neither in bash (POL_SetupWindow_licence).
The idea is to look at how SetupWizard.textbox works and do the same for SetupWizard.licence

POL_SetupWindow_licence takes three arguments:

POL_SetupWindow_licence "Text" "Title" "File to show"

For more details, you can see what POL_SetupWindow_licence is doing in exactly POL_v4

In POL_v5, the Title is always attached to SetupWizard and not to a given step. Therefore, the Title argument in bash will be a stub put for backward compatibility

Change observer / observable pattern

Currently, we are using Observer / Observable pattern.
This pattern makes the code hard to read and generates a lot of type warnings.

I suggest that we use an event based approach. We could use java.util.function.Consumer and java.util.function.Supplier to allow user interface to be notified.

Eg. It would look like this:

downloader = new Downloader();
downloder.setOnDonwloadHook(progress -> progressBar.setPercentage(progress));

[Medium/Difficult] Install gettext

Every strings are passed into static "translate" function.
At the moment, this function just return the same string character.

This function must read PlayOnLinux catalogs files to translate the strings

[Medium] Implement the Command Line Interface (CLI)

Currently, PlayOnLinux uses JavaFX as a main interface. The JavaFX implementation is located into com.playonlinux.ui.impl.javafx module.
However, when --cli is passed, another implementation is used: com.playonlinux.ui.impl.cli. Currently, this implementation does not handle anything.
We need to start working on it, so that PlayOnLinux can be run in command line mode.

This implementation should be smart enough to accept programs arguments as command. For example, playonlinux --cli --run "An application" should automatically run "An application".

.PlayOnLinux/icones/full_size and .PlayOnLinux/wineprefix is not a valid directory

This is a fresh Ubuntu 16.04 machine without PlayOnLinux 4 installed.

First i got:
Exception in thread "main" java.lang.IllegalStateException: The file /home/mariogrip/.PlayOnLinux/icones/full_size is not a valid directory

Then i made the manully
mkdir -p /home/mariogrip/.PlayOnLinux/icones/full_size

Tried again and got:
Exception in thread "main" java.lang.IllegalStateException: The file /home/mariogrip/.PlayOnLinux/wineprefix is not a valid directory

And made that manully
mkdir -p /home/mariogrip/.PlayOnLinux/wineprefix

After that it started up the GUI

[Test Failure] WineInstallationTest

Cannot run program "/home/magnus/Workspaces/PlayOnLinux/playonlinux/phoenicis-wine/target/test-classes/com/playonlinux/wine/bin/wine" (in directory "/tmp"): error=2, Aucun fichier ou dossier de ce type

It seems that the script used to test disappeared during the project division.

(I'll submit a pull request asap)

exceptions

/usr/bin/playonlinux ⮂
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/playonlinux/app/PlayOnLinuxApp : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

Add a separate X-server option into the applicationsetings (GuildWars 2)

Like the Guild wars Wiki says.
https://wiki.guildwars2.com/wiki/Guild_Wars_2_on_Wine#Running_on_a_separate_X_server

e.g.

Running on a separate X server

If you run Guild Wars 2 on a separate X server, it doesn't interrupt other applications on other X servers. If Wine or Guild Wars 2 crashes on one X server, the other remains unaffected. Since separate X servers can be used with different window managers, or even without one, keys can be rebound and not get in the way of playing Guild Wars. If you usually run a compositing window manager (e.g. compiz), you might also see a speed increase, as the visual effect can be disabled on the other X server. On the other hand, minimizing Guild Wars or switching to window mode won't work as expected any more - but you can switch between your regular desktop and Guild Wars anytime usually by using Ctrl-Alt-F7 / -F8 (your mileage may vary). Multiple X servers can also affect overall performance on slower machines.

If you like those features, do as follows: Create a text file containing the command to start Guild Wars 2.

#!/bin/bash
WINEDEBUG=-all wine ~/Gw2.exe

You may need to replace "~/Gw2.exe" with the location you downloaded Gw2.exe to, if it's not located directly in your home folder.

If you are running Ubuntu, you may have to add an extra prefix command to get sound:

#!/bin/bash
WINEDEBUG=-all /usr/bin/ck-launch-session wine ~/Gw2.exe

Save the text file, for example as ~/run_guildwars2, and make it executable.

chmod +x ~/run_guildwars2

To start a second X server with Guild Wars running, execute this command (or add a corresponding shortcut or menu entry):

xinit ~/run_guildwars2 -- :1 -br

Consider creating a gitter channel for the repo

I've seen gitter multiple times on other repos.
I don't know how it works or how it's set up, but if it is easy - it would be cool to have one for easier communication.
The only info-page i could find is here.

[Test Failure] FileAnalyserTest testLineSeparatorCRLF

The unit test FileAnalyserTest.testLineSeparatorCRLF fails with :
org.junit.ComparisonFailure: expected:<[
]
> but was:<[]
>

Seems to find \r instead of \r\n

Problem encountered since the project split.
Test fails when launched with JUnit, m2e, and standalone maven version.
System is a standard Ubuntu 15.10.

[Medium] Add filter feature in InstallWindow

Three filter checkbox have been added to the installation window. We now need to connect these three checkboxes to the domain object.
In order to do that, we need to:

  • Add the following two methods in the com.playonlinux.ui.api.RemoteAvailableInstallers interface
    ** Iterable getAllScripts(String filter, boolean commercial, boolean requiresNoCd, boolean testing);
    ** Iterable getAllScriptsInCategory(String categoryName, boolean commercial, boolean requiresNoCd, boolean testing) throws PlayOnLinuxError;
  • The original methods should call these new method with the default behavior (true, false, false)
  • Implement the two methods in RemoteAvailableInstallersPlayOnLinuxImplementation
  • Use these new methods in AvailableInstallerListWidget

The design of this feature can be improved later to allow to add extra filters.

Problems compiling POL5 on latest Arch, Gnome 3.20

Trying to install the latest git version on Arch.
jdk8-openjdk, maven 3.3.9, java-openjfx are installed.

Heres the error:
[ERROR] Failed to execute goal on project phoenicis-qt: Could not resolve dependencies for project com.playonlinux:phoenicis-qt:jar:5.0-SNAPSHOT: Could not find artifact com.trolltech:qtjambi:jar:4.8.7 in central (https://repo.maven.apache.org/maven2) -> [Help 1]

Complete output: http://pastebin.com/w6W7Ca1q

Any idea why this happens?

[Medium/Difficult] Integrate PlayOnLinux v5 to canonical Rosetta

Currently, POLv4 strings automatically sent to Rosetta for translation. Once translated, they are fetched back into the project

We need to have the same mechanism for POLv5

For more details, see: (Separated PlayOnLinux_Tools github repository)

  • rebuildTemplate.sh (generate .po templates from source tree)
  • update_template_from_launchpad (Get back translations from launchpad)

Split phoenicis-core module

At the moment, we have a phoenicis-core module. We should split it so that it can disappear.

Target:

  • Invert dependencies
  • Identify and separate each key component

Already done:

  • phoenicis-apps
  • phoenicis-ui

Compile error: Failed to create assembly

export JAVA_HOME="/usr/lib/jvm/java-8-oracle/"
mvn assembly:assembly -eX
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.6:single (distribution) on project phoenicis-dist: Failed to create assembly: Artifact: com.playonlinux:phoenicis-app:jar:5.0-SNAPSHOT (included by module) does not have an artifact with a file. Please ensure the package phase is run before the assembly is generated. -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.6:single (distribution) on project phoenicis-dist: Failed to create assembly: Artifact: com.playonlinux:phoenicis-app:jar:5.0-SNAPSHOT (included by module) does not have an artifact with a file. Please ensure the package phase is run before the assembly is generated.
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.MojoExecutor.executeForkedExecutions(MojoExecutor.java:365)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:199)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.MojoExecutionException: Failed to create assembly: Artifact: com.playonlinux:phoenicis-app:jar:5.0-SNAPSHOT (included by module) does not have an artifact with a file. Please ensure the package phase is run before the assembly is generated.
    at org.apache.maven.plugin.assembly.mojos.AbstractAssemblyMojo.execute(AbstractAssemblyMojo.java:541)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
    ... 23 more
Caused by: org.apache.maven.plugin.assembly.archive.ArchiveCreationException: Artifact: com.playonlinux:phoenicis-app:jar:5.0-SNAPSHOT (included by module) does not have an artifact with a file. Please ensure the package phase is run before the assembly is generated.
    at org.apache.maven.plugin.assembly.archive.phase.ModuleSetAssemblyPhase.addModuleArtifact(ModuleSetAssemblyPhase.java:337)
    at org.apache.maven.plugin.assembly.archive.phase.ModuleSetAssemblyPhase.addModuleBinaries(ModuleSetAssemblyPhase.java:231)
    at org.apache.maven.plugin.assembly.archive.phase.ModuleSetAssemblyPhase$1.accept(ModuleSetAssemblyPhase.java:140)
    at org.apache.maven.plugin.assembly.model.Assemblies.forEachModuleSet(Assemblies.java:40)
    at org.apache.maven.plugin.assembly.archive.phase.ModuleSetAssemblyPhase.execute(ModuleSetAssemblyPhase.java:126)
    at org.apache.maven.plugin.assembly.archive.DefaultAssemblyArchiver.createArchive(DefaultAssemblyArchiver.java:178)
    at org.apache.maven.plugin.assembly.mojos.AbstractAssemblyMojo.execute(AbstractAssemblyMojo.java:484)
    ... 25 more
[ERROR] 
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :phoenicis-dist

error main class com.playonlinux.app.PlayOnLinuxApp

build on archlinux using branch master

build 100% work no error

starting error

Error: Can not find or load the main class com.playonlinux.app.PlayOnLinuxApp

it would be possible to have a functional version beta please

or a version compiled

or a version that is already compiled

Thank you

[Feature Request] Ad an Update Option for Scripts

If a Program works better on a new Wine Version it should be allowed to update a Prefix.

In the easiest way POL user detect that a Wine Upgrade to a specific Version result in a better Performance, it should be posible to update a Prefix with that.

It could show like follow, IMHO:
To get a Prefix update, the follow situation have to be. Now manual change where made on a Prefix with POL. Maybe an Expert Override Option can reactivate the Update. So a Program installed from a POL-Script should deactivate all manual Option on that Prefix and allow to activate them if you tick an override Option.

POL Scripts should be able to contain an Upgrade section.

If an Upgrade is available you get noticed after start POL and you are able tu Update with one click. (Maybe with a backup option)

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.