Debugging mit cURL

In my job I often time have to debug HTTP connections. Often time we need to figure out why a certain call is slow. First choice is to execute the HTTP call in question with cURL to check what the response is. cURL has a lot of nice features (and bugs) that help you determine where time might have gotten lost in your request. The command line parameter “-w | –write-out ” gives you control over what values cURL spits out after the call.

This can be quite lengthy and mess up your command line. So better put that into your ~/.curlrc to have cURL use it on every call anyway:

write-out = "\n download_size: %{size_download}\n\n time_namelookup:  %{time_namelookup}\n time_connect:  %{time_connect}\n time_appconnect:  %{time_appconnect}\n time_pretransfer:  %{time_pretransfer}\n time_redirect:  %{time_redirect}\n time_starttransfer:  %{time_starttransfer}\n ----------\n time_total:  %{time_total}\n"

 

The output will look something like this now (note the additional timing output at the bottom):

curl -D - -o /dev/null "http://www.explain-it.org/wordpress/" % Total % Received % Xferd Average Speed Time Time Time Current
 Dload Upload Total Spent Left Speed
 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0HTTP/1.1 200 OK
Server: nginx/1.9.1
Date: Wed, 22 Jul 2015 07:19:41 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.5.9-1ubuntu4.9
Set-Cookie: PHPSESSID=i4cr0mgb8nas8gsedpskgkep05; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
X-Pingback: http://www.explain-it.org/wordpress/xmlrpc.php
Vary: Accept-Encoding
100 61108 0 61108 0 0 209k 0 --:--:-- --:--:-- --:--:-- 209k
download_size: 61108
time_namelookup: 0.061
 time_connect: 0.092
 time_appconnect: 0.000
 time_pretransfer: 0.092
 time_redirect: 0.000
 time_starttransfer: 0.190
 ----------
 time_total: 0.285

What if …

If you listen to people who have been in space you notice that they come back changed. Changed in their perspective on things and priorities. They realized how small we are and interconnected. Living on this beautiful blue marble tumbling around the sun. This is even more true as with the evolution of technology we’re getting more & more connected every day.

But then down here people are stubborn and fight each other for utterly stupid reasons. As if we were different, one better than the other, ones imaginary friend more real than the others.

What if we could send every person to space to influence their perspective on their live and place in the universe? I bet the world would be a better place.

It might turn out this is achievable. It might turn out this is even cheaper than being in war all the time.

 

NASA's Global Selfie: 100+ Countries, Thousands of Photos (NASA, 05/22/14)

Nationalismus sucks

Gestern morgen beim täglichen Schrippen schmieren für den Nachwuch hörte ich wie immer @radioeins. Es wurde ein Wissenschaftler von der DLR, speziell ein Planetenforsche zum Thema New Horizons Sonde & Pluto interviewed.

Der Moderator (Ich glaube es war Tom Böttcher) spielte dann darauf an, dass der amerikanische Präsident diesen Erfolg der NASA natürlich auch wieder als nationalen Erfolg der USA betont hat. Er fragte ob der Herr von DLR da ein bisschen neidisch ist, denn mit der extrem erfolgreichen Rosetta Mission der ESA hat ja auch Europa bewiesen das wir’s space-technisch drauf haben.

 

Touchdown!

 

Ich hätte mir gewünscht das der Gesprächspartner gerade als Planetenforscher geantwortet hätte, dass diese Leistungen (sowohl New Horizons als auch Rosetta) nicht von einer Nation erbracht wurden. Sie wurden von Menschen erbracht. Von Menschen die auf dem dritten Planeten der Sonne dieses System leben. Die fantastisch zusammengearbeitet haben obwohl sie aus verschiedenen Nationen kommen.

Nationalismus ist so Mittelalter….

Becher für Becher die Welt retten

Unter Woche trinke ich teils mehrmals am Tag Kaffee aus der famosen Oslo Kaffee Bar. Normalerweise wird dieser in kleinen Pappbechern gereicht wenn man ihn mitnehmen möchte.
Ohne Titel

Daran hat mich aber schon immer gestört, dass man den Becher dann wegschmeißt und somit eine beachtliche Menge Müll produziert. Nun sind Pappbecher sicher nicht zu schädliche wie Plastikmüll. Aber auch ihre Herstellung verbraucht Resourcen. In unserer Kantine bei HERE gibt es tollerweise wiederverwendbare Becher die dazu auch noch 100% biologisch abbaubar da aus Bambus gemacht sind. Nun bringe ich immer meinen eigenen Becher mit ins Kaffee und lasse den befüllen. Das Personal freut sich sichtlich und spart am Ende ja auch etwas Geld für diese Pappbecher.

