(Full description and list of commands at - https://npmjs.org/doc/index.html)
Make sure to export your local $PATH and prepand relative ./node_modules/.bin/:
| <!doctype html> | |
| <title>Site Maintenance</title> | |
| <style> | |
| body { text-align: center; padding: 150px; } | |
| h1 { font-size: 50px; } | |
| body { font: 20px Helvetica, sans-serif; color: #333; } | |
| article { display: block; text-align: left; width: 650px; margin: 0 auto; } | |
| a { color: #dc8100; text-decoration: none; } | |
| a:hover { color: #333; text-decoration: none; } | |
| </style> |
(Full description and list of commands at - https://npmjs.org/doc/index.html)
Make sure to export your local $PATH and prepand relative ./node_modules/.bin/:
| # delete local tag '12345' | |
| git tag -d 12345 | |
| # delete remote tag '12345' (eg, GitHub version too) | |
| git push origin :refs/tags/12345 | |
| # alternative approach | |
| git push --delete origin tagName | |
| git tag -d tagName |
| // === Arrays | |
| var [a, b] = [1, 2]; | |
| console.log(a, b); | |
| //=> 1 2 | |
| // Use from functions, only select from pattern | |
| var foo = () => [1, 2, 3]; |
| // give it a name so it reuses the same window | |
| var win = window.open(null, "redux-devtools", "menubar=no,location=no,resizable=yes,scrollbars=no,status=no"); | |
| // reload in case it's reusing the same window with the old content | |
| win.location.reload(); | |
| // wait a little bit for it to reload, then render | |
| setTimeout(function() { | |
| React.render( | |
| <DebugPanel top right bottom left > |
| const immutableJSFormatter = { | |
| header(x) { | |
| if (x && x.toJS) return ['span', {}, x.toString()]; | |
| return null; | |
| }, | |
| hasBody(x) { | |
| return x && x.toJS; | |
| }, | |
| body(x) { | |
| return ['span', {}, JSON.stringify(x.toJS(), null, 2)]; |
| /** @flow */ | |
| import React, {Component, PropTypes} from 'react'; | |
| import Popout from 'react-popout'; | |
| import { | |
| DevTools, | |
| DebugPanel, | |
| LogMonitor | |
| } from 'redux-devtools/lib/react'; |
Prerequisites : the letsencrypt CLI tool
This method allows your to generate and renew your Lets Encrypt certificates with 1 command. This is easily automatable to renew each 60 days, as advised.
You need nginx to answer on port 80 on all the domains you want a certificate for. Then you need to serve the challenge used by letsencrypt on /.well-known/acme-challenge.
Then we invoke the letsencrypt command, telling the tool to write the challenge files in the directory we used as a root in the nginx configuration.
I redirect all HTTP requests on HTTPS, so my nginx config looks like :
server {
| import VerEx from 'verbal-expressions'; | |
| const eventualCallIs = name => { | |
| // FOR PERF | |
| const boundCheck = node => | |
| node.type === 'Identifier' && node.name === name || | |
| node.type === 'MemberExpression' && boundCheck(node.object) || | |
| node.type === 'CallExpression' && boundCheck(node.callee) | |
| return boundCheck; |