diff --git a/2008-10-27/unfold.markdown b/2008-10-27/unfold.markdown index 3a607a9b..98d48e8a 100644 --- a/2008-10-27/unfold.markdown +++ b/2008-10-27/unfold.markdown @@ -25,9 +25,10 @@ The code for unfold is at [unfold.rb](unfold.rb). To use it in a Rails project, Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. diff --git a/2008-10-28/and_and_or.markdown b/2008-10-28/and_and_or.markdown index 4fa43e4c..830c7f8a 100644 --- a/2008-10-28/and_and_or.markdown +++ b/2008-10-28/and_and_or.markdown @@ -39,8 +39,9 @@ The predicate seems less important than the consequent, which suggests that it s Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-10-29/kestrel.markdown b/2008-10-29/kestrel.markdown index 73addd2d..6e3dde02 100644 --- a/2008-10-29/kestrel.markdown +++ b/2008-10-29/kestrel.markdown @@ -146,8 +146,9 @@ _More on combinators_: [Kestrels](http://github.com/raganwald/homoiconic/tree/ma Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-10-29/you_keep_using_that_idiom.markdown b/2008-10-29/you_keep_using_that_idiom.markdown index 6eaf990f..72e556a6 100644 --- a/2008-10-29/you_keep_using_that_idiom.markdown +++ b/2008-10-29/you_keep_using_that_idiom.markdown @@ -61,8 +61,9 @@ It is a matter of wonder why ordering arrays is handled with `sort` and `sort!`, Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-10-30/thrush.markdown b/2008-10-30/thrush.markdown index eb21de48..c93f0f5a 100644 --- a/2008-10-30/thrush.markdown +++ b/2008-10-30/thrush.markdown @@ -94,8 +94,9 @@ _More on combinators_: [Kestrels](http://github.com/raganwald/homoiconic/tree/ma Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-10-30/why_im_using_git.markdown b/2008-10-30/why_im_using_git.markdown index 3f61e87a..8a80d3ea 100644 --- a/2008-10-30/why_im_using_git.markdown +++ b/2008-10-30/why_im_using_git.markdown @@ -23,8 +23,9 @@ Reg Braithwaite: Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-10-31/songs_of_the_cardinal.markdown b/2008-10-31/songs_of_the_cardinal.markdown index fb8b6d8a..ed888218 100644 --- a/2008-10-31/songs_of_the_cardinal.markdown +++ b/2008-10-31/songs_of_the_cardinal.markdown @@ -124,8 +124,9 @@ _More on combinators_: [Kestrels](http://github.com/raganwald/homoiconic/tree/ma Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-11-03/with_unhygienic_and_call-by-name_semantics_in_rewrite.markdown b/2008-11-03/with_unhygienic_and_call-by-name_semantics_in_rewrite.markdown index 77d32abc..1cf3481b 100644 --- a/2008-11-03/with_unhygienic_and_call-by-name_semantics_in_rewrite.markdown +++ b/2008-11-03/with_unhygienic_and_call-by-name_semantics_in_rewrite.markdown @@ -217,7 +217,7 @@ What just happened is that `our_and` is defined as a lambda, with `called_by_nam There are some important implications of this approach. First, with unhygienic, `our_and` disappears. There is no `our_and` function or method, invocations are replaced by whatever `to` expression you provide. Whereas, `called_by_name` actually defines a lambda for `our_and` and defines it in scope for our block of code. -> Note: Caleb asked about the fetish for lambdas. In Ruby 1.8 MRI, it makes no difference. In other implementations, these constructs will by hygienic. Yet, these implementations do not exist yet. So, either I don't understand YAGNI, or perhaps I have spent too much time with languages like Javascript that [actually get this right](http://weblog.raganwald.com/2007/08/block-structured-javascript.html "Block-Structured Javascript"), or I am from the future and I know that Ruby will get this right. +> Note: Caleb asked about the fetish for lambdas. In Ruby 1.8 MRI, it makes no difference. In other implementations, these constructs will by hygienic. Yet, these implementations do not exist yet. So, either I don't understand YAGNI, or perhaps I have spent too much time with languages like JavaScript that [actually get this right](http://weblog.raganwald.com/2007/08/block-structured-javascript.html "Block-Structured JavaScript"), or I am from the future and I know that Ruby will get this right. Second, even though `temp` is still around and still could shadow some variable where it is defined, it doesn't shadow any definition inside your block. So you could define rewriters with `called_by_name` at the top level or inside of a method somewhere and be assured that you are making 100% hygienic code. @@ -233,8 +233,9 @@ As a example, things like [andand](http://github.com/raganwald/andand/tree "raga Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-11-04/quirky_birds_and_meta_syntactic_programming.markdown b/2008-11-04/quirky_birds_and_meta_syntactic_programming.markdown index 89696dc5..3938d8ef 100644 --- a/2008-11-04/quirky_birds_and_meta_syntactic_programming.markdown +++ b/2008-11-04/quirky_birds_and_meta_syntactic_programming.markdown @@ -251,8 +251,9 @@ p.s. Please vote for this post on [ruby.reddit.com](http://www.reddit.com/r/ruby Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-11-04/unary_ampersand_in_ruby.markdown b/2008-11-04/unary_ampersand_in_ruby.markdown index f4e962ba..c9ee2c38 100644 --- a/2008-11-04/unary_ampersand_in_ruby.markdown +++ b/2008-11-04/unary_ampersand_in_ruby.markdown @@ -178,8 +178,9 @@ p.s. *This post originally appeared on [weblog.raganwald.com](http://weblog.raga Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-11-07/README.md b/2008-11-07/README.md index 3432e900..8d0ea663 100644 --- a/2008-11-07/README.md +++ b/2008-11-07/README.md @@ -248,8 +248,9 @@ _More on combinators_: [Kestrels](http://github.com/raganwald/homoiconic/tree/ma Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-11-07/comment_on_implementing_advice.markdown b/2008-11-07/comment_on_implementing_advice.markdown index 4071e5f1..8e003716 100644 --- a/2008-11-07/comment_on_implementing_advice.markdown +++ b/2008-11-07/comment_on_implementing_advice.markdown @@ -29,8 +29,9 @@ Very correct, and when time permits we could look at a messier but faster soluti Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-11-07/from_birds_that_compose_to_method_advice.markdown b/2008-11-07/from_birds_that_compose_to_method_advice.markdown index 28f3169a..adf38559 100644 --- a/2008-11-07/from_birds_that_compose_to_method_advice.markdown +++ b/2008-11-07/from_birds_that_compose_to_method_advice.markdown @@ -250,8 +250,9 @@ _More on combinators_: [Kestrels](http://github.com/raganwald/homoiconic/tree/ma Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-11-09/proc_arity.markdown b/2008-11-09/proc_arity.markdown index f40ffb25..ea992370 100644 --- a/2008-11-09/proc_arity.markdown +++ b/2008-11-09/proc_arity.markdown @@ -51,8 +51,9 @@ It seems that if you explicitly define a method taking no parameters, you get th Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-11-12/combinator_chemistry.md b/2008-11-12/combinator_chemistry.md index d346a3eb..5809301e 100644 --- a/2008-11-12/combinator_chemistry.md +++ b/2008-11-12/combinator_chemistry.md @@ -654,8 +654,9 @@ Bruno Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-11-12/the_obdurate_kestrel.md b/2008-11-12/the_obdurate_kestrel.md index 13bc626c..e2f307cb 100644 --- a/2008-11-12/the_obdurate_kestrel.md +++ b/2008-11-12/the_obdurate_kestrel.md @@ -132,8 +132,9 @@ _More on combinators_: [Kestrels](http://github.com/raganwald/homoiconic/tree/ma Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-11-16/joy.md b/2008-11-16/joy.md index 3984f21a..f70e6d4b 100644 --- a/2008-11-16/joy.md +++ b/2008-11-16/joy.md @@ -137,8 +137,9 @@ p.s. Just published: [Combinatory Logic](http://plato.stanford.edu/entries/logic Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-11-21/cdr.md b/2008-11-21/cdr.md index 97cb2ca8..cf1825bb 100644 --- a/2008-11-21/cdr.md +++ b/2008-11-21/cdr.md @@ -27,8 +27,9 @@ p.s. If you press me to give a firm opinion, I choose [blue in green](http://bik Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-11-21/templates_double_mockingbirds_and_helpers.md b/2008-11-21/templates_double_mockingbirds_and_helpers.md index d3709b9b..ff86cfde 100644 --- a/2008-11-21/templates_double_mockingbirds_and_helpers.md +++ b/2008-11-21/templates_double_mockingbirds_and_helpers.md @@ -309,7 +309,7 @@ Have fun! NOTE: The material from this post is being extensively revised and appears in [Refactoring Methods with Recursive Combinators](http://github.com/raganwald/homoiconic/tree/master/2008-11-23/recursive_combinators.md#readme). -*p.s. Recursive combinators are definitely found in the wild: Eugene Lazutkin's article on [Using recursion combinators in JavaScript](http://lazutkin.com/blog/2008/jun/30/using-recursion-combinators-javascript/ "") shows how to use combinators to build divide and conquer algorithms in Javascript:* +*p.s. Recursive combinators are definitely found in the wild: Eugene Lazutkin's article on [Using recursion combinators in JavaScript](http://lazutkin.com/blog/2008/jun/30/using-recursion-combinators-javascript/ "") shows how to use combinators to build divide and conquer algorithms in JavaScript:* var fib0 = function(n){ return n <= 1 ? 1 : @@ -329,8 +329,9 @@ _More on combinators_: [Kestrels](http://github.com/raganwald/homoiconic/tree/ma Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-11-23/recursive_combinators.md b/2008-11-23/recursive_combinators.md index 04564c41..c45b9693 100644 --- a/2008-11-23/recursive_combinators.md +++ b/2008-11-23/recursive_combinators.md @@ -244,7 +244,7 @@ Now the common code is glaringly obvious. The main challenge in factoring it int Now we have refactored the common algorithm out. Typically, something like divide and conquer is treated as a "pattern," a recipe for writing methods. We have changed it into an *abstraction* by writing a `#divide_and_conquer` method and passing it our own functions which it combines to form the final algorithm. That ought to sound familiar: `#divide_and_conquer` is a *combinator* that creates recursive methods for us. -You can also find recursive combinators in other languages like Joy, Factor, and even Javascript (the recursive combinator presented here as `#divide_and_conquer` is normally called `multirec`). Eugene Lazutkin's article on [Using recursion combinators in JavaScript](http://lazutkin.com/blog/2008/jun/30/using-recursion-combinators-javascript/ "") shows how to use combinators to build divide and conquer algorithms in Javascript with the Dojo libraries. This example uses `binrec`, a recursive combinator for algorithms that always divide their problems in two: +You can also find recursive combinators in other languages like Joy, Factor, and even JavaScript (the recursive combinator presented here as `#divide_and_conquer` is normally called `multirec`). Eugene Lazutkin's article on [Using recursion combinators in JavaScript](http://lazutkin.com/blog/2008/jun/30/using-recursion-combinators-javascript/ "") shows how to use combinators to build divide and conquer algorithms in JavaScript with the Dojo libraries. This example uses `binrec`, a recursive combinator for algorithms that always divide their problems in two: var fib0 = function(n){ return n <= 1 ? 1 : @@ -396,8 +396,9 @@ _More on combinators_: [Kestrels](http://github.com/raganwald/homoiconic/tree/ma Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-11-26/practical_recursive_combinators.md b/2008-11-26/practical_recursive_combinators.md index 6f2cf0b5..654497fc 100644 --- a/2008-11-26/practical_recursive_combinators.md +++ b/2008-11-26/practical_recursive_combinators.md @@ -436,8 +436,9 @@ _More on combinators_: [Kestrels](http://github.com/raganwald/homoiconic/tree/ma Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-11-26/string_to_proc.rb b/2008-11-26/string_to_proc.rb index 4c1cac8c..1b5cf03a 100644 --- a/2008-11-26/string_to_proc.rb +++ b/2008-11-26/string_to_proc.rb @@ -6,7 +6,7 @@ # # See http://weblog.raganwald.com/2007/10/stringtoproc.html # -# Ported from the String Lambdas in Oliver Steele's Functional Javascript +# Ported from the String Lambdas in Oliver Steele's Functional JavaScript # http://osteele.com/sources/javascript/functional/ # # Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/2008-11-28/string_to_proc.rb b/2008-11-28/string_to_proc.rb index 4c1cac8c..1b5cf03a 100644 --- a/2008-11-28/string_to_proc.rb +++ b/2008-11-28/string_to_proc.rb @@ -6,7 +6,7 @@ # # See http://weblog.raganwald.com/2007/10/stringtoproc.html # -# Ported from the String Lambdas in Oliver Steele's Functional Javascript +# Ported from the String Lambdas in Oliver Steele's Functional JavaScript # http://osteele.com/sources/javascript/functional/ # # Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/2008-11-28/you_cant_be_serious.md b/2008-11-28/you_cant_be_serious.md index 152b8180..27bad0b8 100644 --- a/2008-11-28/you_cant_be_serious.md +++ b/2008-11-28/you_cant_be_serious.md @@ -195,8 +195,9 @@ _More on recursive combinators_: [Refactoring Methods with Recursive Combinators Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-12-01/keep_your_privates_to_yourself.md b/2008-12-01/keep_your_privates_to_yourself.md index abf03bec..c76805cf 100644 --- a/2008-12-01/keep_your_privates_to_yourself.md +++ b/2008-12-01/keep_your_privates_to_yourself.md @@ -407,8 +407,9 @@ And a tip: *Using local variables and `defne_method` to create private helpers a Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-12-03/rcall.md b/2008-12-03/rcall.md index 883b4972..6d15a203 100644 --- a/2008-12-03/rcall.md +++ b/2008-12-03/rcall.md @@ -86,8 +86,9 @@ If you've been following along with the techniques in [Practical Recursive Combi Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-12-09/nuno_job_on_rewrite.md b/2008-12-09/nuno_job_on_rewrite.md index 6948b356..fff3bb24 100644 --- a/2008-12-09/nuno_job_on_rewrite.md +++ b/2008-12-09/nuno_job_on_rewrite.md @@ -20,8 +20,9 @@ I received a very nice email from [Nuno Job](http://github.com/dscape). Here it Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-12-1/keep_your_privates_to_yourself.md b/2008-12-1/keep_your_privates_to_yourself.md index 691ae295..4c6de8ed 100644 --- a/2008-12-1/keep_your_privates_to_yourself.md +++ b/2008-12-1/keep_your_privates_to_yourself.md @@ -359,8 +359,9 @@ And a tip: *Using local variables and `define_method` to create private helpers Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-12-12/fibonacci.md b/2008-12-12/fibonacci.md index 2144bcad..2f30d832 100644 --- a/2008-12-12/fibonacci.md +++ b/2008-12-12/fibonacci.md @@ -198,8 +198,9 @@ Christoph Temmel [forked homoiconic](http://github.com/kar8nga/homoiconic/tree " Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. diff --git a/2008-12-16/welcome.md b/2008-12-16/welcome.md index dadaf747..464ef797 100644 --- a/2008-12-16/welcome.md +++ b/2008-12-16/welcome.md @@ -31,8 +31,9 @@ p.s. A must-read: [Try() as you might](http://blog.lawrencepit.com/2009/01/11/tr Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. diff --git a/2008-12-17/another_fibonacci.md b/2008-12-17/another_fibonacci.md index d1938786..26c370a4 100644 --- a/2008-12-17/another_fibonacci.md +++ b/2008-12-17/another_fibonacci.md @@ -68,8 +68,9 @@ p.s. *Another* post on Fibonacci? *Dude, WTF!?* My response is to paraphrase [Di Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. diff --git a/2008-12-18/called_by_name.md b/2008-12-18/called_by_name.md index 015e57a1..c1b92853 100644 --- a/2008-12-18/called_by_name.md +++ b/2008-12-18/called_by_name.md @@ -186,7 +186,7 @@ And call our function like this: lambda { default_value() } ) -We have just implemented the [Try.these](http://www.prototypejs.org/api/utility/try-these "Prototype JavaScript framework: Utility Methods.Try.these") function from the Prototype Javascript library. +We have just implemented the [Try.these](http://www.prototypejs.org/api/utility/try-these "Prototype JavaScript framework: Utility Methods.Try.these") function from the Prototype JavaScript library. This technique gets us almost all of what we want for this common case of wanting to work around call-by-value semantics. As you can surmise from the fact that it has a name, it is not some newfangled shiny toy idea, it goes back to ALGOL 60, where it was known as call-by-name. (PHP has something called "Call By Name," but it has a lot more in common with C++ references than it does with ALGOL parameter passing.) @@ -324,8 +324,9 @@ I am fixing this, and my first priority is to make `called_by_name` work again. Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2008-12-23/bah_humbug.md b/2008-12-23/bah_humbug.md index bae19aa6..f474739c 100644 --- a/2008-12-23/bah_humbug.md +++ b/2008-12-23/bah_humbug.md @@ -11,8 +11,9 @@ I hope that over time you will grow to like reading it in this minimalist format Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. diff --git a/2009-01-02/flight_of_the_phoenix.md b/2009-01-02/flight_of_the_phoenix.md index 2815080b..d58bfce9 100644 --- a/2009-01-02/flight_of_the_phoenix.md +++ b/2009-01-02/flight_of_the_phoenix.md @@ -77,8 +77,9 @@ This is not ready for prime time, it's just something I'm toying with. I'm using Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. diff --git a/2009-01-05/andand_even_more.md b/2009-01-05/andand_even_more.md index 55f98472..b54aaed3 100644 --- a/2009-01-05/andand_even_more.md +++ b/2009-01-05/andand_even_more.md @@ -58,8 +58,9 @@ Like anything else, `andand do ... end` is a tool to be used in specialized situ Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-01-06/rewrite_rails.md b/2009-01-06/rewrite_rails.md index c8fc86a5..50535c2e 100644 --- a/2009-01-06/rewrite_rails.md +++ b/2009-01-06/rewrite_rails.md @@ -14,8 +14,9 @@ But if you are using `Object#andand` or `String#to_proc` in a Rails project, ple Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-01-12/mundane.md b/2009-01-12/mundane.md index 6667063e..7b96ec5e 100644 --- a/2009-01-12/mundane.md +++ b/2009-01-12/mundane.md @@ -15,8 +15,9 @@ Just a thought... Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-01-13/maybe.md b/2009-01-13/maybe.md index aa1351a1..b4c9a258 100644 --- a/2009-01-13/maybe.md +++ b/2009-01-13/maybe.md @@ -115,8 +115,9 @@ Nevertheless, it's a really provocative idea. And now I'm going to make myself s Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-01-21/old.md b/2009-01-21/old.md index ce713270..864d1a9b 100644 --- a/2009-01-21/old.md +++ b/2009-01-21/old.md @@ -43,8 +43,9 @@ Unfinished ideas are opportunities. Old ideas are opportunities. Embrace them. Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-02-02/hopeless_egocentricity.md b/2009-02-02/hopeless_egocentricity.md index 63bfbfa6..94ade678 100644 --- a/2009-02-02/hopeless_egocentricity.md +++ b/2009-02-02/hopeless_egocentricity.md @@ -163,8 +163,9 @@ _More on combinators_: [Kestrels](http://github.com/raganwald/homoiconic/tree/ma Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-02-12/a_question.md b/2009-02-12/a_question.md index 5e41d287..7a05f2d9 100644 --- a/2009-02-12/a_question.md +++ b/2009-02-12/a_question.md @@ -42,8 +42,9 @@ If someone can figure out what it means for a programmer to be more productive, Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-03-03/circular.md b/2009-03-03/circular.md index 45e6aa07..bc33b473 100644 --- a/2009-03-03/circular.md +++ b/2009-03-03/circular.md @@ -24,8 +24,9 @@ Circular Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. diff --git a/2009-03-07/surreal.md b/2009-03-07/surreal.md index ef990e99..a0c26869 100644 --- a/2009-03-07/surreal.md +++ b/2009-03-07/surreal.md @@ -246,8 +246,9 @@ So... If you want a readable and entertaining exposition, read [Knuth](http://ww Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-03-12/another_question.md b/2009-03-12/another_question.md index 04e53a73..2f0dfa23 100644 --- a/2009-03-12/another_question.md +++ b/2009-03-12/another_question.md @@ -103,8 +103,9 @@ That you should refactor it into this: Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-04-08/sick.md b/2009-04-08/sick.md index 0a7bc2dc..84c0fc42 100644 --- a/2009-04-08/sick.md +++ b/2009-04-08/sick.md @@ -23,8 +23,9 @@ Now its your turn. Dazzle me. Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-04-09/my_objection_to_sum.md b/2009-04-09/my_objection_to_sum.md index 2030d17c..0777b4b5 100644 --- a/2009-04-09/my_objection_to_sum.md +++ b/2009-04-09/my_objection_to_sum.md @@ -89,8 +89,9 @@ Someone asked wither `an_array_instance.sum()` is really necessary given that we Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-04-15/keywords.md b/2009-04-15/keywords.md index f8a666d5..b836d695 100644 --- a/2009-04-15/keywords.md +++ b/2009-04-15/keywords.md @@ -70,8 +70,9 @@ It reads like it sounds: "Do this and then do that." The if statement sounds too Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-04-17/eggs.md b/2009-04-17/eggs.md index 632d420a..ab13fc82 100644 --- a/2009-04-17/eggs.md +++ b/2009-04-17/eggs.md @@ -21,8 +21,9 @@ Fix one and you fix the other. Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-04-28/extension_methods.md b/2009-04-28/extension_methods.md index 05fb321a..dfa80f06 100644 --- a/2009-04-28/extension_methods.md +++ b/2009-04-28/extension_methods.md @@ -259,8 +259,9 @@ But if you want to write well-factored object-oriented code, an extension method Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-05-01/optimism.md b/2009-05-01/optimism.md index b590a4d0..af8ef890 100644 --- a/2009-05-01/optimism.md +++ b/2009-05-01/optimism.md @@ -107,8 +107,9 @@ THIS spirit of confidence and change is optimism, and it's what I hope we will a Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. diff --git a/2009-05-13/tough_crowd.md b/2009-05-13/tough_crowd.md index 8e5f4a27..71e5592e 100644 --- a/2009-05-13/tough_crowd.md +++ b/2009-05-13/tough_crowd.md @@ -37,8 +37,9 @@ It's too small a sample to draw conclusions about communities and bias, but the Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-06-02/functional_complexity.md b/2009-06-02/functional_complexity.md index a2874d3c..20e8c93c 100644 --- a/2009-06-02/functional_complexity.md +++ b/2009-06-02/functional_complexity.md @@ -190,8 +190,9 @@ In other words, these two programs are by necessity congruent modulo test suites Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-06-26/no_hire.md b/2009-06-26/no_hire.md index 59255789..b441e77a 100644 --- a/2009-06-26/no_hire.md +++ b/2009-06-26/no_hire.md @@ -27,8 +27,9 @@ NO HIRE. Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-06-29/wrapping_combinators.md b/2009-06-29/wrapping_combinators.md index eca1bc8f..c4df1191 100644 --- a/2009-06-29/wrapping_combinators.md +++ b/2009-06-29/wrapping_combinators.md @@ -153,8 +153,9 @@ _More on combinators_: [Kestrels](http://github.com/raganwald/homoiconic/tree/ma Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-08-29/returning.md b/2009-08-29/returning.md index 2721d342..48f98de3 100644 --- a/2009-08-29/returning.md +++ b/2009-08-29/returning.md @@ -151,8 +151,9 @@ Curiosity. It's easy to dismiss programmers who accidentally misuse features lik Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-09-22/anaphora.md b/2009-09-22/anaphora.md index 0bab1cd9..644fdaff 100644 --- a/2009-09-22/anaphora.md +++ b/2009-09-22/anaphora.md @@ -5,7 +5,7 @@ Anaphora in Ruby **Block anaphora** -Oliver Steele wrote a nice little Javascript library called [Functional Javascript](http://osteele.com/sources/javascript/functional/ "Functional Javascript"). Javascript is a particularly verbose language descended from Lisp. It's syntax for writing anonymous functions is awkward, especially for the kind of short functions that are passed to higher-level functions like `map` or `select`. Oliver decided that if you wanted to write a lot of anonymous functions, you'd better have a more succinct way to write them. So he added "String Lambdas" to Javascript, a succinct alternate syntax for anonymous functions. +Oliver Steele wrote a nice little JavaScript library called [Functional JavaScript](http://osteele.com/sources/javascript/functional/ "Functional JavaScript"). JavaScript is a particularly verbose language descended from Lisp. It's syntax for writing anonymous functions is awkward, especially for the kind of short functions that are passed to higher-level functions like `map` or `select`. Oliver decided that if you wanted to write a lot of anonymous functions, you'd better have a more succinct way to write them. So he added "String Lambdas" to JavaScript, a succinct alternate syntax for anonymous functions. [String#to\_proc](http://github.com/raganwald/homoiconic/blob/master/2008-11-28/you_cant_be_serious.md "You can't be serious!?") is a port of Oliver's String Lambdas to Ruby. One of the things you can do with String#to\_proc is define a block (or a proc) that takes one parameter with an expression containing an underscore instead of explicitly naming a parameter. @@ -241,8 +241,9 @@ Anaphora allow us to abbreviate code, hiding parameters and temporary variables Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-10-08/metalinguistic.md b/2009-10-08/metalinguistic.md index a0c5389b..74787ec0 100644 --- a/2009-10-08/metalinguistic.md +++ b/2009-10-08/metalinguistic.md @@ -186,8 +186,9 @@ The jargon you use in your presentation should be directly supported in your pro Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-10-08/no_hire.md b/2009-10-08/no_hire.md index 5232472a..5ac7bbb3 100644 --- a/2009-10-08/no_hire.md +++ b/2009-10-08/no_hire.md @@ -7,8 +7,9 @@ Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-10-20/high_anxiety.md b/2009-10-20/high_anxiety.md index a7e55431..ba3a8d96 100644 --- a/2009-10-20/high_anxiety.md +++ b/2009-10-20/high_anxiety.md @@ -130,8 +130,9 @@ So that's what I'm going to do. Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. diff --git a/2009-12-04/kestrels_on_rails.md b/2009-12-04/kestrels_on_rails.md index a9f4d766..832372f1 100644 --- a/2009-12-04/kestrels_on_rails.md +++ b/2009-12-04/kestrels_on_rails.md @@ -43,8 +43,9 @@ Summary: In Rails, object initializers are evaluated before the object's life cy Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2009-12-09/block_styling.markdown b/2009-12-09/block_styling.markdown index 12389374..61e50ad4 100644 --- a/2009-12-09/block_styling.markdown +++ b/2009-12-09/block_styling.markdown @@ -40,8 +40,9 @@ But that's a *different* language feature. Okay, that's enough lingua obscura fo Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2010/01/beautiful_failure.markdown b/2010/01/beautiful_failure.markdown index 6714c4fb..8453f607 100644 --- a/2010/01/beautiful_failure.markdown +++ b/2010/01/beautiful_failure.markdown @@ -92,9 +92,10 @@ p.s. Beautiful Failure on [Hacker News][hn] and [Reddit][r] Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. diff --git a/2010/02/difficult_distraction.md b/2010/02/difficult_distraction.md index 054e76a0..78fb3476 100644 --- a/2010/02/difficult_distraction.md +++ b/2010/02/difficult_distraction.md @@ -128,11 +128,11 @@ Given that this is the case, I will probably limit future investment to items th **the once and future rewriter** -One possible project that has been gnawing at me is a way to write some code that executes on the server or the client identically. Obviously, I could switch to [Node.js][node] and that would be that. I could also do a rewriter that takes a subset of Ruby code and outputs some Javascript that is functionally equivalent. This is not the same thing as using Ruby to write Javascript, the Ruby code would be Ruby code that produces Ruby data, and the Javascript would be Javascript code that produces Javascript output. +One possible project that has been gnawing at me is a way to write some code that executes on the server or the client identically. Obviously, I could switch to [Node.js][node] and that would be that. I could also do a rewriter that takes a subset of Ruby code and outputs some JavaScript that is functionally equivalent. This is not the same thing as using Ruby to write JavaScript, the Ruby code would be Ruby code that produces Ruby data, and the JavaScript would be JavaScript code that produces JavaScript output. -The use case for this came up while writing a game of Go in a web client. I obviously need to validate moves to make sure they are legal. I have Ruby code to do this. I'd also like to be able to do it in the browser in Javascript. Why write the same thing twice? Furthermore, this is a very common problem, there's a lot of form validation that could be extracted from Model validation and pushed down to the browser. +The use case for this came up while writing a game of Go in a web client. I obviously need to validate moves to make sure they are legal. I have Ruby code to do this. I'd also like to be able to do it in the browser in JavaScript. Why write the same thing twice? Furthermore, this is a very common problem, there's a lot of form validation that could be extracted from Model validation and pushed down to the browser. -(This isn't a new idea for me. Some time ago I was writing an application where the subject domain involved deriving a decision tree from a set of rules. I wrote a DSL for expressing the rules that output a decision tree in JSON. I wrote a tree walker in Javascript that validated a set of answers in JSON. And then were able to solve on the client directly in Javascript or on the server by [running the same Javascript in Rhino on the JVM][rhino]. And if you want some unsolicted career advice, it is this: Be very, very certain of yourself before you propose any [Mouse Trap Architectures][mousetrap]. Amazingly, a company that runs on the most rickety of integrations between message queues and vendor lock-in products might balk at running Javascript on the JVM. It simply isn't done, Old Boy. Not a Best Practice, don't you know.) +(This isn't a new idea for me. Some time ago I was writing an application where the subject domain involved deriving a decision tree from a set of rules. I wrote a DSL for expressing the rules that output a decision tree in JSON. I wrote a tree walker in JavaScript that validated a set of answers in JSON. And then were able to solve on the client directly in JavaScript or on the server by [running the same JavaScript in Rhino on the JVM][rhino]. And if you want some unsolicted career advice, it is this: Be very, very certain of yourself before you propose any [Mouse Trap Architectures][mousetrap]. Amazingly, a company that runs on the most rickety of integrations between message queues and vendor lock-in products might balk at running JavaScript on the JVM. It simply isn't done, Old Boy. Not a Best Practice, don't you know.) So overall, I'm ok with rewriting Ruby. Not a failure, not a beautiful failure, more of a "nice but not essential." If I was starting again right now, I might still do it but be very focused on trying to find the simplest, easiest implementation of anaphora and extension methods, then write everything else as extension methods. And I would give a lot more thought to ways that rewriting code can produce a major benefit such as generating functionally equivalent code in another language. @@ -144,9 +144,10 @@ So overall, I'm ok with rewriting Ruby. Not a failure, not a beautiful failure, Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. @@ -173,7 +174,7 @@ Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raga [returning]: http://github.com/raganwald/rewrite_rails/blob/master/doc/returning.md#readme [rewrite]: http://rewrite.rubyforge.org/ [rf]: http://www.infoq.com/presentations/braithwaite-rewrite-ruby "Video of the Ruby.rewrite(Ruby) presentation" -[rhino]: http://weblog.raganwald.com/2007/07/javascript-on-jvm-in-fifteen-minutes.html "How to Run Javascript on the JVM in Just Fifteen Minutes" +[rhino]: http://weblog.raganwald.com/2007/07/javascript-on-jvm-in-fifteen-minutes.html "How to Run JavaScript on the JVM in Just Fifteen Minutes" [rr]: http://github.com/raganwald/rewrite_rails [s2p]: http://github.com/raganwald/homoiconic/blob/master/2008-11-28/you_cant_be_serious.md "You Can't be Serious!" [source]: http://github.com/raganwald/rewrite_rails/blob/master/lib/rewrite_rails/block_anaphora.rb "block_anaphora.rb" diff --git a/2010/02/head_scratching.md b/2010/02/head_scratching.md index 5c7af3e0..25991745 100644 --- a/2010/02/head_scratching.md +++ b/2010/02/head_scratching.md @@ -24,9 +24,10 @@ Ha! As [Pete Forde][peteforde] puts it, "Nothing about Ruby surprises me any mor Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. diff --git a/2010/03/significant_whitespace.md b/2010/03/significant_whitespace.md index 76d2a0a5..9d5f7f71 100644 --- a/2010/03/significant_whitespace.md +++ b/2010/03/significant_whitespace.md @@ -1,11 +1,11 @@ Significant Whitespace ====================== -I've always been a big fan of Javascript's good parts. But for various reasons, I "disappeared myself" whenever the subject of writing DOM manipulation browser code came up in a project. Sure, I did some interesting things with Javascript, like a complex form with dynamic field generation and a validation engine that ran in the browser and on the server using Rhino. (Would you believe there was nitpicking over whether this was "J2EE-compliant?") But overall, I must admit that I've not liked dealing with browser quirks and fussing with the DOM. +I've always been a big fan of JavaScript's good parts. But for various reasons, I "disappeared myself" whenever the subject of writing DOM manipulation browser code came up in a project. Sure, I did some interesting things with JavaScript, like a complex form with dynamic field generation and a validation engine that ran in the browser and on the server using Rhino. (Would you believe there was nitpicking over whether this was "J2EE-compliant?") But overall, I must admit that I've not liked dealing with browser quirks and fussing with the DOM. -But times change and we must change with them. So I decided it was time to get off the couch and embrace the DOM. My latest hobby project is a small [Goban program](http://github.com/raganwald/wood_and_stones "Wood & Stones") written for Mobile Safari on the iPad. I'm trying to really use Javascript to give the game play more of an app feel than a web page feel. That seemed to require a little more oomph than Prototype supplies, especially since I have no particular interest in making my Javascript behave more "class-like." I went in search of a new library to learn. +But times change and we must change with them. So I decided it was time to get off the couch and embrace the DOM. My latest hobby project is a small [Goban program](http://github.com/raganwald/wood_and_stones "Wood & Stones") written for Mobile Safari on the iPad. I'm trying to really use JavaScript to give the game play more of an app feel than a web page feel. That seemed to require a little more oomph than Prototype supplies, especially since I have no particular interest in making my JavaScript behave more "class-like." I went in search of a new library to learn. -The word on the street was that there were a bunch of powerful Javascript libraries kicking around, but the one thing I consistently heard about John Resig's [jQuery](http://jquery.com/ "jQuery: The Write Less, Do More, JavaScript Library") was that it "Changes the way you think about programming." And while I am far from done learning new things, I will admit that I have been provoked into wondering whether significant whitespace could be a really good thing. +The word on the street was that there were a bunch of powerful JavaScript libraries kicking around, but the one thing I consistently heard about John Resig's [jQuery](http://jquery.com/ "jQuery: The Write Less, Do More, JavaScript Library") was that it "Changes the way you think about programming." And while I am far from done learning new things, I will admit that I have been provoked into wondering whether significant whitespace could be a really good thing. Let me show you what I am thinking about. One of jQuery's consistent styles is for most 'methods' to return the receiver, which allows you to chain method calls. For example: @@ -14,7 +14,7 @@ Let me show you what I am thinking about. One of jQuery's consistent styles is f .dialog({...}) .dialog('open'); -This code invokes `text` once and `dialog` twice on `message_dialog_instance`. In Javascript, it's exactly the same as writing: +This code invokes `text` once and `dialog` twice on `message_dialog_instance`. In JavaScript, it's exactly the same as writing: message_dialog_instance.text(text).dialog({...}).dialog('open'); @@ -110,7 +110,7 @@ I don't like this. What I want is to write these methods just like I write my [h .find('.toolbar #heyButton') .attr('src', '/images/tools/empty-text-green.png'); -In other words, I want Javascript to know that when I have multiple invocations at the same level of indentation, I am invoking them on the same receiver. When I indent one more level, I am invoking them on the result of the last method invocation. +In other words, I want JavaScript to know that when I have multiple invocations at the same level of indentation, I am invoking them on the same receiver. When I indent one more level, I am invoking them on the result of the last method invocation. As I found out after publishing an earlier version of this post, jQuery does provide some help in the form of [end()](http://api.jquery.com/end). End "undoes" a selection method, restoring the previous selection. So I can now rewrite my code like this: @@ -145,7 +145,7 @@ This isn't exactly what I want but I'll take it. The final two calls to `end` ar It may seem like perhaps I should break this up into smaller methods to make it easier to understand. I am thinking that we want to break long functions up into short functions *because our languages don't give us a good way to express a verbose idea clearly in a single function*. We are not talking about 20+ lines of conditional execution here, we are talking about manipulating something that can naturally be expressed as a tree. Why not express the idea in code that looks like a tree? -I like [writing programs for people to read](http://weblog.raganwald.com/2007/04/writing-programs-for-people-to-read.html). Code that resembles what it consumes (sass), what it produces (haml), or what it manipulates (my hypothetical significant whitespace variation of Javascript) is easy to read. +I like [writing programs for people to read](http://weblog.raganwald.com/2007/04/writing-programs-for-people-to-read.html). Code that resembles what it consumes (sass), what it produces (haml), or what it manipulates (my hypothetical significant whitespace variation of JavaScript) is easy to read. As it happens, [the last time I asked about a language feature](http://github.com/raganwald/homoiconic/blob/master/2010/01/beautiful_failure.markdown "Beautiful Failure"), I was told that Smalltalk did it in 1981. Well, this time I happen to know that Smalltalk already does this. In Smalltalk, you can write: diff --git a/2010/04/blocks.md b/2010/04/blocks.md index fe8cc258..6c151048 100644 --- a/2010/04/blocks.md +++ b/2010/04/blocks.md @@ -5,7 +5,7 @@ A colleague asked me to explain the use case for blocks in Ruby. He's perfectly > A design is finished, not when there is nothing left to add, but when there is nothing left to take away —Antoine de Saint-Exupery -As it happens, I was working on [iGesture][ig], and I had the following for loop in this Javascript code: +As it happens, I was working on [iGesture][ig], and I had the following for loop in this JavaScript code: var gesture = { @@ -79,7 +79,7 @@ Now here's our refactored use of `.each`: As you can see, we have a new anonymous "inner" function. Let's look this line of code: `if ( test(e) ) return 'close';` again. Does it still return the string "close" from the function `outer` if `test(something_or_other[i])` evaluates truthy? *Or does it now return from the anonymous inner function?* -Because Javascript has functions but no blocks, you can write things like `map` or `each`, but you cannot use them in a case like this where you want to return from an outer function. `return` always returns from the innermost function, which in this simple case is the function we are using in our iterator. +Because JavaScript has functions but no blocks, you can write things like `map` or `each`, but you cannot use them in a case like this where you want to return from an outer function. `return` always returns from the innermost function, which in this simple case is the function we are using in our iterator. ![Blocks][blocks] @@ -109,7 +109,7 @@ In Ruby you could avoid a block containing non-local return: end -This "functional style" is far more elegant than short-circuiting evaluation of `.each`. That being said, Ruby and Javascript both provide built-in syntactic constructs like `for` and `if` that have block behaviour, not function behaviour. The use case for blocks is that you can write your own constructs with the same behaviour as the built-in constructs. +This "functional style" is far more elegant than short-circuiting evaluation of `.each`. That being said, Ruby and JavaScript both provide built-in syntactic constructs like `for` and `if` that have block behaviour, not function behaviour. The use case for blocks is that you can write your own constructs with the same behaviour as the built-in constructs. It's perfectly valid to avoid the built-in blocks in a program, or to choose a language that doesn't have built-in blocks. But just so we're clear, if a language has built-in blocks, I think it out to allow programmers to use them for their own constructs. If a language allows arbitrary short-circuit `return`, it ought to allow the programmer to use it anywhere. diff --git a/2010/04/igesture.md b/2010/04/igesture.md index 2a2ff756..39c4ef15 100644 --- a/2010/04/igesture.md +++ b/2010/04/igesture.md @@ -50,7 +50,7 @@ With jGesture, you ask the gesture for its name and decide what to do based on t Like jQTouch, you have to examine what you get to figure out what to do. Unlike jQTouch, you get lots more gestures. I quickly decided I wanted to use the "close" gesture to close any dialogs that appeared in my application. (There's also a close button, but I was gesture-happy). -It took about ten seconds to realize that I didn't like the callback model for this. I wanted events just like jQTouch and, incidentally, just like Javascript usually works, like `mouseup`: You handle that with `.bind`, not by calling a special mouse handling callback registrar. +It took about ten seconds to realize that I didn't like the callback model for this. I wanted events just like jQTouch and, incidentally, just like JavaScript usually works, like `mouseup`: You handle that with `.bind`, not by calling a special mouse handling callback registrar. So I wrote a little [doohicky][eventified] that would call `.gesture` and in turn would trigger custom events. My theory was that by extracting this code into its own file, you could include it alongside jGesture to get an event-driven model. Then you could write code that looked like this: diff --git a/2010/08/ouch.md b/2010/08/ouch.md index 0ad73758..8dc09681 100644 --- a/2010/08/ouch.md +++ b/2010/08/ouch.md @@ -1,13 +1,13 @@ Ouch === -I found myself writing this Javascript today: +I found myself writing this JavaScript today: framework.use(Sammy.Haml); framework.element_selector = '#main'; framework.get('#/', application.controllers.home); -After working on [jQuery Combinators](http://github.com/raganwald/JQuery-Combinators/), it physically *hurts* to deal with Plain Old Javascript Objects that don't support chaining or even `tap`. I can't allow myself to get sidetracked right now, but I am convinced that plugins and programming conventions are not the right place to solve this. +After working on [jQuery Combinators](http://github.com/raganwald/JQuery-Combinators/), it physically *hurts* to deal with Plain Old JavaScript Objects that don't support chaining or even `tap`. I can't allow myself to get sidetracked right now, but I am convinced that plugins and programming conventions are not the right place to solve this. SmallTalk had a syntax for this in the *Last Freakin' Century*: @@ -24,8 +24,9 @@ ttfn... Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2010/08/out.md b/2010/08/out.md index 59c920d6..1afb1cf6 100644 --- a/2010/08/out.md +++ b/2010/08/out.md @@ -13,7 +13,7 @@ Much hilarity ensues if one of your hapless users decides to use your library an **plus ça change (plus c'est la même chose)** -I've said this before, and even then it was hardly a grand revelation. And it has been months since I did any work with Ruby. I've had a refreshing time working with Javascript. But this morning I found myself writing this code in a [tiny little framework][roweis] I'm writing with some colleagues for a project at [Unspace Interactive][unspace]: +I've said this before, and even then it was hardly a grand revelation. And it has been months since I did any work with Ruby. I've had a refreshing time working with JavaScript. But this morning I found myself writing this code in a [tiny little framework][roweis] I'm writing with some colleagues for a project at [Unspace Interactive][unspace]: if (controller.target) { controller.render_target = function (render_target_context) { @@ -31,9 +31,9 @@ I've said this before, and even then it was hardly a grand revelation. And it ha Notice the use of [jQuery Combinators][comb]'s `ergo`? I'm the author of `ergo`, and I want to use my own tools. But jQuery plugins work just like Ruby's global class definitions. If I extend `jQuery.fn` to include `ergo`, every user of my framework gets it whether they like it or not. -Regrettably, I have to remove any use of jQuery Combinators from [Roweis][roweis]. And if one day you look at my code and wonder why I don't seem to be eating my own dog food, the reason is that although I like the taste, I don't want to force-feed it to everyone else. jQuery Combinators belongs in the application Javascript, not the framework code. +Regrettably, I have to remove any use of jQuery Combinators from [Roweis][roweis]. And if one day you look at my code and wonder why I don't seem to be eating my own dog food, the reason is that although I like the taste, I don't want to force-feed it to everyone else. jQuery Combinators belongs in the application JavaScript, not the framework code. -Not a big deal in itself, but this really emphasizes that if you want change, you have to really change. Javascript in the Browser is completely different from Ruby on the Server in all the ways that don't matter a damn. +Not a big deal in itself, but this really emphasizes that if you want change, you have to really change. JavaScript in the Browser is completely different from Ruby on the Server in all the ways that don't matter a damn. *fin* @@ -43,9 +43,10 @@ Not a big deal in itself, but this really emphasizes that if you want change, yo Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. diff --git a/2010/08/wood_and_stones.md b/2010/08/wood_and_stones.md index ed0239fb..f15a062c 100644 --- a/2010/08/wood_and_stones.md +++ b/2010/08/wood_and_stones.md @@ -63,9 +63,10 @@ So, enjoy Go! Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. diff --git a/2010/09/concept.md b/2010/09/concept.md index 7063e796..fe823817 100644 --- a/2010/09/concept.md +++ b/2010/09/concept.md @@ -62,7 +62,7 @@ So here we have two products and two concepts. In one case, the product inspired There. I've freely confessed that I create concept software for no more reason than that I am curious to see how it turns out. Does it pay off one day in better products or better skills on my part? I don't know and I'd be surprised if someone can make a good case for it. Lots of people make lots of money without a shred of curiosity about implementing half of monads in Ruby or adding combinators to jQuery. -Is curiosity some noble, lofty purpose? I don't think so, and there's a lot of curiosity out there. Curiosity about whether jQuery Mobile will catch on is no less important than curiosity about whether PHP programmers can be induced to write more elegant OO programs. Curiosity about whether someone can bank a few million dollars a week from a game written in Java is no less noble than curiosity about whether Javascript applications on the client can have a simple, Sinatra-like architecture. +Is curiosity some noble, lofty purpose? I don't think so, and there's a lot of curiosity out there. Curiosity about whether jQuery Mobile will catch on is no less important than curiosity about whether PHP programmers can be induced to write more elegant OO programs. Curiosity about whether someone can bank a few million dollars a week from a game written in Java is no less noble than curiosity about whether JavaScript applications on the client can have a simple, Sinatra-like architecture. Ultimately, I happen to be curious about certain things, and my curiosity demands that I get some answers. There's no other lofty, admirable explanation for why I write on things like [Recursive Combinators](http://github.com/raganwald/froobie/blob/master/lib/froobie/recursive_combinators.rb "lib/froobie/recursive_combinators.rb at master from raganwald's froobie - GitHub") when I could be contributing to a software product. diff --git a/2010/09/jquery_predicates.md b/2010/09/jquery_predicates.md index 9e6a52cf..6549122d 100644 --- a/2010/09/jquery_predicates.md +++ b/2010/09/jquery_predicates.md @@ -59,9 +59,10 @@ Enjoy! Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. diff --git a/2010/09/meld.md b/2010/09/meld.md index e083960e..85a0c7e2 100644 --- a/2010/09/meld.md +++ b/2010/09/meld.md @@ -45,7 +45,7 @@ In which case: meld({foo: 'fu', etc: { one: 1 }}, {bar: 'bar', etc: { two: 2 }}) // => { foo: 'fu', bar: 'bar', etc: { one: 1, two: 2 } } -Note that `meld` requires [Functional Javascript][j] and that `meld` is purely functional, unlike `$.extend` which destructively modifies its first argument. +Note that `meld` requires [Functional JavaScript][j] and that `meld` is purely functional, unlike `$.extend` which destructively modifies its first argument. *UPDATE* @@ -55,9 +55,10 @@ It turns out that `$.extend` does what I wanted provided you pass true as the fi Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. diff --git a/2010/10/let.md b/2010/10/let.md index b880d991..953fadd9 100644 --- a/2010/10/let.md +++ b/2010/10/let.md @@ -1,7 +1,7 @@ Let's make closures easy === -In [Gah! I Still Don't Know Closures][eee_closures], Chris Strom refactored this Javascript code: +In [Gah! I Still Don't Know Closures][eee_closures], Chris Strom refactored this JavaScript code: Frame.prototype.remove = function () { for (var i=0; i Practice explaining code to others is one of the keys to improving your ability to write self-explanatory code. -This brings us to the key question: *When do we create a new variable in Javascript*? Most of you probably consider this question ridiculously trivial to understand, but let's work out how to explain it. You never know when you'll have to explain your code to someone else. The ideal code is self-explanatory, and practice explaining code to others is one of the keys to improving your ability to write self-explanatory code. +This brings us to the key question: *When do we create a new variable in JavaScript*? Most of you probably consider this question ridiculously trivial to understand, but let's work out how to explain it. You never know when you'll have to explain your code to someone else. The ideal code is self-explanatory, and practice explaining code to others is one of the keys to improving your ability to write self-explanatory code. Let's look at this code again, simplified greatly: @@ -88,7 +88,7 @@ Let's look at this code again, simplified greatly: } } -It appears as if we're using the `var` keyword to create a new variable each time through the for loop. *But this is not so*. To understand this issue, we really have to understand when the Javascript interpreter creates a new variable and when it simply assigns a value to an existing variable. +It appears as if we're using the `var` keyword to create a new variable each time through the for loop. *But this is not so*. To understand this issue, we really have to understand when the JavaScript interpreter creates a new variable and when it simply assigns a value to an existing variable. [][thrush] @@ -98,9 +98,9 @@ When is a new variable created? Well, the interpreter might do one thing, it mig *A new variable is created for each parameter and every variable declared with the `var` keyword every time a function is invoked.* -Note that if a function is invoked 100 times, each of its parameters will actually create 100 different new variables even though all 100 share the same name in the code. We say that parameters in Javascript have *function scope*. My mental model is that when a function is invoked, Javascript creates a new dictionary of variables and values. The first thing it does is make entries for each of the parameters. Some other part of the program might have variables with the same name (common variables like "i," "key," or "value" might exist in many different dictionaries), but since those variables are written in different dictionaries, they don't conflict with our variables. +Note that if a function is invoked 100 times, each of its parameters will actually create 100 different new variables even though all 100 share the same name in the code. We say that parameters in JavaScript have *function scope*. My mental model is that when a function is invoked, JavaScript creates a new dictionary of variables and values. The first thing it does is make entries for each of the parameters. Some other part of the program might have variables with the same name (common variables like "i," "key," or "value" might exist in many different dictionaries), but since those variables are written in different dictionaries, they don't conflict with our variables. -Variables created with the `var` keyword also have function scope. When the Javascript interpreter is first parsing a function declaration, it searches for `var` keywords. These are "hoisted" to the beginning of the function that immediately encloses them. So if you write this: +Variables created with the `var` keyword also have function scope. When the JavaScript interpreter is first parsing a function declaration, it searches for `var` keywords. These are "hoisted" to the beginning of the function that immediately encloses them. So if you write this: function declareConjunctions () { var conjunctions = ['before', 'after', 'below', 'above', 'inside', 'outside']; @@ -130,13 +130,13 @@ The interpreter rearranges things so it looks like this: Now it's very obvious that there is one and only only one `conjunction` variable created when you invoke `declareConjunctions`. The fact that the `var` keyword was placed inside a for loop is irrelevant. After the interpreter has created dictionary entries for each of the parameters, it creates dictionary entries for each of the "hoisted" variables declared with `var`. -So is a dictionary a scope? Not quite. We've written about creating variables. What about looking up their values? When a variable is used, javascript looks it up in the current dictionary. If it isn't in the dictionary, Javascript looks in the dictionary for whatever function was invoked when the current function was *created*. Not invoked, created. If it isn't there, Javascript repeats the process until it is looking in a top-level dictionary that represents code running when Javascript was first invoked. +So is a dictionary a scope? Not quite. We've written about creating variables. What about looking up their values? When a variable is used, javascript looks it up in the current dictionary. If it isn't in the dictionary, JavaScript looks in the dictionary for whatever function was invoked when the current function was *created*. Not invoked, created. If it isn't there, JavaScript repeats the process until it is looking in a top-level dictionary that represents code running when JavaScript was first invoked. The dictionaries can be thought to nest, but I prefer to think of them as having a parent-child relationship. Invoking a function creates a new dictionary, but the new dictionary is the child of the code that created the function, not the code that invokes the function. The chain of dictionaries is called a *scope*. In practice, making dictionaries children of the dictionary for the function that creates another function makes it easy to determine where a variable is defined by examining the lexical form of the source code statically. Thus, this style of scoping is called **Lexical Scope**. -We take lexical scope for granted with Javascript: When our function refers to the `conjunction` variable, we look for its definition right there in the code surrounding the function. That's lexical scoping in action. (There is another way to do things, Dynamic Scoping, where a scope is the child of the scope of the code that invokes a function. Im that case, `conjunction` would have to be defined by whatever code invokes `"christian mcbride".after("jaco pastorius")`. If that seems impossibly contrived, consider that exception handling is dynamically scoped and people find ways to make it useful.) +We take lexical scope for granted with JavaScript: When our function refers to the `conjunction` variable, we look for its definition right there in the code surrounding the function. That's lexical scoping in action. (There is another way to do things, Dynamic Scoping, where a scope is the child of the scope of the code that invokes a function. Im that case, `conjunction` would have to be defined by whatever code invokes `"christian mcbride".after("jaco pastorius")`. If that seems impossibly contrived, consider that exception handling is dynamically scoped and people find ways to make it useful.) **solving the problem** @@ -218,13 +218,13 @@ I'm not alone in my madness. Here is a common abbreviation pattern: })(jQuery, Functional); -This binds `$` and `F` without conflicting with other libraries that may want to define `$` or `F` for their own purposes. The only trouble with structuring things as parameters is that in Javascript, the definition of the parameter and the value it is passed can be a long way away from each other. +This binds `$` and `F` without conflicting with other libraries that may want to define `$` or `F` for their own purposes. The only trouble with structuring things as parameters is that in JavaScript, the definition of the parameter and the value it is passed can be a long way away from each other. [][thrush] **let's get closer** -If you prefer to keep your parameters closer to the values you are going to bind, we can use a Javascript version of the [Thrush Combinator][thrushcombinator], `let`: +If you prefer to keep your parameters closer to the values you are going to bind, we can use a JavaScript version of the [Thrush Combinator][thrushcombinator], `let`: var let = function () { var body = arguments[arguments.length-1]; @@ -274,7 +274,7 @@ Is `let` worth the bother? I think so. Although I've been using anonymous functi And I suppose we shouldn't be making long functions, but even on a short function I prefer the values and the bindings be kept close together. Declaring variables inside a scope avoids that issue, but I strongly prefer using parameters when I want to create a new scope. The parameter variable is very close to the `function` keyword what establishes the scope, and that makes the code very easy to understand. -But the very best reason for using `let` is that [Javascript 1.7 includes a `let` keyword][js17]! Knowing that you'll be using `let` eventually, why get in the habit now? +But the very best reason for using `let` is that [JavaScript 1.7 includes a `let` keyword][js17]! Knowing that you'll be using `let` eventually, why get in the habit now? --- diff --git a/2010/10/vc_without_m.md b/2010/10/vc_without_m.md index 9b8ac9e1..41352e5c 100644 --- a/2010/10/vc_without_m.md +++ b/2010/10/vc_without_m.md @@ -7,7 +7,7 @@ This essay gives some background on two separate architecture patterns: The sepa This essay's thesis is that when separating domain logic from application logic, domain logic can be implemented as a RESTful domain logic server. When doing so, the application can be implemented as an application server with models replaced by proxies to the domain server's resources such as with ActiveResource in Rails. -The application can also be implemented as a single page interface in Javascript. SPI applications can use the PVC architecture to create proxies. In simple, coarse-grained cases, SPI applications can forgo models and tightly couple the controllers to the domain logic server, a practice known as the (¬M)VC architecture. MVC and/or PVC is a better fit for SPI applications that are fine-grained and resemble desktop applications rather than web applications. +The application can also be implemented as a single page interface in JavaScript. SPI applications can use the PVC architecture to create proxies. In simple, coarse-grained cases, SPI applications can forgo models and tightly couple the controllers to the domain logic server, a practice known as the (¬M)VC architecture. MVC and/or PVC is a better fit for SPI applications that are fine-grained and resemble desktop applications rather than web applications. **a long and barely relevant anecdote** (feel free to skip this or come back to it later) @@ -84,7 +84,7 @@ An improved architecture for application servers is that the models in the appli The benefit of using PVC is that the concern of how to communicate with the domain logic server or servers is separated from controller logic. What if communication is over HTTP but you want to change it to RabbitMQ when loads increase? PVC manages this transition easily. Likewise, if the application grows and some resources are obtained from one server and some from another, this distinction is managed by the proxies and not by the controllers that use them. -Up to now we've discussed a two server architecture. There's a domain server and there's an application server. Implied in this architecture is a third entity, a client web browser. Another architecture choice is a domain server and a client web *application*, where the application is written in Javascript, ActionScript, or some other technology. This essay will confine itself to talking about Javascript [Single Page Interface][spi] ("SPI") applications. +Up to now we've discussed a two server architecture. There's a domain server and there's an application server. Implied in this architecture is a third entity, a client web browser. Another architecture choice is a domain server and a client web *application*, where the application is written in JavaScript, ActionScript, or some other technology. This essay will confine itself to talking about JavaScript [Single Page Interface][spi] ("SPI") applications. If the SPI application features certain types of interactivity, implementing PVC makes sense. For example, if the application polls for model changes and may update a variety of view with the updated data, models are necessary and a proxy library such as [backbone.js][backbone] will do the trick. Such an application still benefits from separating controllers and views from models, so you end up with proxies, views, and controllers as separate entities with separate responsibilities. @@ -135,7 +135,7 @@ Thus, (¬M)VC is a good fit when the controllers and interaction is expected to We've had a brief look at two separate architecture patterns: The separation of domain logic from application logic, and the implementation of an application using the model-view-controller ("MVC") pattern. We've looked more closely at implementing domain logic in a RESTful domain logic server and implementing the UI in an MVC application server with models replaced by proxies. -We've also seen that the application can be implemented as a single page interface in Javascript. In simple, coarse-grained cases, SPI applications can forgo models and tightly couple the controllers to the domain logic server in (¬M)VC style. Applications that are fine-grained and resemble desktop applications rather than web applications should prefer PVC style. +We've also seen that the application can be implemented as a single page interface in JavaScript. In simple, coarse-grained cases, SPI applications can forgo models and tightly couple the controllers to the domain logic server in (¬M)VC style. Applications that are fine-grained and resemble desktop applications rather than web applications should prefer PVC style. --- diff --git a/2010/11/docco.md b/2010/11/docco.md index 0933bad6..205863b4 100644 --- a/2010/11/docco.md +++ b/2010/11/docco.md @@ -1,23 +1,23 @@ A new way to think about programs === -[Coffeescript][coffee] is an excellent "little" programming language created by Jeremy Ashkenas. I've been meaning to write nice things about Coffeescript for a while, but quite honestly it speaks for itself. Really! Have a look at it, and especially *try programming with it*. If you go to the Coffeescript home page, you can try Coffeescript right in your browser. Coffeescript support is baked into [Node.js][node]. How much easier do you want it to be? +[CoffeeScript][coffee] is an excellent "little" programming language created by Jeremy Ashkenas. I've been meaning to write nice things about CoffeeScript for a while, but quite honestly it speaks for itself. Really! Have a look at it, and especially *try programming with it*. If you go to the CoffeeScript home page, you can try CoffeeScript right in your browser. CoffeeScript support is baked into [Node.js][node]. How much easier do you want it to be? -Going from Javascript to Coffeescript today feels a lot like going from Java to Ruby felt to me in early 2003. I know this may surprise people used to my wordiness, but I honestly can't think of anything to say that will be more persuasive than the experience of simply writing Coffeescript code. But however exciting that is, I haven't written about it. +Going from JavaScript to CoffeeScript today feels a lot like going from Java to Ruby felt to me in early 2003. I know this may surprise people used to my wordiness, but I honestly can't think of anything to say that will be more persuasive than the experience of simply writing CoffeeScript code. But however exciting that is, I haven't written about it. ![Fiorenzato Coffee Machine Ducale](https://www.coffeeitalia.co.uk/prodimages/fiorenzato/professional/ducale/Ducale-fronte_300.jpg) -Every time I've started a blog post about Coffeescript, it felt vaguely like I was recycling some old post about Ruby or about meta-programming, or about the power of writing and reading succinct code. Such things may be news to a new generation of programmers, but when I write them, I feel like one of those self-help Gurus who keep re-selling the same damn book over and over again: *The One Minute Manager's Seven Habits for Getting Chicken Soup for the Mars and Venus Bipolar Lisp Programmer's Soul Done, [The Hard Way][lpthw].* +Every time I've started a blog post about CoffeeScript, it felt vaguely like I was recycling some old post about Ruby or about meta-programming, or about the power of writing and reading succinct code. Such things may be news to a new generation of programmers, but when I write them, I feel like one of those self-help Gurus who keep re-selling the same damn book over and over again: *The One Minute Manager's Seven Habits for Getting Chicken Soup for the Mars and Venus Bipolar Lisp Programmer's Soul Done, [The Hard Way][lpthw].* So I keep putting off writing about Coffescript, hoping that one day I'll have something insightful to say about it, or hoping that I'll discover something about it that "piques my intellectual curiosity." It isn't that anything is missing, it's just that it works and works well. **illiteracy** -Last week, I tried something else Jeremy has written, and I think it's even more exciting than Coffeescript. If I were Steve Jobs, I'd tell you there's "one more thing." I'm talking about **[Docco][docco]**. Docco is a tool for writing code in the [Literate Programming][lp] style. You can read about literate programming for yourself, but the idea is to write a program in a conversational, narrative style. Your write it the way you would explain your idea to another human, and a tool converts your literate programming into the "tangled" representation that the computer understands. +Last week, I tried something else Jeremy has written, and I think it's even more exciting than CoffeeScript. If I were Steve Jobs, I'd tell you there's "one more thing." I'm talking about **[Docco][docco]**. Docco is a tool for writing code in the [Literate Programming][lp] style. You can read about literate programming for yourself, but the idea is to write a program in a conversational, narrative style. Your write it the way you would explain your idea to another human, and a tool converts your literate programming into the "tangled" representation that the computer understands. > The literate programming paradigm... represents a move away from writing programs in the manner and order imposed by the computer, and instead enables programmers to develop programs in the order demanded by the logic and flow of their thoughts. Literate programs are written as an uninterrupted exposition of logic in an ordinary human language, much like the text of an essay, in which macros which hide abstractions and traditional source code are included. --[Wikipedia][lp] -This isn't translating English into machine instructions, you still write code (Javascript or Coffeescript in the case of Docco), this is actually a question of the way you organize your program. We programmers have many different forces acting on the way we organize a program. +This isn't translating English into machine instructions, you still write code (JavaScript or CoffeeScript in the case of Docco), this is actually a question of the way you organize your program. We programmers have many different forces acting on the way we organize a program. One force acting on program organization is the *archeological accident*: We write our programs, make changes, add features, and if we do nothing else the resulting program's organization is strongly influenced by the chronology of our changes.This is why it's always easy to criticize an existing program. The existing program is usually adorned with the warts of its archeology, and in hindsight it's easy to see how if you were starting from scratch with the final "requirements," you would design something cleaner and more elegant than the program that evolved over time. @@ -68,7 +68,7 @@ Docco has affected the way I think about programming. Literate programming may n Thanks, Jeremy! -p.s. *Coffeescript is about to get **even more interesting**. Be sure to check the [Coffeescript site][coffee] for updates and/or announcements over the next few days...* +p.s. *CoffeeScript is about to get **even more interesting**. Be sure to check the [CoffeeScript site][coffee] for updates and/or announcements over the next few days...* --- diff --git a/2011/01/anything_to_declare.md b/2011/01/anything_to_declare.md index 8c8956b9..24c0d529 100644 --- a/2011/01/anything_to_declare.md +++ b/2011/01/anything_to_declare.md @@ -3,7 +3,7 @@ Anything to Declare? "Separation of Concerns" is often given as a strong motivating force when organizing code. I certainly think about it a lot (and it comes up fairly regularly when I try to organize my thoughts in essay form, e.g. [My Favourite Interview Question][q] and [Why Why Functional Programming Matters Matters][ww]). -As you've no doubt heard 97 bajillion times from me, I'm on a team that has been developing a new Javascript framework for writing Single Page Interface ("SPI") applications called [Faux][f]. I just finished a refactoring session, and I'd like to sketch what changed and how it's relevant to separating concerns. The main idea is that in order to implement a new feature, route helpers for templates, I needed to factor declarations out of what were formerly opaque functions. Once the declarations were factored out, I could implement the new feature and apply some convention over configuration to make it palatable. +As you've no doubt heard 97 bajillion times from me, I'm on a team that has been developing a new JavaScript framework for writing Single Page Interface ("SPI") applications called [Faux][f]. I just finished a refactoring session, and I'd like to sketch what changed and how it's relevant to separating concerns. The main idea is that in order to implement a new feature, route helpers for templates, I needed to factor declarations out of what were formerly opaque functions. Once the declarations were factored out, I could implement the new feature and apply some convention over configuration to make it palatable. **disclaimer** @@ -29,7 +29,7 @@ This is why example apps are essential. When you're working with something very So, last night when I got home from the gym I decided to take a little un-billable time and put it towards fixing this problem. I started by developing an even simpler example to serve as a test bed: [Misadventure][m]. Misadventure is a gross over-simplification of text-based [adventure][a] games (you can play Misadventure [here][play]). You've been abducted by aliens and you wake up in a corn maze. Naturally, you have to find your way out, one step at a time. -The key benefit of Misadventure for the purpose of working on helpers for routes is that it is route-heavy: Every location in the corn maze has its own id and the game can reconstruct the maze from a seed that is provided to Javascript's PRNG `Math.random`. There's not much else going on, so working on Misadventure makes it easy to focus on the feature we need. +The key benefit of Misadventure for the purpose of working on helpers for routes is that it is route-heavy: Every location in the corn maze has its own id and the game can reconstruct the maze from a seed that is provided to JavaScript's PRNG `Math.random`. There's not much else going on, so working on Misadventure makes it easy to focus on the feature we need. **the situation** @@ -211,7 +211,7 @@ Such inferences place a heavy reliance on convention over configuration, of cour I wouldn't hold this out as a case study in refactoring by any stretch, Faux is still struggling to escape its embryonic sack. But it is a reminder that when facing something that seems impossibly ugly to implement, the answer may be factoring things on different lines, especially (as in this case) when something can be transformed from imperative to declarative form. -My feeling is that it is nicer to work with declarations than with imperative functions or methods. In an imperative language like Javascript or ruby, declarations need some kind of engine to be useful. However, once you have things in declarative form, you have a lot of flexibility about how to apply them to the code. +My feeling is that it is nicer to work with declarations than with imperative functions or methods. In an imperative language like JavaScript or ruby, declarations need some kind of engine to be useful. However, once you have things in declarative form, you have a lot of flexibility about how to apply them to the code. In this case, turning functions into declarations lets us build controller methods and `route_to` helpers, and it helps us perform more convention over configuration. @@ -219,9 +219,10 @@ In this case, turning functions into declarations lets us build controller metho Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. diff --git a/2011/01/misadventure_part_i.md b/2011/01/misadventure_part_i.md index 0855695e..cfb6480a 100644 --- a/2011/01/misadventure_part_i.md +++ b/2011/01/misadventure_part_i.md @@ -5,7 +5,7 @@ Misadventure, Part I: Overview **introduction** -[Misadventure][play] is a little game in the style of [Adventure][a]. Misadventure is written in Javascript and runs entirely in the browser. Misadventure is written in standard Model-View-Controller style, making heavy use of the [Faux][f] and [Backbone.js][b] libraries. In this series of posts I will give you a tour of Misadventure's [code][source], showing how it uses Faux to structure its routes and templates as well as how it uses Backbone.js to organize its models and interactive view code. +[Misadventure][play] is a little game in the style of [Adventure][a]. Misadventure is written in JavaScript and runs entirely in the browser. Misadventure is written in standard Model-View-Controller style, making heavy use of the [Faux][f] and [Backbone.js][b] libraries. In this series of posts I will give you a tour of Misadventure's [code][source], showing how it uses Faux to structure its routes and templates as well as how it uses Backbone.js to organize its models and interactive view code. This is Part I, wherein we look at the game and its controller. In [Part II][pii], we'll start our examination of controller methods with a look at `controller.wake()`. In [Part III][piii], we'll look at a controller method that wires a model, a collection, and a view up to a template. In [Part IV][piv], we'll do a double-take and talk about loading classes. @@ -28,7 +28,7 @@ The fragment has changed again, now it's [#/42492610216140747/7624672284554068][ -And the fragment has changed yet again, now it's [#/42492610216140747/3916709493533819][l3]. We just moved North. What happens if we move South? Let's investigate. First, each possible move is a standard HTML link. There's no magic Javascript. Let's look at the link to move South. It's the same URL, but the fragment looks familiar: [#/42492610216140747/5682321739861935][l2]. That's interesting, it's the exact same fragment that we were on a move ago. +And the fragment has changed yet again, now it's [#/42492610216140747/3916709493533819][l3]. We just moved North. What happens if we move South? Let's investigate. First, each possible move is a standard HTML link. There's no magic JavaScript. Let's look at the link to move South. It's the same URL, but the fragment looks familiar: [#/42492610216140747/5682321739861935][l2]. That's interesting, it's the exact same fragment that we were on a move ago. And looking at the page, we see that the link to move South is colored red. There's no special magic going on. It's a standard link and it goes to a place that's still in the browser's history, so it is styled differently, just like any other link. We'll see how that works later, but let's try something else. @@ -206,7 +206,7 @@ We haven't explained anything else about views, models, parsing parameters out o If you're comfortable with a web framework like Ruby on Rails, you already know what a controller method is: A controller method is the application code that services a request or performs an action. All of the controller methods defined in Misadventure display something in the page using a template. -These three controller methods are all associated with routes. Controller methods can also be invoked directly in Javascript. For example, invoking `controller.location({ seed: '42492610216140747', id: '7624672284554068' })` has exactly teh same effect as directing your browser to [#/42492610216140747/7624672284554068](http://unspace.github.com/misadventure/#/42492610216140747/7624672284554068). Faux even updates the browser's location bar so that bookmarking and navigation works correctly. +These three controller methods are all associated with routes. Controller methods can also be invoked directly in JavaScript. For example, invoking `controller.location({ seed: '42492610216140747', id: '7624672284554068' })` has exactly teh same effect as directing your browser to [#/42492610216140747/7624672284554068](http://unspace.github.com/misadventure/#/42492610216140747/7624672284554068). Faux even updates the browser's location bar so that bookmarking and navigation works correctly. If you dive deeply into Faux, you'll also discover that controller methods can be associated with events or with DOM elements, such that inserting a DOM element with a specific `id` and/or classes automatically invokes a controller method to populate it with children. Misadventure doesn't use any of these techniques. They aren't "advanced" or "complicated," but Misadventure is a small app and doesn't need to use every tool in the toolbox. @@ -314,9 +314,10 @@ In [Part II][pii] of this series, we'll look at `controller.wake()` in detail, e Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. diff --git a/2011/01/misadventure_part_ii.md b/2011/01/misadventure_part_ii.md index 88b3427a..190fcd6c 100644 --- a/2011/01/misadventure_part_ii.md +++ b/2011/01/misadventure_part_ii.md @@ -5,7 +5,7 @@ Misadventure, Part II: controller.wake() **introduction** -[Misadventure][play] is a little game in the style of [Adventure][a]. Misadventure is written in Javascript and runs entirely in the browser. Misadventure is written in standard Model-View-Controller style, making heavy use of the [Faux][f] and [Backbone.js][b] libraries. In this series of posts I will give you a tour of Misadventure's [code][source], showing how it uses Faux to structure its routes and templates as well as how it uses Backbone.js to organize its models and interactive view code. +[Misadventure][play] is a little game in the style of [Adventure][a]. Misadventure is written in JavaScript and runs entirely in the browser. Misadventure is written in standard Model-View-Controller style, making heavy use of the [Faux][f] and [Backbone.js][b] libraries. In this series of posts I will give you a tour of Misadventure's [code][source], showing how it uses Faux to structure its routes and templates as well as how it uses Backbone.js to organize its models and interactive view code. @@ -158,9 +158,10 @@ In [Part III][piii] of this series, we will look at `controller.location(...)` i Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. diff --git a/2011/01/misadventure_part_iii.md b/2011/01/misadventure_part_iii.md index b6ee5a83..c0c1a06c 100644 --- a/2011/01/misadventure_part_iii.md +++ b/2011/01/misadventure_part_iii.md @@ -5,7 +5,7 @@ Misadventure, Part III: Models and Views **introduction** -[Misadventure][play] is a little game in the style of [Adventure][a]. Misadventure is written in Javascript and runs entirely in the browser. Misadventure is written in standard Model-View-Controller style, making heavy use of the [Faux][f] and [Backbone.js][b] libraries. In this series of posts I will give you a tour of Misadventure's [code][source], showing how it uses Faux to structure its routes and templates as well as how it uses Backbone.js to organize its models and interactive view code. +[Misadventure][play] is a little game in the style of [Adventure][a]. Misadventure is written in JavaScript and runs entirely in the browser. Misadventure is written in standard Model-View-Controller style, making heavy use of the [Faux][f] and [Backbone.js][b] libraries. In this series of posts I will give you a tour of Misadventure's [code][source], showing how it uses Faux to structure its routes and templates as well as how it uses Backbone.js to organize its models and interactive view code. @@ -319,7 +319,7 @@ Let's peek at the first few lines of `location.haml` and see if anything is diff Hmm! In `wake.haml` we accessed the parameters as locals. In a template associated with a view class, the instance of the view is available as `this`. Good style is to access the parameters as `this.options` instead of as locals. For example, the seed would be `this.options.seed`. -Functions like `this.text_description()` are methods on the view instance, of course. A view becomes a good way to organize helper functions and unobtrusive Javascript for a template. Here's `LocationView` showing the helper methods that are designed to be called from within the template: +Functions like `this.text_description()` are methods on the view instance, of course. A view becomes a good way to organize helper functions and unobtrusive JavaScript for a template. Here's `LocationView` showing the helper methods that are designed to be called from within the template: window.LocationView = Backbone.View.extend({ @@ -473,9 +473,10 @@ Next, in [Part IV][piv], we'll do a double-take and talk about loading classes. Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. diff --git a/2011/02/misadventure_part_iv.md b/2011/02/misadventure_part_iv.md index 8fb5072c..9cebc2b7 100644 --- a/2011/02/misadventure_part_iv.md +++ b/2011/02/misadventure_part_iv.md @@ -5,7 +5,7 @@ Misadventure, Part IV: Class Loading (Updated!) **introduction** -[Misadventure][play] is a little game in the style of [Adventure][a]. Misadventure is written in Javascript and runs entirely in the browser. Misadventure is written in standard Model-View-Controller style, making heavy use of the [Faux][f] and [Backbone.js][b] libraries. In this series of posts I will give you a tour of Misadventure's [code][source], showing how it uses Faux to structure its routes and templates as well as how it uses Backbone.js to organize its models and interactive view code. +[Misadventure][play] is a little game in the style of [Adventure][a]. Misadventure is written in JavaScript and runs entirely in the browser. Misadventure is written in standard Model-View-Controller style, making heavy use of the [Faux][f] and [Backbone.js][b] libraries. In this series of posts I will give you a tour of Misadventure's [code][source], showing how it uses Faux to structure its routes and templates as well as how it uses Backbone.js to organize its models and interactive view code. @@ -14,7 +14,7 @@ This is Part IV, wherein we'll do a double-take and talk about loading classes. index.html --- -Let's flash back to [index.html][index]: Here's the code that loads our Javascript files for us: +Let's flash back to [index.html][index]: Here's the code that loads our JavaScript files for us: @@ -41,12 +41,12 @@ Let's flash back to [index.html][index]: Here's the code that loads our Javascri You'll notice we load exactly one file for Misadventure itself, [controller.js][cjs]. We've read about the controller, that's fine. But we've also read about some other backbone classes in the application like `Location`, `LocationCollection`, `LocationView`, and `BedView`. Where are they? -The answer is that `Location`, `LocationCollection`, and `LocationView` are in the file [location.js][ljs], and `BedView` is in the file [bed_view.js][bvjs], which Faux loaded for us. But we haven't loaded these Javascript files. How does Faux know to load them? +The answer is that `Location`, `LocationCollection`, and `LocationView` are in the file [location.js][ljs], and `BedView` is in the file [bed_view.js][bvjs], which Faux loaded for us. But we haven't loaded these JavaScript files. How does Faux know to load them? loading javascript by convention --- -Faux is able to load Javascript files automatically, provided they are named appropriately. Faux may try to load a Javascript file if it is looking for a class but that class hasn't been defined. Let's say Faux is looking for a class named `WunderBar` while defining a method named `show_bar`. Faux's rules are: +Faux is able to load JavaScript files automatically, provided they are named appropriately. Faux may try to load a JavaScript file if it is looking for a class but that class hasn't been defined. Let's say Faux is looking for a class named `WunderBar` while defining a method named `show_bar`. Faux's rules are: 1. If there is a class named `WunderBar`, use it. 2. If there is no class named `WunderBar`, but there is a file named `show_bar.js`, load that file. @@ -144,7 +144,7 @@ To enable both: **summary** -If you place your classes in files named after your methods or after the classes themselves, Faux will load them for you and save you the trouble of explicitly loading every file. You can always override this behaviour by explicitly loading Javascript files and/or by explicitly forbidding Faux from trying to load Javascript files by convention. +If you place your classes in files named after your methods or after the classes themselves, Faux will load them for you and save you the trouble of explicitly loading every file. You can always override this behaviour by explicitly loading JavaScript files and/or by explicitly forbidding Faux from trying to load JavaScript files by convention. [index]: http://github.com/unspace/misadventure/tree/master/index.html diff --git a/2011/08/gotcha.md b/2011/08/gotcha.md index fb723942..87145a75 100644 --- a/2011/08/gotcha.md +++ b/2011/08/gotcha.md @@ -36,8 +36,9 @@ Were you expecting an empty selection? *Me neither*. Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2011/08/hungarian.md b/2011/08/hungarian.md index 65f66b73..e618bb1d 100644 --- a/2011/08/hungarian.md +++ b/2011/08/hungarian.md @@ -25,8 +25,9 @@ Sure, a generator could be used to DRY up the code. But before we get there... W Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2011/11/COMEFROM.md b/2011/11/COMEFROM.md index b7112ba3..f9780b90 100644 --- a/2011/11/COMEFROM.md +++ b/2011/11/COMEFROM.md @@ -142,7 +142,7 @@ So the ThinkWare partners put Williams in charge of small projects where he coul Sometimes they'd return to another project and try to implement some of his ideas, with middling success. But as long as the developers learned something from the experience, the ThinkWare partners figured that pairing Williams with a colleague from time to time was a win. -The last time I saw Williams, he had grown an afro and was carrying a tennis racket, obviously on his way to a game. We chatted for a while, and he excitedly told me about a framework he was developing for implementing really [lightweight decoupling][yadc] in some weird dialect of Javascript. +The last time I saw Williams, he had grown an afro and was carrying a tennis racket, obviously on his way to a game. We chatted for a while, and he excitedly told me about a framework he was developing for implementing really [lightweight decoupling][yadc] in some weird dialect of JavaScript. I never saw him again, but I like to imagine that he's still at ThinkWare, writing solid code and evangelizing his ideas to anyone who will listen. @@ -152,8 +152,9 @@ I never saw him again, but I like to imagine that he's still at ThinkWare, writi Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2011/11/YouAreDaChef.md b/2011/11/YouAreDaChef.md index 7a398aa8..7b5b192c 100644 --- a/2011/11/YouAreDaChef.md +++ b/2011/11/YouAreDaChef.md @@ -1,4 +1,4 @@ -Separating Concerns in Coffeescript using Aspect-Oriented Programming +Separating Concerns in CoffeeScript using Aspect-Oriented Programming --- Modern object-oriented software design [favours composition over inheritance][coi] and celebrates code that is [DRY][dry]. The idea is to separate each object's concerns and responsibility into separate units of code, each of which have a single responsibility. When two different types of objects share the same functionality, they do not repeat their implementation, instead they share their implementation. @@ -185,8 +185,9 @@ This article is loosely based on [Aspect-Oriented Programming in Ruby using Comb Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2011/11/mockingbirds.md b/2011/11/mockingbirds.md index dd75a0c8..edcd94d7 100644 --- a/2011/11/mockingbirds.md +++ b/2011/11/mockingbirds.md @@ -226,8 +226,9 @@ _More on combinators_: [Kestrels](http://github.com/raganwald/homoiconic/tree/ma Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2011/11/sans-titre.md b/2011/11/sans-titre.md index f09c2018..97ace91f 100644 --- a/2011/11/sans-titre.md +++ b/2011/11/sans-titre.md @@ -3,11 +3,11 @@ ![Sans Titre](http://upload.wikimedia.org/wikipedia/en/f/fe/Mondrian_Composition_II_in_Red%2C_Blue%2C_and_Yellow.jpg) (*"Sans Titre," also called "Composition II in Red, Blue and Yellow" by Piet Mondrian, 1930*) -I have been programming in [Coffeescript][cs] lately. In my opinion, it does a good job of paving over a lot of Javascript's accidental complexity. Another thing that I find interesting about it is that it encourages a certain kind of programming style. I like that. As Alan Perlis said, "A language that doesn't change the way you think about programming is not worth learning." Coffeescript definitely changes the way I think about programming-in-the-small, about the way I express concepts in syntax. +I have been programming in [CoffeeScript][cs] lately. In my opinion, it does a good job of paving over a lot of JavaScript's accidental complexity. Another thing that I find interesting about it is that it encourages a certain kind of programming style. I like that. As Alan Perlis said, "A language that doesn't change the way you think about programming is not worth learning." CoffeeScript definitely changes the way I think about programming-in-the-small, about the way I express concepts in syntax. [cs]: http://jashkenas.github.com/coffee-script/ -One of the big ways Coffeescript differs from Javascript in that its control structures are whitespace-significant. Instead of: +One of the big ways CoffeeScript differs from JavaScript in that its control structures are whitespace-significant. Instead of: if (foo) { // ... @@ -72,7 +72,7 @@ Indentation matters. ## Method calls are whitespace-blind -Now let's look at methods and properties in Coffeescript. Recall that with `if` statements, indentation matters. With method calls, *it doesn't*. Consider this expression: +Now let's look at methods and properties in CoffeeScript. Recall that with `if` statements, indentation matters. With method calls, *it doesn't*. Consider this expression: console?.log [1..3].concat([4..6]).map((x) -> x * x).filter((x) -> x % 2 is 0).reverse() @@ -132,11 +132,11 @@ Says to me that the `butFirst()` lines all belong to `console?.log [1..3]`. The .filter((x) -> x % 2 is 0) .reverse() -It says that each line belongs to the previous line, because our rule with outlines is that *when something is indented, it belongs to its parent*. Let's imagine for a moment that Coffeescript treated method calls and property syntax using that rule. +It says that each line belongs to the previous line, because our rule with outlines is that *when something is indented, it belongs to its parent*. Let's imagine for a moment that CoffeeScript treated method calls and property syntax using that rule. -## A hypothetical whitespace rule for Coffeescript +## A hypothetical whitespace rule for CoffeeScript -In our hypothetical version of Coffeescript, methods and properties will use our outline rule: If you have a property reference or method call, it either belongs to the thing to its left, as in `[1..3].concat([4..6])` or belongs to its parent, as in: +In our hypothetical version of CoffeeScript, methods and properties will use our outline rule: If you have a property reference or method call, it either belongs to the thing to its left, as in `[1..3].concat([4..6])` or belongs to its parent, as in: [1..3] .concat([4..6]) @@ -221,11 +221,11 @@ We get both kinds of behaviour and our intent is always clear, regardless of whe One thing that expressive languages like Ruby, Smalltalk, and Lisp teach us is that many 'design patterns' are actually language smells. The 'fluent interface' design patterns is just that: A sign that a language is missing a cascading message feature. -This feature can easily be added to Coffeescript, without a new operator, by simply making whitespace *more significant*. +This feature can easily be added to CoffeeScript, without a new operator, by simply making whitespace *more significant*. --- -([Discuss][d] on Hacker News. A relevant Coffeescript feature request: [Improve chaining syntax][1495]. And back in March of 2010, I wrote "[Significant Whitespace][sw]") +([Discuss][d] on Hacker News. A relevant CoffeeScript feature request: [Improve chaining syntax][1495]. And back in March of 2010, I wrote "[Significant Whitespace][sw]") [d]: http://news.ycombinator.com/item?id=3296202 [1495]: https://github.com/jashkenas/coffee-script/issues/1495 diff --git a/2011/12/jargon.md b/2011/12/jargon.md index c3dfc146..e8709634 100644 --- a/2011/12/jargon.md +++ b/2011/12/jargon.md @@ -176,8 +176,9 @@ As noted on [reddit][reddit], many of the coding conventions that CoffeeScript p Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), CoffeeScript/JavaScript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/2011/value.markdown b/2011/value.markdown index d7c304cc..cf894cf7 100644 --- a/2011/value.markdown +++ b/2011/value.markdown @@ -3,17 +3,17 @@ On the interwebs, I noticed some discussions (e.g. [proggit][p] and [hacker news][hn]) about another discussion ([serverside][ss]) about whether Java the language uses [Pass by Reference or Pass by Value][es]. It's an [old, old argument][arg], and the `tl;dr` is that Java and most other modern languages pass references to objects by value, which means it uses Pass by Value. It is absolutely wrong to assert that Java uses Pass by Reference. -While it's tempting to bash Java programmers for the misconceptions, I think that's just confirmation bias. I have absolutely no faith that a statistically significant sample of Ruby or Javascript programmers would contain a larger proportion of people who get the terms right. +While it's tempting to bash Java programmers for the misconceptions, I think that's just confirmation bias. I have absolutely no faith that a statistically significant sample of Ruby or JavaScript programmers would contain a larger proportion of people who get the terms right. Which, for the most part, probably demonstrates that the issue just isn't that important. If it were, nobody would be able to write code without figuring the names out. The fact is, if you understand what your language *does*, knowing the correct names is only important when talking to another programmer. I doubt this comes up much, since two programmers talking about Ruby or Java or javascript would both have the same understanding of what happens with parameters passed to functions/methods. -In my opinion, trouble over terms is more important when moving from a language with one set of semantics to another. For example, when moving from Java to Javascript, not understanding closures would make for some error-laden conversations with experienced Javascript programmers. +In my opinion, trouble over terms is more important when moving from a language with one set of semantics to another. For example, when moving from Java to JavaScript, not understanding closures would make for some error-laden conversations with experienced JavaScript programmers. ![Duke Mom](http://silveiraneto.net/wp-content/uploads/2008/05/duke_mom.png) -But for those of you who haven't seen any of the [Aleph-0][a] explanations, here is the Aleph-One-th explanation of why Java (and Ruby and Javascript and most other modern programming languages) is Pass by Value. +But for those of you who haven't seen any of the [Aleph-0][a] explanations, here is the Aleph-One-th explanation of why Java (and Ruby and JavaScript and most other modern programming languages) is Pass by Value. **explanation** @@ -75,9 +75,10 @@ True, but every now and then [some idiot][r] ventures into the tomb and awakens Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. diff --git a/README.markdown b/README.markdown index 4d17a19d..34ff913c 100644 --- a/README.markdown +++ b/README.markdown @@ -72,8 +72,9 @@ I am [Reg Braithwaite](http://reginald.braythwayt.com/). You can reach me by ema Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/dumping_ground/more_signifiant_whitespace.md b/dumping_ground/more_signifiant_whitespace.md index 7d716c00..401cd780 100644 --- a/dumping_ground/more_signifiant_whitespace.md +++ b/dumping_ground/more_signifiant_whitespace.md @@ -1,4 +1,4 @@ -Given `framework.use(Sammy.Haml)`, `framework` is a first class object. Why isn't `.use(Sammy.Haml)` a first class object? Using [Functional Javascript](http://osteele.com/sources/javascript/functional/), you can kinda-sorta fake it with a string lambda, but there are scoping issues: `".use(Sammy.Haml)"` is equivalent to `function (_) { return _.use(Sammy.Haml); }`. +Given `framework.use(Sammy.Haml)`, `framework` is a first class object. Why isn't `.use(Sammy.Haml)` a first class object? Using [Functional JavaScript](http://osteele.com/sources/javascript/functional/), you can kinda-sorta fake it with a string lambda, but there are scoping issues: `".use(Sammy.Haml)"` is equivalent to `function (_) { return _.use(Sammy.Haml); }`. Implicit mapping is kind of interesting. Maybe a cascade is really a way of saying "apply this object to all of these functions. This implies widening and destructuring. So: diff --git a/dumping_ground/sammy_backbone_roweis.md b/dumping_ground/sammy_backbone_roweis.md index 4af3460e..ec2eb85c 100644 --- a/dumping_ground/sammy_backbone_roweis.md +++ b/dumping_ground/sammy_backbone_roweis.md @@ -10,7 +10,7 @@ Sammy, Backbone, and Roweis > Cheers, > Orlin -Thanks your your email, Orin! And thank you for permission to answer your question in a public forum. The short answer is, although the [Backbone](http://documentcloud.github.com/backbone/ "Backbone.js") library provides excellent support for building Models, Views, and Controllers in Javascript, and although it also provides support for routing and history, we are very happy to continue to work on Roweis. +Thanks your your email, Orin! And thank you for permission to answer your question in a public forum. The short answer is, although the [Backbone](http://documentcloud.github.com/backbone/ "Backbone.js") library provides excellent support for building Models, Views, and Controllers in JavaScript, and although it also provides support for routing and history, we are very happy to continue to work on Roweis. We don't think Roweis supplants Backbone or Sammy. We do think Roweis *complements* Backbone for a certain class of [Single Page Interface](http://itsnat.sourceforge.net/php/spim/spi_manifesto_en.php) ("SPI") applications. diff --git a/dumping_ground/second_hand_news.md b/dumping_ground/second_hand_news.md index a1bc65c4..61676bcd 100644 --- a/dumping_ground/second_hand_news.md +++ b/dumping_ground/second_hand_news.md @@ -9,8 +9,9 @@ Avi Bryant, courtesy of [Giles Bowkett](http://gilesbowkett.blogspot.com/2009/02 Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file diff --git a/dumping_ground/string_to_proc.rb b/dumping_ground/string_to_proc.rb index f8c06ca5..9f0192d0 100644 --- a/dumping_ground/string_to_proc.rb +++ b/dumping_ground/string_to_proc.rb @@ -2,7 +2,7 @@ # # See http://weblog.raganwald.com/2007/10/stringtoproc.html # -# Ported from the String Lambdas in Oliver Steele's Functional Javascript +# Ported from the String Lambdas in Oliver Steele's Functional JavaScript # http://osteele.com/sources/javascript/functional/ # # This work is licensed under the MIT License: diff --git a/homoiconic.markdown b/homoiconic.markdown index 420cd1bb..081b0ac3 100644 --- a/homoiconic.markdown +++ b/homoiconic.markdown @@ -52,8 +52,9 @@ I am [Reg Braithwaite](http://reginald.braythwayt.com/). You can reach me by ema Recent work: -* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one convenient and inexpensive e-book. -* [Katy](http://github.com/raganwald/Katy), fluent CoffeeScript and JavaScript using combinators. -* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), Coffeescript/Javascript method combinations for Underscore projects. +* [Kestrels, Quirky Birds, and Hopeless Egocentricity](http://leanpub.com/combinators), all of my writing about combinators, collected into one e-book. +* [What I've Learned From Failure](http://leanpub.com/shippingsoftware), my very best essays about getting software from ideas to shipping products, collected into one e-book. +* [Katy](http://github.com/raganwald/Katy), a library for writing fluent CoffeeScript and JavaScript using combinators. +* [YouAreDaChef](http://github.com/raganwald/YouAreDaChef), a library for writing method combinations for CoffeeScript and JavaScript projects. Follow [me](http://reginald.braythwayt.com) on [Twitter](http://twitter.com/raganwald). I work with [Unspace Interactive](http://unspace.ca), and I like it. \ No newline at end of file