Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

better links on each page

  • Loading branch information...
commit 3292cdee3a065af89f31ce47d31619076eefedde 1 parent f6fc370
@raganwald raganwald authored
Showing with 403 additions and 322 deletions.
  1. +4 −3 2008-10-27/unfold.markdown
  2. +4 −3 2008-10-28/and_and_or.markdown
  3. +4 −3 2008-10-29/kestrel.markdown
  4. +4 −3 2008-10-29/you_keep_using_that_idiom.markdown
  5. +4 −3 2008-10-30/thrush.markdown
  6. +4 −3 2008-10-30/why_im_using_git.markdown
  7. +4 −3 2008-10-31/songs_of_the_cardinal.markdown
  8. +5 −4 2008-11-03/with_unhygienic_and_call-by-name_semantics_in_rewrite.markdown
  9. +4 −3 2008-11-04/quirky_birds_and_meta_syntactic_programming.markdown
  10. +4 −3 2008-11-04/unary_ampersand_in_ruby.markdown
  11. +4 −3 2008-11-07/README.md
  12. +4 −3 2008-11-07/comment_on_implementing_advice.markdown
  13. +4 −3 2008-11-07/from_birds_that_compose_to_method_advice.markdown
  14. +4 −3 2008-11-09/proc_arity.markdown
  15. +4 −3 2008-11-12/combinator_chemistry.md
  16. +4 −3 2008-11-12/the_obdurate_kestrel.md
  17. +4 −3 2008-11-16/joy.md
  18. +4 −3 2008-11-21/cdr.md
  19. +5 −4 2008-11-21/templates_double_mockingbirds_and_helpers.md
  20. +5 −4 2008-11-23/recursive_combinators.md
  21. +4 −3 2008-11-26/practical_recursive_combinators.md
  22. +1 −1  2008-11-26/string_to_proc.rb
  23. +1 −1  2008-11-28/string_to_proc.rb
  24. +4 −3 2008-11-28/you_cant_be_serious.md
  25. +4 −3 2008-12-01/keep_your_privates_to_yourself.md
  26. +4 −3 2008-12-03/rcall.md
  27. +4 −3 2008-12-09/nuno_job_on_rewrite.md
  28. +4 −3 2008-12-1/keep_your_privates_to_yourself.md
  29. +4 −3 2008-12-12/fibonacci.md
  30. +4 −3 2008-12-16/welcome.md
  31. +4 −3 2008-12-17/another_fibonacci.md
  32. +5 −4 2008-12-18/called_by_name.md
  33. +4 −3 2008-12-23/bah_humbug.md
  34. +4 −3 2009-01-02/flight_of_the_phoenix.md
  35. +4 −3 2009-01-05/andand_even_more.md
  36. +4 −3 2009-01-06/rewrite_rails.md
  37. +4 −3 2009-01-12/mundane.md
  38. +4 −3 2009-01-13/maybe.md
  39. +4 −3 2009-01-21/old.md
  40. +4 −3 2009-02-02/hopeless_egocentricity.md
  41. +4 −3 2009-02-12/a_question.md
  42. +4 −3 2009-03-03/circular.md
  43. +4 −3 2009-03-07/surreal.md
  44. +4 −3 2009-03-12/another_question.md
  45. +4 −3 2009-04-08/sick.md
  46. +4 −3 2009-04-09/my_objection_to_sum.md
  47. +4 −3 2009-04-15/keywords.md
  48. +4 −3 2009-04-17/eggs.md
  49. +4 −3 2009-04-28/extension_methods.md
  50. +4 −3 2009-05-01/optimism.md
  51. +4 −3 2009-05-13/tough_crowd.md
  52. +4 −3 2009-06-02/functional_complexity.md
  53. +4 −3 2009-06-26/no_hire.md
  54. +4 −3 2009-06-29/wrapping_combinators.md
  55. +4 −3 2009-08-29/returning.md
  56. +5 −4 2009-09-22/anaphora.md
  57. +4 −3 2009-10-08/metalinguistic.md
  58. +4 −3 2009-10-08/no_hire.md
  59. +4 −3 2009-10-20/high_anxiety.md
  60. +4 −3 2009-12-04/kestrels_on_rails.md
  61. +4 −3 2009-12-09/block_styling.markdown
  62. +4 −3 2010/01/beautiful_failure.markdown
  63. +8 −7 2010/02/difficult_distraction.md
  64. +4 −3 2010/02/head_scratching.md
  65. +6 −6 2010/03/significant_whitespace.md
  66. +3 −3 2010/04/blocks.md
  67. +1 −1  2010/04/igesture.md
  68. +6 −5 2010/08/ouch.md
  69. +7 −6 2010/08/out.md
  70. +4 −3 2010/08/wood_and_stones.md
  71. +1 −1  2010/09/concept.md
  72. +4 −3 2010/09/jquery_predicates.md
  73. +5 −4 2010/09/meld.md
  74. +12 −12 2010/10/let.md
  75. +3 −3 2010/10/vc_without_m.md
  76. +6 −6 2010/11/docco.md
  77. +7 −6 2011/01/anything_to_declare.md
  78. +7 −6 2011/01/misadventure_part_i.md
  79. +5 −4 2011/01/misadventure_part_ii.md
  80. +6 −5 2011/01/misadventure_part_iii.md
  81. +5 −5 2011/02/misadventure_part_iv.md
  82. +4 −3 2011/08/gotcha.md
  83. +4 −3 2011/08/hungarian.md
  84. +5 −4 2011/11/COMEFROM.md
  85. +5 −4 2011/11/YouAreDaChef.md
  86. +4 −3 2011/11/mockingbirds.md
  87. +8 −8 2011/11/sans-titre.md
  88. +4 −3 2011/12/jargon.md
  89. +7 −6 2011/value.markdown
  90. +4 −3 README.markdown
  91. +1 −1  dumping_ground/more_signifiant_whitespace.md
  92. +1 −1  dumping_ground/sammy_backbone_roweis.md
  93. +4 −3 dumping_ground/second_hand_news.md
  94. +1 −1  dumping_ground/string_to_proc.rb
  95. +4 −3 homoiconic.markdown
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
9 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
9 2008-11-21/templates_double_mockingbirds_and_helpers.md
@@ -309,7 +309,7 @@ Have fun!
<font color="red">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).</font>
-*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.
View
9 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.
View
7 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.
View
2  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
View
2  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
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
9 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
9 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
7 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.
View
15 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"
View
7 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.
View
12 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:
View
6 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 &#8212;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.
View
2  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:
View
11 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.
View
13 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.
View
7 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.
View
2  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.
View
7 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.
View
9 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.
View
24 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<this.elements.length; i++) {
@@ -66,9 +66,9 @@ Hmmm.
**the problem**
-Let's start by diagnosing the issue. We're defining six new methods for `String` instances. Unlike Ruby, methods in Javascript and functions in Javascript are the exact same thing, so we can also say that we're creating six new functions, one for each element in the conjunctions array. Note that it's technically wrong to say that we are creating one function. We're creating six different functions, one each time the Javascript interpreter encounters the `function` keyword.
+Let's start by diagnosing the issue. We're defining six new methods for `String` instances. Unlike Ruby, methods in JavaScript and functions in JavaScript are the exact same thing, so we can also say that we're creating six new functions, one for each element in the conjunctions array. Note that it's technically wrong to say that we are creating one function. We're creating six different functions, one each time the JavaScript interpreter encounters the `function` keyword.
-Inside each of our six functions, we refer to the variable `conjunction`. Javascript correctly notes that this refers to the variable defined outside of the function in the line `var conjunction = conjunctions[i];`. `conjunction` has a different value each time we create a new function, so we might think that when each of our functions are invoked they will refer to its value when the function was created.
+Inside each of our six functions, we refer to the variable `conjunction`. JavaScript correctly notes that this refers to the variable defined outside of the function in the line `var conjunction = conjunctions[i];`. `conjunction` has a different value each time we create a new function, so we might think that when each of our functions are invoked they will refer to its value when the function was created.
This is not the case. Each of our functions simply stores a reference to the variable `conjunction` and when the function is invoked, it looks up the value at invocation time, not definition time. Its value at function definition time is irrelevant.
@@ -76,7 +76,7 @@ The easiest way to fix this problem is to make sure that each of the six functio
> 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.
[<img src="http://2.bp.blogspot.com/_JrXOqYWNfjc/S0n5yp4kheI/AAAAAAAAB14/id9j_d7tYIQ/s400/Redwing_Arlesey_2010Jan10.jpg" height="432" width="500"/>][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.
[<img src="http://1.bp.blogspot.com/_JrXOqYWNfjc/S0n5UufzeoI/AAAAAAAAB1I/Y5OpeIWPU2c/s1600/Fieldfare1_Arlesey_2010Jan10.jpg" height="427" width="500"/>][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?
---
View
6 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.
---
View
12 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...*
---
View
13 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.
View
13 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][