Pavel Hruby’s book, Model-Driven Design Using Business Patterns (Springer Verlag, Berlin, 2006) is to my knowledge the best book on this topic. It’s a pattern book so the format is a bit dry but the contents are great. I keep coming back to it and have implemented it several times over the years.
HN user
mjul
Have a look at remacs (an experimental Rust port of emacs, now discontinued) [1] and its successor, emacs-ng (also in Rust) [2]
I haven’t followed closely, but I am sure there are som valuable lessons learned there that would answer your question.
The original Intentional Programming in the mid-nineties was a much broader vision than Language Workbenches, more like a grand unified theory of software development and related tools such as IDEs, languages, compilers, and a marketplace of components in that space.
My understanding, from the demos they were giving around 15 years ago, is that the Intentional company ended up focusing on a smaller feature set similar to MPS (I don’t have personal development experience with the Intentional product, only MPS).
It would be interesting to learn more about their work and lessons learned.
Charles Simonyi and his Intentional Software tried to solve this, publishing some interesting articles in the 1990es. However their technology was not broadly used and they were acquired by Microsoft.
The key ideas are called Intentional Programming and Language Workbenches.
The best accessible implementation of that is JetBrains’ MPS (it is free). It allows you to define a language and “projectional” editors together.
It is really fascinating but it suffers from a learning curve where there is no small step from what people use in their everyday common languages and IDEs to building domain-specific solutions with MPS, so adoption is low.
Markus Voelter has some highly recommendable publications and elaborate applications of MPS for domains specific languages, see http://voelter.de/
I am sure there is something great in that area but it has not found the right form and shape yet, so keep exploring.
He explains it in the linked video presentation which is worth watching: the value being that your parser generator will complain about any ambiguity in the grammar (shift-reduce conflicts) rather than having that show up as a “wat?” at runtime.
You might argue that this argument reduces to checking the grammar using static analysis similar to the order generator. But then handwriting the parser is still extra work and risk.
Now, it is served in avantgarde restaurants: e.g. by the Spanish Michelin star chef, Angel León. He is known as “chef del mar”, making novel dishes with the plants from the ocean in his restaurant, Aponiente: https://www.aponiente.com/en/
Around year 1000 the vikings' went to Vinland, which was their name for North America.
You can read about it in two sagas:
The Saga of Erik the Red (Eiríks saga rauða) has a description of Erik's son Leif leading an expedition to Vinland:
https://www.sagadb.org/eiriks_saga_rauda.en
The Greenland Saga (Grænlendinga saga) has more information on the journey if you can read Icelandic, but there is no English translation in this database at the moment.
The actual discovery was not by Erik but by an earlier voyage around 985 by Bjarni, who navigated the coast but decided not to enter the unknown land. The later voyage was inspired by his information.
The vikings considered the journey from Greenland to Vinland the most dangerous journey in their trading network, navigating storms and icebergs in their open boats. However, Vinland provided a source of valuable wood, a scarce resource around their homes in Greenland.
There is archeological evidence of their visits on Newfoundland. You can visit their site in L'Anse aux Meadows with distinct viking houses and metal artefacts:
https://www.newfoundlandlabrador.com/top-destinations/lanse-...
Snodgrass wrote a whole book on that topic: Developing Time-Oriented Database Applications in SQL (1999).
It is available as PDF on his publications page:
The Honda Myth by Masaaki Sato is an excellent book about Soichiro Honda and Takeo Fujisawa and the captivating history of how they built Honda, from motorcycles to Formula 1 and how they disrupted the US auto industry on the way with the low-emission fuel-efficient CVCC engine (the later Tesla story shares some of the same elements of new tech playing to environmental regulation).
It was driven by the quest to create the best engines and fastest vehicles.
Soichiro Honda had a great love for building and tuning his engines, saying something like, “It will be a sad day if engineers could go to lunch without needing to wash their hands”.
The Toyota Production System was established during Shoichiro Toyoda's leadership. It is the company's "operating system" if you will, and has made an enormous impact, both in the auto industry and in other fields such as IT.
"Lean" manufacturing, a term from Womack & Jones, is based on their research into this.
If you want to dive in, here is my reading list for essential books on how Toyota came to build high quality cars at scale, and how it transfers to other disciplines.
W. Edwards Deming - the grand old man of the field, building on a strict statistical discipline. His book "Out of the Crisis" is a wonderful treatise on his thinking including his famous "14 Points for Management". This is definitely a must read that will change the way you think about management and quality. Deming provided the inspiration for the quality movement that powered post-war Japanese manufacturing.
Taiichi Ohno - one of the greatest industrial innovators of the 20th century, the father of the Toyota Production System. After spending his career relentlessly optimizing manufacturing at Toyota he wrote the book "Toyota Production System: Beyond Large-scale Production" that describes his work.
Womack & Jones - Their books are great and it is well worth to read them all to see a lot of the principles and case studies for lean thinking. Also, it is quite interesting to see that software development is now rediscovering some of the things that manufacturing learned much earlier - in the case of Toyota as early as in the 1950s and 1960s. Begin your studies with "The Machine That Changed the World", a five-year study of the global auto industry from MIT and go on with the "Lean Thinking" and "Lean Solutions". They give a fascinating perspective on manufacturing and plenty of examples of the lean principles and they applications. These are the books that brought lean to the mainstream.
Mary and Tom Poppendieck - with a background in manufacturing and software they were leading the effort to translate the concepts of lean to software development. They have written two great books, "Implementing Lean Software Development" and "Lean Software Development - an Agile Toolkit". Both books are well worth reading a present a both the principles and lot of cases in a friendly, colloquial manner. Highly recommended!
Matthew May - I really like his approach to elegance and simplicity. May has worked with Toyota and their corporate university and his book "The Elegant Solution" offers insight into their innovation process - the principles it is built on and the practices that make it work.
Jeffrey Liker - his "The Toyota Way" is a very good introduction to the application of lean methods at Toyota. This is one of the best lean books I have read. Definitely a favourite!
This list covers up to around 10 years ago. Please comment with recommendations for more recent books on the topic.
The Dutch tax authority has developed RegelSpraak a controlled natural language for defining tax rules that is also formally specified and compilable to several targets.
There is a video of the team presenting how they built the DSL for tax rules in the JetBrains MPS language workbench from the MPS conference.
Case study:
https://resources.jetbrains.com/storage/products/mps/docs/MP...
Video:
It is a fascinating idea indeed.
While Leibniz is widely known for his mathematics and philosophy, one of his lesser known ideas was the relation between law and computation.
There is a small research community around it today. Look up Computational Law and Computational Contracts if you are interested.
How to pronounce scone is another divisive topic in itself.
Does it rhyme with gone or cone?
Linguists at Cambridge University have published a map of the regional variations:
https://www.cam.ac.uk/research/news/cambridge-app-maps-decli...
If you want the high-end take on this, check out the Spanish Michelin star chef, Angel León. He is known as “chef del mar”, making novel dishes with the plants from the ocean.
Here is a short portrait in English:
https://thebestchefawards.com/2021/06/06/angel-leon/
His restaurant, Aponiente:
Just use you best judgement and you will be fine.
Patterns are context specific advice about a solution and its trade-offs, not hard rules for every situation.
Notice how pattern books will often state the relevant Context, the Problem itself, the Forces influencing it, and a Solution.
(This formulaic approach is also why pattern books tend to be a dry read).
This is its key weakness.
You have to write many more tests and add a lot of predicates as pre/post conditions (invariants) to functions to check at runtime what a more modern compiler could have told you at compile time.
It adds a lot of friction and slows down the development process.
Combined with Clojure having lazy evaluation and nil punning it becomes frustrating in larger, domain heavy code bases.
Simple common “CRUD” line of business applications with shallow code paths and a database schema to serve as a secondary type system would probably suffer less from this, explaining why some devs say they don’t experience this.
For comparison, Typescript became so popular precisely because it mitigates similar problems for JavaScript once code based grew to non-trivial sizes.
Exactly. It ties to the excessive startup overhead. If you rename things and change stuff you must run the tests in a fresh JVM to ensure that everything has been evaluated in a consistent state rather ad hoc evaluation in the REPL. This means running from the command line in addition to your REPL or restarting the REPL regularly.
I haven’t experienced this with Fleet after using it some months.
However, from using the other JetBrains tools the performance killer for builds and indexing libraries and documentation has typically been slow file system access.
These IDE even warn you when they detect this. I don’t remember seeing this warning in the Fleet preview.
A common solution is to disable aggressive anti-virus scanning for you project folder and some key application folders so it does not slow down the build.
Another cause is slow remote mounted file systems that you might have if you are using VMs, WSL or Docker.
If I remember correctly the docs have detailed information about this.
Fleet, like the other JetBrains IDEs is indeed running on the JVM.
It also has some components in Rust and a special GUI framework.
There is a great series of blog posts about its architecture and design here with a lot of details:
https://blog.jetbrains.com/fleet/2022/01/fleet-below-deck-pa...
Double entry accounting as a representation is a domain specific language for the people working in the field and as such is very useful.
However, you might ask, is it also the right primitives to express accounting IT systems or could we think of a better domain model, and then derive the double entry ledgers from that?
This is an important and profound question.
If you would like to dive in, I suggest looking at the REA (resources, events, agents) model, a set of abstractions and patterns for expressing accounting in business systems.
The Model-Driven Design Using Business Patterns book by Hruby et al. is a great starting point. [1][2]
Also, the POETS (Process-Oriented Event-driven Transaction System) research from DIKU (Copenhagen University) is super interesting, offering some ideas for next-generation ERP systems.[3]
[1] https://link.springer.com/book/10.1007/3-540-30327-2
[2] http://phruby.com/book/index.html
[3] Fritz Henglein, Ken Friis Larsen, Jakob Grue Simonsen, Christian Stefansen. POETS: Process-Oriented Event-driven Transaction System. Journal of Logic and Algebraic Programming (JLAP), Invited submission to special Issue on Contract-Oriented Software, 78(5):381-401, 2009.
Jesper Andersen, Ebbe Elsborg, Fritz Henglein, Jakob Grue Simonsen, Christian Stefansen. Compositional specification of commercial contracts. International Journal on Software Tools for Technology Transfer (STTT), 8(6):485-516, November 2006.
There are more papers from DIKU on this, see e.g. prof. Henglein’s publication list :
http://hjemmesider.diku.dk/~henglein/bib/author/Fritz.Hengle...
Molten salt loops are not as difficult with current technology as they were when they were first introduced.
There are some very interesting startups in this field working on delivering these reactors on an industrial scale rather than the "artisanal" reactors that dominate today:
Copenhagen Atomics [1] is one. They offer a molten salt loop for rapid prototyping [2] if you want to try it yourself.
Seaborg Technologies is also building a compact molten salt reactor. [3] They have a subsidiary, Hyme, to use the same molten-salt technology to provide grid-scale energy storage to balance electricity grids with variable generation from e.g. wind and solar power. [4]
[1] https://www.copenhagenatomics.com/ [2] https://www.copenhagenatomics.com/products/molten-salt-loop/ [3] https://www.seaborg.com/ [4] https://www.seaborg.com/press-release-hyme
He proved the supplemental oxygen issue moot by climbing K2 without it, in winter.
https://www.climbing.com/people/nirmal-nims-purja-the-man-wh...
Clojure is a language without a platform so all the Clojure dialects have the different semantics of the underlying platform, be it the JVM or JavaScript.
For example ClojureScript has all the “wat” semantics from JavaScript primitive types.
You can build libraries that try to hide the differences but the leaky abstraction is inherently still there.
I remember someone back in the day - perhaps Microsoft - advertising their certs as “so THEY know that YOU know”.
Note that “cashing out” in some EU countries means transacting your cryptocurrency tokens in any way, not just trading them for money.
Example:
Sweden taxes your gains when you transact a cryptocurrency holding, also when you exchange from one cryptocurrency to another. [1]
Same for Denmark [2].
Check your relevant tax legislation for your local rules.
[1] https://skatteverket.se/privat/skatter/vardepapper/andratill...
More info about the mentioned research is available from the Babraham Institute at Cambridge:
https://www.babraham.ac.uk/news/2022/04/new-technique-rewind...
I believe Pellegrino Artusi’s La scienza in cucina e l'arte di mangiare bene ("The Science of Cooking and the Art of Eating Well") is the classic reference and has been in print since the late 19th century. It is available in many translations.
Will Chrichton at Stanford Uni argued for targeting Rust rather than LLVM to get the benefits of a safer intermediate language and a standard library for free.
It is interesting to consider the trade-offs even if you go with C or LLVM:
Payments are regulated by financial regulation in many countries, no matter the fine print.
For EU countries this would probably be governed by the PSD2 payment services directive and the GDPR data protection.
Specifically, payment transaction data may reveal personal data and using it for other purposes than the payment itself would require explicit consent.
IANAL. It would be interesting if lawyers with up to data knowledge on financial regulations in various jurisdictions could elaborate on this.