-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Readme improvements #27
Comments
Thanks for your observations: I am happy to improve things.
I am pretty sure I am confusing people at the moment and you could view this mode differently. For example, in #11 you can find
I totally agree with her. You can use moldable-emacs to solve problems in a generic way. I see this as included: if I am pair-programming with you and I am telling you this story "Given these 100 files that have a misspelt string in one of their else statement, we would take forever to do it by hand. But we can do it in in one swoop if we define the correct pattern!", I can actually solve a boring problem in a generic way through views/molds. I can also give to you the "story" by serializing the views I used and their contents (I didn't work on this, but is simple to achieve). In summary: moldable-emacs aims to bring your focus on what you want to communicate to others (yourself included) by making that simple to express (with molds). -- Probably this message will not make things better, sigh.. |
Thanks for the reply! What you have described actually makes a lot of sense.
There's also a bit forced nature of a condition, not every "story" has to be formulated this way. "Given this code, I have to refactor it because I got a lot of duplication" - in this example a better English would be to say "I have to refactor this code because I got a lot of duplication". So here it is just a "wish", an "obligation" or anything else but "story". I have come up with an example of how I would describe this package in the simplest form possible which only introduces the single concept of a "mold": Moldable Emacs introduces a new concept - Mold. Mold is a function with a precondition which may use Emacs buffers as inputs and outputs. Molds can be highly composable and one mold can fulfill a precondition for another mold. Molds can show a multi-faceted view of some data, for example ... It's fine to have an abstract explanation of the general idea of what molds are for but I feel like the down-to-Earth explanation is missing.
I'm sold on the second part, molds are simple to express, they are just functions and functions can be indeed easy to express. But the first part about "bring your focus on what you want to communicate" - this sounds good and I want to believe it but in essence it looks like a sales pitch to me, when I look at the example: (me-register-mold
:key "FinancesToHoliday" ; your mold/story name
:given (:fn (I-can-retrieve-my-finances?)) ; the context
:then (:fn ; the result
(let* ((my-finances ...)
(my-holiday-savings (learn-that-from my-finances)))
(with-current-buffer buffername
(show-prettily my-holiday-savings)
(setq-local self (list :finances my-finances :holiday-savings my-holiday-savings)) ; this sets a state that the next mold can compose upon
)))) I ask a question, how does this bring focus to communication in any way? There's a general idea that there are "stories" and you tell a "story" and you communicate. But how is this package unique in enabling this idea? The underlying idea about stories and communication can be applied to a wide variety of things in a similar fashion. There's a structure to molds which helps with understanding but saying that it helps to communicate is a bit over-reach in my opinion, the structure to functions is a widely known concept: Eiffel probably pioneered post/preconditions, Racket's contracts and more languages use the word "contract" to describe the idea of a structure to functions; if we call this "help to communicate", then what would be a single language feature which does not contribute to helping to communicate? The whole programming language is a tool which helps us communicate with the computer machinery. Thanks again for reading it, it came out quite long. |
Thanks for that. Sorry for the late reply, your comment is full of interesting points and I am still thinking about all of that :) I understand where you are coming from. Definitely the story bit is a stretch: the tension comes from what I want this mode to be and the current status of things. I like your description, I will think some more and then I can try to inject it in the README. About "bring your focus on what you want to communicate": when I wrote that I was focusing on the presentation aspect not the extension aspect (i.e, how to write a new mold). 90% of the time I work with moldable-emacs I focus on taking some data and making it easy to read for me (or others). I do that mostly by composing existing molds. Only a 10% of time I write a new mold for myself. For example, I have a mold to list live production errors and I show them to myself grouped by categories and (when I can) with links to the failing source code. This is a view target to me, a developer. |
Thanks! I don't think I have something to add to the discussion, so feel free to close this issue. I will also think about this unique concept, that is an interesting approach to information and representation! |
Thanks again for your help. I have used your snippet and I have rewritten the README once more. Surely requires some more work but I hope it got closer to be understandable :) |
Hi, I have read several blog posts about this package and watched several videos and I still have hard time understanding what this package does. There were several good pieces of advice on reddit which are mostly related to blog posts. I'd like to help making this readme more understandable by providing some observations I have.
I used the term "pure function" because it is not strictly true for non-pure functions. But if we speak in terms of Emacs, "creating a buffer with some text" might as well qualify as "pure" in certain contexts, and I believe this is also the main point of this package that we use Emacs buffers as input and output of the functions.
The text was updated successfully, but these errors were encountered: