Softeware - Tumblr Posts
So I made an app for PROTO. Written in Kotlin and runs on Android.
Next, I want to upgrade it with a controller mode. It should work so so I simply plug a wired xbox controller into my phone with a USB OTG adaptor… and bam, the phone does all the complex wireless communication and is a battery. Meaning that besides the controller, you only need the app and… any phone. Which anyone is rather likely to have Done.
Now THAT is convenient!
( Warning, the rest of the post turned into... a few rants. ) Why Android? Well I dislike Android less than IOS
So it is it better to be crawling in front of the alter of "We are making the apocalypse happen" Google than "5 Chinese child workers died while you read this" Apple?
Not much…
I really should which over to a better open source Linux distribution… But I do not have the willpower to research which one... So on Android I stay.
Kotlin is meant to be "Java, but better/more modern/More functional programming style" (Everyone realized a few years back that the 100% Object oriented programming paradigme is stupid as hell. And we already knew that about the functional programming paradigme. The best is a mix of everything, each used when it is the best option.) And for the most part, it succeeds. Java/Kotlin compiles its code down to "bytecode", which is essentially assembler but for the Java virtual machine. The virtual machine then runs the program. Like how javascript have the browser run it instead of compiling it to the specific machine your want it to run on… It makes them easy to port…
Except in the case of Kotlin on Android... there is not a snowflakes chance in hell that you can take your entire codebase and just run it on another linux distribution, Windows or IOS…
So... you do it for the performance right? The upside of compiling directly to the machine is that it does not waste power on middle management layers… This is why C and C++ are so fast!
Except… Android is… Clunky… It relies on design ideas that require EVERY SINGLE PROGRAM AND APP ON YOUR PHONE to behave nicely (Lots of "This system only works if every single app uses it sparingly and do not screw each-other over" paradigms .). And many distributions from Motorola like mine for example comes with software YOUR ARE NOT ALLOWED TO UNINSTALL... meaning that software on your phone is ALWAYS behaving badly. Because not a single person actually owns an Android phone. You own a brick of electronics that is worthless without its OS, and google does not sell that to you or even gift it to you. You are renting it for free, forever. Same with Motorola which added a few extra modifications onto Googles Android and then gave it to me.
That way, google does not have to give any rights to its costumers. So I cannot completely control what my phone does. Because it is not my phone. It is Googles phone.
That I am allowed to use. By the good graces of our corporate god emperors
"Moose stares blankly into space trying to stop being permanently angry at hoe everyone is choosing to run the world"
… Ok that turned dark… Anywho. TLDR There is a better option for 95% of apps (Which is "A GUI that interfaces with a database") "Just write a single HTML document with internal CSS and Javascript" Usually simpler, MUCH easier and smaller… And now your app works on any computer with a browser. Meaning all of them…
I made a GUI for my parents recently that works exactly like that. Soo this post:

