Add hugo-easy-gallery (rev 2935729), try one post with it

This commit is contained in:
Chris Hodapp
2020-04-11 15:05:39 -04:00
parent dbd160794d
commit 6bbbd1dc4e
10 changed files with 433 additions and 98 deletions

View File

@@ -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