Giter VIP home page Giter VIP logo

blocklypropclient's Introduction

BlocklyPropClient

Introduction

The BlocklyPropClient is a Python client for the hosted version of BlocklyProp. It provides the spin and Prop-C compiler, it can load your programs in to the prop and creates a serial connection from the browser to the propeller.

Running

BlocklyPropClient has been written using Python 2.7

You will first have to install some python dependencies before you can run BlocklyPropClient.

  • ws4py
  • pyserial
  • cherrypy

These can all be installed using the auto-installer by running the following in the terminal: 'python InstallDependencies.py'

Then do: python BlocklyPropClient.py

Building

If you want to create an executable to distribute to users:

Install pyinstaller (using pip) and do: pyinstaller BlocklyPropClient.xxxxxxx.spec

where you replace xxxxx by your OS. The distributable folder is available under the dist directory.

If you run the executable inside this directory, python nor any of the dependencies need to be installed on that computer.

blocklypropclient's People

Contributors

darkmattervale avatar michel-cf avatar michellampo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

blocklypropclient's Issues

Use the GUI with the Install Dependencies script

For now, it doesn't matter but at some point in the future, the Install Dependencies script should not show the terminal when installing and should not have to be called separately ( i.e. making the user run the program independent of the BlocklyPropClient script ). This might be able to be achieved running this script every time the program is run, and if it doesn't detect the dependencies already installed, it will install them.

Implement WebSockets

The BlocklyProp client currently provides an embedded web server that facilitates communication with the client browser to obtain binary images that it then loads onto a connected Propeller device. The current implementation does not support end to end secured communication when the web browser is using HTTPS to communicate with the BlocklyProp server.

@michel-cf has proposed to re-architect the solution to use WebSockets in this post. The proposal will require an additional service from the cloud infrastructure and a significant rewrite of the existing code base.

This ticket will track the overall progress of the effort.

Release v0.5.2

Release current build as v0.5.2 for Win and Mac (Linux exe/installer not necessary).

Add Linux FTDI driver detection

Add support for Linux FTDI driver detection.

This should be used for logging as well as an error check before downloading to prompt the user that there's a specific roadblock in their way. Ideally, it will provide instruction and a link/button to get the necessary drivers installed.

This relates partially to Issue #35.

Create Installer

Create installer for the client that installs on each supported platform and also includes the FTDI drivers (if necessary).

Current Supported Platforms

  • Windows 7/8/8.1/10 - 64-bit
  • Mac OSX 64-bit

Client launch fails on Mac - gethostbyname() failed.

The BlocklyPropClient fails immediately upon launch and does not report any error condition. Launching from the command line produces this output.

Traceback (most recent call last):
  File "<string>", line 205, in <module>
  File "<string>", line 50, in __init__
  File "<string>", line 107, in initialize
  File "/Users/michel/Documents/Development/blocklyprop/BlocklyPropClient/ip.py", line 16, in get_lan_ip
socket.gaierror: [Errno 8] nodename nor servname provided, or not known
BlocklyPropClient returned -1

Improve port string parsing to prevent "R"-style ports

It has been noted that on Windows computers with an "Intel(R)... "-based COM port, the port shows up in the BlocklyProp list as "R"... this is because the parsing mechanism is just grabbing whatever string appears within parentheses and assuming that's the friendly name for the port.

Must fix this.

Prevent duplicates in port list

Future Enhancement:

Prevent duplicate "names" from appearing in port list. This is a possibility now since users can custom-name their Wi-Fi Modules. Since BlocklyProp's Editor doesn't keep track of the port's IP address, only the name is passed between BPClient and BP. This means that BPClient can be asked to download to a port name that resolves to two or more IP addresses if there happens to be two or more Wi-Fi Modules in the with exactly the same name.

Suggestion: Enhance to adjust names upon the get_ports() request, to be guaranteed unique (within that particular list) by using part of the device's MAC address appended to the name(s) when, and only when, a duplicate is found. Keep the modification as short as practical.

Sample, but yet imperfect, code (copy and paste into IDLE and run). This code doesn't handle possibility that the new modification can match another existing module name and, rather than spend more time now, it's added here as just a potential starting point for a future enhancement.

NOTE: This includes some helper functions that already exist in BlocklyLoader.py... they are only included here to facilitate quick, isolated development in IDLE. See the "Main Code" section for the real point.

