diff --git a/bash.md b/bash.md
index 4a8a69ce1..27d6937e4 100644
--- a/bash.md
+++ b/bash.md
@@ -33,6 +33,14 @@ title: Bash
echo $i
end
+### Reading input
+
+ echo -n "Proceed? [y/n]: "
+ read ans
+ echo $ans
+
+ read -n 1 ans # Just one character
+
Functions
---------
diff --git a/css.md b/css.md
new file mode 100644
index 000000000..dc8ef8ade
--- /dev/null
+++ b/css.md
@@ -0,0 +1,30 @@
+title: CSS
+---
+
+Webkit extensions
+-----------------
+
+### Font smoothing
+
+ /* maxvoltar.com/archive/-webkit-font-smoothing */
+ html { -webkit-font-smoothing: antialiased; }
+
+### Heading kerning pairs and ligature
+
+ h1, h2, h3 { text-rendering: optimizeLegibility; }
+
+### Native-like iOS scrolling
+
+ -webkit-overflow-scrolling: touch;
+ overflow-y: auto;
+
+### Gradient text
+
+ background: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#333));
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+
+### Text stroke
+
+ /* http://www.webkit.org/blog/85/introducing-text-stroke/ */
+ -webkit-text-stroke: 3px black;
diff --git a/fitness.md b/fitness.md
index e2b3e0467..01aa5206e 100644
--- a/fitness.md
+++ b/fitness.md
@@ -20,3 +20,27 @@ http://www.bodybuilding.com/fun/mike1.htm
* 5 x 100% (work set)
http://corw.in/warmup/
+
+### Bench
+
+Jennifer Thompson video: http://www.youtube.com/watch?v=34XRmd3a8_0
+
+### Metabolism
+
+* At rest, 33% of the body's energy comes from carbohydrates, or glycogen,
+ stored within the muscles and liver. 66% comes from fat.
+
+* During aerobic work, 50-60% of the energy comes from fats
+
+* Primarily carbohydrates are used during the first several minutes of exercise
+
+* For an average fit person, it takes 20 to 30 minutes of continuous aerobic
+ activity to burn 50% fat and 50% carbohydrate
+
+* There is approximately a 7 fold increase of fat mobilization after 1 hour of
+ exercise
+
+* Low intense exercise (<30% VO2 max) relies primarily on fat whereas high
+ intense exercise (>70% VO2 max) primarily utilized carbohydrate.
+
+http://www.exrx.net/Nutrition/Substrates.html
diff --git a/homebrew.md b/homebrew.md
new file mode 100644
index 000000000..fbc140487
--- /dev/null
+++ b/homebrew.md
@@ -0,0 +1,26 @@
+class Tweetx < Formula
+ homepage 'http://code.google.com/p/tweetx/'
+ url 'http://tweetx.googlecode.com/files/tweetx-0.1.tar.gz'
+ version '0.1'
+ sha1 'e676f895ac5df1574f6fd4086ee57b9bf8d71e20'
+
+ head 'https://github.com/b4winckler/macvim.git', :branch => 'master'
+
+ def options
+ [
+ ["--custom-icons", "Try to generate custom document icons."],
+ ]
+ end
+
+ depends_on 'cscope' if ARGV.include? '--with-cscope'
+
+ def install
+ system "./configure",
+ "--prefix=#{prefix}",
+ "--libdir=#{lib}"
+ system "make install"
+
+ man1.install 'manpage.1'
+ bin.install "foo"
+ end
+end
diff --git a/ios.md b/ios.md
index a992e74fe..f06fbf6d4 100644
--- a/ios.md
+++ b/ios.md
@@ -2,9 +2,13 @@ Multiple Exchange accounts:
scp root@iphone.local:/private/var/mobile/Library/Preferences/com.apple.accountsettings.plist .
+Winterboard themes:
+
+ /Library/Themes
+
Copy photos:
- scp -r root@iphone.local:/User/Media/DCIM/100APPLE ./photos
+ rsync -v -r root@iphone.local:/User/Media/DCIM/100APPLE ./photos
Ringtone conversion using ffmpeg:
diff --git a/jasmine.md b/jasmine.md
new file mode 100644
index 000000000..050b39845
--- /dev/null
+++ b/jasmine.md
@@ -0,0 +1,133 @@
+title: Jasmine
+---
+
+[Jasmine](http://pivotal.github.com/jasmine/).
+
+ describe("A suite", function() {
+ it("contains spec with an expectation", function() {
+ expect(true).toBe(true);
+ });
+ });
+
+### Expectations
+
+ expect(true).toBe(true)
+ expect(true).not.toBe(true)
+
+ expect(a).toEqual(bar)
+
+ expect(message).toMatch(/bar/)
+ expect(message).toMatch('bar')
+
+ expect(a.foo).toBeDefined()
+ expect(a.foo).toBeUndefined()
+ expect(a.foo).toBeNull()
+
+ expect(a.foo).toBeTruthy()
+ expect(a.foo).toBeFalsy()
+
+ expect(message).toContain('hello')
+
+ expect(pi).toBeGreaterThan(3)
+ expect(pi).toBeLessThan(4)
+ expect(pi).toBeCloseTo(3.1415, 0.1)
+
+ expect(func).toThrow()
+
+### Blocks
+
+ beforeEach(function() { ... });
+ afterEach(function() { ... });
+
+### Pending
+
+ xit("this is a pending test", function() { ... })
+ xdescribe("this is a pending block", function() { ... })
+
+### Spies
+
+ spyOn(foo, 'setBar')
+ spyOn(foo, 'setBar').andReturn(123)
+ spyOn(foo, 'getBar').andCallFake(function() { return 1001; })
+ foo.setBar(123)
+
+ expect(foo.setBar).toHaveBeenCalled()
+ expect(foo.setBar).toHaveBeenCalledWith(123)
+ expect(foo.setBar.calls.length).toEqual(2)
+ expect(foo.setBar.calls[0].args[0]).toEqual(123)
+
+### Creating spies
+
+ stub = jasmine.createSpy('stub')
+ stub("hello")
+
+ expect(whatAmI.identity).toEqual("stub")
+ expect(whatAmI).toHaveBeenCalled()
+
+### Async
+
+ it("should run async", function() {
+ var flag = false, value = 0;
+
+ runs(function() {
+ setTimeout(function() { flag = true; }, 500);
+ });
+
+ waitsFor(function() {
+ value++;
+ return flag;
+ }, "increment", 750);
+
+ runs(function() {
+ expect(value).toBeGreaterThan(0);
+ });
+ });
+
+### HTML runner
+
+ var jasmineEnv = jasmine.getEnv();
+ jasmineEnv.updateInterval = 250;
+
+ var htmlReporter = new jasmine.HtmlReporter();
+ jasmineEnv.addReporter(htmlReporter);
+
+ $(function() { jasmineEnv.execute(); });
+
+Jasmine jQuery
+==============
+
+[Jasmin jQuery](https://github.com/velesin/jasmine-jquery).
+
+ expect($('#id')).toBe('div')
+ expect($('input[type=checkbox]')).toBeChecked()
+ expect($('input[type=checkbox]')).toBeDisabled()
+ expect($('input[type=checkbox]')).toBeFocused()
+ expect($('#menu ul')).toBeEmpty()
+
+ expect($('#toolbar')).toBeHidden()
+ expect($('#toolbar')).toBeVisible()
+
+ expect($('#popup')).toHaveCss({ margin: "10px" })
+ expect($('option')).toBeSelected()
+
+ expect($('.foo')).toExist()
+
+ expect($('a')).toHaveAttr('rel')
+ expect($('a')).toHaveAttr('rel', 'nofollow')
+
+ expect($('a')).toHaveClass('rel')
+ expect($('a')).toHaveId('home')
+
+ expect($('a')).toHaveHtml('')
+ expect($('a')).toContainHtml('')
+ expect($('a')).toHaveText('hi')
+
+ expect($form).toHandle('submit') // event
+ expect($form).toHandleWith('submit', onSumbit)
+
+### Event spies
+
+ spyOnEvent($('#some_element'), 'click');
+ $('#some_element').click();
+ expect('click').toHaveBeenPreventedOn($('#some_element'));
+ expect('click').toHaveBeenTriggeredOn($('#some_element'));
diff --git a/lua.md b/lua.md
new file mode 100644
index 000000000..af046c096
--- /dev/null
+++ b/lua.md
@@ -0,0 +1,297 @@
+title: Lua
+
+## Comments
+
+ -- comment
+ --[[ Multiline
+ comment ]]
+
+## Invoking functions
+
+ print()
+ print("Hi")
+
+ -- You can omit parentheses if the argument is one string or table literal
+ print "Hello World" <--> print("Hello World")
+ dofile 'a.lua' <--> dofile ('a.lua')
+ print [[a multi-line <--> print([[a multi-line
+ message]] message]])
+ f{x=10, y=20} <--> f({x=10, y=20})
+ type{} <--> type({})
+
+## Tables / arrays
+
+ t = {}
+ t = { a = 1, b = 2 }
+ t.a = function() ... end
+
+ t = { ["hello"] = 200 }
+ t.hello
+
+ -- Remember, arrays are also tables
+ array = { "a", "b", "c", "d" }
+ print(array[2]) -- "b" (zero-indexed)
+ print(#array) -- 4 (length)
+
+## Loops
+
+ while condition do
+ end
+
+ for i = 1,5 do
+ end
+
+ for i = start,finish,delta do
+ end
+
+ for k,v in pairs(tab) do
+ end
+
+ repeat
+ until condition
+
+ -- Breaking out:
+ while x do
+ if condition then break end
+ end
+
+## Conditionals
+
+ if condition then
+ print("yes")
+ elsif condition then
+ print("maybe")
+ else
+ print("no")
+ end
+
+## Variables
+
+ local x = 2
+ two, four = 2, 4
+
+## Functions
+
+ function myFunction()
+ return 1
+ end
+
+ function myFunctionWithArgs(a, b)
+ -- ...
+ end
+
+ myFunction()
+
+ anonymousFunctions(function()
+ -- ...
+ end)
+
+ -- Not exported in the module
+ local function myPrivateFunction()
+ end
+
+ -- Splats
+ function doAction(action, ...)
+ print("Doing '"..action.."' to", ...)
+ --> print("Doing 'write' to", "Shirley", "Abed")
+ end
+
+ doAction('write', "Shirley", "Abed")
+
+## Lookups
+
+ mytable = { x = 2, y = function() .. end }
+
+ -- The same:
+ mytable.x
+ mytable['x']
+
+ -- Syntactic sugar, these are equivalent:
+ mytable.y(mytable)
+ mytable:y()
+
+ mytable.y(mytable, a, b)
+ mytable:y(a, b)
+
+ function X:y(z) .. end
+ function X.y(self, z) .. end
+
+## Metatables
+
+
+ mt = {}
+
+ -- A metatable is simply a table with functions in it.
+ mt.__tostring = function() return "lol" end
+ mt.__add = function(b) ... end -- a + b
+ mt.__mul = function(b) ... end -- a * b
+ mt.__index = function(k) ... end -- Lookups (a[k] or a.k)
+ mt.__newindex = function(k, v) ... end -- Setters (a[k] = v)
+
+ -- Metatables allow you to override behavior of another table.
+ mytable = {}
+ setmetatable(mytable, mt)
+
+ print(myobject)
+
+## Classes
+
+ Account = {}
+
+ function Account:new(balance)
+ local t = setmetatable({}, { __index = Account })
+
+ -- Your constructor stuff
+ t.balance = (balance or 0)
+ return t
+ end
+
+ function Account:withdraw(amount)
+ print("Withdrawing "..amount.."...")
+ self.balance = self.balance - amount
+ self:report()
+ end
+
+ function Account:report()
+ print("Your current balance is: "..self.balance)
+ end
+
+ a = Account:new(9000)
+ a:withdraw(200) -- method call
+
+## Constants
+
+ nil
+ false
+ true
+
+## Operators (and their metatable names)
+
+ -- Relational (binary)
+ -- __eq __lt __gt __le __ge
+ == < > <= >=
+ ~= -- Not equal, just like !=
+
+ -- Arithmetic (binary)
+ -- __add __sub __muv __div __mod __pow
+ + - * / % ^
+
+ -- Arithmetic (unary)
+ -- __unm (unary minus)
+ -
+
+ -- Logic (and/or)
+ nil and 10 --> 10
+ false and nil --> false
+ 10 and 20 --> 20
+
+
+ -- Length
+ -- __len(array)
+ #array
+
+
+ -- Indexing
+ -- __index(table, key)
+ t[key]
+ t.key
+
+ -- __newindex(table, key, value)
+ t[key]=value
+
+ -- String concat
+ -- __concat(left, right)
+ "hello, "..name
+
+ -- Call
+ -- __call(func, ...)
+
+
+## API: Global functions [(ref)](http://lua.gts-stolberg.de/en/Basis.php)
+
+ dofile("hello.lua")
+ loadfile("hello.lua")
+
+ assert(x) -- x or (raise an error)
+ assert(x, "failed")
+
+ type(var) -- "nil" | "number" | "string" | "boolean" | "table" | "function" | "thread" | "userdata"
+
+ -- Does /not/ invoke meta methods (__index and __newindex)
+ rawset(t, index, value) -- Like t[index] = value
+ rawget(t, index) -- Like t[index]
+
+ _G -- Global context
+ setfenv(1, {}) -- 1: current function, 2: caller, and so on -- {}: the new _G
+
+ pairs(t) -- iterable list of {key, value}
+ ipairs(t) -- iterable list of {index, value}
+
+ tonumber("34")
+ tonumber("8f", 16)
+
+## API: Strings
+
+ 'string'..'concatenation'
+
+ s = "Hello"
+ s:upper()
+ s:lower()
+ s:len() -- Just like #s
+
+ s:find()
+ s:gfind()
+
+ s:match()
+ s:gmatch()
+
+ s:sub()
+ s:gsub()
+
+ s:rep()
+ s:char()
+ s:dump()
+ s:reverse()
+ s:byte()
+ s:format()
+
+## API: Tables
+
+ table.foreach(t, function(row) ... end)
+ table.setn
+ table.insert(t, 21) -- append (--> t[#t+1] = 21)
+ table.insert(t, 4, 99)
+ table.getn
+ table.concat
+ table.sort
+ table.remove(t, 4)
+
+## API: Math [(ref)](http://lua-users.org/wiki/MathLibraryTutorial)
+
+ math.abs math.acos math.asin math.atan math.atan2
+ math.ceil math.cos math.cosh math.deg math.exp
+ math.floor math.fmod math.frexp math.ldexp math.log
+ math.log10 math.max math.min math.modf math.pow
+ math.rad math.random math.randomseed math.sin math.sinh
+ math.sqrt math.tan math.tanh
+
+ math.sqrt(144)
+ math
+
+## API: Misc
+
+ io.output(io.open("file.txt", "w"))
+ io.write(x)
+ io.close()
+
+ for line in io.lines("file.txt")
+
+ file = assert(io.open("file.txt", "r"))
+ file:read()
+ file:lines()
+ file:close()
+
+## Reference
+
+ http://www.lua.org/pil/13.html
+ http://lua-users.org/wiki/ObjectOrientedProgramming
diff --git a/middleman.md b/middleman.md
index 21dc33e18..fe5c6bc6e 100644
--- a/middleman.md
+++ b/middleman.md
@@ -62,10 +62,7 @@ title: Middleman
# Build-specific configuration
configure :build do
- # For example, change the Compass output style for deployment
activate :minify_css
-
- # Minify Javascript on build
activate :minify_javascript
# Enable cache buster
diff --git a/ncftp.md b/ncftp.md
new file mode 100644
index 000000000..531d5571d
--- /dev/null
+++ b/ncftp.md
@@ -0,0 +1,20 @@
+Bookmarking
+
+ $ ncftp
+ $ open -u username ftp.host.com
+ $ bookmark bookmarkname
+
+Mass download
+
+ $ ncftpget -R bookmarkname /www/ .
+
+Mass upload
+
+ $ ncftpget -R bookmarkname /www/ .
+
+ $ ncftpget -R bookmarkname /www/ .
+
+Upload just the changed files
+
+ $ git show --pretty="format:" --name-only HEAD~1
+ $ ncftpget -R -C log bookmarkname /www/ .
diff --git a/ruby.md b/ruby.md
new file mode 100644
index 000000000..58b87a0a3
--- /dev/null
+++ b/ruby.md
@@ -0,0 +1,17 @@
+
+* `$!` - latest error message
+* `$@` - location of error
+* `$_` - string last read by gets
+* `$.` - line number last read by interpreter
+* `$&` - string last matched by regexp
+* `$~` - the last regexp match, as an array of subexpressions
+* `$n` - the nth subexpression in the last match (same as $~[n])
+* `$=` - case-insensitivity flag
+* `$/` - input record separator
+* `$\` - output record separator
+* `$0` - the name of the ruby script file
+* `$*` (or `ARGV`) - the command line arguments
+* `$$` - interpreter's process ID
+* `$?` - exit status of last executed child process
+* `$-i` `$-l` `$-p` `$-v` - Command line switches
+* `$-v` (or `$VERBOSE`) - verbose mode
diff --git a/rubygems.md b/rubygems.md
new file mode 100644
index 000000000..9e84b3574
--- /dev/null
+++ b/rubygems.md
@@ -0,0 +1,18 @@
+title: Rubygems
+----
+
+ gem build *.gemspec # Build a gem
+ gem install *.gem # Install locally
+ gem push *.gem # Upload to rubygems.org
+ gem yank foogem -v 0.0.1 # Take it back
+ gem owner -a rico@ricostacruz.com
+
+ gem list # List local gems
+ gem which rake # Point to where lib/rake.rb is
+ gem search -r rails # [remote] Search for gems
+
+ # https://github.com/fnando/gem-open
+ gem open foogem
+ GEM_EDITOR="vim" gem open foogem
+
+ cd $(basename `gem which rake`) # Go to a gem's path
diff --git a/sass.md b/sass.md
new file mode 100644
index 000000000..e433aa261
--- /dev/null
+++ b/sass.md
@@ -0,0 +1,35 @@
+
+### Sprites
+
+
+ // Sprite sets (applies to icon/*.png)
+ $icon-spacing: 0
+ $icon-dimensions: true
+ $icon-repeat: no-repeat
+ $icon-position: 0
+
+ // Individual (applies to icon/mail.png)
+ $icon-mail-spacing: 0
+
+ @import 'icon/*.png'
+ @include all-icon-sprites
+
+ // Usage
+ .image1
+ @extend .icon-mail
+
+ .image2
+ @extend .icon-refresh;
+
+ // ### Advanced control
+ // The sprite map is available as $icon-sprites. You can then use
+ // `sprite()` on it.
+
+ .image3
+ background: sprite($icon-sprites, refresh)
+ //background: url(...) 0 -16px;
+
+ .image3-with-offset
+ background: sprite($icon-sprites, refresh, -2px, -9px)
+ //background: url(...) -2px -19px;
+
diff --git a/vim.md b/vim.md
index bb26bdd4f..d06286380 100644
--- a/vim.md
+++ b/vim.md
@@ -1,9 +1,17 @@
title: vim
----
- . - repeat last command
- ]p - paste under the current indentation level
+ . - repeat last command
+ ]p - paste under the current indentation level
+ `. - Go to last edit
+ C-o - Go back to previous location (C-i forward)
+ C-t - Go back to last tag
+Command line
+------------
+
+ - insert current word into the command line
+ " - paste from " register
Motions
-------