Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

View myobie's full-sized avatar

Nathan myobie

View GitHub Profile
@myobie
myobie / task.ts
Created July 30, 2021 10:10
Very simple deno script to test that deno works
console.log('Fetching...')
const res = await fetch('https://example.com')
const body = new Uint8Array(await res.arrayBuffer())
console.log('---')
await Deno.stdout.write(body)
console.log('---')
console.log('Done.')
@myobie
myobie / server.ts
Created July 29, 2021 18:25
Very simple deno webserver mostly exactly from the example in the docs at https://deno.land/manual/examples/http_server
// Start listening on port 8080 of localhost.
const server = Deno.listen({ port: 8080 })
console.log('HTTP webserver running...')
const headers = Object.freeze({
'Content-type': 'plain/text'
})
for await (const conn of server) {
// deno-lint-ignore no-extra-semi
@myobie
myobie / params.ex
Created May 26, 2021 18:32
I'm not saying this is a good idea, but I'm not not saying it
defmodule POC.Params do
import Ecto.Changeset
@spec permit(map, map) :: map
def permit(input, types) do
{types, nested} = Enum.reduce(types, {%{}, %{}}, &process_types/2)
{%{}, types}
|> cast(input, Map.keys(types))
|> permit_nested(nested)
@myobie
myobie / router.ex
Last active April 15, 2021 09:48
A pipeline for proxying large file uploads
defmodule AppWeb.Router do
use AppWeb, :router
pipeline :browser do
plug Plug.Parsers,
parsers: [:urlencoded, :multipart, :json],
pass: ["*/*"],
json_decoder: Phoenix.json_library()
plug Plug.MethodOverride
@myobie
myobie / poller.ex
Last active April 8, 2021 11:42
GenServer for longpoll requests with backoff in case of errors
defmodule Example.Poller do
use GenServer
@backoff [
50,
100,
150,
250,
400,
650
import Foundation
public struct Identifier:
Codable, CustomStringConvertible, ExpressibleByStringLiteral,
Hashable, RawRepresentable
{
public let rawValue: [UInt8]
public let dataValue: Data
private let stringValue: String

Previewing encrypted content on the web

This would be an extension to The Open Graph protocol.

As more and more people are using privacy preserving tools for sharing content on the web, more content embedded into web pages will be end-to-end encrypted and decrypted in-browser by javascript or wasm code.

A current problem with previews of web URLs is they require the server to know the exact contents of the URL and be able to provide a preview as a resource either inside a header or as a URL to an image. If the primary content at the URL were encrypted, no preview could be provided directly by the server.

What the server could provide is an encrypted preview which was encrypted with a symmetric key by the original creator using one of the standard algorithms provided by webcrypto. Then the browser/client could find the decryption key in the URL fragment (or prompt the user for it) to then facilitate the decryption of the preview content safely on device. This would provide a standard

@myobie
myobie / example-throws-in-callback-that-works-in-playgrounds.swift
Created November 29, 2017 02:36
An example of swift async callbacks that either throw or return a result
import Foundation
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
// either throws an Error or returns a String result
typealias ThrowsCallback = () throws -> (String)
enum AsyncError: Error {
case kaboom
}
const worker = new Worker('/tests.js')
worker.onmessage = e => {
if (e.data && e.data._command) {
if (e.data._command === 'console') {
const type = e.data.type || 'log'
const msg = e.data.msg || '<empty>'
switch (type) {
case 'error':
@myobie
myobie / drain.js
Last active January 25, 2021 15:05
Drain an array of potential promises with a max concurrency factor
/** @typedef {() => Promise<unknown>} Task */
/**
* @param {Task[]} pending
* @param {number} max
* @returns {Promise<unknown[]>}
*/
export function drain (pending, max) {
return new Promise((resolve, reject) => {
let nextIndex = 0