i see two root causes
- no testing of the applications : blame on the city authorities
- apps not running on other browser : blame on browser makers. Yes, you read that right. Browser makers.
774 posts • joined 13 Aug 2006
Then we'll talk.
Linux on the desktop works if all you do is browse the web, write letter , dabble in spreadsheets, and email and some video conf. Code writing and developing for linux will work fine as well.
Step outside that and its crickets. Heavy cad (mechanical , board design , electronics) , development tools for fpga and processors, debuggers, emulators, tracers, test equipment . It's windows and windows only. You may find some niche stuff but you are shortchanging yourself if you go that route, those tools are not up to par with the real thing. The industrial stuff is all windows based. and that stuff does not work well under wine or even in a virtual machine. CAD heavily relies on workstation grade graphics cards like Quadro's. You don't want layers of foreign software in between. Quadro's are bought because of their specific drivers for the high-end applications.
That is what manufacturers are gunning for : milking the cow. Soon there will be a day where even furniture will be on subscription. Wanna sit on the chair to eat breakfast ? Pay to retract the huge screw sticking out of the middle of the seat. Pay per minute. Don't pay in time and the chair will literally screw you.
At least his OS does ... time to dust of my PL/M manual ...
A language where you can write things like
if if = then then then = else else else = if
There are three variables : if, then and else. The parser understands what is an operand and what is a variable. It also understands when = means "assign" and when it means "compare" . Take that, c and all those other language that still cannot make that distinction.
CLOWN computing !
i learned this long ago. i had a roku 1001 audio player. they pulled the plug on it and decided to go the video way.
from then on : no more devices that need the internet.
Surveillance ? get a NVR on-premises. yes you can contact it from the outside world , but there is no command and control server. the machine has its own harddisk and does not need internet to record. Amcrest
without that 8048 you wouldn't be able to type anything on that keyboard of yours.
the original ibm pc had one in the keyboard and on on the motherboard (8042, same core). the 8042 also controlled A20
its derivate, the 8051, still counts as the most produced core in the world.
so don't diss the 8048.
email should be text only..
We need a universal dataformat that is non-executable . Allow only letters, number and punctuation. Subset of ASCII. ASCII is 8 bit , by suppressing more than half of it you cannot emulate opcodes even if you were able to break the system and manage to convert the data to executable.
The receiving routines would have a bitmask: anything not in the allowable set is simply removed from the input stream before it goes to the applications.
Then bolt an HTML or XML like structure on top of that to do formatting. Everything in plaintext.
Executable files can only be transmitted using a dedicated service (similar to an app store) and installed by an installer program.
Operating system is not able to accept any executable code unless it comes through that channel. That way you can plaster the users screen with as many warnings as needed to get it into their thick heads that they are going to install executable code.
That's essentially what a plumber does. You scored a free toilet, and want it installed in your home ,built by someone else. So the plumber comes and does that for a fee. if the toilet develops a problem the same plumber will come and fix it , for a fee. Why ? because you can't deal with your own sh..
Why can't we have a simple setup file like on windows or mac ? Applications should be distributed with everything they need and not have to pull in a metric crapload of other stuff. they should also install in their own container and not throw their stuff everywhere or modify the system.
To run x you need to first install y, z, q , p , r (but only 2.9 unless your kernel is 3.21.4.q.left and the wind comes from the east on a tuesday , but not in april or if the year is divisible by 5 , unless your neighbor just made a fresh cup of tea.. then it is ok to click cancel to proceed -facepalm-
.
There are so many flavors out there. this only runs on that, this thing only uses that package manager ... it's infuriating. Self deploying is what we need. without dependencies or prerequisites. the install package contains everything.
1) Avoid all the niche efforts.
2) Firstly, they're small.
3) Not many people use them
4) You'll have difficulty finding people to ask for help
5) third-party hardware and software probably won't work out of the box
6) and if you ask the vendor for help
7) game or a graphics card or a printer
8) Stick to the mainstream."
Windows and MacOS it is then.
1) not niche
2) not small (trillion dollar companies)
3) many people use it
4) easy to find someone who knows
5) third party hard and software do work out of the box.
6) There is an actual vendor as opposed to pet projects made in somebodies spare time
7) ooh . que the binary blob crusaders.
8) windows and MacOS it is then.
Then gain, already knew that. Linux on the desktop . Lol.
blind people don't even need monitors , why do they need a full blown graphical user interface ? think about it !
This is like making shoes with an attached staircase bolted on top of a car ... so you drive upstairs
Isn't that the real problem ? Should we maybe rethink how to build a user interface for disabled people ?
Alexa is far more useful for blind people (as a user interface) you can talk to it and it responds. no keyboard, mouse, monitor needed.
Drivers run on the OS side. Firmware runs on the hardware. The os interacts with the driver, the driver talks to the firmware on the device. Even if you had the source to the firmware there is didly squat you can do with it as you have no idea how the hardware works and you don't have the toolchain or compilers to build it anyway.
but but but ... there are all these user forums no? Where everything ends up in endless discussions of Vi vs emacs, KDE vs gnome and what color scheme is best...
Oh you are using flavor x of linux , should be using flavor y...
It's 2022 , can we move past it?
The operating system is just a layer to run programs.
Sometimes the application you want to use is Mac only. Sometimes it is windows only. If it's open source good chances are it runs on all.
The above distills as follows
- if you have a Mac you can run native mac and open source programs.
- if you have a windows box you can run native windows and open source programs.
- if you have linux ... you can maybe run open source provided you can find the right package installer and the right flavor of linux. (yeah yeah i hear you , you can compile it from source. but 99.9% of computer users don't know how to do that)
So why do you need linux on the desktop ? (as a average user)
looking at the stuff i use on a daily basis linux has nothing to offer.
Some are windows only. Solidworks , Altium ,Office. Adobe Photoshop and Lightroom , Illustrator others are ported to windows or exist on both platforms ( Altera/Intel FPGA software, several cross compilers, notepad++, inkscape ,daVinci video editor,) I use plenty of stuff that comes from the linux world, but as a windows port.
I find these endless discussions about what flavor-du-jour OS is best a waste of time. The best OS is the one that runs the programs you need. For some that is Linux, for others that is MacOs and for yet others that is Windows. To each his/her own.
It would be nice the have programs that do not depend on an operating system. Run anywhere. Then you would have a real fight at hand. The best OS would simply be the fastest, most stable and secure. OS makers would compete purely on the performance of the OS, not on the basis of available applications.
Now there's an idea. if we fit every cow in the world with a network transmitter. And we make inter-cow data exchange using line of sight lasers. No need to shoot stuff into space. Easy to maintain : grab the cow , replace transmitter. Use the horns as antenna masts.
The Cow Network.
provided you have enough closing parentheses for opening ones , got all your semicolons in line and told the compiler every time when you means assign and when you mean compare. ( = versus == )
I still cannot understand how so many languages cannot figure this simple thing out. This was solved in many older languages than C. Even every , often scoffed on, Basic compiler/interpreter can do it.
So we'll build it for an imaginary computer with an imaginary instruction set and then shoehorn that imaginary binary onto real hardware ? -FAIL-
THAT is the problem with all those catch-all compilers (and languages) we have today.
They compile for something with an architecture that does not exist and an instruction set that does not exist.
I've picked apart output of several compiler for embedded systems. Sending "Hello world" to a serial port. strings are null terminated like c.
in pseudo code :
string = {"hello world",0x00} // 12 bytes of rom space , null terminated string (11 chars + null)
MOV DPTR #string. // load the address of the string into the data pointer
:next_char
SNZ @DPTR // skip next instruction if not zero
JMP exit
:wait_for_port
SBC SCON,02 // Skip next instruction if bit clear register Serial CONtrol , bit 2
JMP wait_for_port
MOVI TX @DPTR // send character to TX register Move with post-increment DPTR
JMP next_char // see if there is something else
:exit
I've seen compilers that produce this : ( because they did not know the MOVI instruction)
MOV TX @DPTR // send character to TX register Move with post-increment DPTR
INCR DPTR
or this (because they did not understand DPTR is a hardware register and treat it as a variable)
MOV TX @DPTR // send character to TX register Move with post-increment DPTR
MOV A, DPTR // move DPTR to accumulator
INCR A // increment accumulator
MOV DPTR,A // move accumulator back
On a harvard machine you have dedicate mov operation that change depending if you are moving
ram to ram
ram to register
register to ram
io to ram
ram to io
rom to ram
rom to io
I've seen compilers that take that string in rom , allocate 12 bytes of ram , copy the string from rom to ram and send it out. Slightly smarter ones do it character by character but still need a rom to ram copy first.
Those are clear examples of the misery with generating intermediate machine code. They have one print function that is designed to take a ram pointer. Try to get a string from rom and it needs copying over first.
Optimization is not something to be done afterwards. Optimization needs to be done first. see what instructions are in the machine and map the source in the most efficient way.
Jump tables are a prime example of that. Switch case statements can easily be translated into jump tables. Depending on the selected branch all you do is add an offset to the code pointer so it lands in the jump table . There it finds a single move operation with the new target.
Your switch case statement translates to a constant speed operation (one ADD , one JMP), no need for testing anything.
Now, i do realize this is different on machines with different architecture or dynamically loaded programs. The above is just an example of how bad compilers can be when doing the compile to imaginary machine"
It pays to take a look at compilers that make code for one and one system only. They can heavily optimize for the architecture. Portability is in the source code, No need for an intermediate layer.
What's wrong with Goto ? your nicely crafted C code gets translated into assembler.... which is full of 'goto'. JMP operations in all their flavors and variants are nothing but a goto.
your nice do loops and while loops and switch cases all get converted to JMP operations.
Any complex case statement gets converted to a jump table.
There are even specific instruction like SZ : Skip next opcode if A register is zero .
SZ
JMP true_label
JMP false_label
if the register is zero the next instruction (jmp true_label) is skipped so the JMP false_label is executed
if non-zero the next instruction is executed. so it jumps to the true_label.
There is your if-then-else.... nothing but a conditional goto
All your subroutines and calls and any other stuff is translated into nothing but Goto, simply because that is how processors work !
C fits like pliers on a pig for most processors. The concept of heap and stack and streams works on a pdp-11. Not so much on any other architecture. Tape and punch card streams have gone the way of the dodo. Its all block access these days.
Biting the hand that feeds IT © 1998–2022