by Les Orchard [email protected]
People access the internet through a growing variety of devices, and many people use many devices. And, largely, those devices coordinate through the cloud.
// To use this script: | |
// | |
// 1. Copy this whole gist | |
// 2. Log into your account on substack.com | |
// 3. On a substack.com page, open the JavaScript console in your browser's web dev tools | |
// 4. Paste this into the console and hit return. | |
// 5. You should see substack-publications.opml has been downloaded. | |
// | |
// If you'd like to grab this code and improve it or turn it into a better tool, go right ahead! | |
// Maybe drop me a toot at @[email protected] or @[email protected] if you liked it. |
FROM bbsio/synchronet:latest | |
ARG DOSEMU_DEB_URL=http://ftp.us.debian.org/debian/pool/contrib/d/dosemu/dosemu_1.4.0.7+20130105+b028d3f-2+b1_amd64.deb | |
ARG DOSEMU_DEB=dosemu_1.4.0.7+20130105+b028d3f-2+b1_amd64.deb | |
RUN apt-get update \ | |
&& apt-get install -y rsh-redone-client locales locales-all \ | |
mtools dosfstools dos2unix ser2net socat | |
ENV USER=root LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 LANGUAGE=en_US.UTF-8 |
by Les Orchard [email protected]
People access the internet through a growing variety of devices, and many people use many devices. And, largely, those devices coordinate through the cloud.
by Les Orchard [email protected]
People access the internet through a growing variety of devices, and many people use many devices. And, largely, those devices coordinate through the cloud.
#NoEnv | |
SetBatchLines, -1 | |
; https://github.com/G33kDude/WebSocket.ahk | |
#Include ./WebSocket.ahk | |
sceneName := "Show desktop follow" | |
sourceName := "Desktop" | |
scale := 0.75 | |
sourceWidth := 1455 | |
sourceHeight := 1080 |
; Key on mouse region change | |
!^+v:: | |
ToolTip, start | |
SetTimer, CheckMouseRegion, 2000 | |
return | |
!^+b:: | |
ToolTip, stop | |
SetTimer, CheckMouseRegion, off | |
return |
"scripts": { | |
"start": "npm-run-all --parallel server watch:extension watch:lint", | |
"server": "cross-env NODE_ENV=development webpack-dev-server --config webpack.web.js", | |
"watch": "npm-run-all --parallel watch:*", | |
"watch:web": "cross-env NODE_ENV=development webpack --watch --progress --colors --config webpack.web.js", | |
"watch:extension": "cross-env NODE_ENV=development webpack --watch --progress --colors --config webpack.extension.js", | |
"watch:lint": "onchange -p -v \"src/**/*.js\" -- npm run lint", | |
"lint": "eslint --color .", | |
}, |
const unsubscribeLoader = store.subscribe(() => { | |
if (selectors.loaderDelayExpired(store.getState())) { | |
// State settled down long enough for timer to expire - stop listening. | |
unsubscribeLoader(); | |
} else { | |
// Reset the timer again. | |
startLoaderDelay(); | |
} | |
}); |
const postMessage = (type, data = {}) => | |
window.postMessage( | |
{ ...data, type, channel: `${CHANNEL_NAME}-extension` }, | |
"*" | |
); | |
const updateExtensionThemeMiddleware = ({ getState }) => next => action => { | |
const returnValue = next(action); | |
const meta = action.meta || {}; | |
if (!meta.skipAddon && themeChangeActions.includes(action.type)) { |
const messageListener = port => message => { | |
let theme; | |
switch (message.type) { | |
case "fetchTheme": | |
log("fetchTheme"); | |
fetchTheme().then(({ theme: currentTheme }) => | |
port.postMessage({ type: "fetchedTheme", theme: currentTheme }) | |
); | |
break; | |
case "setTheme": |