<?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>frickelblog</title>
	<atom:link href="http://frickelblog.de/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://frickelblog.de</link>
	<description>...ein mal im leben mit Profis zusammen arbeiten ;o)</description>
	<lastBuildDate>Mon, 07 May 2012 10:48:27 +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>Redmine beim speichern nach Update langsam</title>
		<link>http://frickelblog.de/?p=934</link>
		<comments>http://frickelblog.de/?p=934#comments</comments>
		<pubDate>Mon, 07 May 2012 10:48:27 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://frickelblog.de/?p=934</guid>
		<description><![CDATA[Im Februar habe ich unser internes Redmine geupdatet, seit dem war es beim speichern von Tickets sehr träge. Was niemanden aufgefallen war, ist das die Mail-Benachrichtigungen auch nicht funktionierten (vermutlich haben sie alle aufgrund der flut von Benachrichtigungen abgestellt). Heute hatte ich etwas Zeit mich mit dem Problem auseinander zu setzen &#8211; und in der [...]]]></description>
			<content:encoded><![CDATA[<p>Im Februar habe ich unser internes Redmine geupdatet, seit dem war es beim speichern von Tickets sehr träge.<br />
Was niemanden aufgefallen war, ist das die Mail-Benachrichtigungen auch nicht funktionierten (vermutlich haben sie alle aufgrund der flut von Benachrichtigungen abgestellt).<br />
Heute hatte ich etwas Zeit mich mit dem Problem auseinander zu setzen &#8211; und in der Tat gibt es einen Zusammenhang zwischen beiden Problemen.<br />
<span id="more-934"></span><br />
Das Log im Verzeichnis &#8220;\apps\redmine\log\production.log&#8221; sagte mir beim speichern folgendes:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">Processing IssuesController<span style="color: #666666; font-style: italic;">#update (for 192.168.50.35 at 2012-05-07 12:20:59) [PUT]</span>
  Parameters: <span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #ff0000;">&quot;time_entry&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #ff0000;">&quot;comments&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;&quot;</span>, <span style="color: #ff0000;">&quot;activity_id&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;&quot;</span>, <span style="color: #ff0000;">&quot;hours&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #7a0874; font-weight: bold;">&#125;</span>, <span style="color: #ff0000;">&quot;commit&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;OK&quot;</span>, <span style="color: #ff0000;">&quot;notes&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;&quot;</span>, <span style="color: #ff0000;">&quot;action&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;update&quot;</span>, <span style="color: #ff0000;">&quot;_method&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;put&quot;</span>, <span style="color: #ff0000;">&quot;authenticity_token&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;0RU+iLOpgDyYrvHfzeTpeUNT4pTMSI7gbwG79mDV6UM=&quot;</span>, <span style="color: #ff0000;">&quot;id&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;265&quot;</span>, <span style="color: #ff0000;">&quot;issue&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #ff0000;">&quot;start_date&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;2012-04-04&quot;</span>, <span style="color: #ff0000;">&quot;custom_field_values&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #ff0000;">&quot;2&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;TAL&quot;</span><span style="color: #7a0874; font-weight: bold;">&#125;</span>, <span style="color: #ff0000;">&quot;estimated_hours&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;&quot;</span>, <span style="color: #ff0000;">&quot;parent_issue_id&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;&quot;</span>, <span style="color: #ff0000;">&quot;priority_id&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;4&quot;</span>, <span style="color: #ff0000;">&quot;is_private&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;0&quot;</span>, <span style="color: #ff0000;">&quot;lock_version&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;5&quot;</span>, <span style="color: #ff0000;">&quot;fixed_version_id&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;2&quot;</span>, <span style="color: #ff0000;">&quot;done_ratio&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;0&quot;</span>, <span style="color: #ff0000;">&quot;assigned_to_id&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;&quot;</span>, <span style="color: #ff0000;">&quot;subject&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;noch ein test ticket&quot;</span>, <span style="color: #ff0000;">&quot;category_id&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;&quot;</span>, <span style="color: #ff0000;">&quot;tracker_id&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;1&quot;</span>, <span style="color: #ff0000;">&quot;due_date&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;&quot;</span>, <span style="color: #ff0000;">&quot;status_id&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;1&quot;</span>, <span style="color: #ff0000;">&quot;description&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;blahblah&quot;</span><span style="color: #7a0874; font-weight: bold;">&#125;</span>, <span style="color: #ff0000;">&quot;controller&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;issues&quot;</span>, <span style="color: #ff0000;">&quot;attachments&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #ff0000;">&quot;1&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #ff0000;">&quot;description&quot;</span>=<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #7a0874; font-weight: bold;">&#125;</span><span style="color: #7a0874; font-weight: bold;">&#125;</span><span style="color: #7a0874; font-weight: bold;">&#125;</span>
Sending email notification to: sven.schmalle<span style="color: #000000; font-weight: bold;">@</span>intern.de
The following error occured <span style="color: #000000; font-weight: bold;">while</span> sending email notification: <span style="color: #ff0000;">&quot;535 5.7.0 Authentication failed
&quot;</span>. Check your configuration <span style="color: #000000; font-weight: bold;">in</span> config<span style="color: #000000; font-weight: bold;">/</span>configuration.yml.
Redirected to http:<span style="color: #000000; font-weight: bold;">//</span>buildserver<span style="color: #000000; font-weight: bold;">/</span>redmine<span style="color: #000000; font-weight: bold;">/</span>issues<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">265</span>
Completed <span style="color: #000000; font-weight: bold;">in</span> 6531ms <span style="color: #7a0874; font-weight: bold;">&#40;</span>DB: <span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000;">302</span> Found <span style="color: #7a0874; font-weight: bold;">&#91;</span>http:<span style="color: #000000; font-weight: bold;">//</span>buildserver<span style="color: #000000; font-weight: bold;">/</span>redmine<span style="color: #000000; font-weight: bold;">/</span>issues<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">265</span><span style="color: #7a0874; font-weight: bold;">&#93;</span></pre></div></div>

<p>Da war der Fehler auch schon gefunden: &#8220;Authentication failed&#8221;.<br />
Das Problem hierbei allerdings war: Unser Interner Maislerver erfordert gar keine Authentifizierung.<br />
Also habe ich erst einmal ein Blick in die Config geworfen und sah folgendes:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># default configuration options for all environments</span>
default:
  <span style="color: #666666; font-style: italic;"># Outgoing emails configuration (see examples above)</span>
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      tls: <span style="color: #c20cb9; font-weight: bold;">false</span>
      address: 192.168.50.225
      port: <span style="color: #000000;">25</span>
      domain: intern.de
      authentication: :plain
      user_name: <span style="color: #ff0000;">&quot;&quot;</span>
      password: <span style="color: #ff0000;">&quot;&quot;</span></pre></div></div>

<p>Nun die große Frage: Was genau ist an der Config falsch?<br />
Ich habe mit der tls Option rum gespielt und mit dem authentication typ (login statt plain) &#8211; Alles ohne erfolg.<br />
Am Ende habe ich die E-Mail Config der alten Redmine Version vor dem Update aus einem Backup wieder hergestellt und sah dort drin folgendes:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">production:
  delivery_method: :smtp
  smtp_settings:
    address: 192.168.50.225
    port: <span style="color: #000000;">25</span>
    domain: intern.de  
    authentication: :<span style="color: #c20cb9; font-weight: bold;">login</span>
    user_name: 
    password:</pre></div></div>

<p>Bis auf das die TLS Option fehlt und der authentication typ &#8220;login&#8221; ist ist mir nicht viel aufgefallen.<br />
Erst beim zweiten Blick fiel mir auf das in der neuen Config sowohl im Usernamen als auch im Passwort Gänsefüßchen stehen.<br />
Diese interpretierte Redmine dann auch als Strings für user und passwort um sich am SMTP Server zu Authentifizieren.<br />
Nach dem ich die Gänsefüßchen aus der Config gelöscht und Redmine neu gestartet habe funktionierte dann auch wieder das Speichern von Tickets flüssig als auch die E-Mail Benachrichtung vom Redmine <img src='http://frickelblog.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://frickelblog.de/?feed=rss2&#038;p=934</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Neue Registry Erkenntnisse</title>
		<link>http://frickelblog.de/?p=927</link>
		<comments>http://frickelblog.de/?p=927#comments</comments>
		<pubDate>Sat, 05 May 2012 15:06:54 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://frickelblog.de/?p=927</guid>
		<description><![CDATA[Ich habe zur zeit wieder etwas mehr Freizeit und bastle in dieser Freizeit mal wieder an Privaten Projekten. Heute habe ich mich an das KontextFTP gesetzt. Unter anderem war es nervig bei eingeschaltener UAC zu Benutzen. Dies lag daran das ich mit dem Programm die Registry ändern möchte um mich ins Kontext-Menü des Explorers einzubinden. [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe zur zeit wieder etwas mehr Freizeit und bastle in dieser Freizeit mal wieder an Privaten Projekten.<br />
Heute habe ich mich an das KontextFTP gesetzt.<br />
Unter anderem war es nervig bei eingeschaltener UAC zu Benutzen.<br />
Dies lag daran das ich mit dem Programm die Registry ändern möchte um mich ins Kontext-Menü des Explorers einzubinden.</p>
<p>Der Registry-Schlüssel der hierfür geändert wird ist folgender:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">HKEY_CLASSES_ROOT\*\Shell</pre></td></tr></table></div>

<p>Auf HKEY_CLASSES_ROOT gibt es aber keinen Zugriff für normale Benutzer.</p>
<p>Irgendwo im Netz habe ich nun durch Zufall gefunden, dass HKEY_CLASSES_ROOT nur ein Alias für folgende 2 Keys ist:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">HKEY_CURRENT_USER\Software\Classes
HKEY_LOCAL_MACHINE\Software\Classes</pre></td></tr></table></div>

<p>Unter HKEY_CURRENT_USER hat man als normaler Benutzer scheibrechte.<br />
Folgedem lege ich meine Registry-Keys nicht mehr unter</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">HKEY_CLASSES_ROOT\*\Shell</pre></td></tr></table></div>

<p>an, sondern unter:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">HKEY_LOCAL_MACHINE\Software\Classes\*\Shell</pre></td></tr></table></div>

<p>Seit dem Funktioniert das KontextFTP auch mit eingeschaltener UAC ohne Admin-Rechte anzufordern <img src='http://frickelblog.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://frickelblog.de/?feed=rss2&#038;p=927</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP: Version 5.4.0 mit eingebauten Webserver</title>
		<link>http://frickelblog.de/?p=918</link>
		<comments>http://frickelblog.de/?p=918#comments</comments>
		<pubDate>Wed, 21 Mar 2012 18:57:07 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://frickelblog.de/?p=918</guid>
		<description><![CDATA[Von anderen Sprachen ist man es schon länger gewohnt das der Interpreter selbst einen eingebauten &#8220;Development&#8221;-Webserver mit liefert. PHP hingegen hatte so etwas bis zur Version 5.4.0 nicht. Mit der aktuellen Version wurde dies aber auch bei PHP nach gerüstet, so dass wir jetzt mit PHP Webseiten direkt ohne zusätzlichen Webserver ausliefern können. Hierzu braucht [...]]]></description>
			<content:encoded><![CDATA[<p>Von anderen Sprachen ist man es schon länger gewohnt das der Interpreter selbst einen eingebauten &#8220;Development&#8221;-Webserver mit liefert.<br />
PHP hingegen hatte so etwas bis zur Version 5.4.0 nicht.<br />
Mit der aktuellen Version wurde dies aber auch bei PHP nach gerüstet, so dass wir jetzt mit PHP Webseiten direkt ohne zusätzlichen Webserver ausliefern können.<br />
<span id="more-918"></span><br />
Hierzu braucht man erst einmal PHP selbst welches man von <a href="http://php.net/downloads.php#v5">php.net</a> (oder<a href="http://windows.php.net/download/"> Windows Version</a> von ) beziehen kann.<br />
Der einfachheit halber gehe ich hier speziell auf die <a href="http://windows.php.net/download/">Windows-Version</a> ein.</p>
<p>Die ZIP-Datei habe ich bei mir in &#8220;H:\php\&#8221; ausgepackt.<br />
Ebenfalls in dem Ordner lege ich eine info.php mit folgendem Inhalt:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?</span> <span style="color: #b1b100;">echo</span> <span style="color: #990000;">phpinfo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Zusätzlich noch eine run.bat mit folgendem Inhalt:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="batch" style="font-family:monospace;">php.exe -S localhost:8000 -t .</pre></td></tr></table></div>

<p>-S sagt PHP nun das es als Webserver gestartet werden soll.<br />
Der folgende Parameter &#8220;localhost:8000&#8243; gibt an auf welchen Hostnamen bzw IP und Port der Webserver horchen soll.<br />
Der Parmaeter &#8220;-t .&#8221; gibt das verzeichnis mit den Webseiten an, welche zur verfügung gestellt werden sollen (in diesem Fall ist es der aktuelle Pfad in dem auch die php.exe liegt).</p>
<p>Nun rufen wir die run.bat auf.<br />
Als ergebnis sollte in einem konsolenfenster folgender Inhalt angezeigt werden:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="batch" style="font-family:monospace;">H:\php&gt;php.exe -S localhost:8000 -t .
PHP 5.4.0 Development Server started at Wed Mar 21 19:51:39 2012
Listening on localhost:8000
Document root is H:\php
Press Ctrl-C to quit.</pre></td></tr></table></div>

<p>Wenn wir jetzt im Browser die URL <a href="http://localhost:8000/info.php">http://localhost:8000/info.php</a> aufrufen, bekommen wir die ausgabe vom phpinfo() angezeigt <img src='http://frickelblog.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
Im Konsolenfenster werden zusätzlich noch die zugriffe angezeigt:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="batch" style="font-family:monospace;">[Wed Mar 21 19:53:37 2012] ::1:57822 [200]: /info.php
[Wed Mar 21 19:53:37 2012] ::1:57823 [200]: /info.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42
[Wed Mar 21 19:53:37 2012] ::1:57824 [200]: /info.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://frickelblog.de/?feed=rss2&#038;p=918</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C#: Objekte zu einem JSON String Serialisieren</title>
		<link>http://frickelblog.de/?p=912</link>
		<comments>http://frickelblog.de/?p=912#comments</comments>
		<pubDate>Fri, 09 Mar 2012 15:39:14 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://frickelblog.de/?p=912</guid>
		<description><![CDATA[Weil ich schon Mindestens 10 mal diese eine Klasse beu mir gesucht habe, schreibe ich sie jetzt hier auf! Sinn und Zweck des ganzen ist es ein Objekt in einen String zu Serialisieren. Da ich Aktuell JSON dem XML vorziehe Serialisiert die Klasse das Objekt vorzugsweise auch nach JSON In den Verweisen muss hierfür eine [...]]]></description>
			<content:encoded><![CDATA[<p>Weil ich schon Mindestens 10 mal diese eine Klasse beu mir gesucht habe, schreibe ich sie jetzt hier auf!</p>
<p>Sinn und Zweck des ganzen ist es ein Objekt in einen String zu Serialisieren.<br />
Da ich Aktuell JSON dem XML vorziehe Serialisiert die Klasse das Objekt vorzugsweise auch nach JSON <img src='http://frickelblog.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
<span id="more-912"></span></p>
<p>In den Verweisen muss hierfür eine Refezenz auf &#8220;System.Runtime.Serialization&#8221; hinzugefügt werden.</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
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Collections.Generic</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Linq</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Text</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.IO</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Runtime.Serialization.Json</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">namespace</span> Classes
<span style="color: #008000;">&#123;</span>
	<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> JSON
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> T JSONDeserialise<span style="color: #008000;">&lt;</span>T<span style="color: #008000;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> json<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			T obj <span style="color: #008000;">=</span> Activator<span style="color: #008000;">.</span><span style="color: #0000FF;">CreateInstance</span><span style="color: #008000;">&lt;</span>T<span style="color: #008000;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
			<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008000;">&#40;</span>MemoryStream ms <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> MemoryStream<span style="color: #008000;">&#40;</span>Encoding<span style="color: #008000;">.</span><span style="color: #0000FF;">Unicode</span><span style="color: #008000;">.</span><span style="color: #0000FF;">GetBytes</span><span style="color: #008000;">&#40;</span>json<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				DataContractJsonSerializer serializer <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> DataContractJsonSerializer<span style="color: #008000;">&#40;</span>obj<span style="color: #008000;">.</span><span style="color: #0000FF;">GetType</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
				obj <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span>T<span style="color: #008000;">&#41;</span>serializer<span style="color: #008000;">.</span><span style="color: #0000FF;">ReadObject</span><span style="color: #008000;">&#40;</span>ms<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
				<span style="color: #0600FF; font-weight: bold;">return</span> obj<span style="color: #008000;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
		<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">string</span> JSONSerialize<span style="color: #008000;">&lt;</span>T<span style="color: #008000;">&gt;</span><span style="color: #008000;">&#40;</span>T obj<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			DataContractJsonSerializer serializer <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> DataContractJsonSerializer<span style="color: #008000;">&#40;</span>obj<span style="color: #008000;">.</span><span style="color: #0000FF;">GetType</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
			<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008000;">&#40;</span>MemoryStream ms <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> MemoryStream<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				serializer<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteObject</span><span style="color: #008000;">&#40;</span>ms, obj<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
				<span style="color: #0600FF; font-weight: bold;">return</span> Encoding<span style="color: #008000;">.</span><span style="color: #0600FF; font-weight: bold;">Default</span><span style="color: #008000;">.</span><span style="color: #0000FF;">GetString</span><span style="color: #008000;">&#40;</span>ms<span style="color: #008000;">.</span><span style="color: #0000FF;">ToArray</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>So&#8230; Mit dieser Klasse wollen wir jetzt auch mal ein Objekt Serialisieren und danach wieder einlesen (Deserialisieren).<br />
Hierfür habe ich mir eine kleine Klasse geschrieben, welche mein Daten-Objekt zum testen abbilden soll.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> data
<span style="color: #008000;">&#123;</span>
	<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span> Name <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
	<span style="color: #0600FF; font-weight: bold;">public</span> DateTime Birth <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
	<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">bool</span> Deleted <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>In diesem Objekt gibt es einen String, ein DateTime und ein Bool um auch dem Umgang mit unterschiedlichen Datentypen zu demonstrieren.</p>
<p>Wollen wir nun ein Objekt dieser Klasse erstellen und dieses Serialisieren, sieht der Code wie folgt aus:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> button1_Click<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> sender, EventArgs e<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #008080; font-style: italic;">// erst das Daten-Objekt erzeugen</span>
	data DatenObj <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> data<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	DatenObj<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Sven Schmalle&quot;</span><span style="color: #008000;">;</span>
	DatenObj<span style="color: #008000;">.</span><span style="color: #0000FF;">Birth</span> <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> DateTime<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">1983</span>, 05, 08<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	DatenObj<span style="color: #008000;">.</span><span style="color: #0000FF;">Deleted</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
&nbsp;
	<span style="color: #008080; font-style: italic;">// dann das Datenobjekt Serialisieren</span>
	<span style="color: #6666cc; font-weight: bold;">string</span> JSONString <span style="color: #008000;">=</span> Classes<span style="color: #008000;">.</span><span style="color: #0000FF;">JSON</span><span style="color: #008000;">.</span><span style="color: #0000FF;">JSONSerialize</span><span style="color: #008000;">&lt;</span>data<span style="color: #008000;">&gt;</span><span style="color: #008000;">&#40;</span>DatenObj<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	textBox1<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span> <span style="color: #008000;">=</span> JSONString<span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Das Serialisierte Objekt (also der JSON-String, welcher das Daten-Objekt repräsentiert) wird nun in der TextBox &#8220;textBox1&#8243; angezeigt.</p>
<p>Wollen wir aus diesem JSON-String nun wieder ein Objekt erstellen, so sieht der Code wie folgt aus:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> button2_Click<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> sender, EventArgs e<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	data DatenObj <span style="color: #008000;">=</span> Classes<span style="color: #008000;">.</span><span style="color: #0000FF;">JSON</span><span style="color: #008000;">.</span><span style="color: #0000FF;">JSONDeserialise</span><span style="color: #008000;">&lt;</span>data<span style="color: #008000;">&gt;</span><span style="color: #008000;">&#40;</span>textBox1<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	propertyGrid1<span style="color: #008000;">.</span><span style="color: #0000FF;">SelectedObject</span> <span style="color: #008000;">=</span> DatenObj<span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Der JSON-String wird aus der TextBox geholt, in das Daten-Objekt Deserialisert und anschlißend im PropertyGrid angezeigt.<br />
Das Ganze sieht dann in etwa so aus:<br />
<a href="http://frickelblog.de/wp-content/uploads/2012/03/jsonserialize.jpg"><img src="http://frickelblog.de/wp-content/uploads/2012/03/jsonserialize.jpg" alt="" title="jsonserialize" width="569" height="300" class="alignnone size-full wp-image-913" /></a></p>
<p>Das Beispiel habe ich auch im SVN Repo abgelegt und ist unter folgender URL zu finden:<br />
<a href="http://code.google.com/p/frickelblog/source/browse/#svn%2Ftrunk%2Fsamples%2F20120309_JsonGeneric">http://code.google.com/p/frickelblog/source/browse/#svn%2Ftrunk%2Fsamples%2F20120309_JsonGeneric</a></p>
]]></content:encoded>
			<wfw:commentRss>http://frickelblog.de/?feed=rss2&#038;p=912</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Studio 11 Professional unter Windows 7</title>
		<link>http://frickelblog.de/?p=906</link>
		<comments>http://frickelblog.de/?p=906#comments</comments>
		<pubDate>Wed, 29 Feb 2012 16:54:22 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://frickelblog.de/?p=906</guid>
		<description><![CDATA[Bezugnehmend auf meinen Vorangegangen Post: Den Titel &#8220;Visual Studio 11 Express for Windows8&#8243; scheint Microsoft sehr wörtlich zu nehmen. Die Höhere Editionen ab Professinal lassen sich hingegen auch auf Windows 7 Installieren: Es Installiert &#8211; ich bin gespannt]]></description>
			<content:encoded><![CDATA[<p>Bezugnehmend auf meinen Vorangegangen Post:</p>
<p>Den Titel &#8220;Visual Studio 11 Express for Windows8&#8243; scheint Microsoft sehr wörtlich zu nehmen.<br />
Die Höhere Editionen ab Professinal lassen sich hingegen auch auf Windows 7 Installieren:</p>
<p><a href="http://frickelblog.de/wp-content/uploads/2012/02/vs11prof.png"><img src="http://frickelblog.de/wp-content/uploads/2012/02/vs11prof.png" alt="" title="vs11prof" width="460" height="600" class="alignnone size-full wp-image-907" /></a> </p>
<p>Es Installiert &#8211; ich bin gespannt <img src='http://frickelblog.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://frickelblog.de/?feed=rss2&#038;p=906</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Das neue Visual Studio 11 Express&#8230;</title>
		<link>http://frickelblog.de/?p=901</link>
		<comments>http://frickelblog.de/?p=901#comments</comments>
		<pubDate>Wed, 29 Feb 2012 16:30:39 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://frickelblog.de/?p=901</guid>
		<description><![CDATA[&#8230; möchte nicht unter Windows 7 Installieren: Schade aber auch.. hm.. und nu?]]></description>
			<content:encoded><![CDATA[<p>&#8230; möchte nicht unter Windows 7 Installieren:</p>
<p><a href="http://frickelblog.de/wp-content/uploads/2012/02/vsexpress11.png"><img src="http://frickelblog.de/wp-content/uploads/2012/02/vsexpress11.png" alt="" title="vsexpress11" width="460" height="600" class="alignnone size-full wp-image-902" /></a></p>
<p>Schade aber auch.. hm.. und nu?</p>
]]></content:encoded>
			<wfw:commentRss>http://frickelblog.de/?feed=rss2&#038;p=901</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bitnami Stack / Redmine 0.9.3 auf 1.3.1 unter Windows updaten</title>
		<link>http://frickelblog.de/?p=889</link>
		<comments>http://frickelblog.de/?p=889#comments</comments>
		<pubDate>Tue, 21 Feb 2012 08:00:45 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://frickelblog.de/?p=889</guid>
		<description><![CDATA[Heute ist der Tag gekommen, an dem ich mein Redmine (Unter Windows als Bitnami Stack) updaten werde. Ich habe seit der Initialen Installation die Version 0.9.3 installiert und möchte nun auf Version 1.3.1 updaten. Die Originale Update-Anleitung liegt hier: http://bitnami.org/article/how-to-backup-and-update-the-bitnami-redmine-stack Mein derzeit installiertes (altes) Redmine samt kompletten Bitnami-Stack liegt in C:\Programme\BitNami Redmine Stack. Zur sicherheit [...]]]></description>
			<content:encoded><![CDATA[<p>Heute ist der Tag gekommen, an dem ich mein <a href="http://www.redmine.org" title="Redmine CI" target="_blank">Redmine</a> (Unter Windows als <a href="http://bitnami.org/stack/redmine" title="Bitnami Redmine Stack" target="_blank">Bitnami Stack</a>) updaten werde.<br />
Ich habe seit der Initialen Installation die Version 0.9.3 installiert und möchte nun auf Version 1.3.1 updaten.</p>
<p>Die Originale Update-Anleitung liegt hier: http://bitnami.org/article/how-to-backup-and-update-the-bitnami-redmine-stack<br />
<span id="more-889"></span><br />
Mein derzeit installiertes (altes) Redmine samt kompletten Bitnami-Stack liegt in C:\Programme\BitNami Redmine Stack.<br />
Zur sicherheit Speichere ich mir eine Sicherung in Form von Rechtsklick->&#8221;Senden an Zip Komprimierten Ordner&#8221; vor dem Update weg.</p>
<p>Als erstes wäre es Sinnvoll ein Backup der Datenbank zu machen. Hierzu verwende ich folgendes Batch-Script:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">@</span>ECHO OFF
SET <span style="color: #007800;">MYSQL_BIN</span>=<span style="color: #ff0000;">&quot;C:\Programme\BitNami Redmine Stack\mysql\bin&quot;</span>
SET <span style="color: #007800;">MYSQL_BACKUP</span>=<span style="color: #ff0000;">&quot;C:\Backup&quot;</span>
SET <span style="color: #007800;">MYSQL_USER</span>=root
SET <span style="color: #007800;">MYSQL_PW</span>=asdf
&nbsp;
<span style="color: #000000; font-weight: bold;">%</span>MYSQL_BIN<span style="color: #000000; font-weight: bold;">%</span>\mysqldump <span style="color: #660033;">-u</span> <span style="color: #000000; font-weight: bold;">%</span>MYSQL_USER<span style="color: #000000; font-weight: bold;">%</span> -p<span style="color: #000000; font-weight: bold;">%</span>MYSQL_PW<span style="color: #000000; font-weight: bold;">%</span> <span style="color: #660033;">-f</span> <span style="color: #660033;">-x</span> <span style="color: #660033;">--opt</span> <span style="color: #660033;">--order-by-primary</span> <span style="color: #660033;">-R</span> <span style="color: #660033;">-F</span> <span style="color: #660033;">--result-file</span>=<span style="color: #000000; font-weight: bold;">%</span>MYSQL_BACKUP<span style="color: #000000; font-weight: bold;">%</span>\bitnami_redmine.sql.txt  bitnami_redmine
<span style="color: #000000; font-weight: bold;">@</span><span style="color: #7a0874; font-weight: bold;">echo</span> Fertig</pre></td></tr></table></div>

<p>Solltet ihr das Passwort für die Datenbank nicht mehr haben, könnt ihr in die &#8220;C:\Programme\BitNami Redmine Stack\apps\redmine\config\database.yml&#8221; nachschauen, dort stehen Benutzername und Passwort für die Datenbank &#8220;bitnami_redmine&#8221; drin.<br />
Ich gehe nun davon aus das das backup der DB erfolgreich war und nun in &#8220;C:\Backup&#8221; liegt.</p>
<p>Danach rufe ich die uninstall.exe in selben Verzeichnis auf.<br />
Bei der Frage ob ich alle &#8220;saved datafiles&#8221; auch löschen mächte, antworte ich sicherheitshalber mit &#8220;nein&#8221;.<br />
Die deinstallation MUSS sein, da sich durch den Bitnami-Stack Apache und Mysql als Systemdienste registrieren, welche durch die deinstallation mit aus der Registry geworfen werden.<br />
Dadurch können wir einen neuen Bitnami-Stack installieren und damit neue Dienste unter den selben Namen registrieren.</p>
<p>Den neuen Installer (ich verwende jetzt Version 1.3.1) findet man unter:<br />
<a href="http://bitnami.org/files/stacks/redmine/1.3.1-0/bitnami-redmine-1.3.1-0-windows-installer.exe" title="Bitnami Redmine Stack 1.3.1 Download" target="_blank">http://bitnami.org/files/stacks/redmine/1.3.1-0/bitnami-redmine-1.3.1-0-windows-installer.exe</a><br />
Diesen installiere ich nun nachdem ich den alten Redmine Stack deinstalliert habe.<br />
Zu beachten ist dies (auch laut offizieller Anleitung), dass man den NEUEN Stack in ein vom alten Stack abweichendes Verzeichnis Installiert.<br />
Ich installiere meinen neuen Redmine Stack nun in &#8220;C:\Programme\BitNami Redmine Stack_131\&#8221;.</p>
<p>Nachdem die Installation abgeschlossen ist, können wir uns in das PHPMyAdmin des neuen Redmine Stacks einloggen:<br />
<a href="http://localhost/phpmyadmin/" target="_blank">http://localhost/phpmyadmin/</a></p>
<p>Hier bennen wir die Datenbank &#8220;bitnami_redmine&#8221; in &#8220;bitnami_redmine_original&#8221; um.<br />
Anschließend legen wir eine neue Datenbank mit dem Namen &#8220;bitnami_redmine&#8221; an.<br />
In diese kommt nun unsere Sischerung der Alten Datebank aus &#8220;C:\Backup\&#8221;.</p>
<p>Hierzu Starten wir das &#8220;use_redmine.bat&#8221; Script, welches in &#8220;C:\Programme\BitNami Redmine Stack_131\&#8221; liegt.<br />
<code><br />
Microsoft Windows [Version 5.2.3790]<br />
(C) Copyright 1985-2003 Microsoft Corp.</p>
<p>C:\Programme\BitNami Redmine Stack_131>mysql -u root -p bitnami_redmine < c:\Backup\bitnami_redmine.sql.txt<br />
Enter password: ****</p>
<p>C:\Programme\BitNami Redmine Stack_131><br />
</code></p>
<p>Nachdem das Backup der Datenbank wieder hergestellt ist, müssen wir die Struktur dieser auf die der neuen Redmine Version Updaten.<br />
Hierfür gibt es die db:migrate Scripte vom Redmine.<br />
Um diese auszuführen rufe ich wieder das use_redmine.bat Script auf.</p>
<p>Als erstes Updaten wir die Struktur der Datenbank:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">cd</span> apps\redmine
$ rake db:migrate <span style="color: #007800;">RAILS_ENV</span>=production</pre></td></tr></table></div>

<p>Als Ausgabe erhält man nun etwas wie:<br />
<code><br />
C:\Programme\BitNami Redmine Stack_131\apps\redmine>rake db:migrate RAILS_ENV=production<br />
==  ChangeUsersMailNotificationToString: migrating ============================<br />
-- rename_column(:users, :mail_notification, :mail_notification_bool)<br />
   -> 0.0625s<br />
-- add_column(:users, :mail_notification, :string, {:null=>false, :default=>""})</p>
<p>   -> 0.0156s<br />
-- remove_column(:users, :mail_notification_bool)<br />
   -> 0.0312s<br />
==  ChangeUsersMailNotificationToString: migrated (0.1406s) ===================<br />
</code></p>
<p>Ist das Update der DB durch gelaufen, werden die Plugins geupdatet:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">$ rake db:migrate:upgrade_plugin_migrations <span style="color: #007800;">RAILS_ENV</span>=production</pre></td></tr></table></div>

<p>Da ich keine weiteren Externen Plugins Installiert habe und deshalb nichts angepasst werden muss, kommt bei mir folgende Ausgabe:<br />
<code><br />
C:\Programme\BitNami Redmine Stack_131\apps\redmine>rake db:migrate:upgrade_plug<br />
in_migrations RAILS_ENV=production<br />
Cannot find old migration table - assuming nothing needs to be done<br />
</code></p>
<p>Ebenfalls für das Update der Plugins wird folgende Zeile aufgerufen:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">$ rake db:migrate_plugins <span style="color: #007800;">RAILS_ENV</span>=production</pre></td></tr></table></div>

<p>Hier bekomme ich folgende Ausgabe:<br />
<code><br />
C:\Programme\BitNami Redmine Stack_131\apps\redmine>rake db:migrate_plugins RAIL<br />
S_ENV=production<br />
Migrating engines...<br />
Migrating acts_as_activity_provider...<br />
Migrating acts_as_attachable...<br />
Migrating acts_as_customizable...<br />
Migrating acts_as_event...<br />
Migrating acts_as_list...<br />
Migrating acts_as_searchable...<br />
Migrating acts_as_tree...<br />
Migrating acts_as_versioned...<br />
Migrating acts_as_watchable...<br />
Migrating awesome_nested_set...<br />
Migrating classic_pagination...<br />
Migrating gravatar...<br />
Migrating open_id_authentication...<br />
Migrating prepend_engine_views...<br />
Migrating rfpdf...<br />
Migrating ruby-net-ldap-0.0.4...<br />
</code></p>
<p>Damit wäre das Update auch schon erledigt.<br />
Laut Anleitung sollte man nach dem Update noch den Cache und die Sessions löschen.<br />
Dies funktioniert mit folgenden beiden Befehlen:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">$ rake tmp:cache:<span style="color: #c20cb9; font-weight: bold;">clear</span>
$ rake tmp:sessions:<span style="color: #c20cb9; font-weight: bold;">clear</span></pre></td></tr></table></div>

<p>Beide liefern jeweils keine Ausgabe.</p>
<p>Jetzt kann ich wieder &#8220;http://localhost/redmine/&#8221; aufrufen und sehe ein frisch geupdatetes Redmine <img src='http://frickelblog.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://frickelblog.de/?feed=rss2&#038;p=889</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# &#8211; Mit Extension Methods Objekte mit Funktionalitäten erweitern</title>
		<link>http://frickelblog.de/?p=882</link>
		<comments>http://frickelblog.de/?p=882#comments</comments>
		<pubDate>Fri, 17 Feb 2012 21:19:08 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://frickelblog.de/?p=882</guid>
		<description><![CDATA[Beim Aufräumen auf meinem Schreibtisch hab ich einen Zettel gefunden den ich mal zu ExtensionMethods in .NET/C# geschriebn hatte. Dies mag zwar schon ein etwas älteres Thema sein, aber da ich bis jetzt noch keinen Blog-Eintrag darüber geschrieben habe, werde ich dies jetzt tun Viel zu sagen gibt es zu dem Thema nicht &#8211; außer [...]]]></description>
			<content:encoded><![CDATA[<p>Beim Aufräumen auf meinem Schreibtisch hab ich einen Zettel gefunden den ich mal zu ExtensionMethods in .NET/C# geschriebn hatte.<br />
Dies mag zwar schon ein etwas älteres Thema sein, aber da ich bis jetzt noch keinen Blog-Eintrag darüber geschrieben habe, werde ich dies jetzt tun <img src='http://frickelblog.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
Viel zu sagen gibt es zu dem Thema nicht &#8211; außer das man mit Hilfe von ExtensionMethods die Funktionalitäten von .NET Standard-Objekten erweitern kann.<br />
<span id="more-882"></span><br />
Ok, fangen wir mal ganz einfach mit einem Beispiel an.<br />
Nehmen wir mal das Int Objekt. Wenn man sich die Methoden dieses Int im Intellisense auflisten lässt, stellt man ziemlich shcnell fest, das es nicht wirklich viel kann &#8211; was soll so ein Basis-Objekt auch können?<br />
Die Hauptaufgabe des Int ist es auch nur einen Wert zu speichern &#8211; einen Integer Wert &#8211; und das schafft dieses Objekt ziemlich gut.</p>
<p>Nehmen wir nun an, wir wollen mit diesem Objekt rechnen, was gar nicht mal so selten vor kommt.<br />
Hier eine kleine Methode, mit welcher wir den Wert eines Int verdoppelt können:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">int</span> <span style="color: #6666cc; font-weight: bold;">Double</span><span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> i<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0600FF; font-weight: bold;">return</span> i <span style="color: #008000;">*</span> <span style="color: #FF0000;">2</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Wenn ich diese Methode wie folgt aufrufe, bekomme ich als Ergebnis eine 4:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #6666cc; font-weight: bold;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">2</span><span style="color: #008000;">;</span>
Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">Double</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>  <span style="color: #008080; font-style: italic;">// Ergebnis: 4</span></pre></td></tr></table></div>

<p>Hierfür müsste ich allerdings eine eigene Klasse schreiben, was ich unter umständen nicht möchte, weil ich so eine Funktion evtl. öfter brauche.<br />
Würden wir aus dieser Methode nun eine ExtensionMethod bauen, würde sie wie folgt aussehen:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">class</span> ExtensionMethods
<span style="color: #008000;">&#123;</span>
	<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">int</span> <span style="color: #6666cc; font-weight: bold;">Double</span><span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">this</span> <span style="color: #6666cc; font-weight: bold;">int</span> i<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0600FF; font-weight: bold;">return</span> i <span style="color: #008000;">*</span> <span style="color: #FF0000;">2</span><span style="color: #008000;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Und der Aufruf würde sich wie folgt ändern:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #6666cc; font-weight: bold;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">2</span><span style="color: #008000;">;</span>
Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">.</span><span style="color: #6666cc; font-weight: bold;">Double</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>  <span style="color: #008080; font-style: italic;">// Ergebnis: 4</span></pre></td></tr></table></div>

<p>Die Methode &#8220;Double&#8221; ist nun nicht mehr eine Methode irgendeiner Klasse, sondern direkt vom Objekt Int.<br />
Nun ist Dounble() keine wirklich Sinnvolle Funktionalität, aber auf diese Art und weise könnte man sich auch z.B. ein &#8220;ToBoolean()&#8221; bauen.<br />
Dieser würde dann so aussehen:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">class</span> ExtensionMethods
<span style="color: #008000;">&#123;</span>
	<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">bool</span> ToBoolean<span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">this</span> <span style="color: #6666cc; font-weight: bold;">int</span> i<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0600FF; font-weight: bold;">return</span> Convert<span style="color: #008000;">.</span><span style="color: #0000FF;">ToBoolean</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Und passend dazu folgender Aufruf:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #6666cc; font-weight: bold;">int</span> i<span style="color: #008000;">;</span>
i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">.</span><span style="color: #0000FF;">ToBoolean</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>  <span style="color: #008080; font-style: italic;">// false</span>
i <span style="color: #008000;">=</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span>
Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">.</span><span style="color: #0000FF;">ToBoolean</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>  <span style="color: #008080; font-style: italic;">// true</span>
i <span style="color: #008000;">=</span> <span style="color: #FF0000;">2</span><span style="color: #008000;">;</span>
Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">.</span><span style="color: #0000FF;">ToBoolean</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>  <span style="color: #008080; font-style: italic;">// true</span></pre></td></tr></table></div>

<p>Diese Funktionalität macht schon mehr Sinn <img src='http://frickelblog.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Wichtig beim Bau von ExtensionMethods ist, dass die Methoden Static sind und das der erste Parameter der Methode das Objekt ist welches ich um diese Methode erweitern möchte.<br />
Möchte ich z.B. ein int erweitern, muss ich als ersten Parameter ein &#8220;this int varname&#8221; angeben.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">class</span> ExtensionMethods
<span style="color: #008000;">&#123;</span>
	<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">int</span> <span style="color: #6666cc; font-weight: bold;">Double</span><span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">this</span> <span style="color: #6666cc; font-weight: bold;">int</span> i<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #008080; font-style: italic;">// Inhalt der Methode</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Bei einem String dann analog dazu: &#8220;this string varname&#8221;.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">class</span> ExtensionMethods
<span style="color: #008000;">&#123;</span>
	<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">bool</span> ToBoolean<span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">this</span> <span style="color: #6666cc; font-weight: bold;">string</span> s<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #008080; font-style: italic;">// Inhalt der Methode</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Alle weiteren Parameter sind dann die Parameter der Methode, welche in der Methode übergeben werden können.</p>
]]></content:encoded>
			<wfw:commentRss>http://frickelblog.de/?feed=rss2&#038;p=882</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Der Paypal-Spenden Knopf &#8211; Die Auswertung</title>
		<link>http://frickelblog.de/?p=875</link>
		<comments>http://frickelblog.de/?p=875#comments</comments>
		<pubDate>Fri, 03 Feb 2012 14:50:16 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://frickelblog.de/?p=875</guid>
		<description><![CDATA[Einige Tage sind nun seit dem letzten Eintrag vergangen. Zum einen Weil ich zur zeit zu viel beschäftigt bin &#8211; zum anderen weil es eine ganze Zeit lang nichts neues zu berichten gab. Dennoch möchte ich hier eine kleine Auswertung des Paypal Spenden-Knopfes los werden. Es gibt nicht sehr viel dazu zu sagen &#8211; außer [...]]]></description>
			<content:encoded><![CDATA[<p>Einige Tage sind nun seit dem <a href="http://frickelblog.de/?p=869" title="Der PayPal Spenden Knopf :D" target="_blank">letzten Eintrag</a> vergangen.<br />
Zum einen Weil ich zur zeit zu viel beschäftigt bin &#8211; zum anderen weil es eine ganze Zeit lang nichts neues zu berichten gab.<br />
Dennoch möchte ich hier eine kleine Auswertung des Paypal Spenden-Knopfes los werden.<br />
<span id="more-875"></span><br />
Es gibt nicht sehr viel dazu zu sagen &#8211; außer 2 Sachen:<br />
1. Vielen Dank an die zahlreichen &#8220;mini-und-test-spender&#8221;!<br />
Durch eure Cent-Beträge habe ich nun ein paar Monate Webhosting finanziert <img src='http://frickelblog.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>2. Ein Mega-riesen-großer Dank geht an die Firma <a href="http://www.camtex.de/" title="CAMTEX - CAD Daten für Alle" target="_blank">CAMTEX GmbH</a>!<br />
Ich kenne euch zwar nicht, aber ich bedanke mich trotzdem für die mit abstand größte Spende von euch! <img src='http://frickelblog.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
Ich habe mit meinem Gewissen nicht vereinbaren können so viel Geld für mich zu behalten, darum habe ich mich entschlossen durch dieses Geld den <a href="http://www.wwf.de/" title="http://www.wwf.de/" target="_blank">WWF</a> zu unterstützen.<br />
Genauergenommen habe ich das Geld aus diversen persönlichen Gründen dem Programm für den Erhalt der Tiger des WWF gespendet.<br />
Auf diese Weise konnte ich auch gleich selbst eine paypal überweisung testen <img src='http://frickelblog.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
Hier passend dazu auch der Paypal Kontoauszug:</p>
<p><a href="http://frickelblog.de/wp-content/uploads/2012/02/2012-02-03-15h45_59.png"><img src="http://frickelblog.de/wp-content/uploads/2012/02/2012-02-03-15h45_59.png" alt="" title="2012-02-03 15h45_59" width="639" height="736" class="alignnone size-full wp-image-876" /></a></p>
<p>Ich hoffe dies war in eurem interesse.</p>
<p>So.. damit können wir das Jahr wieder mit vielen, neuen Interessanten Blog-Einträgen beginnen <img src='http://frickelblog.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://frickelblog.de/?feed=rss2&#038;p=875</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Der PayPal Spenden Knopf :D</title>
		<link>http://frickelblog.de/?p=869</link>
		<comments>http://frickelblog.de/?p=869#comments</comments>
		<pubDate>Sun, 08 Jan 2012 17:15:44 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://frickelblog.de/?p=869</guid>
		<description><![CDATA[Da ich seit Heute mein PayPal Konto in betrieb genommen habe, habe ich für dieses nun auch einen Spendenknopf oben rechts in den Blog eingebaut. Weil er so wunderschön ist gibt es ihn hier auch noch mal exclusiv zu betrachten: So.. und weil ich euch immer so nett sowohl interessante als auch informative Blog-Einträge schreibe, [...]]]></description>
			<content:encoded><![CDATA[<p>Da ich seit Heute mein PayPal Konto in betrieb genommen habe, habe ich für dieses nun auch einen Spendenknopf oben rechts in den Blog eingebaut.</p>
<p>Weil er so wunderschön ist gibt es ihn hier auch noch mal exclusiv zu betrachten:</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="M4T2RWA677AQY">
<input type="image" src="https://www.paypalobjects.com/de_DE/DE/i/btn/btn_donate_SM.gif" border="0" name="submit" alt="Jetzt einfach, schnell und sicher online bezahlen – mit PayPal.">
<img alt="" border="0" src="https://www.paypalobjects.com/de_DE/i/scr/pixel.gif" width="1" height="1"></p>
<p>So.. und weil ich euch immer so nett sowohl interessante als auch informative Blog-Einträge schreibe, hier ein kleiner erster Spendenaufruf an alle aktiven und passiven Blog-Leser.</p>
<p>Hat auch gleich den vorteil das ich das ganze PayPal gedöngs mal testen kann und schauen kann ob das am ende auch wirklich funktioniert <img src='http://frickelblog.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
</form>
]]></content:encoded>
			<wfw:commentRss>http://frickelblog.de/?feed=rss2&#038;p=869</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

