Skip to content

Instantly share code, notes, and snippets.

View seanmtracey's full-sized avatar

Sean M. Tracey seanmtracey

View GitHub Profile

Hard

 Number( input.toString().split('').sort( (a, b) => { return a < b ? 1 : -1 } ).join('') )

Intermediate

const lower = 'abcdefghijklmnopqrstuvwxyz'.split('');
const upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('')

Web components to hook up client-side applications to Node-RED nodes in a standardised way.

Rationale

Node-RED is incredibly good at letting people prototype their ideas without a great deal of programming knowledge. However, the dashboard, whilst great connecting service A -> C via. B, it doesn't lend itself especially well to being hooked up to a custom application running on said server in quite the same way.

I believe Web Components could allow for more web apps to be built and integrated with Node-RED nodes as seemlessly as creating a flow is now, but with a greater ability to customise that JS/CSS/HTML afford up-and-coming developers.

How would this work?

  1. A developer would drop a node onto the canvas, just as they always have (say, for a camera), and give it a unique name.
  2. The developer would include a
Array.from(table.querySelectorAll('tr')).map(tr => {tds = Array.from(tr.querySelectorAll('td') ); return `${tds[0].querySelector('input').value}=${tds[1].querySelector('textarea').value}` }).join('\n')
@seanmtracey
seanmtracey / Extract_and_analyse.json
Created November 20, 2017 10:50
A Node-red flow for extracting keyframes from videos and analysing them with Watson Visual Recogntion
[{"id":"146f4acc.4733c5","type":"function","z":"ceee673f.122fb8","name":"Determine File Path","func":"if (msg.req.files) {\n var files = Object.keys(msg.req.files);\n msg.payload.filePath = msg.req.files[files[0]][0].path; \n}\nreturn msg;","outputs":1,"noerr":0,"x":278.5,"y":452,"wires":[["c4cd6b26.2acfc8"]]},{"id":"3bf669a6.9b88e6","type":"httpInMultipart","z":"ceee673f.122fb8","name":"","url":"/analyse","method":"post","fields":"[ { \"name\": \"video\", \"maxCount\" : 1 } ]","swaggerDoc":"","x":145,"y":387,"wires":[["146f4acc.4733c5"]]},{"id":"e1f10989.eab7c8","type":"visual-recognition-v3","z":"ceee673f.122fb8","name":"Analyse frame","apikey":"50a86834a2d8947a442a1ba81e9dde323f074786","image-feature":"classifyImage","lang":"en","x":628,"y":652,"wires":[["1a442f8b.94618","5f0f5910.f08c08"]]},{"id":"5f0f5910.f08c08","type":"function","z":"ceee673f.122fb8","name":"Make Sense","func":"\nconst jobData = flow.get(msg.analysisUUID);\nconst frameData = {\n time : msg.keyframeTimeoffset,\n result :
@seanmtracey
seanmtracey / index.html
Last active March 4, 2017 10:33
Paint with light in less than 1024 bytes.
<!DOCTYPE html>
<html>
<head>
<style>
html, body, canvas{width: 100%; height: 100%;margin:0;padding:0;}
</style>
</head>
<body>
@seanmtracey
seanmtracey / PGZScreenshots.py
Last active July 4, 2016 08:31
A snippet that enables Pygame Zero games to take screenshots during gameplay and save them to a 'screenshots' directory in the same path.
from pygame import image as PGI
import time
def take_screenshot(Surface):
outputDir = './screenshots/'
if not os.path.exists(outputDir):
os.makedirs(outputDir)
PGI.save(Surface, outputDir + str( int(time.time()) ) + '.png' )
def on_key_down(key):
ffmpeg -f avfoundation -i "1:0" -s 1920x1200 -r 15 -c:v libx264 -preset fast -pix_fmt yuv420p -s 1280x800 -threads 0 -f flv "rtmp://live-lhr.twitch.tv/app/[YOUR STREAM API KEY]"
ffmpeg -f gdigrab -framerate 30 -i desktop -s 2880x1800 -r 15 -offset_x 10 -offset_y 20 -video_size 1280x800 -show_region 1 -c:v libx264 -preset fast -pix_fmt yuv420p -threads 0 -f flv "rtmp://live-lhr.twitch.tv/app/[YOUR TWITCH STREAM KEY]"
#Found at http://apple.stackexchange.com/questions/57412/how-can-i-trigger-a-notification-center-notification-from-an-applescript-or-shel
osascript -e 'display notification "Lorem ipsum dolor sit amet" with title "Title"'
@seanmtracey
seanmtracey / ginn.js
Last active January 3, 2016 21:19
A Javascript library for making your webpages unnecessarily tall.
var ginn = (function(){
document.body.style.height = document.body.scrollHeight + 100000 + "px";
})();