Skip to content

Instantly share code, notes, and snippets.

View feifanzhou's full-sized avatar

Feifan Zhou feifanzhou

View GitHub Profile
// a is a Nodelist
// like document.getElementsByClassName('class')
[].forEach.call(a, function (e) { console.log(e.children[0].innerHTML) });
@feifanzhou
feifanzhou / vendor prefix mixin
Last active August 29, 2015 14:01
Vendor prefix SASS mixin
@mixin vendor-prefix($name, $argument) {
#{$name}: #{ $argument };
-webkit-#{$name}: #{ $argument };
-ms-#{$name}: #{ $argument };
-moz-#{$name}: #{ $argument };
-o-#{$name}: #{ $argument };
}
@feifanzhou
feifanzhou / layout-map
Created June 1, 2014 16:19
Show layout and structure of webpage: http://qr.ae/Kfxs6
* { background-color: rgba(255,0,0,.2); }
* * { background-color: rgba(0,255,0,.2); }
* * * { background-color: rgba(0,0,255,.2); }
* * * * { background-color: rgba(255,0,255,.2); }
* * * * * { background-color: rgba(0,255,255,.2); }
* * * * * * { background-color: rgba(255,255,0,.2); }
@feifanzhou
feifanzhou / ControllerBase.php
Last active August 29, 2015 14:02
RESTful routing with PHP
<?php
$bn = basename($_SERVER['SCRIPT_NAME'], '.php');
$p = explode('_', $bn);
$model_name = substr($p[0], 0, -1);
$model_path = "../models/$model_name.php";
include_once($model_path);
include_once('../../config/routes.php');
$controller_name = $p[0];
function loadRESTfulView($controllerName, $action, $_options) {
@feifanzhou
feifanzhou / lib-spork-test_framework-rspec.rb
Created June 14, 2014 23:30
Working Spork config for RSpec 3
require 'rspec/core/version'
class Spork::TestFramework::RSpec < Spork::TestFramework
DEFAULT_PORT = 8989
HELPER_FILE = File.join(Dir.pwd, "spec/spec_helper.rb")
def run_tests(argv, stderr, stdout)
if rspec1?
::Spec::Runner::CommandLine.run(
::Spec::Runner::OptionParser.parse(argv, stderr, stdout)
@feifanzhou
feifanzhou / header_cookies.rb
Created August 1, 2014 17:19
Rails — Parse cookies from request header
module HeaderCookies
def header_cookies(req=nil)
req ||= request
cookie_dough = request.headers['Cookie'].split '; '
Hash[cookie_dough.map do |c|
pieces = c.split '='
[pieces[0].to_sym, pieces[1]]
end]
end
end
@feifanzhou
feifanzhou / uploadImage.js
Last active August 29, 2015 14:06
AJAX Upload Image
var uploadImage = function(form, responseHandler, setup, teardown) {
var eventHandler, iframe, _this;
iframe = document.createElement('iframe');
iframe.setAttribute('name', 'uploadTarget');
iframe.setAttribute('style', 'display: none');
document.body.appendChild(iframe);
_this = this;
eventHandler = function() {
var content;
if (iframe.detachEvent) {
@feifanzhou
feifanzhou / post_js_errors.js
Created November 6, 2014 23:52
Post JS errors to server
window.onerror = function(msg, url, line) {
message = 'Javascript error: *' + msg + '* (' + url + ':' + line + ') for session: *' + getCookie('session_code') + '*'
$.post('/alerts', {
message: message
},
function() { console.log('Successfully reported error') }
)
}
@feifanzhou
feifanzhou / alerts_controller.rb
Created November 6, 2014 23:55
Send JS errors to Slack
class AlertsController < ApplicationController
include SlackHelper
def create
message = params[:message] || ''
slack_post_alert message
render nothing: true and return
end
end
module SlackHelper
@feifanzhou
feifanzhou / about_tunetap.txt
Last active August 29, 2015 14:12
About Tunetap
Tunetap helps musicians play more shows by crowdfunding ticket sales to measure fan demand and cover the costs of putting on the show. It's pretty difficult for aspiring artists to achieve any sort of success, and although the industry has shifted towards live events, organizing them is a difficult process, and potential losses from poor turnouts provide a high barrier to entry. Tunetap is a site for growing artists to set up potential events and tours, and incentive their fans to preorder tickets to reach a break-even point. On top of that, we're layering insights into the way fans are behaving across the industry so we can offer every artist specific suggestions for marketing approaches and potential show locations – information that's currently only available to the biggest players in the industry.
To me, Tunetap is a practical embodiment of a life-long personal belief: well-designed technology can ease and eliminate friction in the things we do, freeing us to do great things. I'm excited to be working w