<?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/"
	xmlns:series="http://unfoldingneurons.com/"
	>

<channel>
	<title>Guggat emol Blog&#187; Komponenten die im ersten Sprint umgesetzt werden sollen</title>
	<atom:link href="http://www.baldenhofer.eu/blog/tag/programmieren/feed" rel="self" type="application/rss+xml" />
	<link>http://www.baldenhofer.eu/blog</link>
	<description>Roland bloggt über IT, Programmieren und Linux</description>
	<lastBuildDate>Wed, 08 Sep 2010 11:34:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Komponenten die im ersten Sprint umgesetzt werden sollen</title>
		<link>http://www.baldenhofer.eu/blog/it/programmieren/komponenten-die-im-ersten-sprint-umgesetzt-werden-sollen</link>
		<comments>http://www.baldenhofer.eu/blog/it/programmieren/komponenten-die-im-ersten-sprint-umgesetzt-werden-sollen#comments</comments>
		<pubDate>Wed, 17 Jun 2009 22:05:54 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Anforderungen]]></category>
		<category><![CDATA[Newssystem]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=1455</guid>
		<description><![CDATA[Dieser Artikel ist Teil 66 von 70 der Artikelserie  Newssystem  Damit wir mit dem Newssystem anfangen k&#246;nnen, bin ich der Meinung dass wir zuerst die Userverwaltung (Implementation von UserModel, EditorModel, MasterEditorModel, SysAdminModel und die UserModelFactory umsetzen sollten.
Weiterhin sollten wir erreichen, dass sich diese User am System anmelden k&#246;nnen.
Also w&#252;rde ich folgende fachliche CRUD [...]]]></description>
			<content:encoded><![CDATA[<div class="seriesmeta"><strong>Dieser Artikel ist Teil 66 von 70 der Artikelserie <a href="http://www.baldenhofer.eu/blog/series/newssystem" title="series-114"> Newssystem</a> </strong> </div><p>Damit wir mit dem Newssystem anfangen k&#246;nnen, bin ich der Meinung dass wir zuerst die Userverwaltung (Implementation von UserModel, EditorModel, MasterEditorModel, SysAdminModel und die UserModelFactory umsetzen sollten.<br />
Weiterhin sollten wir erreichen, dass sich diese User am System anmelden k&#246;nnen.<br />
Also w&#252;rde ich folgende fachliche CRUD Anwendungsf&#228;lle realisieren:</p>
<ul>
<li>Create Editor</li>
<li>Create MasterEditor</li>
<li>Create SysAdmin</li>
<li>Show Editors</li>
<li>Show SysAdmins</li>
<li>Show MasterEditors</li>
<li>Update Editor</li>
<li>Update SysAdmin</li>
<li>Update MasterEditor</li>
<li>Delete Editor</li>
<li>Delete SysAdmin</li>
<li>Delete MasterEditor</li>
</ul>
<p>Weiterhin w&#252;rde ich die technischen Anwendungsf&#228;lle f&#252;r die Passwortverwaltung erstellen:</p>
<ul>
<li>Reset Password</li>
<li>Change Password</li>
</ul>
<p>Und damit unser Newssystem mal ein paar Datens&#228;tze aufnehmen kann, w&#252;rde ich die erste Version des ArticleModel und der Kategorie erstellen.</p>
<ul>
<li>Create Category</li>
<li>Create Article</li>
<li>Show Categories</li>
<li>Show All Articles</li>
<li>Update Category</li>
<li>Update Article</li>
<li>Delete Category</li>
<li>Delete Article</li>
<li>Add Editor To Category</li>
<li>Add MasterEditor To Category</li>
<li>Remove Editor from Category</li>
<li>Remove MasterEditor from Category</li>
</ul>
<h3>Was ist das Ziel des ersten Sprints?</h3>
<p>Wir haben ein Basissystem mit dem wir rumprobieren k&#246;nnen.<br />
Es sind noch keine Userviews vorhanden.<br />
Wir k&#246;nnen mit CakePHP umgehen und sehen welche Eigenschaften wir tats&#228;chlich umsetzen m&#252;ssen.<br />
Testf&#228;lle f&#252;r das Basissystem sind vorhanden.<br />
Wir k&#246;nnen abpr&#252;fen, ob unsere Komplexit&#228;t ausreichend ist.<br />
Erste Designfehler sollten auftauchen.<br />
Eventuell m&#252;ssen wir nach diesem Schritt unser komplettes Design noch einmal &#252;berarbeiten.<br />
Vermutlich wird es aber soweit passen&#8230;</p>
<hr /><h2>&#196;hnliche Beitr&#228;ge</h2><ul>
<!-- Generated by Simple Tags 1.6.6 - http://wordpress.org/extend/plugins/simple-tags -->
	<h4 class="clear">Artikel mit &#228;hnlichen Schlagw&#246;rtern</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/zwischenschicht-zur-performancemessung-einbauen" title="Zwischenschicht zur Performancemessung einbauen (1. April 2009)" class="liinternal">Zwischenschicht zur Performancemessung einbauen</a> (1)</li>
	<li><a href="http://www.baldenhofer.eu/blog/guggat_emol/wie-schrumpft-man-das-system-gesund" title="wie schrumpft man das System Gesund? (6. Juli 2009)" class="liinternal">wie schrumpft man das System Gesund?</a> (2)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/verwalten-der-anforderungen" title="Verwalten der Anforderungen (16. Juni 2009)" class="liinternal">Verwalten der Anforderungen</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/usermodel-beschreibung" title="UserModel Beschreibung (30. April 2009)" class="liinternal">UserModel Beschreibung</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/technische-anwendungsfaelle" title="Technische Anwendungsf&#228;lle (23. M&auml;rz 2009)" class="liinternal">Technische Anwendungsf&#228;lle</a> (0)</li>
</ul>

</ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog" class="liinternal">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis f&#252;r Feedleser: Beitr&#228;ge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/programmieren/komponenten-die-im-ersten-sprint-umgesetzt-werden-sollen/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Newssystem]]></series:name>
	</item>
		<item>
		<title>Entscheidung wie das Newssystem jetzt umgesetzt werden soll</title>
		<link>http://www.baldenhofer.eu/blog/it/programmieren/entscheidung-wie-das-newssystem-jetzt-umgesetzt-werden-soll</link>
		<comments>http://www.baldenhofer.eu/blog/it/programmieren/entscheidung-wie-das-newssystem-jetzt-umgesetzt-werden-soll#comments</comments>
		<pubDate>Thu, 11 Jun 2009 10:38:26 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Newssystem]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=1453</guid>
		<description><![CDATA[Dieser Artikel ist Teil 61 von 70 der Artikelserie  Newssystem  Ich habe ja einige Artikel &#252;ber die Entscheidungsfindung ob wir das Newssystem nun selbst entwickeln, in WordPress als Plugin implementieren oder als externe Komponente an WordPress abinden sollen, geschrieben.
Wir hatten sehr viele konstruktive Diskussionen und nun m&#252;ssen wir uns entscheiden was wir machen [...]]]></description>
			<content:encoded><![CDATA[<div class="seriesmeta"><strong>Dieser Artikel ist Teil 61 von 70 der Artikelserie <a href="http://www.baldenhofer.eu/blog/series/newssystem" title="series-114"> Newssystem</a> </strong> </div><p>Ich habe ja einige Artikel &#252;ber die Entscheidungsfindung ob wir das Newssystem nun selbst entwickeln, in WordPress als Plugin implementieren oder als externe Komponente an WordPress abinden sollen, geschrieben.<br />
Wir hatten sehr viele konstruktive Diskussionen und nun m&#252;ssen wir uns entscheiden was wir machen wollen.</p>
<p>Wenn ihr mich fragt, dann bin ich f&#252;r eine Eigenentwicklung.<br />
Wir k&#246;nnen so ein Werkzeug erstellen, dass genau die Aufgabe der Newsdarstellung durchf&#252;hrt.<br />
In letzter Zeit habe ich mit der Admin-Oberfl&#228;che von WordPress diverse Schwierigkeiten.<br />
Ich verliere permanent die Tags, die Serien werden nicht richtig publiziert und die Geschwindigkeit der einzelnen Komponenten ist mir einfach zu langsam.<br />
Falls ihr eine andere Meinung habt und eine andere Variante bevorzugt, dann sagt es bitte.<br />
Ansonsten w&#252;rde ich empfehlen dieses Thema abzuschlie&#223;en und nun mit der Umsetzung / Anforderungsdefinition zu beginnen.</p>
<p>Was mein ihr?</p>
<hr /><h2>&#196;hnliche Beitr&#228;ge</h2><ul>
<!-- Generated by Simple Tags 1.6.6 - http://wordpress.org/extend/plugins/simple-tags -->
	<h4 class="clear">Artikel mit &#228;hnlichen Schlagw&#246;rtern</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/zwischenschicht-zur-performancemessung-einbauen" title="Zwischenschicht zur Performancemessung einbauen (1. April 2009)" class="liinternal">Zwischenschicht zur Performancemessung einbauen</a> (1)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/usermodel-beschreibung" title="UserModel Beschreibung (30. April 2009)" class="liinternal">UserModel Beschreibung</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/technische-anwendungsfaelle" title="Technische Anwendungsf&#228;lle (23. M&auml;rz 2009)" class="liinternal">Technische Anwendungsf&#228;lle</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/performancemessungen-ein-und-ausschalten" title="Performancemessungen ein- und ausschalten (2. April 2009)" class="liinternal">Performancemessungen ein- und ausschalten</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/performance-messung-auf-dem-server-durchfuehren" title="Performance Messung auf dem Server durchf&#252;hren (6. April 2009)" class="liinternal">Performance Messung auf dem Server durchf&#252;hren</a> (0)</li>
</ul>

</ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog" class="liinternal">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis f&#252;r Feedleser: Beitr&#228;ge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/programmieren/entscheidung-wie-das-newssystem-jetzt-umgesetzt-werden-soll/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<series:name><![CDATA[Newssystem]]></series:name>
	</item>
		<item>
		<title>Einsatz eines Frameworks f&#252;r die Erstellung des Newssystems</title>
		<link>http://www.baldenhofer.eu/blog/it/programmieren/einsatz-eines-frameworks-fuer-die-erstellung-des-newssystems</link>
		<comments>http://www.baldenhofer.eu/blog/it/programmieren/einsatz-eines-frameworks-fuer-die-erstellung-des-newssystems#comments</comments>
		<pubDate>Sun, 31 May 2009 10:04:39 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=1266</guid>
		<description><![CDATA[Dieser Artikel ist Teil 53 von 70 der Artikelserie  Newssystem  Mittlerweile habe ich ja einige Artikel zum Newssystem geschrieben.
Das Teil ist jetzt so beschrieben, dass wir uns allm&#228;hlich an die Entwicklung machen k&#246;nnen 
Ist ja auch langsam Zeit geworden oder?
Damit wir jetzt schnell und sicher zum Ziel kommen, sollten wir uns &#252;berlegen ob [...]]]></description>
			<content:encoded><![CDATA[<div class="seriesmeta"><strong>Dieser Artikel ist Teil 53 von 70 der Artikelserie <a href="http://www.baldenhofer.eu/blog/series/newssystem" title="series-114"> Newssystem</a> </strong> </div><p>Mittlerweile habe ich ja einige Artikel zum Newssystem geschrieben.<br />
Das Teil ist jetzt so beschrieben, dass wir uns allm&#228;hlich an die Entwicklung machen k&#246;nnen <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Ist ja auch langsam Zeit geworden oder?<br />
Damit wir jetzt schnell und sicher zum Ziel kommen, sollten wir uns &#252;berlegen ob wir alles selber programmieren wollen oder ob wir Arbeit an ein Framework abgeben wollen.</p>
<h3>Was bringt der Einsatz eines Frameworks?</h3>
<p>Beim Programmieren gibt es immer wieder Teilaufgaben, die sich wiederholen und die man nicht selber erstellen sollte.<br />
Beispiele hierf&#252;r sind:</p>
<ul>
<li>Validierung von e-Mail Adressen<br />
Falls eine e-Mail Adresse eingegeben werden muss, sollte kontrolliert werden ob der Anwender auch eine korrekte e-Mail Adresse eingegeben hat.</li>
<li>Leere Eingaben<br />
Falls bei einer News ein Titel nicht eingegeben wurde, soll das als Fehler betrachtet werden. Also sollten wir auf leere Eingaben reagieren.</li>
<li>SQL Injections<br />
Wenn ein b&#246;ser Mensch versucht unser System anzugreifen, sollten Standardverfahren zum Einsatz kommen. Diese Verfahren helfen uns, dass Scriptkiddies usw. keinen Angriff durchf&#252;hren k&#246;nnen.</li>
</ul>
<p>Ein Framework bietet f&#252;r diese Standardvalidierungen diverse Hilfen. So m&#252;ssen wir uns um solche langweiligen Programmieraufgaben nicht mehr k&#252;mmern.</p>
<h3>Welches Framework nehme ich f&#252;r die Newssystem Erstellung?</h3>
<p>Ich habe mich in <a href="http://cakephp.org/" class="liexternal">CakePHP</a> &#8220;verguggt&#8221;. Und warum will ich es f&#252;r das Newssystem verwenden?</p>
<ul>
<li>Es verwendet das Model View Controller (MVC) Pattern.<br />
All die bisher beschriebenen Modelle und die Abl&#228;ufe im Newssystem sind im Prinzip MVC Patterns. Wenn das darunterliegende Framework genau daf&#252;r erstellt wurde, dann passt es wie die Faust aufs Auge <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
<li>Es h&#228;lt sich an CRUD (Create, Read, Update, Delete)<br />
F&#252;r die Verwaltung von Daten ist CRUD ein Standardpattern. Es reflektiert die Standard Aktivit&#228;ten f&#252;r die Eingabe und Verwaltung von Daten. Und da wir unsere Bilder, Texte usw. Erstellen, Lesen, &#196;ndern und L&#246;schen wollen erf&#252;llt das Framework auch diese Anforderung</li>
<li>Es ist einfach zu Erlernen<br />
Meine ersten Gehversuche haben mir gezeigt, dass CakePHP relativ einfach zu erlernen ist. Ich werde sicherlich noch hier- und da ein wenig fluchen, aber das macht man bei jedem Framework.</li>
<li>Es bietet Automatismen um die ben&#246;tigten Klassen zu generieren<br />
Mit der Bake-Shell kann man seine eigenen Klassen &#8220;backen&#8221;. Damit kann man die Entwicklungszeit reduzieren, da die Skellette der einzelnen Klassen vorfindet und sich nur noch um den Inhalt k&#252;mmern muss.</li>
<li>Es bietet Internationalisierung<br />
Ich will das Newssystem so erstellen, dass wir es auch in England oder Frankreich verwenden k&#246;nnen. Die Internationalisierung ist Bestandteil des Frameworks. Also ist auch hier das Ziel erreicht.</li>
<li>Es hat ein Testvorgehen implementiert<br />
Mit CakePHP sind die Testszenarien abgebildet und man kann die vorhandenen Komponenten regressiv testen. Das macht mir Freude.</li>
<li>Man kann eigene Komponenten relativ einfach einbinden<br />
Wenn etwas vom Framework nicht abgedeckt wird, kann man eigene Komponenten hinzuf&#252;gen und anpassen. Also k&#246;nnen wir Gruscht und Glumps erfinden und neben dem CakePHP Framework verwalten. Damit k&#246;nnen wir auch Komponenten erstellen, falls wir mal nicht mit der Phillosophie von CakePHP zurechkommen.</li>
<li>Die Lizenz erlaubt uns eine freie EntwicklunG</li>
</ul>
<h3>Fazit</h3>
<p>Das CakePHP Framework scheint alle relevanten Aspekte, die ich mir f&#252;r die Erstellung des Newssystems vorstellen kann, abzudecken. Wir werden (hoffentlich) nicht jede Validierung und Konfiguration selbst erstellen m&#252;ssen und k&#246;nnen uns voll- und ganz um die wirklichen Eigenschaften des Newssystems k&#252;mmern k&#246;nnen.</p>
<p>Der Einsatz eines Frameworks kostet zwar Zeit um das Framework zuerst zu erlernen. Aber es kann die Entwicklung und Pflege des Codes im Nachhinein extrem beschleunigen.</p>
<p>Weiterhin kann mit dem Einsatz eines Framworks verhindert werden, dass man Fehler macht die schon mindestens 100 mal bei der Erstellung von &#228;hnlichen Applikationen gemacht worden sind. Man erstellt damit deutlich stabilere Systeme.</p>
<hr /><h2>&#196;hnliche Beitr&#228;ge</h2><ul>
<!-- Generated by Simple Tags 1.6.6 - http://wordpress.org/extend/plugins/simple-tags -->
	<h4 class="clear">Artikel mit &#228;hnlichen Schlagw&#246;rtern</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/juchu-erstes-modell-mit-cakephp" title="Juchu, erstes Modell mit CakePHP (30. Mai 2009)" class="liinternal">Juchu, erstes Modell mit CakePHP</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/erste-gehversuche-mit-cakephp" title="Erste Gehversuche mit CakePHP (27. Mai 2009)" class="liinternal">Erste Gehversuche mit CakePHP</a> (1)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/variablenzuweisungen-und-berechnungen" title="Variablenzuweisungen und Berechnungen (29. Januar 2009)" class="liinternal">Variablenzuweisungen und Berechnungen</a> (4)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/mit_cakephp_in_einer_stunde_zur_applikatio" title="Mit CakePHP in einer Stunde und zwei Minuten zur Applikation (30. Oktober 2009)" class="liinternal">Mit CakePHP in einer Stunde und zwei Minuten zur Applikation</a> (2)</li>
	<li><a href="http://www.baldenhofer.eu/blog/guggat_emol/miradlokit-ein-webapplikations-baukasten" title="miradlokit, ein Webapplikations Baukasten (31. August 2010)" class="liinternal">miradlokit, ein Webapplikations Baukasten</a> (0)</li>
</ul>

</ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog" class="liinternal">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis f&#252;r Feedleser: Beitr&#228;ge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/programmieren/einsatz-eines-frameworks-fuer-die-erstellung-des-newssystems/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Newssystem]]></series:name>
	</item>
		<item>
		<title>Juchu, erstes Modell mit CakePHP</title>
		<link>http://www.baldenhofer.eu/blog/it/programmieren/juchu-erstes-modell-mit-cakephp</link>
		<comments>http://www.baldenhofer.eu/blog/it/programmieren/juchu-erstes-modell-mit-cakephp#comments</comments>
		<pubDate>Sat, 30 May 2009 10:29:19 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=1259</guid>
		<description><![CDATA[Ich habe wieder etwas Zeit gefunden um weiter mit CakePHP rumzuprobieren.
Heute habe ich dem Modell Newsletter, dass ich ja schon im Artikel Erste Gehversuche mit CakePHP erw&#228;hnt habe, ein bisschen mit Leben gef&#252;llt.
Warum bei einem Newssystem ein Modell mit dem Namen Newsletter vorhanden sein soll kann ich leider nicht sagen. Ich w&#252;rde behaupten ich habe [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe wieder etwas Zeit gefunden um weiter mit CakePHP rumzuprobieren.<br />
Heute habe ich dem Modell Newsletter, dass ich ja schon im Artikel <a href="http://www.baldenhofer.eu/blog/it/programmieren/erste-gehversuche-mit-cakephp" class="liinternal">Erste Gehversuche mit CakePHP</a> erw&#228;hnt habe, ein bisschen mit Leben gef&#252;llt.<br />
Warum bei einem Newssystem ein Modell mit dem Namen Newsletter vorhanden sein soll kann ich leider nicht sagen. Ich w&#252;rde behaupten ich habe einfach nur ein bisschen rumgespielt und einen Namen ben&#246;tigt.<br />
Sobald ich eine View, einen Controller und ein Modell selber ausprobiert habe werde ich auch wieder ernsthaft anfangen die tats&#228;chlich ben&#246;tigten Modelle zu erstellen. Gro&#223;es Indianerehrenwort! <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h3>Validieren mit Cake</h3>
<p>Egal wie das Modell heisst, ich habe jetzt mal ein bisschen was unsinniges validiert.<br />
In CakePHP ist das sehr einfach durchzuf&#252;hren.<br />
Mein erster Versuch war, dass der Anwender f&#252;r den Titel minimal drei Zeichen eingeben muss. Maximal darf er 50 Zeichen eingeben.<br />
Und dann habe ich noch einen Sonderfall programmiert. Falls irgendwo in dem Titel der String &#8220;egon&#8221; vorkommt, wird ebenfalls ein Fehler ausgegeben.<br />
Hier der Code:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Newsletter <span class="kw2">extends</span> AppModel<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">public</span> <span class="re1">$name</span><span class="sy0">=</span><span class="st0">&#39;Newsletter&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">public</span> <span class="re1">$validate</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&#39;title&#39;</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#39;minlength&#39;</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#39;rule&#39;</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st0">&#39;minLength&#39;</span><span class="sy0">,</span> <span class="nu0">3</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">,</span> <span class="st0">&#39;required&#39;</span> <span class="sy0">=&gt;</span> <span class="kw2">true</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">,</span> <span class="st0">&#39;message&#39;</span> <span class="sy0">=&gt;</span> <span class="st0">&#39;Leerer Titel isch doof!&#39;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">,</span> <span class="st0">&#39;maxlength&#39;</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#39;rule&#39;</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st0">&#39;maxLength&#39;</span><span class="sy0">,</span> <span class="nu0">50</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">,</span> <span class="st0">&#39;required&#39;</span> <span class="sy0">=&gt;</span> <span class="kw2">true</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">,</span> <span class="st0">&#39;message&#39;</span> <span class="sy0">=&gt;</span> <span class="st0">&#39;Zu langer Titel isch doof!&#39;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#41;</span><span class="sy0">,</span> <span class="st0">&#39;own&#39;</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#39;rule&#39;</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st0">&#39;checkOwn&#39;</span><span class="sy0">,</span> <span class="st0">&#39;title&#39;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">,</span> <span class="st0">&#39;message&#39;</span> <span class="sy0">=&gt;</span> <span class="st0">&#39;Hey voll falsch&#39;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">function</span> checkOwn<span class="br0">&#40;</span><span class="re1">$data</span><span class="sy0">,</span> <span class="re1">$field</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$valid</span> <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">preg_match</span><span class="br0">&#40;</span><span class="st0">&quot;/(egon)/i&quot;</span><span class="sy0">,</span> <span class="re1">$data</span><span class="br0">&#91;</span><span class="re1">$field</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="re1">$results</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">sizeof</span><span class="br0">&#40;</span><span class="re1">$results</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$valid</span> <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$valid</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Besonders spannend finde ich die M&#246;glichkeit, eigene Funktionen bauen und einbinden zu k&#246;nnen.<br />
Du kannst hier sehen, dass man mit CakePHP die Validierungsregeln in Arrays beschreibt. Diese Art der Beschreibung finde ich sehr &#252;bersichtlich und angenehm zum Programmieren.</p>
<h3>Und wie sieht das Ganze in Aktion aus?</h3>
<p>Was mir unglaublich gut gef&#228;llt ist, dass CakePHP mit einem Controller Skelett und einer fast leeren Modell-Klasse schon das<br />
Pattern CRUD (Create, Read, Update, Delete) umgesetzt wird.<br />
Du kannst also schon mal mit dem leeren Modellen arbeiten und sehen, was du alles noch programmieren willst.<br />
Mit dem oben angepassten Code wird jetzt also der Titel verwaltet.<br />
Wenn ich mein Beispiel aufrufe, wird zuerst die &#220;bersicht &#252;ber alle Newsletter gezeigt.<br />
<img src="/images/blog/cakephp/newsletter_uebersicht.png" alt="Startseite vom Newsletter Modell" /><br />
Wenn auf <strong>edit</strong> gedr&#252;ckt wird, dann kann ein Eintrag bearbeitet werden.<br />
Falls hier ein falscher Wert eingegeben wurde, wie mein Egon hier, dann wird die Fehlermeldung ausgegeben.<br />
<img src="/images/blog/cakephp/newsletter_edit.png" alt="Falsche Eingabe im Titel" /><br />
Und schon ist eine Anwendung fertig <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Naja, fast oder?</p>
<hr /><h2>&#196;hnliche Beitr&#228;ge</h2><ul>
<!-- Generated by Simple Tags 1.6.6 - http://wordpress.org/extend/plugins/simple-tags -->
	<h4 class="clear">Artikel mit &#228;hnlichen Schlagw&#246;rtern</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/erste-gehversuche-mit-cakephp" title="Erste Gehversuche mit CakePHP (27. Mai 2009)" class="liinternal">Erste Gehversuche mit CakePHP</a> (1)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/einsatz-eines-frameworks-fuer-die-erstellung-des-newssystems" title="Einsatz eines Frameworks f&#252;r die Erstellung des Newssystems (31. Mai 2009)" class="liinternal">Einsatz eines Frameworks f&#252;r die Erstellung des Newssystems</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/variablenzuweisungen-und-berechnungen" title="Variablenzuweisungen und Berechnungen (29. Januar 2009)" class="liinternal">Variablenzuweisungen und Berechnungen</a> (4)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/mit_cakephp_in_einer_stunde_zur_applikatio" title="Mit CakePHP in einer Stunde und zwei Minuten zur Applikation (30. Oktober 2009)" class="liinternal">Mit CakePHP in einer Stunde und zwei Minuten zur Applikation</a> (2)</li>
	<li><a href="http://www.baldenhofer.eu/blog/guggat_emol/miradlokit-ein-webapplikations-baukasten" title="miradlokit, ein Webapplikations Baukasten (31. August 2010)" class="liinternal">miradlokit, ein Webapplikations Baukasten</a> (0)</li>
</ul>

</ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog" class="liinternal">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis f&#252;r Feedleser: Beitr&#228;ge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/programmieren/juchu-erstes-modell-mit-cakephp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kleine Aufgabe um mit JavaScript Events rumzuspielen</title>
		<link>http://www.baldenhofer.eu/blog/it/programmieren/kleine-aufgabe-um-mit-javascript-events-rumzuspielen</link>
		<comments>http://www.baldenhofer.eu/blog/it/programmieren/kleine-aufgabe-um-mit-javascript-events-rumzuspielen#comments</comments>
		<pubDate>Thu, 28 May 2009 08:13:23 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Grundlagen]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=1212</guid>
		<description><![CDATA[Dieser Artikel ist Teil 21 von 24 der Artikelserie  Grundlagen  Hier eine kleine Aufgabe:
Du hast eine HTML Seite auf der eine Eingabem&#246;glichkeit (z.B. eine Textarea oder ein Input Field) vorhanden ist.
Fokus setzen
Wenn du die HTML Seite l&#228;dst, wird der Cursor zuerst in dieses Eingabefeld positioniert.
Ausgabe der eingegebenen Zeichen
Wenn du in dem Eingabefeld etwas [...]]]></description>
			<content:encoded><![CDATA[<div class="seriesmeta"><strong>Dieser Artikel ist Teil 21 von 24 der Artikelserie <a href="http://www.baldenhofer.eu/blog/series/grundlagen" title="series-25"> Grundlagen</a> </strong> </div><p>Hier eine kleine Aufgabe:<br />
Du hast eine HTML Seite auf der eine Eingabem&#246;glichkeit (z.B. eine Textarea oder ein Input Field) vorhanden ist.</p>
<h3>Fokus setzen</h3>
<p>Wenn du die HTML Seite l&#228;dst, wird der Cursor zuerst in dieses Eingabefeld positioniert.</p>
<h3>Ausgabe der eingegebenen Zeichen</h3>
<p>Wenn du in dem Eingabefeld etwas eingibst, dann wird jedes eingegebene Zeichen in einem Ausgabebereich (paragraph oder so&#8230;) erscheinen. Im Startzustand werden die Zeichen einfach wieder so ausgegeben wie sie vom Anwender eingegeben worden sind.</p>
<h3>Sonderfall Text falschrum ausgeben</h3>
<p>Wenn die Checkbox &#8220;Falschrum&#8221; angeklickt wird, dann werden alle eingegebenen Zeichen verkehrt herum in dem Ausgabefeld ausgegeben.</p>
<h3>L&#246;sungsschritte</h3>
<ul>
<li>Schreibe zuerst auf, welche Mittel du zur Umsetzung einsetzten willst.</li>
<li>Beschreibe jede Datei die du erstellen willst.</li>
<li>Beschreibe welche Events du abfangen willst und warum du diese abfangen willst.</li>
<li>Schreibe die einzelnen Funktionen in Pseudocode. Also was muss bei der Initialisierung geschehen? Was wenn eine Taste gedr&#252;ckt wurde?</li>
<li>Programmiere zuerst alles ausser den Sonderfall.</li>
<li>Wenn das klappt programmiere den Sonderfall.</li>
<li>Stelle die Ergebnisse auf das Blog damit andere es auch sehen k&#246;nnen. (Nat&#252;rlich nur, wenn du auf das Blog Zugriff hast wie Jozo zum Beispiel <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</li>
</ul>
<hr /><h2>&#196;hnliche Beitr&#228;ge</h2><ul>
<!-- Generated by Simple Tags 1.6.6 - http://wordpress.org/extend/plugins/simple-tags -->
	<h4 class="clear">Artikel mit &#228;hnlichen Schlagw&#246;rtern</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.baldenhofer.eu/blog/guggat_emol/loesungsvorschlag-um-eingabefelder-waehrend-der-eingabe-mit-javascript-zu-ueberpruefen" title="L&#246;sungsvorschlag um Eingabefelder w&#228;hrend der Eingabe mit JavaScript zu &#252;berpr&#252;fen (29. April 2009)" class="liinternal">L&#246;sungsvorschlag um Eingabefelder w&#228;hrend der Eingabe mit JavaScript zu &#252;berpr&#252;fen</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmierung" title="Programmierung (29. Januar 2009)" class="liinternal">Programmierung</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/objekte" title="Objekte (13. M&auml;rz 2009)" class="liinternal">Objekte</a> (2)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/mit-javascript-einen-wiederkehrenden-event-erzeugen" title="Mit JavaScript einen wiederkehrenden Event erzeugen (10. M&auml;rz 2009)" class="liinternal">Mit JavaScript einen wiederkehrenden Event erzeugen</a> (5)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/mit-javascript-aus-einem-dokument-daten-lesen" title="Mit JavaScript aus einem Dokument Daten lesen (22. Februar 2009)" class="liinternal">Mit JavaScript aus einem Dokument Daten lesen</a> (0)</li>
</ul>

</ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog" class="liinternal">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis f&#252;r Feedleser: Beitr&#228;ge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/programmieren/kleine-aufgabe-um-mit-javascript-events-rumzuspielen/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Grundlagen]]></series:name>
	</item>
		<item>
		<title>Erste Gehversuche mit CakePHP</title>
		<link>http://www.baldenhofer.eu/blog/it/programmieren/erste-gehversuche-mit-cakephp</link>
		<comments>http://www.baldenhofer.eu/blog/it/programmieren/erste-gehversuche-mit-cakephp#comments</comments>
		<pubDate>Wed, 27 May 2009 18:01:23 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=1208</guid>
		<description><![CDATA[Ich habe jetzt endlich mal die Zeit gefunden ein bisschen das Framework CakePHP auszuprobieren.
Der erste Eindruck ist einfach nur sch&#246;n!
In der Serie Newssystem beschreibe ich die Eigenschaften eines Newssystems. CakePHP bietet sehr gute Vorraussetzungen um dieses Newssystem umzusetzen.
Es baut auf den MVC Designpattern auf und ist in sich sehr sch&#246;n strukturiert.
Damit ich beim Newssystem erstellen [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe jetzt endlich mal die Zeit gefunden ein bisschen das <a href="http://cakephp.org/" class="liexternal">Framework CakePHP </a>auszuprobieren.<br />
Der erste Eindruck ist einfach nur sch&#246;n!<br />
In der Serie <a href="http://www.baldenhofer.eu/blog/series/newssystem" class="liinternal">Newssystem</a> beschreibe ich die Eigenschaften eines Newssystems. CakePHP bietet sehr gute Vorraussetzungen um dieses Newssystem umzusetzen.<br />
Es baut auf den <a href="http://de.wikipedia.org/wiki/Model_View_Controller" rel="nofollow" class="liwikipedia">MVC Designpattern</a> auf und ist in sich sehr sch&#246;n strukturiert.<br />
Damit ich beim Newssystem erstellen auch etwas lerne, werde ich es also mit CakePHP umsetzen.</p>
<h3>Installation und Konfiguration</h3>
<p>Im <a href="http://book.cakephp.org/view/218/Tutorials-Examples" class="liexternal">Tutorials</a> wird sehr sch&#246;n beschrieben wie du die erste Applikation erstellen kannst.<br />
Ich musste meinen Apache noch ein wenig &#252;berreden, dass er die .htaccess auch wirklich ausliest.<br />
Dazu habe ich in meinem VHOST folgende Informationen eingetragen:</p>
<p class="code">
&lt;VirtualHost nemo_newsletter&gt;<br />
&nbsp;&nbsp;ServerAdmin root@localhost<br />
&nbsp;&nbsp;ServerName nemo_newsletter<br />
&nbsp;&nbsp;DocumentRoot &#8220;/home/roland/workspace/newsletter&#8221;<br />
&nbsp;&nbsp;&lt;Directory &#8220;/home/roland/workspace/newsletter&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Options Indexes FollowSymLinks<br />
&nbsp;&nbsp;&nbsp;&nbsp;AllowOverride ALL<br />
&nbsp;&nbsp;&nbsp;&nbsp;Order allow,deny<br />
&nbsp;&nbsp;&nbsp;&nbsp;Allow from all<br />
&nbsp;&nbsp;&lt;/Directory&gt;<br />
&nbsp;&nbsp;&lt;IfModule mpm_peruser_module&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ServerEnvironment apache apache<br />
&nbsp;&nbsp;&lt;/IfModule&gt;<br />
&lt;/VirtualHost&gt;
</p>
<p>Wie du siehst, heisst mein lokaler Server nemo_newsletter.<br />
Und der rootpath ist /home/roland/workspace/newsletter.<br />
Spannend ist vor allem der Eintrag <span class="code">AllowOverride ALL</span><br />
Dieser erlaubt es, dass dein Server die .htaccess ausf&#252;hrt.<br />
Eventuell hilft auch noch der Eintrag <span class="code">Options Indexes FollowSymLinks</span><br />
Nachdem ich diese Eintr&#228;ge vorgenommen habe, konnte ich so wie im Tutorial beschrieben meine erste Applikation zusammenstecken.<br />
Ich hab nat&#252;rlich keine Jobs Applikation erstellt, sondern mal mit einer newsletters Applikation angefangen <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Bisher macht es wirklich Spa&#223;!<br />
Wenn ich mal ein bisschen weiter bin, werde ich mich wieder melden.</p>
<hr /><h2>&#196;hnliche Beitr&#228;ge</h2><ul>
<!-- Generated by Simple Tags 1.6.6 - http://wordpress.org/extend/plugins/simple-tags -->
	<h4 class="clear">Artikel mit &#228;hnlichen Schlagw&#246;rtern</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/juchu-erstes-modell-mit-cakephp" title="Juchu, erstes Modell mit CakePHP (30. Mai 2009)" class="liinternal">Juchu, erstes Modell mit CakePHP</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/einsatz-eines-frameworks-fuer-die-erstellung-des-newssystems" title="Einsatz eines Frameworks f&#252;r die Erstellung des Newssystems (31. Mai 2009)" class="liinternal">Einsatz eines Frameworks f&#252;r die Erstellung des Newssystems</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/variablenzuweisungen-und-berechnungen" title="Variablenzuweisungen und Berechnungen (29. Januar 2009)" class="liinternal">Variablenzuweisungen und Berechnungen</a> (4)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/mit_cakephp_in_einer_stunde_zur_applikatio" title="Mit CakePHP in einer Stunde und zwei Minuten zur Applikation (30. Oktober 2009)" class="liinternal">Mit CakePHP in einer Stunde und zwei Minuten zur Applikation</a> (2)</li>
	<li><a href="http://www.baldenhofer.eu/blog/guggat_emol/miradlokit-ein-webapplikations-baukasten" title="miradlokit, ein Webapplikations Baukasten (31. August 2010)" class="liinternal">miradlokit, ein Webapplikations Baukasten</a> (0)</li>
</ul>

</ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog" class="liinternal">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis f&#252;r Feedleser: Beitr&#228;ge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/programmieren/erste-gehversuche-mit-cakephp/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Aufgabe Eingaben &#252;berpr&#252;fen Erweiterungen</title>
		<link>http://www.baldenhofer.eu/blog/it/programmieren/aufgabe-eingaben-ueberpruefen-erweiterungen</link>
		<comments>http://www.baldenhofer.eu/blog/it/programmieren/aufgabe-eingaben-ueberpruefen-erweiterungen#comments</comments>
		<pubDate>Mon, 04 May 2009 08:28:07 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Unterricht]]></category>
		<category><![CDATA[Grundlagen]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=953</guid>
		<description><![CDATA[Dieser Artikel ist Teil 16 von 24 der Artikelserie  Grundlagen  Bei der letzten Aufgabe wurden Werte zwischen -10 und 100 als erlaubte Werte definiert.
Die Eingabe&#252;berpr&#252;fung konnte daher mit dem ersten Tastendruck erfolgen. Was passiert wenn folgende Werte erlaubt sein sollen?

-100 bis -20
0 bis 100

Aufgabe
Schreibe eine neue Eingaberoutine, eine daf&#252;r angepasste HTML Seite, und [...]]]></description>
			<content:encoded><![CDATA[<div class="seriesmeta"><strong>Dieser Artikel ist Teil 16 von 24 der Artikelserie <a href="http://www.baldenhofer.eu/blog/series/grundlagen" title="series-25"> Grundlagen</a> </strong> </div><p>Bei<a href="http://www.baldenhofer.eu/blog/guggat_emol/aufgabe-eingaben-ueberpruefen-erweiterungen" class="liinternal"> der letzten Aufgabe </a>wurden Werte zwischen -10 und 100 als erlaubte Werte definiert.<br />
Die Eingabe&#252;berpr&#252;fung konnte daher mit dem ersten Tastendruck erfolgen. Was passiert wenn folgende Werte erlaubt sein sollen?</p>
<ul>
<li>-100 bis -20</li>
<li>0 bis 100</li>
</ul>
<h3>Aufgabe</h3>
<p>Schreibe eine neue Eingaberoutine, eine daf&#252;r angepasste HTML Seite, und was du sonst noch so brauchst um dieses Problem zu l&#246;sen.<br />
Beschreibe zuerst, was diesmal die Knackpunkte sind und schreibe entsprechend auf auf was du achten musst.</p>
<hr /><h2>&#196;hnliche Beitr&#228;ge</h2><ul>
<!-- Generated by Simple Tags 1.6.6 - http://wordpress.org/extend/plugins/simple-tags -->
	<h4 class="clear">Artikel mit &#228;hnlichen Schlagw&#246;rtern</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.baldenhofer.eu/blog/it/programmierung" title="Programmierung (29. Januar 2009)" class="liinternal">Programmierung</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/objekte" title="Objekte (13. M&auml;rz 2009)" class="liinternal">Objekte</a> (2)</li>
	<li><a href="http://www.baldenhofer.eu/blog/guggat_emol/loesungsvorschlag-um-eingabefelder-waehrend-der-eingabe-mit-javascript-zu-ueberpruefen" title="L&#246;sungsvorschlag um Eingabefelder w&#228;hrend der Eingabe mit JavaScript zu &#252;berpr&#252;fen (29. April 2009)" class="liinternal">L&#246;sungsvorschlag um Eingabefelder w&#228;hrend der Eingabe mit JavaScript zu &#252;berpr&#252;fen</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/kleiner-kurzeinschub-zum-attributmodellieren" title="Kleiner Kurzeinschub zum Attributmodellieren (17. M&auml;rz 2009)" class="liinternal">Kleiner Kurzeinschub zum Attributmodellieren</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/kleine-aufgabe-um-mit-javascript-events-rumzuspielen" title="Kleine Aufgabe um mit JavaScript Events rumzuspielen (28. Mai 2009)" class="liinternal">Kleine Aufgabe um mit JavaScript Events rumzuspielen</a> (0)</li>
</ul>

</ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog" class="liinternal">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis f&#252;r Feedleser: Beitr&#228;ge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/programmieren/aufgabe-eingaben-ueberpruefen-erweiterungen/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<series:name><![CDATA[Grundlagen]]></series:name>
	</item>
		<item>
		<title>Meldungsverwaltung und Severity Bestimmung im Newssystem</title>
		<link>http://www.baldenhofer.eu/blog/it/programmieren/meldungsverwaltung-und-severity-bestimmung-im-newssystem</link>
		<comments>http://www.baldenhofer.eu/blog/it/programmieren/meldungsverwaltung-und-severity-bestimmung-im-newssystem#comments</comments>
		<pubDate>Sun, 03 May 2009 19:33:00 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[meldung]]></category>
		<category><![CDATA[Newssystem]]></category>
		<category><![CDATA[severity]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=978</guid>
		<description><![CDATA[Dieser Artikel ist Teil 51 von 70 der Artikelserie  Newssystem  Ich habe bei der Beschreibung der bisherigen Modelle immer wieder von Informationsmeldungen und Fehlermeldungen gesprochen.
Was stelle ich mir darunter vor?
Informationsmeldung
Meldungen, die den Programmfluss nicht beeintr&#228;chtigen, werden Informationen genannt. Falls ein Anwender ein falsches Passwort verwendet, haben wir hierf&#252;r einen Programmablauf erstellt. Der Anwender [...]]]></description>
			<content:encoded><![CDATA[<div class="seriesmeta"><strong>Dieser Artikel ist Teil 51 von 70 der Artikelserie <a href="http://www.baldenhofer.eu/blog/series/newssystem" title="series-114"> Newssystem</a> </strong> </div><p>Ich habe bei der Beschreibung der bisherigen Modelle immer wieder von Informationsmeldungen und Fehlermeldungen gesprochen.<br />
Was stelle ich mir darunter vor?</p>
<h3>Informationsmeldung</h3>
<p>Meldungen, die den Programmfluss nicht beeintr&#228;chtigen, werden Informationen genannt. Falls ein Anwender ein falsches Passwort verwendet, haben wir hierf&#252;r einen Programmablauf erstellt. Der Anwender ben&#246;tigt die Information, dass mit seinem Passwort etwas nicht stimmt. Mehr passiert jedoch nicht.</p>
<h3>Fehlermeldungen</h3>
<p>Wenn wir irgendwie Mist programmieren, dann entstehen Programmabbr&#252;che. Wir werden Fehlermeldungen erhalten. Eine Fehlermeldung f&#252;hrt unweigerlich zu einem Programmabbruch.</p>
<h3>Brauchen wir noch mehr Meldungsformen?</h3>
<p>Normalerweise baut man in ein System noch Warnungen ein. Eine Warnung bedeutet, dass irgend etwas schief gegangen ist, dass System jedoch weiter arbeiten kann. Aus einer Warnung kann irgendwann einmal ein Fehler resultieren.<br />
Praktische Beispiele sind:</p>
<ul>
<li>Speicherplatz zu 80% voll</li>
<li>Antwortzeiten der Datenbank erh&#246;hen sich auf 100ms</li>
<li>Von einer IP Adresse wurde 20 Mal in einer Sekunde zugegriffen</li>
<li>Ein User hat versucht auf einen Account zehn mal ein falsches Passwort einzugeben.</li>
</ul>
<p>Eine Warnung gibt uns also Informationen, falls das System irgendwelche Schmerzen versp&#252;rt.<br />
Ich w&#252;rde daher vorschlagen dass wir grunds&#228;tzlich Fehler, Warnungen und Informationen im Meldungssystem verwenden.<br />
Fehler, Warnungen und Informationen werden auch Severity-Definition genannt. Ein Fehler hat die h&#246;chste Severity. Eine Information die geringste. Severity beschreibt die schwere einer Systemmeldung.</p>
<hr /><h2>&#196;hnliche Beitr&#228;ge</h2><ul>
<!-- Generated by Simple Tags 1.6.6 - http://wordpress.org/extend/plugins/simple-tags -->
	<h4 class="clear">Artikel mit &#228;hnlichen Schlagw&#246;rtern</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/zwischenschicht-zur-performancemessung-einbauen" title="Zwischenschicht zur Performancemessung einbauen (1. April 2009)" class="liinternal">Zwischenschicht zur Performancemessung einbauen</a> (1)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/usermodel-beschreibung" title="UserModel Beschreibung (30. April 2009)" class="liinternal">UserModel Beschreibung</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/technische-anwendungsfaelle" title="Technische Anwendungsf&#228;lle (23. M&auml;rz 2009)" class="liinternal">Technische Anwendungsf&#228;lle</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/performancemessungen-ein-und-ausschalten" title="Performancemessungen ein- und ausschalten (2. April 2009)" class="liinternal">Performancemessungen ein- und ausschalten</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/performance-messung-auf-dem-server-durchfuehren" title="Performance Messung auf dem Server durchf&#252;hren (6. April 2009)" class="liinternal">Performance Messung auf dem Server durchf&#252;hren</a> (0)</li>
</ul>

</ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog" class="liinternal">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis f&#252;r Feedleser: Beitr&#228;ge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/programmieren/meldungsverwaltung-und-severity-bestimmung-im-newssystem/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Newssystem]]></series:name>
	</item>
		<item>
		<title>UserModel Beschreibung</title>
		<link>http://www.baldenhofer.eu/blog/it/programmieren/usermodel-beschreibung</link>
		<comments>http://www.baldenhofer.eu/blog/it/programmieren/usermodel-beschreibung#comments</comments>
		<pubDate>Thu, 30 Apr 2009 17:46:06 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[Newssystem]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=974</guid>
		<description><![CDATA[Dieser Artikel ist Teil 50 von 70 der Artikelserie  Newssystem  Unser UserModel dient als Basisklasse f&#252;r alle Anwendertypen.
Wir designen es als Bean in dem die entsprechenden Attribute verwaltet werden.

Attribute des UserModels
Alle Attribute, die f&#252;r jeden Anwender gespeichert werden m&#252;ssen, sind hier abgelegt.
name
Der Name des Anwenders. Dieser Name muss mindestens ein Zeichen beinhalten und [...]]]></description>
			<content:encoded><![CDATA[<div class="seriesmeta"><strong>Dieser Artikel ist Teil 50 von 70 der Artikelserie <a href="http://www.baldenhofer.eu/blog/series/newssystem" title="series-114"> Newssystem</a> </strong> </div><p>Unser UserModel dient als Basisklasse f&#252;r alle Anwendertypen.<br />
Wir designen es als Bean in dem die entsprechenden Attribute verwaltet werden.<br />
<img alt="Das UserModel" src="/images/blog/newssystem/UserModel.png" /></p>
<h3>Attribute des UserModels</h3>
<p>Alle Attribute, die f&#252;r jeden Anwender gespeichert werden m&#252;ssen, sind hier abgelegt.</p>
<h4>name</h4>
<p>Der Name des Anwenders. Dieser Name muss mindestens ein Zeichen beinhalten und darf maximal 200 Zeichen lang sein.<br />
Falls kein Name eingegeben wurde, soll mit der Information &#8220;Bitte einen Namen eingeben&#8221; abgebrochen werden.<br />
Falls der Name zu lange ist, soll mit der Information &#8220;Der Name beinhaltet zu viele Zeichen. Bitte korrigieren.&#8221; abgebrochen werden.<br />
Zum Setzen des Namens wird <strong>setName(name)</strong> verwendet.<br />
Zum Auslesen des Namens wird <strong>getName()</strong> verwendet.</p>
<h4>surname</h4>
<p>Der Vorname des Anwenders. Dieser Vorname muss mindestens ein Zeichen beinhalten und darf maximal 200 Zeichen lang sein.<br />
Falls kein Vorname eingegeben wurde, soll mit der Information &#8220;Bitte einen Vornamen eingeben&#8221; abgebrochen werden.<br />
Falls der Vorname zu lange ist, soll mit der Information &#8220;Der Vorname beinhaltet zu viele Zeichen. Bitte korrigieren.&#8221; abgebrochen werden.<br />
Zum Setzen des Nachnamens wird <strong>setSurname(surname)</strong> verwendet.<br />
Zum Auslesen des Nachnamens wird <strong>getSurname()</strong> verwendet.</p>
<h4>email</h4>
<p>Die E-Mail Adresse muss zumindest einen g&#252;ltigen Aufbau haben.<br />
Also aaa.bbb@ccc.ddd<br />
oder bbb@ccc.ddd<br />
Falls eine falsch aufgebaute Adresse &#252;bergeben wird, muss mit einer Information &#8220;Dies ist keine g&#252;ltige E-Mail Adresse&#8221; abgebrochen werden.<br />
Zum Setzen der E-Mail Adresse wird <strong>setEmail(email)</strong> verwendet.<br />
Zum Auslesen der E-Mail Adresse wird <strong>getEmail()</strong> verwendet.</p>
<h4>loginName</h4>
<p>Mit diesem Namen wird sich der Anwender am System anmelden. Der LoginName darf in der gesamten Newssysteminstanz nur einmal vorkommen.<br />
Der LoginName muss mindestens ein Zeichen haben und darf maximal 20 Zeichen beinhalten.<br />
Ein LoginName, wie <strong>bienchen87</strong>, ist zugelassen.<br />
Falls kein loginName eingegeben wird, soll mit der Information &#8220;Bitte geben Sie einen Loginnamen&#8221; abgebrochen werden.<br />
Falls der loginName l&#228;nger als 20 Zeichen ist, soll mit der Information &#8220;Bitte einen k&#252;rzeren Loginnamen eingeben&#8221; abgebrochen werden.<br />
Falls der loginName im System schon vorhanden ist, wird mit der Information &#8220;Dieser Loginname ist im System nicht verf&#252;gbar, bitte einen anderen w&#228;hlen.&#8221; abgebrochen.<br />
Zum Setzen des login-Namens wird <strong>setLoginName(loginName)</strong> verwendet.<br />
Zum Auslesen des Login-Namens wird <strong>getLoginName()</strong> verwendet.</p>
<h4>password</h4>
<p>Das Passwort wird verschl&#252;sselt abgespeichert.<br />
Das Passwort wird mittels JavaScript auf dem Client verschl&#252;sselt.<br />
Falls ein Webuser angelegt wird, wird kein Passwort angelegt. Der Webuser ben&#246;tigt kein Passwort um sich am System anzumelden.<br />
Sonst m&#252;sste ja jeder Webseitenbesucher sich erst anmelden. Das w&#228;re ziemlich doof <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
F&#252;r das DefaultPassword werden wir ein PropertyModel erstellen, von dem das DefaultPassword zur Laufzeit gezogen werden kann.<br />
Ein Anwender muss sein Passwort nach einer im System hinterlegten Password Change Time wechseln.<br />
Im Fall des UserModels wird der Passwortwechsel nie vorkommen. Das UserModel hat die Berechtigungen eines WEBUSER.<br />
Wenn das Passwort neu gesetzt wird, darf es nicht mit dem aktuellen oder dem zuvor verwendeten Passwort &#252;bereinstimmen. Deshalb wird das neue Passwort mit dem oldPassword verglichen.<br />
Hier habe ich die &#220;berpr&#252;fung von alten Passw&#246;rtern nur auf das aktuelle und das letzte Passwort eingegrenzt. Falls weitere alte Passw&#246;rter ber&#252;cksichtigt werden m&#252;ssen, muss dies in der abgeleiteten Klasse entsprechend auscodiert werden. Meine Erfahrung sagt jedoch, dass die meisten Kunden gar keine h&#246;here Sicherheit als zwei Passw&#246;rter verwenden wollen.<br />
Falls beim Setzen des Passworts kein Passwort eingegeben wurde, wird mit der Informationsmeldung &#8220;Bitte Passwort eingeben&#8221; abgebrochen.<br />
Falls beim Setzen des Passworts ein bereits verwendetes Passwort eingegeben wurde, wird mit der Informationsmeldung &#8220;Passwort schon in Gebrauch, bitte ein anderes verwenden.&#8221; abgebrochen.<br />
Je nach Anwendertyp muss dass Passwort eine bestimmte L&#228;nge aufweisen. Falls ein zu kurzes Passwort eingegeben wurde, wird mit der Informationsmelung &#8220;Bitte l&#228;ngeres Passwort verwenden.&#8221; abgebrochen.<br />
Je nach Anwendertyp muss das Passwort einen bestimmten Aufbau (benutzung von Sonderzeichen usw.) aufweisen. Ein Systemadministrator darf also nicht aaaaaaaa als sein Passwort verwenden. Falls ein nicht stark genuges Passwort verwendet wurde, wird mit der Informationsmeldung &#8220;Dieses Passwort ist nicht sicher genug, bitte verwenden Sie auch Sonderzeichen.&#8221; abgebrochen.<br />
Die Passwort&#252;berpr&#252;fung wird pro UserType festgelegt Das bedeutet, dass das UserModel mit WEBUSER Rechten arbeitet. Es wird somit kein User-Passwort &#252;berpr&#252;ft und jeder Anwender erh&#228;lt Zugriff auf das System.<br />
Beim Einloggen wird mit der Methode <strong>checkPassword(loginName, password)</strong> gepr&#252;ft, ob das Passwort vom User korrekt &#252;bergeben wurde.<br />
Zum Setzen eines neuen Passworts wird <strong>setPassword(password, repeatPassword)</strong> verwendet. Hierbei wird auch der Test, ob das Passwort sicher genug ist und nicht mit dem vorigen Passwort &#252;bereinstimmt durchgef&#252;hrt.<br />
Beim Setzen des Passworts muss das neue Passwort zweimal eingegeben werden. Dies wird mit dem Parameter repeatPassword &#252;bergeben.<br />
Mit der Methode <strong>getPasswordLength()</strong> wird die L&#228;nge zur&#252;ckgeliefert, die ein Passwort mindestens haben muss.</p>
<h4>passwordAge</h4>
<p>Angabe wie alt das aktuelle Passwort ist.<br />
Falls passwordAge &#228;lter ist, als das f&#252;r den jeweiligen User definierte Passwortalter, wird der Anwender aufgefordert sein Passwort zu &#228;ndern.</p>
<h4>currentLoginTryCount</h4>
<p>Falls ein b&#246;ser Mensch unser System angreifen will, wird er vermutlich mehrmals eine User-Passwort Kombination verwenden. Hier w&#228;re es gut, wenn nach z.B. f&#252;nf Versuchen der Account gesperrt wird.<br />
Dann sollte eine entsprechende Mail an den betroffenen User und den Systemadministrator geschickt werden.<br />
Falls ein User sich nach z.B. zwei Versuchen erfolgreich angemeldet hat, wird der Z&#228;hler currentLoginTryCount wieder zur&#252;ckgesetzt.<br />
Bei jedem nicht erfolgreichen Loginversuch wird er um eins erh&#246;ht.<br />
Dieser Z&#228;hler wird in der Methode <strong>checkPassword()</strong> verwendet.</p>
<h3>Aufgabe</h3>
<p>Liebe Ute, lieber Jozo. Dieses UserModel verarbeitet Passw&#246;rter in der Basisklasse selbst. Bei unseren bisherigen hirachischen Userverwaltungen haben wir dies au&#223;erhalb der User Klasse gehandhabt.<br />
Ich finde die Modellierung in dieser Klasse relativ elegant. Wir brauchen deutlich weniger Verwaltungsklassen.<br />
Komplexe Passwort&#252;berpr&#252;fungen, wie in fr&#252;heren Versionen unseres miradlo Frameworks, k&#246;nnen wir durch Programmierung der Klassen abbilden.<br />
Bitte lest euch diese Beschreibung hier genau durch und versucht nachzuvollziehen ob wir hiermit eine saubere L&#246;sung erhalten.<br />
Was f&#252;r Nachteile hat dieses Vorgehen?<br />
Wie sollen wir bei einem Angriff vorgehen? Ist mein Vorschlag ok oder sollten wir den noch nachbessern?</p>
<hr /><h2>&#196;hnliche Beitr&#228;ge</h2><ul>
<!-- Generated by Simple Tags 1.6.6 - http://wordpress.org/extend/plugins/simple-tags -->
	<h4 class="clear">Artikel mit &#228;hnlichen Schlagw&#246;rtern</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.baldenhofer.eu/blog/guggat_emol/newssytem-daten-modellieren" title="Newssytem Daten Modellieren (6. April 2009)" class="liinternal">Newssytem Daten Modellieren</a> (1)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/imagemodel-beschreibung" title="ImageModel Beschreibung (10. April 2009)" class="liinternal">ImageModel Beschreibung</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/geschaeftsmodelle-erkennen" title="Gesch&#228;ftsmodelle erkennen (8. April 2009)" class="liinternal">Gesch&#228;ftsmodelle erkennen</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/zwischenschicht-zur-performancemessung-einbauen" title="Zwischenschicht zur Performancemessung einbauen (1. April 2009)" class="liinternal">Zwischenschicht zur Performancemessung einbauen</a> (1)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/usermodelfactory" title="UserModelFactory (1. Mai 2009)" class="liinternal">UserModelFactory</a> (0)</li>
</ul>

</ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog" class="liinternal">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis f&#252;r Feedleser: Beitr&#228;ge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/programmieren/usermodel-beschreibung/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Newssystem]]></series:name>
	</item>
		<item>
		<title>L&#246;sungsvorschlag um Eingabefelder w&#228;hrend der Eingabe mit JavaScript zu &#252;berpr&#252;fen</title>
		<link>http://www.baldenhofer.eu/blog/guggat_emol/loesungsvorschlag-um-eingabefelder-waehrend-der-eingabe-mit-javascript-zu-ueberpruefen</link>
		<comments>http://www.baldenhofer.eu/blog/guggat_emol/loesungsvorschlag-um-eingabefelder-waehrend-der-eingabe-mit-javascript-zu-ueberpruefen#comments</comments>
		<pubDate>Wed, 29 Apr 2009 14:59:30 +0000</pubDate>
		<dc:creator>Jozo</dc:creator>
				<category><![CDATA[Guggat emol]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Grundlagen]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=961</guid>
		<description><![CDATA[Dieser Artikel ist Teil 15 von 24 der Artikelserie  Grundlagen  Hier ein L&#246;sungsvorschlag f&#252;r die Aufgabe aus dem Artikel Eingabefelder w&#228;hrend der Eingabe pr&#252;fen.
Um diese Anwendung zu realisieren reicht HTML und JavaScript aus. Ausserdem arbeiten wir auf Client -Seite, und deswegen passt JavaScript doch eigentlich auch ganz gut.
F&#252;r die Realisierung habe ich mal [...]]]></description>
			<content:encoded><![CDATA[<div class="seriesmeta"><strong>Dieser Artikel ist Teil 15 von 24 der Artikelserie <a href="http://www.baldenhofer.eu/blog/series/grundlagen" title="series-25"> Grundlagen</a> </strong> </div><p>Hier ein L&#246;sungsvorschlag f&#252;r die Aufgabe aus dem Artikel <a href="http://www.baldenhofer.eu/blog/it/programmieren/aufgabe-eingabefelder-waehrend-der-eingabe-ueberpruefen" class="liinternal">Eingabefelder w&#228;hrend der Eingabe pr&#252;fen</a>.</p>
<p>Um diese Anwendung zu realisieren reicht HTML und JavaScript aus. Ausserdem arbeiten wir auf Client -Seite, und deswegen passt JavaScript doch eigentlich auch ganz gut.</p>
<p>F&#252;r die Realisierung habe ich mal eine &#8220;eingabe.html&#8221; Seite erstellt welche wie erw&#252;nscht ein einfaches Eingabefeld beinhaltet und wie folgt aussieht.</p>
<div class="geshi no html">
<ol>
<li class="li1">
<div class="de1">&lt; !DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;de&quot; lang=&quot;de&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;head&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;title&gt;Eingabeoberfl&#228;che&lt;/title&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;script type=&quot;text/javascript&quot; src=&quot;initialize.js&quot;&gt;&lt;/script&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/head&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;body onload=&quot;initialize();&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;p id=&quot;message&quot;&gt;Bitte gebe Zahlen zwischen -10 und 100 ein.&lt;/p&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;form&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;input type=&quot;text&quot; name=&quot;name&quot; id=&quot;input&quot; /&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;/form&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/body&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/html&gt;</div>
</li>
</ol>
</div>
<p>Die JavaScript Datei mit dem Namen &#8220;initialize.js&#8221;, bef&#252;llt unsere HTML-Seite mit dem passenden Event &#8220;onkeyup&#8221;. Weiterhin befindet sich die Funktion inputCheck(), welche die Eingabe &#252;berpr&#252;ft, ebenfalls in dieser Datei. Die Trennung der Initialiserung und der Funktion hab auch ich mir bei diesem kleinen Beispiel gespart. Hier nun die initialize.js</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Schreibt den Event onkeyup in das Input-Feld.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> initialize<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> inputField = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&quot;input&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; inputField.<span class="me1">setAttribute</span><span class="br0">&#40;</span><span class="st0">&quot;onkeyup&quot;</span>,<span class="st0">&quot;inputCheck();&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Die Funktion welche die Pr&#252;fung der Zahlen durchf&#252;hrt und passende Meldungen</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* in den Paragraphen mit der id=&quot;message&quot; schreibt.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> inputCheck<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> eingabe = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&quot;input&quot;</span><span class="br0">&#41;</span>.<span class="me1">value</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> messageField = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&quot;message&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// ist das eingabefeld leer wird wie die Ursrp&#252;ngliche Meldung angegeben.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>eingabe == <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; messageField.<span class="me1">innerHTML</span> = <span class="st0">&quot;Bitte gebe Zahlen zwischen -10 und 100 ein.&quot;</span>; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Ist die Eingabe kleiner oder gleich -11 &nbsp;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>eingabe <span class="sy0">&lt;</span> = <span class="nu0">-11</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; messageField.<span class="me1">innerHTML</span> = <span class="st0">&quot;Die Zahl &quot;</span> +eingabe+ <span class="st0">&quot; ist zu klein&quot;</span>; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Ist die Eingabe kleiner oder gleich 100 und gr&#246;sser oder gleich -10 </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// ist das im g&#252;ltigen Bereich.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>eingabe <span class="sy0">&lt;</span>= <span class="nu0">100</span> <span class="sy0">&amp;&amp;</span> eingabe <span class="sy0">&gt;</span>= <span class="nu0">-10</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; messageField.<span class="me1">innerHTML</span> = <span class="st0">&quot;Die Zahl &quot;</span> +eingabe+ <span class="st0">&quot; ist ok&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Ist die Eingabe gr&#246;sser oder gleich 101, ist die Zahl zu gross</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>eingabe <span class="sy0">&gt;</span>= <span class="nu0">101</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; messageField.<span class="me1">innerHTML</span> = <span class="st0">&quot;Die Zahl &quot;</span> +eingabe+ <span class="st0">&quot; ist zu gross&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Falls die Eingabe keine Zahl ist (is Not a Number) wird ein unerlaubter </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="co1">// Wert gemeldet.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>isNaN<span class="br0">&#40;</span>eingabe<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; messageField.<span class="me1">innerHTML</span> = eingabe+<span class="st0">&quot; ist ein unerlaubter Wert&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<hr /><h2>&#196;hnliche Beitr&#228;ge</h2><ul>
<!-- Generated by Simple Tags 1.6.6 - http://wordpress.org/extend/plugins/simple-tags -->
	<h4 class="clear">Artikel mit &#228;hnlichen Schlagw&#246;rtern</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/kleine-aufgabe-um-mit-javascript-events-rumzuspielen" title="Kleine Aufgabe um mit JavaScript Events rumzuspielen (28. Mai 2009)" class="liinternal">Kleine Aufgabe um mit JavaScript Events rumzuspielen</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmierung" title="Programmierung (29. Januar 2009)" class="liinternal">Programmierung</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/objekte" title="Objekte (13. M&auml;rz 2009)" class="liinternal">Objekte</a> (2)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/mit-javascript-einen-wiederkehrenden-event-erzeugen" title="Mit JavaScript einen wiederkehrenden Event erzeugen (10. M&auml;rz 2009)" class="liinternal">Mit JavaScript einen wiederkehrenden Event erzeugen</a> (5)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/mit-javascript-aus-einem-dokument-daten-lesen" title="Mit JavaScript aus einem Dokument Daten lesen (22. Februar 2009)" class="liinternal">Mit JavaScript aus einem Dokument Daten lesen</a> (0)</li>
</ul>

</ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog" class="liinternal">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis f&#252;r Feedleser: Beitr&#228;ge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/guggat_emol/loesungsvorschlag-um-eingabefelder-waehrend-der-eingabe-mit-javascript-zu-ueberpruefen/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Grundlagen]]></series:name>
	</item>
		<item>
		<title>Aufgabe Eingabefelder w&#228;hrend der Eingabe &#252;berpr&#252;fen</title>
		<link>http://www.baldenhofer.eu/blog/it/programmieren/aufgabe-eingabefelder-waehrend-der-eingabe-ueberpruefen</link>
		<comments>http://www.baldenhofer.eu/blog/it/programmieren/aufgabe-eingabefelder-waehrend-der-eingabe-ueberpruefen#comments</comments>
		<pubDate>Mon, 27 Apr 2009 21:36:34 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Unterricht]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=951</guid>
		<description><![CDATA[Dieser Artikel ist Teil 12 von 24 der Artikelserie  Grundlagen  Hier eine kleine Aufgabe mit der auf Anwendereingaben reagiert werden soll.
Erstelle eine kleine HTML Seite auf der ein Eingabefeld (input type=&#8221;text&#8221;) vorhanden ist.
Weiterhin soll auf der Seite eine ein Paragraph mit der id=&#8221;message&#8221; vorhanden sein.
Auf der Seite w&#228;re es sch&#246;n, wenn noch eine Eingabeaufforderung vorhanden [...]]]></description>
			<content:encoded><![CDATA[<div class="seriesmeta"><strong>Dieser Artikel ist Teil 12 von 24 der Artikelserie <a href="http://www.baldenhofer.eu/blog/series/grundlagen" title="series-25"> Grundlagen</a> </strong> </div><p>Hier eine kleine Aufgabe mit der auf Anwendereingaben reagiert werden soll.</p>
<p>Erstelle eine kleine HTML Seite auf der ein Eingabefeld (input type=&#8221;text&#8221;) vorhanden ist.<br />
Weiterhin soll auf der Seite eine ein Paragraph mit der id=&#8221;message&#8221; vorhanden sein.<br />
Auf der Seite w&#228;re es sch&#246;n, wenn noch eine Eingabeaufforderung vorhanden w&#228;re. So nach dem Motto &#8220;Bitte gebe Zahlen zwischen -10 und 100 ein.</p>
<p>Wenn der Anwender nun eine Zahl eingibt, soll w&#228;hren der Eingabe kontrolliert werden ob es sich um eine korrekte Zahl handelt.<br />
Korrekte Zahlen sind dabei  Zahlen zwischen -10 und 100.</p>
<p>Folgende Ergebnisse werden erwartet:</p>
<ul>
<li>Eingabe von -13<br />
Fehlermeldung im message-Paragraph  &#8221;Zahl zu klein&#8221;</li>
<li>Eingabe von 0<br />
Ausgabe im message-Paragraph:  &#8220;Alles ok&#8221;</li>
<li>Eingabe von 102<br />
Fehlermeldung im message-Paragraph  &#8221;Zahl zu gross&#8221;</li>
<li>Eingabe von &#8220;alfred&#8221;<br />
Fehlermeldung im message-Paragraph  &#8221;Unerlaubter Wert&#8221;</li>
</ul>
<p>Soweit klar?<br />
Die Eingabe&#252;berpr&#252;fung soll w&#228;hrend der Anwender die Zahlen eintippt durchgef&#252;hrt werden.</p>
<h3>Aufgabe 1:</h3>
<p>Welche Programmiersprache, und warum, wirst du f&#252;r die Realisierung dieser Aufgabe einsetzen?</p>
<h3>Aufgabe 2:</h3>
<p>Schreibe mit Pseudocode was du genau machen willst.<br />
Welche HTML, PHP, JavaScript Dateien ben&#246;tigst du f&#252;r eine saubere Umsetzung?</p>
<h3>Aufgabe 1:</h3>
<p>Realisiere die Eingabefunktion.</p>
<hr /><h2>&#196;hnliche Beitr&#228;ge</h2><ul>
<!-- Generated by Simple Tags 1.6.6 - http://wordpress.org/extend/plugins/simple-tags -->
	<h4 class="clear">Artikel mit &#228;hnlichen Schlagw&#246;rtern</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/mit-javascript-einen-wiederkehrenden-event-erzeugen" title="Mit JavaScript einen wiederkehrenden Event erzeugen (10. M&auml;rz 2009)" class="liinternal">Mit JavaScript einen wiederkehrenden Event erzeugen</a> (5)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/mit-javascript-aus-einem-dokument-daten-lesen" title="Mit JavaScript aus einem Dokument Daten lesen (22. Februar 2009)" class="liinternal">Mit JavaScript aus einem Dokument Daten lesen</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/guggat_emol/loesungsvorschlag-um-eingabefelder-waehrend-der-eingabe-mit-javascript-zu-ueberpruefen" title="L&#246;sungsvorschlag um Eingabefelder w&#228;hrend der Eingabe mit JavaScript zu &#252;berpr&#252;fen (29. April 2009)" class="liinternal">L&#246;sungsvorschlag um Eingabefelder w&#228;hrend der Eingabe mit JavaScript zu &#252;berpr&#252;fen</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/knackpunkte-bei-der-klasse-asynccommunication" title="Knackpunkte bei der Klasse AsyncCommunication (31. M&auml;rz 2009)" class="liinternal">Knackpunkte bei der Klasse AsyncCommunication</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/kleine-aufgabe-um-mit-javascript-events-rumzuspielen" title="Kleine Aufgabe um mit JavaScript Events rumzuspielen (28. Mai 2009)" class="liinternal">Kleine Aufgabe um mit JavaScript Events rumzuspielen</a> (0)</li>
</ul>

</ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog" class="liinternal">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis f&#252;r Feedleser: Beitr&#228;ge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/programmieren/aufgabe-eingabefelder-waehrend-der-eingabe-ueberpruefen/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<series:name><![CDATA[Grundlagen]]></series:name>
	</item>
		<item>
		<title>Housekeeping im Newssystem</title>
		<link>http://www.baldenhofer.eu/blog/it/programmieren/housekeeping-im-newssystem</link>
		<comments>http://www.baldenhofer.eu/blog/it/programmieren/housekeeping-im-newssystem#comments</comments>
		<pubDate>Sat, 25 Apr 2009 08:55:58 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[housekeeping]]></category>
		<category><![CDATA[Newssystem]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=767</guid>
		<description><![CDATA[Dieser Artikel ist Teil 48 von 70 der Artikelserie  Newssystem  Wenn wir unser Newssystem ein paar Wochen oder Monate im Betrieb haben werden wir unter Umst&#228;nden feststellen, dass das Teil immer langsamer wird.
Wieso ist das so? Wird Software im Alter schlecht?
Klar, selbergebaute Software wird immer im Alter schlecht 
Nat&#252;rlich nicht. Software ist immer [...]]]></description>
			<content:encoded><![CDATA[<div class="seriesmeta"><strong>Dieser Artikel ist Teil 48 von 70 der Artikelserie <a href="http://www.baldenhofer.eu/blog/series/newssystem" title="series-114"> Newssystem</a> </strong> </div><p>Wenn wir unser Newssystem ein paar Wochen oder Monate im Betrieb haben werden wir unter Umst&#228;nden feststellen, dass das Teil immer langsamer wird.</p>
<h3>Wieso ist das so? Wird Software im Alter schlecht?</h3>
<p>Klar, selbergebaute Software wird immer im Alter schlecht <img src='http://www.baldenhofer.eu/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Nat&#252;rlich nicht. Software ist immer gleich gut oder gleich schlecht.<br />
Nein, unsere Software ist so gut wie wir sie gebaut haben. Aber unsere Daten werden mehr.<br />
Jedes mal, wenn ein Editor eine News eintippt und eventuell noch ein Bild hochl&#228;dt, m&#252;ssen wir entsprechende Datens&#228;tze abspeichern. Im Lauf der Zeit werden hier hunderte, dann tausende und wenn wir erfolgreich sind Millionen Datens&#228;tze hinterlegt.<br />
Und mit all den Datens&#228;tzen m&#252;ssen unsere Zugriffsroutinen umgehen k&#246;nnen. Jeder Datensatz muss gesucht werden und bei einem Zugriff irgendwie beachtet werden.</p>
<h3>Bauen wir Software die nicht mit vielen Datens&#228;tzen umgehen kann?</h3>
<p>Auch das trifft nicht zu. Wir k&#246;nnen unsere Software so auslegen, dass wir ein massiv paralleles System erstellen und durch geeignete Hardware k&#246;nnen wir selbstverst&#228;ndlich auch zig Milliarden Datens&#228;tze effizient verwalten.</p>
<h3>Auf was sollten wir achten?</h3>
<p>Unser Newssystem wird f&#252;r den privaten Gebrauch konzipiert. Wir werden damit einen Verein beliefern. Oder einen Privathaushalt oder eine kleine Tageszeitung. Ich geh im Moment nicht davon aus, dass wir eine Instanz des Newssystems f&#252;r mehrere Hunderttausend Editoren erstellen werden. Wenn das mal der Fall ist, k&#246;nnen wir mehrere Instanzen vom Newssystem aufsetzen.<br />
Bei unserem kleinen System ist es deutlich sinnvoller einfach zwischendurch wieder aufzur&#228;umen und alte nicht mehr ben&#246;tigte News zu entfernen.<br />
Das bringt mich auf unser Newsarchiv. Ich habe da ein paar Anwendungsf&#228;lle geschrieben, n&#228;mlich den <a href="http://www.baldenhofer.eu/blog/it/programmieren/anwendungsfall-navigate-archive-news-shortentries" class="liinternal">Anwendungsfall Navigate Archive News Shortentries</a> und den <a href="http://www.baldenhofer.eu/blog/it/programmieren/anwendungsfall-show-archive-newsentry" class="liinternal">Anwendungsfall Show Archive Newsentry</a>. Die beiden Anwendungsf&#228;lle gehen von einer gro&#223;en Anzahl Newseintr&#228;ge aus.<br />
Auch hier stellt sich die Frage was wir unter gro&#223; verstehen. Wenn wir zum Beispiel zulassen, dass im Archiv zu jeder Kategorie zwei Jahre Archiveintr&#228;ge vorhanden sein k&#246;nnen, sind das zwar einige Eintr&#228;ge aber die Menge sollte dennoch noch &#252;berschaubar sein.</p>
<h3>Wie sollte unser Housekeeping aussehen?</h3>
<p>Ich stell mir vor, dass in regelm&#228;ssigen Abst&#228;nden ein automatischer Clean-Up Prozess gestartet wird. Dieser geht durch unsere Newseintr&#228;ge und putzt alle News heraus, die &#228;lter als ein bestimmter Zeitraum sind. Zum Beispiel die vorher erw&#228;hnten zwei Jahre.<br />
Dieser Clean-Up Prozess kann zusammen mit unserem Backup-Prozess ausgef&#252;hrt werden.<br />
Wenn uns das zu viel Overhead bedeutet, k&#246;nnen wir diesen Prozess einmal im Monat laufen lassen.<br />
Der Prozess wird also auf dem Webserver z.B. mit einem <a href="http://de.wikipedia.org/wiki/Cron" rel="nofollow" class="liwikipedia">cronjob</a> installiert. Falls wir keinen cron Zugriff haben, k&#246;nnen wir auch unserem <a href="http://www.baldenhofer.eu/blog/it/programmieren/akteure-im-newssystem#systemadministrator" class="liinternal">Systemadministrator</a> einen Knopf auf seiner Oberfl&#228;che geben. Dann kann er ab- und zu den Clean-Up Prozess laufen lassen.</p>
<h3>Was machen wir mit den nicht mehr ben&#246;tigten Bildern</h3>
<p>Wenn der Clean-Up Prozess gelaufen ist, werden einige Bilder nicht mehr mit den Newseintr&#228;gen verbunden sein. Sie werden ein einsames und nicht mehr betrachtetes Dasein auf unserer Festplatte fristen&#8230;<br />
Daf&#252;r haben wir aber unseren <a href="http://www.baldenhofer.eu/blog/it/programmieren/anwendungsfall-searchnotusedimages" class="liinternal">Anwendungsfall Search Not Used Images</a>. Mit dem kann der Editor putzen gehen.</p>
<hr /><h2>&#196;hnliche Beitr&#228;ge</h2><ul>
<!-- Generated by Simple Tags 1.6.6 - http://wordpress.org/extend/plugins/simple-tags -->
	<h4 class="clear">Artikel mit &#228;hnlichen Schlagw&#246;rtern</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/zwischenschicht-zur-performancemessung-einbauen" title="Zwischenschicht zur Performancemessung einbauen (1. April 2009)" class="liinternal">Zwischenschicht zur Performancemessung einbauen</a> (1)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/usermodel-beschreibung" title="UserModel Beschreibung (30. April 2009)" class="liinternal">UserModel Beschreibung</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/technische-anwendungsfaelle" title="Technische Anwendungsf&#228;lle (23. M&auml;rz 2009)" class="liinternal">Technische Anwendungsf&#228;lle</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/performancemessungen-ein-und-ausschalten" title="Performancemessungen ein- und ausschalten (2. April 2009)" class="liinternal">Performancemessungen ein- und ausschalten</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/performance-messung-auf-dem-server-durchfuehren" title="Performance Messung auf dem Server durchf&#252;hren (6. April 2009)" class="liinternal">Performance Messung auf dem Server durchf&#252;hren</a> (0)</li>
</ul>

</ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog" class="liinternal">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis f&#252;r Feedleser: Beitr&#228;ge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/programmieren/housekeeping-im-newssystem/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Newssystem]]></series:name>
	</item>
		<item>
		<title>Installierbarkeit des Newssystems</title>
		<link>http://www.baldenhofer.eu/blog/it/programmieren/installierbarkeit-des-newssystems</link>
		<comments>http://www.baldenhofer.eu/blog/it/programmieren/installierbarkeit-des-newssystems#comments</comments>
		<pubDate>Sun, 19 Apr 2009 07:01:14 +0000</pubDate>
		<dc:creator>Roland</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Installieren]]></category>
		<category><![CDATA[Newssystem]]></category>

		<guid isPermaLink="false">http://www.baldenhofer.eu/blog/?p=853</guid>
		<description><![CDATA[Dieser Artikel ist Teil 47 von 70 der Artikelserie  Newssystem  Wenn wir unser Newssystem irgend wann einmal fertiggestellt haben, m&#252;ssen wir es auch installieren.
F&#252;r die Installation gibt es verschiedene Vorgehensweisen.
Manuelle, individuelle Installation
Wir k&#246;nnen jede Installation bei jedem Webauftritt manuell durchf&#252;hren. Das hat einige Vor- und Nachteile:
Vorteile

Wir brauchen keine allgemeing&#252;ltigen Installationsscripts schreiben.
Wir k&#246;nnen unsere [...]]]></description>
			<content:encoded><![CDATA[<div class="seriesmeta"><strong>Dieser Artikel ist Teil 47 von 70 der Artikelserie <a href="http://www.baldenhofer.eu/blog/series/newssystem" title="series-114"> Newssystem</a> </strong> </div><p>Wenn wir unser Newssystem irgend wann einmal fertiggestellt haben, m&#252;ssen wir es auch installieren.<br />
F&#252;r die Installation gibt es verschiedene Vorgehensweisen.</p>
<h3>Manuelle, individuelle Installation</h3>
<p>Wir k&#246;nnen jede Installation bei jedem Webauftritt manuell durchf&#252;hren. Das hat einige Vor- und Nachteile:</p>
<h4>Vorteile</h4>
<ul>
<li>Wir brauchen keine allgemeing&#252;ltigen Installationsscripts schreiben.</li>
<li>Wir k&#246;nnen unsere Installation f&#252;r jeden Webauftritt exakt anpassen.</li>
<li>Wir erkennen welche Schwierigkeiten uns beim Installieren erwarten.</li>
</ul>
<h4>Nachteile</h4>
<ul>
<li>Wir m&#252;ssen Fachwissen f&#252;r jede Installation einsetzen.</li>
<li>Bei vielen Installationen werden wir immer den gleichen Ablauf manuell durchf&#252;hren. =&gt; Teuer und langweilig</li>
<li>Viele Nachfragen wegen der Installation</li>
<li>Fehleranf&#228;llig da manueller Prozess.</li>
</ul>
<h3>Automatische Installation</h3>
<p>Wir k&#246;nnen unsere Installation so gestalten, dass das System selbst merkt wenn es noch nicht installiert wurde. Dann kann es ein paar Abfragen beim Systemadministrator durchf&#252;hren und sich selbst installieren.<br />
Eventuell m&#252;ssen wir noch die Datenbank manuell einrichten. Das k&#246;nnen wir durch wenige Handgriffe erstellen lassen.</p>
<h4>Vorteile von der automatischen Installation</h4>
<ul>
<li>Kein manueller Prozess =&gt; weniger Fehleranf&#228;llig</li>
<li>Wiederholbar einsetzbar</li>
<li>Weniger Supportanfragen</li>
<li>Wenig Fachwissen f&#252;r die Installation notwendig</li>
</ul>
<h4>Nachteile</h4>
<ul>
<li>Installationsalgorithmen m&#252;ssen erstellt werden. Dies bedeutet Zeit und Aufwand f&#252;r die Entwicklung</li>
<li>Gute Installationsroutinen m&#252;ssen mehrfach getestet werden. (Aufw&#228;ndig)</li>
<li>Wenn was schief geht, ist die Fehlersuche deutlich schwieriger da der Automat Teile schon installiert hat.</li>
</ul>
<h3>Vorschlag</h3>
<p>Wenn das System mehrmals installiert wird, wovon ich mal ausgehe, ist der Aufwand zur Erstellung der automatischen Installation gerechtfertigt.<br />
Es macht auf den Kunden einen sehr schlechten Eindruck, wenn sich das System nicht einfach installieren l&#228;sst.<br />
Falls wir nur ein paar mal dieses Teil installieren wollen, dann lohnt sich der Aufwand nicht. Die manuelle Installation f&#252;r ein paar mal Installation kostet im Vergleich zum Erstellen der Installationsroutinen weniger Zeit.<br />
Wir m&#252;ssen uns also &#252;berlegen ob das System h&#228;ufiger installiert werden soll. Wenn wir also mehrere Instanzen des Systems erstellen, dann lohnt sich die Automatisierung der Installation.<br />
Weiterhin ist die Herstellung von Installationsroutinen eine super &#220;bung. Wir werden daher zumindest das Anlegen der Datenbanktabellen sicherlich automatisieren.</p>
<hr /><h2>&#196;hnliche Beitr&#228;ge</h2><ul>
<!-- Generated by Simple Tags 1.6.6 - http://wordpress.org/extend/plugins/simple-tags -->
	<h4 class="clear">Artikel mit &#228;hnlichen Schlagw&#246;rtern</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/zwischenschicht-zur-performancemessung-einbauen" title="Zwischenschicht zur Performancemessung einbauen (1. April 2009)" class="liinternal">Zwischenschicht zur Performancemessung einbauen</a> (1)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/usermodel-beschreibung" title="UserModel Beschreibung (30. April 2009)" class="liinternal">UserModel Beschreibung</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/technische-anwendungsfaelle" title="Technische Anwendungsf&#228;lle (23. M&auml;rz 2009)" class="liinternal">Technische Anwendungsf&#228;lle</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/performancemessungen-ein-und-ausschalten" title="Performancemessungen ein- und ausschalten (2. April 2009)" class="liinternal">Performancemessungen ein- und ausschalten</a> (0)</li>
	<li><a href="http://www.baldenhofer.eu/blog/it/programmieren/performance-messung-auf-dem-server-durchfuehren" title="Performance Messung auf dem Server durchf&#252;hren (6. April 2009)" class="liinternal">Performance Messung auf dem Server durchf&#252;hren</a> (0)</li>
</ul>

</ul><hr /><small>www.baldenhofer.eu © seit 2009 <br />
Dieser Feed kommt vom <a href="http://www.baldenhofer.eu/blog" class="liinternal">Guggat emol Blog</a>, viel Spa&#223; beim Lesen! &#220;ber  Links zu Artikeln freuen wir uns, jedoch bitte bindet nicht einfach unsere Inhalte in eure Seite ein, danke. Hinweis f&#252;r Feedleser: Beitr&#228;ge, die Quellcode enthalten sind auf der Webseite meist besser lesbar, als in einem Feed-Reader. 
<br /> 4e3744397ab2a417f811b29573bcbef4)</small>]]></content:encoded>
			<wfw:commentRss>http://www.baldenhofer.eu/blog/it/programmieren/installierbarkeit-des-newssystems/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Newssystem]]></series:name>
	</item>
	</channel>
</rss>
