Sorry. Ich weiß, das geht grad rum, aber ich muss das auch im Blog haben:
brb, dying.
via und Henning
♪ Commit ins Abenteuerland ♫
Sorry. Ich weiß, das geht grad rum, aber ich muss das auch im Blog haben:
brb, dying.
via und Henning
Wer mit Wowza einen HTTP-Livestream über CloudFront ausliefern möchte, der sollte die Caching-Einstellungen optimieren:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
<HTTPStreamer> <Properties> <!-- HTTP origin mode: on, off --> <Property> <Name>httpOriginMode</Name> <Value>on</Value> </Property> <!-- Apple HLS: cache control --> <Property> <Name>cupertinoCacheControlPlaylist</Name> <Value>max-age=1</Value> </Property> <Property> <Name>cupertinoCacheControlMediaChunk</Name> <Value>max-age=3600</Value> </Property> <!-- Microsoft Smooth Streaming: cache control --> <Property> <Name>smoothCacheControlPlaylist</Name> <Value>max-age=1</Value> </Property> <Property> <Name>smoothCacheControlMediaChunk</Name> <Value>max-age=3600</Value> </Property> <Property> <Name>smoothCacheControlDataChunk</Name> <Value>max-age=3600</Value> </Property> <!-- Adobe HDS: cache control --> <Property> <Name>sanjoseCacheControlPlaylist</Name> <Value>max-age=1</Value> </Property> <Property> <Name>sanjoseCacheControlMediaChunk</Name> <Value>max-age=3600</Value> </Property> <!-- Apple HLS: transport stream counter --> <Property> <Name>cupertinoOnChunkStartResetCounter</Name> <Value>true</Value> <Type>Boolean</Type> </Property> </Properties> </HTTPStreamer> |
und
|
1 2 3 4 5 6 7 8 9 |
<LiveStreamPacketizer> <Properties> <Property> <Name>httpRandomizeMediaName</Name> <Value>true</Value> <Type>Boolean</Type> </Property> </Properties> </LiveStreamPacketizer> |
andernfalls nervt insbesondere beim Neustarten des Streams der gecachte Status “kein Video gefunden”
Ich nutze Apple Mail als Emailclient, und ich habe es so konfiguriert (Einstellungen -> Darstellung -> Header-Details einblenden -> Eigene …), dass mir der X-Mailer jeder Mail angezeigt wird, sofern vorhanden. Da stehen manchmal witzige Sachen drin – so auch hier:

🙂
Ich schrub ja bereits, dass ich meine Domains von Strato zu inwx umgezogen habe. Das lief mit meinen .de-Domains auch ziemlich einfach; kein Vergleich zu meinem Umzug von 1&1 zu Strato vor vielen Monden. Ausgerechnet mit crusy.net allerdings war es nicht ganz so einfach:
Analog zu den erfolgreichen Umzügen von bsplw. bentlarsen.de klickte ich auf “AuthCode anfordern” in Stratos übersichtlichem Backend, und wartete ab. Bei Strato bekommt man den AuthCode per Mail (anders als bei inwx, da sieht man ihn direkt im Backend), und auch erst Stunden später. Er kam dann aber auch tatsächlich und ich copy-und-pastete ihn in den entsprechenden Auftrag bei inwx. Aber anders als bei bentlarsen.de wurde der Umzug nicht fast sofort ausgeführt, stattdessen passierte eine Woche lang gar nichts.
Nach dieser Woche erhielt ich eine Mail von inwx mit dem Hinweis
Transfer was not authorized by owner/admin contact. Please check whois email address.
Nun muss man dazu wissen, dass ICH Owner und Admin bin, und meine Emailadresse korrekt hinterlegt ist. Aber der Hinweis auf Whois machte mich stutzig, und siehe da: Als Inhaber der Domain wurde die “Cronon AG, Berlin” geführt, WTF. Kurze Recherche: Cronon ist eine Tochter von – Strato. Strato hatte den Transfer augenscheinlich selber abgelehnt.
Ich wurde ob der verschwendeten Woche etwas ungehalten gegenüber dem Support, was mir immerhin eine schnelle Antwort einbrachte. Ich müsse ein Formular auf Wechsel des Domaininhabers ausfüllen.
Ich bohrte nach: Warum das Ganze? Und vor allem: Wechsel von was auf was? Ich war ja schon Inhaber und wollte es auch bleiben! Ja, nee, das müsse sein, damit die Daten beim neuen Registrar genau zu denen bei Strato passten. Nun gut, das klang plausibel. Also gesagt, getan.
Kurze Zeit später die Antwort von Strato:
Wie ich in Ihren Kundendaten entnehmen konnte, stimmen diese schon mit dem Formular überein.
Was bedeutet das nun wieder? War jetzt irgendwas passiert, dass mich meine Domain übertragen lassen würde? Es klang nicht so. Und tatsächlich: Auf erneute Nachfrage erklärte man mir
Nach mehrfacher Überprüfung konnte ich feststellen, dass die Daten wie auf Ihren Formular übereinstimmen.
Das war nicht die Frage, verdammt!
Das das Vertragsende, der 08.06.2014 ist, bekommen Sie den Auth Code 1 Monat vor Vertragsende zugesandt. Wenn Sie den Auth Code schon vorher benötigen, dann haben Sie die Möglichkeit über den Kundenservicebereich wenn Sie bei Ihrer Domain sind, den Auth Code anzufordern.
Kurzfassung: Es war NICHTS geändert worden, da meine Daten bereits aktuell waren. Ich solle den AuthCode verwenden, der schon beim ersten mal nicht funktioniert hat. Meine Verärgerung wuchs. Der Support dazu:
Infolge meiner Überprüfung auf internic.net ist ersichtlich, dass unsererseits kein Registrarlock mehr auf der Domain crusy.net vorhanden ist. […] Dies teile ich Ihnen mit, da hierbei erwiesen ist, dass unsererseits einem Umzug Ihrer Domain nicht verhindert wird. Der AuthCode für die vorgenannte Domain wurde heute vormittag nochmal neu angefordert.
Aha. Wer genau hat den AuthCode denn nochmal angefordert? Ich jedenfalls nicht.
[…] von meinen beiden Kollegen, welche bereits den Schriftverkehr mit Ihnen führten.
Mmmkey… tatsächlich trudelten nun im Stundentakt AuthCodes bei mir ein 🙂 An welcher Stelle in der bisherigen Kommunikation das für nötig befunden wurde (denn aus Strato-Sicht ging es ja zwischenzeitlich um meine Kundendaten, nicht um AuthCodes) erschließt sich mir zwar nicht, aber wenn es denn so sein soll, probiere ich halt einen davon aus.
Und siehe da: 30 Minuten später bekomme ich eine Mail, dass ich über ein Webformular meinen Umzug bestätigen möge; 5 Stunden später ist die Domain umgezogen! So eine Mail hatte ich vorher nicht bekommen (nicht für bentlarsen.de und erst recht nicht für crusy.net) – was war dieses mal anders als beim ersten mal?
So richtig werde ich das nicht mehr rausbekommen, aber ich kann mir zwei Szenarien vorstellen:
Anyways: Unterhaltsame Anekdote aus der Service-Wüste Deutschland. Denn hätte Strato nicht nur nach Buzzwords in der jeweils letzten Mail gesucht, und/sondern mal die davor gelesen, wäre mir einiges an Zeit erspart geblieben.
Der Fehler
|
1 |
err: /Stage[main]/System/Exec[apt-get]/returns: change from notrun to 0 failed: Command exceeded timeout at /tmp/vagrant-puppet-1/modules-0/system/manifests/init.pp:8 |
aus einem Puppet, hier der bemängelte Teil:
|
1 2 3 4 5 6 |
exec { 'apt-get': command => 'apt-get update', path => '/usr/bin', tries => 3, timeout => 60 } |
kann mit mehr RAM behoben werden. Folgendes in’s Vagrantfile:
|
1 2 3 |
config.vm.provider :virtualbox do |vb| vb.customize ["modifyvm", :id, "--memory", "2048"] end |
Wenn ihr das hier lesen könnt, dann ist mein Umzug zu Uberspace komplett (zumindest aus Sicht eures RSS-Readers). Ich bin jetzt ein Ubernaut 😀 Danke an Tobi für den Tipp.
Aber Ernst beiseite. Worum geht’s bei Uberspace? Uberspace (von “Userspace”, nicht Übermensch oder so) ist Webhosting, “klassisch” ohne Domains (meine laufen deshalb jetzt bei InternetWorkX), dafür mit ungefähr allem anderen:
SSH. Perl. PHP. Python. Ruby. node.js. Erlang. Lua. Compiler. FastCGI. MySQL. CouchDB. MongoDB. Cronjobs. HTTPS. IMAP. SMTP. Webmail. qmail. vmailmgr. maildrop. SpamAssassin. ezmlm-idx. DSPAM. ~/service. runwhen. Eigene Logs. Backups. 10 GB Plattenplatz.
Zuerst war ich skeptisch, denn es gibt kein Backend-UI; alles wird per Shell konfiguriert. Allerdings macht alleine das (hey, Shell-Zugriff!) neugierig, und die Jungs haben ein spitzen Wiki – auch darin rumzustöbern lohnt den Extraufwand.
Hier trotzdem eine Kurzübersicht über das Einrichten von mehreren Domains auf demselben Uberspace, von dem die Jungs eigentlich eher abraten. Ich habe mich trotzdem dafür entschieden, denn: Bei Uberspace bezahlt man “so viel man will, mindestens 1 (!) €, besser 5 bis 10”. Nun hatte ich die Wahl, jeder Domain einen Space zu spendieren. Dann hätte ich das sinnvollerweise aber auch für die Subdomains von crusy.net machen müssen, denn dort “passiert” viel mehr. Gerade das Argument der Sicherheit zwischen Domains/Spaces zieht bei mir eigentlich nur bei den Subdomains von crusy.net. Nur wäre ich damit auf mindestens 13 Spaces gekommen, was erstens viel zu unübersichtlich und aufwendig (und was, wenn eine weitere Subdomain hinzukommt??), und zweitens viel zu teuer gewesen wäre – selbst mit dem 1 €, mit dem ich mir zu guter Letzt auch noch geizig vorgekommen wäre. Wenn ich mal was wirklich kritisches hoste (OwnCloud oder so), dann hole ich mir einen zweiten Space, aber so muss halt einer reichen.
Deshalb: Aufschalten verschiedener (Sub-) Domains geht bei Uberspace wie folgt:
Einloggen:
|
1 |
ssh username@servername.uberspace.de |
Host(s) als Webserver konfigurieren (-w)
|
1 2 3 |
uberspace-add-domain -d blog.crusy.net -w uberspace-add-domain -d photos.crusy.net -w uberspace-add-domain -d bentlarsen.de -w |
Host(s) als Mailserver konfigurieren (-m); man beachte den Namespace:
|
1 2 |
uberspace-add-domain -d crusy.net -m -e crusy uberspace-add-domain -d bentlarsen.de -m -e bent |
uberspace-add-domain gibt die IPv4- und IPv6-Daten für die Domain aus, die hinterlegt man im DNS-Eintrag bei (in meinem Fall) inwx. Damit steht dann die Verbindung zwischen Domain und Webspace. Allerdings muss man noch je einen Pseudo-Docroot pro (Sub-) Domain anlegen, diese landen nicht in ~/html, sondern parallel dazu. ~/html ist ein Symlink nach /var/www/virtual/username/html; die Pseudo-Docroots kommen also nach /var/www/virtual/username/xy.tld. Das jeweilige Docroot muss genau wie die Domain heißen.
Achtung: “www” ist eine Subdomain! Sie muss also sowohl mit uberspace-add-domain eingetragen werden, wie auch über ein Docroot verfügen. Nun will man nicht jeden Content doppelt halten, deshalb legt man in /var/www/virtual/username/ mittels
|
1 |
ln -s bentlarsen.de www.bentlarsen.de |
einen Symlink an.
Übrigens: Der erste Monat ist kostenlos, und ein neuer Uberspace ist anonym und in weniger als 30 Sekunden eingerichtet. Also gern mal ausprobieren – hach, ich bin jetzt Fan, merkt man gar nicht, oder?
Irgendwie bin ich gerade im Veränderungen-Modus. Anlass genug, daraus eine kleine Serie zu starten, die relativ profan beginnt: crusy.net hat ein neues Theme: Publish. So weit, so uninteressant. Für die Akten möchte ich aber kurz aufstellen, was ich normalerweise alles anpasse an so einem Theme:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
/* Überschreibt Silbentrennung, da die nicht gut funktioniert */ * { word-wrap: normal; -webkit-hyphens: none; -moz-hyphens: none; hyphens: none; } /* HREFs werden nicht mehr unterstrichen, was den cleanen Look unterstreicht */ a { text-decoration: none; } /* enfernt überflüssigen Abstand zwischen Footer und Seite */ .site { margin-bottom: 0; } /* gleicht die Abstände von Navigation und Suche an */ .site-header { margin-bottom: 0; } nav.main-navigation { margin-top: 0; } /* das Bild oben links wird rund */ .site-logo img { border-radius: 50% } /* Navigation lowercase */ .main-navigation a, .widget-area ul li a {text-transform: lowercase;} /* Navigation endet immer auf "." */ .main-navigation a:after, .widget-area ul li a:after { content: "."; } /* Gleicht Position des Suchfelds optisch aus; Fontsize angepasst */ #searchform { margin-left:-3px; font-size: 13px; } /* Innenabstand des Suchfelds angepasst */ #s { padding: 4px 3px 3px 4px; } /* Verbirgt Navigation von Post zu Post */ .post-navigation { display:none; } /* HREFs in der Tagline (unter dem Bild oben links) sehen aus wie normaler Text */ .site-description a { color: #999999; font-size: 13px; font-weight: 300; margin: 10px 0 20px; text-decoration: none; } |
Wozu den letzten Punkt? Nun, ich habe gerne eine zufällig gewählte “Tag line” in der Seite; eine Spielerei und gute Möglichkeit, Kalauer unterzubringen. Da ja nun meine Tweets rausgeflogen sind (siehe oben), möchte ich diese hier unterbringen, und zwar verlinkt. Optisch soll das aber nicht offensichtlich sein – nennt es ein Easteregg. Da werden sicherlich auch noch welche dazukommen oder rausfliegen.
So viel dazu.
ich habe schon wieder ein neues Theme: Ari von Elmastudio 🙂
Injects sind in Robotlegs 1.x/SwiftSuspenders 1.x erst mal verbindlich, so wie ich eine entsprechende Aussage von Till Schneidereit verstehe. Ein [Inject] führt dann zu einer Fehlermeldung:
Error: Injector is missing a rule to handle injection into property “myProperty” of object “[object MyClass]”. Target dependency: “com.acme.some.package::MyInjectType”, named “”
Der dort verlinkte Custom Build (Downloadübersicht siehe hier) enthält SwiftSuspenders 2, und das erlaubt optionale Injects. In meinem Test funktioniert das übrigens ohne ein “(optional=true)”, wie im oben verlinkten Thread vorgeschlagen – der Inject ist einfach null.
siehe Homepage und Kickstarter, via Katharina