Skip to content

Instantly share code, notes, and snippets.

View kenliu's full-sized avatar

Ken Liu kenliu

View GitHub Profile

Make it real

Ideas are cheap. Make a prototype, sketch a CLI session, draw a wireframe. Discuss around concrete examples, not hand-waving abstractions. Don't say you did something, provide a URL that proves it.

Ship it

Nothing is real until it's being used by a real user. This doesn't mean you make a prototype in the morning and blog about it in the evening. It means you find one person you believe your product will help and try to get them to use it.

Do it with style

@kenliu
kenliu / gist:605a83fb5dd38bc35e67ec9305dcd40f
Last active December 29, 2018 05:24
Generate Windows 10 exe for todoist.com
nativefier --verbose --icon favicon.ico --name Todoist --counter --single-instance --tray https://todoist.com/app#start
### Keybase proof
I hereby claim:
* I am kenliu on github.
* I am kenliu (https://keybase.io/kenliu) on keybase.
* I have a public key whose fingerprint is 8A17 8B82 11B3 4F59 82B5 3A80 78E7 E111 EF31 A1E2
To claim this, I am signing this object:
# Have you ever had to sleep() in Capybara-WebKit to wait for AJAX and/or CSS animations?
describe 'Modal' do
should 'display login errors' do
visit root_path
click_link 'My HomeMarks'
within '#login_area' do
fill_in 'email', with: '[email protected]'
fill_in 'password', with: 'test'
# Ways to execute a shell script in Ruby
# Example Script - Joseph Pecoraro
cmd = "echo 'hi'" # Sample string that can be used
# 1. Kernel#` - commonly called backticks - `cmd`
# This is like many other languages, including bash, PHP, and Perl
# Returns the result of the shell command
# Docs: http://ruby-doc.org/core/classes/Kernel.html#M001111
@kenliu
kenliu / binding-pry.sublime-snippet
Last active October 7, 2015 19:06
binding-pry.sublime-snippet
<snippet>
<content><![CDATA[
binding.pry
]]></content>
<tabTrigger>bp</tabTrigger>
<scope>source.ruby</scope>
</snippet>
@kenliu
kenliu / RecursiveBacktracker.groovy
Created February 1, 2011 04:38
Groovy port of Jamis Buck's Recursive Backtracking maze generation program
/** Groovy port of Jamis Buck's Recursive Backtracking maze generation program
see http://weblog.jamisbuck.org/2010/12/27/maze-generation-recursive-backtracking
Prints a 10x10 ASCII maze and accepts optional dimensions.
Will blow up if dimensions are too big (20x20ish)
*/
def (width, height) = [10, 10]
if (args.length >= 2) {
(width, height) = [args[0] as int, args[1] as int]