- Install
typescript
,tslib
, andsvelte-check
for dev mode
pnpm i -D typescript tslib svelte-check
- Add a
tsconfig.json
Deploying a Phoenix app to Fly.io is a breeze...is what everyone kept telling me. In fairness, I imagine the process would have been breezier had I just used postgres, but all the sqlite and litestream talk has been far too intriguing to ignore. "Wait", you say. "It is just a flat file. How much harder can it be?"
It is easy to make something harder than it should be. It is hard to take something complex and make it truly simple. flyctl launch
does an amazing job at providing a simple interface to the utterly complex task of generating deployment resources, especially now that we are living in a containerd
(erm, firecracker) world.
This gist is for anyone who, like me, thinks they know better than to read all of the documentation and therefore necessari
javascript: Promise.all([import('https://unpkg.com/[email protected]?module'), import('https://unpkg.com/@tehshrike/[email protected]'), ]).then(async ([{ | |
default: Turndown | |
}, { | |
default: Readability | |
}]) => { | |
/* Optional vault name */ | |
const vault = ""; | |
/* Optional folder name such as "Clippings/" */ |
I had a bit of trouble trying to configure permissions to upload files from my Google Compute Engine instance to my Google Cloud Storage bucket. The process isn't as intuitive as you think. There are a few permissions issues that need to be configured before this can happen. Here are the steps I took to get things working.
Let's say you want to upload yourfile.txt
to a GCS bucket from your virtual machine.
You can use the gsutil
command line tool that comes installed on all GCE instances.
If you've never used the gcloud
or gsutil
command line tools on this machine before, you will need to initialize them with a service account.
#!/bin/bash | |
set -e | |
CONTENTS=$(tesseract -c language_model_penalty_non_dict_word=0.8 --tessdata-dir /usr/local/share/tessdata/ "$1" stdout -l eng | xml esc) | |
hex=$((cat <<EOF | |
<?xml version="1.0" encoding="UTF-8"?> | |
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |
<plist version="1.0"> |
on run {input, parameters} | |
set delimitedList to paragraphs of (input as string) | |
tell application "Things3" | |
repeat with currentTodo in reverse of delimitedList | |
set newToDo to make new to do with properties {name:currentTodo} at beginning of list "Inbox" | |
end repeat | |
end tell | |
end run |
#!/bin/bash | |
#---------------------------------------------------- | |
# | |
# Copyright (C) 2017 Vlad Didenko | |
# | |
# This Source Code Form is subject to the terms | |
# of the Mozilla Public License, v. 2.0. If a copy | |
# of the MPL was not distributed with this file, | |
# You can obtain one at https://mozilla.org/MPL/2.0/ |
FROM ubuntu:16.04 | |
RUN apt-get update --yes && apt-get upgrade --yes | |
RUN apt-get update --yes && apt-get upgrade --yes | |
RUN apt-get -y install curl | |
RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash | |
RUN apt-get -y install ffmpeg zlib1g-dev automake autoconf git \ |
## Pre-requisite: You have to know your last commit message from your deleted branch. | |
git reflog | |
# Search for message in the list | |
# a901eda HEAD@{18}: commit: <last commit message> | |
# Now you have two options, either checkout revision or HEAD | |
git checkout a901eda | |
# Or | |
git checkout HEAD@{18} |
Why would you want to do this? Because you often don't need more. It's nice to not have to think about your "router" as this big special thing.
Instead, with this approch, your app's current pathname
is just another piece of state, just like anything else.
This also means that when doing server-side rendering of a redux app, you can just do:
var app = require('your/redux/app')
var React = require('react')