scriptorium 0.6.1 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (358) hide show
  1. checksums.yaml +4 -4
  2. data/assets/icons/social/reddit.png +0 -0
  3. data/assets/icons/social/x-logo.png +0 -0
  4. data/assets/imagenotfound.jpg +0 -0
  5. data/bin/sblog +84 -5
  6. data/bin/scriptorium +1 -0
  7. data/doc/anti-amnesia/20250727-054000-scriptorium-overview.md +0 -1
  8. data/doc/anti-amnesia/20250727-123000-anti-amnesia-conventions.md +0 -29
  9. data/doc/anti-amnesia/20250727-172600-cursor-rbenv-ruby-version-mystery.md +0 -19
  10. data/doc/anti-amnesia/20250727-172900-ai-cognitive-assessment-capabilities.md +1 -1
  11. data/doc/anti-amnesia/20250728-124243-aaa-syntax-clarification.md +1 -1
  12. data/doc/anti-amnesia/20250729-210000-reddit-autopost-integration-complete.md +1 -1
  13. data/doc/anti-amnesia/20250804-190500-cognitive-loop-bug.md +0 -10
  14. data/doc/anti-amnesia/20250804-190700-anti-amnesia-timestamping-fix.md +1 -4
  15. data/doc/anti-amnesia/20250901-211714-codemirror-integration-and-web-tests.md +172 -0
  16. data/doc/anti-amnesia/20250902-002402-backup-restore-system.md +126 -0
  17. data/doc/anti-amnesia/20250907-203339-backup-metadata-implementation.md +66 -0
  18. data/doc/imported/0001-elixir-conf-2014/metadata.txt +7 -0
  19. data/doc/imported/0001-elixir-conf-2014/post.html +37 -0
  20. data/doc/imported/0001-elixir-conf-2014/source.lt3 +22 -0
  21. data/doc/imported/0002-programmers-and-word-processing/metadata.txt +7 -0
  22. data/doc/imported/0002-programmers-and-word-processing/post.html +192 -0
  23. data/doc/imported/0002-programmers-and-word-processing/source.lt3 +146 -0
  24. data/doc/imported/0003-how-to-turn-your-brain-sideways/metadata.txt +7 -0
  25. data/doc/imported/0003-how-to-turn-your-brain-sideways/post.html +60 -0
  26. data/doc/imported/0003-how-to-turn-your-brain-sideways/source.lt3 +40 -0
  27. data/doc/imported/0004-upcoming-lone-star-ruby-conference/metadata.txt +7 -0
  28. data/doc/imported/0004-upcoming-lone-star-ruby-conference/post.html +42 -0
  29. data/doc/imported/0004-upcoming-lone-star-ruby-conference/source.lt3 +24 -0
  30. data/doc/imported/0005-elixir-conf-2015-announced/metadata.txt +7 -0
  31. data/doc/imported/0005-elixir-conf-2015-announced/post.html +30 -0
  32. data/doc/imported/0005-elixir-conf-2015-announced/source.lt3 +16 -0
  33. data/doc/imported/0006-ruby-for-dinosaurs/metadata.txt +7 -0
  34. data/doc/imported/0006-ruby-for-dinosaurs/post.html +43 -0
  35. data/doc/imported/0006-ruby-for-dinosaurs/source.lt3 +27 -0
  36. data/doc/imported/0007-phoenix-isnt-rails/metadata.txt +7 -0
  37. data/doc/imported/0007-phoenix-isnt-rails/post.html +116 -0
  38. data/doc/imported/0007-phoenix-isnt-rails/source.lt3 +87 -0
  39. data/doc/imported/0008-concerning-the-term-monkeypatching/metadata.txt +7 -0
  40. data/doc/imported/0008-concerning-the-term-monkeypatching/post.html +129 -0
  41. data/doc/imported/0008-concerning-the-term-monkeypatching/source.lt3 +92 -0
  42. data/doc/imported/0009-announcement-coming-soon/metadata.txt +7 -0
  43. data/doc/imported/0009-announcement-coming-soon/post.html +33 -0
  44. data/doc/imported/0009-announcement-coming-soon/source.lt3 +19 -0
  45. data/doc/imported/0010-immutable-data-ditching-the-wax-tablet/metadata.txt +7 -0
  46. data/doc/imported/0010-immutable-data-ditching-the-wax-tablet/post.html +175 -0
  47. data/doc/imported/0010-immutable-data-ditching-the-wax-tablet/source.lt3 +139 -0
  48. data/doc/imported/0011-computer-science-as-a-lost-art/metadata.txt +7 -0
  49. data/doc/imported/0011-computer-science-as-a-lost-art/post.html +139 -0
  50. data/doc/imported/0011-computer-science-as-a-lost-art/source.lt3 +104 -0
  51. data/doc/imported/0012-ruby-day-in-turin-italy/metadata.txt +7 -0
  52. data/doc/imported/0012-ruby-day-in-turin-italy/post.html +42 -0
  53. data/doc/imported/0012-ruby-day-in-turin-italy/source.lt3 +24 -0
  54. data/doc/imported/0013-rubyday-was-a-success/metadata.txt +7 -0
  55. data/doc/imported/0013-rubyday-was-a-success/post.html +44 -0
  56. data/doc/imported/0013-rubyday-was-a-success/source.lt3 +27 -0
  57. data/doc/imported/0014-working-on-the-blogging-software/metadata.txt +7 -0
  58. data/doc/imported/0014-working-on-the-blogging-software/post.html +63 -0
  59. data/doc/imported/0014-working-on-the-blogging-software/source.lt3 +41 -0
  60. data/doc/imported/0015-ok-its-not-really-a-lost-art/metadata.txt +7 -0
  61. data/doc/imported/0015-ok-its-not-really-a-lost-art/post.html +172 -0
  62. data/doc/imported/0015-ok-its-not-really-a-lost-art/source.lt3 +134 -0
  63. data/doc/imported/0016-an-in-operator-for-ruby/metadata.txt +7 -0
  64. data/doc/imported/0016-an-in-operator-for-ruby/post.html +155 -0
  65. data/doc/imported/0016-an-in-operator-for-ruby/source.lt3 +106 -0
  66. data/doc/imported/0017-the-forgotten-mathematician/metadata.txt +7 -0
  67. data/doc/imported/0017-the-forgotten-mathematician/post.html +161 -0
  68. data/doc/imported/0017-the-forgotten-mathematician/source.lt3 +119 -0
  69. data/doc/imported/0018-ruby-puns/metadata.txt +7 -0
  70. data/doc/imported/0018-ruby-puns/post.html +46 -0
  71. data/doc/imported/0018-ruby-puns/source.lt3 +28 -0
  72. data/doc/imported/0019-custom-exceptions-via-metaprogramming/metadata.txt +7 -0
  73. data/doc/imported/0019-custom-exceptions-via-metaprogramming/post.html +138 -0
  74. data/doc/imported/0019-custom-exceptions-via-metaprogramming/source.lt3 +101 -0
  75. data/doc/imported/0020-fffff/metadata.txt +7 -0
  76. data/doc/imported/0020-fffff/post.html +24 -0
  77. data/doc/imported/0020-fffff/source.lt3 +12 -0
  78. data/doc/imported/0021-trying-ror-yet-again/metadata.txt +7 -0
  79. data/doc/imported/0021-trying-ror-yet-again/post.html +26 -0
  80. data/doc/imported/0021-trying-ror-yet-again/source.lt3 +12 -0
  81. data/doc/imported/0023-doctor-sleep/metadata.txt +7 -0
  82. data/doc/imported/0023-doctor-sleep/post.html +63 -0
  83. data/doc/imported/0023-doctor-sleep/source.lt3 +44 -0
  84. data/doc/imported/0024-just-a-test/metadata.txt +7 -0
  85. data/doc/imported/0024-just-a-test/post.html +24 -0
  86. data/doc/imported/0024-just-a-test/source.lt3 +12 -0
  87. data/doc/imported/import_summary.txt +98 -0
  88. data/doc/livetext-informal-spec.txt +65 -0
  89. data/doc/myuserdoc/ch-0.lt3 +31 -0
  90. data/doc/myuserdoc/ch-1.lt3 +37 -0
  91. data/doc/myuserdoc/ch-10.lt3 +22 -0
  92. data/doc/myuserdoc/ch-2.lt3 +37 -0
  93. data/doc/myuserdoc/ch-3.lt3 +19 -0
  94. data/doc/myuserdoc/ch-4.lt3 +43 -0
  95. data/doc/myuserdoc/ch-5.lt3 +22 -0
  96. data/doc/myuserdoc/ch-6.lt3 +19 -0
  97. data/doc/myuserdoc/ch-7.lt3 +16 -0
  98. data/doc/myuserdoc/ch-8.lt3 +13 -0
  99. data/doc/myuserdoc/ch-9.lt3 +19 -0
  100. data/doc/myuserdoc/tweak.rb +18 -0
  101. data/doc/{userdoc-toc.txt → myuserdoc/userdoc-toc.txt} +27 -27
  102. data/doc/old-posts/0001-elixir-conf-2014.lt3 +24 -0
  103. data/doc/old-posts/0002-programmers-and-word-processing.lt3 +150 -0
  104. data/doc/old-posts/0003-how-to-turn-your-brain-sideways.lt3 +43 -0
  105. data/doc/old-posts/0004-upcoming-lone-star-ruby-conference.lt3 +26 -0
  106. data/doc/old-posts/0005-elixir-conf-2015-announced.lt3 +17 -0
  107. data/doc/old-posts/0006-ruby-for-dinosaurs.lt3 +30 -0
  108. data/doc/old-posts/0007-phoenix-isnt-rails.lt3 +90 -0
  109. data/doc/old-posts/0008-concerning-the-term-monkeypatching.lt3 +105 -0
  110. data/doc/old-posts/0009-announcement-coming-soon.lt3 +20 -0
  111. data/doc/old-posts/0010-immutable-data-ditching-the-wax-tablet.lt3 +142 -0
  112. data/doc/old-posts/0011-computer-science-as-a-lost-art.lt3 +117 -0
  113. data/doc/old-posts/0012-ruby-day-in-turin-italy.lt3 +26 -0
  114. data/doc/old-posts/0013-rubyday-was-a-success.lt3 +28 -0
  115. data/doc/old-posts/0014-working-on-the-blogging-software.lt3 +42 -0
  116. data/doc/old-posts/0015-ok-its-not-really-a-lost-art.lt3 +137 -0
  117. data/doc/old-posts/0016-an-in-operator-for-ruby.lt3 +142 -0
  118. data/doc/old-posts/0017-the-forgotten-mathematician.lt3 +129 -0
  119. data/doc/old-posts/0018-ruby-puns.lt3 +31 -0
  120. data/doc/old-posts/0019-custom-exceptions-via-metaprogramming.lt3 +116 -0
  121. data/doc/old-posts/0021-trying-ror-yet-again.lt3 +35 -0
  122. data/doc/old-posts/0023-doctor-sleep.lt3 +43 -0
  123. data/doc/old-posts/0024-just-a-test.lt3 +12 -0
  124. data/doc/old-posts/0025-trying-another-post.lt3 +12 -0
  125. data/doc/old-repo +1 -0
  126. data/doc/reddit_integration.md +2 -2
  127. data/doc/user.lt3 +0 -3
  128. data/lib/scriptorium/api.rb +1811 -78
  129. data/lib/scriptorium/banner_svg.rb +55 -68
  130. data/lib/scriptorium/contract.rb +3 -2
  131. data/lib/scriptorium/exceptions.rb +133 -102
  132. data/lib/scriptorium/helpers.rb +282 -82
  133. data/lib/scriptorium/post.rb +81 -17
  134. data/lib/scriptorium/reddit.rb +1 -1
  135. data/lib/scriptorium/repo.rb +478 -164
  136. data/lib/scriptorium/standard_files.rb +30 -396
  137. data/lib/scriptorium/support/common_js/clipboard.js +35 -0
  138. data/lib/scriptorium/support/common_js/content-loader.js +187 -0
  139. data/lib/scriptorium/support/common_js/navigation.js +52 -0
  140. data/lib/scriptorium/support/common_js/syntax-highlighting.js +27 -0
  141. data/lib/scriptorium/support/config/reddit_template.txt +17 -0
  142. data/{test/scriptorium-TEST-1754622690-146/views/sample → lib/scriptorium/support}/config/social.txt +1 -0
  143. data/lib/scriptorium/support/highlight/css.txt +2 -0
  144. data/lib/scriptorium/support/highlight/custom.css +119 -0
  145. data/lib/scriptorium/support/highlight/js.txt +1 -0
  146. data/lib/scriptorium/support/post_index/config.txt +15 -0
  147. data/lib/scriptorium/support/post_index/style.css +55 -0
  148. data/lib/scriptorium/support/templates/index_entry.lt3 +16 -0
  149. data/{test/scriptorium-TEST-1754622690-146/themes/standard/initial/post.lt3 → lib/scriptorium/support/templates/initial_post.lt3} +5 -5
  150. data/lib/scriptorium/support/templates/post.lt3 +104 -0
  151. data/{test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/header.txt → lib/scriptorium/support/theme/header.lt3} +1 -1
  152. data/lib/scriptorium/theme.rb +83 -70
  153. data/lib/scriptorium/version.rb +2 -2
  154. data/lib/scriptorium/view.rb +194 -149
  155. data/lib/scriptorium.rb +24 -1
  156. data/lib/skeleton.rb +4 -1
  157. data/scriptorium.gemspec +2 -1
  158. data/test/WEB_INTEGRATION_README.md +196 -0
  159. data/test/all +40 -0
  160. data/test/banner_svg/unit.rb +267 -35
  161. data/test/config/deployment.txt +5 -0
  162. data/test/integration/integration_test.rb +7 -7
  163. data/test/integration/preview_flow_test.rb +94 -0
  164. data/test/livetext_plugin_test.rb +453 -182
  165. data/test/manual/banner-tests/test01.html +82 -18
  166. data/test/manual/banner-tests/test02.html +82 -18
  167. data/test/manual/banner-tests/test03.html +82 -18
  168. data/test/manual/banner-tests/test04.html +89 -25
  169. data/test/manual/banner-tests/test05.html +89 -25
  170. data/test/manual/banner-tests/test06.html +89 -25
  171. data/test/manual/banner-tests/test07.html +89 -25
  172. data/test/manual/banner-tests/test08.html +82 -18
  173. data/test/manual/banner-tests/test09.html +82 -18
  174. data/test/manual/banner-tests/test10.html +82 -18
  175. data/test/manual/banner-tests/test11.html +82 -18
  176. data/test/manual/banner-tests/test12.html +82 -18
  177. data/test/manual/banner-tests/test13.html +82 -18
  178. data/test/manual/banner-tests/test14.html +82 -18
  179. data/test/manual/banner-tests/test15.html +82 -18
  180. data/test/manual/banner-tests/test16.html +82 -18
  181. data/test/manual/banner-tests/test17.html +82 -18
  182. data/test/manual/banner-tests/test18.html +90 -26
  183. data/test/manual/banner-tests/test19.html +90 -26
  184. data/test/manual/banner-tests/test20.html +90 -26
  185. data/test/manual/banner-tests/test21.html +90 -26
  186. data/test/manual/banner-tests/test22.html +90 -26
  187. data/test/manual/banner-tests/test23.html +90 -26
  188. data/test/manual/banner-tests/test24.html +90 -26
  189. data/test/manual/banner-tests/test25.html +89 -25
  190. data/test/manual/banner_environment.rb +15 -2
  191. data/test/manual/codemirror_demo.html +773 -0
  192. data/test/manual/create_posts_for_web.rb +114 -0
  193. data/test/manual/preview_manual_test.rb +129 -0
  194. data/test/manual/test_banner_features.rb +14 -14
  195. data/test/manual/test_banner_integration.rb +115 -0
  196. data/test/manual/test_banner_radial.rb +87 -0
  197. data/test/manual/test_syntax_highlighting.rb +60 -40
  198. data/test/support/preview_utils.rb +88 -0
  199. data/test/test_gem_assets.rb +48 -0
  200. data/test/test_helpers.rb +10 -0
  201. data/test/tui_editor_integration_test.rb +15 -15
  202. data/test/tui_integration_test.rb +687 -441
  203. data/test/unit/api.rb +757 -37
  204. data/test/unit/asset_management.rb +195 -221
  205. data/test/unit/backup_test.rb +451 -0
  206. data/test/unit/contract_test.rb +1 -23
  207. data/test/unit/core.rb +415 -61
  208. data/test/unit/deploy_config_test.rb +248 -0
  209. data/test/unit/deploy_test.rb +312 -21
  210. data/test/unit/edit_post_test.rb +168 -0
  211. data/test/unit/gem_asset_management.rb +36 -42
  212. data/test/unit/livetext_basic.rb +23 -35
  213. data/test/unit/livetext_compatibility.rb +7 -14
  214. data/test/unit/parse_cmd_test.rb +260 -0
  215. data/test/unit/{symlink_test.rb → permalink_copy_test.rb} +47 -49
  216. data/test/unit/post.rb +91 -26
  217. data/test/unit/post_index_config_test.rb +258 -0
  218. data/test/unit/post_state_helpers_test.rb +137 -0
  219. data/test/unit/read_commented_file_test.rb +8 -6
  220. data/test/unit/repo.rb +75 -54
  221. data/test/unit/social_test.rb +41 -44
  222. data/test/unit/syntax_highlighting.rb +70 -0
  223. data/test/unit/theme_management_test.rb +91 -0
  224. data/test/unit/view.rb +79 -12
  225. data/test/unit/widgets.rb +8 -8
  226. data/test/web_integration_test.rb +231 -0
  227. data/test/web_test_helper.rb +218 -0
  228. data/test/web_workflow_test.rb +527 -0
  229. data/ui/tui/bin/scriptorium +885 -415
  230. data/ui/web/app/app.rb +1398 -176
  231. data/ui/web/app/assets/livetext_mode.js +244 -0
  232. data/ui/web/app/error_helpers.rb +16 -16
  233. data/ui/web/app/views/advanced_config.erb +8 -2
  234. data/ui/web/app/views/asset_management.erb +56 -0
  235. data/ui/web/app/views/backup_management.erb +238 -0
  236. data/ui/web/app/views/config_widget.erb +232 -0
  237. data/ui/web/app/views/dashboard.erb +64 -72
  238. data/ui/web/app/views/deploy_config.erb +3 -0
  239. data/ui/web/app/views/edit_pages.erb +170 -2
  240. data/ui/web/app/views/edit_post.erb +130 -9
  241. data/ui/web/app/views/edit_theme.erb +73 -0
  242. data/ui/web/app/views/edit_theme_file.erb +74 -0
  243. data/ui/web/app/views/theme_management.erb +130 -0
  244. data/ui/web/app/views/view_dashboard.erb +666 -25
  245. data/ui/web/app/views/widgets.erb +249 -0
  246. data/ui/web/bin/scriptorium-web +35 -24
  247. data/ui/web/tmp/timing.log +17 -0
  248. data/ui/web/tmp/web_server.log +0 -5
  249. metadata +190 -116
  250. data/assets/back-icon.png +0 -0
  251. data/assets/icons/facebook.svg +0 -1
  252. data/assets/icons/github.svg +0 -1
  253. data/assets/icons/instagram.svg +0 -1
  254. data/assets/icons/reddit.svg +0 -1
  255. data/assets/icons/x.svg +0 -1
  256. data/assets/icons/youtube.svg +0 -1
  257. data/bin/scriptorium +0 -1511
  258. data/doc/anti-amnesia/20250727-060000-api-design-tui-planning.md +0 -34
  259. data/doc/anti-amnesia/20250727-061000-runeblog-tui-analysis.md +0 -50
  260. data/doc/anti-amnesia/20250727-154000-livetext-plugin-file-stats.md +0 -73
  261. data/doc/anti-amnesia/20250727-172600-unified-minitest-framework.md +0 -70
  262. data/doc/anti-amnesia/20250727-173000-widget-testing-achievement.md +0 -110
  263. data/doc/anti-amnesia/20250727-180000-post-id-num-refactoring.md +0 -73
  264. data/doc/anti-amnesia/20250728-124421-conversation-summary-concise.md +0 -124
  265. data/doc/anti-amnesia/20250729-190000-scriptorium-tui-testing-complete.md +0 -46
  266. data/doc/anti-amnesia/20250729-200000-scriptorium-tui-testing-edit-file-workflow.md +0 -97
  267. data/doc/anti-amnesia/20250729-211500-dependency-management-system.md +0 -211
  268. data/doc/anti-amnesia/20250729-213000-python-virtual-environment-setup.md +0 -141
  269. data/doc/anti-amnesia/20250729-214500-theme-management-commands.md +0 -211
  270. data/doc/anti-amnesia/20250729-215000-version-update-to-0.6.0.md +0 -134
  271. data/doc/anti-amnesia/20250729-220000-user-guide-complete.md +0 -41
  272. data/doc/anti-amnesia/20250804-213700-publishing-test-fix.md +0 -49
  273. data/doc/anti-amnesia/20250804-214400-additional-test-fixes.md +0 -46
  274. data/doc/anti-amnesia/20250804-220000-asset-function-logic-clarification.md +0 -41
  275. data/doc/anti-amnesia/20250806-202032-asset-function-logic-clarification.md +0 -41
  276. data/doc/anti-amnesia/20250813-082428-syntax-highlighting-and-navigation-improvements.md +0 -256
  277. data/lib/scriptorium/syntax_highlighter.rb +0 -234
  278. data/test/manual/deploy_symlink_demo.rb +0 -142
  279. data/test/manual/symlink_demo.rb +0 -117
  280. data/test/manual/test2.rb +0 -12
  281. data/test/manual/test_banner_from_file.rb +0 -150
  282. data/test/manual/test_banner_in_header.rb +0 -35
  283. data/test/manual/test_code_highlighting.rb +0 -68
  284. data/test/manual/test_complex_header.rb +0 -74
  285. data/test/manual/test_empty_header.rb +0 -32
  286. data/test/manual/test_radial_custom.rb +0 -58
  287. data/test/manual/test_radial_large_radius.rb +0 -52
  288. data/test/manual/test_svg_debug.rb +0 -47
  289. data/test/pages-demo/config/currentview.txt +0 -1
  290. data/test/pages-demo/views/demo/config/common.js +0 -57
  291. data/test/pages-demo/views/demo/config/footer.txt +0 -1
  292. data/test/pages-demo/views/demo/config/global-head.txt +0 -8
  293. data/test/pages-demo/views/demo/config/header.txt +0 -1
  294. data/test/pages-demo/views/demo/config/layout.txt +0 -1
  295. data/test/pages-demo/views/demo/config/left.txt +0 -1
  296. data/test/pages-demo/views/demo/config/main.txt +0 -1
  297. data/test/pages-demo/views/demo/config/right.txt +0 -1
  298. data/test/pages-demo/views/demo/config.txt +0 -3
  299. data/test/pages-demo/views/demo/output/panes/footer.html +0 -1
  300. data/test/pages-demo/views/demo/output/panes/header.html +0 -1
  301. data/test/pages-demo/views/demo/output/panes/left.html +0 -1
  302. data/test/pages-demo/views/demo/output/panes/main.html +0 -1
  303. data/test/pages-demo/views/demo/output/panes/right.html +0 -1
  304. data/test/scriptorium-TEST-1754622690-146/config/bootstrap_css.txt +0 -5
  305. data/test/scriptorium-TEST-1754622690-146/config/bootstrap_js.txt +0 -4
  306. data/test/scriptorium-TEST-1754622690-146/config/common.js +0 -57
  307. data/test/scriptorium-TEST-1754622690-146/config/currentview.txt +0 -1
  308. data/test/scriptorium-TEST-1754622690-146/config/global-head.txt +0 -9
  309. data/test/scriptorium-TEST-1754622690-146/config/last_post_num.txt +0 -1
  310. data/test/scriptorium-TEST-1754622690-146/config/os_helpers.rb +0 -4
  311. data/test/scriptorium-TEST-1754622690-146/config/widgets.txt +0 -3
  312. data/test/scriptorium-TEST-1754622690-146/posts/0001/meta.txt +0 -8
  313. data/test/scriptorium-TEST-1754622690-146/posts/0001/source.lt3 +0 -6
  314. data/test/scriptorium-TEST-1754622690-146/themes/standard/README.txt +0 -1
  315. data/test/scriptorium-TEST-1754622690-146/themes/standard/config.txt +0 -1
  316. data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/gen/text.css +0 -1
  317. data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/index.lt3 +0 -1
  318. data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/index_entry.lt3 +0 -14
  319. data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/post.lt3 +0 -13
  320. data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/widget.lt3 +0 -1
  321. data/test/scriptorium-TEST-1754622690-146/views/sample/config/bootstrap_css.txt +0 -5
  322. data/test/scriptorium-TEST-1754622690-146/views/sample/config/bootstrap_js.txt +0 -4
  323. data/test/scriptorium-TEST-1754622690-146/views/sample/config/common.js +0 -57
  324. data/test/scriptorium-TEST-1754622690-146/views/sample/config/deploy.txt +0 -5
  325. data/test/scriptorium-TEST-1754622690-146/views/sample/config/footer.txt +0 -2
  326. data/test/scriptorium-TEST-1754622690-146/views/sample/config/global-head.txt +0 -9
  327. data/test/scriptorium-TEST-1754622690-146/views/sample/config/header.txt +0 -4
  328. data/test/scriptorium-TEST-1754622690-146/views/sample/config/layout.txt +0 -5
  329. data/test/scriptorium-TEST-1754622690-146/views/sample/config/left.txt +0 -3
  330. data/test/scriptorium-TEST-1754622690-146/views/sample/config/main.txt +0 -5
  331. data/test/scriptorium-TEST-1754622690-146/views/sample/config/right.txt +0 -3
  332. data/test/scriptorium-TEST-1754622690-146/views/sample/config/status.txt +0 -7
  333. data/test/scriptorium-TEST-1754622690-146/views/sample/config.txt +0 -3
  334. data/test/scriptorium-TEST-1754622690-146/views/sample/layout/footer.html +0 -3
  335. data/test/scriptorium-TEST-1754622690-146/views/sample/layout/header.html +0 -3
  336. data/test/scriptorium-TEST-1754622690-146/views/sample/layout/left.html +0 -3
  337. data/test/scriptorium-TEST-1754622690-146/views/sample/layout/main.html +0 -3
  338. data/test/scriptorium-TEST-1754622690-146/views/sample/layout/right.html +0 -3
  339. data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/footer.html +0 -1
  340. data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/header.html +0 -1
  341. data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/left.html +0 -1
  342. data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/main.html +0 -1
  343. data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/right.html +0 -1
  344. data/ui/web/tmp/web_server.pid +0 -1
  345. /data/{test/pages-demo/views/demo/config/bootstrap_css.txt → lib/scriptorium/support/bootstrap/css.txt} +0 -0
  346. /data/{test/pages-demo/views/demo/config/bootstrap_js.txt → lib/scriptorium/support/bootstrap/js.txt} +0 -0
  347. /data/{test/scriptorium-TEST-1754622690-146/views/sample → lib/scriptorium/support}/config/reddit.txt +0 -0
  348. /data/{test/scriptorium-TEST-1754622690-146/themes/standard/layout → lib/scriptorium/support/templates}/layout.txt +0 -0
  349. /data/{test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/footer.txt → lib/scriptorium/support/theme/footer.lt3} +0 -0
  350. /data/{test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/left.txt → lib/scriptorium/support/theme/left.lt3} +0 -0
  351. /data/{test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/main.txt → lib/scriptorium/support/theme/main.lt3} +0 -0
  352. /data/{test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/right.txt → lib/scriptorium/support/theme/right.lt3} +0 -0
  353. /data/test/manual/banner-tests/{config.txt → svg.txt} +0 -0
  354. /data/test/manual/{test6.rb → test_advanced_widgets.rb} +0 -0
  355. /data/test/manual/{test1.rb → test_basic_posts.rb} +0 -0
  356. /data/test/manual/{test4.rb → test_layout_widgets.rb} +0 -0
  357. /data/test/manual/{test5.rb → test_pagination.rb} +0 -0
  358. /data/test/manual/{test3.rb → test_random_posts.rb} +0 -0
