<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MuLus Blog</title>
	<atom:link href="https://blog.mulu.at/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.mulu.at</link>
	<description></description>
	<lastBuildDate>Tue, 18 Apr 2017 20:27:00 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.1</generator>
	<item>
		<title>mod_xsendfile mit Symlinks emulieren</title>
		<link>https://blog.mulu.at/2017/04/18/mod_xsendfile-mit-symlinks-emulieren/</link>
					<comments>https://blog.mulu.at/2017/04/18/mod_xsendfile-mit-symlinks-emulieren/#comments</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 18 Apr 2017 20:27:00 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[mod_xsendfile]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[symlink]]></category>
		<category><![CDATA[wordpres]]></category>
		<guid isPermaLink="false">https://blog.muellerlukas.de/?p=234</guid>

					<description><![CDATA[Moin zusammen, heute mal wieder ein Blogpost mit hoffentlich praktischem Nutzen. Jeder, der ein bisschen in der Webentwicklung tätig war, wird früher oder später auf ein Problem stoßen, wenn er große Dateien einer bestimmten Nutzergruppe zur Verfügung stellen muss. Da gibt es mehrere Möglichkeiten mit mehr oder weniger großen Nachteilen. &#8211; Per Scriptsprache ausliefern: Kann [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Moin zusammen,</p>
<p>heute mal wieder ein Blogpost mit hoffentlich praktischem Nutzen.<br />
Jeder, der ein bisschen in der Webentwicklung tätig war, wird früher oder später auf ein Problem stoßen, wenn er große Dateien einer bestimmten Nutzergruppe zur Verfügung stellen muss. Da gibt es mehrere Möglichkeiten mit mehr oder weniger großen Nachteilen.<br />
&#8211; Per Scriptsprache ausliefern: Kann man machen, aber irgendwann greift ggf. ein eingerichtetes Laufzeitlimit. Für größere Dateien also ungeeignet.<br />
&#8211; Dateipfad kryptisch benennen: Naja, Linkweitergabe, auch nicht sonderlich toll.<br />
&#8211; Per Webserver-Modul ausliefern: Damit wären wir beim Thema mod_xsendfile. Man sagt dem Modul mit einem Header welche Datei ausgeliefert werden soll. Vorher kann man dann die Rechte prüfen, Downloads zählen, &#8230; Nachteil: Das Modul muss installiert sein.<br />
Will der Hoster das Modul nicht installieren ist das natürlich suboptimal. Da das bei mir der Fall war hatte ich vor einigen Jahren mal eine Lösung mit temporären Symlinks entwickelt. Die funktioniert zwar, aber war recht schnell &#8211; Entschuldigung &#8211; hingerotzt.<br />
Da auch andere Leute an der Lösung interessiert waren, habe ich mich noch mal ein Wochenende hingesetzt und das als PHP-Klasse und WordPress-Plugin neu angefangen. Das Ergebnis und Nutzung stelle ich in diesem Post mal vor.<br />
<span id="more-234"></span>tl;dr: Die Klasse Plugin findet ihr aktuell nur in einem Github-Repo: <a href="https://github.com/muellerlukas/simulatesendfile">https://github.com/muellerlukas/simulatesendfile</a><br />
Oder auch direkt als WordPress-Plugin: <a href="https://github.com/muellerlukas/simulatesendfile_wordpress">https://github.com/muellerlukas/simulatesendfile_wordpress</a></p>
<p>Die generelle Funktionsweise von mod_xsendfile ist in etwa so:<br />
1) Der User will eine Datei runterladen und ruft einen Link auf.<br />
2) Das entsprechende Script prüft ggf. die Berechtigung des Downloads, zählt den Download, &#8230;<br />
3) Wenn das Script die Datei aufruft schickt es einen Header (je nach Webserver &#8222;<span class="pl-s1"><span class="pl-s">X-Sendfil</span></span>e&#8220;, &#8222;<span class="pl-s1"><span class="pl-s">X-Accel-Redirect</span></span>&#8220; oder &#8222;<span class="pl-s1"><span class="pl-s">X-Lighttpd-Sendfil</span></span>e&#8220;) mit dem Pfad zur Datei und beendet die Verarbeitung.<br />
4) Das Modul fängt diesen Header ab und liefert die Datei selbst aus.<br />
5) Somit spielt die Scriptlaufzeit keine Rolle mehr und auch große Dateien können ausgeliefert werden.<br />
Das ist natürlich schön weil man so seine üblichen Prüfroutinen beibehalten kann.</p>
<p>Da mein Hoster dieses Modul nicht installieren wollte, ich aber von der Scriptlaufzeit unabhängig sein wollte, wurde also eine Lösung (zumindest für PHP-Systeme) entwickelt: Die ganz grobe Funktionsweise versuche ich mal zu erläutern.<br />
1) Eine Methode wird als shutdown-Funktion bei PHP registriert, rennt also sobald das Script beendet wird &#8211; und damit kurz bevor die Kontrolle an den Webserver zurück geht.<br />
2) Sollte keiner der Header vorhanden sein, dann gibt es nichts zu tun.<br />
3) Ansonsten wird für die Datei ein Ordner mit Zufallswert + Symlink zu der Datei angelegt. Warum nicht direkt ein Symlink mit Zufallsnamen? Easy: So kriegt der Nutzer auch den Dateinamen direkt vorgegeben.<br />
4) Die entsprechenden Header werden nun entfernt und stattdessen eine Weiterleitung zum Symlink vorgenommen. Die Kontrolle ist wieder beim Webserver und der Nutzer kann runterladen.<br />
5) Zusätzlich gibt es einen Garbage-Collector der Symlinks + Ordner älter als 1 Stunde (standardmäßig, änderbar) löscht und somit weiteren Download verhindert</p>
<p>Leider gibt es Software (wie z.B. WooCommerce) mit Prüfung ob das Modul im Apache aktiviert ist. Ist das nicht der Fall wird weiterhin über PHP selbst aufgeliefert. Bei jedem Update patchen war mir zu blöd, also hat sich dafür dann auch ein ziemlich dreckiger Hack entwickelt. Eine Datei die ins Template eingebunden werden muss (&#8222;dirtyhacks.php&#8220;) erstellt die Funktion apache_get_modules() wenn sie nicht existiert und behauptet einfach: &#8222;mod_xsendfile ist installiert.&#8220;<br />
Das funktioniert so lange wie PHP nicht selbst als Modul installiert ist (was bei den meisten Sharehostern auch nicht der Fall ist). Als Modul gibt es die Funktion und kann somit nicht einfach überschrieben werden. (Okay, mit einer PECL-Extension. Aber wenn ich die installieren kann, dann kann ich auch das Modul installieren.)</p>
<p>Das war&#8217;s eigentlich an sich auch schon. Im Repo ist auch eine kurze Readme enthalten mit einem kleinen Beispiel zur Verwendung.<br />
Dazu muss ich allerdings noch sagen: Sowohl die Klasse udn auch das WordPress-Plugin sind aktuell noch in einem sehr frühen Stadium. So gab es noch keine genauen Tests mit Windows-Systemen (ja, da gibt es wieder Unterschiede bei den Symlinks), PHP &lt;7 und nginx &amp; Lighty.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.mulu.at/2017/04/18/mod_xsendfile-mit-symlinks-emulieren/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Warum TSDNS Mist ist</title>
		<link>https://blog.mulu.at/2017/02/10/warum-tsdns-mist-ist/</link>
					<comments>https://blog.mulu.at/2017/02/10/warum-tsdns-mist-ist/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 10 Feb 2017 17:18:45 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[record]]></category>
		<category><![CDATA[srv]]></category>
		<category><![CDATA[tdns]]></category>
		<category><![CDATA[teamspeak]]></category>
		<category><![CDATA[ts]]></category>
		<guid isPermaLink="false">http://blog.muellerlukas.de/?p=211</guid>

					<description><![CDATA[Vor ein paar Jahren hat Teamspeak die Software TSDNS ins Lebengerufen. War damals recht praktisch falls man als User einen Teamspeak-Server abweichend vom Standardport hatte, ihn via Subdomain auch ohne Portangabe erreichbar machen zu wollen aber beim Provider nur A-Records setzen zu dürfen. Nun hat sich mit 3.1 eine Neuigkeit ergeben die TSDNS ad absurdum [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Vor ein paar Jahren hat Teamspeak die Software TSDNS ins Lebengerufen. War damals recht praktisch falls man als User einen Teamspeak-Server abweichend vom Standardport hatte, ihn via Subdomain auch ohne Portangabe erreichbar machen zu wollen aber beim Provider nur A-Records setzen zu dürfen.<br />
Nun hat sich mit 3.1 eine Neuigkeit ergeben die TSDNS ad absurdum führt und nur einen wirklich kleinen Nutzen bringt.</p>
<h3><span id="more-211"></span>Ausgangsposition</h3>
<p>Ausgangsposition ist ein Teamspeak-Server mit der IP 192.0.2.2 auf Port 9990. Der soll nun so eingerichtet werden dass er via ts.example.com erreichbar sein soll. Auch soll die Portangabe im Client nicht nötig sein.</p>
<h3>Grundlegende Funktion von TSDNS</h3>
<p>Teamspeak selbst unterstützt SRV-Nameserver-Einträge. Nun gibt/gab es zu der Zeit einige Hoster die keine SRV-Einträge können. Als Workaround entstand dann TSDNS. Das läuft als Serverdienst und vermittelt dem Client die richtige Adresse. Als Beispiel:</p>
<ol>
<li>Verbunden werden soll zu ts.example.com</li>
<li>Der Client prüft ob ein A-Record existiert und verbindet sich zum TSDNS-Server auf Port <span class="st">41144</span></li>
<li>Wenn das klappt übermittelt der Client dem Server den ursprünglichen Namen &#8222;ts.example.com&#8220;</li>
<li>Der schaut nun ob in seiner Liste &#8222;ts.example.com&#8220; exisitert und liefert ggf. dann die IP und Port dazu.</li>
<li>Der Client nimmt diese Werte nun und verbindet sich direkt mit dem Server</li>
</ol>
<p>Damit ist eine Verbindung auch ohne SRV-Record möglich.</p>
<h3>Dämliche Änderung mit 3.1</h3>
<p>Mit TS 3.1 hat nun Teamspeak beschlossen dass TSDNS-Server nur noch gesucht werden wenn für die entsprechende (Sub)Domain auch einen SRV-Eintrag für den TSDNS-Server hat. Im Klartext: Wenn nur A-Records auf den Server zeigen wird keine Verbindung mehr zustande kommen können.<br />
Wenn ihr also keine SRV-Records setzen könnt, dann habt ihr &#8211; salopp gesagt &#8211; Pech gehabt. Entweder den A-Record direkt auf die Server-IP zeigen lassen und den Port mit angeben oder schauen dass man irgendwo einen Standardport bekommt.</p>
<h3>Wozu noch überhaupt TSDNS?</h3>
<p>Ich habe lange überlegen müssen wozu man überhaupt noch TSDNS nutzen soll, wenn es auch ein SRV-Record direkt auf den Server tut.<br />
Im Wesentlichen ist mir da nur ein Punkt eingefallen:<br />
Man kann die Server umziehen wie es einem passt und der Kunde muss die SRV-Einstellungen nicht ändern. Das erkauft man sich allerdings mit einem zentralen Server der &#8211; wenn er ausfällt &#8211; alle Namensauflösungen verhindert. Ein zusätzlicher Faktor also der die Verbindung verhindern kann.<br />
Sinnvoller wäre also ein direkter SRV-Record auf den direkten Teamspeak-Server. Die DENIC fordert für .de-Domains mindestens 2 DNS-Server. Und selbst falls die ausfallen: Die Chancen stehen gut dass die Daten noch im Cache beim Provider liegen.<br />
IMHO ist es durchaus zumutbar bei einem Serverwechsel die IP und den Port im Record zu ändern. Das sollte ja auch nicht alle Monate passieren. Im Idealfall natürlich gar nicht.</p>
<h3>Besser: Direkt den SRV-Record auf den TS-Server zeigen lassen</h3>
<p>Besser also direkt einen SRV-Record für den Teamspeak-Server setzen. Das hat neben dem fehlenden Risiko namens TSDNS nebenbei auch noch den tollen Beigeschmack von DNS-Caching z.B.<br />
Um den SRV-Eintrag RFC-konform anzulegen geht man man wie folgt vor (als Beispiel mal <a href="https://www.lima-city.de/?ref=297257">lima-city</a> (Ref-Link), weil ich den Artikel wohl öfter dort verlinken werde):</p>
<ol>
<li>A-Record für die Subdomain anlegen die man nutzen will mit der IP als Wert. [<a href="https://blog.muellerlukas.de/wp-content/uploads/2017/02/2017-02-10-17_23_33-Nameserver-Eintrag-anlegen-_-lima-city_-kostenloser-Webspace-1-1.png">Screenshot</a>]</li>
<li>SRV-Record mit dem Namen &#8222;_ts3._udp.example.com&#8220; (&#8222;example.com&#8220; ersetzt wird natürlich durch die gewünschte (Sub)Domain ersetzt)<br />
Der Inhalt ist &#8222;GEWICHT PORT ZIEL&#8220;. Gewicht kann in der Regel 0 bleiben. Port ist im Beispiel 9990 und das Ziel die oben angelegte Subdomain. Hier also &#8222;0 9990 ts.example.com&#8220;. [<a href="https://blog.muellerlukas.de/wp-content/uploads/2017/02/2017-02-10-17_41_21-Nameserver-Eintrag-anlegen-_-lima-city_-kostenloser-Webspace-1-1.png">Screenshot</a>]</li>
<li>Das wars. Wenn jetzt</li>
</ol>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.mulu.at/2017/02/10/warum-tsdns-mist-ist/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PortableApps Updater/Installer extern starten</title>
		<link>https://blog.mulu.at/2017/01/14/portableapps-updaterinstaller-extern-starten/</link>
					<comments>https://blog.mulu.at/2017/01/14/portableapps-updaterinstaller-extern-starten/#comments</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sat, 14 Jan 2017 14:13:46 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[portableapps]]></category>
		<category><![CDATA[portableapps.com]]></category>
		<guid isPermaLink="false">http://blog.muellerlukas.de/?p=202</guid>

					<description><![CDATA[Seit einiger Zeit nutze ich schon PStart als Launcher für meine USB-Sticks. Gleichzeitig aber einige Software von PortableApps. Ein Vorteil ist da natürlich das Updates bestehender Software. Leider lässt sich der Updater nicht direkt ausführen. Wirft nur eine Fehlermeldung dass der Updater nur aus dem Launcher raus gestartet werden kann. (Warum eigentlich?) Jetzt war ich [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Seit einiger Zeit nutze ich schon <a href="http://www.pegtop.net/start/" target="_blank" rel="noopener">PStart</a> als Launcher für meine USB-Sticks.<br />
Gleichzeitig aber einige Software von <a href="http://portableapps.com/" target="_blank" rel="noopener">PortableApps</a>. Ein Vorteil ist da natürlich das Updates bestehender Software.<br />
Leider lässt sich der Updater nicht direkt ausführen. Wirft nur eine Fehlermeldung dass der Updater nur aus dem Launcher raus gestartet werden kann. (Warum eigentlich?)<br />
Jetzt war ich es leid um ein Update zu starten den Launcher von PortableApps zu nutzen.<br />
Ich hab&#8216; mich jetzt mal durch den Source gewühlt und euch mal die passenden Paramter raus gesucht.</p>
<p><span id="more-202"></span><br />
Die Binary zum Updater lautet immer <code>{PortableApps-Verzeichnis}\PortableApps.com\PortableAppsUpdater.exe</code><br />
Es gibt dazu einige Optionen. Jede Option hängt ihr einfach an den Aufruf in der Form <code>/{Name}={Wert}</code> an.<br />
Ein Muss beim Aufruf sind dabei &#8222;MODE&#8220; mit dem Wert &#8222;UPDATE&#8220; und &#8222;CONNECTION&#8220; mit entsprechend brauchbarem Wert.<br />

<table id="tablepress-1" class="tablepress tablepress-id-1">
<thead>
<tr class="row-1">
	<th class="column-1">Name</th><th class="column-2">Wert</th><th class="column-3">Beschreibung</th>
</tr>
</thead>
<tbody class="row-striping row-hover">
<tr class="row-2">
	<td class="column-1">MODE</td><td class="column-2">ADD</td><td class="column-3">App installieren</td>
</tr>
<tr class="row-3">
	<td class="column-1"></td><td class="column-2">ADDALL</td><td class="column-3">Vermutung: Alle runterladen und installieren</td>
</tr>
<tr class="row-4">
	<td class="column-1"></td><td class="column-2">UPDATE</td><td class="column-3">Apps aktualisieren</td>
</tr>
<tr class="row-5">
	<td class="column-1">OPENSOURCEONLY</td><td class="column-2">true</td><td class="column-3">Nur OpenSource-Apps anzeigen</td>
</tr>
<tr class="row-6">
	<td class="column-1"></td><td class="column-2">false</td><td class="column-3">Auch ClosedSource-Apps anzeigen</td>
</tr>
<tr class="row-7">
	<td class="column-1">KEYBOARDFRIENDLY</td><td class="column-2">true</td><td class="column-3">Blendet Checkboxen aus</td>
</tr>
<tr class="row-8">
	<td class="column-1"></td><td class="column-2">false</td><td class="column-3">Blendet Checkboxen ein</td>
</tr>
<tr class="row-9">
	<td class="column-1">ADVANCED</td><td class="column-2">true</td><td class="column-3">?</td>
</tr>
<tr class="row-10">
	<td class="column-1"></td><td class="column-2">false</td><td class="column-3">?</td>
</tr>
<tr class="row-11">
	<td class="column-1">SHOWINSTALLEDAPPS</td><td class="column-2">true</td><td class="column-3">Installierte Apps anzeigen</td>
</tr>
<tr class="row-12">
	<td class="column-1"></td><td class="column-2">false</td><td class="column-3">Installierte Apps verstecken</td>
</tr>
<tr class="row-13">
	<td class="column-1">HIDEPORTABLE</td><td class="column-2">true</td><td class="column-3">Text "Portable" verstecken</td>
</tr>
<tr class="row-14">
	<td class="column-1"></td><td class="column-2">false</td><td class="column-3">Text "Portable" anzeigen</td>
</tr>
<tr class="row-15">
	<td class="column-1">BETA</td><td class="column-2">true</td><td class="column-3">Beta-Versionen einschließen</td>
</tr>
<tr class="row-16">
	<td class="column-1"></td><td class="column-2">false</td><td class="column-3">Beta-Version ausschließen</td>
</tr>
<tr class="row-17">
	<td class="column-1">ORDER</td><td class="column-2">title</td><td class="column-3">Nach Titel sortieren</td>
</tr>
<tr class="row-18">
	<td class="column-1"></td><td class="column-2">category</td><td class="column-3">Nach Kategorie sortieren</td>
</tr>
<tr class="row-19">
	<td class="column-1">CONNECTION</td><td class="column-2">Direct</td><td class="column-3">Direktverbindung</td>
</tr>
<tr class="row-20">
	<td class="column-1"></td><td class="column-2">Proxy</td><td class="column-3">Proxy-Verbindung (Daten siehe unten)</td>
</tr>
<tr class="row-21">
	<td class="column-1"></td><td class="column-2">Automatic</td><td class="column-3">Automatische Suche</td>
</tr>
<tr class="row-22">
	<td class="column-1">PROXYIP</td><td class="column-2"></td><td class="column-3">Proxy-IP</td>
</tr>
<tr class="row-23">
	<td class="column-1">PROXYPORT</td><td class="column-2"></td><td class="column-3">Proxy-Port</td>
</tr>
<tr class="row-24">
	<td class="column-1">STARTUP</td><td class="column-2">true</td><td class="column-3">Zeigt Banner</td>
</tr>
<tr class="row-25">
	<td class="column-1"></td><td class="column-2">false</td><td class="column-3">Versteckt Banner</td>
</tr>
<tr class="row-26">
	<td class="column-1">STARTUPSHOWERRORS</td><td class="column-2">true</td><td class="column-3">Fehler anzeigen</td>
</tr>
<tr class="row-27">
	<td class="column-1"></td><td class="column-2">false</td><td class="column-3">Fehler verstecken</td>
</tr>
</tbody>
</table>
</p>
<p>Den zusammengesetzten Aufruf kann man so jetzt problemlos in PStart einpflegen und spart sich den Umweg über den Launcher von PortableApps.<br />
Als Beispiele noch:<br />
Alle Apps updaten: <code>PortableAppsUpdater.exe /MODE=UPDATE /CONNECTION=AUTOMATIC</code><br />
Dialog um Apps zu installieren (nach Titel sortiert):<code> PortableAppsUpdater.exe /MODE=ADD /ORDER=title /CONNECTION=Automatic</code></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.mulu.at/2017/01/14/portableapps-updaterinstaller-extern-starten/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>/system bei Android rw remounten</title>
		<link>https://blog.mulu.at/2016/05/25/system-bei-android-rw-remounten/</link>
					<comments>https://blog.mulu.at/2016/05/25/system-bei-android-rw-remounten/#comments</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 25 May 2016 00:33:20 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Spielereien]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[root]]></category>
		<category><![CDATA[system]]></category>
		<guid isPermaLink="false">http://blog.muellerlukas.de/?p=179</guid>

					<description><![CDATA[Ab und an muss man die /system-Partion Read-Write mounten. Eigentlich sollten das Apps wie Link2SD oder der Total Commander automatisch machen. Link2SD ist mir seit dem Wechsel auf CM 13 mit der Meldung &#8222;Cannot move to /system/priv-app&#8220; beim Integrieren von Updates abgeschmiert. Also über die Shell probiert. Der übliche Befehl mount -o remount,rw /system sollte [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Ab und an muss man die /system-Partion Read-Write mounten.<br />
Eigentlich sollten das Apps wie Link2SD oder der Total Commander automatisch machen.<br />
Link2SD ist mir seit dem Wechsel auf CM 13 mit der Meldung &#8222;Cannot move to /system/priv-app&#8220; beim Integrieren von Updates abgeschmiert.<br />
Also über die Shell probiert.<br />
Der übliche Befehl <code>mount -o remount,rw /system</code> <strong>sollte</strong> das ja eigentlich tun.<br />
Nun, manchmal tut er das ohne Fehlermeldung einfach nicht. Die Lösung war simpel.<br />
<span id="more-179"></span><br />
Hat mich einige Stunden gekostet die Lösung zu finden:<br />
Standardmäßig wird die Binary /system/xbin/mount genutzt. Das ist ein Problem.<br />
Nutzt man direkt /system/bin/mount rennt das ohne Probleme und die Partition ist rw gemountet.<br />
<code>/system/bin/mount -o remount,rw /system</code> ist also das Kunststück. <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.mulu.at/2016/05/25/system-bei-android-rw-remounten/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Umzug zu all-inkl</title>
		<link>https://blog.mulu.at/2016/05/25/umzug-zu-all-inkl/</link>
					<comments>https://blog.mulu.at/2016/05/25/umzug-zu-all-inkl/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 25 May 2016 00:22:49 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[IT]]></category>
		<guid isPermaLink="false">http://blog.muellerlukas.de/?p=177</guid>

					<description><![CDATA[Moin Leute, aufgrund der aktuellen Situation (kein PHP7, kein Let&#8217;s encrypt, fehlernde Kommunikation, &#8230;) liegt die Domain mit Blog, etc. nun auch bei all-inkl. Heißt also: Ab jetzt mit PHP7 und einem schönen SSL-Zertifikat. Die nächsten Wochen beobachte ich mal die Geschwindigkeitsunterschiede zu PHP 5.]]></description>
										<content:encoded><![CDATA[<p>Moin Leute,</p>
<p>aufgrund der aktuellen Situation (kein PHP7, kein Let&#8217;s encrypt, fehlernde Kommunikation, &#8230;) liegt die Domain mit Blog, etc. nun auch bei all-inkl.<br />
Heißt also: Ab jetzt mit PHP7 und einem schönen SSL-Zertifikat.</p>
<p>Die nächsten Wochen beobachte ich mal die Geschwindigkeitsunterschiede zu PHP 5.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.mulu.at/2016/05/25/umzug-zu-all-inkl/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Windows 10 80 Jahre testen [Update]</title>
		<link>https://blog.mulu.at/2015/10/02/windows-10-80-jahre-testen/</link>
					<comments>https://blog.mulu.at/2015/10/02/windows-10-80-jahre-testen/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 02 Oct 2015 02:06:34 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[windows 10]]></category>
		<guid isPermaLink="false">http://blog.muellerlukas.de/?p=153</guid>

					<description><![CDATA[Seit einigen Windows-Versionen ist es möglich den Testzeitraum um 90 Tage zu erweitern. Das klappt auch noch mit Windows 10. Allerdings scheint Microsoft wohl ein kleiner Fehler unterlaufen zu sein. Damit kann man theoretisch den Testzeitrum auf 30030 ausdehnen. slmgr /dlv zeigt in dem Fall entsprechend die Anzahl der Verlängerungsmöglichkeiten. Bitte: 1001 Wie bei den [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Seit einigen Windows-Versionen ist es möglich den Testzeitraum um 90 Tage zu erweitern.<br />
Das klappt auch noch mit Windows 10. Allerdings scheint Microsoft wohl ein kleiner Fehler unterlaufen zu sein.<br />
Damit kann man theoretisch den Testzeitrum auf 30030 ausdehnen.</p>
<p><span id="more-153"></span><br />
<strong>slmgr /dlv</strong> zeigt in dem Fall entsprechend die Anzahl der Verlängerungsmöglichkeiten. Bitte: 1001<br />
<a href="https://blog.muellerlukas.de/wp-content/uploads/2015/10/2015-10-02-03_55_36-Windows-Script-Host-1-1.png"><img fetchpriority="high" decoding="async" src="http://blog.muellerlukas.de/wp-content/uploads/2015/10/2015-10-02-03_55_36-Windows-Script-Host-300x282.png" alt="2015-10-02 03_55_36-Windows Script Host" width="300" height="282" class="alignnone size-medium wp-image-154" /></a></p>
<p>Wie bei den anderen Versionen kann der Testzeitraum mit <strong>slmgr /rearm</strong> wieder auf 30 Tage gesetzt werden.</p>
<p>Mangels installierter Win10-Trial kann ich das hier so aktuell nicht testen. Werde ich die Tage nachholen und noch berichten.</p>
<p>Ich persönlich denke allerdings nicht, dass der Trick lange funktionieren wird. Endlich ein Grund die Funktion des Zwangsupdates in Win10 auszutesten.</p>
<p>Update vom 24.05.2016:<br />
Da die Aktivierung nach dem Update direkt über die HardwareId läuft und nicht mehr mit einem ProductKey fällt das Testen wohl erst mal flach. Auf meinem Arbeitsnotebook aktiviert sichs jetzt automatisch und da ich eh zum Arbeiten auf Debian umgestiegen bin ist das wohl obsolet.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.mulu.at/2015/10/02/windows-10-80-jahre-testen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Einfaches Tool für virtuelle CD-Laufwerke</title>
		<link>https://blog.mulu.at/2011/11/24/einfaches-tool-fur-virtuelle-cd-laufwerke/</link>
					<comments>https://blog.mulu.at/2011/11/24/einfaches-tool-fur-virtuelle-cd-laufwerke/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 24 Nov 2011 17:20:39 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[cd]]></category>
		<category><![CDATA[laufwerk]]></category>
		<category><![CDATA[virtuell]]></category>
		<guid isPermaLink="false">http://blog.muellerlukas.de/?p=95</guid>

					<description><![CDATA[Von mir auch mal wieder ein Lebenszeichen. Man kennt es ja, man hat ein CD/DVD-Image irgendwo geladen und will nun die entsprechende Software installieren. Dafür gibt es alle erdenklichen Software-Pakete zum mounten der Dateien als virtuelles Laufwerk. Ich nutze dazu seit einiger Zeit ein nettes kleines Tool von Microsoft. Es nennt sich &#8222;Virtual CDROM Control [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Von mir auch mal wieder ein Lebenszeichen.</p>
<p>Man kennt es ja, man hat ein CD/DVD-Image irgendwo geladen und will nun die entsprechende Software installieren.<br />
Dafür gibt es alle erdenklichen Software-Pakete zum mounten der Dateien als virtuelles Laufwerk.</p>
<p>Ich nutze dazu seit einiger Zeit ein nettes kleines Tool von Microsoft.</p>
<p><span id="more-95"></span></p>
<p>Es nennt sich &#8222;Virtual CDROM Control Panel&#8220; und damit lassen sich praktisch unbegrenzt virtuelle Laufwerke anlegen und entsprechend die Dateien mounten.</p>
<p>Auf jeden Fall unterstüzt werden iso-Images. Bei anderen Dateitypen bin ich mir nicht sicher, da war aktuell einfach noch kein Bedarf vorhanden.</p>
<p>Ein weiterer Pluspunkt ist für mich die Dateigröße &#8211; entpackt in etwa 40 Kilobyte groß.<br />
Bei Bedarf steht das gemountete Image dann auch noch nach einem Neustart zur Verfügung.</p>

<p>Zu finden ist es <a href="http://download.microsoft.com/download/7/b/6/7b6abd84-7841-4978-96f5-bd58df02efa2/winxpvirtualcdcontrolpanel_21.exe">hier</a>. Getestet von mir derzeit nur unter Windows XP.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.mulu.at/2011/11/24/einfaches-tool-fur-virtuelle-cd-laufwerke/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Facebook und die Daten-CD (Update 1)</title>
		<link>https://blog.mulu.at/2011/10/24/facebook-und-die-daten-cd/</link>
					<comments>https://blog.mulu.at/2011/10/24/facebook-und-die-daten-cd/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Mon, 24 Oct 2011 19:02:25 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[facebook]]></category>
		<guid isPermaLink="false">http://blog.muellerlukas.de/?p=89</guid>

					<description><![CDATA[Viele Leute haben sich ja bestimmt auch die CD mit den eigenen Daten bei Facebook beantragt. Ich habe hier nun meine Antwort bekommen. Man mag denken, was man will. Ich zumindest habe meine Entscheidung bezgl. Facebook getroffen. Wie schauts bei euch aus? Habt ihr auch so eine Mail bekommen? Hello, We have received your request [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Viele Leute haben sich ja bestimmt auch die CD mit den eigenen Daten bei Facebook beantragt. Ich habe hier nun meine Antwort bekommen.</p>
<p><span id="more-89"></span> Man mag denken, was man will. Ich zumindest habe meine Entscheidung bezgl. Facebook getroffen.<br />
Wie schauts bei euch aus? Habt ihr auch so eine Mail bekommen?</p>
<blockquote><p>Hello,</p>
<p>We have received your request for information about your personal data held by Facebook Ireland (“Facebook”). In regards to your request for details about the way your personal data are being handled by Facebook, we encourage you to have a look at the Privacy Policy (also called “Data Use Policy”), which provides for a description of:</p>
<p>• the categories of data being processed by Facebook,</p>
<p>• the personal data that Facebook receives from Facebook members,</p>
<p>• the purpose or purposes of the processing of such data,</p>
<p>• the source or sources(s) of the data, if known, and</p>
<p>• the recipients or categories of recipients to whom Facebook members’ personal data are or may be disclosed.</p>
<p>The Privacy Policy is available for view at <a href="https://www.facebook.com/about/privacy/">https://www.facebook.com/about/privacy/</a>.</p>
<p>We have included for your convenience the direct links to sections that refer to the categories of data we collect, the way we process them and the recipients of your data:</p>
<p>• We comprehensively disclose the categories of data processed and provide a description of the personal data constituting such data in the “information we receive about you” section of our Privacy Policy.</p>
<p>• We provided information as to how we process the personal data we collect in the “how we use the information we receive” section of our Privacy Policy.</p>
<p>• We provide our users with detailed and visually illustrated information about the categories of recipients to whom the data may be disclosed in the “sharing with other websites and applications” section of our Privacy Policy. It should be stressed that we never share user’s personal data with advertisers.</p>
<p>We have built a convenient self-service tool to offer people who use Facebook the opportunity to access the personal data we hold about them in accordance with the provisions of EU Directive 95/46/EC.</p>
<p>By offering this tool we are able to give you immediate access to your data at any time free of charge.  We have included all the data that we believe necessary to comply with the requirements of data protection law in this download.</p>
<p>As you may know, we are currently working with the Irish Data Protection Commission to review various aspects of our service including our response to subject access requests. If we make any changes to the data provided in response to such requests as a result of this review, then our self-service tool will be amended accordingly.  In that event, we will notify you again on completion of the review and you may wish to download your data again at that time.</p>
<p>Please note that this tool provides you with data that is currently held in your profile and does not generally include historic log records. We are examining the extent of the log records that should also reasonably be provided in response to a subject access request as part of the review by the Irish Data Protection Commission and will provide further information on the outcome of this consideration in due course.  Also please note that you can check in your account settings under “Payments” to ascertain whether we have your credit card information stored, and you may choose to change or delete it.</p>
<p>You can access the self-service data access tool by clicking “Download a copy of your Facebook data” at the link below:</p>
<p><a href="https://www.facebook.com/settings">https://www.facebook.com/settings</a>.</p>
<p>It is important to note that we have several measures in place to ensure the security of your information. Also, we require you to confirm your identity to complete the process. You will not be able to access the downloaded information until you have completed the security check.</p>
<p>Please note that your downloaded file may contain sensitive information. You should keep it secure and take precautions when storing, sending or uploading it to any other services.</p>
<p>Remember: You can also access your personal data anytime by logging in to Facebook. When you log in, you can correct, change or delete your information.</p>
<p>If you are having trouble logging in to your account, please visit:</p>
<p><a href="http://www.facebook.com/help/?page=174">http://www.facebook.com/help/?page=174</a></p>
<p>Thanks for contacting Facebook,</p>
<p>Facebook Ireland User Operations – Data Access Request Team</p>
<p>&nbsp;</p></blockquote>
<p>Da bin ich wohl nicht der Einzige. Wies weitergeht: http://europe-v-facebook.org/DE/Daten_verlangen_/Beschwerde_einreichen/beschwerde_einreichen.html</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.mulu.at/2011/10/24/facebook-und-die-daten-cd/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PHP DTAUS-Klasse</title>
		<link>https://blog.mulu.at/2010/01/10/php-dtaus-klasse/</link>
					<comments>https://blog.mulu.at/2010/01/10/php-dtaus-klasse/#comments</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 10 Jan 2010 17:18:01 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[dtaus]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sourceforge]]></category>
		<guid isPermaLink="false">http://blog.muellerlukas.de/?p=82</guid>

					<description><![CDATA[Beim Arbeiten an einer Vereinsverwaltung kam irgendwann der Punkt, an dem die Mitgliedsbeiträge halbautomatisch eingezogen werden sollten.
Deutsche Banken haben für solche Fälle (Massenlastschriften und -überweisungen) ihr eigenes Format entwickelt.]]></description>
										<content:encoded><![CDATA[<p>Beim Arbeiten an einer Vereinsverwaltung kam irgendwann der Punkt, an dem die Mitgliedsbeiträge halbautomatisch eingezogen werden sollten.<br />
Deutsche Banken haben für solche Fälle (Massenlastschriften und -überweisungen) ihr eigenes Format entwickelt.</p>
<p><span id="more-82"></span></p>
<p>Simpel gesagt besteht eine DTAUS-Datei aus 3 Teilen: A-, C- und E-Satz.<br />
Der A-Satz enthält allgemeine Infos wie Typ, Sender, Referenznummer und Ausführungsdatum.<br />
Der E-Satz enthält Checksummen aus Kontonummern, Bankleitzahlen und Betrag.</p>
<p>Das nervigste überhaupt ist der C-Satz, der mehrfach vorkommen kann. Jeder Satz steht für einen Datensatz.<br />
Name und Verwendungszeck besitzen ihr eigenes Feld, das aber max. 27 Zeichen lang sein darf.<br />
Da durchaus &#8218;mal ein längere Satz vorkommen kann, gibt es sog. &#8222;Erweiterungssätze&#8220;. Maximal 15 an der Zahl.<br />
Ein Erweiterungssatz besteht aus einer ID + 27 Zeichen. Gesamt kann also ein Name oder Verwendungszweck 432 Zeichen lang sein: 27 + 15 * 27</p>
<p>Allerdings teilen sich Name Sender, Name Empfänger, Verwendungszweck die Sätze. Damit steht z.B. folgende Möglichkeit zur Verfügung: Sendername von 54, Empfängername von 81 und Verwendungszweck von 297 Zeichen.<br />
Mehr ist einfach nicht drin.<br />
Das klingt ja an sich gar nicht mal so schlecht, wäre da nicht noch ein Haken: Es gibt 5 Blöcke in denen die Erweiterungssätze untergebracht werden.<br />
1. Block: Max. 2 Sätze<br />
3. bis 5. Block: Max. 4 Sätze<br />
6. Block: Max. 1 Satz<br />
Dabei muss allerdings jeder Block 128 Zeichen lang sein. Im Klartext: Auffüllen wenn&#8217;s nicht passt. Yay!</p>
<p>Naja, nachdem ich an diesem &#8222;Ding&#8220; mehre Tage saß, bin ich nun so weit, es als Alpha zu bezeichnen.<br />
Es muss zwar noch ein wenig dran geschraubt werden und ein Beispiel ist auch noch nötig, aber &#8222;soweit, so gut&#8220;: <a title="http://phpdtaus.sourceforge.net/" href="http://phpdtaus.sourceforge.net/">http://phpdtaus.sourceforge.net/</a></p>
<p>Viel Spaß!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.mulu.at/2010/01/10/php-dtaus-klasse/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title>Twitter und Blog</title>
		<link>https://blog.mulu.at/2009/10/14/twitter-und-blog/</link>
					<comments>https://blog.mulu.at/2009/10/14/twitter-und-blog/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 14 Oct 2009 07:54:33 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<guid isPermaLink="false">http://blog.muellerlukas.de/?p=72</guid>

					<description><![CDATA[Wie man sieht, ist&#8217;s hier seit einiger Zeit ganz schön ruhig geworden. Das liegt daran, dass ich Dinge, die ich eigentlich bloggen sollte nur noch über Twitter verbreite. Ich habe mir deshalb geschworen, wieder mehr zu bloggen. Meistens werden Tweets und Blogposts vom gleichen Thema handeln. Hier im Blog wird dann logischerweise der lange und [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Wie man sieht, ist&#8217;s hier seit einiger Zeit ganz schön ruhig geworden.<br />
Das liegt daran, dass ich Dinge, die ich eigentlich bloggen sollte nur noch über Twitter verbreite.</p>
<p>Ich habe mir deshalb geschworen, wieder mehr zu bloggen.<br />
Meistens werden Tweets und Blogposts vom gleichen Thema handeln.<br />
Hier im Blog wird dann logischerweise der lange und detailreichere Text zu finden sein. Hoffentlich dekoriert mit Bildern. <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Wie man sieht, hinterlässt Twitter auch schon seine Spuren im Blog. Die Posts werden immer kürzer.<br />
Aber auch das gibt sich sicherlich wieder.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.mulu.at/2009/10/14/twitter-und-blog/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
