⚠️ Note 2023-01-21
Some things have changed since I originally wrote this in 2016. I have updated a few minor details, and the advice is still broadly the same, but there are some new Cloudflare features you can (and should) take advantage of. In particular, pay attention to Trevor Stevens' comment here from 22 January 2022, and Matt Stenson's useful caching advice. In addition, Backblaze, with whom Cloudflare are a Bandwidth Alliance partner, have published their own guide detailing how to use Cloudflare's Web Workers to cache content from B2 private buckets. That is worth reading,
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// <button> reset | |
// | |
// 1. Remove default browser appearance for buttons. | |
// 2. Remove margins. | |
// 3. Remove borders for IE. | |
// 4. Normalize font and color not inherited by `button`. | |
// 5. Address `overflow` in IE | |
// 6. Normalize cursor style |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var $activeEpisodes = $(".episodecell"); | |
var episodesReversedElements = $activeEpisodes.toArray().reverse(); | |
var lastPodcastName; | |
episodesReversedElements.forEach(function (elem) { | |
var $activeEpisode = $(elem); | |
var podcastName = $activeEpisode.find(".titlestack div:first-child").text(); | |
var podcastImgSrc = $activeEpisode.find(".art").attr("src"); | |
if (podcastName !== lastPodcastName) { |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function (context, trackingId, options) { | |
const history = context.history; | |
const doc = document; | |
const nav = navigator || {}; | |
const storage = localStorage; | |
const encode = encodeURIComponent; | |
const pushState = history.pushState; | |
const typeException = 'exception'; | |
const generateId = () => Math.random().toString(36); | |
const getId = () => { |
This step by step tutorial will show you how to set up a Node.js server with MongoDB to DigitalOcean using PM2, NGINX as reverse proxy and a SSL from LetsEncrypt. We will also add a custom domain name.
- Download PuTTY & PuTTYgen
- Download WinSCP
- Have your application on a GitHub repo.
This document is an attempt to pin down all the things you don't think about when quoting for a project, and hopefully provide a starting point for some kind of framework to make quoting, working and delivering small-medium jobs more predictable and less stressful.
OlderNewer