git.s-ol.nu mmm / 719fe5d
spellcheck s-ol 1 year, 9 months ago
17 changed file(s) with 55 addition(s) and 48 deletion(s). Raw diff Collapse all Expand all
2020 tt = title @
2121 dot, com = if @title\match '[.?!]$' then '', '' else '.', ','
2222
23 -- @author = deandify @author if @author
24 -- @editor = deandify @editor if @editor
23 @author or= 'N. N.'
2524
2625 switch @_type
2726 when 'book', 'article'
4039 \insert "#{dot} #{@publisher}" if @publisher
4140 when 'web', 'online'
4241 span with setmetatable {}, __index: table
43 \insert "#{@author} (#{@year}), " if @author and @year
42 \insert "#{@author}"
43 \insert " (#{@year})" if @year
44 \insert ", "
4445 \insert tt
45 \insert " (#{@year})" if @year and not @author
4646 \insert "#{com} #{@url}"
4747 \insert " from #{@visited}" if @visited
4848 else
2929 Now that the client can render content within the web browser again, that would be even worse due to the network delay.
3030
3131 To solve this, the Fileder implementation now lazy-loads \[[`9632233`][9632233]\].
32 When a Fileder is created, it initially knows only its path, but doesn't know which factes or children it contains.
32 When a Fileder is created, it initially knows only its path, but doesn't know which facets or children it contains.
3333 As soon as that data is attempted to be accessed, the fileder loads in the list of its children and facets from the datastore.
3434 The facet contents are loaded only when they are actually needed to fulfill a data request or conversion.
3535
0 Today i implemented updating/saving content in the server, and bridged the feature to the client.
0 Today I implemented updating/saving content in the server, and bridged the feature to the client.
11 In the inspector there is now a `save changes` button that (attempts to) save the content on
22 the server's filesystem \[[`4b8d9be`][4b8d9be]\].
33
2424 than initially anticipated.
2525
2626 ### 6.1.2 pinwall
27 The pinwall example shows some strenghts of the mmmfs system pretty convincingly.
27 The pinwall example shows some strengths of the mmmfs system pretty convincingly.
2828 The type coercion layer completely abstracts away the complexities of transcluding different types of content,
2929 and only positioning and sizing the content, as well as enabling interaction, remain to handle in the pinwall fileder.
3030
7979 In the current system, there is only a single, global set of *converts* that can be potentially applied to facets
8080 anywhere in the system.
8181 Therefore it is necessary to encode behaviour directly (as code) in facets wherever exceptional behaviour is required.
82 For example if a fileder conatining multiple images wants to provide custom UI for each image when viewed independently,
82 For example if a fileder containing multiple images wants to provide custom UI for each image when viewed independently,
8383 this code has to either be attached to every image individually (and redundantly), or added as a global convert.
8484 To make sure this convert does not interfere with images elsewhere in the system, it would be necessary to introduce
8585 a new type and change the images to use it, which may present even more problems, and works against the principle of
9393 further up in the tree, for example to specialize types based on their context in the system.
9494
9595 <mmm-embed wrap="marginnote" path="../references/alternatives-to-trees">See also </mmm-embed>
96 The biggest downside to this approach would be that it presents another pressure factor for, while also reincforcing,
96 The biggest downside to this approach would be that it presents another pressure factor for, while also reinforcing,
9797 the hierarchical organization of data, thereby exacerbating the limits of hierarchical structures.
9898
9999 ### 6.2.2 code outside of the system
108108 *Ink and Switch*<mmm-embed path="../references/inkandswitch" wrap="sidenote"></mmm-embed>.
109109
110110 In general however, some portion of code may always have to be left outside of the system.
111 This also wouldn't necessarily represent a problem, but in this case it is particularily relevant
111 This also wouldn't necessarily represent a problem, but in this case it is particularly relevant
112112 for the global set of *converts* (see above), as well as the layout used to render the web view.
113113 Both of these are expected to undergo changes as users adapt the system to their own content types and
114114 domains of interest, as well as their visual identity, respectively.
147147 This particular instance of the problem might be solvable using a Rich-Text editor, but the general problem worsens when
148148 the conversion path becomes more complex: If the markdown source was fetched via HTTP from a remote URL (e.g. if the
149149 facet's type was `URL -> text/markdown`), it is not possible to edit the content at all, since the only data owned by
150 the system is the URL string itself, which is not part of the viewable representation. Similarily, when viewing output
150 the system is the URL string itself, which is not part of the viewable representation. Similarly, when viewing output
151151 that is generated by code (e.g. `text/moonscript -> mmm/dom`), the code itself is not visible to the user, and if the
152152 user wishes to change parts of the representation, the system is unable to relate these changes to elements of the code
153153 or assist the user in doing so.
1111 The problem of embedding other content together with text comfortably is also solved easily,
1212 because Markdown allows embedding arbitrary HTML in the document.
1313 This made it possible to define a set of pseudo-HTML elements in the Markdown-convert,
14 `<mmm-embed>` and `<mmm-link>`, which respectively embed and link to other content native to mmm.
14 `<mmm-embed>` and `<mmm-link>`, which respectively embed and link to other content native to mmmfs.
1515
16 ### 5.1.2 scientific publishing
16 ### 5.1.2 academic publishing
1717 <div class="sidenote" style="margin-top: 1.25rem">
1818 One of the 'standard' solutions, <a href="https://www.latex-project.org/">LaTeX</a>,
1919 is arguably at least as complex as the mmm system proposed here, but has a much narrower scope,
2020 since it does not support interaction.
2121 </div>
2222
23 Scientific publishing is notoriously complex, involving not only the transclusion of diagrams
23 Academic publishing is notoriously complex, involving not only the transclusion of diagrams
2424 and other media, but generally requiring precise and consistent control over formatting and layout.
2525 Some of these complexities are tedious to manage, but present good opportunities for programmatic
2626 systems and media to do work for the writer.
2727
2828 One such topic is the topic of references.
29 References appear in various formats at multiple positions in a scientific document;
29 References appear in various formats at multiple positions in a academic document;
3030 usually they are referenced via a reduced visual form within the text of the document,
3131 and then shown again with full details at the end of the document.
3232
4343
4444 ## 5.2 pinwall
4545 In many situations, in particular for creative work, it is often useful to compile resources of
46 different types for reference or inspiration, and arrange them spacially so that they can be viewed
46 different types for reference or inspiration, and arrange them spatially so that they can be viewed
4747 at a glance or organized into different contexts etc.
48 Such a pinwall could serve for example to organise references to articles,
48 Such a pinwall could serve for example to organize references to articles,
4949 to collect visual inspiration for a moodboard etc.
5050
5151 As a collection, the Pinwall is primarily mapped to a Fileder in the system.
7474 The implementation of this is rather straightforward as well.
7575 The slideshow as a whole becomes a fileder with a script that generates a designated viewport rectangle,
7676 as well as a control interface with keys for advancing the active slide.
77 It also allows putting the browser into fullscreen mode to maximise screenspace and remove visual elements
77 It also allows putting the browser into fullscreen mode to maximize screen space and remove visual elements
7878 of the website that may distract from the presentation, and register an event handler for keyboard accelerators
7979 for moving through the presentation.
8080
1616 and in particular the ability to make changes at different levels of depth in the system with
1717 very short feedback loops and a feeling of direct experience.
1818 - *In-place toolchain*, denoting the availability of tools to customize and author the experience,
19 as well as a certain accesibility of these tools, granted by a conceptual affinity between the
19 as well as a certain accessibility of these tools, granted by a conceptual affinity between the
2020 use of the tools and general 'passive' use of containing system at large.
2121
2222 These serve as guiding principles for the design and evaluation of computer systems for end-users, but are by nature
3232 concepts are considered quite influential and are still notably applied in the Linux community. Many attempts at
3333 summaries exist, but the following includes the pieces that are especially relevant even today:
3434
35 <mmm-embed path="../references/unix" wrap="marginnote"></mmm-embed>
3536 > Even though the UNIX system introduces a number of innovative programs and techniques, no single program or idea makes
3637 > it work well. Instead, what makes it effective is the approach to programming, a philosophy of using the computer.
3738 > Although that philosophy can't be written down in a single sentence, at its heart is the idea that the power of a
5152 3.3 content transclusion
5253 ------------------------
5354
54 The strengths of modular architectures should similarily extend also into the way the system will be used by users.
55 The strengths of modular architectures should similarly extend also into the way the system will be used by users.
5556 If users are to store their information and customized behaviour in such an architecture, then powerful tools need to be
5657 present in order to assemble more complex solutions out of such parts. Therefore static content should be able to be
5758 linked to (as envisioned for the *Memex*, see above), but also to be <mmm-embed wrap="marginnote"
6061 </mmm-embed>*transcluded*,
6162 to facilitate the creation of flexible data formats and interactions, such that e.g. a slideshow slide can include
6263 content in a variety other formats (such as images and text) from anywhere else in the system. Behaviours also should be
63 able to be transcluded and reused to facilitate the creation of ad-hoc sytems and applets based on user needs. For
64 able to be transcluded and reused to facilitate the creation of ad-hoc systems and applets based on user needs. For
6465 example a user-created todo list should be able to take advantage of a sketching tool the user already has access to.
6566
6667 By forming the immediately user-visible layer of the system out of the same abstractions that the deeper levels of the
77 directly known to the system.
88
99 In a retrospective analysis of the Xerox Star's impact on the computer
10 industry<mmm-embed path="../references/xerox-star" wrap="sidenote"></mmm-embed>, the desktop metaphor is described as
10 industry, the desktop metaphor is described as
1111 follows:
1212
13 <mmm-embed path="../references/xerox-star" wrap="marginnote"></mmm-embed>
1314 > In a Desktop metaphor system, users deal mainly with data files, oblivious to the existence of programs.
1415 > They do not "invoke a text editor", they "open a document".
1516 > The system knows the type of each file and notifies the relevant application program when one is opened.
2728 Another design detail of the Star system is the concept of "properties" that are stored for "objects" throughout the
2829 system (the objects being anything from files to characters or paragraphs). These typed pieces of information are
2930 labelled with a name and persistently stored, providing a mechanism to store metadata such as user preference for
30 ordering or the defaut view mode of a folder for example.
31 ordering or the default view mode of a folder for example.
3132
3233 <mmm-embed path="star-graph" facet="note" wrap="marginnote" style="margin-top: 1rem;"></mmm-embed>
3334 <mmm-embed path="star-graph" nolink></mmm-embed>
4647 One of the most innovative elements of Bush's predictions is the idea of technologically cross-referenced and
4748 connected information, which would later be known and created as *hypertext*. While hypertext powers the majority of
4849 today's internet, many of the advantages that Bush imagined have not carried over into the personal use of computers.
49 There are very few tools for creating personal, highly-interconnected knowledgebases, even though it is technologically
50 There are very few tools for creating personal, highly-interconnected knowledge bases, even though it is technologically
5051 feasible and a proven concept (exemplified for example by the massively successful online encyclopedia
5152 *Wikipedia*<mmm-embed path="../references/wikipedia" wrap="sidenote"></mmm-embed>).
5253
0 # 4. mmmfs
0 # 4. system description
11
22 `mmmfs` is a newly developed personal data storage and processing system. It was developed first as a tool for
33 generating static websites, but has been extended with live interaction and introspection, as well as embedded
66 mmmfs has been designed with a focus on data ownership for users. One of the main driving ideas is to unlock data
77 from external data silos and file formats by making data available uniformly across different storage systems and
88 formats. Secondly, computation and interactive elements are also integrated in the paradigm, so that mmmfs can be
9 seemlessly extended and molded to the users needs.
9 seamlessly extended and molded to the users needs.
1010
1111 The abstraction of data types is accomplished using two major components, the *Type System and Coercion Engine* and
1212 the *Fileder Unified Data Model* for unified data storage and access.
1313
14 ## 4.1 the fileder unified data model
14 ## 4.1 data storage model
1515 The Fileder Model is the underlying unified data storage model.
1616 Like many data storage models it is based fundamentally on the concept of a hierarchical tree-structure.
1717
5858
5959 Superficially, this may look quite similar: there is still only two types of nodes (referred to as *fileders* and
6060 *facets*), and again one of them, the *fileders* are used only to hierarchically organize *facets*. Unlike *files*,
61 *factes* don't only store a freeform *name*, there is also a dedicated *type* field associated with every *facet*, that
61 *facets* don't only store a freeform *name*, there is also a dedicated *type* field associated with every *facet*, that
6262 is explicitly designed to be understood and used by the system.
6363
6464 Despite the similarities, the semantics of this system are very different: In mainstream filesystems, each *file* stands
7676 (recursively). Since *fileders* are the primary unit of data to be operated upon, *fileder* nesting emerges as a natural
7777 way of structuring complex data, both for access by the system and its components, as well as the user themself.
7878
79 ## 4.2 the type system & coercion engine
79 ## 4.2 type system and coercion engine
8080 As mentioned above, *facets* store data alongside its *type*, and when a component of the system requires data from a
8181 *fileder*, it has to specify the *expected type* (or a list of these) that it requires the data to be in. The system
8282 then attempts to coerce one of the existing facets into the *expected type*, if possible. This process can involve many
9494 - `image/png`
9595 - `image/jpeg`
9696
97 While these types allow some amount of specifity, they fall short of describing their content especially in cases where
97 While these types allow some amount of specificity, they fall short of describing their content especially in cases where
9898 formats overlap: Source code for example is often distributed in `.tar.gz` archive files (directory-trees that are first
9999 bundled into an `application/x-tar` archive, and then compressed into an `application/gzip` archive). Using either of
100100 these two types is respectively incorrect or insufficient information to properly treat and extract the contained data.
147147 }
148148
149149 This *convert* accepts an `application/gzip` *type* wrapping any other *type*, and captures that nested type in a
150 pattern group. It then uses the substituion syntax to specify that nested type as the output of the conversion.
150 pattern group. It then uses the substitution syntax to specify that nested type as the output of the conversion.
151151 For an input *type* of `application/gzip -> image/png` this *convert* would therefore generate the type `image/png`.
152152
153153 This last example further demonstrates the flexibility of this approach:
165165 roughly estimate both the cost (in terms of computing power) of the conversion, as well as the accuracy or immediacy of
166166 the conversion. For example, resizing an image to a lower size should have a high cost, because the process is
167167 computationally expensive, but also because a smaller image represents the original image to a lesser degree.
168 Similarily, an URL to a piece of content is a less immediate representation than the content itself, so the cost of a
168 Similarly, an URL to a piece of content is a less immediate representation than the content itself, so the cost of a
169169 *convert* that simply generates the URL to a piece of data should be high even if the process is very cheap to compute.
170170
171171 Cost is defined in this way to make sure that the result of a type-coercion operation reflects the content that was
172 present as accurately as possible. It is also important to prevent some nonsensical results from occuring, such as
172 present as accurately as possible. It is also important to prevent some nonsensical results from occurring, such as
173173 displaying a link to content instead of the content itself because the link is cheaper to create than completely
174174 converting the content does.
175175
00 While there can be a distinction between *Native Applications* and *Web Applications* or *Cloud Services*, the following
1 arguments apply to all different technicalal implementations of this same concept. The problems associated
2 specifically with Web- and Cloud-based application models will be discussed separately below.
1 arguments apply to all different technical implementations of this same concept. The problems associated specifically
2 with Web- and Cloud-based application models will be discussed separately below.
33 ------------------------------
44
55 The majority of users interact with modern computing systems in the form of smartphones, laptops or desktop PCs,
6 using the mainstream operating systems Apple iOS and Mac OS X, Microsoft Windows or Android.
6 using the mainstream operating systems Apple iOS and Mac&nbsp;OS&nbsp;X, Microsoft&nbsp;Windows or Android.
77
88 <mmm-embed path="app-types" wrap="marginnote"></mmm-embed>
99 All of these operating systems share the concept of *Applications* (or *Apps*) as one of the core pieces of their
1111 as applications. This focus on applications as the primary unit of systems can be seen as the root cause of multiple problems.
1212
1313 For one, since applications are produced by private companies on the software market,
14 developers compete on features integrated into their applications. To stay relevant, monlithic software or software
15 suites tend to accrete features rather then modularise and delegate to other software<mmm-embed wrap="sidenote"
14 developers compete on features integrated into their applications. To stay relevant, monolithic software or software
15 suites tend to accrete features rather then modularize and delegate to other software<mmm-embed wrap="sidenote"
1616 path="../references/appliances"></mmm-embed>. This makes many software packages more complex and unintuitive than
1717 they need to be, and also cripples interoperability between applications and data formats.
1818
5151 video from a webcam, opening another website).
5252
5353 Cloud software, as well as subscription-model software with online-verification mechanisms, are additionally subject
54 to license changes, updates modifiying, restricting or simply removing past functionality etc. Additionally, many cloud
54 to license changes, updates modifying, restricting or simply removing past functionality etc. Additionally, many cloud
5555 software solutions and ecosystems store the users' data in the cloud, often across national borders, where legal and
56 privacy concerns are intransparently handled by the companies. If a company, for any reason, is unable or unwanting to
56 privacy concerns are intransparently handled by the companies. If a company, for any reason, is unable or unwilling to
5757 continue servicing a customer, the users data may be irrecoverably lost (or access prevented). This can have serious
5858 consequences<mmm-embed path="../references/adobe" wrap="sidenote"></mmm-embed>, especially for professional users, for
5959 whom an inability to access their tools or their cloud-stored data can pose an existential threat.
6464 Cragg coins the term "inert data"<mmm-embed path="../references/super-powers" wrap="sidenote"></mmm-embed> for the data
6565 created and left behind by apps and applications in the computing model that is currently prevalent: Most data today
6666 is either intrinsically linked to one specific application, that controls and limits access to the actual information,
67 or, even worse, stored in the cloud where users have no direct access at all. In the latter case users depend soley on
67 or, even worse, stored in the cloud where users have no direct access at all. In the latter case users depend solely on
6868 online tools that require a stable network connection and a modern browser and could be modified, removed, or otherwise
6969 negatively impacted at any moment.
7070
71 Aside from being inaccesible to users, the resulting complex proprietary formats are also opaque and useless to other
71 Aside from being inaccessible to users, the resulting complex proprietary formats are also opaque and useless to other
7272 applications and the operating system, which often is a huge missed opportunity:
7373 The .docx format for example, commonly used for storing mostly textual data enriched with images and on occasion videos,
7474 is in fact a type of archive that can contain many virtual files internally, such as the various media files contained
109109 different types to one software component, while multiple different software components could be responsible for editing
110110 the individual pieces of content, so that the most appropriate one can be chosen for each element. While creating the
111111 technological interface between these components is certainly a challenge, the resulting system would greatly benefit
112 from the exponentially-growing capabilties resulting from the modular reuse of components across many contexts: A rich
112 from the exponentially-growing capabilities resulting from the modular reuse of components across many contexts: A rich
113113 text editor component could be used for example not just in a mixed media collection as proposed above, but also for
114114 an email editor or the input fields in a browser.
115115
120120 interactions, and from properly owning, contextualising and connecting their data.
121121
122122 Interestingly, these deficits do not appear throughout the history of today's computing systems, but are based in rather
123 recent developments in the field. In fact the most influental systems in the past aspired to the polar opposites, as i
123 recent developments in the field. In fact the most influential systems in the past aspired to the polar opposites, as I
124124 will show in the next section.
125125
126126 <!--
00 @online{acm-dl,
11 title = {ACM Digital Library},
22 url = {https://dl.acm.org},
3 year = {n. d.},
34 }
22 url = {https://www.theverge.com/2019/10/7/20904030/adobe-venezuela-photoshop-behance-us-sanctions},
33 publisher = {The Verge},
44 author = {Lee, Dami},
5 year = {2019},
5 year = {2019, October 7},
66 visited = {2019-12-18},
77 }
33 publisher = {stackoverflow.com},
44 note = {answered by osgx},
55 visited = {2019-12-18},
6 year = 2014,
67 }
22 url = {https://discussions.apple.com/thread/6740790},
33 publisher = {Apple Communities},
44 visited = {2019-12-27},
5 year = 2014,
56 }
11 title = {Why is it possible to convert a file just by renaming it?},
22 url = {https://askubuntu.com/q/166602},
33 publisher = {askubuntu.com},
4 year = 2012,
45 visited = {2019-12-18},
56 }
22 url = {https://en.wikipedia.org/wiki/Hyperlink#Wikis},
33 publisher = {wikipedia.org},
44 visited = {2019-12-18},
5 year = {n. d.},
56 }
4848 <li><a href="#33-content-transclusion">3.3 content transclusion</a></li>
4949 <li><a href="#34-end-user-programming">3.4 end-user programming</a></li>
5050 </ol>
51 <li><a href="#4-mmmfs">4. mmmfs</a></li>
51 <li><a href="#4-system-description">4. system description</a></li>
5252 <ol style="list-style: none;">
53 <li><a href="#41-the-fileder-unified-data-model">4.1 the fileder unified data model</a></li>
54 <li><a href="#42-the-type-system--coercion-engine">4.2 the type system & coercion engine</a></li>
53 <li><a href="#41-data-storage-model">4.1 data storage model</a></li>
54 <li><a href="#42-type-system-and-coercion-engine">4.2 type system and coercion engine</a></li>
5555 </ol>
5656 <li><a href="#5-example-use-cases">5. example use-cases</a></li>
5757 <ol style="list-style: none;">