diff --git a/drafts/2017-04-20-modularity.org b/drafts/2017-04-20-modularity.org index 1fad101..9dab05d 100644 --- a/drafts/2017-04-20-modularity.org +++ b/drafts/2017-04-20-modularity.org @@ -10,12 +10,12 @@ _Modularity_ and _abstraction_ feature prominently wherever computers are involved. This is meant very broadly: it applies to designing software, using software, integrating software, and to a lot of hardware as well. It applies elsewhere, and almost certainly -originated there first, however, it appears to be particularly -crucial around software. +originated there first, however, it appears especially crucial around +software. Definitions, though, are a bit vague (including anything in this post). My goal in this post isn't to try to (re)define them, but to -explain a bit of their essence, and expand on a few theses: +explain their essence and expand on a few theses: - Modularity arises naturally in a wide array of places. - Modularity and abstraction are intrinsically connected. @@ -60,9 +60,10 @@ different from being vague. The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise." Joel Spolsky, in one of few instances of me actually caring what he said, also has a blog post from 2002 on the -[[https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/][Law of Leaky Abstractions]]. The [[https://en.wikipedia.org/wiki/Principle_of_least_privilege][principle of least privilege]] is -likewise a thing. So, abstraction too has its practical and -theoretical limitations. +[[https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/][Law of Leaky Abstractions]] ("All non-trivial abstractions, to some +degree, are leaky.") The [[https://en.wikipedia.org/wiki/Principle_of_least_privilege][principle of least privilege]] is likewise a +thing. So, abstraction too has its practical and theoretical +limitations. * How They Relate @@ -112,15 +113,15 @@ some details implies that a module is handling those details, that the details shouldn't matter, and what does matter is the abstraction one is using. -# ----- -Consider the information this module deals in, in essence. +One of Rich Hickey's favorite topics is *composition*, and with good +reason (and you should check out [[http://www.infoq.com/presentations/Simple-Made-Easy/][Simple Made Easy]] regardless). This +relates as well: to *compose* things together effectively into bigger +parts requires that they support some common abstraction. + +In the same area, [[https://clojurefun.wordpress.com/2012/08/17/composition-over-convention/][Composition over convention]] is a good read on how +/frameworks/ run counter to modularity: they aren't built to behave +like modules of a larger system. -What is the most general form this information could be expressed in, -without being so general as to encompass other things that are -irrelevant or so low-level as to needlessly constrain the possible -contexts? - -(Aristotle's theory of definitions?) # ----- @@ -152,6 +153,33 @@ contains fewer incidental details, and more essential details. # ------- +* Information + +I referred earlier to the abstractions themselves as both boundaries +and communications channels. Another common view is that abstractions +are *contracts* with a communicated and agreed purpose, and I think +this is a useful definition too: it conveys the notion that there are +multiple parties involved and that they are free to behave as needed +provided that they fulfill some obligation + +Some definitions refer directly to information, like the [[https://en.wikipedia.org/wiki/Abstraction_principle_(computer_programming)][abstraction +principle]] which aims to reduce duplication of information which fits +with [[https://en.wikipedia.org/wiki/Don%2527t_repeat_yourself][don't repeat yourself]] so that "a modification of any single +element of a system does not require a change in other logically +unrelated elements". + + + +# ----- FIXME +Consider the information this module deals in, in essence. + +What is the most general form this information could be expressed in, +without being so general as to encompass other things that are +irrelevant or so low-level as to needlessly constrain the possible +contexts? + +(Aristotle's theory of definitions?) + * Less-Conventional Examples One thing I've watched with some interest is when new abstractions @@ -256,9 +284,6 @@ machine learning conflicts with proper modularity and abstraction. a good post and shows some sorts of abstraction that still exist at least in neural networks.) -[[https://clojurefun.wordpress.com/2012/08/17/composition-over-convention/][Composition over convention]] is an important read on why /frameworks/ -can also run completely counter to modularity. - Submitted without further comment: https://github.com/stevemao/left-pad/issues/4 @@ -307,11 +332,6 @@ https://github.com/stevemao/left-pad/issues/4 - https://twitter.com/fchollet/status/962074070513631232 -- How does this fit with /composition/? Does it? - - The ability to sensibly compose things depends on them having some - sort of well-defined, compatible boundary - right? - - Note also /decomposition/ here, as in /decomposing/ something into - parts. - [[https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-9.html#%25_chap_1][From SICP chapter 1 intro]]: "The acts of the mind, wherein it exerts its power over simple ideas, are chiefly these three: 1. Combining several simple ideas into one compound one, and thus all complex @@ -338,14 +358,11 @@ https://github.com/stevemao/left-pad/issues/4 boundaries, the abstractions that it interfaces with or that it implements) so that the 'inside' can change more or less freely without having any effect on the outside. -- Abstractions as _contracts_ with a communicated/agreed purpose - Abstractions as a way of reducing the work required to add functionality (changes can be made just in the relevant modules, and other modules do not need to change to conform) - What is more key? Communication, information content, contracts, details? -- [[https://en.wikipedia.org/wiki/Abstraction_principle_(computer_programming)][Abstraction principle]] - - Reduce duplication of information - [[https://en.wikipedia.org/wiki/Don%2527t_repeat_yourself][Don't repeat yourself]] - [[https://simplyphilosophy.org/study/aristotles-definitions/][Aristotle & theory of definitions]] - this isn't right. I need to find the quote in the Durant book diff --git a/hugo_blag/content/old_crap/2008-03-24-workfest-with-christian-appalachian-project-day-one.markdown b/hugo_blag/content/old_crap/2008-03-24-workfest-with-christian-appalachian-project-day-one.markdown index 8707b3b..b3390d8 100644 --- a/hugo_blag/content/old_crap/2008-03-24-workfest-with-christian-appalachian-project-day-one.markdown +++ b/hugo_blag/content/old_crap/2008-03-24-workfest-with-christian-appalachian-project-day-one.markdown @@ -14,79 +14,14 @@ tags: - workfest --- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +{{< load-photoswipe >}} It's quite different. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - People are open. Their groups are open. - - - It's a difference between being pushed away from people constantly, and being pushed toward them, so one does not constantly need to fight back against the repulsion. - Maybe it's the types of people. Maybe it's the environment. But it's wonderful. Maybe similar to the way I felt in Seattle when I visited there last year. Months in Cincinnati and I might never meet a new friend... hours here and I've made several already. @@ -98,6 +33,8 @@ They're out of that context. They look like they're in the context they belong. My Canon camera is probably almost out of battery power, despite efforts. I should have brought the charger. But I have the Kodak too. Maybe it will show some of the picturesque terrain. -[](/wp_old/2008/03/img_6262.jpg)[](/wp_old/2008/03/img_6253.jpg)[](/wp_old/2008/03/img_6265.jpg) +{{< figure src="/wp_old/2008/03/img_6262.jpg" caption="Camp AJ from one angle">}} +{{< figure src="/wp_old/2008/03/img_6253.jpg" caption="Arriving at Camp AJ">}} +{{< figure src="/wp_old/2008/03/img_6265.jpg" caption="Playground and climbing wall near entrance road">}} (Later note: That is [Camp AJ, 2549 Sand Lick Rd, McKee, KY 40447](https://www.google.com/maps/dir/Cincinnati,+Ohio/Berea,+Kentucky/Camp+AJ,+2549+Sand+Lick+Rd,+McKee,+KY+40447/@37.488284,-84.0115257,16z/data=!4m19!4m18!1m5!1m1!1s0x884051b1de3821f9:0x69fb7e8be4c09317!2m2!1d-84.5120196!2d39.1031182!1m5!1m1!1s0x8842e18aa160b579:0xd32df1c2b2266672!2m2!1d-84.2963223!2d37.568694!1m5!1m1!1s0x884315ccbd7d479b:0x28e72c53d5d60a9d!2m2!1d-84.00718!2d37.4887543).) diff --git a/hugo_blag/content/posts/2014-02-06-hello-world.md b/hugo_blag/content/posts/2014-02-06-hello-world.md index c013da6..afc92be 100644 --- a/hugo_blag/content/posts/2014-02-06-hello-world.md +++ b/hugo_blag/content/posts/2014-02-06-hello-world.md @@ -1,5 +1,5 @@ --- -title: Hello, World (from Jekyll) (then from Hakyll) (then from Hugo) +title: Hello, World (from Wordpress, then Jekyll, then Hakyll, then Hugo) author: Chris Hodapp date: "2014-02-06" --- diff --git a/hugo_blag/content/posts/2016-10-12-pi-pan-tilt-3.md b/hugo_blag/content/posts/2016-10-12-pi-pan-tilt-3.md index 04ce921..cfc6025 100644 --- a/hugo_blag/content/posts/2016-10-12-pi-pan-tilt-3.md +++ b/hugo_blag/content/posts/2016-10-12-pi-pan-tilt-3.md @@ -169,10 +169,10 @@ image. Here's another comparison, this time a 1:1 crop from the center of an image (shot at 40mm with [this lens][12-40mm], whose Amazon price -mysteriously is now $146 instead of the $23 I actually paid). Click -the preview for a lossless PNG view, as JPEG might eat some of the -finer details, or [here][leaves-full] for the full JPEG file -(including raw, if you want to look around). +mysteriously is now $146 instead of the $23 +I actually paid). Click the preview for a lossless PNG view, as JPEG +might eat some of the finer details, or [here][leaves-full] for the +full JPEG file (including raw, if you want to look around). [{width=100%}](../assets_external/2016-10-12-pi-pan-tilt-3/leaves_test.png) diff --git a/hugo_blag/content/posts/2018-04-13-opinions-go.org b/hugo_blag/content/posts/2018-04-13-opinions-go.org index 49b47b8..980568c 100644 --- a/hugo_blag/content/posts/2018-04-13-opinions-go.org +++ b/hugo_blag/content/posts/2018-04-13-opinions-go.org @@ -6,6 +6,7 @@ tags: - technobabble - go - golang +toc: true --- # TODO: Link to my asyncio post @@ -101,7 +102,7 @@ polymorphism.) My objections aren't unique. [[https://www.teamten.com/lawrence/writings/why-i-dont-like-go.html][Ten Reasons Why I Don't Like Golang]] and [[http://yager.io/programming/go.html][Why Go Is Not Good]] have criticisms I can't really disagree with. (Also, did you know someone put together -https://github.com/ksimka/go-is-not-good?) +[[https://github.com/ksimka/go-is-not-good][https://github.com/ksimka/go-is-not-good]]?) All in all, though, Go is a procedural/imperative language with a lot of good design in language and tooling... which is great, if it's only diff --git a/hugo_blag/layouts/shortcodes/figure.html b/hugo_blag/layouts/shortcodes/figure.html new file mode 100644 index 0000000..38924da --- /dev/null +++ b/hugo_blag/layouts/shortcodes/figure.html @@ -0,0 +1,29 @@ + + +{{- if not ($.Page.Scratch.Get "figurecount") }}{{ end }} +{{- $.Page.Scratch.Add "figurecount" 1 -}} + +{{- $thumb := .Get "src" | default (printf "%s." (.Get "thumb") | replace (.Get "link") ".") }} +
+ {{- .Get "caption" -}} + {{- with .Get "attrlink"}}{{ .Get "attr" }}{{ else }}{{ .Get "attr"}}{{ end -}} +
+ {{- end }} +