It was frankly a mistake of me to learn Kotlin… Even more so since It is a… awful language… Clearly good ideas then ruined by marketing department people yelling "SUPPORT EVERYTHING! AND USE ALL THE BUZZWORD TECHNOLOGY! Like… If your language FORCES you to use exceptions for normal runtime behavior "Stares at CancellationException"... dear god that is horrible...
Made EVEN WORSE by being a really complicated way to re-invent the GOTO expression… You know... The thing every programmer is taught will eat your feet if you ever think about using it because it is SO dangerous, and SO bad form to use it? Yeah. It is that, hidden is a COMPLEATLY WRONG WAY to use exceptions…
goodie… I swear to Christ, every page or two of my Kotlin notes have me ranting how I learned how something works, and that it is terrible... Blaaa. But anyway now that I know it, I try to keep it fresh in my mind and use it from time to time. Might as well. It IS possible to run certain things more effective than a web page, and you can work much more directly with the file system. It is... hard-ish to get a webpage to "load" a file automatically... But believe me, it is good that this is the case.
Anywho. How does the app work and what is the next version going to do?
PROTO is meant to be a platform I test OTHER systems on, so he is optimized for simplicity. So how you control him is sending a HTTP 1.1 message of type Text/Plain… (This is a VERY fancy sounding way of saying "A string" in network speak). The string is 6 comma separated numbers. Linear movement XYZ and angular movement XYZ.
The app is simply 5 buttons that each sends a HTTP PUT request with fixed values. Specifically 0.5/-0.5 meter/second linear (Drive back or forward) 0.2/-0.2 radians/second angular (Turn right or turn left) Or all 0 for stop
(Yes, I just formatted normal text as code to make it more readable... I think I might be more infected by programming so much than I thought...)
Aaaaaanywho. That must be enough ranting. Time to make the app
Help learning c++
So at my internship a whole bunch of people have to switch to C++. And because management is incompetent, there are no learning package or company resources to help this. So I am converting some of my code notes to help this along. And I am also sharing them here. They are created on, and meant to be used on godbolt. They contain explanations and some of them instructions for how to investigate what you are looking at. The ones I have for now are: Understanding objects ( Constructor, destructor, assignment and copy operators ) https://godbolt.org/z/EaMc1fW44 Access modifiers (IE, do you know what public, private and protected means?) https://godbolt.org/z/v3nejaYhh
Pointers (Basically, to not use raw pointers and what to use instead) https://godbolt.org/z/4745PK38n
That is a very neat idea!
If you like things like that you might want to look into VHDL ( I learned that... some years ago, but have not touched it since ) or Verilog.
They are... programming languages for making logic gate logic.
You combine that with an FPGA, which is essentially a whole lot of NAND gates ( Which as I said, can represent any logic gate system ), and then you can make hardware... via software.
And yes, these essentially do things like your idea. Things that would take a CPU aaaaages to do, can be done very very fast. So you "just" have normal C code, but if it runs onto one of the problems it have hardware for, it uses the hardware.
This is also how graphics cards work, or just floating point operations!
It is insanely cool! :D
What is half-adder and full-adder combinational circuits?
So this question came up in the codeblr discord server, and I thought I would share my answer here too :3
First, a combinational circuit simply means a circuit where the outputs only depends on its input. ( combinational means "Combine" as in, combining the inputs to give some output )
It is a bit like a pure function. It is opposed to circuits like latches which remembers 1 bit. Their output depends on their inputs AND their state.
These circuits can be shown via their logic gates, or truth tables. I will explain using only words and the circuits, but you can look up the truth tablet for each of the circuits I talk about to help understand.

Ok, so an in the case of electronics is a circuit made with logic gates ( I... assume you know what they are... Otherwise ask and I can explain them too ) that adds 2 binary numbers, each which have only 1 character.
So one number is 1 or 0
And the other number is 1 or 0
So the possible outputs are are 0, 1 and 2.
Since you can only express from 0 to 1 with one binary number, and 0 to 3 with 2, we need to output 2 binary numbers to give the answer. So the output is 2 binary numbers
00 = 0
01 = 1
10 = 2
11 = 3 // This can never happen with a half adder. The max possible result is 2
Each character will be represented with a wire, and a wire is a 0 if it is low voltage (usually ground, or 0 volts) and a 1 if it is high voltage (Voltage depends. Can be 5 volts, 3.3, 12 or something else. )
BUT if you only use half adders, you can ONLY add 2 single character binary numbers together. Never more.
If you want to add more together, you need a full adder. This takes 3 single character binary numbers, and adds them and outputs a single 2 character number.
This means it have 3 inputs and 2 outputs.

We have 2 outputs because we need to give a result that is 0, 1, 2 or 3
Same binary as before, except now we CAN get a 11 (which is 3)
And we can chain full adders together to count as many inputs as we want.
So why ever use a half adder? Well, every logic gate cirquit can be made of NAND (Not and) gates, so we usually compare complexity in how many NAND gates it would take to make a circuit. More NAND gates needed means the circuit is slower and more expensive to make.
A half adder takes 5 NAND gates to make
A full adder takes 9 NAND gates.
So only use a full adder if you need one.
Geeks for Geeks have a page for each of the most normal basic cirquits:

I hope that made sense, and was useful :3
(Nearly) Never use auto in C++!!!
So I used to be amongst the people who thought "Yeah ok, auto hides the type. But if the type is not really important to understand the code, and was really long and confusing then it is worth it"
Like this: std::vector<std::pair<std::string, Employee>> MyFunction(); To turn it into: auto MyFunction();
And I was wrong. Do NOT use auto to hide that monstrosity. You FIX it. auto hides that awful thing and dumps the problem on the next poor fucker who will use it. ( People writing and using metaprogramming libraries are especially prone to doing this, since their typenames can fill entire screens ).
YOU just looked at YOUR code. Found it confusing... And decided... to HIDE it??? What it is the next person who did NOT write this code going to do when they read this going to do???
No. I beg of you. Use typedef.
You can create aliases of anything and make your code easy to read. And this only "hides" the code as much as auto and you can get the types the alias points to by musing over it. So it is auto... but way better. Because it is a UNIQUE name. Which can DESCRIBE things.
Like, with the horror in the previous example. Let us have a typedef in the .hpp file where "MyFunction" is declared. Now it reads MUCH better:
std::vector<std::pair< Employee_ID, Employee>> MyFunction();
I actually understand what the pair is now! Key value pairs! And screw it. Let us typedef the pair too now that we understand it!
std::vector<Employee_KeyValuePair> MyFunction();
And fuck it. Once more! Typedef the vector too!
Employee_Roster MyFunction();
I will bet most of you reading this only realized what the hell that moster was when you got near the end. BECAUSE THE FIRST THING IS FREAKING UNREADABLE! Fix it. Make your code readable. If you feel the urge to use an auto to hide a typename, it is time to typedef that motherfucker!
When to add delta in GoDot?
So I am slowly eating my way though the tutorial for GoDot. I already have some experience with moving things in space and calculating inputs for individual objects.... That is essentially half of robotics software. So in every frame, a function called _process is called. this function takes a number called "delta", which is the amount of time passed since last frame ins seconds (Usually close to 1/30 or 1/60). You add delta to the calculation of certain variables. The first example usually found is position, which is done like so:
position += velocity * delta
To me that was all good and obvious. But I found a lot of posts of people being confused when to multiply delta and when not to. And apparently doing it in wrong places is a quite common bug in GoDot games. Here is to figure it out! Think in term of units
Velocity is distance/time Position is distance
So you cannot add velocity to position. They are 2 different units. How to fix this? Remove the time component.
Since time is distance is divided by time, we simply multiply time onto it. You know what have the unit of time?
delta is time
Meaning it is obvious why you need delta in the line! :D position += velocity * delta
Because distance += distance / time * time
Guild Structure
Wanted to write a long reply to this post:
Spreading experience around is always awesome! :D
It is good for the firm you are working at as workers perform better.
it is good for whoever is getting taught since they get smarter.
And it is good for the one teaching, both for the pleasure but also because you learn a LOT by being forced to explain what you know to someone else. It crystalizes the knowledge and experience you have acquired, and forces you to go through the basics again, but this time with all your knowledge and experience, you often learn deeper, more complex truths, methods and skills from doing so than it is POSSIBLE to do when you learn them while having little clue what they are ( Function pointers and their safer class versions is a classic for OOP programmers ).
There is a structure a firm can use as soon as it starts having separated departments. Departments, while necessary, makes a firm more segregated, and makes it harder for knowledge to flow around.
It is called Guild Structure Or rather... some important context if you google this: "Guild Structure" is the only way I have heard of it, but "Guild Structure" is also a product from a firm called FourWeekMBA... which is a consulting firm that sells services that firms that is... basically helping them implement these ideas... So you can easily risk finding overcomplicated explanations for what it is, since if they made it easy to understand... then they do not have a product...
And it is super simple. Normal development work for engineers and software is done in smaller teams... usually 4-8 people. sometimes all are in a domain (like software, electronics, finance, marketing, etc), and sometimes mixed. Often... either being mixed, or having several teams with different domains meet relatively often, like several times a month is a good idea. Because it stops misunderstandings from developing, since they are caught early. It is a waste when the software department develops functionality that it turns out no one actually wanted (Which happens... a lot more than anyone likes)
Firms, managers and workers are often afraid to do this. Usually for 2 reasons. One bad, and one that Guild structure fixes. The bad one is not wanting to risk looking stupid in front of other people. When software, marketing and finance people talk about what to develop... each domain is asking questions in a domain they are not experts in. That is the symptom and consequences of toxic firm culture. Talk about it in the open, communication is how you slowly work on and attack this, both in firms and personal relationships. Because they are both about making humans work better together.
The other is a fair enough one. Software people will learn a lot of software tricks that are only helpful to other software people. And if software people are spread around in these teams the knowledge cannot flow very well. Basically, while mixing domains fixed a whole bunch of knowledge flowing issues... it created a new one for domain specific knowledge...
This is where you make guilds. Make public guilds. There are clear lists of the guilds, explanations of their domains and several example for each guild for what kind of domain they are covering.
In some firms, a software guild is enough. In others, embedded software, high level software, front end and back end are different guilds. It depends a lot on the firm.
The guilds have communication between all members ( chatrooms usually ) and meetings every month. They will try to encourage knowledge sharing by giving tools, like shared drives where good guides, tutorials and tricks are shared. Sometimes written by guild members, sometimes found online (If you just had the though "Wait... is that not what Codeblr does?" you have just realized that Codeblr is a naturally formed guild), having people who have good ideas they want to spread give presentations during the monthly meeting, rewarding the best idea of the month. People can participate as individuals, or small groups (Tricks are often found by 2-3 people working together).
Meetings can be physical, or remote, or switch between them, doing both.
This basically solves the issue of knowledge sharing. It also empowers workers while making the firm better. Everyone wins!
I work for insane people
So… I started work a few months ago and...
I keep being impressed with corporations lowering my expectations.
Like. EVERY time I think "Surely, this is as incompetent as it gets".
The boss is nice, the workers are nice, every PERSON is great so far. But the firm is just… fucked in ways that makes it hard to not scream with laughter.
It is like working in the ministry of silly walks by Monty Python. Insane things are happening, and everyone just acts like it is normal.
A dude was stating to someone else near me, that despite the costumers saying they did not want it, his code that crashed the application once a day, was NECESSARY, because writing code without memory leaks in C is basically impossible. Like… I just have all these small moments of insanity. Completely disconnected from each-other
My boss showing me and the other 3 new hires the coffee room, where a big screen proudly shows that not a single software product have 100% code coverage… as in, not a single person in this entire building filled with software people knows how code coverage works. He then points out an empty bowl, and declares "Twice a week, there is a fruit event". By which he means, fresh fruit is provided, and people can just grab some…. just said by a alien who is pretending to be human. Badly.
He then explained that the 2 coffee machines in here makes bad coffee. He then takes us to the copy room, showing us that THIS is where the GOOD coffee machine is. Which only takes coffee beans from a SPECIFIC vendor (Is… is the coffee machine… sponsored????)
He briefly pets the Foosball table (Again, in the copy room), which is jammed up against the wall so you can only reach the controls on one side ( Because, again, it is a copy room, and there is not enough space for it ) and he exclaims "Ahhhh… Not enough people are using this"
Suggesting, that he is trying to promote the little known sport "Single-player Foosball">
I start setting up my work PC and... Whenever any of the developers in this place wants to install things on their PC's, including compilers and testing frameworks, they have to either use the "SOFTWARE CENTER" program, which installs it FOR you… or in 10% of the cases, fails, without giving you any context for why it did that, and no tools for fixing it. Is it missing a dependency? Not working with the OS? Who knows!
Some programs cannot be installed like this though, because the SOFTWARE CENTER is not updated a lot. And when you want to install something the normal way… You get a popup, where you must provide a written explanation for why you need to have temporary admin rights to your own dang PC … you then submit that, and your screen will then be watched remotely by a worker from India, for a varied amount of time you are not told…
Or at least it says so. Maybe the Indian dude watching me is just an empty threat. Who knows. But they get to see me running absolutely… BONKERS .bat files
Like, I CHECKED them, and a good 80% of them calls a Power-Shell script in the folder above it, called "YES_OR_NO.ps1" which opens a windows 95 window informing you that DURING INSTALLATION YOU MAY NOT USE THE KEYBOARD OR MOUSE, AS IT MAY DISTURB THE SCRIPT THAT WILL INSTALL THE PROGRAM. A normal installation wizard then runs, except the developers are not trusted to click the buttons, and instead the script does it for you by moving and clicking the mouse.
All of this is documented. In markdown like reasonable people? Of course not! It is in ENHANCED markdown. Which is markdown in the same way javascript is java.
ENHANCED markdown requires browser and visual studio code extensions to be read. Completely missing the point of markdown being readable both raw and encoded… And sometimes word documents And sometimes power-point presentations left next to another bat file… this one calling the .exe file… right next to it…. I later found out is because the idea USED to be that all documentation MUST be made with Microsoft office tools.
I had to read the code of conduct today. And it was actually very well written.
I then watched a interactive animation telling me about the code of conduct… which it not only got a fact wrong about, it also broke it once.
I repeat. The introductory course in the code of conduct… broke the code of conduct'
After I watched that, and read the safety material…. which literally just said "Wear safety boots in the production floor"… I was then show the testing room.
I was lead to a different building, saying hello to the Vice CEO who was walking the other way, we walk into the production floor, ignored the fact that none of us have safety boots on, and walks into a room, with a 3*2 meter wide machine, several meters tall.
We edge around it, quietly hoping no one turns it on, since we would get slammed by it if they did, and walk down some stairs into the basement. Casually walk over a small river in the floor from a pipe that is leaking… what I really hope is water, and over to a shelf rack FILLED with the most MacGyver shit you ever did see.
Including, but not limited to, the 3D printed plastic block, with a piston that repeatedly smacking half a aluminum nameplate over the device it is testing. You see, it is a capacitance button, and it is testing it by simulating a human finger pressing it many thousands of times, a saws off antenna which is the end of a cable that is attached to it via a nice thick bolt, so it can send fake signals into it.
And of course the 24 volt, 5 amp system that is turning a circuit board on and off again, until it will crack.
We walk back out, remembering to step over the small river, which never even got a comment, and walk back to my department It is SO great. It is like working in the ministry of silly walks by Monty Python Like… Do I think I can bring value to this company? Like, making it better and more efficient? Yes. It would be hard not to!
And his is the largest pump manufacturer in the world! A super serious company with 4 billion dollars of revenue a year. And it is just… a NUTHOUSE
Like… NEVER believe the myth that corporations are competent.
Next up! Scrum!
So... this may be a controversial post... I swear, no listen, I SWEAR that is not on purpose nor is it a goal. I hate that nonsense, but I wanted to give you a heads up. If people start talks in the replies or the reposts, be kind. Read the entire post, and their answers and consider their context before engaging in a constructive manner, or decide you have nothing to say that will improve things. And remember the hermeneutics of generosity. (Basically, assume the writer means well, and is just not good at getting their point across) https://nerdfighteria.info/v/ovrzKCQ2JTM/
I say this because entire books have been written about how to do scrum... which I personally consider somewhat insane. And it is my opinion that a lot of this is just the business management consulting scammers that again have taken perfectly good systems, concepts and words and abused them to the point of meaninglessness.
Because scrum is SIMPLE. And great BECAUSE it is simple. A bit harder than agile, but then, usually the way to the goal IS harder than defining the goal, so that checks out. So just like my post on agile, let us start with what problem is scrum trying to solve.
Basically, a company wants to be more agile. But just bursting open a door, pointing to some random developers while yelling "BE AGILE" proved a somewhat ineffective strategy (except for Steve, who immediately did a full split). To be agile you want the development team to decide how they want to do development... so what do you do when they don't know themselves? You do scrum!
Scrum (Named after the "All players grab each-others shoulders and listen to a super quick message by the coach" thing in sportsball) is a plan for how to plan development, analyze how you are doing development, and improve it. It centers around a team of developers (Usually between 4-8) and a constant time period called a sprint. This is usually 1-3 weeks. Then you do these steps: 1: Make a plan for the next sprint. Take the tasks that needs doing, break them down into clear tasks, and hand them out to people. Try to get the amount of work given to each developer as close to the amount of time they have to work on it in the sprint. Write these things down, however you want. 2: Do the sprint! Basically, do development. Each day, have a super short meeting where each developer explains what they did yesterday, and what they plan to do today. With focus on decisions they have made. Each person talks for 1-3 min. If you need to talk more, do it with the specific people you need AFTER this meeting. 3: When the sprint is over, evaluate how the sprint went. This is the most important part, and the one that should be spend the most time and effort on. Because this is the real core of SCRUM. Did everyone manage to do their tasks? Did some run out of things to do? Was certain tasks harder than expected? Why? What things we did could be improved? What things we did should be done differently, or not at all?
You write down your hypotheses, and start again at step 1 with making a plan for the next sprint, this time, with changes you want to test.
If you just realized that this is the very well known "fuck around and find out" or "The scientific method" as some nerds call it, then congratulations! You now understand Scrum at a deeper level than 90% of companies!
Now. There are 2 extra roles in the development team to make sure this method... you know, actually works 1: A scrum master. This is essentially just the poor sucker who makes sure that the team actually follows the plan, and remembers the steps that was agreed upon. They note down interesting things said during the daily meetings, the plan during the planning and the ideas and thoughts during the retrospective meeting. They are NOT a leader or manager. They do NOT dictate anything. Usually they are just a developer who have the magical skill "Being able to take notes and participate in the meeting at the same time" (I am a bit in awe of that skill).
2: A product owner. Sadly, developers have to actually make stuff, not just have fun. And the product owner is there to make sure that everything still centers around the correct goal. "To make great software for whoever wanted to software". If the team is developing software for a costumer outside the firm, then this is a representative of that firm. Ideally the specific person who ordered it. If they are making software based on orders by a manager or a marketing leader, then the product owner is that person. Only the person who wants the software knows what the software should be like. And humans are terrible at communicating so you do not want a game of telephone going on or the futile game of "Just have the costumer write down what they want the software to do, and then we make it". Because the product owner is often busy and so it is ok for them to only show up at the planning and retrospective meetings and it is ok for them to video call in, but their participation is MANDATORY. They MUST be an active part of the meetings or none of this will work.
We want the team to make changes to how they develop, and what they develop on the fly (The developers decide how, they product owners what). And if you do that without a constant line to the product owner, the project will go off the rail very quickly and fail with almost 100% certainty. It is also a great help because not only will the developers be able to get questions answered quickly, the product owner will also get a good insight into how the thing they want are actually being made and make better decisions. Wrong assumptions will be caught early, and misunderstandings minimized. Maybe a thing they want is really hard to do. If they want it enough, then maybe the hard work is worth it. Maybe not. You find out by TALKING.
That is it. That is Scrum. Now, you may already have spottet why so many people get confused on what scrum is, or how specific or expansive it is. Because what scrum is, is a super simple setup, designed to mutate, and test if those mutations are good. Meaning after a while, a team may only have the short meetings every other day. Or have tasks given to sub-teams of 2-3 developers. Or drop the daily meeting and have Sprints that last half a week. Or have moved some of their developers to teams that fits them better, and gotten developers that like the way THIS team works. Or maybe they have a extra meeting in every sprint with a select group of people outside the team that are experienced in working with what the team is currently working on. Or maybe a team does not want to do any part of basic scrum.
And none of these are right or wrong . The ONLY thing that matters is "Does it work for THIS team?".
You may think "But you just described a structure with rules that seem rather strict...". Correct! That is the STARTING point. Meaning very few teams will be running exactly like that, because most teams (hopefully) did not just recently start existing.
But sometimes you also want a reset. A team may not be working well anymore. Maybe some key team members have left the company or gotten other jobs. And it is decided that it is easier to go back to basic scrum and start inventing a new way to do things for the current team. Maybe the team think they might be a bit too used to a current way of doing things to come up with a new one. Maybe the team is dissolved, and its members put into other teams, and a new team is created in its stead to start from basic scrum with individuals from other teams that wants to try new ways of doing things. It is perfect scrum to have a team of veteran developers who have not changed how they develop things in several years because they by now know what they want.
You can easily see why this works, and why it is good. Because if a part is not efficient or the team hates it? Then get rid of it. And it is easy to see why Scrum helps a company become agile. It is a tool that facilitates the worker empowerment and grassroots decisions that agile set as a goal.
You can also see why many companies HATES this. It makes a lot of middle managers unnecessary. It empowers workers to want things, and trains them on how to get them. It stops managers from coming up with "brilliant" new ways to develop software and then force that method onto the developers. Managers who come up with ideas for products will have to explain themselves to the developers, and risk looking silly. In front of the pleb workers!!!. Dear god, costumers will get to see the greasy reality of how the software they want is made! And management have to knowledge that developers are the best at... developing.... And will have to... trust their workers...
A thing you will often hear in defense of not letting teams decide on how to develop, is that if everyone develops in different ways, then nothing will be standardized. Each team may use different tools, languages and architectures! It will be a massive mess!
Which is true... if you completely miss the point. Again, the developers should be free to choose HOW to develop. Not WHAT to develop. The product owner is the major force in deciding what features and products is developed, and standards like code format or use of profiling tools can still be required by management (Which is entirely reasonable).
But the teams get to choose HOW they develop those. A simple example, many people like placing brackets like this: void MyFunction(){ // some code }
But my team prefer doing void MyFunction() { // some code } The idea in scrum, is NOT to allow a team to go "We write however we want!". The idea is "WE decide how we get to the required form". I have worked in a team that simply had a auto-formater build into each of the team members command line tools, so when they pushed to the remote git repo, the code format followed the standard, and when THEY looked at it, it looked how the team preferred it to look. I have seen teams that wanted to work in a different language, so they used a Source-to-source compiler in much the same way.
That is scrum. It is a simple, yet powerful idea.
So... I finished my first task at my new job today! First one after I finished Uni!
Which was to write the software for a sensor that is going into at least 150,000 pumps over the next year... Alone...
It is being tested by... me
And i have recieved a full 1 hour intro to all the material, including the protocols, codebase, arcitecture and the task itself...
Which is good because there is no documentation for these things ... nor is the compiler supported... and since the MCU reaches end of life in 2 years and was never popular, there is 0 examples to work with online.
I can highly recommend working for insane people, it gives you a LOT of interesting work
Fun fact, those two methods are NOT just different syntax for the same thing.
"If" Checks a condition. It compares it with something else. If you have a chain of many if/if else/if else /if else statments, the last one will only check its condition AFTER all the others have done so and failed. The if statements further down will be run with a delay compared to the ones further up. Only small, but real.
A switchcase runs every option with the same delay. No matter how many there are.
Because it uses its input, together with a constant, to get the correct memory place where the instructions are stored for the case, and jumps there.
It works by the compiler placing all the options in predictable memory so this method work.
So the swirch case does not compare its input to anything, it turns it into an address and goes there.
So the delay on every case is the same.
This can be important, if you are using the current time to measure time down to the micro or nanosecond, which is quite normal to want when you work with embedded systems :D
But rarely when working with higher level languages!
Its neat!

You know you wanna use it… So why don’t you?
I love being at work and in a good mood.
Whistling happily as I look up the contact information of work safety authorities so i can hand in my firms insane and careless breaches of basic safety.
The process for setting up hardware that can kill you is: "Whoever can do it. No knowledge or training required. The checklist for what to do is inside the heads of some people in the firm... Probably...maybe, and if those people randomly are near they will tell you what they think they remember they know"
I had a hardware setup that KILLS YOU if you touch the wrong parts. And it had been running FOR A MONTH before someone said "I... seem to remember us being told that the rules say you have to print and fill out a risk assessment and hang it on the safety rail?"
Goodie!
If the coding convention is not enforced with auto-formaters, it does not exist. If someone wants all the code to be written in exactly the same way every time... then get a machine to do that. Doing the same thing every time is what computers are good at. Set up a autoformater. If that is too much work. Then they have just said it is not very important, which means it is not very important. What IS very important is to make your code readable. Developers spend ~80% of their time READING code. So make THAT part easier. The code should fulfill its functional and performance requirements, after that, it should be made as easy to read as possible. It should take the reader from high abstraction overall idea and/or program flow, to more and more specific, so you can quickly get a overall idea and then deep dive only in the thing you are looking for right now. It should only use acronyms that it have defined in comments at the top of the file (If that is too much work... then do not use acronyms) If the code can only be understood with knowledge from outside the codebase, then that must be documented in a MD file. Nothing fancy, just write the thing down. If you cannot explain it in text, then make a diagram (I recomend draw.io). Easy, quick, no the specific style does not matter, just make it easy to read.
there's just a lot of "if everyone adopts my particularly tortured way of coding, everything will be great" going on, when 90% of the time this is extremely stilted and adds instead of reduces complexity. and you just don't have to do that. you can code normal style and nothing bad will happen
Honestly, how I learned was via make.
Like... you can easily find compleatly incomprehensible make files that automate everything.
Those you can use, but they are not how you learn.
How you learn iz by doing it very very copy-paste of the lines toh would write to the compiler in a shell. Most basic one with a single .c file would be:
gcc main.c
Then figure out what arguments to add to it to make it how you want. Name the output file. Have the source file in a different folder. Have the ouput be in a different folder.
You now know how to compile a single file by using a shell
Now. Create a make file. Simply have it call exactly the same thing you wrote in the shell before.
Then figure out how to compile a main file and a file with functions and a header. Again, first just by using a shell. And then build it into your build file.
This is not too hard. There are plenty of guides and examples. It is fun exploration where you get your hand dirty and you will learn a LOT about how coding projects and IDEs work.
A programming IDE is just a text editor and make file builder with a pretty GUI on top
It is not magic. And it is not even that complicated.
Sure. Automating it and making it solid and taking all the things that may change into account so it can be generic is hard
But creating a make file that will compile YOUR project? Not hat bad.
never learning how to properly handle multi file c projects is finally catching up to me and stabbing me to death with linker errors.
The... Crowdstrike issue is not being resolved... at all...
The issue was not a bad update.
The issue was no testing. Pushing late friday. Pushing to all users at the same time.
And that is the easy-to-get-right stuff that we can see. Most likely the firm is a complete fucking from top to bottom. Because it basically have to be to let something like that happen.
And that is not getting fixed. Not for Crowdstrike or the tech industry in general.
Hell, the CEO of Crowdstrike have had THIS EXACT SAME PROBLEM with lack of testing and structure in previous firms he have been CEO of.
But since his strategy of removing all safety and structure makes money in the short term, IE is good for stock owners, IE the already filthy rich, he gets to keep being CEO of important firms.
NONE of that is getting fixed. We got solid proof that the biggest danger to modern infrastructure is not hackers or the people all the invasion-of-privacy tech and laws target.
It is the massive for profit organizations with root access to everyones machines. Meaning the laws and tech that are being rolled out RIGHT NOW to spy on everyone and gain access to everyones machines is not only sacrificing privacy. It also makes you LESS safe.
But that lesson is not allowed to be learned. So we have done nothing about this, and we will do nothing about this.
the crowdstrike catastrophe is getting resolved but the intel 13th and 14th gen CPU nightmare is just beginning. damn
This is... SUCH an accurate way to describe what working with programming is like
And fun fact!
We work very hard to make the computer MORE whiney.
We want it to check EXACTLY what is going on and start crying about very specific things so those errors does not end up in the release!
computer: I can't icanticanticant do it...I need CoolLibrary where's CoolLibrary I can't find it ;m;
me: uh, lemme check..
*rummages through the filesystem*
me: ...aha !! see, we got CoolLibrary right here !
computer: b-but..but it's...it's the nnneeewww CoolLibrary >:c I want the oooolllddddd one !!!!
*me, writing 'old' on a label and sticking it to CoolLibrary*
me: here you go, honey, how's this ?
computer: yippee !!! yaaayyy !!!! ^w^
Happens a lot on all of tech as more companies is doing the Enshittification thing.
I was told by a senior engineer that what I was promising my boss I could build was not possible.
I countered by oppening the datasheet for the microcontroller in question and pointing to the page that said I was correct.
Turns out he have never read the documentation for the microcontroller he have been working on for the last 10 years.
I had read the entire thing before having been there a month
All his knowledge is based on rumors and hearsay
I think the real reason most websites are janky as hell to use these days is because web developers have become so specialised that nobody really understands how anything works anymore. The other day I had to explain why hosting critical Javascript libraries on a third-party CDN is a bad idea to a "lead developer" who genuinely didn't know the difference between server-side versus client-side scripting.
And guess how Large language models do math?
Either they do it terrible, or human programmers try to make it recognize when it is being asked a math problem ( which is NOT a 100% thing it can spot ) and then... they have hardcoded it to use a calculator.
It is JUST a basic calculator with a horrible interface that burns energy, steal peoples content and helps evil companies.
Oh. And according to the leading experts in the field is on the same thread level to humanity as nuclear weapons and global pandemics.
Just...don't...
Didn't reblog that one "wait you guys actually use chatgpt" post but the one reply where someone said they use it to do math is insane to me, we already have an AI that does math for you it's called a calculator and it's been around for decades
Honestly... my advice when people ask how to learn git is:
1 Open a console.
2 Write "git"
3 press enter.
Now read and follow instructions.
Git is OLDSCHOOL.
Meaning it is a self documenting program
Like... I tell people that if they want the "It just works" experience, they should install Linux mint and move on with their life.
Now you no longer need to check the news if windows have snuck another thing that spies on you into your PC and you now need to manually turn it off. ( If Linux distro did that it would not have any users 12 months later... so they don't) .
There is no longer ads you risk clicking on by default embedded into your OS and programs. You cannot click on anything bad that can fuck up your machine ( User space protects ) because... it is YOUR computer. It is insane that this level of "don't have to worry. You are safe" is a feature on Linux... that should be a basic thing for every OS...
There is no obfuscation. Anything you want to see, change or control, you can. Everything is made to show you, the user, as clearly as possible what is going on. And if you don't like something, you can change it. 100% of the time. You do not have to hope that a UX designer remembered to give you settings and Daddy Microsoft allows you to do it.
When something is hard to see,understand or change in Linux, it is because it is a complex difficult thing. It is NEVER because a dude gets a salary for optimizing obfuscating how things work.
And it is not MAGIC. People who design and manage linux distroes are not a special race of humans with better ehtics and design skills than the lesser folk of windows and mac
You know what it is? Healthy competition. That thing so many people are in favor for in theory but not in practice.
It is because open source means the distros that get popular is THE ONES THAT THE USERS LIKE THE MOST.
And not just the Linux distro. Every tool. Every functionality. Every program and library. If the users want to use a competitor, they just can.
Like... my sibling in christ... stop begging Microsoft to fix visual studio so everything does not break if a file or folder have a space in it.
It have been 28 years. It is never happening.
Get ovet to Linux. Stop begging for features in Windows. In linux you DEMAND them. In linux you get them.
Because in Linux we BUILD them.
"I like windows. It just works."
No Jim.
No the fuck it doesn't.
If pride in all of the people learning to program and design software in a friendly, forgiving encouraging enviroment is ever eclipsed by wrath for systems that harm people then I would need to put work into changing that.
Doing the right thing is much more important than stopping someone else from doing the wrong thing.
Both are needed, but not in the same amount
This request was sent to us and we made a poll in response to it. Send any Blorbo-related question you want to our inbox and we’ll make a poll on which people can vote with their own Blorbos in minds