Black hole

When I recently did some programming while riding in the commute train, I added an new image view, added an outlet using the Assistant editor of Xcode 5 and started to test my program. All worked well, I added a few changes and had to hop off the train.

Some hours later I continued testing and was surprised to see a black window instead of my app. I could not remember what I had changed last time. Could it be, that I had made mistakes in the connection of the scenes? Did not look like so. Did I make a mistake in the code? No evidence for that.

Then I finally saw it:  Instead of putting the button to hidden, I had put my image view to hidden. I had connected the whole view,  instead of connecting the button only  – without noticing it. This meant, I had set the view that was meant to be the background to hidden and thus I had a black view into the endless dark black hole of the background behind the background.

Als Mensch unter Vampiren

In Firmen, in denen nur Vampire arbeiten, kommt immer mal wieder die Frage auf, ob es nicht sinnvoll sei, auch mal Menschen einzustellen. Das damit verbundene Risiko muss jede Firma selbst beantworten. Wenn man es wagt, so etwas zu tun, dann finde ich, es sollten ein paar Grundprinzipien beachtet werden.

Das erste Prinzip sollte sein, dass man keine zu dünnhäutigen Menschen einstellt. Warum, ist einfach zu erklären. Denn erstens ergibt sich im normalen Alltag schnell mal eine Verletzung bei dem Menschen und dann sind die Vampire in der Umgebung schnell aggressiv. Das kann man vermeiden, wenn der Mensch nicht so leicht verletzbar ist. Zweitens könnte es – natürlich nur theoretisch – ja auch mal sein, dass einer der Vampire in der Firma sich nicht beherrschen kann und beim Vorbeigehen an einem ungeschützten Hals einen Bissreflex nicht unter Kontrolle hat. Dann ist eine dicke Haut beim Menschen Gold wert, es gibt keine unnötigen Toten, sondern aller höchstens einen entlassenen Vampir oder vielleicht sogar nur eine Ohrfeige. Ich jedenfalls wünsche mir, dass das nie bei uns vorkommt und stelle mir doch lieber lauter Menschen in Rollkragenpulli vor.

Das zweite Prinzip ist auch leicht zu verstehen: Vertrauen ist gut, Kontrolle ist besser. Und um zu wissen, ob Sie überhaupt vertrauen können, ist mein Tipp: Testen Sie Ihre Vampire, bevor Sie Ihnen vertrauen. Wer Vampire meint zu kennen, sie aber nur in der Gegenwart von anderen Vampiren erlebt hat, der weiss nicht, wie menschenverachtend und triebgesteuert Vampire manchmal sein können. Eben noch waren sie nette, gesittete Vampire, schon springen sie auf und laufen in der Nähe des Menschen auf und ab, in der Hoffnung auf Kontakt und kennen lernen. Beobachten Sie einen solchen Test intensiv und ziehen Sie die Schlussfolgerungen entsprechend.

In einer früheren Firma, in der relativ viele Vampire und nur wenige Menschen arbeiteten war ich in einem neu geschaffenen Bereich hinter einem Sichtschutz eingezogen und hatte dort mein eigenes kleines Reich. Die Tische vor mir waren überwiegend leer und so kam es, dass ein äusserst gut aussehendes Exemplar Mensch für 6 Wochen zu Gast in unserer Abteilung war und auf einen dieser leeren Plätze gesetzt wurde, allerdings genau am Ende meines Sichtschutzes – immer gut sichtbar für vorbei laufende Vampire. Dass in dieser Zeit viele Vampire vorbei kamen um ihren Blick auf den Menschen zu werfen oder gar ihr Interesse an dem Menschen zu bekunden, ist klar, fiel mir aber nicht weiter auf – ein Mensch, noch dazu gutaussehend – war ein zu seltenes Exemplar bei uns. Was mir aber auffiel, war, wie viele Vampire in den Tagen nach der Abreise des Menschen noch nach dem Menschen zu suchen schienen, was daran zu erkennen war, dass sie – den Menschen nicht sehend, wo er sonst gesessen hatte, um den Sichtschutz herum guckten um dann peinlich berührt in meine bohrenden Augen zu blicken. Ich kann ihnen sagen, es waren mehr gesittete Vampire darunter als ich erwartet hatte. Wenn ich Ihnen im Abschluss auch noch sage, dass mir zwar nichts von Übergriffen der Vampire auf den Gastmenschen bekannt wurde, aber doch später berichtet bekam, dass dieser Mensch gekündigt hatte und eine andere Karriere anstrebe, dann ist zumindest klar, dass das nicht nur fachliche Gründe haben musste.