# Helper Functions              


def isWiFiName(string, wifiName):
# Return True if string contains Wi-Fi Module record named wifiName
    return getWiFiName(string) == wifiName


def getWiFiName(string):
# Return Wi-Fi Module Name from string, or None if not found
    return strBetween(string, "Name: '", "', IP: ")


def getWiFiIP(string):
# Return Wi-Fi Module IP address from string, or None if not found
    return strBetween(string, "', IP: ", ", MAC: ")


def getWiFiMAC(string):
# Return Wi-Fi Module MAC address from string, or None if not found
    return strAfter(string, ", MAC: ")


def strBetween(string, startStr, endStr):
# Return substring from string in between startStr and endStr, or None if no match
    # Find startStr
    sPos = string.find(startStr)
    if sPos == -1: return None
    sPos += len(startStr)
    # Find endStr
    ePos = string.find(endStr, sPos)
    if ePos == -1: return None
    # Return middle
    return string[sPos:ePos]


def strAfter(string, startStr):
# Return substring from string after startStr, or None if no match
    # Find startStr
    sPos = string.find(startStr)
    if sPos == -1: return None
    sPos += len(startStr)
    # Return string after
    return string[sPos:-1]                


# Main Code


wports = ["Name: 'Jeff's WX1', IP: 192.168.1.107, MAC: 18:fe:34:f9:ed:c0",
          "Name: 'Jeff's WX2', IP: 192.168.1.108, MAC: 18:fe:34:f9:ed:c1",
          "Name: 'Jeff's WX1', IP: 192.168.1.109, MAC: 18:fe:34:f9:ed:c2"]

com_port = "Jeff's WX1"

targetWiFi = [l for l in wports if isWiFiName(l, com_port)]
print len(targetWiFi)

if len(targetWiFi) == 1:
    print com_port, "is unique"
else:
    print com_port, "is a duplacate"
    print wports
    print "Adjusting..."
    for i in range(len(targetWiFi)):
        wports.remove(targetWiFi[i])
        print "removed occurrance", i
        print wports
        print "adding modified occurrance"
        wports.extend(["Name: '"+com_port+"("+targetWiFi[i][-2:]+")"+targetWiFi[i][len("Name: '"+com_port):]])
        print wports
    print "Done!"

Enhance Windows FTDI Driver detection

Relates to Issue #37.

Attempt to either using DevCon.exe, or create a SetupAPI-based .exe, that can detect the presence (or lack of) the FTDI USB Drivers regardless of whether or not a qualifying USB device has ever been connected to the Windows computer (that session or ever). NOTE: The driver site in the driver store, ready to be attached to a USB device, before the first device is connected. Perhaps that's also the state the driver is in at the start of each session before a USB device is connected.

Port 6069 in use after launching multiple copies of client

Launching a new instance of the BlocklyProp Client without closing the previous instance reports a WebSocket error, "Port 6069 already in use". Ideally, the client would detect the attempt to launch multiple instances and do something reasonable, such as setting focus on the previous instance or reporting that an instance is already running.

Fix Mac packager to build proper application bundle and include Client icon

Edit: This started as a small issue but was found to be a big problem - the application bundle was not being generated properly, preventing it from appearing in the Mac's Launchpad or Spotlight after install, making it near impossible for typical users to launch the BlocklyPropClient app.

Old Description:
The BlocklyPropClient icon is not included in the current package.

Manually including the icon in various ways within the bundle does not seem to fix the problem.

Research and fix the application icon issue in Mac application bundle / package.

Make Mac USB Driver Installation work properly without need to reboot

Explore, and if practical, make Mac installer unload Apple's "FTDI" USB driver and load FTDI's USB driver instead. This should remove the need to reboot the system after installing the BlocklyPropClient with FTDI drivers.

A question is whether or not the load/unload operation is even possible without superuser privileges.

Merge demo into master now?

Can we (you?) merge demo into master now? Is there any outstanding items the mean we must leave them appart?

image

Determine difference in behavior for logging on Win vs Mac

On Windows, there is a definite difference in behavior in logging in comparison to what is logged in Mac.

The next two log listings are from the same version (v0.5.4) of BlocklyPropClient, performing the same steps, downloading the same BlocklyProp project to a Propeller, and all done within about 1 minute of time.

