Some thoughts on ethical AI

With the current advancements in machine learning, humanity has taken significant strides. In recent years, we have solved problems that have persisted for more than half a century. The progress made in the technical aspects of AI is amazing. However, we are currently trying to shift our attention to the ethical questions, which are not only difficult to answer but also challenging to articulate.

Take, for example, the current issues with Gemini. Mistakes happen; such is the nature of experimentation, trying new paths, and simply pushing the limits. What bothers me is the mindset—the alluring notion that we can solve human problems like discrimination with half the budget in a single fiscal quarter. There are no algorithmic shortcuts for fixing centuries of injustice. This time, the road will be long but rewarding, focusing on understanding and authentic empathy. Choosing the most important battles is essential. Let us think deeply about the data and how to gradually enhance it. Also about what matters and will lead to a real improvement in the lives of all people affected by discrimination. We shouldn’t rush or prioritize short-term gains to appease investors.

Furthermore, ethical AI is complex and has a huge non-technical component. With all due respect to the excellent developers at Google, ethical considerations aren’t solely within their expertise. Devs alone cannot solve these issues in a quarter. There are no keyboard shortcuts or known algorithms. Consider the baseline: even human-level performance is honestly bad; how can we hope AI will do better? It’s a difficult path that must be navigated together, by both AI and humans. No planes fly to that destination.

Nothing vs. Unit

Kotlin has both. But why?

NothingUnit
as return typethe function either throws exception
or runs infinite loop
there is nothing of interest
to return
meaningthis function never returnsthe function performs side effect
valuesthe Nothing type has NO valuesthe Unit type has single value
(singleton) -> the Unit Object
comparison between Nothing and unit Types in Kotlin

equiflow app for android

equiflow app for android is here. And I am happy to share it with you. It might not be what you are looking for, because let’s face it, we all have our own way of managing daily tasks and navigating through the chaos called life. But it’s free (and will ever be free). And it is a celebration for privacy lovers (your data stays on your phone).

So, what is equiflow? I can explain it in a sentence: a todo checklist to balance your day. Nothing less, nothing more. Simple as it should be.

Curious to try if it fits your needs?

You can organise your daily tasks, events and habits in five categories: Chores, Future, Learning, Health and Fun. Let’s call it a success, when at least one task from each category is marked as completed.

Enough endless todo list with chores and tasks that simply does not matter. Our to-do lists should also care about what we love to do. Agree? (or do you believe reincarnation exists and in your next live you will be rewarded for mopping all the dirty work in this one? )

Equiflow is short for “equilibrium flow” – it strives to bring balance to the Force, not leave it in darkness. 😀

Did I mentioned, equiflow supports dark mode?

“May the Force be with you!”

“Good or bad, hard to say”

One very unproductive, even harmful behavior in the software development is the tendency to “protect” our code from critics. 

Sure, we give it a lot of thoughts and sure it’s a snapshot of our way of thinking at the current moment, but… let’s face the facts, shall we? Given there is no way to know what the future brings and how the code would have to change to accommodate new requirements, our code is probably not the best it can be. I still have nightmares involving snippets of code i wrote a while ago.

So, what can we do? 

First, let’s throw it to the critics and try to learn from them. If the code is really that good, then it should be easy to understand, do the job, consider all the edge cases, be prepared for changing requirements, be time and memory efficient, integrate seamlessly in the application and be consistent with the code base. Does it do really all of that? Unlikely.. So now we start with the mindset “there is space for improvement” and are open-minded to critic. Listening and learning. Some of the obvious benefits: we see problems before the customer runs into them. Also we build better interactions with the peer software devs, being able to break out of the “defender’s mode” and openly accept help or challenge.

Second, we can use our code as the best measure of technical growth. Looking at code from the last year and thinking it is good means we’ve lost an year learning nothing (as if we didn’t have enough bad news).  The best proof that we are on the right track, getting better each day is being ashamed of the work from yesterday. That’s the delta. Knowing it, enables the calculation of speed and direction. It is pointless to compare ourself with other people, since everyone has different start, different prerequisites, different story. But comparing today’s and yesterday’s me, is easy and meaningful.

history repeats itself

Here I am, on the wings of slowly calming down annoyance.

Stop reading for a moment and think about the most annoying thing you encountered in linux. For me, it is definitely the never-ending dependancy waterfall. Satisfying the requirements of application’s requirements. It reminds me of the unique feeling of dealing with “dirty laundry” – in the very same moment you finish the laundry, the dirty clothes basket is half-full again. The story might resemble the myth of Sisyphus and yes, it does feel like it.

However, the topic of this post have nothing to do with Greek mythology, or even with dirty laundry. It is all about javascript and the carnival of happy frameworks jumping euphorically around it.. And about ruby.. And about java.. And about php or whatever precedes java in the web development..

