- Good developers spend time on them
- A good workflow equals better output
- The best workflow could be better
Zach Fogg
@zfogg
I think we’re seeing the emphasis shift from valuing trivia to valuing tools.
As an engineer, there is a short list of tools that you must be rabid about. Rabid. Foaming at the mouth crazy.
Text editor
Terminal
This is where you will spend most of time.
You should know your text editor best of all.
Your text editor should be
customizable
extendable
informative
a ' magic wand '
on a scale of ed
to vi
Notepad.exe
A stick
Notepad++
Harry Potter's broken wand
Sublime Text 2
Your standard magic wand
Emacs
Merlin's wand
Vim
Gandalf the White's staff, fully automatic and turbocharged
Keyboard shortcuts are a GoodThing™
Host gh HostName github.com User git IdentityFile ~/.ssh/id_rsa
$ git clone gh:zfogg/zfogg Cloning into 'zfogg'...
$ alias please="sudo" $ touch /newfile touch: cannot touch ‘/newfile’: Permission denied $ please touch /newfile $ $ alias ls="ls --color=auto" # You can't avoid typos $ alias sl="ls" # Upgrade your `cat`! Syntax highlighting for any language $ alias cat="pygmentize -O style=monokai -f console256 -g" # Grab the IP addresses of a domain $ alias ipaddr="dig +short myip.opendns.com @resolver1.opendns.com" # Instant HTTP server in the current directory $ alias server="python -m SimpleHTTPServer"
$ sudo !!
$ z somewhere
$ sudo pacman -S typo-package
$ ^typo^correct^
or
$ !!:s/typo/correct
$ wget -O - http://placekitten.com/$[500 + RANDOM % 500]
* { box-sizing: border-box }
#header-bottom-left .tabmenu li a { direction: rtl; unicode-bidi: bidi-override; font-family: "Webdings";} #header-bottom-left .tabmenu li { height: 28px; border: 0px; margin: 0px 5px; display: inline-block; } #header-bottom-left .tabmenu li a {width:70px;color:#98C4F0;background:none;padding: 5px 2px!important;} #header-bottom-left .tabmenu li a:hover {color:#002B4D;} #header-bottom-left .tabmenu li.selected a {color:#002B4D;border:none!important;} #header-bottom-left .tabmenu li.selected a:before {content:"XD"} #header-bottom-left .tabmenu ul { width: 425px !important; height: 36px !important; z-index: -1 } #header-bottom-left .tabmenu li { list-style-type: none; display: inline-block !important; margin: 0px; padding: 0px } #header-bottom-left .tabmenu li a { color: #5F4444 !important; font: normal 14px/34px "Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif; }
.center-horizontal { margin: 0 auto; // :) } .center-vertical { margin: auto 0; // :( }
!(new Boolean(false)) === !(new Boolean(true)); // true 1 == false; // true (function () { return { haha: "ha!" }; } )(); // undefined var a = {}; a.b === undefined; // true undefined = 42; a.b === undefined; // false
(╯°□°)╯︵ ┻━┻
var
is stupid==
is broken1 == true # false foo?.bar?() # `foo` and `bar` may not exist [k,v] for k,v of { x:1, y:2, z:3 } # [["x", 1], ["y", 2], ["z", 3]] times_two = (xs) -> 2*x for x in xs doubles = times_two [1..5] # [2, 4, 6, 8, 10] 1 < doubles[0] < 3 # true [x, y] = [1, 2] # x = 1; y = 2 {pow} = Math # pow = Math.pow good_enough = "#{ 22 / 7 } is a decent approximation of π" # string interpolation StuffHandler = (stuff) -> @stuff = stuff # //this.stuff = stuff; $("#stuff").click (event) => @stuff.doSomething event
Array::head = -> @[0] Array::tail = -> @[1..] map = (f, xs) -> f x for x in xs zip = (xs, ys) -> [xs[i], ys[i]] for i in [0...Math.min xs.length, ys.length] fold1 = (f, xs) -> fold f, xs.tail(), xs.head() fold = (f, xs, acc) -> if xs.length > 0 fold f, xs.tail(), (f xs.head(), acc) else acc
class Mascot constructor: (@icon) -> @icon or= "img/default.png" draw: (x=0, y=0) -> drawPNG @icon, x, y class Roboto extends Mascot constructor: -> super "img/roboto.jpg" draw: (x=0, y=0) -> drawJPG @icon, x, y
partial = (f, args1...) -> (args2...) -> f.apply @, args1.concat args2 partial$ = (f, args) -> partial.apply @, [f].concat args sum = do -> partial fold1, ((x,y) -> x+y) product = do -> partial fold1, ((x,y) -> x*y) factorial = (n) -> product [1..n]
curry = (n, f, args...) -> curry$ (n - args.length), (partial$ f, args) curry$ = (n, f, args...) -> if n > args.length partial curry$, (n - args.length), (partial$ f, args) else f.apply @, args Function::curry = (args...) -> curry.apply @, [@length, @].concat args Math.pow.curry()(2)(5) # 32 Math.pow.curry()(2, 5) # 32 Math.pow.curry(2, 5) == Math.pow.curry(2)(5) # 32 multiply = (x, y) -> x*y times_two = (xs) -> xs.map multiply.curry(2)
is not your only option
AltJS - list of languages that compile to JS
Don't like CS? Need more language features?
Choose another altjs language!
You should know how to:
$ git add -p
$ git stash
$ git rebase -i
$ git merge
oh-my-zsh plugins git
and git-extras
$ alias | grep 'git'
$ git whatchanged -p --abbrev-commit --pretty=medium
$ git delete-submodule
# Doing it yourself is messy.$ git delete-branch
# Local and remote$ git undo
# Undo last commit.Scaffolding for new projects.
Build from source; the equivilant of a Makefile
.
Frontend dependency manager.
Chrome and Firefox:
Almost better at debugging than your fancy IDE