On Windows, there are no repetitive logged events for COM port enumeration, no indication that the Connect button was clicked (no service starting messages), no logged activity of download processes being performed, and no logged activity of debug sessions:

2017-03-08 10:12:36,657 - blockly - INFO - Logger has been started.
2017-03-08 10:12:36,657 - blockly.main - INFO - Creating logger.
2017-03-08 10:12:37,095 - blockly - DEBUG - FTDI module load state
2017-03-08 10:12:37,095 - blockly - DEBUG - FTDIBUS      USB Serial Converter D USB Serial Converter D Kernel        Manual     Stopped
2017-03-08 10:12:37,180 - blockly.main - INFO - Logging is enabled
2017-03-08 10:12:37,180 - blockly.main - INFO - Application launched from C:\Program Files (x86)\BlocklyPropClient
2017-03-08 10:12:37,180 - blockly.main - INFO - Operating system is nt
2017-03-08 10:12:37,190 - blockly.main - INFO - Initializing the UI
2017-03-08 10:12:37,214 - blockly.main - INFO - Client IP is: 10.10.20.129
2017-03-08 10:12:37,214 - blockly.main - INFO - Port number is: 6009
2017-03-08 10:12:37,216 - blockly.main - INFO - Disk log file location is: C:\Users\jmartin.ROCKLIN/AppData/Local/Parallax/BlocklyPropClient.log
2017-03-08 10:12:37,219 - blockly.main - INFO - Initializing the UI menu
2017-03-08 10:12:38,854 - blockly.main - INFO - Connect state is: False

On Mac, there are repetitive logged events for COM port enumeration (don't think that's ideal, but it shows that there's activity), shows logged activity of download processes being performed, and also logged activity of debug sessions:

2017-03-08 10:28:36,612 - blockly - INFO - Logger has been started.
2017-03-08 10:28:36,612 - blockly.main - INFO - Creating logger.
2017-03-08 10:28:36,612 - blockly - INFO - FTDI driver is installed
2017-03-08 10:28:36,681 - blockly - DEBUG - FTDI module load state
2017-03-08 10:28:36,682 - blockly - DEBUG -   107    0 0xffffff7f80d56000 0x7000     0x7000     com.FTDI.driver.FTDIUSBSerialDriver (2.3) ECC3AF36-431D-370D-86F2-5237785E9CF8 <88 50 5 4 3 1>

2017-03-08 10:28:36,869 - blockly.main - INFO - Logging is enabled
2017-03-08 10:28:36,869 - blockly.main - INFO - Application launched from /Applications/BlocklyPropClient.app/Contents/MacOS
2017-03-08 10:28:36,870 - blockly.main - INFO - Operating system is posix
2017-03-08 10:28:36,870 - blockly.main - INFO - Initializing the UI
2017-03-08 10:28:41,894 - blockly.main - INFO - Client IP is: 0.0.0.0
2017-03-08 10:28:41,894 - blockly.main - INFO - Port number is: 6009
2017-03-08 10:28:41,894 - blockly.main - INFO - Disk log file location is: /Users/jmartin/Library/Logs/Parallax/BlocklyPropClient.log
2017-03-08 10:28:41,897 - blockly.main - INFO - Initializing the UI menu
2017-03-08 10:28:45,229 - blockly.main - INFO - Connect state is: False
2017-03-08 10:28:45,245 - blockly.server - INFO - Server starting
2017-03-08 10:28:45,253 - blockly.server - INFO - Creating server logger.
2017-03-08 10:28:45,253 - blockly.server - DEBUG - Application started from: /Applications/BlocklyPropClient.app/Contents/MacOS
2017-03-08 10:28:46,615 - blockly.server - DEBUG - Server poll received
2017-03-08 10:28:46,624 - blockly.server - DEBUG - Port list retreived
2017-03-08 10:28:46,625 - blockly.loader - INFO - Getting ports
2017-03-08 10:28:46,625 - blockly.loader - INFO - Enumerating host ports
2017-03-08 10:28:46,630 - blockly.loader - DEBUG - Port count: 2
2017-03-08 10:28:46,631 - blockly.server - DEBUG - Port /dev/cu.Bluetooth-Incoming-Port discovered.
2017-03-08 10:28:46,632 - blockly.server - DEBUG - Port /dev/cu.usbserial-WX9S5M0 discovered.
2017-03-08 10:28:50,425 - blockly.server - DEBUG - Writing program payload to temp file.
2017-03-08 10:28:50,429 - blockly.server - DEBUG - /var/folders/70/sj5kbq6j7k3_76ccdvhk59gh0000gn/T/tmp_l5LLV.elf saved.
2017-03-08 10:28:50,429 - blockly.server - DEBUG - Loading program to device.
2017-03-08 10:28:50,429 - blockly.loader - DEBUG - Loader executable path is: /Applications/BlocklyPropClient.app/Contents/MacOS/propeller-tools/mac/propeller-load)
2017-03-08 10:28:50,430 - blockly.loader - DEBUG - Loader commandline is: ['/Applications/BlocklyPropClient.app/Contents/MacOS/propeller-tools/mac/propeller-load', '-r']
2017-03-08 10:28:50,430 - blockly.loader - INFO - Talking to com port.
2017-03-08 10:28:50,430 - blockly.loader - INFO - Executing process ['/Applications/BlocklyPropClient.app/Contents/MacOS/propeller-tools/mac/propeller-load', '-r', '-p', '/dev/cu.usbserial-WX9S5M0', '/var/folders/70/sj5kbq6j7k3_76ccdvhk59gh0000gn/T/tmp_l5LLV.elf']
2017-03-08 10:28:51,630 - blockly.server - DEBUG - Port list retreived
2017-03-08 10:28:51,631 - blockly.loader - INFO - Getting ports
2017-03-08 10:28:51,631 - blockly.server - DEBUG - Port /dev/cu.Bluetooth-Incoming-Port discovered.
2017-03-08 10:28:51,631 - blockly.server - DEBUG - Port /dev/cu.usbserial-WX9S5M0 discovered.
2017-03-08 10:28:52,978 - blockly.loader - INFO - Load result is: 0
2017-03-08 10:28:52,978 - blockly.loader - DEBUG - Load error string: 
2017-03-08 10:28:52,978 - blockly.loader - DEBUG - Load output string: Propeller Version 1 on /dev/cu.usbserial-WX9S5M0
Loading /var/folders/70/sj5kbq6j7k3_76ccdvhk59gh0000gn/T/tmp_l5LLV.elf to hub memory
8220 bytes remaining             
7196 bytes remaining             
6172 bytes remaining             
5148 bytes remaining             
4124 bytes remaining             
3100 bytes remaining             
2076 bytes remaining             
1052 bytes remaining             
28 bytes remaining             
                               
