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.
- checksums.yaml +4 -4
- data/assets/icons/social/reddit.png +0 -0
- data/assets/icons/social/x-logo.png +0 -0
- data/assets/imagenotfound.jpg +0 -0
- data/bin/sblog +84 -5
- data/bin/scriptorium +1 -0
- data/doc/anti-amnesia/20250727-054000-scriptorium-overview.md +0 -1
- data/doc/anti-amnesia/20250727-123000-anti-amnesia-conventions.md +0 -29
- data/doc/anti-amnesia/20250727-172600-cursor-rbenv-ruby-version-mystery.md +0 -19
- data/doc/anti-amnesia/20250727-172900-ai-cognitive-assessment-capabilities.md +1 -1
- data/doc/anti-amnesia/20250728-124243-aaa-syntax-clarification.md +1 -1
- data/doc/anti-amnesia/20250729-210000-reddit-autopost-integration-complete.md +1 -1
- data/doc/anti-amnesia/20250804-190500-cognitive-loop-bug.md +0 -10
- data/doc/anti-amnesia/20250804-190700-anti-amnesia-timestamping-fix.md +1 -4
- data/doc/anti-amnesia/20250901-211714-codemirror-integration-and-web-tests.md +172 -0
- data/doc/anti-amnesia/20250902-002402-backup-restore-system.md +126 -0
- data/doc/anti-amnesia/20250907-203339-backup-metadata-implementation.md +66 -0
- data/doc/imported/0001-elixir-conf-2014/metadata.txt +7 -0
- data/doc/imported/0001-elixir-conf-2014/post.html +37 -0
- data/doc/imported/0001-elixir-conf-2014/source.lt3 +22 -0
- data/doc/imported/0002-programmers-and-word-processing/metadata.txt +7 -0
- data/doc/imported/0002-programmers-and-word-processing/post.html +192 -0
- data/doc/imported/0002-programmers-and-word-processing/source.lt3 +146 -0
- data/doc/imported/0003-how-to-turn-your-brain-sideways/metadata.txt +7 -0
- data/doc/imported/0003-how-to-turn-your-brain-sideways/post.html +60 -0
- data/doc/imported/0003-how-to-turn-your-brain-sideways/source.lt3 +40 -0
- data/doc/imported/0004-upcoming-lone-star-ruby-conference/metadata.txt +7 -0
- data/doc/imported/0004-upcoming-lone-star-ruby-conference/post.html +42 -0
- data/doc/imported/0004-upcoming-lone-star-ruby-conference/source.lt3 +24 -0
- data/doc/imported/0005-elixir-conf-2015-announced/metadata.txt +7 -0
- data/doc/imported/0005-elixir-conf-2015-announced/post.html +30 -0
- data/doc/imported/0005-elixir-conf-2015-announced/source.lt3 +16 -0
- data/doc/imported/0006-ruby-for-dinosaurs/metadata.txt +7 -0
- data/doc/imported/0006-ruby-for-dinosaurs/post.html +43 -0
- data/doc/imported/0006-ruby-for-dinosaurs/source.lt3 +27 -0
- data/doc/imported/0007-phoenix-isnt-rails/metadata.txt +7 -0
- data/doc/imported/0007-phoenix-isnt-rails/post.html +116 -0
- data/doc/imported/0007-phoenix-isnt-rails/source.lt3 +87 -0
- data/doc/imported/0008-concerning-the-term-monkeypatching/metadata.txt +7 -0
- data/doc/imported/0008-concerning-the-term-monkeypatching/post.html +129 -0
- data/doc/imported/0008-concerning-the-term-monkeypatching/source.lt3 +92 -0
- data/doc/imported/0009-announcement-coming-soon/metadata.txt +7 -0
- data/doc/imported/0009-announcement-coming-soon/post.html +33 -0
- data/doc/imported/0009-announcement-coming-soon/source.lt3 +19 -0
- data/doc/imported/0010-immutable-data-ditching-the-wax-tablet/metadata.txt +7 -0
- data/doc/imported/0010-immutable-data-ditching-the-wax-tablet/post.html +175 -0
- data/doc/imported/0010-immutable-data-ditching-the-wax-tablet/source.lt3 +139 -0
- data/doc/imported/0011-computer-science-as-a-lost-art/metadata.txt +7 -0
- data/doc/imported/0011-computer-science-as-a-lost-art/post.html +139 -0
- data/doc/imported/0011-computer-science-as-a-lost-art/source.lt3 +104 -0
- data/doc/imported/0012-ruby-day-in-turin-italy/metadata.txt +7 -0
- data/doc/imported/0012-ruby-day-in-turin-italy/post.html +42 -0
- data/doc/imported/0012-ruby-day-in-turin-italy/source.lt3 +24 -0
- data/doc/imported/0013-rubyday-was-a-success/metadata.txt +7 -0
- data/doc/imported/0013-rubyday-was-a-success/post.html +44 -0
- data/doc/imported/0013-rubyday-was-a-success/source.lt3 +27 -0
- data/doc/imported/0014-working-on-the-blogging-software/metadata.txt +7 -0
- data/doc/imported/0014-working-on-the-blogging-software/post.html +63 -0
- data/doc/imported/0014-working-on-the-blogging-software/source.lt3 +41 -0
- data/doc/imported/0015-ok-its-not-really-a-lost-art/metadata.txt +7 -0
- data/doc/imported/0015-ok-its-not-really-a-lost-art/post.html +172 -0
- data/doc/imported/0015-ok-its-not-really-a-lost-art/source.lt3 +134 -0
- data/doc/imported/0016-an-in-operator-for-ruby/metadata.txt +7 -0
- data/doc/imported/0016-an-in-operator-for-ruby/post.html +155 -0
- data/doc/imported/0016-an-in-operator-for-ruby/source.lt3 +106 -0
- data/doc/imported/0017-the-forgotten-mathematician/metadata.txt +7 -0
- data/doc/imported/0017-the-forgotten-mathematician/post.html +161 -0
- data/doc/imported/0017-the-forgotten-mathematician/source.lt3 +119 -0
- data/doc/imported/0018-ruby-puns/metadata.txt +7 -0
- data/doc/imported/0018-ruby-puns/post.html +46 -0
- data/doc/imported/0018-ruby-puns/source.lt3 +28 -0
- data/doc/imported/0019-custom-exceptions-via-metaprogramming/metadata.txt +7 -0
- data/doc/imported/0019-custom-exceptions-via-metaprogramming/post.html +138 -0
- data/doc/imported/0019-custom-exceptions-via-metaprogramming/source.lt3 +101 -0
- data/doc/imported/0020-fffff/metadata.txt +7 -0
- data/doc/imported/0020-fffff/post.html +24 -0
- data/doc/imported/0020-fffff/source.lt3 +12 -0
- data/doc/imported/0021-trying-ror-yet-again/metadata.txt +7 -0
- data/doc/imported/0021-trying-ror-yet-again/post.html +26 -0
- data/doc/imported/0021-trying-ror-yet-again/source.lt3 +12 -0
- data/doc/imported/0023-doctor-sleep/metadata.txt +7 -0
- data/doc/imported/0023-doctor-sleep/post.html +63 -0
- data/doc/imported/0023-doctor-sleep/source.lt3 +44 -0
- data/doc/imported/0024-just-a-test/metadata.txt +7 -0
- data/doc/imported/0024-just-a-test/post.html +24 -0
- data/doc/imported/0024-just-a-test/source.lt3 +12 -0
- data/doc/imported/import_summary.txt +98 -0
- data/doc/livetext-informal-spec.txt +65 -0
- data/doc/myuserdoc/ch-0.lt3 +31 -0
- data/doc/myuserdoc/ch-1.lt3 +37 -0
- data/doc/myuserdoc/ch-10.lt3 +22 -0
- data/doc/myuserdoc/ch-2.lt3 +37 -0
- data/doc/myuserdoc/ch-3.lt3 +19 -0
- data/doc/myuserdoc/ch-4.lt3 +43 -0
- data/doc/myuserdoc/ch-5.lt3 +22 -0
- data/doc/myuserdoc/ch-6.lt3 +19 -0
- data/doc/myuserdoc/ch-7.lt3 +16 -0
- data/doc/myuserdoc/ch-8.lt3 +13 -0
- data/doc/myuserdoc/ch-9.lt3 +19 -0
- data/doc/myuserdoc/tweak.rb +18 -0
- data/doc/{userdoc-toc.txt → myuserdoc/userdoc-toc.txt} +27 -27
- data/doc/old-posts/0001-elixir-conf-2014.lt3 +24 -0
- data/doc/old-posts/0002-programmers-and-word-processing.lt3 +150 -0
- data/doc/old-posts/0003-how-to-turn-your-brain-sideways.lt3 +43 -0
- data/doc/old-posts/0004-upcoming-lone-star-ruby-conference.lt3 +26 -0
- data/doc/old-posts/0005-elixir-conf-2015-announced.lt3 +17 -0
- data/doc/old-posts/0006-ruby-for-dinosaurs.lt3 +30 -0
- data/doc/old-posts/0007-phoenix-isnt-rails.lt3 +90 -0
- data/doc/old-posts/0008-concerning-the-term-monkeypatching.lt3 +105 -0
- data/doc/old-posts/0009-announcement-coming-soon.lt3 +20 -0
- data/doc/old-posts/0010-immutable-data-ditching-the-wax-tablet.lt3 +142 -0
- data/doc/old-posts/0011-computer-science-as-a-lost-art.lt3 +117 -0
- data/doc/old-posts/0012-ruby-day-in-turin-italy.lt3 +26 -0
- data/doc/old-posts/0013-rubyday-was-a-success.lt3 +28 -0
- data/doc/old-posts/0014-working-on-the-blogging-software.lt3 +42 -0
- data/doc/old-posts/0015-ok-its-not-really-a-lost-art.lt3 +137 -0
- data/doc/old-posts/0016-an-in-operator-for-ruby.lt3 +142 -0
- data/doc/old-posts/0017-the-forgotten-mathematician.lt3 +129 -0
- data/doc/old-posts/0018-ruby-puns.lt3 +31 -0
- data/doc/old-posts/0019-custom-exceptions-via-metaprogramming.lt3 +116 -0
- data/doc/old-posts/0021-trying-ror-yet-again.lt3 +35 -0
- data/doc/old-posts/0023-doctor-sleep.lt3 +43 -0
- data/doc/old-posts/0024-just-a-test.lt3 +12 -0
- data/doc/old-posts/0025-trying-another-post.lt3 +12 -0
- data/doc/old-repo +1 -0
- data/doc/reddit_integration.md +2 -2
- data/doc/user.lt3 +0 -3
- data/lib/scriptorium/api.rb +1811 -78
- data/lib/scriptorium/banner_svg.rb +55 -68
- data/lib/scriptorium/contract.rb +3 -2
- data/lib/scriptorium/exceptions.rb +133 -102
- data/lib/scriptorium/helpers.rb +282 -82
- data/lib/scriptorium/post.rb +81 -17
- data/lib/scriptorium/reddit.rb +1 -1
- data/lib/scriptorium/repo.rb +478 -164
- data/lib/scriptorium/standard_files.rb +30 -396
- data/lib/scriptorium/support/common_js/clipboard.js +35 -0
- data/lib/scriptorium/support/common_js/content-loader.js +187 -0
- data/lib/scriptorium/support/common_js/navigation.js +52 -0
- data/lib/scriptorium/support/common_js/syntax-highlighting.js +27 -0
- data/lib/scriptorium/support/config/reddit_template.txt +17 -0
- data/{test/scriptorium-TEST-1754622690-146/views/sample → lib/scriptorium/support}/config/social.txt +1 -0
- data/lib/scriptorium/support/highlight/css.txt +2 -0
- data/lib/scriptorium/support/highlight/custom.css +119 -0
- data/lib/scriptorium/support/highlight/js.txt +1 -0
- data/lib/scriptorium/support/post_index/config.txt +15 -0
- data/lib/scriptorium/support/post_index/style.css +55 -0
- data/lib/scriptorium/support/templates/index_entry.lt3 +16 -0
- data/{test/scriptorium-TEST-1754622690-146/themes/standard/initial/post.lt3 → lib/scriptorium/support/templates/initial_post.lt3} +5 -5
- data/lib/scriptorium/support/templates/post.lt3 +104 -0
- data/{test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/header.txt → lib/scriptorium/support/theme/header.lt3} +1 -1
- data/lib/scriptorium/theme.rb +83 -70
- data/lib/scriptorium/version.rb +2 -2
- data/lib/scriptorium/view.rb +194 -149
- data/lib/scriptorium.rb +24 -1
- data/lib/skeleton.rb +4 -1
- data/scriptorium.gemspec +2 -1
- data/test/WEB_INTEGRATION_README.md +196 -0
- data/test/all +40 -0
- data/test/banner_svg/unit.rb +267 -35
- data/test/config/deployment.txt +5 -0
- data/test/integration/integration_test.rb +7 -7
- data/test/integration/preview_flow_test.rb +94 -0
- data/test/livetext_plugin_test.rb +453 -182
- data/test/manual/banner-tests/test01.html +82 -18
- data/test/manual/banner-tests/test02.html +82 -18
- data/test/manual/banner-tests/test03.html +82 -18
- data/test/manual/banner-tests/test04.html +89 -25
- data/test/manual/banner-tests/test05.html +89 -25
- data/test/manual/banner-tests/test06.html +89 -25
- data/test/manual/banner-tests/test07.html +89 -25
- data/test/manual/banner-tests/test08.html +82 -18
- data/test/manual/banner-tests/test09.html +82 -18
- data/test/manual/banner-tests/test10.html +82 -18
- data/test/manual/banner-tests/test11.html +82 -18
- data/test/manual/banner-tests/test12.html +82 -18
- data/test/manual/banner-tests/test13.html +82 -18
- data/test/manual/banner-tests/test14.html +82 -18
- data/test/manual/banner-tests/test15.html +82 -18
- data/test/manual/banner-tests/test16.html +82 -18
- data/test/manual/banner-tests/test17.html +82 -18
- data/test/manual/banner-tests/test18.html +90 -26
- data/test/manual/banner-tests/test19.html +90 -26
- data/test/manual/banner-tests/test20.html +90 -26
- data/test/manual/banner-tests/test21.html +90 -26
- data/test/manual/banner-tests/test22.html +90 -26
- data/test/manual/banner-tests/test23.html +90 -26
- data/test/manual/banner-tests/test24.html +90 -26
- data/test/manual/banner-tests/test25.html +89 -25
- data/test/manual/banner_environment.rb +15 -2
- data/test/manual/codemirror_demo.html +773 -0
- data/test/manual/create_posts_for_web.rb +114 -0
- data/test/manual/preview_manual_test.rb +129 -0
- data/test/manual/test_banner_features.rb +14 -14
- data/test/manual/test_banner_integration.rb +115 -0
- data/test/manual/test_banner_radial.rb +87 -0
- data/test/manual/test_syntax_highlighting.rb +60 -40
- data/test/support/preview_utils.rb +88 -0
- data/test/test_gem_assets.rb +48 -0
- data/test/test_helpers.rb +10 -0
- data/test/tui_editor_integration_test.rb +15 -15
- data/test/tui_integration_test.rb +687 -441
- data/test/unit/api.rb +757 -37
- data/test/unit/asset_management.rb +195 -221
- data/test/unit/backup_test.rb +451 -0
- data/test/unit/contract_test.rb +1 -23
- data/test/unit/core.rb +415 -61
- data/test/unit/deploy_config_test.rb +248 -0
- data/test/unit/deploy_test.rb +312 -21
- data/test/unit/edit_post_test.rb +168 -0
- data/test/unit/gem_asset_management.rb +36 -42
- data/test/unit/livetext_basic.rb +23 -35
- data/test/unit/livetext_compatibility.rb +7 -14
- data/test/unit/parse_cmd_test.rb +260 -0
- data/test/unit/{symlink_test.rb → permalink_copy_test.rb} +47 -49
- data/test/unit/post.rb +91 -26
- data/test/unit/post_index_config_test.rb +258 -0
- data/test/unit/post_state_helpers_test.rb +137 -0
- data/test/unit/read_commented_file_test.rb +8 -6
- data/test/unit/repo.rb +75 -54
- data/test/unit/social_test.rb +41 -44
- data/test/unit/syntax_highlighting.rb +70 -0
- data/test/unit/theme_management_test.rb +91 -0
- data/test/unit/view.rb +79 -12
- data/test/unit/widgets.rb +8 -8
- data/test/web_integration_test.rb +231 -0
- data/test/web_test_helper.rb +218 -0
- data/test/web_workflow_test.rb +527 -0
- data/ui/tui/bin/scriptorium +885 -415
- data/ui/web/app/app.rb +1398 -176
- data/ui/web/app/assets/livetext_mode.js +244 -0
- data/ui/web/app/error_helpers.rb +16 -16
- data/ui/web/app/views/advanced_config.erb +8 -2
- data/ui/web/app/views/asset_management.erb +56 -0
- data/ui/web/app/views/backup_management.erb +238 -0
- data/ui/web/app/views/config_widget.erb +232 -0
- data/ui/web/app/views/dashboard.erb +64 -72
- data/ui/web/app/views/deploy_config.erb +3 -0
- data/ui/web/app/views/edit_pages.erb +170 -2
- data/ui/web/app/views/edit_post.erb +130 -9
- data/ui/web/app/views/edit_theme.erb +73 -0
- data/ui/web/app/views/edit_theme_file.erb +74 -0
- data/ui/web/app/views/theme_management.erb +130 -0
- data/ui/web/app/views/view_dashboard.erb +666 -25
- data/ui/web/app/views/widgets.erb +249 -0
- data/ui/web/bin/scriptorium-web +35 -24
- data/ui/web/tmp/timing.log +17 -0
- data/ui/web/tmp/web_server.log +0 -5
- metadata +190 -116
- data/assets/back-icon.png +0 -0
- data/assets/icons/facebook.svg +0 -1
- data/assets/icons/github.svg +0 -1
- data/assets/icons/instagram.svg +0 -1
- data/assets/icons/reddit.svg +0 -1
- data/assets/icons/x.svg +0 -1
- data/assets/icons/youtube.svg +0 -1
- data/bin/scriptorium +0 -1511
- data/doc/anti-amnesia/20250727-060000-api-design-tui-planning.md +0 -34
- data/doc/anti-amnesia/20250727-061000-runeblog-tui-analysis.md +0 -50
- data/doc/anti-amnesia/20250727-154000-livetext-plugin-file-stats.md +0 -73
- data/doc/anti-amnesia/20250727-172600-unified-minitest-framework.md +0 -70
- data/doc/anti-amnesia/20250727-173000-widget-testing-achievement.md +0 -110
- data/doc/anti-amnesia/20250727-180000-post-id-num-refactoring.md +0 -73
- data/doc/anti-amnesia/20250728-124421-conversation-summary-concise.md +0 -124
- data/doc/anti-amnesia/20250729-190000-scriptorium-tui-testing-complete.md +0 -46
- data/doc/anti-amnesia/20250729-200000-scriptorium-tui-testing-edit-file-workflow.md +0 -97
- data/doc/anti-amnesia/20250729-211500-dependency-management-system.md +0 -211
- data/doc/anti-amnesia/20250729-213000-python-virtual-environment-setup.md +0 -141
- data/doc/anti-amnesia/20250729-214500-theme-management-commands.md +0 -211
- data/doc/anti-amnesia/20250729-215000-version-update-to-0.6.0.md +0 -134
- data/doc/anti-amnesia/20250729-220000-user-guide-complete.md +0 -41
- data/doc/anti-amnesia/20250804-213700-publishing-test-fix.md +0 -49
- data/doc/anti-amnesia/20250804-214400-additional-test-fixes.md +0 -46
- data/doc/anti-amnesia/20250804-220000-asset-function-logic-clarification.md +0 -41
- data/doc/anti-amnesia/20250806-202032-asset-function-logic-clarification.md +0 -41
- data/doc/anti-amnesia/20250813-082428-syntax-highlighting-and-navigation-improvements.md +0 -256
- data/lib/scriptorium/syntax_highlighter.rb +0 -234
- data/test/manual/deploy_symlink_demo.rb +0 -142
- data/test/manual/symlink_demo.rb +0 -117
- data/test/manual/test2.rb +0 -12
- data/test/manual/test_banner_from_file.rb +0 -150
- data/test/manual/test_banner_in_header.rb +0 -35
- data/test/manual/test_code_highlighting.rb +0 -68
- data/test/manual/test_complex_header.rb +0 -74
- data/test/manual/test_empty_header.rb +0 -32
- data/test/manual/test_radial_custom.rb +0 -58
- data/test/manual/test_radial_large_radius.rb +0 -52
- data/test/manual/test_svg_debug.rb +0 -47
- data/test/pages-demo/config/currentview.txt +0 -1
- data/test/pages-demo/views/demo/config/common.js +0 -57
- data/test/pages-demo/views/demo/config/footer.txt +0 -1
- data/test/pages-demo/views/demo/config/global-head.txt +0 -8
- data/test/pages-demo/views/demo/config/header.txt +0 -1
- data/test/pages-demo/views/demo/config/layout.txt +0 -1
- data/test/pages-demo/views/demo/config/left.txt +0 -1
- data/test/pages-demo/views/demo/config/main.txt +0 -1
- data/test/pages-demo/views/demo/config/right.txt +0 -1
- data/test/pages-demo/views/demo/config.txt +0 -3
- data/test/pages-demo/views/demo/output/panes/footer.html +0 -1
- data/test/pages-demo/views/demo/output/panes/header.html +0 -1
- data/test/pages-demo/views/demo/output/panes/left.html +0 -1
- data/test/pages-demo/views/demo/output/panes/main.html +0 -1
- data/test/pages-demo/views/demo/output/panes/right.html +0 -1
- data/test/scriptorium-TEST-1754622690-146/config/bootstrap_css.txt +0 -5
- data/test/scriptorium-TEST-1754622690-146/config/bootstrap_js.txt +0 -4
- data/test/scriptorium-TEST-1754622690-146/config/common.js +0 -57
- data/test/scriptorium-TEST-1754622690-146/config/currentview.txt +0 -1
- data/test/scriptorium-TEST-1754622690-146/config/global-head.txt +0 -9
- data/test/scriptorium-TEST-1754622690-146/config/last_post_num.txt +0 -1
- data/test/scriptorium-TEST-1754622690-146/config/os_helpers.rb +0 -4
- data/test/scriptorium-TEST-1754622690-146/config/widgets.txt +0 -3
- data/test/scriptorium-TEST-1754622690-146/posts/0001/meta.txt +0 -8
- data/test/scriptorium-TEST-1754622690-146/posts/0001/source.lt3 +0 -6
- data/test/scriptorium-TEST-1754622690-146/themes/standard/README.txt +0 -1
- data/test/scriptorium-TEST-1754622690-146/themes/standard/config.txt +0 -1
- data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/gen/text.css +0 -1
- data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/index.lt3 +0 -1
- data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/index_entry.lt3 +0 -14
- data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/post.lt3 +0 -13
- data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/widget.lt3 +0 -1
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/bootstrap_css.txt +0 -5
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/bootstrap_js.txt +0 -4
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/common.js +0 -57
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/deploy.txt +0 -5
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/footer.txt +0 -2
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/global-head.txt +0 -9
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/header.txt +0 -4
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/layout.txt +0 -5
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/left.txt +0 -3
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/main.txt +0 -5
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/right.txt +0 -3
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/status.txt +0 -7
- data/test/scriptorium-TEST-1754622690-146/views/sample/config.txt +0 -3
- data/test/scriptorium-TEST-1754622690-146/views/sample/layout/footer.html +0 -3
- data/test/scriptorium-TEST-1754622690-146/views/sample/layout/header.html +0 -3
- data/test/scriptorium-TEST-1754622690-146/views/sample/layout/left.html +0 -3
- data/test/scriptorium-TEST-1754622690-146/views/sample/layout/main.html +0 -3
- data/test/scriptorium-TEST-1754622690-146/views/sample/layout/right.html +0 -3
- data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/footer.html +0 -1
- data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/header.html +0 -1
- data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/left.html +0 -1
- data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/main.html +0 -1
- data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/right.html +0 -1
- data/ui/web/tmp/web_server.pid +0 -1
- /data/{test/pages-demo/views/demo/config/bootstrap_css.txt → lib/scriptorium/support/bootstrap/css.txt} +0 -0
- /data/{test/pages-demo/views/demo/config/bootstrap_js.txt → lib/scriptorium/support/bootstrap/js.txt} +0 -0
- /data/{test/scriptorium-TEST-1754622690-146/views/sample → lib/scriptorium/support}/config/reddit.txt +0 -0
- /data/{test/scriptorium-TEST-1754622690-146/themes/standard/layout → lib/scriptorium/support/templates}/layout.txt +0 -0
- /data/{test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/footer.txt → lib/scriptorium/support/theme/footer.lt3} +0 -0
- /data/{test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/left.txt → lib/scriptorium/support/theme/left.lt3} +0 -0
- /data/{test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/main.txt → lib/scriptorium/support/theme/main.lt3} +0 -0
- /data/{test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/right.txt → lib/scriptorium/support/theme/right.lt3} +0 -0
- /data/test/manual/banner-tests/{config.txt → svg.txt} +0 -0
- /data/test/manual/{test6.rb → test_advanced_widgets.rb} +0 -0
- /data/test/manual/{test1.rb → test_basic_posts.rb} +0 -0
- /data/test/manual/{test4.rb → test_layout_widgets.rb} +0 -0
- /data/test/manual/{test5.rb → test_pagination.rb} +0 -0
- /data/test/manual/{test3.rb → test_random_posts.rb} +0 -0
@@ -0,0 +1,44 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<title>RubyDay was a success</title>
|
6
|
+
<meta name="generator" content="Scriptorium Import">
|
7
|
+
<meta property="og:title" content="RubyDay was a success">
|
8
|
+
<meta property="og:locale" content="en_US">
|
9
|
+
<meta property="og:type" content="article">
|
10
|
+
<meta property="article:published_time" content="2015-11-23">
|
11
|
+
</head>
|
12
|
+
<body>
|
13
|
+
<article>
|
14
|
+
<header>
|
15
|
+
<h1>RubyDay was a success</h1>
|
16
|
+
<time datetime="2015-11-23">November 23, 2015</time>
|
17
|
+
</header>
|
18
|
+
|
19
|
+
<div class="content">
|
20
|
+
<p>
|
21
|
+
On November 13, I attended Ruby Day in Turin, Italy. It was well worth the trip.
|
22
|
+
Like any other Ruby conference, there was an eclectic assemblage of people. I only
|
23
|
+
attended the English language talks, as my knowledge of Italian is very minimal.
|
24
|
+
|
25
|
+
<p>
|
26
|
+
My own talk "Elixir for the Rubyist" was reasonably well attended and well received.
|
27
|
+
I'll post a link to the slides and video later.
|
28
|
+
|
29
|
+
<p>
|
30
|
+
I was personally very impressed by Ju Liu's talk on Sonic Pi. His style of teaching
|
31
|
+
was an excellent example of what I call <i>incremental</i> learning_ (for which there is
|
32
|
+
probably a "real" term that I don't know). Additionally, it's hard to imagine anyone
|
33
|
+
watching that talk and <i>not_</i> wanting to play with Sonic Pi.
|
34
|
+
|
35
|
+
<p>
|
36
|
+
I also greatly enjoyed the talks by Ramon Huidobro and James Kiesel. Once those videos
|
37
|
+
are up, I'll post links to those as well.
|
38
|
+
|
39
|
+
<p>
|
40
|
+
Turin is a beautiful city. I look forward to going back sometime.
|
41
|
+
</div>
|
42
|
+
</article>
|
43
|
+
</body>
|
44
|
+
</html>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
.h1 RubyDay was a success
|
2
|
+
|
3
|
+
.set post.num = 0013
|
4
|
+
.set post.slug = rubyday-was-a-success
|
5
|
+
.set post.date = 2015-11-23
|
6
|
+
.set post.title = RubyDay was a success
|
7
|
+
.set post.tags =
|
8
|
+
.set post.views = computing
|
9
|
+
.set post.published = yes
|
10
|
+
.set post.deployed = no
|
11
|
+
|
12
|
+
On November 13, I attended Ruby Day in Turin, Italy. It was well worth the trip.
|
13
|
+
Like any other Ruby conference, there was an eclectic assemblage of people. I only
|
14
|
+
attended the English language talks, as my knowledge of Italian is very minimal.
|
15
|
+
|
16
|
+
My own talk "Elixir for the Rubyist" was reasonably well attended and well received.
|
17
|
+
I'll post a link to the slides and video later.
|
18
|
+
|
19
|
+
I was personally very impressed by Ju Liu's talk on Sonic Pi. His style of teaching
|
20
|
+
was an excellent example of what I call incremental learning_ (for which there is
|
21
|
+
probably a "real" term that I don't know). Additionally, it's hard to imagine anyone
|
22
|
+
watching that talk and not_ wanting to play with Sonic Pi.
|
23
|
+
|
24
|
+
I also greatly enjoyed the talks by Ramon Huidobro and James Kiesel. Once those videos
|
25
|
+
are up, I'll post links to those as well.
|
26
|
+
|
27
|
+
Turin is a beautiful city. I look forward to going back sometime.
|
@@ -0,0 +1,63 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<title>Working on the blogging software</title>
|
6
|
+
<meta name="generator" content="Scriptorium Import">
|
7
|
+
<meta property="og:title" content="Working on the blogging software">
|
8
|
+
<meta property="og:locale" content="en_US">
|
9
|
+
<meta property="og:type" content="article">
|
10
|
+
<meta property="article:published_time" content="2016-04-14">
|
11
|
+
</head>
|
12
|
+
<body>
|
13
|
+
<article>
|
14
|
+
<header>
|
15
|
+
<h1>Working on the blogging software</h1>
|
16
|
+
<time datetime="2016-04-14">April 14, 2016</time>
|
17
|
+
</header>
|
18
|
+
|
19
|
+
<div class="content">
|
20
|
+
<p>
|
21
|
+
Everyone warned me not to go down this road. I didn't listen.
|
22
|
+
|
23
|
+
<p>
|
24
|
+
What I've heard is that once you start working on your own
|
25
|
+
blogging system, it's a rabbithole. You spend more time working
|
26
|
+
on the code than you do blogging.
|
27
|
+
|
28
|
+
<p>
|
29
|
+
I think I believe it. But is that really so bad? Coding, after all,
|
30
|
+
is fun. Isn't that one of the reasons we do it?
|
31
|
+
|
32
|
+
<p>
|
33
|
+
It's true that I'm spending a lot of time reinventing the wheel (and
|
34
|
+
doing it badly). But I'm also implementing features that I've never
|
35
|
+
seen anywhere else.
|
36
|
+
|
37
|
+
<p>
|
38
|
+
And I like those features. They work for me.
|
39
|
+
|
40
|
+
<p>
|
41
|
+
Besides, working on the Elixir book is plenty of writing. It doesn't
|
42
|
+
leave me with much energy for blogging.
|
43
|
+
|
44
|
+
<p>
|
45
|
+
The big problem, of course, with "eating my own dog food" (as the
|
46
|
+
saying goes) is that it only has to be palatable to <i>(me).</i> It is
|
47
|
+
unlikely that my blog code will ever really see the light of day,
|
48
|
+
because people would say, "You mean it doesn't even have feature X?"
|
49
|
+
|
50
|
+
<p>
|
51
|
+
To which I could only reply, "I didn't want feature X."
|
52
|
+
|
53
|
+
<p>
|
54
|
+
Or, "You mean it doesn't even catch this simple error condition?" To
|
55
|
+
which I would have to reply, "I know not to make that error."
|
56
|
+
|
57
|
+
<p>
|
58
|
+
The first 90% of a software project is fairly easy. It's the second
|
59
|
+
90% where it starts to get painful.
|
60
|
+
</div>
|
61
|
+
</article>
|
62
|
+
</body>
|
63
|
+
</html>
|
@@ -0,0 +1,41 @@
|
|
1
|
+
.h1 Working on the blogging software
|
2
|
+
|
3
|
+
.set post.num = 0014
|
4
|
+
.set post.slug = working-on-the-blogging-software
|
5
|
+
.set post.date = 2016-04-14
|
6
|
+
.set post.title = Working on the blogging software
|
7
|
+
.set post.tags =
|
8
|
+
.set post.views = computing
|
9
|
+
.set post.published = yes
|
10
|
+
.set post.deployed = no
|
11
|
+
|
12
|
+
Everyone warned me not to go down this road. I didn't listen.
|
13
|
+
|
14
|
+
What I've heard is that once you start working on your own
|
15
|
+
blogging system, it's a rabbithole. You spend more time working
|
16
|
+
on the code than you do blogging.
|
17
|
+
|
18
|
+
I think I believe it. But is that really so bad? Coding, after all,
|
19
|
+
is fun. Isn't that one of the reasons we do it?
|
20
|
+
|
21
|
+
It's true that I'm spending a lot of time reinventing the wheel (and
|
22
|
+
doing it badly). But I'm also implementing features that I've never
|
23
|
+
seen anywhere else.
|
24
|
+
|
25
|
+
And I like those features. They work for me.
|
26
|
+
|
27
|
+
Besides, working on the Elixir book is plenty of writing. It doesn't
|
28
|
+
leave me with much energy for blogging.
|
29
|
+
|
30
|
+
The big problem, of course, with "eating my own dog food" (as the
|
31
|
+
saying goes) is that it only has to be palatable to (me). It is
|
32
|
+
unlikely that my blog code will ever really see the light of day,
|
33
|
+
because people would say, "You mean it doesn't even have feature X?"
|
34
|
+
|
35
|
+
To which I could only reply, "I didn't want feature X."
|
36
|
+
|
37
|
+
Or, "You mean it doesn't even catch this simple error condition?" To
|
38
|
+
which I would have to reply, "I know not to make that error."
|
39
|
+
|
40
|
+
The first 90% of a software project is fairly easy. It's the second
|
41
|
+
90% where it starts to get painful.
|
@@ -0,0 +1,172 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<title>OK, it's not really a lost art</title>
|
6
|
+
<meta name="generator" content="Scriptorium Import">
|
7
|
+
<meta property="og:title" content="OK, it's not really 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="2018-07-31">
|
11
|
+
</head>
|
12
|
+
<body>
|
13
|
+
<article>
|
14
|
+
<header>
|
15
|
+
<h1>OK, it's not really a lost art</h1>
|
16
|
+
<time datetime="2018-07-31">July 31, 2018</time>
|
17
|
+
</header>
|
18
|
+
|
19
|
+
<div class="content">
|
20
|
+
<p>
|
21
|
+
I was surprised to learn that an old blog entry was
|
22
|
+
being discussed on reddit. Maybe I should update my comments a little.
|
23
|
+
It seemed odd to me that a blog I had abandoned (_[mea culpa])
|
24
|
+
had generated three emails to me in a single week. Finally
|
25
|
+
someone pointed out to me that it had been reposted and was
|
26
|
+
getting a little bit of attention.
|
27
|
+
|
28
|
+
<p>
|
29
|
+
I haven't read all the responses from the numerous redditors.
|
30
|
+
Maybe I'll read more later. This is my tentative response.
|
31
|
+
|
32
|
+
<p>
|
33
|
+
Many have suggested that the speckled background is ugly and
|
34
|
+
hard to read. Ugly, probably. Hard to read-- well, it looked
|
35
|
+
OK on my screen. But, point taken, it's gone.
|
36
|
+
|
37
|
+
<p>
|
38
|
+
Someone used the term "elitist sour grapes." That is probably
|
39
|
+
largely correct. :)
|
40
|
+
|
41
|
+
<p>
|
42
|
+
Someone else said you shouldn't trust someone who claims to be
|
43
|
+
a web developer but doesn't know CSS. That, I would say, is 100%
|
44
|
+
correct.
|
45
|
+
|
46
|
+
<p>
|
47
|
+
But you see, I do not claim to be a web developer. In fact, I
|
48
|
+
specifically claim that I do <i>not</i> know web development.
|
49
|
+
|
50
|
+
<p>
|
51
|
+
I realize that web guys have collectively made billions, maybe
|
52
|
+
even trillions of dollars over the years. And it is an absolutely
|
53
|
+
necessary part of modern society, and I don't want to demean the
|
54
|
+
people who are good at it and who want to do it.
|
55
|
+
|
56
|
+
<p>
|
57
|
+
But web coding as such just doesn't interest me. I'm not good at it,
|
58
|
+
and I don't <i>want</i> to be good at it. I'd rather do other things.
|
59
|
+
|
60
|
+
<p>
|
61
|
+
I'm not a programming "god" or "rock star," by the way. I'm
|
62
|
+
just a guy who's been doing this a long time, but has not stuck
|
63
|
+
to one thing long enough to be considered brilliant.
|
64
|
+
|
65
|
+
<p>
|
66
|
+
The user LondonPilot raises some very interesting points. I wish I
|
67
|
+
could buy him a beer or six (or substitute beverage of choice).
|
68
|
+
|
69
|
+
<p>
|
70
|
+
In fact, his argument is sort of the flip side of mine-- and arguably
|
71
|
+
the more important angle on the whole situation. I would even say that
|
72
|
+
I have made the same argument at different times and places in the past.
|
73
|
+
|
74
|
+
<p>
|
75
|
+
Here's a good example. I recall a time in the early 90s, when personal
|
76
|
+
computers were less common, I had two friends who had recently got
|
77
|
+
married. He was an electrical engineer, and she majored (I think) in
|
78
|
+
English. This was 1992, when Windows 3.1 was hip and trendy in some
|
79
|
+
circles, and DOS was still very much alive.
|
80
|
+
|
81
|
+
<p>
|
82
|
+
Jon slightly bemoaned the fact that Joyce used a Mac rather than a PC.
|
83
|
+
He made the comment that "people don't learn anything about computers
|
84
|
+
that way." I suspect from his hardware-oriented point of view, the DOS
|
85
|
+
command line was pretty super-high-level.
|
86
|
+
|
87
|
+
<p>
|
88
|
+
In some ways, I sympathized. But I made the counter-argument that a
|
89
|
+
toaster is meant to toast bread, not to teach us about electricity.
|
90
|
+
(He hated this analogy.) But I often felt the computer should become
|
91
|
+
invisible-- that the proper response to "What are you doing?" should
|
92
|
+
be "I'm writing a paper" or "I'm designing a graphic" or whatever--
|
93
|
+
it should never be "I'm using the computer." And we've made some great
|
94
|
+
progress there in recent decades.
|
95
|
+
|
96
|
+
<p>
|
97
|
+
Let me amend what I said before. I don't <i>mean</i> to backtrack (though I
|
98
|
+
probably will), but to clarify and expand.
|
99
|
+
|
100
|
+
<p>
|
101
|
+
First of all, there <i>are</i> in fact certain small lessons from computer
|
102
|
+
science that even a modern "clean hands" developer should know. I
|
103
|
+
cannot <i>count</i> the number of times I have seen a programmer (and I
|
104
|
+
really wanted to put quotes around that) who was absolutely <i>incensed</i>
|
105
|
+
that <font size=+1><tt>(2.0/3.0)*3.0</tt></font> was only <font size=+1><tt>1.99999999</tt></font> or thereabouts. I have seen
|
106
|
+
people who were <i>livid</i> and demanded that this bug be fixed.
|
107
|
+
|
108
|
+
<p>
|
109
|
+
I have also had difficulty explaining that no matter how fast your
|
110
|
+
processor is, an algorithm that is <font size=+1><tt>O(N^2)</tt></font> can eventually bite you.
|
111
|
+
I have seen people who didn't know that hard disk access is typically
|
112
|
+
slower than memory access. I could go on.
|
113
|
+
|
114
|
+
<p>
|
115
|
+
Having said that: You can get an awful lot done these days without any
|
116
|
+
CS coursework. You can create things that are useful, worthwhile, and
|
117
|
+
certainly financially successful.
|
118
|
+
|
119
|
+
<p>
|
120
|
+
And there is nothing magical about a degree anyway. What counts is
|
121
|
+
domain knowledge-- and I mean enough knowledge to be truly effective,
|
122
|
+
not just "enough to fool your manager" (and perhaps not just "enough
|
123
|
+
to pass a boot camp").
|
124
|
+
|
125
|
+
<p>
|
126
|
+
So getting back to the excellent comments by LondonPilot-- I think
|
127
|
+
perhaps there should be another field or discipline split off from
|
128
|
+
computer science. This would be parallel to what I believe happened
|
129
|
+
with electrical engineering and computer science.
|
130
|
+
|
131
|
+
<p>
|
132
|
+
I studied CS for 6 years, and as far as I recall, I only had two or
|
133
|
+
three EE courses (including one lab). To the generation before mine,
|
134
|
+
that might seem like a horrifying concept.
|
135
|
+
|
136
|
+
<p>
|
137
|
+
So let's imagine a new major. I don't know what to call it-- maybe
|
138
|
+
"High-Level Computing"? Not a great neologism, but I'll run with it
|
139
|
+
for now. An HLC major would certainly have one or two courses that
|
140
|
+
were from traditional CS (just as I myself had my fleeting glimpse
|
141
|
+
at EE material). But the rest would be more pragmatic, more about
|
142
|
+
gluing this piece of tech to that one, properly trusting that the
|
143
|
+
components were created and tested by CS people-- just as I properly
|
144
|
+
trust that my CPU works as advertised and never try to build my own.
|
145
|
+
|
146
|
+
<p>
|
147
|
+
As LondonPilot said, this is not a bad thing. This is how human
|
148
|
+
progress works.
|
149
|
+
|
150
|
+
<p>
|
151
|
+
I do wish that more web developers had deeper knowledge. But (and
|
152
|
+
here I may truly be backtracking)-- it does not have to be super-
|
153
|
+
deep knowledge. I probably said it did, but I was wrong, of course.
|
154
|
+
As long as there are cars, there will be people who understand the
|
155
|
+
workings of the engines; but a self-driving car will be perfectly
|
156
|
+
useful in getting from point A to point B. Part of the point of
|
157
|
+
technology is to make it easier to accomplish tasks with less effort
|
158
|
+
and less specialized knowledge.
|
159
|
+
|
160
|
+
<p>
|
161
|
+
So my modest proposal would be: Let CS give birth to a new field
|
162
|
+
just as EE gave birth to CS. EE did not die, and CS will not die
|
163
|
+
in the imaginable future. Let's just admit these are different
|
164
|
+
ways of thinking now, and should perhaps be different tracks.
|
165
|
+
|
166
|
+
<p>
|
167
|
+
Thank you to all who responded. Maybe I'll dust off this blog again
|
168
|
+
soon.
|
169
|
+
</div>
|
170
|
+
</article>
|
171
|
+
</body>
|
172
|
+
</html>
|
@@ -0,0 +1,134 @@
|
|
1
|
+
.h1 OK, it's not really a lost art
|
2
|
+
|
3
|
+
.set post.num = 0015
|
4
|
+
.set post.slug = ok-its-not-really-a-lost-art
|
5
|
+
.set post.date = 2018-07-31
|
6
|
+
.set post.title = OK, it's not really a lost art
|
7
|
+
.set post.tags =
|
8
|
+
.set post.views = computing
|
9
|
+
.set post.published = yes
|
10
|
+
.set post.deployed = no
|
11
|
+
|
12
|
+
I was surprised to learn that an old blog entry was
|
13
|
+
being discussed on reddit. Maybe I should update my comments a little.
|
14
|
+
It seemed odd to me that a blog I had abandoned (_[mea culpa])
|
15
|
+
had generated three emails to me in a single week. Finally
|
16
|
+
someone pointed out to me that it had been reposted and was
|
17
|
+
getting a little bit of attention.
|
18
|
+
|
19
|
+
I haven't read all the responses from the numerous redditors.
|
20
|
+
Maybe I'll read more later. This is my tentative response.
|
21
|
+
|
22
|
+
Many have suggested that the speckled background is ugly and
|
23
|
+
hard to read. Ugly, probably. Hard to read-- well, it looked
|
24
|
+
OK on my screen. But, point taken, it's gone.
|
25
|
+
|
26
|
+
Someone used the term "elitist sour grapes." That is probably
|
27
|
+
largely correct. :)
|
28
|
+
|
29
|
+
Someone else said you shouldn't trust someone who claims to be
|
30
|
+
a web developer but doesn't know CSS. That, I would say, is 100%
|
31
|
+
correct.
|
32
|
+
|
33
|
+
But you see, I do not claim to be a web developer. In fact, I
|
34
|
+
specifically claim that I do not know web development.
|
35
|
+
|
36
|
+
I realize that web guys have collectively made billions, maybe
|
37
|
+
even trillions of dollars over the years. And it is an absolutely
|
38
|
+
necessary part of modern society, and I don't want to demean the
|
39
|
+
people who are good at it and who want to do it.
|
40
|
+
|
41
|
+
But web coding as such just doesn't interest me. I'm not good at it,
|
42
|
+
and I don't want to be good at it. I'd rather do other things.
|
43
|
+
|
44
|
+
I'm not a programming "god" or "rock star," by the way. I'm
|
45
|
+
just a guy who's been doing this a long time, but has not stuck
|
46
|
+
to one thing long enough to be considered brilliant.
|
47
|
+
|
48
|
+
The user LondonPilot raises some very interesting points. I wish I
|
49
|
+
could buy him a beer or six (or substitute beverage of choice).
|
50
|
+
|
51
|
+
In fact, his argument is sort of the flip side of mine-- and arguably
|
52
|
+
the more important angle on the whole situation. I would even say that
|
53
|
+
I have made the same argument at different times and places in the past.
|
54
|
+
|
55
|
+
Here's a good example. I recall a time in the early 90s, when personal
|
56
|
+
computers were less common, I had two friends who had recently got
|
57
|
+
married. He was an electrical engineer, and she majored (I think) in
|
58
|
+
English. This was 1992, when Windows 3.1 was hip and trendy in some
|
59
|
+
circles, and DOS was still very much alive.
|
60
|
+
|
61
|
+
Jon slightly bemoaned the fact that Joyce used a Mac rather than a PC.
|
62
|
+
He made the comment that "people don't learn anything about computers
|
63
|
+
that way." I suspect from his hardware-oriented point of view, the DOS
|
64
|
+
command line was pretty super-high-level.
|
65
|
+
|
66
|
+
In some ways, I sympathized. But I made the counter-argument that a
|
67
|
+
toaster is meant to toast bread, not to teach us about electricity.
|
68
|
+
(He hated this analogy.) But I often felt the computer should become
|
69
|
+
invisible-- that the proper response to "What are you doing?" should
|
70
|
+
be "I'm writing a paper" or "I'm designing a graphic" or whatever--
|
71
|
+
it should never be "I'm using the computer." And we've made some great
|
72
|
+
progress there in recent decades.
|
73
|
+
|
74
|
+
Let me amend what I said before. I don't mean to backtrack (though I
|
75
|
+
probably will), but to clarify and expand.
|
76
|
+
|
77
|
+
First of all, there are in fact certain small lessons from computer
|
78
|
+
science that even a modern "clean hands" developer should know. I
|
79
|
+
cannot count the number of times I have seen a programmer (and I
|
80
|
+
really wanted to put quotes around that) who was absolutely incensed
|
81
|
+
that (2.0/3.0)*3.0 was only 1.99999999 or thereabouts. I have seen
|
82
|
+
people who were livid and demanded that this bug be fixed.
|
83
|
+
|
84
|
+
I have also had difficulty explaining that no matter how fast your
|
85
|
+
processor is, an algorithm that is O(N^2) can eventually bite you.
|
86
|
+
I have seen people who didn't know that hard disk access is typically
|
87
|
+
slower than memory access. I could go on.
|
88
|
+
|
89
|
+
Having said that: You can get an awful lot done these days without any
|
90
|
+
CS coursework. You can create things that are useful, worthwhile, and
|
91
|
+
certainly financially successful.
|
92
|
+
|
93
|
+
And there is nothing magical about a degree anyway. What counts is
|
94
|
+
domain knowledge-- and I mean enough knowledge to be truly effective,
|
95
|
+
not just "enough to fool your manager" (and perhaps not just "enough
|
96
|
+
to pass a boot camp").
|
97
|
+
|
98
|
+
So getting back to the excellent comments by LondonPilot-- I think
|
99
|
+
perhaps there should be another field or discipline split off from
|
100
|
+
computer science. This would be parallel to what I believe happened
|
101
|
+
with electrical engineering and computer science.
|
102
|
+
|
103
|
+
I studied CS for 6 years, and as far as I recall, I only had two or
|
104
|
+
three EE courses (including one lab). To the generation before mine,
|
105
|
+
that might seem like a horrifying concept.
|
106
|
+
|
107
|
+
So let's imagine a new major. I don't know what to call it-- maybe
|
108
|
+
"High-Level Computing"? Not a great neologism, but I'll run with it
|
109
|
+
for now. An HLC major would certainly have one or two courses that
|
110
|
+
were from traditional CS (just as I myself had my fleeting glimpse
|
111
|
+
at EE material). But the rest would be more pragmatic, more about
|
112
|
+
gluing this piece of tech to that one, properly trusting that the
|
113
|
+
components were created and tested by CS people-- just as I properly
|
114
|
+
trust that my CPU works as advertised and never try to build my own.
|
115
|
+
|
116
|
+
As LondonPilot said, this is not a bad thing. This is how human
|
117
|
+
progress works.
|
118
|
+
|
119
|
+
I do wish that more web developers had deeper knowledge. But (and
|
120
|
+
here I may truly be backtracking)-- it does not have to be super-
|
121
|
+
deep knowledge. I probably said it did, but I was wrong, of course.
|
122
|
+
As long as there are cars, there will be people who understand the
|
123
|
+
workings of the engines; but a self-driving car will be perfectly
|
124
|
+
useful in getting from point A to point B. Part of the point of
|
125
|
+
technology is to make it easier to accomplish tasks with less effort
|
126
|
+
and less specialized knowledge.
|
127
|
+
|
128
|
+
So my modest proposal would be: Let CS give birth to a new field
|
129
|
+
just as EE gave birth to CS. EE did not die, and CS will not die
|
130
|
+
in the imaginable future. Let's just admit these are different
|
131
|
+
ways of thinking now, and should perhaps be different tracks.
|
132
|
+
|
133
|
+
Thank you to all who responded. Maybe I'll dust off this blog again
|
134
|
+
soon.
|
@@ -0,0 +1,155 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<title>An 'in' operator for Ruby</title>
|
6
|
+
<meta name="generator" content="Scriptorium Import">
|
7
|
+
<meta property="og:title" content="An 'in' operator for Ruby">
|
8
|
+
<meta property="og:locale" content="en_US">
|
9
|
+
<meta property="og:type" content="article">
|
10
|
+
<meta property="article:published_time" content="2019-11-13">
|
11
|
+
</head>
|
12
|
+
<body>
|
13
|
+
<article>
|
14
|
+
<header>
|
15
|
+
<h1>An 'in' operator for Ruby</h1>
|
16
|
+
<time datetime="2019-11-13">November 13, 2019</time>
|
17
|
+
</header>
|
18
|
+
|
19
|
+
<div class="content">
|
20
|
+
<p>
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
I have had two fairly small changes I wanted to make in Ruby. The first
|
25
|
+
was realized years ago.
|
26
|
+
Hashes now preserve insertion order and iterate in a predictable way.
|
27
|
+
That's fairly minor, but it did/does have some use cases, and it had no impact
|
28
|
+
on performance.
|
29
|
+
|
30
|
+
<p>
|
31
|
+
Here's another one. Personally, this is a bigger thing to me.
|
32
|
+
|
33
|
+
<p>
|
34
|
+
<b>I've always believed personally that Ruby should have an <font size=+1><tt>in</tt></font> operator.</b>
|
35
|
+
|
36
|
+
<p>
|
37
|
+
I've mentioned this in speaking (including lightning talks) and in writing.
|
38
|
+
It's not a <i>giant</i> big deal for me, but it is one of my personal favorite ideas.
|
39
|
+
Here are some details.
|
40
|
+
|
41
|
+
<p>
|
42
|
+
<b>My proposal</b>
|
43
|
+
|
44
|
+
<p>
|
45
|
+
I propose to let <font size=+1><tt> x in y</tt></font> be syntax sugar for <font size=+1><tt>y.include? x</tt></font>
|
46
|
+
|
47
|
+
<p>
|
48
|
+
<b>You may ask: Why?</b>
|
49
|
+
|
50
|
+
<p>
|
51
|
+
<ul>
|
52
|
+
<li> <font size=+1><tt>include?</tt></font> is backwards from common usage -- if the <i>item</i> is our focus, we don't ask whether a group includes an item, but whether an item is in a group. The same is true of a container.</li>
|
53
|
+
|
54
|
+
<p>
|
55
|
+
<li>Ruby isn't English; and more generally, programming languages aren't human languages. But programming languages are <i>based<i></i></i> on human languages and on everyday experience. We do sometimes ask questions like "Does this container or group include this item?" We are asking a question <i>about the group</i>. <br><br> <font size=+1><tt>if barrel.include? rotten_apple # Is barrel going bad?</tt></font> <br><br></li>
|
56
|
+
|
57
|
+
<p>
|
58
|
+
<li>But we also -- perhaps more often? -- ask questions like "Is this item part of this group?" We are asking a question <i>about the item</i>. <br><br> <font size=+1><tt>if fruit in [:apple, :pear, :peach] # Is this fruit something I like?</tt></font> <br><br>
|
59
|
+
|
60
|
+
<p>
|
61
|
+
<li> <font size=+1><tt>include?</tt></font> is backwards from mathematical usage -- we ask whether a member is in a set ("epsilon"-like notation), not whether a set contains a memeber.
|
62
|
+
|
63
|
+
<p>
|
64
|
+
<li>I ran across someone else a couple of years ago (I wish I could remember who it was!) who bemoaned the absence of this operator. His argument was that he would have a "conversation" with an object, for example, when he tested it repeatedly. Here's a contrived example I just made up.
|
65
|
+
|
66
|
+
<p>
|
67
|
+
<font size=+1><pre>
|
68
|
+
[" if foo == var1 ||", " foo =~ var2 ||", " foo < var3 ||", " var4.include?(foo) || # <== This is the ugly part", " foo > var5]"]
|
69
|
+
</pre></font>
|
70
|
+
To quote him as well as I remember: "I was having this perfectly nice conversation
|
71
|
+
with <font size=+1><tt>foo</tt></font>, and then <font size=+1><tt>var4</tt></font> interrupted it..."
|
72
|
+
|
73
|
+
<p>
|
74
|
+
Better:
|
75
|
+
|
76
|
+
<p>
|
77
|
+
<font size=+1><pre>
|
78
|
+
[" if foo == var1 ||", " foo =~ var2 ||", " foo < var3 ||", " foo in var4 ||", " foo > var5]"]
|
79
|
+
</pre></font>
|
80
|
+
<li>I prefer to put the tested entity earlier in the statement:</li>
|
81
|
+
<font size=+1><pre>
|
82
|
+
[" if [GA, VA, MS, TX, MD, NC].include? state # ehhhh", " if state in [GA, VA, MS, TX, MD, NC] # better</tt>"]
|
83
|
+
</pre></font>
|
84
|
+
<li>Also a "variable/constant" issue -- I tend to put the variable data on the
|
85
|
+
left and the constant on right; this is unlike people who say <font size=+1><tt>if 5 == x</tt></font>.
|
86
|
+
(After all, <font size=+1><tt>5</tt></font> is only equal to <font size=+1><tt>x</tt></font> very rarely; <font size=+1><tt>5</tt></font> is <i>always</i> equal to 5,
|
87
|
+
even for very large values of 5.)
|
88
|
+
|
89
|
+
<p>
|
90
|
+
<li>Also a question of focus: Whatever entity you are really dealing with,
|
91
|
+
name that one first.
|
92
|
+
|
93
|
+
<p>
|
94
|
+
<li>Many languages already have an <font size=+1><tt>in</tt></font> operator -- notably Python, Pascal,
|
95
|
+
even SQL. It is familiar to users of those languages as well as those
|
96
|
+
who use mathematical notation.
|
97
|
+
|
98
|
+
<p>
|
99
|
+
<li> <font size=+1><tt>in</tt></font> is already a reserved word in Ruby -- used in the <font size=+1><tt>for</tt></font> loop (syntax
|
100
|
+
sugar for <font size=+1><tt>each</tt></font>). Let's increase the justification for its presence.
|
101
|
+
|
102
|
+
<p>
|
103
|
+
<li>An <font size=+1><tt>in</tt></font> operator would sometimes make parentheses unnecessary:</li>
|
104
|
+
<font size=+1><pre>
|
105
|
+
[" if (10..100).include? x # Need parens", " if x in 10..100 # Don't need parens -- also prettier code"]
|
106
|
+
</pre></font>
|
107
|
+
<li>The newer language Elixir (which I'm happy to report occupies a lot of my
|
108
|
+
time lately) also sports this operator. This is yet another reason to
|
109
|
+
love that language.
|
110
|
+
</ul>
|
111
|
+
|
112
|
+
<p>
|
113
|
+
<b>Frequently Whined Whines</b>
|
114
|
+
<p>
|
115
|
+
<ul>
|
116
|
+
<li><b>I'd prefer a method.</b> I understand this, but I find it to be
|
117
|
+
needlessly ugly. I like less punctuation, more whitespace. And I
|
118
|
+
find this inappropriate for something that is conceptually an operator.
|
119
|
+
|
120
|
+
<p>
|
121
|
+
<font size=+1><pre>
|
122
|
+
[" if x.in mylist # ugly ", " if x.== 5 # also ugly ", " if c1.and c2 # ugly - if it worked ", " if x == 5 # better ", " if c1 and c2 # better ", " if x in mylist # better"]
|
123
|
+
</pre></font>
|
124
|
+
<li><b>I'd prefer a method with a</b> <tt>?</tt> <b>on it.</b> I understand
|
125
|
+
the concept, too, but I find it inappropriate for what is inherently a relational operator.
|
126
|
+
|
127
|
+
<p>
|
128
|
+
<font size=+1><pre>
|
129
|
+
[" if x.in? my_set # very ugly ", " if x.==? 5 # very ugly - if it worked", "", " if x in my_set # natural", " if x == 5 # natural"]
|
130
|
+
</pre></font>
|
131
|
+
<li><b>What about</b> <font size=+1><tt>for x in list</tt></font> <b>? Would this evaluate as </b>
|
132
|
+
<font size=+1><tt>for true</tt></font> <b> or </b> <font size=+1><tt>for false</tt></font> <b>?</b> Certainly not. It's a matter
|
133
|
+
of parsing. The <font size=+1><tt>for</tt></font> loop itself is just syntax sugar.
|
134
|
+
|
135
|
+
<p>
|
136
|
+
<li><b>I'll bet you like junctions, too.</b> No, in fact, I dislike junctions greatly. I don't even know Perl. Are junctions still a thing?
|
137
|
+
|
138
|
+
<p>
|
139
|
+
<li><b>If you like SQL's</b> <tt>in</tt> <b>, you must like</b> <tt>not in</tt> <b><b>also.</b></b> No, I don't condone its use of "not in":
|
140
|
+
|
141
|
+
<p>
|
142
|
+
<tt>if item not in collection # travesty!</tt> <tt>if ! (item in collection) # ok</tt>
|
143
|
+
|
144
|
+
<p>
|
145
|
+
<tt>if x not == y # horrible Ruby travesty - if it worked</tt> Yes, I say this even though <tt>! ( item in collection)</tt> requires parentheses. See the comment about parentheses on ranges.
|
146
|
+
|
147
|
+
<p>
|
148
|
+
<li><b>What about precedence?</b> I would place <tt>in</tt> at the same level of precedence as the (other) relational operators <tt>< > <= >=</tt> etc.</ul><b>Conclusion</b>
|
149
|
+
<p>
|
150
|
+
People have ignored me on this for at least ten years. They probably still will.
|
151
|
+
That, as they say, is life.
|
152
|
+
</div>
|
153
|
+
</article>
|
154
|
+
</body>
|
155
|
+
</html>
|