@@ -0,0 +1,105 @@
1
+ .mixin liveblog
2
+
3
+ .post 8
4
+
5
+ .title Concerning the term "monkeypatching"
6
+ .pubdate 2015-08-10
7
+ .views computing
8
+ .tags
9
+
10
+ .pin computing
11
+
12
+ .teaser
13
+ There have been many "dark days" in the Ruby community, some much darker than others.
14
+ .end
15
+
16
+ Guy Decoux died, \_why the lucky stiff\_ left us (without dying), Jim Weirich died. (Yes, I count
17
+ actual deaths as the darkest moments of all.)
18
+
19
+ But I count another dark moment that many of you will not. When I had been using Ruby a
20
+ little more than six years, in December 2005, the term "monkeypatching" was introduced
21
+ into our circle.
22
+
23
+ It was a post by Drew Mills, quoting a blog from a Python person who apparently hated Ruby.
24
+ I don't blame Drew. I don't suppose I "blame" anyone. But I regret that this slang has entered
25
+ our culture.
26
+
27
+ The post Drew quoted was this:
28
+
29
+ .quote
30
+ It's the second generation that's going to be less enthused,
31
+ that's going to stare in bafflement at these classes that
32
+ mysteriously spawn methods, and trying to figure out what's
33
+ going when there's an exception in dynamically generated
34
+ code. You can monkeypatch code in Python pretty easily, but we
35
+ look down on it enough that we call it "monkeypatching". In
36
+ Ruby they call it "opening a class" and think it's a cool
37
+ feature. I will assert: we are right, they are wrong.
38
+ .end
39
+
40
+ Before I go on to my main point, I'll make an observation that is arguably much more interesting.
41
+ If you read again, it sounds like the Python person (Ian Bicking) was talking about dynamic method
42
+ dispatch (the use or abuse of method_missing) rather than actual open classes.
43
+
44
+ Someone later in that thread decried the "ignorance" of Bicking with regard to this -- that he didn't
45
+ even know enough Ruby to know the difference between dynamic dispatch and open classes. I
46
+ wonder if the original pythonism meant something different? Since I never completed my Python
47
+ studies, I can't comment.
48
+
49
+ At any rate: Back to my story.
50
+
51
+ I still recall the revulsion I felt, almost physical nausea, when I read this the first time. That's probably
52
+ a somewhat extreme response on my part.
53
+
54
+ I regarded open classes as a programming technique that is potentially very powerful but easy to misuse.
55
+ This sounds like a "good and yet bad" argument. But let me rephrase that sentence.
56
+
57
+ Open classes are a technique that is potentially very powerful _(and therefore) easy to misuse. That is
58
+ the point. Any tool that is powerful enough is prone to misuse by people who are unskilled.
59
+
60
+ The term "monkeypatching" is obviously a pejorative term. Upon seeing it, my first thought was, "I am
61
+ not a monkey, and I am not 'patching' anything."
62
+
63
+ After all, that is the implication. The term implies that the developer is a monkey, and that the work he is
64
+ doing is sloppy or shoddy. It is an insult both to the quality of the developer's work and to the developer
65
+ himself.
66
+
67
+ So it bothered me because it was a pejorative and it was insulting to us as programmers. It was also
68
+ (arguably) an insult to Ruby itself and therefore by extension an insult to Matz.
69
+
70
+ I dislike being clannish, though perhaps sometimes I am. After all, Ruby is not (supposed to be) anyone's
71
+ religion or cultural heritage. It's only a programming language, and I think it's very much like Python. But it
72
+ also bothered me that this neologism originated _outside our community, in particular with the Python
73
+ community.
74
+
75
+ Generalizations are always wrong. (Yes, that's a joke.) And stereotypes as such are at least useless if not
76
+ actually hurtful. And yet I always heard about the arrogance and rudeness of Python programmers, and I
77
+ occasionally saw real evidence of it. And though I dislike the word "nice" in general, I always found it interesting
78
+ that Ruby coders were labeled as "nice" (as in the abbreviation MINASWAN, "Matz is nice, and so we are nice").
79
+
80
+ So when this usage was introduced, I felt rather as though someone had opened my front door and dumped a
81
+ large piece of dog manure onto my carpet. What is worse, it has wormed its way into common usage in our
82
+ community, even in documentation. A lot of this happened in the early days of Rails, when fate dumped a huge
83
+ influx of newbies onto the Ruby community. Not to disparage the Rails people in general, but at the time this
84
+ felt much the same as it did back when AOL (America Online) made its debut and dumped millions of (insert
85
+ noun here) into the Internet and Usenet communities.
86
+
87
+ It's impossible to stop this usage now (like so many other usages in the English language having nothing to do
88
+ with computing). But I still protest, and I still stand against it.
89
+
90
+ The term "monkeypatching" appears only once in more than 800 pages of _[The Ruby Way]. It occurs when I
91
+ say I don't condone this term, and it won't be used further in the book.
92
+
93
+ As an aside: The "refinements" which exist in recent versions of Ruby make open classes stricter and safer. I'll blog
94
+ about that later. But this isn't much of a technical post. It's just a reminiscence and a rant.
95
+
96
+ So basically I hate the term "monkeypatching." I am polite to people who say it to me (e.g., in asking a question), but
97
+ secretly I want to just ignore them.
98
+
99
+ The last time I saw Jim Weirich, in New Orleans, he and I talked about this. He agreed it was a pejorative term,
100
+ and it was a shame it had entered the common dialect, though there was really nothing to do about it. But being
101
+ much more level-headed and good-natured than I am, he wasn't bothered much by it.
102
+
103
+ I really miss Jim, by the way. He was a truly brilliant developer and an amiable and wonderful person in general.
104
+ If it would bring him back, I would gladly change the book's name to _[The Art of Monkeypatching].
105
+
@@ -0,0 +1,20 @@
1
+ .mixin liveblog
2
+
3
+ .post 9
4
+
5
+ .title Announcement coming soon...
6
+ .pubdate 2015-08-11
7
+ .views computing
8
+ .tags
9
+
10
+ .teaser
11
+ Maybe this will stir your curiosity a little. I hope it does.
12
+ I've started working on a project with someone else, and I
13
+ think it will be really worthwhile.
14
+ .end
15
+
16
+ This will be launched within 48 hours and announced at the
17
+ Lone Star Ruby Conference in Austin, Texas (October 15).
18
+ Maybe it will be leaked a little before then, too.
19
+
20
+ Sit tight 48 hours or so...
@@ -0,0 +1,142 @@
1
+ .mixin liveblog
2
+
3
+ .post 10
4
+
5
+ .title Immutable data (ditching the wax tablet)
6
+ .pubdate 2015-08-25
7
+ .views computing
8
+ .tags
9
+
10
+ .pin computing
11
+
12
+ .teaser
13
+ A couple of weeks ago, I went to Phoenix training prior to the Lone Star Ruby
14
+ Conference in Austin. I was talking with Bruce Tate, and he shared with me
15
+ some thoughts about functional programming in general.
16
+ .end
17
+
18
+ Obviously Bruce isn't responsible if I misquote him. My memory is faulty.
19
+
20
+ "Functional programming is the future," he told me, "and OOP is dying."
21
+ He pointed to the ever-increasing popularity of multi-core machines and the
22
+ increasing irrelevance of conserving memory.
23
+
24
+ He said that OOP was all about optimizing for memory usage, and that was
25
+ no longer such a big concern. I wasn't sure what he meant. I thought about it
26
+ later, and decided I was probably missing some profound points.
27
+
28
+ But at the same time, I thought I saw something with a clarity that I hadn't
29
+ before. I have wrestled with the concepts of FP over the last year or two; as
30
+ a procedural and OOP type, it hasn't always fit into my brain quickly or
31
+ easily.
32
+
33
+ At times it felt that I was taking a step backwards technologically, back into
34
+ procedural thinking. On the one hand, that isn't really true. On the other
35
+ hand, I think we all know what backtracking is for. If you've ever gotten lost
36
+ in a strange town, you know that sometimes you have to back up to a known
37
+ point and try going off in a different direction.
38
+
39
+ If you're interested, you could make some fine analogies here between human
40
+ technological advances and things like game theory and machine learning. It's
41
+ hard to imagine navigating a maze or implementing a chess-playing program
42
+ without the concept of backtracking. But that's not my point here.
43
+
44
+ One of the key concepts in functional programming, as I understand it, is that
45
+ of immutable data. I have spent hours puzzling over this, because it hasn't
46
+ been immediately intuitive to me.
47
+
48
+ There was a quote I read once that the GOTO statement caused difficulties
49
+ because it left us with the question, "How did I get here?" And mutable data
50
+ leaves us with the question, "How did I get to this state?" That made sense
51
+ to me, at least a little.
52
+
53
+ It got me to thinking about a more remote time, when I taught programming
54
+ concepts to beginners (using BASIC). In an effort to explain how a program
55
+ worked, I would run through an exercise on the whiteboard which I called
56
+ "playing computer." Variables were represented by little boxes which more or
57
+ less corresponded to memory locations. As I manually stepped through the execution
58
+ of some simple program, I would erase and update the contents of these boxes.
59
+
60
+ It was nice and effective, but I sometimes did it another way. I expressed the
61
+ same information in the form of a table, with variable names across the
62
+ columns and time increasing down the rows. This made it clear not just what
63
+ values the variables had, but what values they used to have (and how/when they
64
+ changed).
65
+
66
+ As an aside, I'm one of those people who believes that an education should not
67
+ be merely deep but also broad. I believe a good vocabulary, like a good
68
+ education in general, enhances our experience of life.
69
+
70
+ And as I thought about my old whiteboard shenanigans, the word that came to me
71
+ was _palimpsest -- a beautiful, useful, poetic word that we rarely see nowadays.
72
+ It's sometimes used figuratively; but the literal definition is _(a document on )
73
+ _(which the original writing has been erased and replaced with new writing).
74
+
75
+ I thought about the many older modes of writing, such as clay and wax tablets
76
+ and papyrus. Some materials such as papyrus and parchment (vellum) were rather
77
+ limited in availability or moderately labor-intensive to produce; people wanted
78
+ to re-use them. It was natural to wipe (or scrape or clean) such a material
79
+ once the writing on it was no longer relevant. The term "blank slate" _((tabula rasa))
80
+ was once very literal; the stuff we wrote on was the same as the building material.
81
+
82
+ By the way, what is deemed relevant may change over the course of 1,000 or 2,000
83
+ years. Many an archaeologist or linguist has spent countless frustrating hours
84
+ trying to decipher the original writing under some later inscription. In a
85
+ similar way, art experts have gone to enormous lengths to uncover artworks
86
+ which someone painted over rather than start a new canvas.
87
+
88
+ But what if writing materials were cheap? Today we are much more likely to
89
+ have notepads on our desks than little erasable slates or wax tablets.
90
+
91
+ Let's extend the analogy to computer memory. There was a time, perhaps four
92
+ decades ago, when it was expensive and limited in availabilty. I recall seeing
93
+ an information sheet about a mainframe ("What's a mainframe?" asks everyone
94
+ under 40) that listed its specs, almost bragging about its memory, which was
95
+ 448K. Yes, that is less than half a meg. That computer ran a medium-sized
96
+ university. Within seven years, of course, people were carrying around floppy
97
+ disks that held three times that much. ("What's a floppy disk?" asks everyone
98
+ under 30.)
99
+
100
+ It was only ten years or so prior to that time that the world saw the creation
101
+ of this curious thing called UNIX (a play on the name MULTICS). Some of you
102
+ reading this may have wondered (or not) why UNIX and its offspring stored a
103
+ conceptual newline as a single linefeed character (rather than the somewhat
104
+ more sensible "carriage return + linefeed" combination. The answer is that
105
+ the designers wanted to save RAM and disk space. For every line of text, they
106
+ saved an entire byte in this way. When a linefeed was sent to a device such
107
+ as a terminal or printer, the OS typically converted it to a "real" CRLF pair.
108
+ This all happened because memory was scarce and expensive.
109
+
110
+ It isn't true anymore. In some cases, we may have learned bad habits and
111
+ forgotten how to conserve memory. But in general, we have more imortant things
112
+ to worry about now.
113
+
114
+ But let's think a minute. If memory is cheap and available, why are we
115
+ turning it into a palimpsest? Isn't there something to be said for the idea of
116
+ leaving data alone, never overwriting information, always writing new data
117
+ somewhere else?
118
+
119
+ If we do that, we have a "history" of what has happened in program execution,
120
+ like a trail of breadcrumbs. More importantly, pieces of code that run
121
+ concurrently need not worry about stepping on each other's data. One process
122
+ (or thread or fiber) will never write over an item that another process is
123
+ reading. If this doesn't eliminate synchronization issues, it at least
124
+ mitigates them greatly.
125
+
126
+ So I'm starting to see where immutable data could be a good thing. And I'm
127
+ starting to see how it's good for concurrency. And concurrency really matters,
128
+ because it is the limiting factor of this generation of computing just as
129
+ memory scarcity was a limiting factor one or two generations ago.
130
+
131
+ In fact, I'll speculate a little about memory in general. Let's look 10, 20,
132
+ or even 50 years into the future. (My crystal ball, like everyone else's, is
133
+ very cloudy.)
134
+
135
+ I can imagine a time when memory is simply never erased at all. We're seeing
136
+ the crude beginnings of this already. Source control systems and databases
137
+ preserve far more history than they used to. My laptop's OS encourages me to
138
+ think of my backed-up data as a sort of limitless archive of past versions of
139
+ files. It's mostly an illusion, but it needn't always be. Why should any
140
+ document, any image, any video ever be erased?
141
+
142
+ Food for thought. Chow down, friends.
@@ -0,0 +1,117 @@
1
+ .mixin liveblog
2
+
3
+ .post 11
4
+
5
+ .title Computer science as a lost art
6
+ .pubdate 2015-09-17
7
+ .views computing
8
+ .tags
9
+
10
+ .pin computing
11
+
12
+ .teaser
13
+ An old friend of mine asked me this in email last night...
14
+ .end
15
+
16
+ .quote
17
+ Thanks for taking the time here. My younger son is interested in pursuing
18
+ a career in computer science. He's a freshman at Kennesaw State right now,
19
+ but he really struggles with the idea of taking two years of classes that
20
+ he has very little interest in. There are three schools in Atlanta with
21
+ 8- to 16-week full-day immersive courses that focus solely on technology:
22
+ The Iron Yard, Digital Crafts, and General Assembly.
23
+
24
+ In the world of computer science, what is the opinion is of programs like
25
+ this? Is a 4-year degree viewed as more valuable?
26
+ .end
27
+
28
+ *[This morning, this was my off-the-cuff answer:]
29
+
30
+ Well, here is my opinion... I'm speaking as someone with two degrees and
31
+ therefore six years in comp sci, as well as 30 years' experience. In other words,
32
+ I'm old-fashioned, a freaking dinosaur. :)
33
+
34
+ There is a whole generation of computer people who are very different from the
35
+ previous generation. CS used to be (and really still is) a very deep and demanding
36
+ field.
37
+
38
+ But two or three things have happened. First of all, computers are pretty much
39
+ universal now. Do you know anyone under 80 who doesn't have one? Second, the
40
+ World Wide Web (born in 1989 as a "face" on the more bare-bones Internet)
41
+ started being invaded by the general public in 1995 or so. As usage became more
42
+ common, it became more important to everyday life. And third, the tools we use
43
+ to create applications have gotten a bit more sophisticated. It's easier to use these
44
+ tools, just as it's easier to drive a car now than it was in 1905.
45
+
46
+ What all this means is that there are more kinds of "computer person" than there
47
+ ever were before. There are many thousands of "programmers" who never took
48
+ a programming course. This is both good and bad.
49
+
50
+ It means that a person can get the little things done while knowing very little. But it
51
+ also means that this person probably will never learn enough to get the big things done.
52
+
53
+ To be honest, I get secretly frustrated with the lower-level people who now exist
54
+ in giant hordes. (I rarely tell anyone that.) To me, they are like people who have
55
+ decided to learn 5% of their field in order to get a few things done, have some fun,
56
+ and make a living.
57
+
58
+ These people use tools to create little applications for everyday use. But remember:
59
+ The tools themselves are also software. But they are a level of software far beyond
60
+ anything these people could dream of creating. They use languages, editors,
61
+ compilers, and operating systems; but they don't have the first clue about how to
62
+ create any of these things or even how they really work.
63
+
64
+ In 20 years, some race car driver is going to hold a kid in his lap, and the kid is
65
+ going to say, "Well, I can drive a car, too. Everybody can drive a car. You just
66
+ push the green button and say, 'Take me to Wal-Mart.'" And I kind of feel like that
67
+ race car driver sometimes.
68
+
69
+ Bringing it back to computers... My friend had a 7-year-old who used a fancy tool
70
+ that he learned by himself, and he created a game for the iPhone. Sure, it was a
71
+ simple game. But he did something by himself that a PhD could barely have done
72
+ 30 years ago (and not on a handheld device).
73
+
74
+ To some extent, my complaints are valid. And to some extent, it's just me being
75
+ an old-timer and a curmudgeon.
76
+
77
+ Sometimes I interact with certain people and their complaints and questions show
78
+ where they have reached the boundaries of their knowledge. And sometimes it's
79
+ shocking to me. I think: You should have learned that in your first computer science
80
+ class in your first semester. And then I remember: This person never had a real
81
+ computer science class at all.
82
+
83
+ Of course, generations before me look at me the same way. In the 1940s, you
84
+ pretty much had to have a degree in electrical engineering in order to see or touch
85
+ a computer. In the 70s and early 80s, you just had to be a science or engineering
86
+ major. In the 90s, you just had to have a credit card (or have parents with a credit
87
+ card).
88
+
89
+ I'm very lost with hardware, by the way. I live on the keyboard. Every time I ever
90
+ opened up a computer to try to change something, I screwed up two other things.
91
+ I'm strictly a software guy. I've known people who made fun of me for that, and
92
+ even older people who laughed a little at me because I didn't know how to use a
93
+ soldering iron.
94
+
95
+ It all depends really on what a person really wants to do. If you want to make
96
+ online stores and shopping carts and web forms and pretty pictures and social media
97
+ apps, then you don't need a degree in computer science anymore. Not even an
98
+ associate's degree.
99
+
100
+ If you want to make really interesting exciting things that have never existed before,
101
+ if you want to make a tiny little difference in the industry and change the world just a
102
+ little bit, then you do need that degree. If you want to make the tools and libraries
103
+ that the lower-level people use, you do need that degree.
104
+
105
+ Or look at it this way: If you want to build doghouses, just pick up some skills with
106
+ hammer and nails, and then go for it. If you want to be an architect who designs and
107
+ builds skyscrapers, then go get a degree in architecture first. But please (speaking
108
+ again as a curmudgeon), don't learn to build doghouses and call yourself an architect.
109
+
110
+ I hope this silly rant is helpful in some way. :)
111
+
112
+ Ask me any more detailed questions if you want to.
113
+
114
+ Cheers,
115
+
116
+ Hal
117
+
@@ -0,0 +1,26 @@
1
+ .mixin liveblog
2
+
3
+ .post 12
4
+
5
+ .title Ruby Day in Turin, Italy
6
+ .pubdate 2015-11-10
7
+ .views computing
8
+ .tags
9
+
10
+ .teaser
11
+ I'm honored to be speaking on Friday at Ruby Day in Turin, Italy.
12
+ See http://rubyday.it for the schedule.
13
+ .end
14
+
15
+ I love my career, and I love traveling. It's nice when I get to
16
+ combine them. This is one of those times.
17
+
18
+ I'll be presenting a talk entitled "Elixir for the Rubyist" (the
19
+ same as the title of the book I'm working on).
20
+
21
+ If you're a Periscope user, be aware that I might try to stream
22
+ some of this event (as well as some of my travels around the city).
23
+
24
+ I'll also try to post a link to my slides later (and a video if
25
+ they happen to make one).
26
+
@@ -0,0 +1,28 @@
1
+ .mixin liveblog
2
+
3
+ .post 13
4
+
5
+ .title RubyDay was a success
6
+ .pubdate 2015-11-23
7
+ .views computing
8
+ .tags
9
+
10
+ .teaser
11
+ On November 13, I attended Ruby Day in Turin, Italy. It was well worth the trip.
12
+ .end
13
+
14
+ Like any other Ruby conference, there was an eclectic assemblage of people. I only
15
+ attended the English language talks, as my knowledge of Italian is very minimal.
16
+
17
+ My own talk "Elixir for the Rubyist" was reasonably well attended and well received.
18
+ I'll post a link to the slides and video later.
19
+
20
+ I was personally very impressed by Ju Liu's talk on Sonic Pi. His style of teaching
21
+ was an excellent example of what I call _incremental learning_ (for which there is
22
+ probably a "real" term that I don't know). Additionally, it's hard to imagine anyone
23
+ watching that talk and _not_ wanting to play with Sonic Pi.
24
+
25
+ I also greatly enjoyed the talks by Ramon Huidobro and James Kiesel. Once those videos
26
+ are up, I'll post links to those as well.
27
+
28
+ Turin is a beautiful city. I look forward to going back sometime.
@@ -0,0 +1,42 @@
1
+ .mixin liveblog
2
+
3
+ .post 14
4
+
5
+ .title Working on the blogging software
6
+ .pubdate 2016-04-14
7
+ .views computing
8
+ .tags
9
+
10
+ .teaser
11
+ Everyone warned me not to go down this road. I didn't listen.
12
+ .end
13
+
14
+
15
+ What I've heard is that once you start working on your own
16
+ blogging system, it's a rabbithole. You spend more time working
17
+ on the code than you do blogging.
18
+
19
+ I think I believe it. But is that really so bad? Coding, after all,
20
+ is fun. Isn't that one of the reasons we do it?
21
+
22
+ It's true that I'm spending a lot of time reinventing the wheel (and
23
+ doing it badly). But I'm also implementing features that I've never
24
+ seen anywhere else.
25
+
26
+ And I like those features. They work for me.
27
+
28
+ Besides, working on the Elixir book is plenty of writing. It doesn't
29
+ leave me with much energy for blogging.
30
+
31
+ The big problem, of course, with "eating my own dog food" (as the
32
+ saying goes) is that it only has to be palatable to _(me). It is
33
+ unlikely that my blog code will ever really see the light of day,
34
+ because people would say, "You mean it doesn't even have feature X?"
35
+
36
+ To which I could only reply, "I didn't want feature X."
37
+
38
+ Or, "You mean it doesn't even catch this simple error condition?" To
39
+ which I would have to reply, "I know not to make that error."
40
+
41
+ The first 90% of a software project is fairly easy. It's the second
42
+ 90% where it starts to get painful.
@@ -0,0 +1,137 @@
1
+ .mixin liveblog
2
+
3
+ .post 15
4
+
5
+ .title OK, it's not really a lost art
6
+ .pubdate 2018-07-31
7
+ .views computing
8
+ .tags
9
+
10
+ .pin computing
11
+
12
+ .teaser
13
+ I was surprised to learn that an old blog entry was
14
+ being discussed on reddit. Maybe I should update my comments a little.
15
+ .end
16
+
17
+ It seemed odd to me that a blog I had abandoned (_[mea culpa])
18
+ had generated three emails to me in a single week. Finally
19
+ someone pointed out to me that it had been reposted and was
20
+ getting a little bit of attention.
21
+
22
+ I haven't read all the responses from the numerous redditors.
23
+ Maybe I'll read more later. This is my tentative response.
24
+
25
+ Many have suggested that the speckled background is ugly and
26
+ hard to read. Ugly, probably. Hard to read-- well, it looked
27
+ OK on my screen. But, point taken, it's gone.
28
+
29
+ Someone used the term "elitist sour grapes." That is probably
30
+ largely correct. :)
31
+
32
+ Someone else said you shouldn't trust someone who claims to be
33
+ a web developer but doesn't know CSS. That, I would say, is 100%
34
+ correct.
35
+
36
+ But you see, I do not claim to be a web developer. In fact, I
37
+ specifically claim that I do _not know web development.
38
+
39
+ I realize that web guys have collectively made billions, maybe
40
+ even trillions of dollars over the years. And it is an absolutely
41
+ necessary part of modern society, and I don't want to demean the
42
+ people who are good at it and who want to do it.
43
+
44
+ But web coding as such just doesn't interest me. I'm not good at it,
45
+ and I don't _want to be good at it. I'd rather do other things.
46
+
47
+ I'm not a programming "god" or "rock star," by the way. I'm
48
+ just a guy who's been doing this a long time, but has not stuck
49
+ to one thing long enough to be considered brilliant.
50
+
51
+ The user LondonPilot raises some very interesting points. I wish I
52
+ could buy him a beer or six (or substitute beverage of choice).
53
+
54
+ In fact, his argument is sort of the flip side of mine-- and arguably
55
+ the more important angle on the whole situation. I would even say that
56
+ I have made the same argument at different times and places in the past.
57
+
58
+ Here's a good example. I recall a time in the early 90s, when personal
59
+ computers were less common, I had two friends who had recently got
60
+ married. He was an electrical engineer, and she majored (I think) in
61
+ English. This was 1992, when Windows 3.1 was hip and trendy in some
62
+ circles, and DOS was still very much alive.
63
+
64
+ Jon slightly bemoaned the fact that Joyce used a Mac rather than a PC.
65
+ He made the comment that "people don't learn anything about computers
66
+ that way." I suspect from his hardware-oriented point of view, the DOS
67
+ command line was pretty super-high-level.
68
+
69
+ In some ways, I sympathized. But I made the counter-argument that a
70
+ toaster is meant to toast bread, not to teach us about electricity.
71
+ (He hated this analogy.) But I often felt the computer should become
72
+ invisible-- that the proper response to "What are you doing?" should
73
+ be "I'm writing a paper" or "I'm designing a graphic" or whatever--
74
+ it should never be "I'm using the computer." And we've made some great
75
+ progress there in recent decades.
76
+
77
+ Let me amend what I said before. I don't _mean to backtrack (though I
78
+ probably will), but to clarify and expand.
79
+
80
+ First of all, there _are in fact certain small lessons from computer
81
+ science that even a modern "clean hands" developer should know. I
82
+ cannot _count the number of times I have seen a programmer (and I
83
+ really wanted to put quotes around that) who was absolutely _incensed
84
+ that `[(2.0/3.0)*3.0] was only `1.99999999 or thereabouts. I have seen
85
+ people who were _livid and demanded that this bug be fixed.
86
+
87
+ I have also had difficulty explaining that no matter how fast your
88
+ processor is, an algorithm that is `[O(N^2)] can eventually bite you.
89
+ I have seen people who didn't know that hard disk access is typically
90
+ slower than memory access. I could go on.
91
+
92
+ Having said that: You can get an awful lot done these days without any
93
+ CS coursework. You can create things that are useful, worthwhile, and
94
+ certainly financially successful.
95
+
96
+ And there is nothing magical about a degree anyway. What counts is
97
+ domain knowledge-- and I mean enough knowledge to be truly effective,
98
+ not just "enough to fool your manager" (and perhaps not just "enough
99
+ to pass a boot camp").
100
+
101
+ So getting back to the excellent comments by LondonPilot-- I think
102
+ perhaps there should be another field or discipline split off from
103
+ computer science. This would be parallel to what I believe happened
104
+ with electrical engineering and computer science.
105
+
106
+ I studied CS for 6 years, and as far as I recall, I only had two or
107
+ three EE courses (including one lab). To the generation before mine,
108
+ that might seem like a horrifying concept.
109
+
110
+ So let's imagine a new major. I don't know what to call it-- maybe
111
+ "High-Level Computing"? Not a great neologism, but I'll run with it
112
+ for now. An HLC major would certainly have one or two courses that
113
+ were from traditional CS (just as I myself had my fleeting glimpse
114
+ at EE material). But the rest would be more pragmatic, more about
115
+ gluing this piece of tech to that one, properly trusting that the
116
+ components were created and tested by CS people-- just as I properly
117
+ trust that my CPU works as advertised and never try to build my own.
118
+
119
+ As LondonPilot said, this is not a bad thing. This is how human
120
+ progress works.
121
+
122
+ I do wish that more web developers had deeper knowledge. But (and
123
+ here I may truly be backtracking)-- it does not have to be super-
124
+ deep knowledge. I probably said it did, but I was wrong, of course.
125
+ As long as there are cars, there will be people who understand the
126
+ workings of the engines; but a self-driving car will be perfectly
127
+ useful in getting from point A to point B. Part of the point of
128
+ technology is to make it easier to accomplish tasks with less effort
129
+ and less specialized knowledge.
130
+
131
+ So my modest proposal would be: Let CS give birth to a new field
132
+ just as EE gave birth to CS. EE did not die, and CS will not die
133
+ in the imaginable future. Let's just admit these are different
134
+ ways of thinking now, and should perhaps be different tracks.
135
+
136
+ Thank you to all who responded. Maybe I'll dust off this blog again
137
+ soon.