Das dritte Prinzip ist das der Verantwortung. Sie als Vorgesetzter sollten die Regeln klar vorgeben. Wenn menschenverachtende Witze gemacht werden, dann denkt man in einer Firma, in der nur Vampire arbeiten vielleicht nicht daran, dass es eine gute Idee sein einzuschreiten und den Witzemacher zurecht zu weisen, aber man setzt eben die Standards für immer und ewig – daher ist einschreiten eine gute Idee. Denn sobald Sie Menschen im Rahmen eines Praktikums in der Firma haben, wünschen Sie Sich schon, dass sich Witzemacher und Mensch hoffentlich nie begegnen – und dass Ihr Einschreiten hoffentlich eine Wirkung hatte.

Das vierte Prinzip ist, nur vampirfreundlich denkende Menschen einzustellen und denen auch zu sagen, dass sie unter Vampiren arbeiten. Das ist sicher nicht einfach, weil es so wenige davon gibt, aber auch weil es eben sehr schwer ist, zu erahnen, was ein Mensch wirklich denkt. Wie leicht man als Vampir als Menschenfeind gesehen wird wurde mir klar, als ich an einer Gruppe rauchender Menschen vorbei ging und Fachwörter hörte, die ich sonst nur von Vampiren höre. Als ich – mitteilsam wie ich bin – meiner freudigen Überraschung Ausdruck verlieh, wurde ich beschimpft, weil ich offensichtlich ein menschenverachtender Vampir sein müsse. Keine Ahnung, wie man mich falsch verstehen konnte, aber „für einen Hammer sieht alles aus wie ein Nagel“ war in diesem Fall wohl das passende Sprichwort, ich war als Vampir erkannt, musste also ein Menschenhasser sein.

Das fünfte und letzte Prinzip sollte sein, dass Sie selber Vorurteilsfrei sein sollten, Sie also selber nichts gegen Menschen mit Vampirkenntnissen und Mischwesen haben sollten. Viele unter den Vampiren sind ja der Meinung, dass Menschen unter sich bleiben sollten und Vampire unter sich. Ich kann Ihnen aber versichern, ich habe ganz wunderbare Mischwesen kennen gelernt und Menschen, die mehr über Vampire wissen, als viele Vampire, die ich ständig treffe. Ich glaube, ich hatte als junger Student dazu keine Meinung, ausser, dass mir aufgefallen war, dass bei uns im Studiengang mehr Studenten aus einem fernen Land kamen, als es Menschen unter den Studenten gab. Als ich mich dann in eine der Studentinnen verliebte und ich feststellte, dass sie das Zeug zu einer guten Vampirkennerin hatte, da hatten sich für mich alle Vorurteile erledigt – und das blieb auch so, als wir uns im Guten wieder trennten.

Für mich jedenfalls steht fest: In meiner Firma sind Vampire und Menschen nur willkommen, wenn sie sich jeweils zu benehmen wissen. Und das ist bis heute glücklicherweise immer der Fall gewesen – bei uns arbeiten tolle Wesen!

