This gist's comment stream is a collection of webdev apps for OS X. Feel free to add links to apps you like, just make sure you add some context to what it does — either from the creator's website or your own thoughts.
— Erik
| # Convert any YouTube video into an audio file you can listen to on the go, using: | |
| # http://rg3.github.com/youtube-dl/ | |
| { ~ } > brew install ffmpeg | |
| { ~ } > wget https://raw.github.com/rg3/youtube-dl/2012.02.27/youtube-dl | |
| { ~ } > chmod u+x youtube-dl | |
| # Pick which video format you want to download.. (use any YT video link) | |
| { ~ } > ./youtube-dl -s -F http://www.youtube.com/watch?v=vT1KmTQ-1Os |
| // polyfill window.getMatchedCSSRules() in FireFox 6+ | |
| if ( typeof window.getMatchedCSSRules !== 'function' ) { | |
| var ELEMENT_RE = /[\w-]+/g, | |
| ID_RE = /#[\w-]+/g, | |
| CLASS_RE = /\.[\w-]+/g, | |
| ATTR_RE = /\[[^\]]+\]/g, | |
| // :not() pseudo-class does not add to specificity, but its content does as if it was outside it | |
| PSEUDO_CLASSES_RE = /\:(?!not)[\w-]+(\(.*\))?/g, | |
| PSEUDO_ELEMENTS_RE = /\:\:?(after|before|first-letter|first-line|selection)/g; | |
| // convert an array-like object to array |
| git symbolic-ref HEAD refs/heads/empty | |
| touch .gitignore | |
| git add .gitignore | |
| git commit -m 'Initial headless branch commit' |
| var MultiGetSet = function(opt){ | |
| var getType = function(o) { | |
| return ({}).toString.call(o).match(/\s([a-zA-Z]+)/)[1].toLowerCase() | |
| }; | |
| if(!opt.public || !opt.private) | |
| return opt.public; | |
| if(opt.handler && opt.handler.init) |
| // | |
| // injection-proxy.js | |
| // Emil Stenqvist <emsten@gmail.com> | |
| // | |
| // Free for all! | |
| // | |
| // A content-replacing proxy in node.js. | |
| // | |
| // I made this for debugging JavaScript on a live website. | |
| // |
| // node: | |
| var moment = require('moment'); | |
| moment().add('days', 2).fromNow(); | |
| // 'in 2 days' | |
| moment().subtract('days', 2).fromNow(); | |
| // '2 days ago' | |
| moment('November 1977').fromNow() |
| var fs = require("fs") | |
| var ssl_options = { | |
| key: fs.readFileSync('privatekey.pem'), | |
| cert: fs.readFileSync('certificate.pem') | |
| }; | |
| var port = process.env.PORT || 3000; | |
| var express = require('express'); | |
| var ejs = require('ejs'); | |
| var passport = require('passport') |
| // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ | |
| // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating | |
| // requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel | |
| // MIT license | |
| (function() { | |
| var lastTime = 0; | |
| var vendors = ['ms', 'moz', 'webkit', 'o']; |
Instead of buying two door remotes, I bought one and control it with my iPhone.
First, I stole nearly everything from MyDoorOpener.com. Their version uses parts I could not find and requires a $6 iPhone app. Let's improve on that.
Almost everything can be found at RadioShack.