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,175 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Immutable data (ditching the wax tablet)</title>
6
+ <meta name="generator" content="Scriptorium Import">
7
+ <meta property="og:title" content="Immutable data (ditching the wax tablet)">
8
+ <meta property="og:locale" content="en_US">
9
+ <meta property="og:type" content="article">
10
+ <meta property="article:published_time" content="2015-08-25">
11
+ </head>
12
+ <body>
13
+ <article>
14
+ <header>
15
+ <h1>Immutable data (ditching the wax tablet)</h1>
16
+ <time datetime="2015-08-25">August 25, 2015</time>
17
+ </header>
18
+
19
+ <div class="content">
20
+ <p>
21
+ A couple of weeks ago, I went to Phoenix training prior to the Lone Star Ruby
22
+ Conference in Austin. I was talking with Bruce Tate, and he shared with me
23
+ some thoughts about functional programming in general.
24
+ Obviously Bruce isn't responsible if I misquote him. My memory is faulty.
25
+
26
+ <p>
27
+ "Functional programming is the future," he told me, "and OOP is dying."
28
+ He pointed to the ever-increasing popularity of multi-core machines and the
29
+ increasing irrelevance of conserving memory.
30
+
31
+ <p>
32
+ He said that OOP was all about optimizing for memory usage, and that was
33
+ no longer such a big concern. I wasn't sure what he meant. I thought about it
34
+ later, and decided I was probably missing some profound points.
35
+
36
+ <p>
37
+ But at the same time, I thought I saw something with a clarity that I hadn't
38
+ before. I have wrestled with the concepts of FP over the last year or two; as
39
+ a procedural and OOP type, it hasn't always fit into my brain quickly or
40
+ easily.
41
+
42
+ <p>
43
+ At times it felt that I was taking a step backwards technologically, back into
44
+ procedural thinking. On the one hand, that isn't really true. On the other
45
+ hand, I think we all know what backtracking is for. If you've ever gotten lost
46
+ in a strange town, you know that sometimes you have to back up to a known
47
+ point and try going off in a different direction.
48
+
49
+ <p>
50
+ If you're interested, you could make some fine analogies here between human
51
+ technological advances and things like game theory and machine learning. It's
52
+ hard to imagine navigating a maze or implementing a chess-playing program
53
+ without the concept of backtracking. But that's not my point here.
54
+
55
+ <p>
56
+ One of the key concepts in functional programming, as I understand it, is that
57
+ of immutable data. I have spent hours puzzling over this, because it hasn't
58
+ been immediately intuitive to me.
59
+
60
+ <p>
61
+ There was a quote I read once that the GOTO statement caused difficulties
62
+ because it left us with the question, "How did I get here?" And mutable data
63
+ leaves us with the question, "How did I get to this state?" That made sense
64
+ to me, at least a little.
65
+
66
+ <p>
67
+ It got me to thinking about a more remote time, when I taught programming
68
+ concepts to beginners (using BASIC). In an effort to explain how a program
69
+ worked, I would run through an exercise on the whiteboard which I called
70
+ "playing computer." Variables were represented by little boxes which more or
71
+ less corresponded to memory locations. As I manually stepped through the execution
72
+ of some simple program, I would erase and update the contents of these boxes.
73
+
74
+ <p>
75
+ It was nice and effective, but I sometimes did it another way. I expressed the
76
+ same information in the form of a table, with variable names across the
77
+ columns and time increasing down the rows. This made it clear not just what
78
+ values the variables had, but what values they used to have (and how/when they
79
+ changed).
80
+
81
+ <p>
82
+ As an aside, I'm one of those people who believes that an education should not
83
+ be merely deep but also broad. I believe a good vocabulary, like a good
84
+ education in general, enhances our experience of life.
85
+
86
+ <p>
87
+ And as I thought about my old whiteboard shenanigans, the word that came to me
88
+ was <i>palimpsest</i> -- a beautiful, useful, poetic word that we rarely see nowadays.
89
+ It's sometimes used figuratively; but the literal definition is <i>(a</i> document on )
90
+ <i>(which</i> the original writing has been erased and replaced with new writing).
91
+
92
+ <p>
93
+ I thought about the many older modes of writing, such as clay and wax tablets
94
+ and papyrus. Some materials such as papyrus and parchment (vellum) were rather
95
+ limited in availability or moderately labor-intensive to produce; people wanted
96
+ to re-use them. It was natural to wipe (or scrape or clean) such a material
97
+ once the writing on it was no longer relevant. The term "blank slate" <i>((tabula</i> rasa))
98
+ was once very literal; the stuff we wrote on was the same as the building material.
99
+
100
+ <p>
101
+ By the way, what is deemed relevant may change over the course of 1,000 or 2,000
102
+ years. Many an archaeologist or linguist has spent countless frustrating hours
103
+ trying to decipher the original writing under some later inscription. In a
104
+ similar way, art experts have gone to enormous lengths to uncover artworks
105
+ which someone painted over rather than start a new canvas.
106
+
107
+ <p>
108
+ But what if writing materials were cheap? Today we are much more likely to
109
+ have notepads on our desks than little erasable slates or wax tablets.
110
+
111
+ <p>
112
+ Let's extend the analogy to computer memory. There was a time, perhaps four
113
+ decades ago, when it was expensive and limited in availabilty. I recall seeing
114
+ an information sheet about a mainframe ("What's a mainframe?" asks everyone
115
+ under 40) that listed its specs, almost bragging about its memory, which was
116
+ 448K. Yes, that is less than half a meg. That computer ran a medium-sized
117
+ university. Within seven years, of course, people were carrying around floppy
118
+ disks that held three times that much. ("What's a floppy disk?" asks everyone
119
+ under 30.)
120
+
121
+ <p>
122
+ It was only ten years or so prior to that time that the world saw the creation
123
+ of this curious thing called UNIX (a play on the name MULTICS). Some of you
124
+ reading this may have wondered (or not) why UNIX and its offspring stored a
125
+ conceptual newline as a single linefeed character (rather than the somewhat
126
+ more sensible "carriage return + linefeed" combination. The answer is that
127
+ the designers wanted to save RAM and disk space. For every line of text, they
128
+ saved an entire byte in this way. When a linefeed was sent to a device such
129
+ as a terminal or printer, the OS typically converted it to a "real" CRLF pair.
130
+ This all happened because memory was scarce and expensive.
131
+
132
+ <p>
133
+ It isn't true anymore. In some cases, we may have learned bad habits and
134
+ forgotten how to conserve memory. But in general, we have more imortant things
135
+ to worry about now.
136
+
137
+ <p>
138
+ But let's think a minute. If memory is cheap and available, why are we
139
+ turning it into a palimpsest? Isn't there something to be said for the idea of
140
+ leaving data alone, never overwriting information, always writing new data
141
+ somewhere else?
142
+
143
+ <p>
144
+ If we do that, we have a "history" of what has happened in program execution,
145
+ like a trail of breadcrumbs. More importantly, pieces of code that run
146
+ concurrently need not worry about stepping on each other's data. One process
147
+ (or thread or fiber) will never write over an item that another process is
148
+ reading. If this doesn't eliminate synchronization issues, it at least
149
+ mitigates them greatly.
150
+
151
+ <p>
152
+ So I'm starting to see where immutable data could be a good thing. And I'm
153
+ starting to see how it's good for concurrency. And concurrency really matters,
154
+ because it is the limiting factor of this generation of computing just as
155
+ memory scarcity was a limiting factor one or two generations ago.
156
+
157
+ <p>
158
+ In fact, I'll speculate a little about memory in general. Let's look 10, 20,
159
+ or even 50 years into the future. (My crystal ball, like everyone else's, is
160
+ very cloudy.)
161
+
162
+ <p>
163
+ I can imagine a time when memory is simply never erased at all. We're seeing
164
+ the crude beginnings of this already. Source control systems and databases
165
+ preserve far more history than they used to. My laptop's OS encourages me to
166
+ think of my backed-up data as a sort of limitless archive of past versions of
167
+ files. It's mostly an illusion, but it needn't always be. Why should any
168
+ document, any image, any video ever be erased?
169
+
170
+ <p>
171
+ Food for thought. Chow down, friends.
172
+ </div>
173
+ </article>
174
+ </body>
175
+ </html>
@@ -0,0 +1,139 @@
1
+ .h1 Immutable data (ditching the wax tablet)
2
+
3
+ .set post.num = 0010
4
+ .set post.slug = immutable-data-ditching-the-wax-tablet
5
+ .set post.date = 2015-08-25
6
+ .set post.title = Immutable data (ditching the wax tablet)
7
+ .set post.tags =
8
+ .set post.views = computing
9
+ .set post.published = yes
10
+ .set post.deployed = no
11
+
12
+ A couple of weeks ago, I went to Phoenix training prior to the Lone Star Ruby
13
+ Conference in Austin. I was talking with Bruce Tate, and he shared with me
14
+ some thoughts about functional programming in general.
15
+ Obviously Bruce isn't responsible if I misquote him. My memory is faulty.
16
+
17
+ "Functional programming is the future," he told me, "and OOP is dying."
18
+ He pointed to the ever-increasing popularity of multi-core machines and the
19
+ increasing irrelevance of conserving memory.
20
+
21
+ He said that OOP was all about optimizing for memory usage, and that was
22
+ no longer such a big concern. I wasn't sure what he meant. I thought about it
23
+ later, and decided I was probably missing some profound points.
24
+
25
+ But at the same time, I thought I saw something with a clarity that I hadn't
26
+ before. I have wrestled with the concepts of FP over the last year or two; as
27
+ a procedural and OOP type, it hasn't always fit into my brain quickly or
28
+ easily.
29
+
30
+ At times it felt that I was taking a step backwards technologically, back into
31
+ procedural thinking. On the one hand, that isn't really true. On the other
32
+ hand, I think we all know what backtracking is for. If you've ever gotten lost
33
+ in a strange town, you know that sometimes you have to back up to a known
34
+ point and try going off in a different direction.
35
+
36
+ If you're interested, you could make some fine analogies here between human
37
+ technological advances and things like game theory and machine learning. It's
38
+ hard to imagine navigating a maze or implementing a chess-playing program
39
+ without the concept of backtracking. But that's not my point here.
40
+
41
+ One of the key concepts in functional programming, as I understand it, is that
42
+ of immutable data. I have spent hours puzzling over this, because it hasn't
43
+ been immediately intuitive to me.
44
+
45
+ There was a quote I read once that the GOTO statement caused difficulties
46
+ because it left us with the question, "How did I get here?" And mutable data
47
+ leaves us with the question, "How did I get to this state?" That made sense
48
+ to me, at least a little.
49
+
50
+ It got me to thinking about a more remote time, when I taught programming
51
+ concepts to beginners (using BASIC). In an effort to explain how a program
52
+ worked, I would run through an exercise on the whiteboard which I called
53
+ "playing computer." Variables were represented by little boxes which more or
54
+ less corresponded to memory locations. As I manually stepped through the execution
55
+ of some simple program, I would erase and update the contents of these boxes.
56
+
57
+ It was nice and effective, but I sometimes did it another way. I expressed the
58
+ same information in the form of a table, with variable names across the
59
+ columns and time increasing down the rows. This made it clear not just what
60
+ values the variables had, but what values they used to have (and how/when they
61
+ changed).
62
+
63
+ As an aside, I'm one of those people who believes that an education should not
64
+ be merely deep but also broad. I believe a good vocabulary, like a good
65
+ education in general, enhances our experience of life.
66
+
67
+ And as I thought about my old whiteboard shenanigans, the word that came to me
68
+ was palimpsest -- a beautiful, useful, poetic word that we rarely see nowadays.
69
+ It's sometimes used figuratively; but the literal definition is (a document on )
70
+ (which the original writing has been erased and replaced with new writing).
71
+
72
+ I thought about the many older modes of writing, such as clay and wax tablets
73
+ and papyrus. Some materials such as papyrus and parchment (vellum) were rather
74
+ limited in availability or moderately labor-intensive to produce; people wanted
75
+ to re-use them. It was natural to wipe (or scrape or clean) such a material
76
+ once the writing on it was no longer relevant. The term "blank slate" ((tabula rasa))
77
+ was once very literal; the stuff we wrote on was the same as the building material.
78
+
79
+ By the way, what is deemed relevant may change over the course of 1,000 or 2,000
80
+ years. Many an archaeologist or linguist has spent countless frustrating hours
81
+ trying to decipher the original writing under some later inscription. In a
82
+ similar way, art experts have gone to enormous lengths to uncover artworks
83
+ which someone painted over rather than start a new canvas.
84
+
85
+ But what if writing materials were cheap? Today we are much more likely to
86
+ have notepads on our desks than little erasable slates or wax tablets.
87
+
88
+ Let's extend the analogy to computer memory. There was a time, perhaps four
89
+ decades ago, when it was expensive and limited in availabilty. I recall seeing
90
+ an information sheet about a mainframe ("What's a mainframe?" asks everyone
91
+ under 40) that listed its specs, almost bragging about its memory, which was
92
+ 448K. Yes, that is less than half a meg. That computer ran a medium-sized
93
+ university. Within seven years, of course, people were carrying around floppy
94
+ disks that held three times that much. ("What's a floppy disk?" asks everyone
95
+ under 30.)
96
+
97
+ It was only ten years or so prior to that time that the world saw the creation
98
+ of this curious thing called UNIX (a play on the name MULTICS). Some of you
99
+ reading this may have wondered (or not) why UNIX and its offspring stored a
100
+ conceptual newline as a single linefeed character (rather than the somewhat
101
+ more sensible "carriage return + linefeed" combination. The answer is that
102
+ the designers wanted to save RAM and disk space. For every line of text, they
103
+ saved an entire byte in this way. When a linefeed was sent to a device such
104
+ as a terminal or printer, the OS typically converted it to a "real" CRLF pair.
105
+ This all happened because memory was scarce and expensive.
106
+
107
+ It isn't true anymore. In some cases, we may have learned bad habits and
108
+ forgotten how to conserve memory. But in general, we have more imortant things
109
+ to worry about now.
110
+
111
+ But let's think a minute. If memory is cheap and available, why are we
112
+ turning it into a palimpsest? Isn't there something to be said for the idea of
113
+ leaving data alone, never overwriting information, always writing new data
114
+ somewhere else?
115
+
116
+ If we do that, we have a "history" of what has happened in program execution,
117
+ like a trail of breadcrumbs. More importantly, pieces of code that run
118
+ concurrently need not worry about stepping on each other's data. One process
119
+ (or thread or fiber) will never write over an item that another process is
120
+ reading. If this doesn't eliminate synchronization issues, it at least
121
+ mitigates them greatly.
122
+
123
+ So I'm starting to see where immutable data could be a good thing. And I'm
124
+ starting to see how it's good for concurrency. And concurrency really matters,
125
+ because it is the limiting factor of this generation of computing just as
126
+ memory scarcity was a limiting factor one or two generations ago.
127
+
128
+ In fact, I'll speculate a little about memory in general. Let's look 10, 20,
129
+ or even 50 years into the future. (My crystal ball, like everyone else's, is
130
+ very cloudy.)
131
+
132
+ I can imagine a time when memory is simply never erased at all. We're seeing
133
+ the crude beginnings of this already. Source control systems and databases
134
+ preserve far more history than they used to. My laptop's OS encourages me to
135
+ think of my backed-up data as a sort of limitless archive of past versions of
136
+ files. It's mostly an illusion, but it needn't always be. Why should any
137
+ document, any image, any video ever be erased?
138
+
139
+ Food for thought. Chow down, friends.
@@ -0,0 +1,7 @@
1
+ num 0011
2
+ title Computer science as a lost art
3
+ date 2015-09-17
4
+ pubdate 2015-09-17
5
+ views computing
6
+ tags
7
+ pinned
@@ -0,0 +1,139 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Computer science as a lost art</title>
6
+ <meta name="generator" content="Scriptorium Import">
7
+ <meta property="og:title" content="Computer science as a lost art">
8
+ <meta property="og:locale" content="en_US">
9
+ <meta property="og:type" content="article">
10
+ <meta property="article:published_time" content="2015-09-17">
11
+ </head>
12
+ <body>
13
+ <article>
14
+ <header>
15
+ <h1>Computer science as a lost art</h1>
16
+ <time datetime="2015-09-17">September 17, 2015</time>
17
+ </header>
18
+
19
+ <div class="content">
20
+ <p>
21
+ An old friend of mine asked me this in email last night...
22
+ <blockquote>
23
+ Thanks for taking the time here. My younger son is interested in pursuing a career in computer science. He's a freshman at Kennesaw State right now, but he really struggles with the idea of taking two years of classes that he has very little interest in. There are three schools in Atlanta with 8- to 16-week full-day immersive courses that focus solely on technology: The Iron Yard, Digital Crafts, and General Assembly. In the world of computer science, what is the opinion is of programs like this? Is a 4-year degree viewed as more valuable?
24
+ </blockquote>
25
+ <b>This morning, this was my off-the-cuff answer:</b>
26
+
27
+ <p>
28
+ Well, here is my opinion... I'm speaking as someone with two degrees and
29
+ therefore six years in comp sci, as well as 30 years' experience. In other words,
30
+ I'm old-fashioned, a freaking dinosaur. :)
31
+
32
+ <p>
33
+ There is a whole generation of computer people who are very different from the
34
+ previous generation. CS used to be (and really still is) a very deep and demanding
35
+ field.
36
+
37
+ <p>
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
+ <p>
47
+ What all this means is that there are more kinds of "computer person" than there
48
+ ever were before. There are many thousands of "programmers" who never took
49
+ a programming course. This is both good and bad.
50
+
51
+ <p>
52
+ It means that a person can get the little things done while knowing very little. But it
53
+ also means that this person probably will never learn enough to get the big things done.
54
+
55
+ <p>
56
+ To be honest, I get secretly frustrated with the lower-level people who now exist
57
+ in giant hordes. (I rarely tell anyone that.) To me, they are like people who have
58
+ decided to learn 5% of their field in order to get a few things done, have some fun,
59
+ and make a living.
60
+
61
+ <p>
62
+ These people use tools to create little applications for everyday use. But remember:
63
+ The tools themselves are also software. But they are a level of software far beyond
64
+ anything these people could dream of creating. They use languages, editors,
65
+ compilers, and operating systems; but they don't have the first clue about how to
66
+ create any of these things or even how they really work.
67
+
68
+ <p>
69
+ In 20 years, some race car driver is going to hold a kid in his lap, and the kid is
70
+ going to say, "Well, I can drive a car, too. Everybody can drive a car. You just
71
+ push the green button and say, 'Take me to Wal-Mart.'" And I kind of feel like that
72
+ race car driver sometimes.
73
+
74
+ <p>
75
+ Bringing it back to computers... My friend had a 7-year-old who used a fancy tool
76
+ that he learned by himself, and he created a game for the iPhone. Sure, it was a
77
+ simple game. But he did something by himself that a PhD could barely have done
78
+ 30 years ago (and not on a handheld device).
79
+
80
+ <p>
81
+ To some extent, my complaints are valid. And to some extent, it's just me being
82
+ an old-timer and a curmudgeon.
83
+
84
+ <p>
85
+ Sometimes I interact with certain people and their complaints and questions show
86
+ where they have reached the boundaries of their knowledge. And sometimes it's
87
+ shocking to me. I think: You should have learned that in your first computer science
88
+ class in your first semester. And then I remember: This person never had a real
89
+ computer science class at all.
90
+
91
+ <p>
92
+ Of course, generations before me look at me the same way. In the 1940s, you
93
+ pretty much had to have a degree in electrical engineering in order to see or touch
94
+ a computer. In the 70s and early 80s, you just had to be a science or engineering
95
+ major. In the 90s, you just had to have a credit card (or have parents with a credit
96
+ card).
97
+
98
+ <p>
99
+ I'm very lost with hardware, by the way. I live on the keyboard. Every time I ever
100
+ opened up a computer to try to change something, I screwed up two other things.
101
+ I'm strictly a software guy. I've known people who made fun of me for that, and
102
+ even older people who laughed a little at me because I didn't know how to use a
103
+ soldering iron.
104
+
105
+ <p>
106
+ It all depends really on what a person really wants to do. If you want to make
107
+ online stores and shopping carts and web forms and pretty pictures and social media
108
+ apps, then you don't need a degree in computer science anymore. Not even an
109
+ associate's degree.
110
+
111
+ <p>
112
+ If you want to make really interesting exciting things that have never existed before,
113
+ if you want to make a tiny little difference in the industry and change the world just a
114
+ little bit, then you do need that degree. If you want to make the tools and libraries
115
+ that the lower-level people use, you do need that degree.
116
+
117
+ <p>
118
+ Or look at it this way: If you want to build doghouses, just pick up some skills with
119
+ hammer and nails, and then go for it. If you want to be an architect who designs and
120
+ builds skyscrapers, then go get a degree in architecture first. But please (speaking
121
+ again as a curmudgeon), don't learn to build doghouses and call yourself an architect.
122
+
123
+ <p>
124
+ I hope this silly rant is helpful in some way. :)
125
+
126
+ <p>
127
+ Ask me any more detailed questions if you want to.
128
+
129
+ <p>
130
+ Cheers,
131
+
132
+ <p>
133
+ Hal
134
+
135
+ <p>
136
+ </div>
137
+ </article>
138
+ </body>
139
+ </html>
@@ -0,0 +1,104 @@
1
+ .h1 Computer science as a lost art
2
+
3
+ .set post.num = 0011
4
+ .set post.slug = computer-science-as-a-lost-art
5
+ .set post.date = 2015-09-17
6
+ .set post.title = Computer science as a lost art
7
+ .set post.tags =
8
+ .set post.views = computing
9
+ .set post.published = yes
10
+ .set post.deployed = no
11
+
12
+ An old friend of mine asked me this in email last night...
13
+
14
+ Thanks for taking the time here. My younger son is interested in pursuing a career in computer science. He's a freshman at Kennesaw State right now, but he really struggles with the idea of taking two years of classes that he has very little interest in. There are three schools in Atlanta with 8- to 16-week full-day immersive courses that focus solely on technology: The Iron Yard, Digital Crafts, and General Assembly. In the world of computer science, what is the opinion is of programs like this? Is a 4-year degree viewed as more valuable?
15
+
16
+ This morning, this was my off-the-cuff answer:
17
+
18
+ Well, here is my opinion... I'm speaking as someone with two degrees and
19
+ therefore six years in comp sci, as well as 30 years' experience. In other words,
20
+ I'm old-fashioned, a freaking dinosaur. :)
21
+
22
+ There is a whole generation of computer people who are very different from the
23
+ previous generation. CS used to be (and really still is) a very deep and demanding
24
+ field.
25
+
26
+ But two or three things have happened. First of all, computers are pretty much
27
+ universal now. Do you know anyone under 80 who doesn't have one? Second, the
28
+ World Wide Web (born in 1989 as a "face" on the more bare-bones Internet)
29
+ started being invaded by the general public in 1995 or so. As usage became more
30
+ common, it became more important to everyday life. And third, the tools we use
31
+ to create applications have gotten a bit more sophisticated. It's easier to use these
32
+ tools, just as it's easier to drive a car now than it was in 1905.
33
+
34
+ What all this means is that there are more kinds of "computer person" than there
35
+ ever were before. There are many thousands of "programmers" who never took
36
+ a programming course. This is both good and bad.
37
+
38
+ It means that a person can get the little things done while knowing very little. But it
39
+ also means that this person probably will never learn enough to get the big things done.
40
+
41
+ To be honest, I get secretly frustrated with the lower-level people who now exist
42
+ in giant hordes. (I rarely tell anyone that.) To me, they are like people who have
43
+ decided to learn 5% of their field in order to get a few things done, have some fun,
44
+ and make a living.
45
+
46
+ These people use tools to create little applications for everyday use. But remember:
47
+ The tools themselves are also software. But they are a level of software far beyond
48
+ anything these people could dream of creating. They use languages, editors,
49
+ compilers, and operating systems; but they don't have the first clue about how to
50
+ create any of these things or even how they really work.
51
+
52
+ In 20 years, some race car driver is going to hold a kid in his lap, and the kid is
53
+ going to say, "Well, I can drive a car, too. Everybody can drive a car. You just
54
+ push the green button and say, 'Take me to Wal-Mart.'" And I kind of feel like that
55
+ race car driver sometimes.
56
+
57
+ Bringing it back to computers... My friend had a 7-year-old who used a fancy tool
58
+ that he learned by himself, and he created a game for the iPhone. Sure, it was a
59
+ simple game. But he did something by himself that a PhD could barely have done
60
+ 30 years ago (and not on a handheld device).
61
+
62
+ To some extent, my complaints are valid. And to some extent, it's just me being
63
+ an old-timer and a curmudgeon.
64
+
65
+ Sometimes I interact with certain people and their complaints and questions show
66
+ where they have reached the boundaries of their knowledge. And sometimes it's
67
+ shocking to me. I think: You should have learned that in your first computer science
68
+ class in your first semester. And then I remember: This person never had a real
69
+ computer science class at all.
70
+
71
+ Of course, generations before me look at me the same way. In the 1940s, you
72
+ pretty much had to have a degree in electrical engineering in order to see or touch
73
+ a computer. In the 70s and early 80s, you just had to be a science or engineering
74
+ major. In the 90s, you just had to have a credit card (or have parents with a credit
75
+ card).
76
+
77
+ I'm very lost with hardware, by the way. I live on the keyboard. Every time I ever
78
+ opened up a computer to try to change something, I screwed up two other things.
79
+ I'm strictly a software guy. I've known people who made fun of me for that, and
80
+ even older people who laughed a little at me because I didn't know how to use a
81
+ soldering iron.
82
+
83
+ It all depends really on what a person really wants to do. If you want to make
84
+ online stores and shopping carts and web forms and pretty pictures and social media
85
+ apps, then you don't need a degree in computer science anymore. Not even an
86
+ associate's degree.
87
+
88
+ If you want to make really interesting exciting things that have never existed before,
89
+ if you want to make a tiny little difference in the industry and change the world just a
90
+ little bit, then you do need that degree. If you want to make the tools and libraries
91
+ that the lower-level people use, you do need that degree.
92
+
93
+ Or look at it this way: If you want to build doghouses, just pick up some skills with
94
+ hammer and nails, and then go for it. If you want to be an architect who designs and
95
+ builds skyscrapers, then go get a degree in architecture first. But please (speaking
96
+ again as a curmudgeon), don't learn to build doghouses and call yourself an architect.
97
+
98
+ I hope this silly rant is helpful in some way. :)
99
+
100
+ Ask me any more detailed questions if you want to.
101
+
102
+ Cheers,
103
+
104
+ Hal
@@ -0,0 +1,7 @@
1
+ num 0012
2
+ title Ruby Day in Turin, Italy
3
+ date 2015-11-10
4
+ pubdate 2015-11-10
5
+ views computing
6
+ tags
7
+ pinned
@@ -0,0 +1,42 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Ruby Day in Turin, Italy</title>
6
+ <meta name="generator" content="Scriptorium Import">
7
+ <meta property="og:title" content="Ruby Day in Turin, Italy">
8
+ <meta property="og:locale" content="en_US">
9
+ <meta property="og:type" content="article">
10
+ <meta property="article:published_time" content="2015-11-10">
11
+ </head>
12
+ <body>
13
+ <article>
14
+ <header>
15
+ <h1>Ruby Day in Turin, Italy</h1>
16
+ <time datetime="2015-11-10">November 10, 2015</time>
17
+ </header>
18
+
19
+ <div class="content">
20
+ <p>
21
+ I'm honored to be speaking on Friday at Ruby Day in Turin, Italy.
22
+ See http://rubyday.it for the schedule.
23
+ I love my career, and I love traveling. It's nice when I get to
24
+ combine them. This is one of those times.
25
+
26
+ <p>
27
+ I'll be presenting a talk entitled "Elixir for the Rubyist" (the
28
+ same as the title of the book I'm working on).
29
+
30
+ <p>
31
+ If you're a Periscope user, be aware that I might try to stream
32
+ some of this event (as well as some of my travels around the city).
33
+
34
+ <p>
35
+ I'll also try to post a link to my slides later (and a video if
36
+ they happen to make one).
37
+
38
+ <p>
39
+ </div>
40
+ </article>
41
+ </body>
42
+ </html>
@@ -0,0 +1,24 @@
1
+ .h1 Ruby Day in Turin, Italy
2
+
3
+ .set post.num = 0012
4
+ .set post.slug = ruby-day-in-turin-italy
5
+ .set post.date = 2015-11-10
6
+ .set post.title = Ruby Day in Turin, Italy
7
+ .set post.tags =
8
+ .set post.views = computing
9
+ .set post.published = yes
10
+ .set post.deployed = no
11
+
12
+ I'm honored to be speaking on Friday at Ruby Day in Turin, Italy.
13
+ See http://rubyday.it for the schedule.
14
+ I love my career, and I love traveling. It's nice when I get to
15
+ combine them. This is one of those times.
16
+
17
+ I'll be presenting a talk entitled "Elixir for the Rubyist" (the
18
+ same as the title of the book I'm working on).
19
+
20
+ If you're a Periscope user, be aware that I might try to stream
21
+ some of this event (as well as some of my travels around the city).
22
+
23
+ I'll also try to post a link to my slides later (and a video if
24
+ they happen to make one).
@@ -0,0 +1,7 @@
1
+ num 0013
2
+ title RubyDay was a success
3
+ date 2015-11-23
4
+ pubdate 2015-11-23
5
+ views computing
6
+ tags
7
+ pinned