P.s.: Als Hinweis für alle, die diesen Text nicht verstehen: Suchen Sie nach den drei Stichworten Julie Horvath Github, für mich kam der Trigger durch diesen Artikel: http://www.sueddeutsche.de/digital/sexismus-in-der-technik-szene-eingeschuechtert-und-drangsaliert-1.1915118

P.p.s.: Probieren Sie, ob der Text Sinn macht, wenn Sie Vampir gegen Nerd und Mensch gegen Frau tauschen…

Button Größe nicht mehr änderbar?Button size not changeable anymore?

When moving one of my projects to iOS 7, I had a strange effect: In this App, I needed a button, that had to change its size. In iOS 6 and Xcode 4.6.3 I had created a button in the interface editor and I could now change its size and always adjust its center as well. In iOS7, this was not possible, obviously because xcode or the run time system always generated a new constraint on how to lay out the button – although I had not given it any constraints. The default was obviously to always get the default constraints.

I experimented a little and came to no better conclusion than to do the button dynamically in the code. Worked perfectly and was possible with little effort as well. Seems, I still have to get used to the constraints system.

Xcode crash mit Zellengröße 0Xcode crashes, cell size 0 is the problem

I was working on a project for quite a while, so the storyboard of that project was filled with 19 screen controllers. When the project moved from iOS 6 to iOS 7, we had some issues with autolayout, but we thought we had them all wiped out.
Then one day entering the storyboard in Xcode crashed Xcode V5.0.2. Of course I could have checked in version control which of the last versions would open without problems, but I went down another path.

I had saved the last versions of xcode (v5.0 and v4.6.2) and tried to open the storyboard with version 5.0, which worked. And since the message in the crash contained the word „cell“, I searched for cells by entering cell in the document outline view search bar (the list of all views and view controllers that you can view on the left hand of the storyboard itself).

While the first three table view cells where all OK, the fourth table view cell was in a table view with size zero (0) for height and width. Needless to say, that putting the sizes to zero had been Xcode’s idea, not ours. That zero size was probably the reason, I assumed, so I changed the size of the parent table view to something bigger than two times zero. And yes, this time Xcode 5.0.2. opened the storyboard file without problems.

Here is the error lines I had in my console output and in the crash report (for reference):

Details: Failed to compute auto layout status IBUILabel, IBUITableViewCell, and IBUITableViewCellContentView.
Reason: Any table view cell being added to a layout engine should be contained in a table view in order to get the correct metrics

iPhone 4S verloreniPhone 4S lost

Wir haben unser iPhone 4S mit der Seriennummer DNPGG66JDTC0 und dem Identifier 77cb2e740d127b13b9e216586d79db87d427b03d verloren.

Leider funktionierte das „Find my iPhone“ Feature nicht – was daran liegen kann, dass der Finder das Telefon ausgestellt hat. Falls Ihnen das Telefon begegnet, versuchen Sie nicht, das Telefon zu verkaufen, zu kaufen oder zu verwenden, Apple und O2 sind informiert, dass dieses Telefon verloren / gestohlen ist.

Wenn Sie das Telefon finden, dann geben Sie es uns bitte zurück, wir werden uns mit Finderlohn erkenntlich zeigen.

Danke!We lost our iPhone 4S with the serial number DNPGG66JDTC0 and the identifier 77cb2e740d127b13b9e216586d79db87d427b03d. No idea if it was stolen or if we just lost it.

Unfortunately, the „Find my iPhone“ did not work – which to me is an indication that the finder switched the phone off. Do not try to sell, buy or use this phone, apple and O2 are informed that this phone is lost / stolen.

If you find this phone, return it to us, please. You will be rewarded.

Thanks!

Staubsauger Verordnung: Wahrheit und DichtungVacuum Cleaner: Fact and Fiction

Spiegel TV Magazin beschwert sich am 29.12.2013 über die EU Verordnung zur Reduzierung der Staubsauger-Leistung ab 2014 auf 1600 und ab 2017 auf 900 Watt. Der Reporter möchte nicht mit „900 Watt doppelt so lange saugen“ wie mit 1800W. Der ganze Beitrag ist ein Teil über den Regulierungswahn der Behörden, da passte das Thema gut ins Gesamtbild.