First of all, I’m in love with angularjs. Said so, please don’t nail me to the cross for writing the following lines.

As all good stories, this one begins with nodejs. But nodejs is not so interesting on its own. So you, young traveller, will need a backpack of toys, just to create a simple angularjs project. Because as we all know, unit tests are even more important than the 10 hours you’ll spend collecting all the dependancies for the testing framework. And even more important than the century you’ll spent writing and maintaining them. Of course, they will protect your clean code from one or two typos in the absence of a compiler. And, of course you’ll be up-to-date with the latest fashion in software development. Therefore, it must be worth it.

As everyone knows, one programming language alone is not enough to build a page showing “hello world”. Two hours later and you have successfully downloaded all dependancies to start and half of the internet on your machine. But is it enough? Silly question, since there is still another half internet to board in the deepest folders of your personal space. Places, you even don’t know the existence of. Security? You gave that virtue 2 hours ago in exchange for the sweet feeling of completing something. And yet, you still haven’t accomplished anything. Except “reading” the 20-page agreement and selling your soul to google, microsoft, apple and Facebook at the same time.. At least you can hope that at the end their lawyers will fight spectacularly for its possession. Where was I.. Ah, ruby.. all the fancy js frameworks want ruby and compass and probably cupcakes, who knows.. The important thing is, you spent a quarter of your life to get here, so you are more than willing to make them happy.. even if they want world peace, or unicorns.. Nothing can stop you now.

Tomorrow the sun will rise again and new generation of programmers will be born. And this new generation will come up with simple tools to accomplish complicated tasks. And their tools will evolve in unmanageable ball of config files and libraries.. So it was, so it will be.. After all, our only purpose in this funny world is to increase the entropy. And as I am getting madder from loosing control of my time, I also get prouder of being part of all this insanely creative dough called humanity.

Game Jam Hammerzeit^2

The second Gameforge company internal Game Jam is over. It was awesome! 49 hours of awesomeness! Every single participant was awesome! But my team members are the best! 🙂 Haven’t got so much fun in a while.

The topic of the game jam was “Light and shadow” and we used unity3d to create a small puzzle game. Here’s the story: You are the invisible player, who is the landlord of a huge castle. Your only tenant is a vampire, who has the unfortunate habit to sleepwalk in a search of his noon snack. The way to the fridge is, however, dangerous at noon, since the light is generously spreading through the huge room windows. Luckily enough, you have those fancy “poltergeist” powers and can move some loose objects in the room to block the spreading light and protect your friendly tenant. But be extremely careful, because your tenant is very sensitive in his sleepwalk, so even the weak luminance from the room lights can harm him.

Here’s the link to the submitted version of the Jampire game: Jampire . And to play, you just have to know, that the game was originally designed to be played on a mobile device with touch screen. So if you want to be able to move the objects around, then you have to position your mouse close to the object you wanna move and keep the mouse pressed for like a second until the object turns green. Then drag the heavy thing where it will be useful. Scrolling the game screen down or up is very easy with short click and fast drag in the wanted direction (up or down).

The most difficult part of an awesome game jam is getting back to reality afterwards.. It’s kinda strange to accept, that your problems are more like searching for a toilet paper roll left on Sunday night in Germany, rather than strangely flying cupboards, unwanted teleportation of vampires or not enough time to build the on-off switch of the Dracula’s fridge light .. Damn it..

Bubble Melody

I recently started a new “one-day-project”. It was originally created as a solution for the final peer assessment project on coursera’s “Creative Programming for Digital Media & Mobile Apps“.
Here’s the video that shows the bubble project:

It uses the box2d physics engine to simulate gravity, dependent on the mobile device’s accelerometer’s data. And the code is pretty neat and compact, thanks to some object-oriented concepts.. 🙂

The submission deadline is 29.07.2013, so I cannot reveal the code right now, but after the submission phase, I will provide a github link for everyone who wants to play and improve the simple bubble melody app.

… And, as promised: https://github.com/zetabeta/one_day_projects/ (BubbleMelody folder)

Processing

Have you ever heard of MIT’s Processing?

It is very simple and very powerful programming language/environment for experimental stuff. I recently started to play with it, so here’s my first simple program to visualize the Koch’s snowflake fractal. It is, indeed nothing much, but it clearly shows how easy is creating classes and extracting functionality in methods with Processing (which is no surprise, since Processing is java-based).

The interactive part is, that on mouse click the snowflake changes it’s stroke color and order, depending on the x-y coordinates of the mouse pointer during the click time.

It is so much fun, so stay tuned.. There is more to come.. 🙂

And here is a video, of how can you creatively use the provided code: