Code Monkey home page Code Monkey logo

mod-ui's Introduction

mod-ui

This is the UI for the MOD software. It's a webserver that delivers an HTML5 interface and communicates with mod-host. It also communicates with the MOD hardware, but does not depend on it to run.

Install

There are instructions for installing in a 64-bit Debian based Linux environment. It will work in x86, other Linux distributions and Mac, but you might need to adjust the instructions.

The following packages will be required:

$ sudo apt-get install virtualenv python3-pip python3-dev git build-essential libasound2-dev libjack-jackd2-dev liblilv-dev libjpeg-dev zlib1g-dev

NOTE: libjack-jackd2-dev can be replaced by libjack-dev if you are using JACK1; libjpeg-dev is needed for python-pillow, at least on my system.

Start by cloning the repository:

$ git clone git://github.com/moddevices/mod-ui
$ cd mod-ui

Create a python virtualenv:

$ virtualenv modui-env
$ source modui-env/bin/activate

Install python requirements:

$ pip3 install -r requirements.txt

Compile libmod_utils:

$ make -C utils

Run

Before running the server, you need to activate your virtualenv (if you have just done that during installation, you can skip this step, but you'll need to do this again when you open a new shell):

$ source modui-env/bin/activate

mod-ui depends on mod-host and the JACK server running in order to make sound. So after you have JACK setup and running, in another terminal do:

$ mod-host -n -p 5555 -f 5556

If you do not have mod-host, you can tell mod-ui to fake the connection to the audio backend. You will not get any audio, but you will be able to load plugins, make connections, save pedalboards and all that. For this, run:

$ export MOD_DEV_HOST=1

And now you are ready to start the webserver:

$ export MOD_DEV_ENVIRONMENT=0
$ python3 ./server.py

Setting the environment variables is needed when developing on a PC. Open your browser and point to http://localhost:8888/.

mod-ui's People

Contributors

alercunha avatar andersonorui avatar anderspollack avatar beraldoleal avatar bgola avatar blushi avatar boomshop avatar brummer10 avatar buruno avatar dependabot[bot] avatar dsheeler avatar falktx avatar gtrainavicius avatar leogermani avatar lfagundes avatar lucastakejame avatar mindhog avatar odurc avatar spliner avatar tristantarrant avatar vallsv 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

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  avatar  avatar  avatar

mod-ui's Issues

logarithmic assignment bug

When a logarithmic parameter (such as frequency in a sine generator) is assigned, its chosen mode is not correct, both bytes (Relevant_properties and property_values, respectively) are wrong.
(The plugin testedwas SWH Analogue Oscilator)

when dragging modguis to contructor, they should show its default values

this is the issue:
scr473
notice how all the plugin knobs are turned left.

the proper initial knob positions for this plugin is this:
scr474

so it makes sense that the modgui when being dragged is shown with its initial/default values.

this only happens when dragging modguis to the constructor.
the thumbnail and screenshot is fine, and so is the modgui once loaded in the constructor.

Plugins not available in the cloud should have a different icon

Currently there's no way to differentiate plugins installed by the user and not available in the cloud vs plugins available in the cloud and in their latest versions.
The icon used for these situations is the same.
We should have a specific icon for those plugins that are not in the cloud yet.

Atom ports always appear as MIDI ports

Some plugins use LV2 atom ports for stuff other than MIDI (like UI communication or transport info).
We should only show a MIDI port in mod-ui if the atom port has atom sequence type and supports MidiEvent.

Opening the settings page disables midi input

  1. Open a patch with midi bindings (CC to bypass)
  2. Observe the binding working
  3. Change to the /settings.html page
  4. Observe the bindings not working anymore

A reboot of the MOD restores MIDI functionality

setup.py fails to install libmod_utils.so

Getting this during runtime:

OSError: Cannot open "/usr/local/lib/python3.6/site-packages/mod/../utils/libmod_utils.so"

It should not only install it, but it should also record it into the installed files list with the --record command.

MIDI learning feature doesn't gives feedback

Currently when using the midi learning feature, any feedback is given, so you don't know if it's working until close the midi learning popup and move again the control to see if it's effectively linked.
It would be nice to have some feedback, including the CC number.

click + drag control knob -- off by one

Control knobs receives both the "click" (step up by one) and drag events.

It's hard to accurately dial a value (e.g. 0dB on x42-eq) one always has to drag one step early (or late when holding shift)

Reproduce: initiate a drag on a control knob - move around and then to exactly 12:00h middle. mouse up -> it jumps to 12:15.

Firefox 45.2.0 MOD 1.0.3

cannot load plugins with non http URIs

If the plugin has an URI like "urn:juce:TalReverb" or "file:///usr/lib/lv2/StereoEffect.ingen/StereoEffect.ttl", mod-ui will fail to load it.
(it tries to install the plugin for some reason)

scanning for lv2 plugins fails

I am on a ubuntustudio 64bit 14.04 system and was following the guide to setup mod-client.
Before following the guide, I had to
sudo apt-get install python-dev python-virtualenv
as well.

Then, later I stumble upon BadSyntax errors while scanning for lv2 plugins:
cmd is: ./run.py --scan-lv2
output "bad syntax" error: http://pastebin.com/14MqTM4F

[feature request] auto positioning of pedals in the pedalboard

After looking at some of the shared pedalboards my OCD is flaring up ;) These are bound to look as messy as the physical pedalboards most guitarists set up. It would be cool to have a button that "auto-aligns" everything in a grid to make them look organized. Its no simple task, I know, but would be a cool eye-candy feature. Folks who like the more "organic" messy look just don't press the button.

Update install documentation with libmod_utils.so

The install process failed on Ubuntu 16.04. When I started the server I got :

OSError: /home/xxx/rec/mod-ui/mod/../utils/libmod_utils.so: cannot open shared object file: No such file or directory
I guessed something has to be build first in ./utils. To build libmod_utils.so I installed libasound2-dev,libjack-jackd2-dev packages first.

Ingen does not always close socket properly

This is an ingen issue, but keeping it here for visibility.

We could maybe have a "--force" ingen CLI argument to force socket connection even if it wasn't closed properly before.

inconsistent jack/pin behaviour when not connected

Let me see if I can describe this issue.
I've loaded 2 plugins, it looks like this:
scr480

made a single connection, now looks like this:
scr481

I broke that connection, so now it looks like this:
scr482

note how the 1st jack of the 1st plugin is gone.
it should be visible like all the other 3 jacks.

Unassignment

Mod-Ui keeps sending data request after parameter unassignment (no assignments left and device did send unassignment response).

Midi CC unbinding doesn't work

I have a pedalboard that has a midi binding for channel 3, cc 0 (Gain2x2 in the below ttl). I want to change it to bind to Quack (_quack in the below ttl). Removing the former in the UI doesn't get reflected in the saved ttl file for the pedalboard (the binding for Gain2x2 persists).

Below is my train of thought hunting for the bug, but I got stuck.

21:25 < fps> where on the mod are the pedalboards stored?
21:26 < fps> oh, .pedalboards
21:28 < fps> ah ok, the previous binding for channel 3 on the old plugin wasn't removed
21:28 < fps> even though i removed it
21:29 < fps> can i just remove it manually from the ttl?
21:31 < fps> weird: these are the identical bindings now:
21:31 -!- Irssi: Pasting 9 lines to #moddevices. Press Ctrl-K if you wish to do this or Ctrl-C to cancel.
21:31 < fps>                
21:31 < fps>     ingen:value 1 ;
21:31 < fps>     midi:binding [
21:31 < fps>         midi:channel 3 ;            
21:31 < fps>         midi:controllerNumber 0 ;
21:31 < fps>         a midi:Controller ;
21:31 < fps>     ] ;
21:31 < fps>     a lv2:ControlPort ,          
21:31 < fps>         lv2:InputPort .            
21:31 < fps> which i have removed from the UI
21:31 < fps> this is the new one:
21:31 -!- Irssi: Pasting 9 lines to #moddevices. Press Ctrl-K if you wish to do this or Ctrl-C to cancel.
21:31 < fps> <_quack_/:bypass>               
21:31 < fps>     ingen:value 1 ;
21:31 < fps>     midi:binding [
21:31 < fps>         midi:channel 3 ;            
21:31 < fps>         midi:controllerNumber 0 ;
21:31 < fps>         a midi:Controller ;
21:31 < fps>     ] ;
21:31 < fps>     a lv2:ControlPort ,          
21:31 < fps>         lv2:InputPort .            
21:31 < fps> loading the pedalboard again seems to parse it from the top so only the first one is effective
21:32 < fps> anyways, it is removed in the UI, but still persists in the file after saving..
21:34 < fps> this happened before in different pedalboards.. saving under a different name makes no difference
21:39 < fps> ok, removing midi bindings seems to be generally broken
21:42 < fps> hmm, ok, so removing a midi binding per web ui sends a POST to:
21:42 < fps> http://modduo.local/effect/parameter/address//graph/_quack_/:bypass
21:42 < fps> with form data 
21:42 < fps> {"uri":"null","label":"GxQuack","minimum":0,"maximum":1,"value":1}
21:42 < fps> key, but no value
21:45 < fps> i have no idea how this route is handled in mod-ui.py though
21:47 < fps> https://github.com/moddevices/mod-ui/blob/master/mod/webserver.py#L783
21:47 < fps> hmmm
21:51 < fps> and gets passed through to this:
21:51 < fps> https://github.com/moddevices/mod-ui/blob/master/mod/host.py#L2810
21:51 < fps> with value being the empty string
21:51 < fps> that empty value is never checked for it seems, so unbinding doesn't seem to happen

Request: Mechanism to know if backend was ok

Sometimes ingen does not start properly, or maybe we forgot to run it before mod-ui.

Having a way to know if the connection to ingen sockets failed should be there somewhere,
at least to make it more obvious why things aren't working.

MOD_DEV_HOST not supported in Ingen branch

MOD_DEV_HOST supposedly disables the integration with the backend for easier testing of the UI only.
I use this method to display modguis on carla (no reason to have ingen running in there).

The current ingen branch always tries to connect to the backend even if MOD_DEV_HOST is set to 1.

MIDI unlearning doesn't work

When trying to un-learn an assigned controller selecting "None" from the combo in the popup and clicking "Save", it doesn't work. The controller is "re-enabled in the GUI, but the MIDI-CC remains linked to the controller and it can't be assigned to another one. The only way to "free" an assigned MIDI-CC is re-learning the controller and assigning a different one.

I'm testing with the later version from repository.

Translation of the mod-ui

What do you people suggest for a translation process, by wiki or by, let's say, a folder in the project like pt_BR/README?

I would like to contribute but before I want your opinion about that.

I'm from Brasil, I would like to translate for portuguese.

Build problem on Fedora 23

I followed the instruction from the README file.
When I start the server, I have the following error message:
Traceback (most recent call last):
File "./server.py", line 24, in
from mod import webserver
File "/home/collette/repositories/LV2/portalmod/mod-ui/mod/webserver.py", line 49, in
from mod.session import SESSION
File "/home/collette/repositories/LV2/portalmod/mod-ui/mod/session.py", line 33, in
from mod.development import FakeHost, FakeHMI
File "/home/collette/repositories/LV2/portalmod/mod-ui/mod/development.py", line 21, in
from mod.host import Host
File "/home/collette/repositories/LV2/portalmod/mod-ui/mod/host.py", line 39, in
from mod.utils import charPtrToString
File "/home/collette/repositories/LV2/portalmod/mod-ui/mod/utils.py", line 134, in
utils = cdll.LoadLibrary(tryPath2)
File "/usr/lib64/python3.4/ctypes/init.py", line 424, in LoadLibrary
return self._dlltype(name)
File "/usr/lib64/python3.4/ctypes/init.py", line 346, in init
self._handle = _dlopen(self._name, mode)
OSError: /home/collette/repositories/LV2/portalmod/mod-ui/mod/../utils/libmod_utils.so: cannot open shared object file: No such file or directory

If I compile the so file in the utils directory:

$ make
g++ utils_lilv.cpp -Wall -Wextra -Wshadow -std=gnu++0x -fPIC -O3 -I/usr/include/lilv-0 -I/usr/include/sratom-0 -I/usr/include/sord-0 -I/usr/include/serd-0 -c -o utils_lilv.cpp.o
utils_lilv.cpp: Dans la fonction ‘void refresh()’:
utils_lilv.cpp:561:83: erreur: ‘lilv_file_uri_parse’ was not declared in this scope
lilvparsed = lilv_file_uri_parse(lilv_node_as_uri(bundlenode), nullptr);
^
utils_lilv.cpp:568:37: erreur: ‘lilv_free’ was not declared in this scope
lilv_free(lilvparsed);
^
utils_lilv.cpp:574:33: erreur: ‘lilv_free’ was not declared in this scope
lilv_free(lilvparsed);
^
utils_lilv.cpp: Dans la fonction ‘const PluginInfo_Mini& get_plugin_info_mini(const LilvPlugin, const NamespaceDefinitions_Mini&)’:
utils_lilv.cpp:877:36: erreur: ‘lilv_free’ was not declared in this scope
lilv_free((void
)resdir);
^
utils_lilv.cpp:878:79: erreur: ‘lilv_file_uri_parse’ was not declared in this scope
resdir = lilv_file_uri_parse(lilv_node_as_string(resdirn), nullptr);
^
utils_lilv.cpp:890:32: erreur: ‘lilv_free’ was not declared in this scope
lilv_free((void_)resdir);
^
utils_lilv.cpp:896:100: erreur: ‘lilv_file_uri_parse’ was not declared in this scope
info.gui.screenshot = lilv_file_uri_parse(lilv_node_as_string(modgui_scrn), nullptr);
^
utils_lilv.cpp:906:100: erreur: ‘lilv_file_uri_parse’ was not declared in this scope
info.gui.thumbnail = lilv_file_uri_parse(lilv_node_as_string(modgui_thumb), nullptr);
^
utils_lilv.cpp: Dans la fonction ‘const PluginInfo& get_plugin_info(const LilvPlugin, const NamespaceDefinitions&)’:
utils_lilv.cpp:942:70: erreur: ‘lilv_file_uri_parse’ was not declared in this scope
const char* const bundle = lilv_file_uri_parse(bundleuri, nullptr);
^
utils_lilv.cpp:1332:41: erreur: ‘lilv_free’ was not declared in this scope
lilv_free(lilvparsed);
^
utils_lilv.cpp:1337:37: erreur: ‘lilv_free’ was not declared in this scope
lilv_free(lilvparsed);
^
utils_lilv.cpp:1375:36: erreur: ‘lilv_free’ was not declared in this scope
lilv_free((void_)resdir);
^
utils_lilv.cpp:2141:28: erreur: ‘lilv_free’ was not declared in this scope
lilv_free((void_)bundle);
^
utils_lilv.cpp: Dans la fonction ‘const PedalboardInfo_Mini& get_pedalboard_info_mini(const LilvPlugin, LilvWorld_, const LilvNode_, const LilvNode_, const LilvNode_)’:
utils_lilv.cpp:2190:77: erreur: ‘lilv_file_uri_parse’ was not declared in this scope
info.bundle = lilv_file_uri_parse(lilv_node_as_string(node), nullptr);
^
utils_lilv.cpp: Dans la fonction ‘void clear_plugin_info(PluginInfo&)’:
utils_lilv.cpp:2307:35: erreur: ‘lilv_free’ was not declared in this scope
lilv_free((void
)info.name);
^
utils_lilv.cpp:2309:37: erreur: ‘lilv_free’ was not declared in this scope
lilv_free((void_)info.binary);
^
utils_lilv.cpp:2327:53: erreur: ‘lilv_free’ was not declared in this scope
lilv_free((void_)info.gui.resourcesDirectory);
^
utils_lilv.cpp:2329:47: erreur: ‘lilv_free’ was not declared in this scope
lilv_free((void_)info.gui.iconTemplate);
^
utils_lilv.cpp:2331:51: erreur: ‘lilv_free’ was not declared in this scope
lilv_free((void_)info.gui.settingsTemplate);
^
utils_lilv.cpp:2333:45: erreur: ‘lilv_free’ was not declared in this scope
lilv_free((void_)info.gui.javascript);
^
utils_lilv.cpp:2335:45: erreur: ‘lilv_free’ was not declared in this scope
lilv_free((void_)info.gui.stylesheet);
^
utils_lilv.cpp:2337:45: erreur: ‘lilv_free’ was not declared in this scope
lilv_free((void_)info.gui.screenshot);
^
utils_lilv.cpp:2339:44: erreur: ‘lilv_free’ was not declared in this scope
lilv_free((void_)info.gui.thumbnail);
^
utils_lilv.cpp: Dans la fonction ‘void clear_plugin_info_mini(PluginInfo_Mini&)’:
utils_lilv.cpp:2440:45: erreur: ‘lilv_free’ was not declared in this scope
lilv_free((void
)info.gui.screenshot);
^
utils_lilv.cpp:2442:44: erreur: ‘lilv_free’ was not declared in this scope
lilv_free((void_)info.gui.thumbnail);
^
utils_lilv.cpp: Dans la fonction ‘void clear_pedalboard_info(PedalboardInfo&)’:
utils_lilv.cpp:2456:56: erreur: ‘lilv_free’ was not declared in this scope
lilv_free((void
)info.connections[i].source);
^
utils_lilv.cpp:2488:62: erreur: ‘lilv_free’ was not declared in this scope
lilv_free((void_)info.hardware.midi_ins[i].symbol);
^
utils_lilv.cpp:2501:63: erreur: ‘lilv_free’ was not declared in this scope
lilv_free((void_)info.hardware.midi_outs[i].symbol);
^
utils_lilv.cpp: Dans la fonction ‘void clear_pedalboard_info_mini(PedalboardInfo_Mini&)’:
utils_lilv.cpp:2518:37: erreur: ‘lilv_free’ was not declared in this scope
lilv_free((void
)info.bundle);
^
utils_lilv.cpp: Dans la fonction ‘void cleanup()’:
utils_lilv.cpp:2706:26: erreur: ‘lilv_free’ was not declared in this scope
lilv_free(uri_parsed);
^
utils_lilv.cpp: Dans la fonction ‘const char* const* remove_bundle_from_lilv_world(const char
)’:
utils_lilv.cpp:2886:83: erreur: ‘lilv_file_uri_parse’ was not declared in this scope
tmp = (char_)lilv_file_uri_parse(lilv_node_as_uri(bundlenode), nullptr);
^
utils_lilv.cpp:2893:30: erreur: ‘lilv_free’ was not declared in this scope
lilv_free(tmp);
^
utils_lilv.cpp:2898:26: erreur: ‘lilv_free’ was not declared in this scope
lilv_free(tmp);
^
utils_lilv.cpp: Dans la fonction ‘const PedalboardInfo_Mini* const* get_all_pedalboards()’:
utils_lilv.cpp:3181:26: erreur: ‘lilv_free’ was not declared in this scope
lilv_free(rdftypenode);
^
utils_lilv.cpp: Dans la fonction ‘const PedalboardInfo* get_pedalboard_info(const char_)’:
utils_lilv.cpp:3214:37: erreur: ‘lilv_world_load_specifications’ was not declared in this scope
lilv_world_load_specifications(w);
^
utils_lilv.cpp:3215:37: erreur: ‘lilv_world_load_plugin_classes’ was not declared in this scope
lilv_world_load_plugin_classes(w);
^
utils_lilv.cpp:3349:98: erreur: ‘lilv_file_uri_parse’ was not declared in this scope
char_ full_instance = lilv_file_uri_parse(lilv_node_as_string(block), nullptr);
^
utils_lilv.cpp:3436:44: erreur: ‘lilv_free’ was not declared in this scope
lilv_free(full_instance);
^
utils_lilv.cpp:3479:87: erreur: ‘lilv_file_uri_parse’ was not declared in this scope
char* tailstr = lilv_file_uri_parse(lilv_node_as_string(tail), nullptr);
^
utils_lilv.cpp:3570:90: erreur: ‘lilv_file_uri_parse’ was not declared in this scope
char* portsym = lilv_file_uri_parse(port_uri.c_str(), nullptr);
^
utils_lilv.cpp:3599:90: erreur: ‘lilv_file_uri_parse’ was not declared in this scope
char* portsym = lilv_file_uri_parse(port_uri.c_str(), nullptr);
^
utils_lilv.cpp: Dans la fonction ‘StatePortValue* get_state_port_values(const char_)’:
utils_lilv.cpp:3813:73: erreur: ‘lilv_state_emit_port_values’ was not declared in this scope
lilv_state_emit_port_values(lstate, lilv_set_port_value, &values);
^
utils_lilv.cpp: Dans la fonction ‘const char_ file_uri_parse(const char_)’:
utils_lilv.cpp:3897:30: erreur: ‘lilv_free’ was not declared in this scope
lilv_free(_uri_parsed);
^
utils_lilv.cpp:3899:55: erreur: ‘lilv_file_uri_parse’ was not declared in this scope
uri_parsed = lilv_file_uri_parse(fileuri, nullptr);
^
Makefile:21: recipe for target 'utils_lilv.cpp.o' failed
make: *
* [utils_lilv.cpp.o] Error 1

Lilv version on fedora 23: 0.20.0

Overall build succeeds even when one python command fails

It requires python3 and fails with python2. But an internal failing command should fail the overall build, and it doesn't:

byte-compiling /usr/ports/audio/mod-ui/work/stage/usr/local/lib/python2.7/site-packages/mod/communication/crypt.py to crypt.pyc
  File "/usr/local/lib/python2.7/site-packages/mod/communication/crypt.py", line 8
    def encrypt(recipient_key_txt: str, data: str):
                                 ^
SyntaxError: invalid syntax

byte-compiling /usr/ports/audio/mod-ui/work/stage/usr/local/lib/python2.7/site-packages/mod/communication/device.py to device.pyc
byte-compiling /usr/ports/audio/mod-ui/work/stage/usr/local/lib/python2.7/site-packages/mod/communication/token.py to token.pyc
  File "/usr/local/lib/python2.7/site-packages/mod/communication/token.py", line 6
    def create_token_message(nonce: str):
                                  ^
SyntaxError: invalid syntax

writing byte-compilation script '/tmp/tmpVE7xfL.py'
/usr/local/bin/python2.7 -O /tmp/tmpVE7xfL.py
SyntaxError: 'return' with argument inside generator (host.py, line 2846)

  File "/usr/local/lib/python2.7/site-packages/mod/communication/crypt.py", line 8
    def encrypt(recipient_key_txt: str, data: str):
                                 ^