Tja liebe Journalisten: Fail!

Was sie nämlich verschweigen oder vergessen:

  1. Die Saugkraft kann auch bei 900 Watt gut sein. Schon in 2009 schrieb die Stiftung Warentest im Staubsaugertest: „Energiesparen jetzt auch beim Staubsauger: Runter mit der Wattzahl lautet die Devise der Anbieter. Die Saugkraft leidet nicht darunter“.
  2. Seit Jahren gibt es leise Staubsauger mit weniger Watt, oder Lautstärke, einige Hersteller werben mit „Silent“ und „Supersilent“. (Ich weiss aber nicht, wie gut die gekauft werden)
  3. Seit Jahrzehnten könnten die Staubsauger leiser und schwächer sein, wenn die Kunden nicht nach der Devise kaufen würden, mehr Watt == bessere Leistung (so wie es der Fernsehbeitrag auch suggeriert). Quellen spare ich mir, Google ist Dein Freund.

OK, OK, es ist natürlich wirklich keine tolle Idee, uns EU Bürger ständig zu bevormunden. Ein A, B, C — Label hätte es vielleicht auch auf Dauer getan, aber vielleicht geht das der EU nicht schnell genug. Oder aber die Gesetzgeber wissen: Es braucht mehr als nur ein bisschen Anreiz, um etwas zu bewirken. Egal, ich befürworte Stromsparen und freue mich schon auf den nächsten Staubsaugerkauf.

Typische Spiel TexteTypical Game Texts

Why not build a List of typical game button Text translations. Unfortunately, if there are multiple options, you never know which one is the right one.

Mail / comment if you have additions or translations.

German
English Deutsch
1.) New Game Neues Spiel
2.) Reset Score Spielstand zurücksetzen
3.) Pause Pause
4.) High Score Höchststand / Spielstand
High Scores Höchststände / Spielstände
5.) Settings Einstellungen
6.) Jump Springen
7.) Run Laufen
8.) Fire Feuern
9.) Look Gucken
10.) Duck Ducken
11.) Cover Verstecken
12.) Crawl / Sneak Kriechen / Schleichen

APT 18: Bauchgefühl und Programmierung von MutableArraysAPT 18: Gut Feeling and MutableArrays

Todays Surprise using NSMutableArray

I am programming in Objective-C for 4+ years now. And don’t get me counting, how many years have passed, since I programmed my first program in school. After that amount of time, surprises in programming are not that common any more for me. After so many years, you develop a gut feeling, what is safe programming and what is possibly not a good idea.

Today, I was reminded again, that it is a good idea to listen to your gut feeling. I was combining a loop through a collection of items together with an act of deleting one of the items. When I was programming it, my gut feeling told me, wait – this could be confusing for the array management (class) software. May be, it has a reference to an item and I am deleting it and this confuses everything.

So I checked the description of the class. I could not find any comments regarding that and went on.

A few days later however, after I had programmed it, I learned, that I had not looked up the documentation good enough. Somewhere in the documentation I found the hint: Deleting an element while enumerating it (running in a loop through all elements of that array) is potentially unsafe. The same applies to adding elements or replacing elements. So I needed to change my implementation.

I didn’t know what to feel. Should I be proud, because I had „felt it“? Should I feel stupid, programming it that way? Should I be upset, because it sure is possible (for Apple) to implement the array thing without these problems. But when programming, you have to make tradeoffs. This way, the more general case is surely faster.

So how did I do it? I changed my code to first collect all elements, that need to be deleted, in a second array and then, after the enumeration loop has finished, delete them all at once.

The alternative implementation is a good idea as well: Make a copy of the collection, enumerate through the copy and modify the original.