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.
| #!/usr/bin/env python3 | |
| """ | |
| CloudFront to Loki Log Processor | |
| This script downloads new CloudFront logs from S3 and pushes them to Loki. | |
| It tracks processed files to avoid duplicates and filters for 404 responses. | |
| """ | |
| import boto3 | |
| import gzip |
| // 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 @lmorchard@hackers.town 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)) { |