8220 bytes sent
Verifying RAM ... OK

2017-03-08 10:28:52,978 - blockly.server - INFO - Application load complete.
2017-03-08 10:28:52,991 - blockly.serial - INFO - Creating serial logger.
2017-03-08 10:28:53,604 - blockly.serial - INFO - Message received
2017-03-08 10:28:53,605 - blockly.serial - DEBUG - Message is: +++ open port /dev/cu.usbserial-WX9S5M0 115200
2017-03-08 10:28:53,605 - blockly.serial - DEBUG - Connection config string: /dev/cu.usbserial-WX9S5M0 115200
2017-03-08 10:28:53,605 - blockly.serial - DEBUG - Setting serial port config: Port /dev/cu.usbserial-WX9S5M0, Speed 115200
2017-03-08 10:28:53,605 - blockly.serial - INFO - Opening serial port /dev/cu.usbserial-WX9S5M0
2017-03-08 10:28:53,624 - blockly.serial - INFO - Serial port /dev/cu.usbserial-WX9S5M0 is open.
2017-03-08 10:28:53,625 - blockly - DEBUG - Polling serial port.
2017-03-08 10:28:54,129 - blockly - DEBUG - Data received from device: Hello
2017-03-08 10:28:55,136 - blockly - DEBUG - Data received from device: Hello
2017-03-08 10:28:56,019 - blockly.serial - INFO - Closing serial port
2017-03-08 10:28:56,628 - blockly.server - DEBUG - Port list retreived
2017-03-08 10:28:56,628 - blockly.loader - INFO - Getting ports
2017-03-08 10:28:56,629 - blockly.loader - INFO - Enumerating host ports
2017-03-08 10:28:56,631 - blockly.loader - DEBUG - Port count: 2
2017-03-08 10:28:56,631 - blockly.server - DEBUG - Port /dev/cu.Bluetooth-Incoming-Port discovered.
2017-03-08 10:28:56,631 - blockly.server - DEBUG - Port /dev/cu.usbserial-WX9S5M0 discovered.
2017-03-08 10:29:00,869 - blockly.main - INFO - Connect state is: True
2017-03-08 10:29:00,870 - blockly.main - DEBUG - Terminating server process
2017-03-08 10:29:02,610 - blockly.server - DEBUG - Port list retreived
2017-03-08 10:29:02,611 - blockly.loader - INFO - Getting ports
2017-03-08 10:29:02,611 - blockly.loader - INFO - Enumerating host ports
2017-03-08 10:29:02,614 - blockly.loader - DEBUG - Port count: 2
2017-03-08 10:29:02,614 - blockly.server - DEBUG - Port /dev/cu.Bluetooth-Incoming-Port discovered.
2017-03-08 10:29:02,615 - blockly.server - DEBUG - Port /dev/cu.usbserial-WX9S5M0 discovered.