SyntaxError: invalid syntax

  File "/usr/local/lib/python2.7/site-packages/mod/communication/token.py", line 6
    def create_token_message(nonce: str):
                                  ^
SyntaxError: invalid syntax

removing /tmp/tmpVE7xfL.py
running install_data

Dragging a jack on an empty canvas and not connecting the first time fails

On a clean pedalboard, without having loaded any plugins or made any connections, dragging and dropping a jack over an empty area will result in a js error.

TypeError: Requested keys of a value that is not an object. 

fails at pedalboard.js:1791

if (Object.keys(self.data('connectionManager').origIndex[output.attr('mod-port')]).length == 1) {

Question about choice of tornado webserver - realtime kernel

Hey,
So I am playing with mod-ui on a raspberrypi with a realtime kernel. Its awesome, but sometimes the mod-ui interface just hangs. It might take like 10 minutes to load. I suspect its because of tornado, I didn't really test because I am not sure how to replace it (yet).
I can see images downloading in the speed that is reminiscent of dialup internet (from top to bottom, slowly).

I was wondering if you have an explanation why to use a single thread per process web browser?

./setup.py server is not starting after performing installation process

when i type ./server.py in the terminal after installing the mod-ui i get the following error:

(modui-env) root@bigjuergo-X550LA:/home/bigjuergo/Downloads/mod-ui# ./server.py
Traceback (most recent call last):
  File "./server.py", line 47, in <module>
    create_dummy_credentials()
  File "./server.py", line 13, in create_dummy_credentials
    with open(os.environ['MOD_DEVICE_TAG'], 'w') as fh:
FileNotFoundError: [Errno 2] No such file or directory: '/home/bigjuergo/Downloads/mod-ui/data/tag'

can you help me please?
(i use ubuntu studio 64bit as operating system)

thank you.

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.