Standard Programmieren
Introduction
Sexy Code Rawr(I am not good at coding but I would like to be able to make sexy code)
Here I gather all my thoughts related to software production.
I can only do some basic coding, I am not a programmer.
Genres
* Workbenches(FL Studio, Krita, Aseprite, Inkscape, VS Code, Godot, spreedsheet)
* Eduware/NO/SO-spel(Seterra, Äventyrarna, Kalle Kunskap, Rymdjakten)
* Life(Sims, Mulle Meck)
* Simulators(Hunting Simulator, Arma, Flight Simulator, Digging simulator,)
* Arcade(Call of Duty, Counter Strike, Day of Defeat, Team Fortress, Pac Man, Mario Bros)
* Non-degenerate Story(Undertale, To the Moon)
* Sandbox(Minecraft, Garry's Mod)
* Non-degenerate MMOs with social expression/education/creativity > grind (Club Penguin, Panfu)
What Level to use
Back in the 80s when you coded either:
A) You have studied computer systems and can do Assembly & C
B) You have not studied computer systems and use basic or ask a friend to do the code for you
I see myself as option B, I can do high level languages, I have too little interest in computer systems to do C and assembly.
So you are either a high level coder or a system coder to me.
I think it is good to put yourself into one of those buckets.
Either go:
A) high level coder
B) System coder
"High Level Languages are just slow garbage, learn to do real code or hire a coder"
I find that with most programs I use the program isn't the bottleneck, I am the bottleneck.
When the program starts being a bottleneck that is when I will hire a programmer.
Sketch/script level:
Python, Javascript, Basic, uses libraries/APIs for sketching/scripting, desktop automation, optimized for sketching not speed, quick file editing, rough access of computer, not something you would ship
High Level:
C#, Java, Uses libraries for utilizing computer components, abstract, but decently fine, access of computer,
Low level:
ASSEM, C, C++ Messing around with memory adresses and machine code, fine access to computer components.
Buying Tech
I believe in maximally supporting science.
When the choice is between a cat and a dog I tend to choose the cat.
Don't just look at the benchmarks, look at the author, support the most creative, not the most perfect.
You will be rewarded with good karma for supporting creatives.
Stay loyal to the superior lion!
Windows(Bill Gates XY-INT), mac(Steve Jobs XY-EMP-CPSC) or linux(Linus Torvalds, smaller XY-INT? Windows!
Nvidia(Jensen huang XY-EMP), AMD(XX-INT Lisa Su)? AMD!
Autoupdate
No autoupdates.
Wait a short while and see what update users say.
My ideal Power System Setup
* AMD GPU
* Intel CPU
* 1tb SSD
System Levels
Brukssystem:
* Laptop 8gb ram, Iris XE graphics
Powersystem:
*
* mid-high end Graphics card from 2017->
* 6gb-> VRAM
* 16-32gb ram
You know it is interesting, I can see similarities between the aviation industry and the computer industry.
First we just wanted bigger and bigger plaes/rockets, affordable by nobody
Then we wanted affordable planes/rockets focused on efficency.
I'm fine with just looking at the saturn 5, I don't think I can afford it.
The same goes for computers.
First it was all about those expensive gaming rigs owned by enthusiasts and rich people.
Then we will see more and more love for the more affordable efficent systems.
It's why we are seeing a retro computing revival.
People are really interested in those low capacity systems and low level code.
We're gonna see a low level computing renaissance.
Doing that early stuff with modern wisdom and technology is really interesting.
It's crazy my new laptop can function almost at the level of my dedicated gaming system from 2013.
Order of Learning Things
* Computer component functions, metaphors, simplifications, programable machines in general
* abstract representation of objects, data, file formats, basic compression:
tldr: field files and markup files
* Binary Fields
* Text Fields
* Wave Fields
* Image/Loop Fields
* Video Fields
* Model Fields
* 3D Animation Fields
* Object Markup Language
* Document Markup Language
* Audio Track Markup Language
* Map Markup Language
* Programing Language types(low, high, toy)
* Architectures(DOP, OOP)
* Classes, Structs, Objects, variables, Routines/Functions...
Procedural Framework/engine
I realise I have 5 different texts on OOP and PP
I wish there was an engine that was built with procedural programing in mind.
Separation of data and functions.
You can use current engines and just use them in a procedural style, but I would prefer an engine with procedural in focus.
Instead of the objects window you have data window and procedure window.
It is a real shame so many people get introduced to programming through OOP, which is just mind bogglingly confusing.
I like the scenes concept, but not the objects concept.
I stick to procedural programing/DOP, OOP is just confusing.
I would have understood code better, faster if I started with procedural programing
It's not an elitist thing, I just genuinely get things done better, faster and more organized in procedural programing
The amount of execution order confusion I experienced with OOP was hell.
I don't understand OOP code.
I don't like thinking in terms of classes, objects, scenes, scene hierarchy, That just confuses the sh*t out of me since I have a hard time relating it back to the hardware.
I think in terms of structs, instances, programs/routines, RAM.
Engines put you in a bubble of metaphors that are more of a bear favour, these metaphors make you understand nothing.
I want to understand the code I am writing, I'm sure less gifted people feel the same.
you know we bundle functions and data in procedural programing as well, but we don't call that objects, I call that a program
It is basically a small program within the program.
I use program when it big relative to the context and routine when it is small
I just really want to avoid the object metaphor, it has mostly confused me.
Code is programs and routines, the object metaphor makes me think all the objects routines run in paralell.
Efficent code
I really love watching youtubers who optimize code for older hardware using newer knowledge.
I'm really bothered by how bloated and incompatible lots of new software is.
I really think that lower-end computer code will recieve more love in the coming years, I have no doubt there is much demand for bruks level software.
Specialized experimental software makes lower capacity computers seem weaker than they are.
I shouldn't need an expensive power system to play games with bruks graphics.
bruks, bruks, bruks!!!
Especially older game graphics, there is sooooo much optimization it is insane.
* Exclusionary questions first
* Only write code for the scope, for example doom didn't do multiple floors
* precalc tables
* paralellisation
* Executing in chunks to prevent lag
* Difference fields
* Simplifications, sums, LODs
* Reuse
* Sectors
* Caching
* Minimize jumping, functions close to data they operate on
* Change only what is new
* Avoid OOP when possible
Internet
I think the internet is cool, it is to computer networks what electrical grids were to electricity.
Though I think smaller networks are equally cool.
They are good at different things.
You know I want public print laws(Possible to demand public copies of old documents) so you'd think I am all about THE INTERNET, but I also like smaller networks for doing experimental stuff.
OOP is cool
I've changed my mind.
I think OOP is the worst paradigm initially when learning programming.
Because the objects and god metaphor is too complex for noobs.
The chalk board metaphor is the fundamental metaphor and then you can add the objects and God metaphor to that.
Learning OOP first really confused me.
I found I liked OOP more once I understood PP.
Because OOP is basically making little modular programs rather than one big program.
And understanding many smaller modular programs before one big program cofused my brain massively.
The value of OOP doesn't become obvious if you haven't first programmed in PP.
Now I mix OOP and PP.
State Combination Tree
Computer Table
I really really like to have the computer monitor really high up so everyone can gather around and look at it.
I like to have the keyboard and mouse really far below the computer monitor.
The computer work acquires a sense of greatness when it is visible to everyone in the room.
It feels insignificant when you are sitting with it low and the screen is hidden by your body, like you want to hide it.
I want to show it.
Program Structure
Just like sheet music.
1. Routine markups
2. routines
File Names
I like to use a _raw part if the file is a raw microphone recording/raw scan with no edits.
Color Language and Coding
Functions = red because red symbolises action.
Classes = blue because blue symbolises abstract, ideas,
objects = green because green represents being, life, the touchable
System Tiers
1.Compability: DS, PS1, SNES, Gameboy advanced, Smartphone(Phantom Hourglass, GTA DS)
2. Bruks: Laptop, Laptop+Dock station, Intel Iris, 8gb-16 ram, carry-on 1-2terabyte HDD(Counter Strike Source, Team Fortress 2, minus texture filtering and anti-aliasing, Pixels = bruks)
3. Powerstation: Stationary, Graphics card 6gb vram, 32gb ram, terabyte integrated HDD, External server multiple terabyte(Flight Simulator 2024)
Target a system tier before writing the software.
Too much software targets powerstations for no good reason.
Efficent Logic Gates
When doing switches/if statements make sure you're setting them up so you check as few statements as possible.
For example:
If the player has an invincibility potion active it does not make sense to check damage from enemies.
If the user can't see a portion of a map it doesn't make sense to render it.
Inefficent switch flows can add up if you do not make sure to avoid them.
Who Should Code?
If you do not understand abstract thinking and abstract representation you will most likely not get anything from coding.
You should just stick to UIs and let your nerd friend handle all the advanced computer stuff.
Compression vs Elemental Reduction/Reduction
Compression is making a file size lower without sacrificing information.
Elemental Reduction means sacrificing information and reducing the content to it's basic elements.
For example:
Value field compression means you only measure the differences between pixels in a region, can save lots of space without losing quality.
Elemental reduction could be a mere description of the image and some basic proportions between elements.
Good for different things.
Why save the weather report on the radio as an audio file? probably better to store a transcript.
Why save the fugitive as a mere description? probably better to store it as a photo.
Sometimes elemental reduction, sometimes compression, depends on the importance of detail.
If you want to know what weather reporters sounded like it is probably better to store a small audio file.
ASCII = mistake
ASCII is one of the biggest mistakes in computer science.
A standard character set based on american english rather than formal deutsch.
Language f*ckup of the century.
Deutsch Standard Kod für Information Austausch, DSKIA
No ignore what I said.
ASCII is awesome.
America is awesome.
English is awesome.
The language of freedom, memes and money.
File Format I use
If you do not compress your audio files/image files you are doing the digital equivalent of storing cones in individual boxes rather than just stacking them.
Strukturfiler och fältfiler
Difference fields and value fields are the bare minimum compression techniques that always should be used.
The fields can have many different shapes and priority layers.
They can be boxes.
They can be cones.
They can be cylinders.
They can be waves.
Thick lines.
When there are big recurring shapes in the file, field compression is the way to go.
I'm extending it so it is not just difference fields, but also value fields.
Value fields are common in simpler images on the web.
1. Difference fields
2. Palette fields
3. Value fields
so the new name is just:
FI = "Fields Image" describes an image as fields of differences from absolutes, fields of equal value and absolutes rather than just absolutes.
FF = "Fields Film" describes an film images as fields of differences from absolutes, fields of equal value and absolutes rather than just absolutes.
FW = "Fields Wave" describes a wave(audio or other) as fields of differences from absolutes, fields of equal value and absolutes rather than just absolutes.
FM = "Difference Fields Model" describes a 3D model as fields of differences from absolutes, field of equal value and absolutes rather than just absolutes.
FT = "Fields Text" describes a series of characters as fields of differences from absolutes, fields of equal value and absolutes rather than just absolutes.
(C)MML(map markup language) = format used for making maps, just like a html can just be a bunch of links to other htmls, a MML can just be a bunch of links to other MMLs.
OBJ = format used for objects
(C)HTML(compressed html, html is stupidly verbose, not good for storage but nice for editing)) = documents
CSS = styling of html
(C)ATML(audio track markup language) = like html but for music tracks, describes music as instruments, samples and effects
I often have a compressed version for files that are designed for readability first and storage second.
DML = Document Markup Language
JSON and XML great merge = OML = Object Markup Language
Document/skrift/bok structure:
* root folder
* graphics folder
* css folder
* index.chtml
track structure:
* root folder
* samples folder
* index.catml
Global Malign CPSC and coding style
I think this global case of malign CPSC that's been going on for a while has affected coders style.
CPSC makes INTs feminine, femininty is verbosity and following more rules than necessary.
I think coding became more and more gay starting in the really late 90s and onwards.
More and more unecessary complexity.
Not saying that there isn't simple coding styles either, just that the emphasis and trend is gay coding style.
Maybe it was 9/11 that marked the end of the simple 90s and marked the start of the gay 00s
Image Compression:
* raw areas(edges, strong noise)
* Color range fields(simple areas)
* Color range gradients fields(simple areas with a palette that gradients from one part to the other)
* exceptions(blotches within areas)
Audio Compression:
* Height Field Waves(big simple waves with high frequency height bumps)
* exception fields(noise hit)
* raw areas(noise)
Noise information is by definition uncompressable, if there truly is no pattern it can not be compressed.
Don't bother trying to compress close-to-noise areas
* Identify areas of low frequency information(field of similar colors)
* Identify areas high frequency information(texture, field edges)
* Identify minor exceptions in low frequency information fields(hairstrand on clear paper)
* Simplified descrptions(color cones, exceptions)
Value Field Image Compression, VincentD Compression
Value field compression is a technique where simpler fields of the image are described as a series of differences from the field mean rather than as absolute colors.
Fields are defined with simpler polygons.
Within the fields colors are differences from a mean measured using a smaller number than what would be used to measure absolute color.
You can do the same for video.
Polygons have an order
Easy Forum Software When?
I first found reddit when the Kerbal Space Program Forum closed down for maintanence and had reddit as their hub.
I don't like reddit because:
* Thread authors dominate every thread, design doesn't promote conversation.
* unpersonal, anti-customization
When are we gonna get that simple forum software we all want?
As easy as reddit/discord, as functional as a forum.
LOD-Manager
Routine that manages loading of chunks.
Light-Manager
Routine that manages lightning effects like:
* World Lightning
* Direct Lightning
* Light boxes(local illumination, local darkness, local lightness...)
* Spatial&Geometric Clarity Oclusion(dark gradients, light gradients, touch gradients, contrast gradients, noise overlay gradients, texture gradient overlays)
* reflections
* Bloom
I suppose this goes together with the LOD-manager
Object Oriented Programming is Weird
Imagine if instead of "effect" and "timer" your microwave just had one turn that said "food quantity"
A needless abstraction that turns you into a sh*ttier microwave cook.
If you are too stupid to understand "effect" and "timer" you should not use a microwave.
Isn't OOP just a massive bear favour? What is the point?
It breaks the metaphor of the scientist and the chalkboard, why would you do that!?
Further I really like the word routine and subroutine, it's quite important in coding.
I use those words all the time when coding because that's a good metaphor.
Routines written on a chalkboard like "clear the board after use" or the today schedule, and so on.
Chalkboard routines.
I prefer calling what is mostly called functions routines/subroutines
Mathematicians can call them functions if they want.
Object oriented programing makes it more difficult to understand the program and also slows down the program.
Gifted or ungifted you have no reason to do OOP.
There are plenty of good metaphors to understand DOP.
OOP is the biggest mistake in programing.
Trying to take computer programing out of programing.
OOP has created a generation of programing fools who think they know what they're doing, but actually have no clue what they are doing.
They live in a bubble that makes them weak.
When functions are bundled with data you can use the God metaphor.
* Objects = world
* Their functions = jobs for god
* God = makes everything move, processes objects in series.
Going back to Low Level Code using modern techniques
Going back to low level code using modern techniques is something I've started exploring.
AI systems and advancements in code has made it possible to make better code for old systems, which is really interesting.
You realise just how unoptimized some things were even back then.
Kaze emanuar is cool.
Modularity or Speed?
You can have speed,
you can have modularity,
You can't have both.
The unix philosophy of "do one thing good" doesn't seem to consider that doing many things at once is often more optimized.
So really you always have to weigh the two, you can't just modularitymaxx.
Procedural Programing is King
Doesn't get better than procedural programming.
No goofy abstractions.
Just procedures, as programming should be.
Objects aren't a useful abstraction for anyone.
Literally just garbage.
If you are a high level programmer you still want to have some idea of how your code is executed on the computer.
Object oriented programming throws that out the window.
High level code.
Low level code.
Procedural/data oriented is king.
Inline Routines or jumpto routines
Inline = faster, but takes more memory.
Jumpto = slower, but greater reuse.
Inline is better in the compiled code.
I think the programer should be able to control if it is inline or jumpto in the higher language.
You should write jumpto first and use a compiler for inlining later, otherwise the code becomes unmanageable quickly.
Compression
Value range field compression means you look for fields of similar values and only measure the small differences in values in specified fields instead of measuring big values everywhere.
value field compression is the same but instead of similar values it is exactly the same value.
Palette field compression is fields of same palette.
Good compression is about thinking of ways to describe the same data with less numbers.
Bad compression is about thinking of ways to describe different data with less numbers.
List:
* Slope offset compression(audio)
* Difference store(diff. store)
* Value field compression
* Range field compression
Important Computer Programing Concepts
Assembly: 1:1 code that runs on the CPU
Allocated memory: memory allocated by the operating system for the program, introduced on PCs at the same time as multi-threading
CLR: Program that executes VM language programs like C#
Programing Languages
My favorite is the script level/mid-level combo
Write intensive sh*t in mid lang, write simple sh*t in scripts lang
High Level:
* Frameworks, Libraries
* Basic, Javascript, GDscript, Python
* C#, JAVA , Kotlin
Low Level:
* Frameworks, libraries, assembly sections
* C, C++,
* Assembly
Communism & Open Source & non-profit
Actually what the f*ck am I talking about.
no I don't believe in any of this sh*t.
Or I'll get back to this sh*t later.
If you are working on the ground we all stand on, the essential, make it open-source/non-profit.
If you are working on something else make it for-profit.
Sometimes scientist/engineers create cutting edge technology under communism, like nuclear bombs, rockets, space stations, kalishnikovs.
c*mmunism, and things similar to it, are still sh*t.
When I see things like Blender or Godot Engine happen in open source development I think of soviet union engineers.
Donations is a horrible business model, take money for your work damn it!
Actually I have thought about it more.
I mean I will take things that have been created by open source people.
But I will never make open source software myself.
There is no such thing as free.
There is always an exchange of something for something else.
You know what open source isn't communism but uh the profit from working in that industry is quite meager.
The developers are kept alive I suppose.
Though there is much software that I don't understand why it is open source.
Why is blender open source? A pay4version system seems more fitting for that no?
Same for Godot?
Same for Gimp?
Just making everything open source feels like a meme.
I prefer using software from a company with promises.
okay, okay.
So I think this way about open source development.
* It isn't communism, you do get money, but it is life support money, you get massive reputation, which has value.
* It is kommunen type sh*t, barely any money but definetely helpful.
* If the use of the product is creativity then a closed license would sort of destroy the product,
the user wants to be able to do what they want with the thing with no objections, but also no guarantees, fron the creator.
I h*te PDF files.
I love HTML files.
If a product is meant to rule it's customer then have a private license.
If a product is meant to be ruled by the customer then have an open license.
You know what actually it is all communism, propietarymaxx.
Basic stuff like, file formats, basic creative suites, basic operating system, basic code editor will win through open license, do a private license and you will eventually get defeated and also forgotten.
In the basic code market open source wins eventually.
In the specific code market private wins.
propietary license until the open source competition starts getting to strong, then you make your license open so your product stays relevant.
or actually you risk the open source going past you if you do the propietary license so just do a open license from the start if you are in the basic sh*t business.
You can tell a propietary basic tool program is dying when the developers start adding a bunch of gay nonsense.
Happens every time.
Things I think will get outcompeted by/turned into open source/non-profit:
* Unity
* Photoshop
* Aseprite
* Windows will become free and open source and adopt a minimalist skeumorphic style, Microsoft will make money through other products ways
* Source 1 SDK
* Word
* Twitter(again runs on donations)
* Discord(some sort of forum software that runs server off donations)
* Youtube
* PDF
* Minecraft
* FL Studio
I think non-profit is an interesting model.
I can see why sometimes you want that.
If a forum is for-profit the people with views not aligned with the owner will leave.
And what the h*ll is a forum without disagreement.
With propietary there are more guarantees though.
AI-assistant
I like to call my personally adjusted AI-assistant Gunnar Droid
I like to use it for:
* Looking up algorithms
* Designing file formats
* creating algorithms
* advice for efficency
It f*cks up boiler plate so I don't let it do that.
Good Times
* 90s 00s ambient trance music
* Simulator games
* Kladdkakglass
Favorite Systems
* PC
* early 2000s PC
* SNES
* PS1
* Nintendo DS
* WII
Files
Map/Model File/folder:
* map/model json
* textures folder
* shaders folder
* billboard foler
* animation folder
Document File/folder:
* html
* css folder
* graphics folder
* js folder
Workflow
1. Papers and sketches
1.5. Decide stack
2. Data Structures
3. Functions
Data Oriented Design
* Component layout(Fastest)
* object layout
Titles
I prefer software titles that hint at the functionality:
* VS Code
* Musescore
* FL Studio
* Gamemaker
* Photoshop
* Aseprite
* Internet Explorer
I dislike non-descriptive:
* Skype
* Godot(I call this Linietsky's Sandbox)
* Unity
* Steam(I call this Gabe's Library)
* Logic(The name makes you think it is something like mathlab or VS code but it is music?)
* Edge(Go back to Internet Explorer name)
Gear
* Laptop, Surface/Framework
* 80s inspired docking station
* Mechanical Switches Keyboard
What is the Program
I think very modularly about code, I do not think of the modular components such as SFM, Unity, Godot, OpenGL as being my program, they are programs I use.
It is better to think like that.
When you talk about porting a game you talk about replacing the modules with ones that work on that platform.
Modular mindset.
UNIX mindset.
"your program is 5 gigabyte!"
No, my program is an invisible 10 megabytes, the modules are 5 gigabyte.
You should use modules as much as you can, don't reinvent the wheel.
Do one thing and do it well.
Maps have Layers
I prefer map data with layers, that's all
2010s uncatty software design
I feel that many software developers have taken a wrong turn in their development style.
They try to own the customer rather than just making a good product, software feels increasingly perverse.
I prefer earlier valve titles where modding is king.
CS:GO and onward microtransactions started popping up everywhere.
Do not make products that give you short term financial wins, make products that are pure quality and spare your sanity in the process.
The more you think about money the less you get in the long run.
Think about quality products.
Do not think about money, do not think about fame, that will slowly drive you insane.
Think about good products.
60s GUI
I know GUIs were quite rare back then, but I like minimalist GUIs.
Like true minimalism.
No rounded corners.
Console vs PC
I think PC feels more social.
Consoles are nice, but PC is my favorite.
Modding, forums, simplicity, the web.
PC Gaming FTW!
Code Inspo
EDUWARE EDUWARE EDUWARE EDUWARE EDUWARE EDUWARE EDUWARE
* SCIENCE AND EDUCATION OMG
* Kerbal Space Program
* LEVANDE BÖCKER
* Kalle Kunskap
* Noas Ark DOS
* Pippi DOS
* Mulle Meck bygger Plan
* Mulle Meck
* Seterra
* 90s Swedish PC edu-vidya
People Inspo
Kommunencore:
* Juan Linietsky
* Tantacrul
* Linus Torvalds
* Blender Guru
* Steve Coast
* Richard Stallman
* Ton Rosendahl
Private-business-Enterprise-Link-Corporation-Global-Company-core:
* Bill Gates
* Gabe Newell
* John Carmack