Posted by Milan Toth

The Non-Sysadmin Manifesto

I’m a computer user. 90 percent of the developed countries is a computer user in some way.

Every second spent fighting the computer instead of just using it is a waste of time.

I’m a software engineer. Every second spent fighting the computer instead of just coding is a waste of time.

Software industry is pretty much a mess no matter what architecture and operating system you use because you have to waste a lot of time and energy.

But we can make it better!

We need absolute standalone applications independent from the OS version and the shared library versions the OS have

Problems : App doesn’t start, quits or hangs immediately or during runtime, installation fails because of missing software or dependency hell

Apps should contain EVERY dependency that is needed to run the app on the specific architecture. App size is not a problem anymore in, we have terabyte SSD’s and gigabyte/s networks now.

Apps should run out of the box on the target architecture regardless the OS version. Of course it can be tricky with hardware drivers that are manufacturer-dependent but OS’s should use industry-standard API’s to let programs communicate with hardware and should hide drivers to make this possible.

Of course this can raise security concerns — what if somebody replaces libs and hacks your memory management? Well, it is possible on current OS’s already. You should know where your app is coming from.

What OS’s can do to make using a computer safer is provide total transparency! It should log and show you in a human readable way where the app is connecting to ( TCP/IP requests ), it’s actual connection, what hardware it is using, it should ask for permissions to use specific hardware if the user asks it to, it should ask for permissions to connect to remote hosts if the user asks it to. Apps should report their actual progress to the OS and to the user if they are doing something CPU consuming.

With these rules computers can be perfect, safe and stable production instruments.

We need absolute standalone development projects

Modern software projects are a hell to set up. Dependencies, dependencies of dependencies, parameters, settings scattered between a thousand config files, makefiles, old project files using old IDE versions, old scripts using old script language versions and old dependencies…

Why programming have to be like this? Why don’t we make self-contained development projects containing everything? The closest thing to this maintaining a virtual machine image with everything installed, the proper OS version, IDE version, all downloaded libraries but it’s a drag.

We should make dev projects download/install/move in one package with everything that is needed for immediate development/deployment.

In addition, if Apps become first class citizens on the OS, Code should be the first class citizen in development projects, we should do more setup/environment checking/etc in the code itself and make less setup scripts/config files.

I’m dreaming of a world where everything is out-of-the-box, straightforward and just working. Let’s do this!

Comment on The Non-Sysadmin Manifesto

MilGraPi

Preparing a Raspberry Pi for OpenCV development is really time consuming, OpenCV takes hours to compile and a lot of other things have to be set up, so I just share my SD Card image here to speed up Raspberry OpenCV development for others. I shrank the root partition to 7GB to make it suitable for smaller SD cards. It has 300MB free space only so you better expand it to fit on the target SD card. You can do this right on your raspberry with an additional USB-SD card stick and gparted. User/pass is pi/raspberry. After startup it autologins directly to OpenBox. Right click -> Terminal emulator to open a terminal. To test and run the OpenCV examples type "workon cv" to activate the python virtual environment, go into "/home/pi/Desktop/OpenCV-Face-Recognition-master/FacialRecognition" and type "python 03_face_recognition.py" . If you have a raspberry camera installed and enabled with raspi-config, a camera window should pop up and face detection should start. For a usb camera you have to modify the scripts a little.

If you find this image useful please donate at the top of the page.

What does it contain

Base System

  • Raspbian Lite

GUI

  • openbox for window manager
  • tint2 for taskbar
  • slim for autologin
  • pcmanfm for file manager
  • chromium for stack overflow

Dev Tools

  • lxterminal for terminal
  • vim/nano for python
  • codeblocks for c/c++ development
  • python for opencv development
  • opencv 4.0 for computer vision
  • picamera python module for the raspberry camera
  • opencv face recognition examples

Games

  • Scratch, Termite, Cortex, Brawl for short rests ( enable full KMS OpenGL support in raspi-config to play them )

Download

Comment on MilGraPi

Cortex And Brawl Is Open Source

And finally, my second and third game, Cortex and Brawl, is also open-source!!! Check them out.

https://github.com/milgra/cortex

https://github.com/milgra/brawl

Comment on Cortex And Brawl Is Open Source

KineticUI Is Open Source

I really like UI renderers. I really like beautiful UI's. I'm really not satisfied with the state of UI currently. With todays technology, super sophisticated animations, font animation can be done and should be used. This is my take on a modern, smooth UI renderer.

Check it out on github

Demo :

Comment on KineticUI Is Open Source

WebConfThreeD Is Open Source

For a company hackathon I came up with the idea of a 3D web conference tool. I wanted it to look like a control room where you can see everything at once and can zoom to individual elements. Here it is :

Check it out on github

Demo :

Comment on WebConfThreeD Is Open Source

PreziThreeD Is Open Source

I was always curious why prezi didn't create a 3D version out of their app. It turned out that they experimented with it and dropped it in the end. So I created my own version and I really like how it looks like, how "rooms" can improve the mood of the presentation. But it complicates presentation creation big time for sure.

Check it out on github

I've created a demo presentation about my life! :)

Comment on PreziThreeD Is Open Source

Remotion Is Open Source

One of my earlier projects with a moderate success was to make a wiimote out of an iphone wiht the help of the accelerometers. I created an iphone app and a small macos host application, they find each other via bonjour, and the host injects the motion information as mouse coordinates. It's six years old, might not compile on newer macos'es.

Check it out on github

Comment on Remotion Is Open Source

Issue Report

I received this on github today, I love it! :)

Issue

Comment on Issue Report

Termite Is Open Source

The time has come, finally I was able to release the full multiplatform, multi-store-integrated code of Termite on github to help everyone who is in the same boat. I'm working on the multiplatformization of Termite for months now and I was struggling a lot of times. Then plan was to finish it up quickly but life ( and the systems created by programmers ) had other plans! I stucked a lot of times at issues that seemed so tiny at first glance and I had to spend hours figuring it out.

The code, compilation&deployment guide and tips&tricks can be found here :

https://github.com/milgra/termite

I did all development on an early 2016 12'' MacBook with a fanless intel core m7, 8GB RAM and 512GB SDD and it kicked ass! It runs Windows and Linux smoothly in VMWare, the game ran with 60 fps inside the virtual machine. XCode/CodeBlocks building is also superfast.

What kills it is Android Studio. I don't think CPU development will ever reach a state where Java desktop applications run smoothly. And it is not only slow because of Java, slowness is amplified by the gradle-scripts that run between the IDE and the project so there is a very loose connection between the IDE and the code. Actually my general feeling of Android development is that there is a very loose connection between everything and you don't know what is really happening and why is it happening. Learning curve is super steep. I can imagine developers who gave 5-6 years of their lives to android development and have a mostly clear picture on whats and whys but I'm not planning to be one :) Anyway, great respect to android developers, it seems to be the biggest suck factor in the industry nowadays.

To be a decent desktop operating system Linux needs a default GUI and a simple way to install binary/closed source applications. GNOME is okay but all developers should stand behind it and push it together towards perfection, and a bundle-based application structure would be awesome ( like on MacOS ) without dependence magic. For open-source programs apt-get install is fun until you have to add new sources to the sources list or older versions with removed dependencies, etc. Compiling from source is also fun, for sysadmins and time-millionares :)

iOS and it's API's became way too complicated. Doing autolayout in Interface Builder is a lifelong journey, doing things that were super simple back in 2010 are now super-complicated ( hiding the status bar, rotation, etc ), entitlements files are everywhere for increased security. The biggest pain was an fopen issue, it worked a few years earlier but now it only creates the file and then it cannot be read/written. It turned out that fopen on iOS creates files with 0000 permissions instead of 0666 which caused a 2-hour head scratching. Using open with explicit permissions solves the problem but why did fopen became obsolete?

Raspberry is a super cool little machine. It was super easy to port the game to it, runs well, I love it.

Steamworks is a mess. The API is a mess and the site is a mess. I spent days clicking through the site and I still have no idea how to go to the steamworks admin/store admin/the main page of the application with three clicks, I think it's impossible. Settings are scattered everywhere and the whole thing is backed by Perforce!!! You have to publish your changes every time to Perforce, it's insane. It's like a high school project. The documentation is not really talkative, I used the Steamworks sample project, the documentation and google together to fix issues but I wasn't prepared for random persistence errors which can be solved by disabling and re-enabling Inventory Service for example. But they are the biggest, have infinite money, they can do this :)

The best OS for multiplatform development is definitely MacOS. It puts everything under your ass out of the box and then gets out of your way. It has everything that linux has and everything that windows has and much much more.

Comment on Termite Is Open Source

AirPods Sound Quality Fixer

Icon

...And Battery Life Enhancer

Fixes sound quality drops when using AirPods with Macs. It forces the default audio input to be the built-in microphone instead of AirPods' microphone so MacOS doesn't have to mix down the output. It also increases battery life because AirPods doesn't have to broadcast sound back. If you have more input devices you can select which device you want to force over the AirPods microphone.

The app runs in the menu bar.

I want it now!

Downloads

GitHub link

Other milgra utilities you might be interested in

Mac Media Key Forwarder ( for Mac )

Mac Audio Keepalive ( for Mac )

Fat Fingers Keyboard ( for iPhone )

Comment on AirPods Sound Quality Fixer