Ohne Titel

Ein Gedächtnis für Slack

Um in verteilten Teams zusammenzuarbeiten braucht man Kommunikationswergzeuge die überall verfügbar und asynchron sind. Ein heißer Kandidat hierfür ist zur Zeit Slack.com. Sehr vereinfacht handelt es sich hierbei um einen Internet Relay Chat (IRC) auf Steriods. Man kann mehrere Chat-Räume anlegen in denen man sich quasi öffentlich (im Rahmen seines Teams) unterhalten kann. Oder man chattet nur mit kleineren Gruppen oder Einzelpersonen.

Slack bietet für Android, iOS, MacOS und Windows seinen Client an. Somit kann man fast immer und überall an der Kommunikation mit seinem Team teilnehmen. Mit einem kostenlosen Plan kann jeder sofort loslegen und sein eigenes Team anlegen und loschatten.

Beim kostenlosen Plan verliert man allerdings irgendwann Zugriff auf seine Chathistorie im Slack client. Nur in den Bezahlversionen behält man hierauf Zugriff.

Allerdings hat Slack ein sehr gut dokumentierte API. So habe ich mal ein langes Wochenende genutzt mich endlich mal ein bisschen in Python einzuarbeiten und einen Archiver für Slack zu schreiben.

Der Code ist sicherlich alles andere als sauber und elegant. Aber er tut für unsere Zwecke was er soll: die Historie eines Slack Kanals chronologisch in eine Textdatei schreiben. Und dies sogar inkrementell.

Ich lasse ihn 1x/h per Cronjob auf meinem Server laufen um unsere Nachrichten zu archivieren.

Der Quellcode kann bei uns auf Github gefunden werden.

Yosemite & WiFi

Seit etwa 3 Wochen darf ich ein neues MacBook Pro nutzen. Darauf war natürlich MacOS X 10.10 aka Yosemite installiert. Wer das Thema MacOS X ein bisschen verfolgt, hat sicherlich schon von dem massiven WiFi Problemen mit Yosemite gehört.

Ich selbst hatte Yosemite natürlich schon auf meinem alten MacBook Air ausprobiert. Bin dann jedoch genervt nach einigen Monaten wieder auf MacOS 10.9 aka Maverick zurück gegangen. Die Probleme waren einfach zu groß. Ständige Verbindungsabbrüche im WiFi und schlechter Datendurchsatz. Auch der Zugang zu den Entwicklerversionen in der Public Beta half nichts.

Nun hatte ich Hoffnung, dass mit einem Stück nagelneuer Hardware die Situation besser ist. Werden die aktuellen Macs doch sogar mit Yosemite ausgeliefert. Doch weiter gefehtl. Gefühlt waren die Probleme auf dem neuen MacBook Pro sogar noch schlimmer. WiFi praktisch unbenutzbar, LAN via Thunderbolt Ethernet Adapter dagegen problemlos.

Wieder nahm ich am Apple Public Beta Program teil. Man hatte als Problemursache inzwischen den neuen Apple “discoveryd” prozess ausgemacht. In der aktuellsten Beta 10.10.4 wurde dieser wieder durch den alten mDNS-responder ausgetauscht. Geholfen hat das mir allerdings wenig.

Ein bisschen systematisches Rumgespiele mit den heimischen WLAN-Settings an meiner FritzBox 7490 förderte dann allerdings Lösung zu Tage. Die FritzBox spannt bei mir 2 WLANs auf. Eines auf dem 2.4Ghz Band und eines auf dem 5GHz Band. Beide nutzen die gleiche SSID. Damit kommen alle anderen Mac, Linux, iOS Geräte hier im Haushalt super klar. Nur die Macs mit Yosemite scheinbar nicht. Nachdem ich zuerst nur das 5GHz Netz abgeschaltet hatte, war die WiFi Verbindung auf dem neuen MacBook Pro unter Yosemite plötzlich stabil. Das Ändern der SSID des 5GHz Netzes brachte schließlich auch dieses wieder stabil zurück. Das MacBook Pro mit Yosemite verbindet sich nun stabil und schnell mit dem 5GHz WiFi.

USB-C with build-in obsolescence

The new USB-C plugs are supposed to save the world because they are finally reversible. So no need for people to try and error. Just think how much time we will safe. Because Murphy’s law says that you always insert the USB plug wrong first.

But if you look a little closer you might figure that the new USB-C sockets seem to have build-in obsolescence. Because of the design (and is has been that way for Mini- and Micro-USB sockets as well) there is a very flimsy mid mount element that contains the actual contacts. So the whole conductivity relies on this tiny little thing to remain in place and the UBS-C plug to not collect any dirt inside.

