Don't try to write complicated code on purpose to show how smart you are.
"Clean Code" by Uncle Bob
| server { | |
| listen 80; | |
| server_name example.com; | |
| location / { | |
| proxy_pass http://APP_PRIVATE_IP_ADDRESS:8080; | |
| proxy_http_version 1.1; | |
| proxy_set_header Upgrade $http_upgrade; | |
| proxy_set_header Connection 'upgrade'; |
| 'use strict'; | |
| var mysqlBackup = require('./mysql-backup'); | |
| var schedule = require('node-schedule'); | |
| schedule.scheduleJob({ hour: 22, minute: 0 }, mysqlBackup); |
| #!/bin/sh -x | |
| # ================================== | |
| # iptables default configuration script | |
| # | |
| # - this locks down our servers port access | |
| # ================================== | |
| # install fail2ban | |
| sudo apt-get update |
| 'use strict'; | |
| var watchify = require('watchify'); | |
| var browserify = require('browserify'); | |
| var gulp = require('gulp'); | |
| var source = require('vinyl-source-stream'); | |
| var buffer = require('vinyl-buffer'); | |
| var gutil = require('gulp-util'); | |
| var sourcemaps = require('gulp-sourcemaps'); | |
| var lodash = require('lodash'); | |
| var reactify = require('reactify'); |
| 'use strict'; | |
| import _ from 'lodash'; | |
| export default function api(model) { | |
| return { | |
| all(req, res) { | |
| let populate = req.query.populate ? req.query.populate : ''; | |
| let find = req.query.find ? JSON.parse(req.query.find) : {}; | |
| let sort = req.query.order ? JSON.parse(req.query.order) : {}; |
| function observable(value) { | |
| let listeners = []; | |
| let notify = (newValue) => listeners.forEach((listener) => listener(newValue)); | |
| function accessor(newValue) { | |
| if(arguments.length && newValue !== value) { | |
| value = newValue; | |
| notify(newValue); | |
| } |
You don't really need a framework or fancy cutting-edge JavaScript features to do two-way data binding. Let's start basic - first and foremost, you need a way to tell when data changes. Traditionally, this is done via an Observer pattern, but a full-blown implementation of that is a little clunky for nice, lightweight JavaScript. So, if native getters/setters are out, the only mechanism we have are accessors:
var n = 5;
function getN() { return n; }
function setN(newN) { n = newN; }
console.log(getN()); // 5
setN(10);
| var fs = require('fs'); | |
| var exec = require('child_process').exec; | |
| var Promise = require('promise'); | |
| var folder = __dirname + '/admin-react/experiences/'; | |
| fs | |
| .readdir(folder, function(err, files) { | |
| files.map(function(file) { |
| '.source.js': | |
| 'React component': | |
| 'prefix': 'rc' | |
| 'body': """ | |
| 'use strict'; | |
| import React from 'React'; | |
| export default React.createClass({ | |
| render() { | |
| return ( |