<?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>ADI64 feat. n0stradamus &#187; do it yourself</title>
	<atom:link href="http://adrian.holfter.de/blog/tag/do-it-yourself/feed/" rel="self" type="application/rss+xml" />
	<link>http://adrian.holfter.de/blog</link>
	<description>Reiche Eltern für alle!</description>
	<lastBuildDate>Wed, 16 May 2012 09:13:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>teach the old Nokia 5800 some new tricks</title>
		<link>http://adrian.holfter.de/blog/en/2012/02/nokia-5800-neue-tricks-beibringen/</link>
		<comments>http://adrian.holfter.de/blog/en/2012/02/nokia-5800-neue-tricks-beibringen/#comments</comments>
		<pubDate>Wed, 22 Feb 2012 21:30:59 +0000</pubDate>
		<dc:creator>Markus</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[5800]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[do it yourself]]></category>
		<category><![CDATA[frisch]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[nokia]]></category>
		<category><![CDATA[s60v5]]></category>
		<category><![CDATA[symbian]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://adrian.holfter.de/blog/?p=738</guid>
		<description><![CDATA[Sorry, this entry is only available in Deutsch.]]></description>
			<content:encoded><![CDATA[<p>Sorry, this entry is only available in <a href="http://adrian.holfter.de/blog/tag/do-it-yourself/feed/">Deutsch</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://adrian.holfter.de/blog/en/2012/02/nokia-5800-neue-tricks-beibringen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reconnect Script For Level One WBR-6600</title>
		<link>http://adrian.holfter.de/blog/en/2011/11/wbr6600-reconnect/</link>
		<comments>http://adrian.holfter.de/blog/en/2011/11/wbr6600-reconnect/#comments</comments>
		<pubDate>Fri, 11 Nov 2011 16:28:04 +0000</pubDate>
		<dc:creator>Markus</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[autoit]]></category>
		<category><![CDATA[do it yourself]]></category>
		<category><![CDATA[gpl]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[reconnect]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[wbr6600]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://adrian.holfter.de/blog/?p=672</guid>
		<description><![CDATA[Here&#8217;s a little script I wrote for a not so ordinary router, the WBR-6600. Compared to others, its main difference is that it only accepts connection change requests, when you add your login ID as GET parameter. The login ID gets assigned every time you login and thus it is always different. AFAIK most other [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a little script I wrote for a not so ordinary router, the WBR-6600.</p>
<p>Compared to others, its main difference is that it only accepts connection change requests, when you add your login ID as GET parameter. The login ID gets assigned every time you login and thus it is always different. AFAIK most other routers handle sessions via cookies, so for those reconnect scripts can easily be made from within <a href="http://jdownloader.org" target="_blank">JDownloader</a> for example.</p>
<p>Anyway, if you happen to own one of these little machines, feel free to use my reconnect script. I wrote it in <a href="http://www.autoitscript.com/" target="_blank">AutoIT3</a>, source license is <a href="http://en.wikipedia.org/wiki/Gpl3">GPLv3</a>.</p>
<p>On first start a .ini file gets generated and opened, where you can type in the login information. It will also open if the script can&#8217;t login (but never more than one window).</p>
<p>I think other Level One routers may either work without or with little hacking of this script. So users with similar routers might enjoy to  make it work with their routers. If you do so, please share your results in the comments.</p>
<p>Enjoy <img src='http://adrian.holfter.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>PS: The configuration file gets written to the same path as the program is in, so make sure you put it somewhere with write access (C:\Users\you\Apps\reconnect for example).</p>
<p>Download:</p>
<ul>
<li><a href="http://adrian.holfter.de/blog/wp-content/uploads/2011/11/1.0.zip">1.0</a></li>
<li><a href="http://adrian.holfter.de/blog/wp-content/uploads/2011/11/source-1.0.zip">source-1.0</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://adrian.holfter.de/blog/en/2011/11/wbr6600-reconnect/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Combine Virtual DJ and foobar2000</title>
		<link>http://adrian.holfter.de/blog/en/2011/05/virtual-dj-mit-foobar2000-kombinieren/</link>
		<comments>http://adrian.holfter.de/blog/en/2011/05/virtual-dj-mit-foobar2000-kombinieren/#comments</comments>
		<pubDate>Tue, 10 May 2011 22:00:51 +0000</pubDate>
		<dc:creator>Markus</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[do it yourself]]></category>
		<category><![CDATA[fb2k]]></category>
		<category><![CDATA[flac]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[skin]]></category>
		<category><![CDATA[virtual dj]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[workaround]]></category>

		<guid isPermaLink="false">http://adrian.holfter.de/blog/?p=594</guid>
		<description><![CDATA[There&#8217;s that great freeware music player called foobar2000. I really use it a lot to, play music, rate music, sort music, apply good ID3 tags and so on. Sadly there&#8217;s no (official) linux version of it, so this post will be all about windows. You might be able to run both Virtual DJ and foobar2000 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://adrian.holfter.de/blog/wp-content/uploads/2011/05/fb2k_virtualdj.jpg"><img class="aligncenter" src="http://adrian.holfter.de/blog/wp-content/uploads/2011/05/fb2k_virtualdj-300x240.jpg" alt="" width="300" height="240" /></a></p>
<p>There&#8217;s that great freeware music player called <a title="fb2k homepage" href="http://www.foobar2000.org/" target="_blank">foobar2000</a>. I really use it a lot to, play music, rate music, sort music, apply good ID3 tags and so on. Sadly there&#8217;s no (official) linux version of it, so this post will be all about windows. You might be able to run both Virtual DJ and foobar2000 with wine though.</p>
<p>Anyway, my preferred DJ mix tool is Virtual DJ. Foobar can only do very basic crossfades which mostly sound acceptable, if you set the crossfade duration to 20 seconds and activate the skip silence DSP. However, if you would like to pump some good beats while changing the tracks at your party, you are better off using a real mixing software. Here&#8217;s where Virtual DJ comes in. Its transitions can sound waaaay better than these automated crossfades.</p>
<p>The only downside is, that it comes with a very bad music browser interface: It can not recognize tags of ogg and flac files, the search is very limited and it does not support custom tags on files, where it does actually scan them. Lately I found out that it is possible to drop songs directly on a deck from any application. Wohoo, that&#8217;s fucking awesome!</p>
<p>So let&#8217;s see, we&#8217;ve got a crappy music browser, which we want to replace with foobar. The only thing you are required to get exactly that is editing your preferred VDJ skin.</p>
<p>As they are zip compressed xml files, stored in <em>My Documents\VirtualDJ\Skins</em>, you need to unpack your favorite one and open it up in an editor.</p>
<p>Somewhere in the first line, you&#8217;ll see the height of the skin. Change it to what you like (type in some less value), rename and repack the zip file and you are ready to go. For performance reasons, you might want to delete the the <em>&lt;browser&gt;&#8230;&lt;/browser&gt;</em> stuff.</p>
<p>I recommend to set foobar2000&#8242;s output to your headphones, because then you have yet another deck for previews. (yes, there are more than 2 possible with virtual dj too, but they do not really sync well)</p>
<p>Oh and here are some foobar2000 plugins you might want to use with this combination:</p>
<ul>
<li><a href="http://www.hydrogenaudio.org/forums/index.php?showtopic=77143" target="_blank">foo_bpm</a> shows the beats per minute</li>
<li><a href="http://www.foobar2000.org/components/view/foo_wave_seekbar" target="_blank">foo_wave_seekbar</a> shows a waveform seekbar like on the Virtual DJ decks</li>
<li><a href="http://www.hydrogenaudio.org/forums/index.php?showtopic=59187" target="_blank">ratings</a></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://adrian.holfter.de/blog/en/2011/05/virtual-dj-mit-foobar2000-kombinieren/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Drawing a binary tree</title>
		<link>http://adrian.holfter.de/blog/en/2011/04/binarbaum-zeichnen/</link>
		<comments>http://adrian.holfter.de/blog/en/2011/04/binarbaum-zeichnen/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 14:52:04 +0000</pubDate>
		<dc:creator>n0stradamus</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[do it yourself]]></category>
		<category><![CDATA[n0stradamus]]></category>

		<guid isPermaLink="false">http://adrian.holfter.de/blog/?p=465</guid>
		<description><![CDATA[(Deutsch) In diesem Artikel möchte ich ein Verfahren erklären, der einem die links abgebildete Datenstruktur ähnlich wie bei einem Aufruf des Befehls pstree ausgiebt]]></description>
			<content:encoded><![CDATA[<p>This article is about drawing creating a function that supplies<img class="alignright" src="http://www.coder-wiki.de/uploads/Algorithmen/vollstaendiger-binaerbaum.png" alt="" width="143" height="100" /> data for drawing a <em>pstree -A</em>-like tree.</p>
<p>The result should look like this (Taking the tree on the right hand-side as an example &#8211; numbering from left to right):</p>
<p>&nbsp;</p>
<pre>[Root] + [Leaf 1, Layer 1] + [Leaf 1, Layer 2] + [Leaf 1, Layer 3]
         |                 |                    ` [Leaf 2, Layer 3]
         |                  ` [Leaf 2, Layer 1] + [Leaf 3, Layer 3]
         |                                       ` [Leaf 4, Layer 3]
          `[Leaf 2, Layer 1] + [Leaf 3, Layer 2] + [Leaf 5, Layer 3]
                             |                    ` [Leaf 2, Layer 3]
                              ` [Leaf 2, Layer 1] + [Leaf 3, Layer 3]
                                                   ` [Leaf 4, Layer 3]</pre>
<p><span id="more-465"></span></p>
<p>We&#8217;ll be drawing a Plus for every fork, then the name of the leaf and so on until a &#8220;final&#8221; leaf is reached (one that doesn&#8217;t fork). Then we&#8217;ll start a new line and draw a &#8220;|&#8221; under each &#8220;+&#8221; or &#8220;|&#8221; until we have reached the level where we want to add the second leafs&#8217; name.</p>
<p>My situation was the following: I had a list with object instances of the same type. The objects can refer to themselves through these attribtes (these attributes are a criteria for drawing the tree!):</p>
<pre>Objekt child1; <span style="color: #339966;">//Pointer to the first leaf of this instance</span>
Objekt child2; <span style="color: #339966;">//Pointer to the second leaf of this instance</span>
string name; <span style="color: #339966;">// The name of this instance
//The pointers refer to objects that are contained in the list.</span></pre>
<p>One object can have two children, referring to our tree-analogy it would mean that child2 is the second leaf from this leaf. We do not know, wether this special leaf itself is the child of another leaf. Nor do we need to: By using a recursive member-function this information is obsolete. Lets sum the function up in pseudo pseudo-code:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>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
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># The function receives a list as parameter</span>
<span style="color: #808080; font-style: italic;"># In this list, each index will symbolize a line that will later be printed</span>
<span style="color: #808080; font-style: italic;"># Index 0 of this list == the first line that will be printed etc...</span>
<span style="color: #ff7700;font-weight:bold;">def</span> generate_tree <span style="color: black;">&#40;</span>list_of_strings<span style="color: black;">&#41;</span>:
 <span style="color: #808080; font-style: italic;"># Append the objects name to the current line</span>
 list_of_strings.<span style="color: black;">back</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span> name <span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Depending on the amount of children our object has,</span>
<span style="color: #808080; font-style: italic;"># we'll append a &quot;+&quot; or a &quot;-&quot;:</span>
 <span style="color: #ff7700;font-weight:bold;">if</span> has_child1:
  <span style="color: #ff7700;font-weight:bold;">if</span> has_child2:
   list_of_strings.<span style="color: black;">back</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">&quot;+&quot;</span> <span style="color: black;">&#41;</span>
  <span style="color: #ff7700;font-weight:bold;">else</span>:
   list_of_strings.<span style="color: black;">back</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;-&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #808080; font-style: italic;"># Now we'll start the recursion</span>
  <span style="color: #808080; font-style: italic;"># The following is ought to symbolize a member-function call</span>
  child1.<span style="color: black;">generate_tree</span><span style="color: black;">&#40;</span> list_of_strings <span style="color: black;">&#41;</span>
&nbsp;
 <span style="color: #ff7700;font-weight:bold;">if</span> has_child2: <span style="color: #808080; font-style: italic;"># Check for a second child</span>
  buffer = <span style="color: #483d8b;">&quot;&quot;</span> <span style="color: #808080; font-style: italic;">#allocate a buffer</span>
  <span style="color: #808080; font-style: italic;"># Find the index of the last plus</span>
  p = list_of_strings.<span style="color: black;">back</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">find_last_of</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">&quot;+&quot;</span> <span style="color: black;">&#41;</span> 
  <span style="color: #808080; font-style: italic;"># Find the index of the last &quot;|&quot;</span>
  k = list_of_strings.<span style="color: black;">back</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">find_last_of</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">&quot;|&quot;</span> <span style="color: black;">&#41;</span> 
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">if</span> p <span style="color: #66cc66;">&lt;</span> k: <span style="color: #808080; font-style: italic;">#We'll have to take the higher value of the two</span>
   p = k
&nbsp;
<span style="color: #808080; font-style: italic;"># iterate from 0 to p in steps of one</span>
  <span style="color: #ff7700;font-weight:bold;">for</span> i=<span style="color: #ff4500;">0</span> | i <span style="color: #66cc66;">&lt;</span>= p | i++
   <span style="color: #ff7700;font-weight:bold;">if</span> i <span style="color: #66cc66;">&lt;</span> p:
    <span style="color: #ff7700;font-weight:bold;">if</span> list_of_strings.<span style="color: black;">back</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span> == <span style="color: #483d8b;">&quot;+&quot;</span> <span style="color: #ff7700;font-weight:bold;">or</span> list_of_strings.<span style="color: black;">back</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span> == <span style="color: #483d8b;">&quot;|&quot;</span>:
     buffer.<span style="color: black;">append</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">&quot;|&quot;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
     buffer.<span style="color: black;">append</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">&quot; &quot;</span> <span style="color: black;">&#41;</span>
   <span style="color: #ff7700;font-weight:bold;">else</span> <span style="color: #ff7700;font-weight:bold;">if</span> i == p:
    buffer.<span style="color: black;">append</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">&quot;`&quot;</span> <span style="color: black;">&#41;</span>
&nbsp;
  list_of_strings.<span style="color: black;">append</span><span style="color: black;">&#40;</span> buffer <span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #808080; font-style: italic;"># start another recursion</span>
  <span style="color: #808080; font-style: italic;"># this is a member-function call as well:</span>
  child2.<span style="color: black;">generate_tree</span><span style="color: black;">&#40;</span> list_of_strings <span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;"># END of the function</span></pre></td></tr></table></div>

<p>TheselLines demand a little explanation:<br />
Line 1: We append the name of the leaf to the last element in the list (meaning the last line).</p>
<p>Zeile 11-15: We decide the symbol used for the connection with the children, depending on the amount of children</p>
<p>Line 19/20: We call the function <em>generate_tree</em> in the first child. This way there is a guarantee, that all first children are printed directly after their &#8220;parent&#8221; (line 1 of the example-output)</p>
<p>Line 21: Now we have built a string for the first child. The part for the second will now follow.</p>
<p>Line 22-28: We&#8217;ll allocate a buffer, that will contain the newly constructed line. A new line is neccessary, because we can&#8217;t print two children in one line and still be able to show that they both belong to a common root. Then we find out the indices of the last &#8220;+&#8221; and the last &#8220;|&#8221; of the last line in the list and select the largest one.</p>
<p>Line 29-Ende: The selection of the two values previously found is only useful if we take the following for-loop into consideration. We check every Index of the last string in the list for &#8220;+&#8221;-es or &#8220;|&#8221;-es an draw a &#8220;|&#8221; beneath it (by appending it to our buffer). The non-&#8221;+/|&#8221; will be filled up through spaces. We&#8217;ll do this until <em>i == p</em>. After that we&#8217;ll append a &#8220;`&#8221; to the buffer (because it is now as wide as the last string in the list until the last &#8220;+&#8221;/&#8221;|&#8221; is). That indicates the &#8220;hook&#8221; for a second child.<br />
Now we have created a basis that the second child can append its information to. We&#8217;ll append the buffer to the list, thus creating a new &#8220;official&#8221; line and call <em>generate_tree</em> in the second child. Done <img src='http://adrian.holfter.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>This function only works if two conditions are given</p>
<ul>
<li>Using a monospace font when printing</li>
<li>The list given to the function when calling it from the root-element MUST NOT be empty. It should at least contain an empty string. Otherwise there will be segfaults.</li>
</ul>
<p>A C++-Implementation (comments are in german) could look like <a href="http://adrian.holfter.de/blog/wp-content/uploads/2011/04/objekt_de.cpp">this</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://adrian.holfter.de/blog/en/2011/04/binarbaum-zeichnen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kopfhörer selbst reparieren</title>
		<link>http://adrian.holfter.de/blog/en/2011/02/kopfhorer-selbst-reparieren/</link>
		<comments>http://adrian.holfter.de/blog/en/2011/02/kopfhorer-selbst-reparieren/#comments</comments>
		<pubDate>Thu, 03 Feb 2011 15:51:14 +0000</pubDate>
		<dc:creator>Markus</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[do it yourself]]></category>
		<category><![CDATA[fix]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[kopfhörer]]></category>
		<category><![CDATA[löten]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[reparieren]]></category>

		<guid isPermaLink="false">http://adrian.holfter.de/blog/?p=387</guid>
		<description><![CDATA[Ich hatte mir auf Amazon einen 30€ Kopfhörer bestellt. Ärgerlich, dass dieser nach ungefähr einem Monat schon nicht mehr richtig funktionierte, doch wie der Titel dieses Artikels vermuten lässt, war es kein großes Problem diesen wieder zu reparieren. Genauer gesagt ging der Stecker nicht, das lies sich dadurch feststellen, dass durch drehen, bzw. leichtes Herausziehen [...]]]></description>
			<content:encoded><![CDATA[<p>Ich hatte mir auf Amazon einen 30€ Kopfhörer bestellt. Ärgerlich, dass dieser nach ungefähr einem Monat schon nicht mehr richtig funktionierte, doch wie der Titel dieses Artikels vermuten lässt, war es kein großes Problem diesen wieder zu reparieren.</p>
<p>Genauer gesagt ging der Stecker nicht, das lies sich dadurch feststellen, dass durch drehen, bzw. leichtes Herausziehen die Qualität des Audiosignals deutlich geschwankt hatte oder überhaupt nicht mehr hörbar war.</p>
<p>Falls jemand ein ähnliches Problem hat, will ich hier kurz erklären, wie man dieses lösen kann.</p>
<p><strong>Benötigt:</strong></p>
<p>- Kopfhörer mit kaputtem Stecker</p>
<p>- alter Kopfhörer, bei dem der Stecker noch geht (der Rest darf ruhig hinüber sein) mit einem ähnlichaussehenden Leiter</p>
<p>- Lötkolben</p>
<p>- Schrumpfschlauch (Tape tut es auch, sieht aber nicht so schön aus)</p>
<p>- Abisolierzange/Schere</p>
<p>- Feuerzeug</p>
<p>- Tesafilm</p>
<p><strong>Vorgehensweise:</strong></p>
<p>- Beide Kopfhörer am Leiter so abschneiden, dass die gewünschte Länge erreicht wird + etwa 2 cm auf jeder seite zum verlöten</p>
<p>- die Leiterenden von den Stücken, die verwendet werden, abisolieren mit einer Abisolierzange (oder mit einer Schere ganz leicht einschneiden und die Isolierung herunterziehen)</p>
<p>- jetzt sollten bei beiden 3 Leiter in verschiedenen Farben sichtbar sein, falls nicht, anderen Stecker verwenden wenn noch welche vorhanden sind und auch abisolieren</p>
<p>- einen Schrumpfschlauch auf ca 3 cm zuschneiden und über einen der beiden Leiter weg von dem isolierten Bereich ziehen, damit er später verwendet werden kann</p>
<p>- die drei Leiter jeweils in verschiedene Richtungen biegen und vorsichtig mit einem Feuerzeug den Lack für ca. 1,5 cm wegbrennen</p>
<p>- beide kupferfarbenen (Masse) Leiter zusammendrehen</p>
<p>- die übrigen Leiter stehen für rechts bzw. links. Welcher welcher ist muss jetzt ausprobiert werden (zwei zusammendrehen, Kopfhörer an Player anstecken, hören wo rechts und links ist z.B. indem man die Balance auf dem Player in eine Richtung schiebt)</p>
<p>- die Leiter sollten jetzt richtig zusammengedreht (tipp: drehsinn beibehalten!) sein, noch immer in 3 verschiedene Richtungen senkrecht zu dem jetzt verbundenen Leiter wegstehen und Musik sollte angeschlossen und in gewohnter, guter Qualität hörbar sein</p>
<p>-  jetzt werden diese drei verdrehten Leiter festgelötet, wobei man zur überprüfung die Musik ruhig weiterlaufen lassen kann</p>
<p>- die drei werden alle in eine Richtung (z.B. in die des Steckers) gebogen und mit Tesafilm so übereinander geklebt, dass sie jeweils komplett voneinander isoliert sind.</p>
<p>- Falls man den Schrumpfschlauch verwendet hat, wird dieser nun über die Verbindungsstelle geschoben, so dass diese vollständig abgedeckt ist</p>
<p>- Der Schrumpfschlauch wird mit dem Feuerzeug erhitzt, damit er sich zusammenzieht und die Verbindungsstelle z.B. vor Regen schützt</p>
<p>&#8230;und das wärs auch schon. Viel Spaß mit dem reparierten Kopfhörer <img src='http://adrian.holfter.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>PS: 135° Stecker halten nach meiner Erfahrung am besten.</p>
]]></content:encoded>
			<wfw:commentRss>http://adrian.holfter.de/blog/en/2011/02/kopfhorer-selbst-reparieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Seagate Dockstar: USB-Stick schrotten vermeiden</title>
		<link>http://adrian.holfter.de/blog/en/2010/10/seagate-dockstar-usb-stick-schrotten-vermeiden/</link>
		<comments>http://adrian.holfter.de/blog/en/2010/10/seagate-dockstar-usb-stick-schrotten-vermeiden/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 17:21:29 +0000</pubDate>
		<dc:creator>ADI64</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Archlinux]]></category>
		<category><![CDATA[do it yourself]]></category>
		<category><![CDATA[Dockstar]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[USB]]></category>

		<guid isPermaLink="false">http://adrian.holfter.de/blog/?p=340</guid>
		<description><![CDATA[Ich hatte ebenfalls eine Plugbox (Archlinux für ARM-Prozessoren) -Installation auf einer Seagate Dockstar, wie im Artikel von n0stradamus hier auch gut beschrieben ist, am Laufen. Für 20€ so ein Powerhouse ist einfach saugeil Mein System lief auf einem 1GB USB-Stick und lief eigentlich ziemlich super. Lief. Ja. Das ist der Knackpunkt: Mein USB-Stick ist ziemlich [...]]]></description>
			<content:encoded><![CDATA[<p>Ich hatte ebenfalls eine Plugbox (Archlinux für ARM-Prozessoren) -Installation auf einer Seagate Dockstar, wie im <a href="http://adrian.holfter.de/blog/2010/09/archlinux-auf-der-seagate-dockstar/">Artikel von n0stradamus hier</a> auch gut beschrieben ist, am Laufen. Für 20€ so ein Powerhouse ist einfach saugeil <img src='http://adrian.holfter.de/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Mein System lief auf einem 1GB USB-Stick und lief eigentlich ziemlich super. Lief. Ja. Das ist der Knackpunkt: Mein USB-Stick ist ziemlich tot.</p>
<p><span id="more-340"></span>Das äußert sich darin, dass plötzlich irgendwelche Befehle nicht mehr tun, ich kryptische Errors um den Kopf geworfen bekomme und das System nicht mehr bootet, weil das ext2-fs so stark beschädigt ist, dass es nicht durch den routinemäßigen Check beim boot repariert werden kann, sondern manuell per e2fsck gefixt werden muss (von einem anderen pc aus).</p>
<p>Die Ursache dafür liegt darin, dass die in USB-Sticks und SD-Karten verbauten Flash-Chips zwar praktisch unendlich viele Lesevorgänge, aber nur ca. 10.000 &#8211; 100.000 Schreibzyklen pro Sektor verkraften. Das ist normalerweise absolut kein Problem, wenn man einfach nur &#8220;Daten&#8221; auf diesen Sticks zwischenspeichert. Außerdem versuchen die Hersteller meist, die Schreibvorgänge auf mehrere Sektoren zu verteilen, um ein Überschreiben von immergleichen Sektoren zu vermeiden. Letzteres kann aber natürlich nicht funktionieren, wenn der Stick quasi voll ist.</p>
<p>Wenn man aber ein Betriebssystem auf dem Stick betreibt, können diese Zyklen relativ schnell erreicht sein, vor allem durch Logfiles, Lockfiles und temporäre Daten. Auf diese Weise hat sich wie eingangs schon erwähnt mein (zugegeben ziemlich billiger und schon länger gebrauchter) USB-Stick verabschiedet.</p>
<p>Da viele Teile dermaßen beschädigt waren, dass das Reparieren verdammt aufwändig geworden wäre, habe ich das System von Neuem hochgezogen. Dabei habe ich mir die Frage gestellt: Wie kann ich vermeiden, dass das System wieder meinen Stick screwed? Als erstes kam mir die Idee, einfach das rootfs read-only zu mounten. Das hat aber zur Folge, sämtliche Schreiboperationen im RAM zu cachen. Da die Dockstar nur 128MB RAM hat, schied diese Möglichkeit aus. Als zweites kam mir die Idee, die ich jetzt auch umgesetzt habe:</p>
<h2>Flüchtige Daten in einer Ramdisk halten</h2>
<p>Das heißt, ich mounte mir einen Teil des spärlich vorhandenen RAMs als Datenträger und mappe ihn als Ersatz für die Verzeichnisse</p>
<ul>
<li>/var/log (Logfiles)</li>
<li>/var/lock (Sperr-Files)</li>
<li>/var/run (Daemon-PIDs)</li>
<li>/var/tmp (Temporäre Dateien)</li>
<li>/tmp (Temporäre Dateien).</li>
</ul>
<p>Dadurch fange ich fast alle Schreibzugriffe ab, welche im Dauerbetrieb eben anfallen. Änderungen an Configfiles etc. werden aber immernoch sofort auf den Stick geschrieben. Falls das System sich aufhängt, abstürzt oder ähnliche Scherze passieren, ist der &#8220;zusätzliche&#8221; Datenverlust also gering (nur die neueren Logfiles). Trotzdem: <strong>Hier werden einige Dateien nur im RAM vorgehalten. Wenn das System crasht oder die Daten vorm Ausschalten nicht von der Ramdisk auf den Stick gesichert werden, sind sie weg!</strong></p>
<p>Bevor ich mit der Anleitung beginne, sei hier die Seite<em> <a href="http://famvdploeg.com/blog/2008/03/putting-var-in-ram/" target="_blank">cat brain.stuff &gt; wordpress</a> </em>als Quelle genannt, da fast alle Informationen von dort stammen. Ich habe es lediglich zu Arch Linux / Plugbox Linux &#8220;geportet&#8221; und an meine Bedürfnisse angepasst.</p>
<h3>Anlegen der Verzeichnisse</h3>
<blockquote><p>mkdir /var/log-bak</p>
<p>mkdir /var/lock-bak</p>
<p>mkdir /var/run-bak</p>
<p>mkdir /var/tmp-bak</p>
<p>mkdir /tmp-bak</p>
<p>mkdir /run-bak</p>
<p>mkdir /mnt/ramdisk</p></blockquote>
<h3>Den Daemon anlegen</h3>
<p>Die Datei <em>/etc/rc.d/ramdisk</em> erstellen und folgendes hineinpasten:</p>
<blockquote><p>#!/bin/bash</p>
<p>. /etc/rc.conf<br />
. /etc/rc.d/functions</p>
<p>case &#8220;$1&#8243; in<br />
start)<br />
stat_busy &#8220;Copying files to ramdisk&#8221;</p>
<p>rm -Rf {/var/log-bak,/var/lock-bak,/var/run-bak,/var/tmp-bak,/tmp-bak,/run-bak}</p>
<p>mount &#8211;move /var/log /var/log-bak<br />
mount &#8211;move /var/lock /var/lock-bak<br />
mount &#8211;move /var/run /var/run-bak<br />
mount &#8211;move /var/tmp /var/tmp-bak<br />
mount &#8211;move /tmp /tmp-bak<br />
mount &#8211;move /run /run-bak</p>
<p>mkdir /mnt/ramdisk/var<br />
mkdir /mnt/ramdisk/var/log<br />
mkdir /mnt/ramdisk/var/lock<br />
mkdir /mnt/ramdisk/var/run<br />
mkdir /mnt/ramdisk/var/tmp<br />
mkdir /mnt/ramdisk/tmp<br />
mkdir /mnt/ramdisk/run<br />
mkdir /mnt/ramdisk/run/lock<br />
chmod 1777 /mnt/ramdisk/tmp<br />
chmod 1777 /mnt/ramdisk/var/lock<br />
chmod 1777 /mnt/ramdisk/var/tmp<br />
chmod 1777 /mnt/ramdisk/run</p>
<p>mount &#8211;bind /mnt/ramdisk/var/log /var/log<br />
mount &#8211;bind /mnt/ramdisk/var/lock /var/lock<br />
mount &#8211;bind /mnt/ramdisk/var/run /var/run<br />
mount &#8211;bind /mnt/ramdisk/var/tmp /var/tmp<br />
mount &#8211;bind /mnt/ramdisk/tmp /tmp<br />
mount &#8211;bind /mnt/ramdisk/run /run</p>
<p>cp -a -v /var/log-bak/* /var/log/ &gt;&gt; /var/log/ramdisk_sync.log<br />
cp -a -v /var/lock-bak/* /var/lock/ &gt;&gt; /var/log/ramdisk_sync.log<br />
cp -a -v /var/run-bak/* /var/run/ &gt;&gt; /var/log/ramdisk_sync.log<br />
cp -a -v /var/tmp-bak/* /var/tmp/ &gt;&gt; /var/log/ramdisk_sync.log<br />
cp -a -v /tmp-bak/* /tmp/ &gt;&gt; /var/log/ramdisk_sync.log<br />
cp -a -v /run-bak/* /run/ &gt;&gt; /var/log/ramdisk_sync.log</p>
<p>echo [`date +"%Y-%m-%d %H:%M"`] Ramdisk synced from HD &gt;&gt; /var/log/ramdisk_sync.log<br />
if [ $? -gt 0 ]; then<br />
stat_fail<br />
else<br />
add_daemon ramdisk<br />
stat_done<br />
fi<br />
;;<br />
stop)<br />
stat_busy &#8220;Switching off ramdisk, direct hdd write&#8221;<br />
rsync -av &#8211;delete /var/log/ /var/log-bak/<br />
rsync -av &#8211;delete /var/lock/ /var/lock-bak/<br />
rsync -av &#8211;delete /var/run/ /var/run-bak/<br />
rsync -av &#8211;delete /var/tmp/ /var/tmp-bak/<br />
rsync -av &#8211;delete /tmp/ /tmp-bak/<br />
rsync -av &#8211;delete /run/ /run-bak/</p>
<p># Unmount ramdisk bind<br />
umount /mnt/ramdisk/var/log<br />
umount /mnt/ramdisk/var/lock<br />
umount /mnt/ramdisk/var/run<br />
umount /mnt/ramdisk/var/tmp<br />
umount /mnt/ramdisk/tmp<br />
umount /mnt/ramdisk/run</p>
<p># Unmount move<br />
umount /var/log-bak<br />
umount /var/lock-bak<br />
umount /var/run-bak<br />
umount /var/tmp-bak<br />
umount /tmp-bak<br />
umount /run-bak</p>
<p># Deleting directories<br />
rm -Rf /mnt/ramdisk/*</p>
<p>echo [`date +"%Y-%m-%d %H:%M"`] Ramdisk synced to HD &gt;&gt; /var/log/ramdisk_sync.log<br />
if [ $? -gt 0 ]; then<br />
stat_fail<br />
else<br />
rm_daemon ramdisk<br />
stat_done<br />
fi<br />
;;<br />
sync)<br />
echo &#8220;Syncing log and lock files to harddisk&#8221;<br />
rsync -av &#8211;delete /var/log/ /var/log-bak/<br />
rsync -av &#8211;delete /var/lock/ /var/lock-bak/<br />
rsync -av &#8211;delete /var/run/ /var/run-bak/<br />
rsync -av &#8211;delete /var/tmp/ /var/tmp-bak/<br />
rsync -av &#8211;delete /tmp/ /tmp-bak/<br />
rsync -av &#8211;delete /run/ /run-bak/</p>
<p>echo [`date +"%Y-%m-%d %H:%M"`] Ramdisk synced to HD &gt;&gt; /var/log/ramdisk_sync.log<br />
;;</p>
<p>restart)<br />
$0 stop<br />
$0 start<br />
;;</p>
<p>*)<br />
echo &#8220;usage: $0 {start|stop|sync}&#8221;<br />
esac<br />
exit 0</p></blockquote>
<h3>Die /etc/fstab anpassen</h3>
<p>Dort eine Zeile hinzufügen à la</p>
<blockquote><p>tmpfs                   /mnt/ramdisk    tmpfs   size=64m        0       0</p></blockquote>
<p>Ich benutze hier bewusst tmpfs und nicht ramfs, da tmpfs bei akutem Ram-Mangel auf swap ausweicht, ramfs dies aber nicht tut. Weiterhin limitiere ich die Größe für die Ramdisk auf 64MB. Die Ramdisk wächst aber dynamisch, belegt also nur Platz, welchen sie auch braucht. Die 64MB sind nur ein grob geschätzter Maximalwert.</p>
<h3>/etc/rc.conf anpassen</h3>
<p>Hier sollte der Daemon als erster gestartet werden, damit so wenige Applikationen wie möglich den (sehr) kurzen Ausfall der oben genannten Verzeichnisse verkraften müssen. Euer DAEMONS-Array könnte also so aussehen:</p>
<blockquote><p>DAEMONS=(<strong>ramdisk </strong>syslog-ng network openntpd netfs crond sshd)</p></blockquote>
<h3>Logrotate anpassen</h3>
<p>Ein Punkt, der sich erst nach einiger Benutzung als wichtig herausgestellt hat: Die Logfiles können sehr groß werden und damit den RAM füllen. Um das zu verhindern, sollten die Logs in kurzen Zeitabständen rotiert werden.</p>
<p>Dazu passen wir die /etc/logrotate.conf an. Meine sieht so aus:</p>
<blockquote><p>daily</p>
<p>rotate 3</p>
<p>size 16M</p>
<p>create</p>
<p>compress</p>
<p>tabooext + .pacorig .pacnew .pacsave</p>
<p>include /etc/logrotate.d</p>
<p>/var/log/wtmp {</p>
<p>weekly</p>
<p>create 0664 root root</p>
<p>rotate 1</p>
<p>}</p></blockquote>
<h3>Abschließende Worte</h3>
<p>Soweit, so gut. Beim nächsten Neustart sollte euer System also nun den größten Teil der Schreiboperationen im RAM vorhalten. Ganz eilige können auch einfach den Daemon starten, es sollte auch so funktionieren. Was passiert, wenn ein Prozess genau dann der Meinung ist, ein Logfile schreiben zu müssen, wenn der Daemon gerade Verzeichnisse herumschiebt, kann ich absolut nicht vorhersagen.</p>
<p>Wenn ihr Verbesserungsvorschläge, Tipps, Kritik oder sonstigen Senf zum Zugeben habt, immer her damit.</p>
]]></content:encoded>
			<wfw:commentRss>http://adrian.holfter.de/blog/en/2010/10/seagate-dockstar-usb-stick-schrotten-vermeiden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ArchLinux auf der Seagate DockStar</title>
		<link>http://adrian.holfter.de/blog/en/2010/09/archlinux-auf-der-seagate-dockstar/</link>
		<comments>http://adrian.holfter.de/blog/en/2010/09/archlinux-auf-der-seagate-dockstar/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 17:02:33 +0000</pubDate>
		<dc:creator>n0stradamus</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Archlinux]]></category>
		<category><![CDATA[do it yourself]]></category>
		<category><![CDATA[Dockstar]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[Plugbox]]></category>

		<guid isPermaLink="false">http://adrian.holfter.de/blog/?p=312</guid>
		<description><![CDATA[Wer sich letztens eine dieser extrem günstigen Dockingstationen (~20€) gekauft hat, bekommt dafür ordentlich Dampf &#8211; geknechtet von BusyBox und einem nach bestimmter Nutzungsdauer kostenpflichtigen Dienst, nämlich Pogoplug. Hardware: - Marvell 88F6281 SoC mit 1,2 GHz Sheeva CPU - 128MB DDR2 - 256MB NAND-Flash - 3x USB 2.0 Ports - 1x Mini-USB für Seagate Go [...]]]></description>
			<content:encoded><![CDATA[<p>Wer sich letztens eine dieser extrem günstigen Dockingstationen (~20€) gekauft hat, bekommt dafür ordentlich Dampf &#8211; geknechtet von BusyBox und einem nach bestimmter Nutzungsdauer kostenpflichtigen Dienst, nämlich <a href="http://www.pogoplug.com/home-en.html?" target="_blank">Pogoplug</a>.</p>
<p><img class="alignleft size-medium wp-image-336" title="Seagate-FreeAgent-DockStar-Network-Adapter-front-back" src="http://adrian.holfter.de/blog/wp-content/uploads/2010/09/Seagate-FreeAgent-DockStar-Network-Adapter-front-back-284x300.jpg" alt="" width="204" height="216" />Hardware:</p>
<p>- Marvell 88F6281 SoC mit 1,2 GHz Sheeva CPU<br />
- 128MB DDR2<br />
- 256MB NAND-Flash<br />
- 3x USB 2.0 Ports<br />
- 1x Mini-USB für Seagate Go Festplatten<br />
- 100/1000 MBit Ethernet</p>
<p>Wer sich nicht mit den durch den Pogoplug-Dienst gegebenen Einstellungen/Einschränkungen zufriedengeben möchte, kann aber auch mit ein paar Tricks ein vollständig funktionstüchtiges PlugBoxLinux(eine auf Arch basierende Distro) an den Start bringen <img src='http://adrian.holfter.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><span id="more-312"></span>Bevor es losgeht, möchte ich auf die Gefahr hinweisen, dass man mit manchen dieser Schritte das Gerät bricken, also unnutzbar machen kann. Alles geschieht auf eigene Verantwortung.</p>
<p style="text-align: center;">&#8212;&#8212;</p>
<p>Aber no risk, no fun, also los gehts:</p>
<p>1. )Seagate Dockstar ans Netzwerk anschließen, aber darauf achten dass sie <em><strong><span style="color: #ff0000;">keinen</span></strong></em> Zugriff auf das Internet erhält.(Adi64 und ich haben einfach einen kleinen Switch genommen) Noch ist nämlich ein Service aktiv, der Updates installiert. Unter anderem eines, das ssh deaktiviert und das root-Passwort ändert&#8230;</p>
<p>2.)Die IP des Gerätes herausfinden.<br />
Bei uns hat es gereicht, die letzten beiden Byte der MAC-Addresse(steht unten drauf) zu kennen.<br />
Angenommen diese beiden Bytes wären AB(=171) und CD(=205), dann ist die IP <strong><em> </em></strong></p>
<pre style="padding-left: 60px;">169.254.171.205</pre>
<p>Wenn das bei euch nicht so sein sollte, kommt ihr nicht darum, die Dockstar per nmap zu suchen:</p>
<pre style="padding-left: 60px;">nmap -sP 169.254.0.0/16</pre>
<p>3.)Per ssh einlogggen:<em> </em></p>
<pre style="padding-left: 60px;">ssh root@169.254.171.205
root@169.254.171.205's password: stxadmin #ist für alle gleich <img src='http://adrian.holfter.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </pre>
<p>4.)Den Pogoplug-Updateservice abschießen und aus dem Startup rausnehmen: <em><strong> </strong></em></p>
<pre style="padding-left: 60px;">killall hbwd
mount -o remount,rw / #root als writeable remounten
vi /etc/init.d/rcS
#Jetzt die Zeile mit "/etc/init.d/hbmgr.sh start" auskommentieren
mount -o remount,ro /
#Jetzt kann man das Gerät theoretisch gefahrlos ans Netz anschließen</pre>
<p>5.)Backup, Backup, Backup. USB-Stick anschließen und danach die Daten sicher verwahren:</p>
<pre style="text-align: left; padding-left: 60px;">cd /tmp
mkdir usb
mount /dev/sda1 /tmp/usb
wget <a title="http://plugapps.com/os/pogoplug/uboot/nanddump" rel="nofollow" href="http://plugapps.com/os/pogoplug/uboot/nanddump">http://plugapps.com/os/pogoplug/uboot/nanddump</a>
chmod +x nanddump
./nanddump -nf usb/mtd0 /dev/mtd0
./nanddump -nf usb/mtd1 /dev/mtd1
./nanddump -nf usb/mtd2 /dev/mtd2
umount /dev/sda1</pre>
<p>6.)Das U-Boot, den Bootloader, installieren. Das ist an sich der gefährlichste Teil, weil ein Teil der Flash-Speichers bearbeitet wird. Ein Neustart danach ist nicht notwendig, es gibt ja noch nichts Besseres wo man reinbooten könnte <img src='http://adrian.holfter.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<pre style="padding-left: 60px;">cd /tmp
wget <a title="http://plugapps.com/os/pogoplug/uboot/install_uboot_mtd0.sh" rel="nofollow" href="http://plugapps.com/os/pogoplug/uboot/install_uboot_mtd0.sh">http://plugapps.com/os/pogoplug/uboot/install_uboot_mtd0.sh</a>
chmod +x install_uboot_mtd0.sh
./install_uboot_mtd0.sh</pre>
<p>7.)Einen USB-Stick(1GB sollte drin sein) formatieren, mit einer mindestens 512MB großen ext2-Partition. Das Formatieren muss nicht unbedingt auf dem DockStar erfolgen.</p>
<p>8.)PlugBox Linux herunterladen, auf dem USB-Stick speichern:</p>
<pre style="padding-left: 60px;">#cd auf den USB-Stick
wget <a title="http://plugapps.com/os/1.1/Plugbox-Linux-1.1-rootfs.tar.gz" rel="nofollow" href="http://plugapps.com/os/1.1/Plugbox-Linux-1.1-rootfs.tar.gz">http://plugapps.com/os/1.1/Plugbox-Linux-1.1-rootfs.tar.gz</a></pre>
<p>9.)Das heruntergeladene Archiv auf dem USB-Stick extrahieren, danach das Archiv löschen. Dies sollte auf der DockStar erfolgen, sonst drohen Berechtigungsprobleme (Danke an GerhardSchr!)</p>
<pre style="padding-left: 60px;">tar -xzvf Plugbox-Linux-1.1-rootfs.tar.gz # Dauert ein bisschen auf der Plugbox, ~15min
rm Plugbox-Linux-1.1-rootfs.tar.gz</pre>
<p>10.)Den USB-Stick einstecken, falls nicht schon geschehen und die Box neustarten. Auf das Beste hoffen ;D</p>
<pre style="padding-left: 60px;">/sbin/reboot</pre>
<p style="text-align: left;">11.)Nach dem Neustart ist die alte IP natürlich nicht mehr gültig. Die Box bezieht sie über DHCP, sofern ein entsprechender Router/Server vorhanden ist. Bewaffnet mit der MAC könnt ihr ja mal im Listing der auf dem Router angemeldeten Geräte nachschauen. <a href="http://wiki.archlinux.org/index.php/Using_SSH_Keys" target="_blank">Keys</a> und <a href="http://www.dyndns.com/" target="_blank">DynDNS</a> werden Vielnutzer von ssh bestimmt kennen und schätzen. Wenn nicht &#8211; es ist definitiv einen Versuch wert.</p>
<p style="text-align: center;">&#8212;&#8212;</p>
<p style="text-align: left;">Weiterführendes findet ihr <a href="http://www.plugapps.com/index.php5?title=PlugApps:Pogoplug_Setboot" target="_blank">hier</a>. Debian-Fans finden <a href="http://jeff.doozan.com/debian/" target="_blank">hier</a> etwas &#8211; hat bei Adi64 und mir leider nicht funktioniert.</p>
<p style="text-align: left;">Wer Gentoo ausprobieren möchte, wird <a href="http://ahsoftware.de/dockstar/" target="_blank">hier</a> fündig.</p>
<p style="text-align: left;">Diejenigen, die etwas mit ihrer LED tun möchten, werden <a href="http://www.plugapps.com/index.php5?title=DockStar_LED" target="_blank">hier</a> glücklich.</p>
<p style="text-align: left;">Beispiel: Mit folgenden 3 Befehlen blinkt die LED bei jeder ssh-Aktion auf der Box orange:</p>
<pre>modprobe xt_LED #Treiber laden
iptables -A INPUT -p tcp --dport 22 -j LED --led-trigger-id web --led-delay 100
echo netfilter-web &gt; /sys/class/leds/dockstar\:orange\:misc/trigger</pre>
<p style="text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://adrian.holfter.de/blog/en/2010/09/archlinux-auf-der-seagate-dockstar/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>Bootsplash einrichten</title>
		<link>http://adrian.holfter.de/blog/en/2010/06/bootsplash-einrichten/</link>
		<comments>http://adrian.holfter.de/blog/en/2010/06/bootsplash-einrichten/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 14:07:09 +0000</pubDate>
		<dc:creator>n0stradamus</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Archlinux]]></category>
		<category><![CDATA[do it yourself]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[fbsplash]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[n0stradamus]]></category>

		<guid isPermaLink="false">http://adrian.holfter.de/blog/?p=237</guid>
		<description><![CDATA[Nach meinem Wechsel von Ubuntu zu Arch habe ich den Startvorgang etwas aufpeppen wollen und versucht, einen Splash beim Boot anzeigen zu lassen. Zuerst einmal hat man die Wahl zwischen splashy und fbsplash. Ich habe mich für fbsplash entschieden und werde es in diesem Artikel behandeln. fbsplash findet man im AUR und im Wiki eine [...]]]></description>
			<content:encoded><![CDATA[<p>Nach meinem Wechsel von Ubuntu zu Arch habe ich den Startvorgang etwas aufpeppen wollen und versucht, einen Splash beim Boot anzeigen zu lassen.</p>
<p>Zuerst einmal hat man die Wahl zwischen splashy und fbsplash. Ich habe mich für fbsplash entschieden und werde es in diesem Artikel behandeln.</p>
<p>fbsplash findet man im <a href="http://aur.archlinux.org/packages.php?ID=13541" target="_blank">AUR</a> und im <a href="http://wiki.archlinux.org/index.php/Fbsplash">Wiki</a> eine sehr gute Einführung dazu. Ich bin den Leitfaden mehrere Male durchgegangen und immer wieder auf die gleiche Problematik gestoßen:</p>
<ul>
<li>Beim Hochfahren bekomme ich eine Fehlermeldung: &#8216;fbsplash was unable to start&#8230;theme not found&#8217;</li>
<li>Beim Herunterfahren funktioniert der Splash</li>
</ul>
<p>Abhilfe lässt sich mit folgender kleinen Änderung an den Kernelargumenten schaffen:<span id="more-237"></span></p>
<pre>logo.nologo quiet console=tty1 vga=<span style="color: #ff0000;">792</span> splash=silent,fadein,
fadeout,theme:&lt;theme-name&gt;
</pre>
<p>Den oben rot markierten Framebuffer-Wert gilt es nun mit dem gewünschten (und vom  Theme unterstützten!) Auflösungswert zu ersetzen, damit der Framebuffer auf den Wert gesetzt ist für den das Theme in /etc/conf.d/splash konfiguriert wurde &#8211; sonst startet fbsplash einfach nicht und es gibt die bekannte Fehlermeldung. Über diesen gesuchten Wert gibt uns folgender Befehl Aufschluss:</p>
<pre># hwinfo --framebuffer
</pre>
<p style="padding-left: 30px;"><a href="http://aur.archlinux.org/packages.php?ID=14977"><em>hwinfo im AUR</em></a></p>
<p>In meinem Fall sähe die geänderte Argumentzeile folgendermaßen aus:</p>
<pre>logo.nologo quiet console=tty1 vga=0x0324 splash=silent,fadein,
fadeout,theme:archax
</pre>
<p>Natürlich kann man die 0&#215;0324 auch in 804 konvertieren und hinter vga= schreiben, das ist aber reine Geschmackssache.</p>
<p>Ich vermute, dass die Startschwierigkeiten entweder mit meiner x86_64-Version von Arch zusammenhängen oder mit meiner Hardware:</p>
<blockquote><p>AMD Phenom II X4 955 BE</p>
<p>4GB OCZ DDR3-1600</p>
<p>ATI Radeon HD 4870 Vapor-X 2GB von Sapphire</p></blockquote>
<p>Im Wiki ist nämlich auch ein Wikipedia-Artikel mit den Framebuffer-Codes verlinkt, die für 1280&#215;1024 funktionieren sollen &#8211; bei mir tun sie es _nicht_: <a href="http://en.wikipedia.org/wiki/VESA_BIOS_Extensions#Linux_video_mode_numbers">*klick*</a></p>
<p>Nachdem fbsplash nun bei mir startete, flackerte es kurz nach seinem Start und wurde nach links verschoben &#8211; irgenwdie unschön. Die einzige Lösung die ich dafür finden konnte, war folgende Änderung an /etc/mkinitcpio.conf vorzunehmen und damit den Start von fbsplash <em>hinter</em> die Änderung der Bildschirmauflösung durch den Kernel zu legen:</p>
<blockquote><p>HOOKS=&#8221;base udev <span style="color: #ff0000;">fbsplash</span> autodetect pata scsi sata filesystems&#8221;</p></blockquote>
<p>ändern zu</p>
<blockquote><p>HOOKS=&#8221;base udev autodetect pata scsi sata filesystems<span style="color: #ff0000;"> fbsplash</span>&#8220;</p></blockquote>
<p>Es funktioniert, aber man sieht eben mehr von der Konsole und weniger vom Splash.</p>
<p>Für jegliche Lösungsvorschläge bin ich dankbar!</p>
]]></content:encoded>
			<wfw:commentRss>http://adrian.holfter.de/blog/en/2010/06/bootsplash-einrichten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Qwt Libraries installieren</title>
		<link>http://adrian.holfter.de/blog/en/2010/06/qwt-libraries-installieren/</link>
		<comments>http://adrian.holfter.de/blog/en/2010/06/qwt-libraries-installieren/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 16:17:07 +0000</pubDate>
		<dc:creator>n0stradamus</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[do it yourself]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[n0stradamus]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[workaround]]></category>

		<guid isPermaLink="false">http://adrian.holfter.de/blog/?p=213</guid>
		<description><![CDATA[Wer schon einmal versucht hat, Graphen in Qt zeichnen zu lassen, hat mit Sicherheit auf das Qwt-Framework zurückgegriffen. Leider lassen sich die Libs nicht so einfach in den Qt-Creator einbauen wie andere Standardlibs, zumindest war das bei mir der Fall. Für alle, die an einem nicht so wirklich richtig funktionieren Paketmanager gescheitert sind, ist hier [...]]]></description>
			<content:encoded><![CDATA[<p>Wer schon einmal versucht hat, Graphen in Qt zeichnen zu lassen, hat mit Sicherheit auf das Qwt-Framework zurückgegriffen. Leider lassen sich die Libs nicht so einfach in den Qt-Creator einbauen wie andere Standardlibs, zumindest war das bei mir der Fall.</p>
<p>Für alle, die an einem nicht so wirklich richtig funktionieren Paketmanager gescheitert sind, ist hier der Leitfaden:<span id="more-213"></span></p>
<p>1.  Qwt Libraries runterladen und entpacken in Verzeichnis <span style="color: #ff0000;">X</span>:</p>
<blockquote><p>http://www.qwt.sourceforge.net</p>
<p>tar -xzf foo.tar.gz</p></blockquote>
<p>2. Dann folgende Konsolenschritte:</p>
<blockquote><p>cd &#8216;<span style="color: #ff0000;">X</span>&#8216; <span style="color: #008000;">//Pfad in dem sich das extrahierte Qwt findet</span></p>
<p>qmake</p>
<p>sudo make</p>
<p>sudo make install</p></blockquote>
<p>3. Damit sei es getan, könnte man meinen, doch ich musste die qwt-Libraries noch vermerken und zwar in /usr/local/lib/libc.conf</p>
<blockquote><p>/usr/local/qwt-Name/lib</p>
<p><span style="color: #008000;">/*Name war in meinem Fall qwt-5.2.0*/</span></p></blockquote>
<p>4. Und zum Schluss:</p>
<blockquote><p>sudo ldconfig</p></blockquote>
<p>Teilt mir bitte Fehler mit, ich habe die Methode bisher nur ein paar Mal verwendet.</p>
]]></content:encoded>
			<wfw:commentRss>http://adrian.holfter.de/blog/en/2010/06/qwt-libraries-installieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Neuer Header</title>
		<link>http://adrian.holfter.de/blog/en/2009/07/neuer-header/</link>
		<comments>http://adrian.holfter.de/blog/en/2009/07/neuer-header/#comments</comments>
		<pubDate>Sun, 26 Jul 2009 18:52:28 +0000</pubDate>
		<dc:creator>ADI64</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[do it yourself]]></category>
		<category><![CDATA[frisch]]></category>
		<category><![CDATA[header]]></category>
		<category><![CDATA[photoshop]]></category>

		<guid isPermaLink="false">http://adrian.holfter.de/blog/?p=91</guid>
		<description><![CDATA[Wie euch vielleicht aufgefallen ist, hab ich einen neuen Header gebastelt. Das Theme, das ich auf dem Blog verwende, ist generell sehr beliebt und daher wird es auch dementsprechend oft benutzt. Da musste ein eigener Touch ran und der Header ist das Feature, das einen Blog im Endeffekt von anderen distanziert. Bastelanleitung: Man nehme das [...]]]></description>
			<content:encoded><![CDATA[<p>Wie euch vielleicht aufgefallen ist, hab ich einen neuen Header gebastelt.</p>
<p>Das Theme, das ich auf dem Blog verwende, ist generell sehr beliebt und daher wird es auch dementsprechend oft benutzt. Da musste ein eigener Touch ran und der Header ist das Feature, das einen Blog im Endeffekt von anderen distanziert.</p>
<p>Bastelanleitung:</p>
<p>Man nehme das <a title="AMD Athlon 64 Logo" href="http://de.wikipedia.org/w/index.php?title=Datei:AMD_Athlon64_Badge.svg&amp;filetimestamp=20070321193700" target="_blank">AMD Athlon 64-Logo</a> und lässt es von einem <a title="Thoughty's Blog" href="http://thoughtyblog.wordpress.com/" target="_blank">Freund</a> in Inkscape nachzeichnen &#8211; Fertig ist die 64 und man hat keine Urheberrechte verletzt.</p>
<p>Als Hintergrund ist fast alles erlaubt, ich habe <a title="DeviantArt - Showtime 2" href="http://venom339.deviantart.com/art/Showtime-2-121897385" target="_blank"><em>Showtime 2</em></a> von <a title="DeviantArt - *Venom339" href="http://venom339.deviantart.com/" target="_blank"><em>*Venom339</em></a> genommen.</p>
<p>Dann noch mit der Schriftart <a title="DaFont - Infinite Justice" href="http://www.dafont.com/infinite-justice.font?text=Adi" target="_blank">Infinite Justice</a> das <em>Adi</em> vor die 64 geknallt, Konturen, Schatten, runde Ecken etc. dazu und voilà!</p>
<p>Danke an Alle, deren Arbeit ich verwenden durfte!</p>
]]></content:encoded>
			<wfw:commentRss>http://adrian.holfter.de/blog/en/2009/07/neuer-header/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