Reference Footprint of USB -C Type plug and socket

(c) Extremtech

In contrast Apples Lightning connector for the iPhones and iPads makes it the other way around. The plug essentially that middle pole with the contacts. And the socket is just a hole with the contacts on the outside. No tiny little parts to break.

Apple Lightning Connector

Apple Lightning Connector

As much as I like having a standard plug and socket… the current USB-C plug/socket design seems to be a very bad choice for me. The tiny elements in the sockets will quickly wear out and the plugs collect dirt and the connection will be bad or lost. And we all know how easy it is to replace USB sockets in your appliances…s

Uckermark geht in die Nase

Einigen dürfte schon aufgefallen sein, daß ich ein Fan der Uckermark bin. Das liegt höchstwahrscheinlich daran, daß ich dort aufgewachsen bin. Oder daran, daß wir dort ein Haus haben. Oder daß ein großer Teil unserer Familie immer noch dort lebt und wir dementsprechend oft dort sind.

Untitled

Aber mal ehrlich – die Uckermark ist schon unheimlich toll. Gerade an diesem Wochenende ist mir wieder ein Grund mehr eingefallen, warum ich die Uckermark so toll finde: Weil es dort so toll riecht.

Untitled

Ja, ohne Quatsch. Ich habe eine relativ empfindliche Nase (ist ja auch groß genug) und kann daher sehr gut riechen. Am Wochenende haben wir eine Radtour durch die Wälder und Wiesen run um unser kleines Dorf gemacht. Und dabei vielen mir die vielen unterschiedlichen Gerüche auf. Da es in der Nacht zuvor geregnet hatte, konnte die feuchte Luft noch mehr von dem Duft der Umgebung aufnehmen. So roch es im Wald natürlich intensiv nach dem frisch geschlagenen Kiefernholz. Aber auch der leicht feuchte Boden mit seinem Moos und Unterholz war an seinem würzigen Geruch zu erkennen.

WP_20150411_10_17_54_Raw.jpg

Als wir an einem der vielen kleinen Seen vorbei kamen, wehte eine leichte Brise mit dem Geruch des Wassers und Schilfs zu uns herüber. Die trockene Heidelandschaft am Ende des ehemaligen Flughafen Groß Döllns wiederum roch nach dem Erikakraut und dem Sandboden.

Untitled

Selbst wenn ich nichts sehen oder hören könnte, so wäre so eine Fahrt durch die Uckermark dennoch ein Erlebnis. Wegen der vielen wundervollen Gerüche.

Übrigens – ganz tolle Geschichten und Bilder aus und über die Uckermark gibts bei Steffi im Blog “Weiter Himmel

Why it is so hard to hire System Engineers

A good Systems Engineer is a really rare animal to find. She’d have to be very good with a whole variety of different topics:

  • Hardware
  • Networks
  • Operating Systems
  • Scripting Languages
  • Programming Languages
  • Application Software
  • Systems Architecture
  • CloudComputing

to name only the most prominent.

And those are only the mere technical areas one have to excel in. The nature of the job brings you in contact with many people of different background level of diva-ness. So your communication skills, stammina and bullshit filters must be well developed. Often times you’d be asked to take part in oncall duty. That means not only being reachable via phone all the time, but also being able to start working immediatly at any time.

Now the question is, where would you learn all those skills? There isn’t a University course teaching all these. You can learn programming and computer science. But that’s still quite far from Systems Engineering. You can take special classes from network equipment vendors to become an expert on their products. But you still miss all the other parts unlesse you take a variety of other courses as well. And after all these courses still, you might lack hands on experience.

Because here’s the issue with Systems Engineering. In contrast to programming, you can’t really gain experience at home. Anybody can download a compiler and an IDE (integrated development environment) and start programming.

If you want to become an expert on Systems Engineering, that’s not so easy. Surely you can setup your own home server and play around with a  few application systems. Maybe configure your own firewall and build a router. But to gain experience with Wide Area Network issues, specialised hardware, loadbalancers, large scale systems etc. you need to have access to such an environment. You can’t build a cluster of hundreds of machines at home. You usually can’t afford to buy high performance network equipment for several 10k $ just play around with it.

From my experience you can only grow as a Systems Engineer on your job. You start small and gain experience over the years by getting in contact with all sizes of systems (and the adjacent people of course). This way obviously a much smaller number of mature Systems Engineers are available than let’s say software developers. There is no school or university producing them on a regular basis.

That’s why it’s so hard to hire a good Systems Engineer.