hacking with care

„Hacking with Care – Tactical and ethical care for all“ eine wundervolle initiative aus dem umkreis von La Quadrature du Net, die sich den sozialen aspekten der community zuwendet und versucht defizite in sozialen bereichen zu erkennen und durch selbst tun/lernen zu beseitigen. man könnte auch sagen der „we social the sh*t out of this“-approach. :)

sie haben eine webseite in der die nächsten gelegenheiten bekanntgegeben werden, um sich selbst zu engagieren. und es gibt ein wiki mit massig zusätzlicher info als lebendes dokument.

ich hab davon nur erfahren durch den vortrag im datengarten 73 per live stream (video, videos). fand es interessant und finde es unterstützenswert. vor allem die herangehensweise sozial aktiv zu werden unter beachtung des hippokratischen eids.

der ansatz ist, (h)a(c)ktivisten die durch viel stress in eine brenzlige stress-out situation geraten, eine auszeit anzubieten bei der man den kopf erstmal kopf und das rationale erstmal das rationale sein lässt und sich mehr auf den körper und seine gefühle konzentriert. vor allem auch die bedürfnisse des körpers nach nähe/wärme nicht wegignoriert sondern sich diesen besonders zuwendet als aktivität zum stress-abbau/-vorbeugung. das derzeitige mittel/werkzeug der wahl von hacking with care sind ausgewählte massagetechniken (ich dachte sofort an shiatsu), die sich darauf konzentrieren behutsame berührungen zuzulassen und so sozialen bedürfnissen in einer sicheren umgebung nachgeben zu können.

lesenswert ist der ethical conduct (stand januar 2017) der für diese aktivitäten gesetzt wird:

  • Always observe the precautions and contraindications, consult the Massage precautions & contra indications sign
  • Respect each other. No discriminative or prejudiced speech, attitude or behaviour, no violence, harassment, coercion is ever appropriate.
  • Observe hygiene and safety rules: wash your hands before and after each session, use disposable paper covers or clean towels to protect the table, cushions, clothes. Work in a safe, clean, ventilated, space. Only use good quality products.
  • Be transparent and honest about your actual qualifications in care-giving, do not pretend to have skills or knowledge you don’t have. An attentive amateur can accomplish a great deal already, so no need to brag.
  • Do not give a massage to someone who is not quite sure they want one. Here, like in love, it has to be a YES, from the beginning to the end. Anyone can decide to stop whenever they want.
  • Respect physical reserves. No one has to take their clothes off for massage if they don’t want to (very good massages can be provided with clothes on). Similarly, if you, the giver, are not comfortable with nudity, you should say so.
  • Because massages induce relaxation of the nervous system, it can sometimes trigger erection or reactions similar to those of sexual arousal in both men and women. It’s not so frequent that you should worry about it, and besides, it is really nothing to be ashamed of. The masseur/se should bear in mind that however sexual in appearance, these reactions might not be experienced as such by the receiver, and so they should never be considered as an invitation to act on them.
  • There can sometimes be surprising emotional release during massage (or other forms of care) Please familiarize yourself with this possibility reading our article Emotional Release during Massage – What’s happening and How best to respond. Stay calm, composed, kind. Be especially wary and mindful of the possibility of personal information being revealed to you in that moment: Do NOT encourage words or let the person tell you too much about themselves. If necessary let them know that your reluctance to hear more is for their own good.
  • Discuss “privacy settings” with your partner prior to the session ? what would they be comfortable with? Can you talk about this massage later, to someone else? The default privacy setting in massage is “whatever happens in the massage room, stays in the massage room”, period. Don’t mention to others that you have given a massage to that someone.
  • Massage for children: Only in presence of their parent/adult tutor – No one to one sessions.

das klingt für mich nach einem interessanten weg ernsteren problemen vorzubeugen, die durch überforderung und stress entstehen können. ich werde das beobachen und weiter verfolgen mal sehen was draus wird. der eigene anspruch scheint nicht gerade gering:

Together we imagine, circulate, put in common resources and tools for care in accordance with hackers ethics and peer-to-peer philosophy. We create customized occasions for body & soul rejuvenation and collective (re)appropriation of care. We work with an understanding of the needs and requirements of specific contexts, as can be found in hacking and activism. Similarly, we like to transmit to caregivers some hackers-activists tools and best practices, in relation to privacy/data protection, technological independence, operational security.

Why do I blog this? Ähnlich wie bluehackers.org gibt es in der community gerade durch das teilweise sehr intensive und fordernde Engagement vieler Menschen an der Grenze ihrer eigenen Belastbarkeit schnell Situationen der Überforderung und der Eskalation von Stress. Gerade, wenn es z.B. um Menschenrechte geht und die tägliche Konfrontation mit Gewalt, kommen Aktivisten schnell an ihre eigenen psychisch-sozialen Grenzen. Oft passiert das aus einer falsch verstandenen Wahrnehmung des Einzelkämpfers heraus. Die Erkenntnis, dass man nicht allein ist, kann hier bereits helfen. Besser noch ist natürlich, dass man sogar fühlen kann, dass man nicht allein ist mit seinem Engagement und seinen Sorgen. Hacking with Care könnte daher sowas Ähnliches sein wie eine „Impfung“ sein, eine Art vorbeugender Aufbau von Antikörpern für den Ernstfall. Spannender Ansatz! Die Grenze bei so einem diffizilen Thema zwischen „gut gemeint“ und „gut gemacht“ ist allerdings schmal, zumal Berührungen, ja sogar Annäherungen ohne jedwede Berührung, in unserer Gesellschaft bereits OHNE diesen Kontext der akuten sozialen Defizitsituation unzähligen Tabuisierungen und kulturellen Eigenheiten unterliegen. Ein wahres Minenfeld! Das ist eine ganz schöne Herausforderung. Respekt dass sich da wer rantraut. Ich hätte den Mut nicht mich mit so einem Projekt zu exponieren, zumal schon gleich dreimal nicht als Mann in der derzeitigen gesellschaftlichen Situation, in der man Männern pauschal alles nur denkbar Böse unterstellt wenn sie sich anderen Menschen annähern und man mir nichts dir nichts als verdächtig/schuldig gilt bis das Gegenteil bewiesen ist.

