π Do you want to develop the next design AI with us? Then join our Weekly-Evening-Session every Tuesday starting at 6pm (UTC+1) on Discord π»
π§© Design-Information-Modeling for Kit-of-Parts Architecture ποΈ
You want to π§© the next ποΈποΈπ’ππ«π¨βͺπ with π€? But ππ’π£οΈπ₯π±οΈβ¨οΈ takes all your β? Then try to π§ the 𧬠and let semio ππ₯οΈβοΈπ¨οΈπͺπ.
Note
Are you a user of semio? Then you probably want to visit our docs π
Glad to see you!
Let me walk you throw πΆ
Let's start with the rule of thumbs that this codebase was built with π«°
I know, the urge to tidy up or separate things is big ποΈ
But try to withstand it π«₯
Out of my experience, it makes development slower, not faster π
A single file is easier for humans and computers to understand π‘
You will be supprised
- by the awesome fill-in-the-middle suggestions of your copilot π€
- by the hassle-free context selection for your ai agent π±οΈ
- by the smooth refactor experience by just going top-to-bottom β¬οΈ
- by the beautiful diff for your next code review π
- by the clean git-history when you try to find a certain change π
We all know this ./src/**
folder that has made it into a lot of starters π
Other than feeling cool about using hacky abbreviations, does it really help you to understand the project faster and work more efficient on it?
If your project contains hundreds of config file and other project folders at the root, maybe π€
But most likely not β
π If multiple people work longterm on the same part, then one file for each part should be created βοΈ
Trust me, it will make collaboration much easier π
π¦ If you don't need an interface because something is not likely to be extended in the future, don't create it β
The main question is the interface productive or not?
The pay-off of abstraction happens in the future π£οΈ
Every extension profits from a clean interface π
Most things are not extended πͺ¨
If you change your architecture, just design proper interfaces for something concrete not something potential and reactor it βοΈ
π€ Repeating code is ok if it probably doesn't happen more than twice and the repeated code is close in the source code β
We are past the time where we copy code for no reason π
Actually repeated code can improve the quality of your copilots suggestion π€―
The main question is how can your application grow?
If a change requires exponentially more duplication then you'll probably have to fix it π οΈ
If not, then you are probably good π
In my understanding, rule-of-thumbs are most useful when they are concrete π¨
Besides that I am sure you know about KISS (Keep-It-Simple-Stupid), DRY (Dont-Repeat-Yourself), YAGNI (You-Aren't-Gonna-Need-It), SoC (Seperation-of-Concerns), Avoid Premature Optimization, Law of Demeter, LCHC (Low-Coupling-High-Cohesion), SOLID (Single Responsibility (SR), Open/Closed (OC), Liskovβs Substitution (LS), Interface Segregation (IS), Dependency Inversion (DI)), β¦
But as always, the devil is in the details π
Even if 95% of the codebase follows those principles, there are good reasons for the other 5% βοΈ
π© Don't worry, you'll figure out the possiblites and make the right choice for the specific problems β
π¦ Monorepo
This git repo has everything that exists in the open semio ecosystem π€―
Do you wonder how the same looking ui or functionality is avalailable on multiple components? The secret is that they have shared cores in their ecosystem π₯
A component is a piece of software which runs independently ποΈ
βοΈ sketchpad
An electron-based desktop app primarly working for with local kits πΎ
π¦ Grasshopper
A full-blown Grasshopper Plugin that has (almost) everything π―
βοΈ engine
A hidden fat-client which exposes shared functionality to other desktop uis π€
It takes care of:
- CRUDs (Create-Read-Update-Delete) for local kits πΎ
- Client-Server communication
βοΈ
It offers two APIs to other clients:
- A simple REST OpenAPI π₯
- A complex GraphQL Relay API π₯
{} REST OpenAPI
If you go to http://127.0.0.1:2412/api/docs/
you find the Swagger UI:
β GraphQL Relay
Still a prototype βοΈ
If you go to http://127.0.0.1:2412/graphql/
you find the GraphiQL UI:
π docs
ποΈ assets
ποΈ Examples
π Starter
π Hello semio
π Geometry
π« Metabolism
You might have noticed that the individual components can be closely related such as sketchpad, Grasshopper and engine but they are in totaly different folders π
The reason for this is that the monorepo is not disected according content but according technology stack βοΈ
This is less intuitive but more tool-friendly and everything that is easier for our tools is less pain to develop π§βπ»
π Python
Currently only engine but in the future it might grow and then the .venv
will be centralized, β¦
You need the following tools:
- Windows
- Visual Studio 2022 Community
- Rhino 8
- Python 3.12
- Poetry
- Node
If you do not have Python installed, I recommend to install it over the Microsoft Store πͺ
Afterwards you can install poetry with this Powershell command:
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -
In the console you will see a warning that the poetry.exe
is not installed in the requested location π
Then copy the actual path
...\AppData\Local\Packages\PythonSoftwareFoundation...\Roaming\pypoetry\venv\Scripts
and add it to your environmental path variable β
Then you can build.ps1
in the Powershell and add your full path LOCAL_PATH\dotnet\Semio.Grasshopper\Debug\net48
to your GrasshopperDeveloperSettings βοΈ
If you have never executed local Powershell before then you have to first Set-ExecutionPolicy
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
- Visual is better than text π
- Compact β‘οΈ Less space β‘οΈ More information β‘οΈ Faster to understand π
- Rounded corners β¬
- Shadows π€οΈ
- Multiple unicode directly after each other π₯π₯π₯
Are you curious how a 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 and 11 colored gradient can come together for an invertible theme in a semantically meaningfull way? Well, here is how you achieve it with 33 colors π€―
- One symbol after every sentance π―
- One symbol at a time π₯
- Pick emoji if possible otherwise unicode βοΈ
- π One symbol to summarize a title
- π‘ One symbol to summatize a title description and one to think about in the end π€
.
are forbidden β- All components in
semio
(sketchpad
,studio
, β¦) start with a small letter π‘ - Did you know that
β¦
is just one character?
π‘ Fonts
- Sans serif: Anta π¨οΈ
- Serif: Kelly Slab βοΈ
- Monospaced: Shart Tech Mono π₯οΈ
- Emoji: Noto Emoji β«
- Sharp corners π
- Borders β‘
- Basic geometric shapes βͺ