Basic Stamp Support

In addition to this being a server side of things, additions need to be added on the client.

Add Win FTDI driver detection

Add support for Windows FTDI driver detection.

This should be used for logging as well as an error check before downloading to prompt the user that there's a specific roadblock in their way. Ideally, it will provide instruction and a link/button to get the necessary drivers installed.

This relates partially to Issue #35.

Chromebook support

This might be very important since some schools will have Chromebooks that students use.

Add Mac FTDI driver detection

Add support for Mac OS X FTDI driver detection.

This should be used for logging as well as an error check before downloading to prompt the user that there's a specific roadblock in their way. Ideally, it will provide instruction and a link/button to get the necessary drivers installed.

This relates partially to Issue #35.

Add error processing for download-but-nothing-happens condition

Today Jim found code that seems to be directly involved with the download-successful-but-nothing-happens condition reported on occasion by some customers.

Add exception handling and error processing to this code.

If possible now, add a fix to prevent the erroneous condition in the first place.

GCC on Mac

This needs a solution since it is currently breaks compiling code on the client.

Are we going to add the PropellerGCC toolchain to the client? What solution do we have in mind?

Version Number Management

@zfi

From this commit it appears that the version number is currently stored in three different places:

  • BlocklyPropClient.py
  • about.txt
  • package/blocklypropclient-installer.iss

and with the recent enhancement of the Mac build/sign/packaging spec and scripts, it is also necessary for it to be placed in the Info.plist's CFBundleShortVersionString element (currently done automatically at signing/packaging time).

Until/unless we have a way to manage this better in the future, I think I should add a small sed script to the repo that will adjust the version in each of the necessary places in one step- something we can use like this, for example:

  $ set_version 0.5.3

Do you agree with all of this, above?

Log location denial kills app on Mac

@zfi - Building the Mac today app after merging in latest Demo work produces a condition we've seen, and fixed, before...

  • when run from the Launchpad, Finder, or Spotlight, the BlocklyPropClient app starts and then immediately stops, producing no GUI or visible error message.
  • when run from the console, it indicates that it tried to create a log file inside the Application's bundle... something only su-privileged processes can do:
Jeffs-Mac:BlocklyPropClient.app jmartin$ /Applications/BlocklyPropClient.app/Contents/MacOS/BlocklyPropClient 
Traceback (most recent call last):
  File "<string>", line 293, in <module>
  File "<string>", line 51, in __init__
  File "BlocklyLogger.py", line 80, in init
  File "logging/__init__.py", line 913, in __init__
  File "logging/__init__.py", line 943, in _open
IOError: [Errno 13] Permission denied: '/Applications/BlocklyPropClient.app/BlocklyPropClient.log'
BlocklyPropClient returned -1

This is the behavior, I believe, that was fixed in commit 2848f1cd8, which I verified is in my branch's log history, but I'm now seeing the behavior again.

NOTE: I just managed to get the Mac build to properly generate a modern application bundle format, which equates to two new subfolders in the app's path(bolded below):

  • /Applications/BlocklyPropClient.app/ Contents/MacOS/ BlocklyPropClient

Maybe the log file creation is allowed inside the same folder as the actual executable? (see next post) That would be inside the .../Contents/MacOS/ folder.

Strange Console Error

This pops up when running BPClient on my mac from the terminal in the logging that then comes after:

Traceback (most recent call last):
File "logging/init.py", line 861, in emit
File "logging/init.py", line 734, in format
File "logging/init.py", line 465, in format
File "logging/init.py", line 329, in getMessage
ValueError: unsupported format character ' ' (0x20) at index 14
Logged from file SerialSocket.py, line 49
Traceback (most recent call last):
File "logging/init.py", line 861, in emit
File "logging/init.py", line 734, in format
File "logging/init.py", line 465, in format
File "logging/init.py", line 329, in getMessage
ValueError: unsupported format character ' ' (0x20) at index 7
Logged from file BlocklyServer.py, line 57
127.0.0.1 - - [21/Feb/2017:13:30:55] "GET /ports.json HTTP/1.1" 200 30 "http://demo.blockly.parallax.com/blockly/editor/blocklyc.jsp?project=486" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"

Update to use PropLoader instead of Propeller-Load to achieve Wi-Fi and faster serial loads

Update BlocklyProp Client to support the latest loader submodule.

The Propeller download protocol has been greatly enhanced to support

  • 6x faster downloads and,
  • wireless (Wi-Fi) downloads

The old Propeller-Load command-line tool must be replaced with the new PropLoader command-line tool to achieve this. The source can be found in the PropLoader Repository and the precompiled release files in the PropLoader Releases area.

Some of the command-line options (switches) and most of the output messages for PropLoader are different than for Propeller-Load; care must be taken to invoke the correct options for the intended purpose and to interpreter the responses properly. The full list is in the next post. Below are some important distinctions.

Options:

  • Listing all serial ports
-------Old--------    -------New-------
propeller-load -Q       proploader -P
  • Listing all Wi-Fi ports
-------Old--------    -------New-------
 <not applicable>       proploader -W
  • Downloading via a serial port
-------Old--------    -------New-------
      <same>                <same>
  • Downloading via a Wi-Fi port
-------Old--------    -----------------New-----------------
 <not applicable>     proploader -i <ip_address> <app_name>
  • Enter terminal mode after download
-------Old--------    -------New-------
propeller-load -t       proploader -T

NOTE: The -T option is for a Parallax Serial Terminal compatible mode which is likely the best option for BlocklyProp; however, -t may be used if the results are better with BlocklyProp's terminal.

Message Output
The PropLoader features the -c option to output a unique Message ID code for specific messages. Use the -c feature to easily determine if the download was successful or not. Parse the start of messages from PropLoader for certain codes; See Simple IDE Issue #260.

For example: message 005 means the download was successful, and 006 means it is now switching to terminal mode. Anything in the 100 range means the download failed (when the intent was to download, of course).

Display notification when the FTDI driver is unavailable

The BlocklyProp Client is able to detect the current state of the FTDI driver; whether it is installed and if it is currently loaded and running. Add a dialog to notify the user when the FTDI driver is either not installed or if the driver is not running.

Specifically, evaluate that the FTDI driver is installed during app start-up. Test the run state of the FTDI driver prior to attempting a code load activity.

KeyError: 'Darwin'

wen i try Python BlocklyServer.py I receive this KeyError: 'Darwin'

Do i did something wrong ?

MacBook-Pro:BlocklyPropClient-master podion85$ python BlocklyServer.py
Traceback (most recent call last):
File "BlocklyServer.py", line 17, in
class BlocklyServer(object):
File "BlocklyServer.py", line 54, in BlocklyServer
propellerLoad = PropellerLoad()
File "/Users/podion85/Downloads/BlocklyPropClient-master/PropellerLoad.py", line 22, in init
if not self.propeller_load_executables[platform.system()]:
KeyError: 'Darwin'
MacBook-Pro:BlocklyPropClient-master podion85$

Document BlocklyPropClient Troubleshooting Tips

The BlocklyProp system requires a web-based editor (blockly.parallax.com) plus local service on the user's computer (installed and running) in order to download code from the BlocklyProp Editor to the Propeller or debug between the Propeller and the BlocklyProp terminal.

Security software may prevent BlocklyPropClient from operating properly.
The BlocklyPropClient software provides this service and communicates with the local system's USB Driver and the user's web browser using web protocols. These two features (local system access and web communication protocols) sometimes trigger security software alerts on the computer since they are also, unfortunately, frequently abused behaviors of malicious software.

This issue is a place to collect information about these experiences and what to do about them; the final intent being that we collect them into a troubleshooting document for customers.

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.