Mr Robot – best dialog ever.

I found this awesome sequence of pictures on tumblr somewhere. Love’d it.

mr_robot_01

mr_robot_02

mr_robot_03

mr_robot_04

mr_robot_05

mr_robot_06

mr_robot_07

Update 21.10.2016

Can’t wait for this…

Why do I blog this? I just loved Mr. Robot. I also love bright, geeky playing games with authorities. This comic’esque dialog is lots of fun in all of these dimensions.

RealmExplorer – a piece of sample code for Realm DB

realmexplorer_01_smallFirst things first, look at the RealmExplorer github repo for the project.

Preface: CoreData

I have some history in using databases. From using Oracle, Frontbase, mySQL, PostgreSQL, sqlite etc. the last time I used a database was for a postcard app using CoreData. But I found CoreData to be a lot of overhead and boilerplate code to write.

Especially migrations are kind of not very intuitive to understand and if something goes wrong you are basically lost. While Xcode for a while had an Entity modelling tool (which had it’s roots in the WebObjects EOModeler), most of the time this tool did not work very well for me and had lots of bugs. In each Xcode version different bugs!

Also many people report running into issues when using CoreData with lots of objects, because it is easy to loose track of memory consumption with CoreData and if you do not actively check and work against that, you end up with a whole model graph being in memory. Not cool! So I wanted to try something different.

Realm

I found Realm by Realm.io to be interesting enough to tinker with. So I started working with their sample code projects. But none of those projects came even close to some real world example. So I just started prototyping something I will need for a different project anyway.

Starting with a custom viewcontroller for adding & editing entities I recognized that this would soon become rather painful to provide e.g. inputfields for text and numbers and dates. So I grabbed FXForms to give it a try after I had already completed a viewcontroller to manage DBCaptain entities a bit.

Migrations

Right from the start I wanted to know how migrations work. Because usually those are the weakest spot in every db operation taking place. With a live product you always „pray“ that nothing will go wrong during migrations on the customers device. And keeping track of changes to the db schema is very important to have a stable app.

So I built the sample around the process to „simulate“ an app in development. You can now iterate through different development steps (5 different app states & their migrations) and their needed migrations. This way I figured out how I can safely manage my migrations (i.e. always keeping a backup of the old schema). In the project the
DatabaseFactory.m class manages all that. It detects existing schemas using a precise naming scheme for each Realm-db created.

During app launch any necessary migrations are executed if necessary. Also, any errors happening while the app launches and gets into trouble activating the database, are nicely displayed.

Create/Insert/Edit/Delete

I started with one entity DBCaptain which is basically a user entity. I just wanted to create user objects and populate them with different properties. I tested insertion with one and with many users on the main thread and on the background thread. I also took advantage of notifications coming from Realm as soon as an operation finished updating the db.

Deletion of objects came next. As always having the UI keeping track of all those changes is the more difficult task. So expect some „ugly“ code, because this was only me tinkering around. When i wanted to edit existing objects I recognized that I do not want to create all those textfields manually.

FXForms

That was when FXForms came to the rescue. I started to recreate the already half done viewcontroller and created another based on FXForms. I needed some time to wrap my head around FXForms, because basically this is a quite sophisticated hack of providing compact descriptions of UITableViewCells and their content.

You describe what kind of structure your form should have and what kind of value types it should use. FXForms crafts the UITableView which makes all those inputfields come true. Things start to become a bit tricky if you want to control those UITableViewCells more directly. E.g. I needed a way to exclude certain properties of being edited at all. So I simply extended the FXForms protocol to allow for a denial of userInteractionEnabled on certain cells by adding the FXFormFieldEditable key. This is used on the CaptainFormViewController to exclude the information about the database schema and the encryption status to not be editable.

Evaluation

My first impression of Realm DB is quite positive. It is fast, it provides helpful error-messages and it is easy to setup and comprehensive in what it does and how it works. I never in my life had migrations up and running that quickly. Very, very helpful was the Mac app RealmBrowser to open a realm DB file directly. I used that while checking my migrations and the results of operations which added arbitrary data (e.g. image files).

What is actually really great is that encryption is supported for the db by just providing a 128 bit key. That is really helpful to protect user data and increase safety of the realm db file even if it gets backed up into some cloud somewhere else.

What’s next?

I think I missed something related to the KVO-thingy going on by Realm. But I had no time until now to figure that out. I suppose they actually track entities and changes via KVO. But I am not yet sure how exactly this works and how I can detect if an object has pending changes. That is why I added a hasPendingChanges BOOL-flag to both ViewControllers for editing entities. So help is welcome here!!

I did not have time to do some real hardcore performance testing, i.e. adding thousands of entities and relationships in a short time and crafting a rather complex model with complex relationships which define ownership and cascading deletions etc. Also doing sophisticated db queries is on my list to do next.

But having a prototype now to tinker with helps already a lot. Since I learn best from sample code, and I think I am not the only one learning new things this way, I hope it helps others to jumpstart with Realm, too.

Why do I blog this? I just wanted to give a bit of background info on the sample code I put on github. Have fun tinkering & I am really in need of getting more info on how I can detect changes to an object so I know WHEN to save changes to the db. Maybe someone who already grabbed the concept better can help me here?? Leave a comment or contact me via github.