<?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>tomhanoldt.info</title>
	<atom:link href="http://www.tomhanoldt.info/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tomhanoldt.info/web</link>
	<description>only mono</description>
	<lastBuildDate>Tue, 21 Feb 2012 17:49:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>mono@tisch</title>
		<link>http://www.tomhanoldt.info/web/2012/kaos-tisch/</link>
		<comments>http://www.tomhanoldt.info/web/2012/kaos-tisch/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 17:46:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mono|PAINTING]]></category>
		<category><![CDATA[mono|VIDEO]]></category>

		<guid isPermaLink="false">http://www.tomhanoldt.info/web/?p=218</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><iframe width="640" height="480" src="http://www.youtube.com/embed/RKrSlDeuajY?rel=0" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomhanoldt.info/web/2012/kaos-tisch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mono@august</title>
		<link>http://www.tomhanoldt.info/web/2011/monoaugust/</link>
		<comments>http://www.tomhanoldt.info/web/2011/monoaugust/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 08:40:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mono|PAINTING]]></category>

		<guid isPermaLink="false">http://www.tomhanoldt.info/web/?p=201</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<table style="border:None;">
<tr>
<td colspan="2" style="text-align:center;"><img src="http://www.tomhanoldt.info/images/painting/2011_august/4.jpg" style="width:500px;"><br/><br/><br/></td>
</tr>
<tr>
<td><img src="http://www.tomhanoldt.info/images/painting/2011_august/3.jpg" style="width:350px;"></td>
</tr>
<tr>
<td><img src="http://www.tomhanoldt.info/images/painting/2011_august/2.jpg" style="width:350px;"></td>
</tr>
<tr>
<td><img src="http://www.tomhanoldt.info/images/painting/2011_august/1.jpg" style="width:350px;"/></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.tomhanoldt.info/web/2011/monoaugust/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mono@lindau</title>
		<link>http://www.tomhanoldt.info/web/2011/monolindau/</link>
		<comments>http://www.tomhanoldt.info/web/2011/monolindau/#comments</comments>
		<pubDate>Sun, 07 Aug 2011 14:05:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mono|ART]]></category>
		<category><![CDATA[mono|PAINTING]]></category>

		<guid isPermaLink="false">http://www.tomhanoldt.info/web/?p=189</guid>
		<description><![CDATA[manchmal muss der Mensch wandern und entspannen&#8230;]]></description>
			<content:encoded><![CDATA[<table style="border:None;">
<tr>
<td colspan="2" style="text-align:center;"><img src="http://www.tomhanoldt.info/images/painting/2011_lindau/1.jpg" style="width:600px;"><br />
manchmal muss der Mensch wandern und entspannen&#8230;<br/><br/><br/></td>
</tr>
<tr>
<td><img src="http://www.tomhanoldt.info/images/painting/2011_lindau/7.jpg" style="width:350px;"></td>
<td style="text-align:cnter; vertical-align:middle;"><img src="http://www.tomhanoldt.info/images/painting/2011_lindau/2.jpg" style="width:350px;"> </td>
</tr>
<tr>
<td><img src="http://www.tomhanoldt.info/images/painting/2011_lindau/5.jpg" style="width:350px;"></td>
<td style="text-align:left; vertical-align:middle;"><img src="http://www.tomhanoldt.info/images/painting/2011_lindau/6.jpg" style="width:350px;"></td>
</tr>
<tr>
<td><img src="http://www.tomhanoldt.info/images/painting/2011_lindau/4.jpg" style="width:350px;"/></td>
<td style="text-align:left; vertical-align:middle;"><img src="http://www.tomhanoldt.info/images/painting/2011_lindau/3.jpg" style="width:350px; "> </td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.tomhanoldt.info/web/2011/monolindau/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>schwarz weiß grau</title>
		<link>http://www.tomhanoldt.info/web/2011/schwarzweis/</link>
		<comments>http://www.tomhanoldt.info/web/2011/schwarzweis/#comments</comments>
		<pubDate>Thu, 30 Jun 2011 16:10:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mono|TEXT]]></category>

		<guid isPermaLink="false">http://www.tomhanoldt.info/web/?p=181</guid>
		<description><![CDATA[Zwei Menschen, einer schwarz einer weiß, sitzen sich gegenüber und sind zusammen. Schon länger. Man kennt sich. Einer ist schwarz einer ist weiß, genauso hat es auch angefangen, doch ist der Geist so endlich. Schon wieder. Zusammen sind sie sich begegnet, der Tag war verregnet, der nächste feucht fröhlich. Seitdem kennt man sich. Das ist [...]]]></description>
			<content:encoded><![CDATA[<p>Zwei Menschen, einer schwarz einer weiß, sitzen sich gegenüber und sind zusammen.<br />
Schon länger. Man kennt sich.</p>
<p>Einer ist schwarz einer ist weiß, genauso hat es auch angefangen, doch ist der Geist so endlich.<br />
Schon wieder. </p>
<p>Zusammen sind sie sich begegnet, der Tag war verregnet, der nächste feucht fröhlich.<br />
Seitdem kennt man sich.</p>
<p>Das ist jetzt Jahre her, keiner zählt sie mehr, aber man erzählt sich noch, dass da noch etwas wär&#8217;.<br />
Wer glaubt&#8217;s wirklich.</p>
<p>Da sagt schwarz so zu weiß: &#8220;ey du weiß, weißt du was das heißt, dass das wieder so ist?&#8221;<br />
&#8220;So unterschiedlich?&#8221;</p>
<p>&#8220;Ja so wie du und ich, so wie Schatten und Licht&#8221;, &#8220;aber da ist doch noch mehr, man sieht&#8217;s geht man näher&#8221; &#8230;und keiner erkennt wirklich.</p>
<p>Es geht von schwarz über weiß, und beide wissen, was dass heißt, keiner gibt nach,<br />
die ganze Nacht gibt es Streit. &#8230;was für ein Tag.</p>
<p>Doch der nächste ist besser, seit vielen Jahren wird es so schlechter, man lernt sich kennen im Streit<br />
der eine schwarz, der andere weiß.</p>
<p>Nach außen ergeben sie grau, denn keiner weiß so genau, Genaues weiß man nicht, nach außen &#8230;dringt nur graues licht. </p>
<p>Doch sie kennen sich so und das lieben sie wohl, beide wissen wie es wär, wär es genau nicht so.<br />
&#8230;kompliziert.</p>
<p>Davon leben sie, da kommt ihre kraft her, und da wo die herkommt, ist sicher noch mehr<br />
&#8230;so lieben sie.</p>
<p>&#8230;für immer schwarz für immer grau, nie wirklich weiß, aber man weiss es genau,<br />
&#8230;das ist es, &#8230;letztendlich, ich ergeb mich &#8230;und bin vergänglich</p>
<p>nein nie!</p>
<p>Zwei Menschen, einer weiß einer schwarz, sitzen sich gegenüber und sind zusammen.<br />
Schon länger. Man kennt sich.</p>
<p>Einer ist weiß, einer ist schwarz, einer ist weicher, einer ehr hart, sie sind ewig zusammen.<br />
Unzertrennlich.</p>
<p>Einer greift an, einer gibt nach, man wechselt sich ab, stößt zusammen, man vergibt sich<br />
Schon wieder. Na endlich!</p>
<p>Mal auseinander, mal zusammen, mal daneben, dann wieder gefangen, man verfängt sich lebend<br />
aber befremdlich.</p>
<p>Für immer schwarz, für immer weiß, was auch immer das für jeden heißt, ist das so wie man&#8217;s versteht, egal nur dass es geht, </p>
<p>ist entscheidend, schön wie es ist, nicht wie es scheint,<br />
dem Menschen wird ans Herz gelegt, dass er nur ein Mensch bleibt &#8230;</p>
<p>na endlich!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomhanoldt.info/web/2011/schwarzweis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>M_Worker</title>
		<link>http://www.tomhanoldt.info/web/2011/m_worker/</link>
		<comments>http://www.tomhanoldt.info/web/2011/m_worker/#comments</comments>
		<pubDate>Tue, 17 May 2011 22:11:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mono|PHP]]></category>

		<guid isPermaLink="false">http://www.tomhanoldt.info/web/?p=134</guid>
		<description><![CDATA[Woher die Inspiration: Eigentlich reizt mich PHP nicht mehr, vor allem nicht in meiner Freizeit, ich habe einfach schon viel zu viel davon gelesen/geschrieben und das nicht nur in meiner Freizeit. &#8230;Viel zu viel! &#8230;Alles &#8230;aber aberwitzig wurde es neulich, als es Probleme mit Server-Cronjobs gab, die PHP-Skripte starten, die wiederum per Http-Request neue PHP-Skripte [...]]]></description>
			<content:encoded><![CDATA[<p><b>Woher die Inspiration:</b></p>
<p>Eigentlich reizt mich PHP nicht mehr, vor allem nicht in meiner Freizeit, ich habe einfach schon viel zu viel davon gelesen/geschrieben und das nicht nur in meiner Freizeit. &#8230;Viel zu viel! &#8230;Alles &#8230;aber aberwitzig wurde es neulich, als es Probleme mit Server-Cronjobs gab, die PHP-Skripte starten, die wiederum per Http-Request neue PHP-Skripte starten. Also kurz gesagt ein Alptraum und schwerer Plaunungsfehler.<br />
<br/><br />
<b>Was ich wollte:</b></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- PHP-Skripte, die sich wie Services/Deamonen verhalten<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Jobs einem Worker übergeben, der diese Zyklisch ausführt (z.b. alle 10 Minuten)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- der Worker soll nach bedarf neue Worker öffnen (per Http-Request)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- wenn man den ersten Worker beendet, sollen sich alle Child-Worker auch beenden<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8230;und das in PHP <img src='http://www.tomhanoldt.info/web/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /><br />
<br/><br />
<b>Also hier meine Antwort</b> (<a href="http://www.tomhanoldt.info/code/php/phpWorker.zip" target="_blank">download</a>):</p>
<p>Der erste gestartete Worker lockt eine Datei und startet nacheinander seine Jobs. Konnte er die Jobs nicht in einem konfigurierbaren Intervall abarbeiten, startet er einen neuen Worker per Http-Request, anhand der gleichen Url, mit der er selbst gestartet wurde. Jeder Child-Worker kann selbst anhand der Konfiguration neue Childs erzeugen oder sich ggf. selbst beenden.<br />
<br/><br />
<b>M/Worker/Test.php</b> (<a href="http://www.tomhanoldt.info/code/php/phpWorker.zip" target="_blank">download</a>)</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-simple"><table class="php"><tbody><tr class="li1"><td class="ln"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="de1"><pre class="de1"><span class="kw2">class</span> M_Worker_Test
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> run<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$config</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'maxLoopSleepMs'</span> <span class="sy0">=&gt;</span> <span class="nu0">4000</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'minLoopSleepMs'</span> <span class="sy0">=&gt;</span> <span class="nu0">1000</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'loopSleepAdjustmentRate'</span> <span class="sy0">=&gt;</span> <span class="nu0">2</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'forkAfterNoSleepCycles'</span> <span class="sy0">=&gt;</span> <span class="nu0">2</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'destroyAfterSleepCycles'</span> <span class="sy0">=&gt;</span> <span class="nu0">2</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'maxWorker'</span> <span class="sy0">=&gt;</span> <span class="nu0">10</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$job</span> <span class="sy0">=</span> <span class="kw2">new</span> M_Worker_Job<span class="br0">&#40;</span><span class="st_h">'testJob'</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp;<span class="co1">//job needs 1-6secs</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$worker</span> <span class="sy0">=</span> <span class="kw2">new</span> M_Worker<span class="br0">&#40;</span><span class="st_h">'testWorker'</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="re0">$job</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="re0">$config</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$worker</span><span class="sy0">-&gt;</span><span class="me1">run</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></td></tr></tbody></table></div>
<div class="bwp-syntax-source"><pre class="no-parse">class M_Worker_Test
{
	public function run()
	{
		$config = array('maxLoopSleepMs' =&gt; 4000,
						'minLoopSleepMs' =&gt; 1000,
						'loopSleepAdjustmentRate' =&gt; 2,
						'forkAfterNoSleepCycles' =&gt; 2,
						'destroyAfterSleepCycles' =&gt; 2,
						'maxWorker' =&gt; 10);

		$job = new M_Worker_Job('testJob');  //job needs 1-6secs

		$worker = new M_Worker('testWorker', array($job), $config);

		$worker-&gt;run();
	}
}</pre></div></div>

<p><br/><br />
und hier das Herzstück(gekürzt) <b>M/Worker.php</b> (<a href="http://www.tomhanoldt.info/code/php/phpWorker.zip" target="_blank">download</a>)</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-simple"><table class="php"><tbody><tr class="li1"><td class="ln"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
</pre></td><td class="de1"><pre class="de1"><span class="kw3">ignore_user_abort</span><span class="br0">&#40;</span><span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">ini_set</span><span class="br0">&#40;</span><span class="st_h">'max_execution_time'</span><span class="sy0">,</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">ob_implicit_flush</span><span class="br0">&#40;</span><span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="kw2">class</span> M_Worker
<span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span><span class="sy0">...</span><span class="br0">&#93;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="re0">$workerName</span><span class="sy0">,</span> <span class="kw3">array</span> <span class="re0">$jobs</span><span class="sy0">,</span> <span class="kw3">array</span> <span class="re0">$config</span> <span class="sy0">=</span> <span class="kw4">null</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">uid</span> <span class="sy0">=</span> <span class="kw3">uniqid</span><span class="br0">&#40;</span><span class="st_h">'M_Id'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">workerName</span> <span class="sy0">=</span> <span class="re0">$workerName</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$config</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">config</span> <span class="sy0">=</span> <span class="kw3">array_merge</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">config</span><span class="sy0">,</span> <span class="re0">$config</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$jobs</span> <span class="kw1">as</span> <span class="re0">$job</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">addJob</span><span class="br0">&#40;</span><span class="re0">$job</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> run<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">triggerInit</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span><span class="br0">&#40;</span><span class="sy0">!</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">stopped</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$lastRunStartTime</span> <span class="sy0">=</span> <span class="kw3">microtime</span><span class="br0">&#40;</span><span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span>&nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">jobQueue</span> <span class="kw1">as</span> <span class="re0">$job</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$job</span><span class="sy0">-&gt;</span><span class="me1">runJob</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="br0">&#41;</span><span class="sy0">;</span>&nbsp; &nbsp; 
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$lastRunDuration</span> <span class="sy0">=</span> <span class="br0">&#40;</span>int<span class="br0">&#41;</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw3">microtime</span><span class="br0">&#40;</span><span class="kw4">true</span><span class="br0">&#41;</span> <span class="sy0">-</span> <span class="re0">$lastRunStartTime</span><span class="br0">&#41;</span> <span class="sy0">*</span> <span class="nu0">1000</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">calibrateAndDoLoopSleep</span><span class="br0">&#40;</span><span class="re0">$lastRunDuration</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">forkOrDestroyIfNeeded</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">triggerShoutDown</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span> &nbsp; 
&nbsp;
&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw2">function</span> triggerInit<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">actualLoopSleep</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getConfigValue</span><span class="br0">&#40;</span><span class="st_h">'maxLoopSleepMs'</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">stopped</span> <span class="sy0">=</span> <span class="kw4">false</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getConfigValue</span><span class="br0">&#40;</span><span class="st_h">'outputLogFile'</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">workerLogFileHandle</span> <span class="sy0">=</span> <span class="kw3">fopen</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getConfigValue</span><span class="br0">&#40;</span><span class="st_h">'outputLogFile'</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="st_h">'a'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">isMainWorker</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getMainLock</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">isMainWorker</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">ignore_user_abort</span><span class="br0">&#40;</span><span class="kw4">false</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">initWorkerCounter</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">header</span><span class="br0">&#40;</span><span class="st0">&quot;Connection: close&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">runningWorker</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">countRunningWorker</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">incrementWorkerCounter</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> &nbsp; 
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">jobQueue</span> <span class="kw1">as</span> <span class="re0">$job</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$job</span><span class="sy0">-&gt;</span><span class="me1">onJobInit</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw2">function</span> triggerShoutdown<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">jobQueue</span> <span class="kw1">as</span> <span class="re0">$job</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$job</span><span class="sy0">-&gt;</span><span class="me1">onJobDestroy</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">isMainWorker</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">decrementWorkerCounter</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">is_resource</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">workerLogFileHandle</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">fclose</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">workerLogFileHandle</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">releaseMainLock</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw2">function</span> calibrateAndDoLoopSleep<span class="br0">&#40;</span><span class="re0">$lastRunDuration</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$lastRunDuration</span> <span class="sy0">&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">actualLoopSleep</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">sleepCycles</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">++</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">noSleepCycles</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">actualLoopSleep</span> <span class="sy0">=</span> <span class="kw3">max</span><span class="br0">&#40;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">actualLoopSleep</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="sy0">/</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getConfigValue</span><span class="br0">&#40;</span><span class="st_h">'loopSleepAdjustmentRate'</span><span class="br0">&#41;</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getConfigValue</span><span class="br0">&#40;</span><span class="st_h">'minLoopSleepMs'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">noSleepCycles</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">++</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">sleepCycles</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">actualLoopSleep</span> <span class="sy0">=</span> <span class="kw3">min</span><span class="br0">&#40;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">actualLoopSleep</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">*</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getConfigValue</span><span class="br0">&#40;</span><span class="st_h">'loopSleepAdjustmentRate'</span><span class="br0">&#41;</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getConfigValue</span><span class="br0">&#40;</span><span class="st_h">'maxLoopSleepMs'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$timeToSleep</span> <span class="sy0">=</span> <span class="br0">&#40;</span>int<span class="br0">&#41;</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">actualLoopSleep</span> <span class="sy0">-</span> <span class="re0">$lastRunDuration</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">usleep</span><span class="br0">&#40;</span><span class="re0">$timeToSleep</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span> &nbsp; 
&nbsp;
&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw2">function</span> forkOrDestroyIfNeeded<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">noSleepCycles</span> <span class="sy0">&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getConfigValue</span><span class="br0">&#40;</span><span class="st_h">'forkAfterNoSleepCycles'</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">&amp;&amp;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">countRunningWorker</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">&lt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getConfigValue</span><span class="br0">&#40;</span><span class="st_h">'maxWorker'</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">fork</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">elseif</span><span class="br0">&#40;</span><span class="sy0">!</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">isMainWorker</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">&amp;&amp;</span><span class="br0">&#40;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">sleepCycles</span> <span class="sy0">&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getConfigValue</span><span class="br0">&#40;</span><span class="st_h">'destroyAfterSleepCycles'</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">||</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getMainLock</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">releaseMainLock</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">stopped</span> <span class="sy0">=</span> <span class="kw4">true</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw2">function</span> getMainLock<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">is_resource</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">mainWorkerLockFileHandle</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">mainWorkerLockFileHandle</span> <span class="sy0">=</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">fopen</span><span class="br0">&#40;</span><span class="st_h">'./M_Worker_'</span><span class="sy0">.</span><span class="kw3">ucfirst</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">workerName</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st_h">'.lock'</span><span class="sy0">,</span> <span class="st_h">'r'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw3">is_resource</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">mainWorkerLockFileHandle</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="sy0">&amp;&amp;</span> <span class="sy0">@</span><span class="kw3">flock</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">mainWorkerLockFileHandle</span><span class="sy0">,</span> LOCK_EX <span class="sy0">|</span> LOCK_NB<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw2">function</span> fork<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$url</span> <span class="sy0">=</span> <span class="st_h">'http://'</span><span class="sy0">.</span><span class="re0">$_SERVER</span><span class="br0">&#91;</span><span class="st_h">'HTTP_HOST'</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st_h">':'</span><span class="sy0">.</span><span class="re0">$_SERVER</span><span class="br0">&#91;</span><span class="st_h">'SERVER_PORT'</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="re0">$_SERVER</span><span class="br0">&#91;</span><span class="st_h">'REQUEST_URI'</span><span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$fp</span> <span class="sy0">=</span> <span class="kw3">fopen</span><span class="br0">&#40;</span><span class="re0">$url</span><span class="sy0">,</span> <span class="st_h">'r'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">is_resource</span><span class="br0">&#40;</span><span class="re0">$fp</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">fclose</span><span class="br0">&#40;</span><span class="re0">$fp</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span><span class="sy0">...</span><span class="br0">&#93;</span>
<span class="br0">&#125;</span></pre></td></tr></tbody></table></div>
<div class="bwp-syntax-source"><pre class="no-parse">ignore_user_abort(true);
ini_set('max_execution_time', 0);
ob_implicit_flush(true);

class M_Worker
{
		[...]

	public function __construct($workerName, array $jobs, array $config = null)
	{
		$this-&gt;uid = uniqid('M_Id');
		$this-&gt;workerName = $workerName;

		if($config)
			$this-&gt;config = array_merge($this-&gt;config, $config);

		foreach($jobs as $job)
			$this-&gt;addJob($job);
	}

	public function run()
	{
		$this-&gt;triggerInit();
		while(!$this-&gt;stopped)
		{
			$lastRunStartTime = microtime(true);		

			foreach($this-&gt;jobQueue as $job)
				$job-&gt;runJob($this);	

			$lastRunDuration = (int)((microtime(true) - $lastRunStartTime) * 1000);

			$this-&gt;calibrateAndDoLoopSleep($lastRunDuration);

			$this-&gt;forkOrDestroyIfNeeded();
		}
		$this-&gt;triggerShoutDown();
	}	

	protected function triggerInit()
	{
		$this-&gt;actualLoopSleep = $this-&gt;getConfigValue('maxLoopSleepMs') / 2;

		$this-&gt;stopped = false;

		if($this-&gt;getConfigValue('outputLogFile'))
			$this-&gt;workerLogFileHandle = fopen($this-&gt;getConfigValue('outputLogFile'), 'a');

		$this-&gt;isMainWorker = $this-&gt;getMainLock();

		if($this-&gt;isMainWorker)
		{
			ignore_user_abort(false);
			$this-&gt;initWorkerCounter();
		}
		else
		{
			header("Connection: close");
			$this-&gt;runningWorker = $this-&gt;countRunningWorker();
			$this-&gt;incrementWorkerCounter();
		}	

		foreach($this-&gt;jobQueue as $job)
			$job-&gt;onJobInit($this);
	}

	protected function triggerShoutdown()
	{
		foreach($this-&gt;jobQueue as $job)
			$job-&gt;onJobDestroy($this);

		if(!$this-&gt;isMainWorker)
			$this-&gt;decrementWorkerCounter();			

		if(is_resource($this-&gt;workerLogFileHandle))
			fclose($this-&gt;workerLogFileHandle);

		$this-&gt;releaseMainLock();
	}

	protected function calibrateAndDoLoopSleep($lastRunDuration)
	{
		if($lastRunDuration &gt; $this-&gt;actualLoopSleep)
		{
			$this-&gt;sleepCycles = 0;
			++$this-&gt;noSleepCycles;
			$this-&gt;actualLoopSleep = max( $this-&gt;actualLoopSleep
								 	         / $this-&gt;getConfigValue('loopSleepAdjustmentRate'),
					  	         		  $this-&gt;getConfigValue('minLoopSleepMs'));
		}
		else
		{
			$this-&gt;noSleepCycles = 0;
			++$this-&gt;sleepCycles;
			$this-&gt;actualLoopSleep = min( $this-&gt;actualLoopSleep
										    * $this-&gt;getConfigValue('loopSleepAdjustmentRate'),
						         		  $this-&gt;getConfigValue('maxLoopSleepMs'));

			$timeToSleep = (int)($this-&gt;actualLoopSleep - $lastRunDuration);
			usleep($timeToSleep);
		}
	}	

	protected function forkOrDestroyIfNeeded()
	{
		if($this-&gt;noSleepCycles &gt; $this-&gt;getConfigValue('forkAfterNoSleepCycles')
		&amp;&amp; $this-&gt;countRunningWorker() &lt; $this-&gt;getConfigValue('maxWorker'))
		{
			$this-&gt;fork();
		}
		elseif(!$this-&gt;isMainWorker
		&amp;&amp;(
			   $this-&gt;sleepCycles &gt; $this-&gt;getConfigValue('destroyAfterSleepCycles')
			|| $this-&gt;getMainLock() ))
		{
			$this-&gt;releaseMainLock();
			$this-&gt;stopped = true;
		}
	}

	protected function getMainLock()
	{
		if(!is_resource($this-&gt;mainWorkerLockFileHandle))
		{
			$this-&gt;mainWorkerLockFileHandle =
					fopen('./M_Worker_'.ucfirst($this-&gt;workerName).'.lock', 'r');
		}
		return is_resource($this-&gt;mainWorkerLockFileHandle)
			   &amp;&amp; @flock($this-&gt;mainWorkerLockFileHandle, LOCK_EX | LOCK_NB);
	}

	protected function fork()
	{
		$url = 'http://'.$_SERVER['HTTP_HOST'].':'.$_SERVER['SERVER_PORT'].$_SERVER['REQUEST_URI'];
		$fp = fopen($url, 'r');
		if(is_resource($fp))
			fclose($fp);
	}

		[...]
}</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.tomhanoldt.info/web/2011/m_worker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bunter frühling</title>
		<link>http://www.tomhanoldt.info/web/2011/bunter-fruhling/</link>
		<comments>http://www.tomhanoldt.info/web/2011/bunter-fruhling/#comments</comments>
		<pubDate>Thu, 21 Apr 2011 10:59:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mono|PAINTING]]></category>

		<guid isPermaLink="false">http://www.tomhanoldt.info/web/?p=75</guid>
		<description><![CDATA[manchmal muss der Mensch malen&#8230;]]></description>
			<content:encoded><![CDATA[<table style="border:None;">
<tr>
<td colspan="2" style="text-align:center;"><img src="http://www.tomhanoldt.info/images/painting/intro2011/8.jpg" style="width:200px;"><br />
manchmal muss der Mensch malen&#8230;</td>
</tr>
<tr>
<td><img src="http://www.tomhanoldt.info/images/painting/intro2011/6_2.jpg" style="width:380px;"></td>
<td style="text-align:cnter; vertical-align:middle;"><img src="http://www.tomhanoldt.info/images/painting/intro2011/6_1.jpg" style="width:200px;"> </td>
</tr>
<tr>
<td><img src="http://www.tomhanoldt.info/images/painting/intro2011/7_3.jpg" style="width:380px;"></td>
<td style="text-align:left; vertical-align:middle;"><img src="http://www.tomhanoldt.info/images/painting/intro2011/7_2.jpg" style="width:210px;"></td>
</tr>
<tr>
<td><img src="http://www.tomhanoldt.info/images/painting/intro2011/3_3.jpg" style="width:380px;"/></td>
<td style="text-align:left; vertical-align:middle;"><img src="http://www.tomhanoldt.info/images/painting/intro2011/3_2.jpg" style="width:210px; "> </td>
</tr>
<tr>
<td style="text-align:center;"><img src="http://www.tomhanoldt.info/images/painting/intro2011/2_4.jpg"  style="width:340px;"></td>
<td style="text-align:left; vertical-align:middle;"><img src="http://www.tomhanoldt.info/images/painting/intro2011/2_2.jpg" style="width:210px;"> </td>
</tr>
<tr>
<td style="text-align:center;"><img src="http://www.tomhanoldt.info/images/painting/intro2011/1_2.jpg"  style="width:380px;"> </td>
<td style=" vertical-align:middle;"><img src="http://www.tomhanoldt.info/images/painting/intro2011/1_1.jpg" style="width:210px;"></td>
</tr>
<tr>
<td><img src="http://www.tomhanoldt.info/images/painting/intro2011/4.jpg"  style="width:330px;"></td>
<td style="text-align:center;"><img src="http://www.tomhanoldt.info/images/painting/intro2011/5.jpg" style="width:310px;"></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.tomhanoldt.info/web/2011/bunter-fruhling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fibonacci</title>
		<link>http://www.tomhanoldt.info/web/2011/fibonacci/</link>
		<comments>http://www.tomhanoldt.info/web/2011/fibonacci/#comments</comments>
		<pubDate>Thu, 21 Apr 2011 06:57:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mono|JAVA]]></category>

		<guid isPermaLink="false">http://www.tomhanoldt.info/web/?p=48</guid>
		<description><![CDATA[Entstanden im Algorithmenkurs download Ziel: Laufzeitvergleich(O-Notation) verschiedener Algorithmen zur Bestimmung von Fibonaccifolgen. Testbedingungen: Es wird einmal der Fall einer Einzelberechnung betrachtet, und vor allem für die um Cashing erweiterten Algorithmen mehrfache Berechnung. Algorithmen: FibonacciFormel f(n)=O(1) FibonacciIterativ f(n)=O(n) FibonacciIterativCashed f(n)=O(n)&#160;&#160;&#160;&#160; *für eine Berechnung FibonacciRekursiv f(n)=O(1.62^n) FibonacciRekursivCashed f(n)=O(n)&#160;&#160;&#160;&#160; *für eine Berechnung #TODO FibonacciMatrix Ergebnis: Was man erwartet, [...]]]></description>
			<content:encoded><![CDATA[<p>Entstanden im Algorithmenkurs <a href="http://www.tomhanoldt.info/code/java/fib.zip" target="_blank">download</a></p>
<table style="border:None; border-collapse:seperate; border-spacing:10px 10px;">
<tr>
<td>Ziel: </td>
<td>Laufzeitvergleich(O-Notation) verschiedener Algorithmen zur Bestimmung von Fibonaccifolgen.</td>
</tr>
<tr>
<td>Testbedingungen: </td>
<td>Es wird einmal der Fall einer Einzelberechnung betrachtet, und vor allem für die um Cashing erweiterten Algorithmen mehrfache Berechnung.</td>
</tr>
<tr>
<td>Algorithmen:</td>
<td>
FibonacciFormel f(n)=O(1)</p>
<p>FibonacciIterativ f(n)=O(n)</p>
<p>FibonacciIterativCashed f(n)=O(n)&nbsp;&nbsp;&nbsp;&nbsp; <i>*für eine Berechnung</i></p>
<p>FibonacciRekursiv f(n)=O(1.62^n)</p>
<p>FibonacciRekursivCashed f(n)=O(n)&nbsp;&nbsp;&nbsp;&nbsp; <i>*für eine Berechnung</i></p>
<p>#TODO FibonacciMatrix</td>
</tr>
<tr>
<td>Ergebnis:</td>
<td>Was man erwartet, zu bemerken ist, dass der FibonacciRekursivCashed-Algorithmus mit n wächst und im Fall von der Berechnung einer Folge von Fibonacci-Zahlen sogar erheblich Aufwand spart. Der FibonacciIterativCashed-Algorithmus hingegen, kann nur Vorteile vom Cashing nutzen, wenn die gleiche Zahl berechnet wird.</td>
</tr>
</table>
<p><i>*wer die Tests nachvollziehen will, kann das fib Paket runterladen und die Gui.java &#8220;starten&#8221;</i></p>
<p> <br />
fib.FibonacciRecursiveCashed.java</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-simple"><table class="java"><tbody><tr class="li1"><td class="ln"><pre class="de1">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="de1"><pre class="de1"><span class="kw1">public</span> <span class="kw1">class</span> FibonacciRecursiveCashed
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw1">static</span> HashMap<span class="sy0">&lt;</span>Integer,Long<span class="sy0">&gt;</span> operationCash <span class="sy0">=</span> <span class="kw1">new</span> HashMap<span class="sy0">&lt;</span>Integer,Long<span class="sy0">&gt;</span> <span class="br0">&#40;</span><span class="nu0">100</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">long</span> getFibFromPosition<span class="br0">&#40;</span><span class="kw4">int</span> position<span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; Helper.<span class="me1">addCallInformation</span><span class="br0">&#40;</span><span class="st0">&quot;FibonacciRecursiveCashed init&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>position <span class="sy0">==</span> <span class="nu0">0</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> _getFibFromPosition<span class="br0">&#40;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">Math</span>.<span class="me1">abs</span><span class="br0">&#40;</span>position<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">protected</span> <span class="kw1">static</span> <span class="kw4">long</span> _getFibFromPosition<span class="br0">&#40;</span><span class="kw4">int</span> position<span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>position <span class="sy0">&lt;</span> <span class="nu0">2</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Helper.<span class="me1">addCallInformation</span><span class="br0">&#40;</span><span class="st0">&quot;FibonacciRecursiveCashed : return 1&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">1</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>operationCash.<span class="me1">containsKey</span><span class="br0">&#40;</span>position<span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> operationCash.<span class="me1">get</span><span class="br0">&#40;</span>position<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; Helper.<span class="me1">addCallInformation</span><span class="br0">&#40;</span><span class="st0">&quot;FibonacciRecursiveCashed : not cashed for &quot;</span><span class="sy0">+</span>position<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">long</span> result <span class="sy0">=</span> _getFibFromPosition<span class="br0">&#40;</span>position <span class="sy0">-</span> <span class="nu0">1</span><span class="br0">&#41;</span> <span class="sy0">+</span> _getFibFromPosition<span class="br0">&#40;</span>position <span class="sy0">-</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; operationCash.<span class="me1">put</span><span class="br0">&#40;</span>position,result<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> result<span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">void</span> clearCash<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; operationCash.<span class="me1">clear</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></td></tr></tbody></table></div>
<div class="bwp-syntax-source"><pre class="no-parse">public class FibonacciRecursiveCashed
{
	private static HashMap&lt;Integer,Long&gt; operationCash = new HashMap&lt;Integer,Long&gt; (100);

	public static long getFibFromPosition(int position)
	{
		Helper.addCallInformation("FibonacciRecursiveCashed init");

		if(position == 0)
		{
			return 0;
		}

		return _getFibFromPosition(
					Math.abs(position));
	}

	protected static long _getFibFromPosition(int position)
	{
		if(position &lt; 2)
		{
			Helper.addCallInformation("FibonacciRecursiveCashed : return 1");

			return 1;
		}

		if(operationCash.containsKey(position))
		{
			return operationCash.get(position);
		}

		Helper.addCallInformation("FibonacciRecursiveCashed : not cashed for "+position);

		long result = _getFibFromPosition(position - 1) + _getFibFromPosition(position - 2);

		operationCash.put(position,result);

		return result;
	}

	public static void clearCash()
	{
		operationCash.clear();
	}
}</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.tomhanoldt.info/web/2011/fibonacci/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>kaos video zeugs</title>
		<link>http://www.tomhanoldt.info/web/2011/projektion/</link>
		<comments>http://www.tomhanoldt.info/web/2011/projektion/#comments</comments>
		<pubDate>Sun, 10 Apr 2011 21:34:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mono|VIDEO]]></category>

		<guid isPermaLink="false">http://www.tomhanoldt.info/web/?p=38</guid>
		<description><![CDATA[&#160; &#160;]]></description>
			<content:encoded><![CDATA[<p><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/c1rkzj5WY7E?fs=1&amp;hl=de_DE" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/c1rkzj5WY7E?fs=1&amp;hl=de_DE" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
<p><br/>&nbsp;</p>
<p><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/iQPP9D-9am0?fs=1&amp;hl=de_DE" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/iQPP9D-9am0?fs=1&amp;hl=de_DE" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
<p><br/>&nbsp;</p>
<p><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/C3hJ4pD9d8Y&amp;hl=de_DE&amp;fs=1&amp;" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/C3hJ4pD9d8Y&amp;hl=de_DE&amp;fs=1&amp;" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomhanoldt.info/web/2011/projektion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>unix timestamp</title>
		<link>http://www.tomhanoldt.info/web/2011/unix-timestamp/</link>
		<comments>http://www.tomhanoldt.info/web/2011/unix-timestamp/#comments</comments>
		<pubDate>Sun, 10 Apr 2011 21:32:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mono|PHP]]></category>

		<guid isPermaLink="false">http://www.tomhanoldt.info/web/?p=34</guid>
		<description><![CDATA[*mit M_FrameWork umgesetzt &#124; standalone MTimeStamp_Index_Controller.php 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 [...]]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://www.tomhanoldt.info/code/php/mFrameWork/index.php?app=MTimeStamp" id="blockrandom" class="wrapper" mce_src="http://www.tomhanoldt.info/mFrameWork/index.php?app=MTimeStamp" name="iframe" align="top" frameborder="0" height="400" scrolling="auto" width="820"><br />
</iframe><br />
<i>*mit <a href="" target="_blank">M_FrameWork</a> umgesetzt | <a href="http://www.tomhanoldt.info/code/php/mFrameWork/index.php?app=MTimeStamp" target="_blank" >standalone</a> </p>
<p>MTimeStamp_Index_Controller.php</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-simple"><table class="php"><tbody><tr class="li1"><td class="ln"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
</pre></td><td class="de1"><pre class="de1"><span class="kw2">class</span> MTimeStamp_Index_Controller <span class="kw2">extends</span> M_Controller_Modul
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw2">const</span> TARGET_ID_ACTUAL <span class="sy0">=</span> <span class="st_h">'actualStamp'</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw2">const</span> TARGET_ID_OLD &nbsp; &nbsp;<span class="sy0">=</span> <span class="st_h">'oldStamps'</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw2">const</span> MAX_OLD_ENTRIES &nbsp;<span class="sy0">=</span> <span class="nu0">20</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> initAction<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>M_Controller_Front<span class="sy0">::</span><span class="me2">getRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">isXmlHttpRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; M_Controller_Front<span class="sy0">::</span><span class="me2">setResponse</span><span class="br0">&#40;</span><span class="kw2">new</span> M_Response_Adapter_Data<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; M_Controller_Front<span class="sy0">::</span><span class="me2">setResponse</span><span class="br0">&#40;</span><span class="kw2">new</span> M_Response_Adapter_Applet<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; M_Date_Helper<span class="sy0">::</span><span class="me2">loadAdoDb</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$session</span> <span class="sy0">=</span> M_Session<span class="sy0">::</span><span class="me2">getInstance</span><span class="br0">&#40;</span><span class="st_h">'dateselector'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$session</span><span class="sy0">-&gt;</span><span class="me1">oldStamps</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$session</span><span class="sy0">-&gt;</span><span class="me1">oldStamps</span> <span class="sy0">=</span> <span class="kw2">new</span> M_Factory_Data<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$session</span><span class="sy0">-&gt;</span><span class="me1">lastTimestamp</span> <span class="sy0">=</span> <span class="kw2">new</span> M_Date<span class="br0">&#40;</span><span class="kw3">time</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> indexAction<span class="br0">&#40;</span>M_Request_Interface <span class="re0">$request</span><span class="sy0">,</span>M_Response_Interface <span class="re0">$response</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="me1">isXmlHttpRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stamp</span> <span class="sy0">=</span> <span class="kw2">new</span> M_Date<span class="br0">&#40;</span><span class="kw3">time</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$session</span> <span class="sy0">=</span> M_Session<span class="sy0">::</span><span class="me2">getInstance</span><span class="br0">&#40;</span><span class="st_h">'dateselector'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$session</span><span class="sy0">-&gt;</span><span class="me1">lastTimestamp</span> <span class="sy0">=</span> <span class="re0">$stamp</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$response</span><span class="sy0">-&gt;</span><span class="me1">addBody</span><span class="br0">&#40;</span>MTimeStamp_Index_View<span class="sy0">::</span><span class="me2">getIndexPage</span><span class="br0">&#40;</span><span class="re0">$stamp</span><span class="sy0">,</span><span class="re0">$session</span><span class="sy0">-&gt;</span><span class="me1">oldStamps</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$response</span><span class="sy0">-&gt;</span><span class="me1">addBody</span><span class="br0">&#40;</span>MTimeStamp_Index_View<span class="sy0">::</span><span class="me2">getUpdateJsc</span><span class="br0">&#40;</span><span class="re0">$stamp</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> add2ActualStampAction<span class="br0">&#40;</span>M_Request_Interface <span class="re0">$request</span><span class="sy0">,</span>M_Response_Interface <span class="re0">$response</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$session</span> <span class="sy0">=</span> M_Session<span class="sy0">::</span><span class="me2">getInstance</span><span class="br0">&#40;</span><span class="st_h">'dateselector'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stamp</span> <span class="sy0">=</span> clone <span class="re0">$session</span><span class="sy0">-&gt;</span><span class="me1">lastTimestamp</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'add_year'</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stamp</span><span class="sy0">-&gt;</span><span class="me1">addYear</span><span class="br0">&#40;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'add_year'</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'add_month'</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stamp</span><span class="sy0">-&gt;</span><span class="me1">addMonth</span><span class="br0">&#40;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'add_month'</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'add_day'</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stamp</span><span class="sy0">-&gt;</span><span class="me1">addDay</span><span class="br0">&#40;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'add_day'</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'add_hour'</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stamp</span><span class="sy0">-&gt;</span><span class="me1">addHour</span><span class="br0">&#40;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'add_hour'</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'add_minute'</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stamp</span><span class="sy0">-&gt;</span><span class="me1">addMinute</span><span class="br0">&#40;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'add_minute'</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'add_second'</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stamp</span><span class="sy0">-&gt;</span><span class="me1">addSecond</span><span class="br0">&#40;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'add_second'</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$session</span><span class="sy0">-&gt;</span><span class="me1">lastTimestamp</span> <span class="sy0">=</span> <span class="re0">$stamp</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$response</span><span class="sy0">-&gt;</span><span class="me1">addBody</span><span class="br0">&#40;</span>MTimeStamp_Index_View<span class="sy0">::</span><span class="me2">getActualStampInfo</span><span class="br0">&#40;</span><span class="re0">$stamp</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$response</span><span class="sy0">-&gt;</span><span class="me1">addBody</span><span class="br0">&#40;</span>MTimeStamp_Index_View<span class="sy0">::</span><span class="me2">getUpdateJsc</span><span class="br0">&#40;</span><span class="re0">$stamp</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> selectDateAction<span class="br0">&#40;</span>M_Request_Interface <span class="re0">$request</span><span class="sy0">,</span>M_Response_Interface <span class="re0">$response</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stamp</span> <span class="sy0">=</span> <span class="kw2">new</span> M_Date<span class="br0">&#40;</span><span class="kw3">time</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stamp</span><span class="sy0">-&gt;</span><span class="me1">setDay</span> &nbsp; &nbsp; <span class="br0">&#40;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'day_select'</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stamp</span><span class="sy0">-&gt;</span><span class="me1">setMonth</span> &nbsp; <span class="br0">&#40;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'month_select'</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stamp</span><span class="sy0">-&gt;</span><span class="me1">setYear</span> &nbsp; &nbsp;<span class="br0">&#40;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'year_select'</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stamp</span><span class="sy0">-&gt;</span><span class="me1">setHour</span> &nbsp; &nbsp;<span class="br0">&#40;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'hour_select'</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stamp</span><span class="sy0">-&gt;</span><span class="me1">setMinute</span> &nbsp;<span class="br0">&#40;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'minute_select'</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stamp</span><span class="sy0">-&gt;</span><span class="me1">setSecond</span> &nbsp;<span class="br0">&#40;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'second_select'</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stamp</span><span class="sy0">-&gt;</span><span class="me1">setTimeZone</span><span class="br0">&#40;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'timezone_select'</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$session</span> <span class="sy0">=</span> M_Session<span class="sy0">::</span><span class="me2">getInstance</span><span class="br0">&#40;</span><span class="st_h">'dateselector'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$session</span><span class="sy0">-&gt;</span><span class="me1">lastTimestamp</span> <span class="sy0">=</span> <span class="re0">$stamp</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$response</span><span class="sy0">-&gt;</span><span class="me1">addBody</span><span class="br0">&#40;</span>MTimeStamp_Index_View<span class="sy0">::</span><span class="me2">getActualStampInfo</span><span class="br0">&#40;</span><span class="re0">$stamp</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> selectInputStampAction<span class="br0">&#40;</span>M_Request_Interface <span class="re0">$request</span><span class="sy0">,</span>M_Response_Interface <span class="re0">$response</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stamp</span> <span class="sy0">=</span> <span class="kw2">new</span> M_Date<span class="br0">&#40;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'stamp'</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$session</span> <span class="sy0">=</span> M_Session<span class="sy0">::</span><span class="me2">getInstance</span><span class="br0">&#40;</span><span class="st_h">'dateselector'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$session</span><span class="sy0">-&gt;</span><span class="me1">lastTimestamp</span> <span class="sy0">=</span> <span class="re0">$stamp</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$response</span><span class="sy0">-&gt;</span><span class="me1">addBody</span><span class="br0">&#40;</span>MTimeStamp_Index_View<span class="sy0">::</span><span class="me2">getActualStampInfo</span><span class="br0">&#40;</span><span class="re0">$stamp</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$response</span><span class="sy0">-&gt;</span><span class="me1">addBody</span><span class="br0">&#40;</span>MTimeStamp_Index_View<span class="sy0">::</span><span class="me2">getUpdateJsc</span><span class="br0">&#40;</span><span class="re0">$stamp</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> loadOldStampAction<span class="br0">&#40;</span>M_Request_Interface <span class="re0">$request</span><span class="sy0">,</span>M_Response_Interface <span class="re0">$response</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$session</span> <span class="sy0">=</span> M_Session<span class="sy0">::</span><span class="me2">getInstance</span><span class="br0">&#40;</span><span class="st_h">'dateselector'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stamp</span> <span class="sy0">=</span> <span class="re0">$session</span><span class="sy0">-&gt;</span><span class="me1">oldStamps</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'loadStamp'</span><span class="br0">&#125;</span><span class="br0">&#125;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$response</span><span class="sy0">-&gt;</span><span class="me1">addBody</span><span class="br0">&#40;</span>MTimeStamp_Index_View<span class="sy0">::</span><span class="me2">getActualStampInfo</span><span class="br0">&#40;</span><span class="re0">$stamp</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$response</span><span class="sy0">-&gt;</span><span class="me1">addBody</span><span class="br0">&#40;</span>MTimeStamp_Index_View<span class="sy0">::</span><span class="me2">getUpdateJsc</span><span class="br0">&#40;</span><span class="re0">$stamp</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> resetOldStampsAction<span class="br0">&#40;</span>M_Request_Interface <span class="re0">$request</span><span class="sy0">,</span>M_Response_Interface <span class="re0">$response</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$session</span> <span class="sy0">=</span> M_Session<span class="sy0">::</span><span class="me2">getInstance</span><span class="br0">&#40;</span><span class="st_h">'dateselector'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$session</span><span class="sy0">-&gt;</span><span class="me1">oldStamps</span> <span class="sy0">=</span> <span class="kw2">new</span> M_Factory_Data<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$response</span><span class="sy0">-&gt;</span><span class="me1">addBody</span><span class="br0">&#40;</span>MTimeStamp_Index_View<span class="sy0">::</span><span class="me2">getOldStampList</span><span class="br0">&#40;</span><span class="re0">$session</span><span class="sy0">-&gt;</span><span class="me1">oldStamps</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> deletelOldStampAction<span class="br0">&#40;</span>M_Request_Interface <span class="re0">$request</span><span class="sy0">,</span>M_Response_Interface <span class="re0">$response</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$session</span> <span class="sy0">=</span> M_Session<span class="sy0">::</span><span class="me2">getInstance</span><span class="br0">&#40;</span><span class="st_h">'dateselector'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$session</span><span class="sy0">-&gt;</span><span class="me1">oldStamps</span><span class="br0">&#91;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'deleteStamp'</span><span class="br0">&#125;</span><span class="br0">&#93;</span><span class="sy0">=</span><span class="kw4">null</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$session</span><span class="sy0">-&gt;</span><span class="me1">oldStamps</span><span class="sy0">=</span><span class="kw3">array_values</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw3">array</span><span class="br0">&#41;</span> <span class="re0">$session</span><span class="sy0">-&gt;</span><span class="me1">oldStamps</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$response</span><span class="sy0">-&gt;</span><span class="me1">addBody</span><span class="br0">&#40;</span>MTimeStamp_Index_View<span class="sy0">::</span><span class="me2">getOldStampList</span><span class="br0">&#40;</span><span class="re0">$session</span><span class="sy0">-&gt;</span><span class="me1">oldStamps</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> add2OldStampsAction<span class="br0">&#40;</span>M_Request_Interface <span class="re0">$request</span><span class="sy0">,</span>M_Response_Interface <span class="re0">$response</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$session</span> <span class="sy0">=</span> M_Session<span class="sy0">::</span><span class="me2">getInstance</span><span class="br0">&#40;</span><span class="st_h">'dateselector'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$session</span><span class="sy0">-&gt;</span><span class="me1">oldStamps</span><span class="sy0">-&gt;</span><span class="me1">append</span><span class="br0">&#40;</span>clone <span class="re0">$session</span><span class="sy0">-&gt;</span><span class="me1">lastTimestamp</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$response</span><span class="sy0">-&gt;</span><span class="me1">addBody</span><span class="br0">&#40;</span>MTimeStamp_Index_View<span class="sy0">::</span><span class="me2">getOldStampList</span><span class="br0">&#40;</span><span class="re0">$session</span><span class="sy0">-&gt;</span><span class="me1">oldStamps</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> selectOldStampAction<span class="br0">&#40;</span>M_Request_Interface <span class="re0">$request</span><span class="sy0">,</span>M_Response_Interface <span class="re0">$response</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$session</span> <span class="sy0">=</span> M_Session<span class="sy0">::</span><span class="me2">getInstance</span><span class="br0">&#40;</span><span class="st_h">'dateselector'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stamp</span> <span class="sy0">=</span> <span class="re0">$session</span><span class="sy0">-&gt;</span><span class="me1">oldStamps</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="re0">$request</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="st_h">'loadStamp'</span><span class="br0">&#125;</span><span class="br0">&#125;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$session</span><span class="sy0">-&gt;</span><span class="me1">lastTimestamp</span> <span class="sy0">=</span> <span class="re0">$stamp</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$response</span><span class="sy0">-&gt;</span><span class="me1">addBody</span><span class="br0">&#40;</span>MTimeStamp_Index_View<span class="sy0">::</span><span class="me2">getActualStampInfo</span><span class="br0">&#40;</span><span class="re0">$stamp</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$response</span><span class="sy0">-&gt;</span><span class="me1">addBody</span><span class="br0">&#40;</span>MTimeStamp_Index_View<span class="sy0">::</span><span class="me2">getUpdateJsc</span><span class="br0">&#40;</span><span class="re0">$stamp</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></td></tr></tbody></table></div>
<div class="bwp-syntax-source"><pre class="no-parse">class MTimeStamp_Index_Controller extends M_Controller_Modul
{
	const TARGET_ID_ACTUAL = 'actualStamp';
	const TARGET_ID_OLD    = 'oldStamps';
	const MAX_OLD_ENTRIES  = 20;

	public function initAction()
	{
		if(M_Controller_Front::getRequest()-&gt;isXmlHttpRequest())
			M_Controller_Front::setResponse(new M_Response_Adapter_Data());
		else
			M_Controller_Front::setResponse(new M_Response_Adapter_Applet());

		M_Date_Helper::loadAdoDb();

		$session = M_Session::getInstance('dateselector');
		if(!isset($session-&gt;oldStamps))
		{
			$session-&gt;oldStamps = new M_Factory_Data();
			$session-&gt;lastTimestamp = new M_Date(time());
		}
	}

	public function indexAction(M_Request_Interface $request,M_Response_Interface $response)
	{
		if($request-&gt;isXmlHttpRequest())
			return ;

		$stamp = new M_Date(time());

		$session = M_Session::getInstance('dateselector');
		$session-&gt;lastTimestamp = $stamp;

		$response-&gt;addBody(MTimeStamp_Index_View::getIndexPage($stamp,$session-&gt;oldStamps));
		$response-&gt;addBody(MTimeStamp_Index_View::getUpdateJsc($stamp));
	}

	public function add2ActualStampAction(M_Request_Interface $request,M_Response_Interface $response)
	{
		$session = M_Session::getInstance('dateselector');

		$stamp = clone $session-&gt;lastTimestamp;

		if(isset($request-&gt;{'add_year'}))
			$stamp-&gt;addYear($request-&gt;{'add_year'});

		if(isset($request-&gt;{'add_month'}))
			$stamp-&gt;addMonth($request-&gt;{'add_month'});

		if(isset($request-&gt;{'add_day'}))
			$stamp-&gt;addDay($request-&gt;{'add_day'});

		if(isset($request-&gt;{'add_hour'}))
		$stamp-&gt;addHour($request-&gt;{'add_hour'});

		if(isset($request-&gt;{'add_minute'}))
			$stamp-&gt;addMinute($request-&gt;{'add_minute'});

		if(isset($request-&gt;{'add_second'}))
			$stamp-&gt;addSecond($request-&gt;{'add_second'});

		$session-&gt;lastTimestamp = $stamp;

		$response-&gt;addBody(MTimeStamp_Index_View::getActualStampInfo($stamp));
		$response-&gt;addBody(MTimeStamp_Index_View::getUpdateJsc($stamp));
	}

	public function selectDateAction(M_Request_Interface $request,M_Response_Interface $response)
	{
		$stamp = new M_Date(time());
		$stamp-&gt;setDay     ($request-&gt;{'day_select'});
		$stamp-&gt;setMonth   ($request-&gt;{'month_select'});
		$stamp-&gt;setYear    ($request-&gt;{'year_select'});
		$stamp-&gt;setHour    ($request-&gt;{'hour_select'});
		$stamp-&gt;setMinute  ($request-&gt;{'minute_select'});
		$stamp-&gt;setSecond  ($request-&gt;{'second_select'});
		$stamp-&gt;setTimeZone($request-&gt;{'timezone_select'});

		$session = M_Session::getInstance('dateselector');
		$session-&gt;lastTimestamp = $stamp;

		$response-&gt;addBody(MTimeStamp_Index_View::getActualStampInfo($stamp));
	}

	public function selectInputStampAction(M_Request_Interface $request,M_Response_Interface $response)
	{
		$stamp = new M_Date($request-&gt;{'stamp'});

		$session = M_Session::getInstance('dateselector');
		$session-&gt;lastTimestamp = $stamp;

		$response-&gt;addBody(MTimeStamp_Index_View::getActualStampInfo($stamp));
		$response-&gt;addBody(MTimeStamp_Index_View::getUpdateJsc($stamp));
	}

	public function loadOldStampAction(M_Request_Interface $request,M_Response_Interface $response)
	{
		$session = M_Session::getInstance('dateselector');

		$stamp = $session-&gt;oldStamps-&gt;{$request-&gt;{'loadStamp'}};

		$response-&gt;addBody(MTimeStamp_Index_View::getActualStampInfo($stamp));
		$response-&gt;addBody(MTimeStamp_Index_View::getUpdateJsc($stamp));
	}

	public function resetOldStampsAction(M_Request_Interface $request,M_Response_Interface $response)
	{
		$session = M_Session::getInstance('dateselector');
		$session-&gt;oldStamps = new M_Factory_Data();

		$response-&gt;addBody(MTimeStamp_Index_View::getOldStampList($session-&gt;oldStamps));
	}

	public function deletelOldStampAction(M_Request_Interface $request,M_Response_Interface $response)
	{
		$session = M_Session::getInstance('dateselector');
		$session-&gt;oldStamps[$request-&gt;{'deleteStamp'}]=null;
		$session-&gt;oldStamps=array_values((array) $session-&gt;oldStamps);

		$response-&gt;addBody(MTimeStamp_Index_View::getOldStampList($session-&gt;oldStamps));
	}

	public function add2OldStampsAction(M_Request_Interface $request,M_Response_Interface $response)
	{
		$session = M_Session::getInstance('dateselector');
		$session-&gt;oldStamps-&gt;append(clone $session-&gt;lastTimestamp);

		$response-&gt;addBody(MTimeStamp_Index_View::getOldStampList($session-&gt;oldStamps));
	}

	public function selectOldStampAction(M_Request_Interface $request,M_Response_Interface $response)
	{
		$session = M_Session::getInstance('dateselector');

		$stamp = $session-&gt;oldStamps-&gt;{$request-&gt;{'loadStamp'}};

		$session-&gt;lastTimestamp = $stamp;

		$response-&gt;addBody(MTimeStamp_Index_View::getActualStampInfo($stamp));
		$response-&gt;addBody(MTimeStamp_Index_View::getUpdateJsc($stamp));
	}
}</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.tomhanoldt.info/web/2011/unix-timestamp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mono&#124;tom</title>
		<link>http://www.tomhanoldt.info/web/2011/me/</link>
		<comments>http://www.tomhanoldt.info/web/2011/me/#comments</comments>
		<pubDate>Sun, 10 Apr 2011 18:25:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mono|HOME]]></category>

		<guid isPermaLink="false">http://www.tomhanoldt.info/web/?p=1</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><center></center></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomhanoldt.info/web/2011/me/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

