<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Programmierung &#8211; IT Service Herzog Blog</title>
	<atom:link href="https://itservice-herzog.de/blog/category/programmierung/feed/" rel="self" type="application/rss+xml" />
	<link>https://itservice-herzog.de/blog</link>
	<description>Softwareblog von Matthias Herzog</description>
	<lastBuildDate>Fri, 06 Sep 2019 10:00:26 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.2.3</generator>
	<item>
		<title>Svn installieren</title>
		<link>https://itservice-herzog.de/blog/svn-installieren/</link>
				<comments>https://itservice-herzog.de/blog/svn-installieren/#respond</comments>
				<pubDate>Fri, 06 Sep 2019 09:57:48 +0000</pubDate>
		<dc:creator><![CDATA[ReMaker]]></dc:creator>
				<category><![CDATA[Gameserver / Linux]]></category>
		<category><![CDATA[Programmierung]]></category>

		<guid isPermaLink="false">https://itservice-herzog.de/blog/?p=361</guid>
				<description><![CDATA[Huhu, sudo apt-get update apt-get install subversion mkdir -p /var/local/svn/projekt1/ svnadmin create --fs-type fsfs /var/local/svn/projekt1/ nano /var/local/svn/projekt1/conf/svnserve.conf das hier bearbeiten [general] anon-access = none auth-access = write password-db = passwd realm = Mein erstes Repro Hier müssen die passwörter editiert werden nano /var/local/svn/projekt1/conf/passwd   start script editieren nano /etc/init.d/subversion #!/bin/bash case "$1" in start) svnserve &#8230; <a href="https://itservice-herzog.de/blog/svn-installieren/" class="more-link">Weiter lesen >> <span class="screen-reader-text">Svn installieren</span> <span class="meta-nav">&#8594;</span></a>]]></description>
								<content:encoded><![CDATA[<p>Huhu,</p>
<p><span id="more-361"></span></p>
<pre>sudo apt-get update</pre>
<p><span class="hljs-variable">apt</span>-get install subversion</p>
<pre class="highlight"><code>mkdir <span class="nt">-p</span> /var/local/svn/projekt1/
svnadmin create <span class="nt">--fs-type</span> fsfs /var/local/svn/projekt1/</code></pre>
<pre class="highlight"><code><span class="nb">nano </span>/var/local/svn/projekt1/conf/svnserve.conf
das hier bearbeiten
</code></pre>
<pre class="highlight"><code>[general]
anon-access = none
auth-access = write
password-db = passwd
realm = Mein erstes Repro</code></pre>
<pre class="highlight"><code>

Hier müssen die passwörter editiert werden</code></pre>
<pre class="highlight"><code>nano /var/local/svn/projekt1/conf/passwd</code></pre>
<pre class="highlight"> 
start script editieren

</pre>
<pre class="highlight"><code>nano /etc/init.d/subversion</code></pre>
<pre class="highlight"><code><span class="c">#!/bin/bash</span>

<span class="k">case</span> <span class="s2">"</span><span class="nv">$1</span><span class="s2">"</span> <span class="k">in
        </span>start<span class="p">)</span>
                svnserve <span class="nt">-d</span> <span class="nt">-r</span> /var/local/svn
                <span class="p">;;</span>
        stop<span class="p">)</span>
                killall svnserve
                <span class="p">;;</span>
        restart<span class="p">)</span>
                <span class="nv">$0</span> stop
                sleep 3
                <span class="nv">$0</span> start
                <span class="p">;;</span>
<span class="k">esac</span></code></pre>
<pre class="highlight"></pre>
<pre class="highlight"><code>chmod +x /etc/init.d/subversion


die kkiste kannst du dann mit den befehlen steuern. Nachdem ein Repro angelegt worden ist muss der svn server neu gestartet werden.</code></pre>
<pre class="highlight"><code><span class="nb">sudo</span> /etc/init.d/subversion start
<span class="nb">sudo</span> /etc/init.d/subversion stop
<span class="nb">sudo</span> /etc/init.d/subversion restart</code></pre>
<pre class="highlight"><code>
zugriff auf das svn 
</code></pre>
<pre class="highlight"><code>svn://ihreIp/projekt1</code></pre>
<pre class="highlight"></pre>
]]></content:encoded>
							<wfw:commentRss>https://itservice-herzog.de/blog/svn-installieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Https mit Letscript auf Debian für Apche2</title>
		<link>https://itservice-herzog.de/blog/https-mit-letscript-auf-debian-apache/</link>
				<pubDate>Sat, 07 Oct 2017 09:18:38 +0000</pubDate>
		<dc:creator><![CDATA[ReMaker]]></dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Seo]]></category>

		<guid isPermaLink="false">https://itservice-herzog.de/blog/?p=273</guid>
				<description><![CDATA[heute machen wir https mit letscrypt auf einem Debian 7 für einen Apache2 Webserver! als erstes brauchen wir ein sudo su # pw rein und enter # wenn du kein sudo hast installier dir das! Guckst du einfach hier Server Konfigurieren und absichern apt-get update apt-get upgrade zum aktualisieren jetzt installieren wir das letscrypt wir &#8230; <a href="https://itservice-herzog.de/blog/https-mit-letscript-auf-debian-apache/" class="more-link">Weiter lesen >> <span class="screen-reader-text">Https mit Letscript auf Debian für Apche2</span> <span class="meta-nav">&#8594;</span></a>]]></description>
								<content:encoded><![CDATA[<p>heute machen wir https mit letscrypt auf einem Debian 7 für einen Apache2 Webserver!</p>
<p>als erstes brauchen wir ein</p>
<pre>
sudo su
</pre>
<p># pw rein und enter<br />
# wenn du kein sudo hast installier dir das! Guckst du einfach hier <a href="https://itservice-herzog.de/blog/debian-server-absichern/" target="_blank" rel="noopener">Server Konfigurieren und absichern</a><br />
<span id="more-273"></span></p>
<pre>
apt-get update
apt-get upgrade
</pre>
<p>zum aktualisieren</p>
<p>jetzt installieren wir das letscrypt<br />
wir fürgen die neuen Quellen für das Letscript certbot zum Packet manager</p>
<pre>
echo 'deb http://ftp.debian.org/debian jessie-backports main' | sudo tee /etc/apt/sources.list.d/backports.list
</pre>
<p># Packete aktualisieren</p>
<pre>
apt-get update
</pre>
<p># certbot installieren</p>
<pre>
sudo apt-get install python-certbot-apache -t jessie-backports
</pre>
<p>jetzt installiert er ne weile und sollte sich dann melden wenn er fertig ist.<br />
Fals du eine Firewall hast. stell bitte den port 443 an!</p>
<p>jetzt verpassen wir einer domain &#8222;itservice-herzog.de&#8220; ein ssl zertifikat <img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<pre>
certbot --apache -d itservice-herzog.de
</pre>
<p>wenn ihr den parameter -d itservice-herzog.de weglasst macht der alle vhost daten vom Apachen.</p>
<p>Die Zertifikate laufen standartmäßig nach 90 Tagen ab!<br />
Deshalb sollten wir ein renew des Zertifikates alle 30 tage machen. dann hat man noch bissel zeit zu handeln wenn was schief geht.</p>
<p># das mach das zertifikat neu</p>
<pre>
certbot renew
</pre>
<p>Weil wir das aber nicht immer von hand machen wollen legen wir dasfür einen cronjob an</p>
<pre>
crontab -e
</pre>
<p>wenn du noch nicht drin warst und du dir nicht sicher bist welchen editor du nehmen sollten nimm den NANO! Das ist im vergleich zum VIM (kein arschloch) besser für Anfänger.</p>
<p># das hier in den crontab rein, das macht alle 30 tage ein zertifikat renew</p>
<pre>
30 2 * * 1 /usr/bin/certbot renew &gt;&gt; /var/log/le-renew.log
</pre>
<p>so jetzt solltet ihr ein paar ssl zertifikate haben.<br />
ich wünsche euch viel spaß beim verschlüsseln <img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Nachtrag:<br />
falls es mal nicht mit dem certbot so richtig will versuchts mal damit</p>
<pre>
certbot --authenticator standalone --installer apache -d ernaehrungstagebuch-deluxe.de --pre-hook "service apache2 stop" --post-hook "service apache2 start"
</pre>
<p>Lieben Gruß<br />
Matthias</p>
]]></content:encoded>
										</item>
		<item>
		<title>Apache2, Mysql5 auf Debian installieren</title>
		<link>https://itservice-herzog.de/blog/apache2-mysql5-debian-install/</link>
				<pubDate>Thu, 18 Feb 2016 11:11:58 +0000</pubDate>
		<dc:creator><![CDATA[ReMaker]]></dc:creator>
				<category><![CDATA[Gameserver / Linux]]></category>
		<category><![CDATA[Programmierung]]></category>

		<guid isPermaLink="false">http://matthias-herzog.net/?p=253</guid>
				<description><![CDATA[Hey, ich möchte heute kurz erläutern wie ihr einen Apache mit Mysql auf eurem Debian installieren könnt. am besten mit apt-get 😀 Los geht&#8217;s Als erstes brauchst du root rechte. Die bekommst du mit diesem Befehl. Falls sudo nicht installiert ist, dann sodu installieren mit &#8222;apt-get install sudo&#8220; &#60;= das geht nur als root. sudo &#8230; <a href="https://itservice-herzog.de/blog/apache2-mysql5-debian-install/" class="more-link">Weiter lesen >> <span class="screen-reader-text">Apache2, Mysql5 auf Debian installieren</span> <span class="meta-nav">&#8594;</span></a>]]></description>
								<content:encoded><![CDATA[<p>Hey, ich möchte heute kurz erläutern wie ihr einen Apache mit Mysql auf eurem Debian installieren könnt.</p>
<p>am besten mit apt-get <img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Los geht&#8217;s<br />
<span id="more-253"></span></p>
<p>Als erstes brauchst du root rechte. Die bekommst du mit diesem Befehl. Falls sudo nicht installiert ist, dann sodu installieren mit &#8222;apt-get install sudo&#8220; &lt;= das geht nur als root.</p>
<p><strong><em>sudo su</em></strong></p>
<p>Jetzt aktualisierst du deinen Paket Manager mit:</p>
<p><strong><em>apt-get update</em></strong></p>
<p><strong><em>apt-get upgrade</em></strong></p>
<p>&nbsp;</p>
<h2>Mysql Installieren<!--more--></h2>
<pre><strong><em>apt-get install mysql-server mysql-client</em></strong>

mit Ja bestätigen und Passwort für  root in die Datenbank eingeben


</pre>
<p>Oder</p>
<h2>Mariadb Installieren</h2>
<pre>apt-get install mariadb-server mariadb-client</pre>
<p>#<br />
jetzt müssen wir den mariadb Server noch absichern das sich keiner ohne zurgiff copnnecten kann</p>
<pre>mysql_secure_installation</pre>
<h2>Apache mit php5 installieren</h2>
<p><strong><em>apt-get install apache2 php5 libapache2-mod-php5 php-pear php5-mysql</em></strong></p>
<pre>Nach der Installation müsst ihr den Apachen neu starten damit alles richtig 
funktioniert.</pre>
<p><strong><em>/etc/init.d/apache restart</em></strong></p>
<h2>Apache mit php7 installieren</h2>
<p><strong><em>apt-get install apache2 php7.0 libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache php7.0-pspell php7.0-recode php7.0-opcache php-apcu</em></strong></p>
<pre>Nach der Installation müsst ihr den Apachen neu starten damit alles richtig 
funktioniert.</pre>
<p><strong><em>/etc/init.d/apache restart</em></strong></p>
<p>&nbsp;</p>
<h2>phpmyadmin Installieren</h2>
<pre><strong><em> apt-get install</em> phpmyadmin
</strong>Ich bitte euch in euer neues phpmyadmin Verzeichnis eine .htaccess Datei 
mit .htpasswd zu hinterlegen und das Verzeichnis zusätzlich mit einem 
Passwort zu versehen!

</pre>
<h2>Vhost anlegen</h2>
<pre id="nbspphpmyadmin">begebt euch in das Verzeichnis der Vhosts für den Apache<strong><em>
cd  /etc/apache2/sites-available

</em></strong>erstellt nun eine vhost datei<strong><em>

nano domain.de.conf</em></strong></pre>
<pre> fügt folgendes in die Datei ein

meine Domain www.sce-lan.de soll als Beispiel dienen.
Bitte passt die vhost Datei so an wie ihr sie braucht!
stellt bei eurem Domainanbieter nun einen DNS Eintrag 
auf euren Server.
Wenn nun jemand über die Domain auf euren Server 
kommt wird nun die Webseite aus eurem Verzeichnis angezeigt.

<span style="color: #ff6600;">&lt;VirtualHost *:80&gt;
 ServerAdmin info@itservice-herzog.de
 ServerName sce-lan.de
 ServerAlias sce-lan.de *.sce-lan.de www.sce-lan.de
 DocumentRoot /var/www/sce/
 &lt;Directory /&gt;
 Options FollowSymLinks
 AllowOverride All
 &lt;/Directory&gt;
 ErrorLog ${APACHE_LOG_DIR}/error_sce-lan.log

 # Possible values include: debug, info, notice, warn, error, crit,
 # alert, emerg.
 LogLevel warn

 CustomLog ${APACHE_LOG_DIR}/access_sce-lan.log combined
&lt;/VirtualHost&gt;</span>

Speichert die Datei mit "strg + x" und dann J!
Fügt nun die vhost Datei zu den aktivierten 
Seiten des Apachen hinzu.

<strong><em>a2ensite domain.de</em></strong>
</pre>
<h2>Mod Rewrite</h2>
<p>den Modrewiret braucht ihr eigentlich überall deshalb aktiviert ihn mit folgendem Befehl</p>
<pre class="notranslate"><em><strong>a2enmod rewrite</strong> 

<strong>nano /etc/apache2/sites-available/default
</strong>
ändert nun die Zeile  "AllowOverride None" zu  AllowOverride All

startet nun den Apache neu mit diesem Befehl

<strong>/etc/init.d/apache2 restart</strong>
</em>jetzt könnt ihr<em> .htaccess Dateien erstellen, 
Weiterleitungen einrichten oder Passwörter auf Ordner vergeben und 
vieles mehr.

</em>Um festzustellen das alles richtig funktioniert erstellt ihr am besten 
eine php Datei in eurem order /var/www. 
Bitte entfernt diese Datei nach Prüfung der Installation wider!<em>

<strong>cd /var/www</strong>
<strong>nano info.php</strong>
</em>der Inhalt der Datei sollte sein
&lt;?php
phpinfo();
?&gt;</pre>
<pre>mit "strg + x" und dann J Speichern.
Ruft nun in eurem Browser die Datei auf.

http://IP-ADRESSE/info.php
Checkt ob alle richtig ist!
<strong><em>rm info.php</em></strong></pre>
<pre class="notranslate"><em> Vielen dank fürs lesen!</em></pre>
<p>[google_news query=&#8220;Apache2&#8243; topic=&#8220;t&#8220;]</p>
]]></content:encoded>
										</item>
		<item>
		<title>Wie jQuery einbinden.</title>
		<link>https://itservice-herzog.de/blog/wie-jquery-einbinden/</link>
				<pubDate>Tue, 08 Sep 2015 08:29:27 +0000</pubDate>
		<dc:creator><![CDATA[ReMaker]]></dc:creator>
				<category><![CDATA[Programmierung]]></category>

		<guid isPermaLink="false">http://matthias-herzog.net/?p=239</guid>
				<description><![CDATA[Heute will ich euch kurz erklären wie ihr jQuery einbinden könnt. Hier das komplette Beispiel zum Download. Ihr braucht ein HTML Grundgerüst mit Header und Body. nun fügt ihr einen &#8222;Script Tag&#8220; in den header des Beispiels ein. Falls du keinen eigenen Webspace haben solltest so kannst du jQuery von einem CDN (Content Delivery Network) &#8230; <a href="https://itservice-herzog.de/blog/wie-jquery-einbinden/" class="more-link">Weiter lesen >> <span class="screen-reader-text">Wie jQuery einbinden.</span> <span class="meta-nav">&#8594;</span></a>]]></description>
								<content:encoded><![CDATA[<p>Heute will ich euch kurz erklären wie ihr jQuery einbinden könnt.</p>
<p>Hier das komplette Beispiel zum Download.<br />
<span id="more-239"></span></p>
<p>Ihr braucht ein HTML Grundgerüst mit Header und Body.<br />
nun fügt ihr einen &#8222;Script Tag&#8220; in den header des Beispiels ein.<br />
Falls du keinen eigenen Webspace haben solltest so kannst du jQuery von einem CDN (Content Delivery Network) beziehen.<br />
Mit dieser Zeile bindest du jQuery ein.</p>
<p><script src="code.jquery.com/jquery-1.11.3.min.js"></script>Wenn du Eigenen Webspac haben solltes so nimm das j<a href="http://matthias-herzog.net/wp-content/uploads/2015/09/jquery-einbinden.html">jquery einbinden</a>Query von deinem eigenen Server und passe den Pfad im script tag an. bitte sei dir bewusst das jedes mal wenn deine html Seite aufgerufen wird das DCN einen aufruf bekommt mit der Aufforderung jQuery auszuliefern.</p>
<pre>&lt;code&gt;
		&lt;!DOCTYPE HTML&gt;
		&lt;html&gt;
		  &lt;head&gt;
			&lt;meta http-equiv="content-type" content="text/html; charset=utf-8"&gt;
			&lt;meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"&gt;
			&lt;title&gt;Jquery Tutorial&lt;/title&gt;
			&lt;script src="code.jquery.com/jquery-1.11.3.min.js"&gt;&lt;/script&gt;
		  &lt;/head&gt;
		  &lt;body&gt;
			&lt;h1&gt;Jquery einbinden&lt;/h1&gt;
			&lt;script &gt;
				$(document).ready(function()
				{
					alert("jQuery eingebunden");
				});
			&lt;/script&gt;
		  &lt;/body&gt;
		&lt;/html&gt;
	&lt;/code&gt;</pre>
<p>Vielen Dank fürs lesen!<!--more--></p>
<p><!--more--></p>
]]></content:encoded>
										</item>
		<item>
		<title>Javascript Localstorage wrapper</title>
		<link>https://itservice-herzog.de/blog/javascript-localstorage-wrapper/</link>
				<pubDate>Thu, 27 Aug 2015 21:45:59 +0000</pubDate>
		<dc:creator><![CDATA[ReMaker]]></dc:creator>
				<category><![CDATA[Programmierung]]></category>

		<guid isPermaLink="false">http://matthias-herzog.net/?p=227</guid>
				<description><![CDATA[Javascript localstorage wrapper Hallo und Willkommen zu meinem kleinen Tutorials zur Benutzung des localstorage. Zuerst einmal möchte ich kurz klären was der localstorage eigentlich ist. Mit dem neuen localstorage könnt ihr auf einfache Art und weise Daten im Browser auf Clientseite speichern. So gibt es nun eine weiter Möglichkeit außer über Cookies Daten im Browser &#8230; <a href="https://itservice-herzog.de/blog/javascript-localstorage-wrapper/" class="more-link">Weiter lesen >> <span class="screen-reader-text">Javascript Localstorage wrapper</span> <span class="meta-nav">&#8594;</span></a>]]></description>
								<content:encoded><![CDATA[<p>Javascript localstorage wrapper</p>
<p>Hallo und Willkommen zu meinem kleinen Tutorials zur Benutzung des localstorage.<br />
Zuerst einmal möchte ich kurz klären was der localstorage eigentlich ist.<span id="more-227"></span></p>
<p>Mit dem neuen localstorage könnt ihr auf einfache Art und weise Daten im Browser auf Clientseite speichern.<br />
So gibt es nun eine weiter Möglichkeit außer über Cookies Daten im Browser zu hinterlegen und beim nächsten Zugriff wieder anzuzeigen.<br />
Wichtig! Der Localstorage ist bei den meisten Browsern auf 4MB begrenzt.</p>
<p>chrome4+<br />
ff  3.5+<br />
Safari  4+<br />
Opera 10.5+<br />
IE 8+<br />
IOS 3.2+<br />
Android  2.1+</p>
<p>Eine gute Referenz zum Localstorage befindet sich unter https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage</p>
<p>Hier mein Beispiel für eine wrapper Klasse.<br />
Mit diesem Beispiel ist es möglich ganze Objecte in den Localstorage zu speichern und wieder auszulesen</p>
<p>&nbsp;</p>
<pre><em>/**</em>
<em> * Created by Matthias Herzog on 10.06.2014.</em>
<em> * Speicher belibige werte im Localstorage des Browsers serialisiert ab.</em>
<em> * @type {Storage}</em>
<em> */</em>
<em>Storage = new function()</em>
<em>{</em>

<em>   if( !window.localStorage  )</em>
<em>   {</em>
<em>      console.warn("No local storage Support!");</em>
<em>      return false;</em>
<em>   }</em>
<em>   var Store = window.localStorage;</em>

<em>   /**</em>
<em>    * gibt einen vorhandenen wert aus dem localstorage zurück</em>
<em>    * @param Key</em>
<em>    * @returns {{}|boolean}</em>
<em>    */</em>
<em>   this.get = function(Key)</em>
<em>   {</em>
<em>      var Temp = Store.getItem( Key ) || false;</em>
<em>      if(Temp == false)</em>
<em>      {</em>
<em>         var Result = {} ;</em>
<em>      }</em>
<em>      else</em>
<em>      {</em>
<em>         try</em>
<em>         {</em>
<em>            var Result = JSON.parse( Temp );</em>
<em>         } catch( Ex )</em>
<em>         {</em>
<em>            var Result = Temp;</em>
<em>         }</em>
<em>      }</em>
<em>      return Result;</em>
<em>   };</em>

<em>   /**</em>
<em>    * setzt uns serialisiert einen wert</em>
<em>    * @param Key</em>
<em>    * @param Value</em>
<em>    */</em>
<em>   this.set = function( Key, Value )</em>
<em>   {</em>
<em>      if(!Value || !Key) return;</em>

<em>      var Temp = {};</em>
<em>      if(typeof Value == "object")</em>
<em>      {</em>
<em>         Value =  JSON.stringify( Value );</em>
<em>      }</em>
<em>      Store.setItem( Key, Value );</em>
<em>   };</em>

<em>   /**</em>
<em>    * entfernt alle daten aus dem Localstorage</em>
<em>    */</em>
<em>   this.clearAll = function()</em>
<em>   {</em>
<em>      var Keys = Object.keys(localStorage);</em>
<em>      for(var i = 0; i &lt; Keys.length ; i++)</em>
<em>      {</em>
<em>         this.clear( Keys[i] );</em>
<em>      }</em>
<em>      return true;</em>
<em>   };</em>

<em>   /**</em>
<em>    * entfernt den angegeben schlüssel aus dem localstorage</em>
<em>    * @param Key</em>
<em>    */</em>
<em>   this.clear = function(Key)</em>
<em>   {</em>
<em>          if( !Store.getItem( Key ) ) return false;</em>
<em>          Store.removeItem( Key );</em>
<em>          return true;</em>
<em>   };</em>
<em>};</em></pre>
<p>benutzen könnt ihr die Klasse wie folgt.</p>
<p><em>// legt ein Object mit dem Schlüssel in den Storage ab.</em><br />
<em>var storage = new Storage();</em><br />
<em>storage.set( &#8222;User&#8220;, {Name : &#8222;Horst&#8220;, LastName: &#8222;Werner&#8220;} );</em></p>
<p><em>// um auf den wert wieder zuzugreifen benötigt ihr die get fkt</em><br />
<em>var User = storage.get( &#8222;User&#8220; );</em></p>
<p>&nbsp;</p>
<p>Vielen Dank fürs lesen!</p>
]]></content:encoded>
										</item>
		<item>
		<title>Windows 8 Android Chrome debugging</title>
		<link>https://itservice-herzog.de/blog/windows-8-android-chrome-debugging/</link>
				<pubDate>Thu, 11 Sep 2014 12:52:31 +0000</pubDate>
		<dc:creator><![CDATA[ReMaker]]></dc:creator>
				<category><![CDATA[Programmierung]]></category>

		<guid isPermaLink="false">http://matthias-herzog.net/?p=201</guid>
				<description><![CDATA[Hallo und herzlich willkommen zu meinem Tutorial mit dem Thema &#8222;Chrome For Android&#8220; remote-debugging. Ich werde das Tutorial mit einem Google Nexus 7 erarbeiten. Bitte stellt sicher das die USB Treiber für euer Android gerät installiert sind. Verbindet nun dein Android Gerät mit dem Windows Rechner. Nun müssen wir dem Nexus noch sagen das der &#8230; <a href="https://itservice-herzog.de/blog/windows-8-android-chrome-debugging/" class="more-link">Weiter lesen >> <span class="screen-reader-text">Windows 8 Android Chrome debugging</span> <span class="meta-nav">&#8594;</span></a>]]></description>
								<content:encoded><![CDATA[<p>Hallo und herzlich willkommen zu meinem Tutorial mit dem Thema &#8222;Chrome For Android&#8220; remote-debugging.<br />
Ich werde das Tutorial mit einem Google Nexus 7 erarbeiten.<br />
Bitte stellt sicher das die USB Treiber für euer Android gerät installiert sind.<br />
<span id="more-201"></span></p>
<p>Verbindet nun dein Android Gerät mit dem Windows Rechner. Nun müssen wir dem Nexus noch sagen das der Debuging-Modus aktivert werden soll. Klickt auf eurem Android-Device auf &#8222;Einstellungen&#8220; -&gt; &#8222;Infos zu Gerät&#8220;, Scrollt ganz herunter und klickt 10 Mal auf die &#8222;Build nummer&#8220;.</p>
<p>Nun sollte das Debugging Optionsfeld Aktiviert sein.</p>
<p>begebt euch nun zu &#8222;Einstellungen&#8220; -&gt; &#8222;Entwickler-Optionen&#8220; und aktiviert das USB Debugging.</p>
<p>Danach benötigen wir die adb (Android Debug Bridge) Standard Treiber.<br />
Ladet diese herunter und installiert sie.</p>
<p><a title="adb Driver" href="http://www.chip.de/downloads/Universal-ADB-Treiber_61437026.html">UniversalAdbDriverSetup6.msi</a></p>
<p>Nach der Installation, der ADB Treiber können wir mit &#8222;STRG + R&#8220; cmd + Enter eine Eingabeaufforderung starten. Gebt nun in der Konsole &#8222;adb devices&#8220; ein.</p>
<p>Du solltest nun dein Nexus aufgelistet bekommen.</p>
<p>Öffne nun deinen Aktuellen Chrome.</p>
<p>Klicke auf Optionen (Rechts oben) und dann auf &#8222;Einstellungen&#8220;.<br />
Klicke danach auf &#8222;Erweiterungen&#8220; und suche nach &#8222;Mehr Erweiterungen herunterladen&#8220;.<br />
Suche nach ADB und installiere die Erweiterung ADB von https://developers.google.com/chrome-developer-tools</p>
<p>Öffne nun auf deinem Android gerät mit dem Chrome eine Webseite.<br />
Rechts oben im Chrome an deinem Windows PC sollte nun ein kleines Android Männchen aufgetaucht sein, Klicke darauf.<br />
Du solltest nun den Tab sehen können den du auf deinem Android Chrome geöffnet hast.<br />
Klicke nun auf &#8222;Inspect&#8220; und es öffnet sich die Chrome Entwickler Konsole.</p>
]]></content:encoded>
										</item>
		<item>
		<title>Responsive Website</title>
		<link>https://itservice-herzog.de/blog/responsive-website/</link>
				<pubDate>Thu, 25 Jul 2013 13:08:29 +0000</pubDate>
		<dc:creator><![CDATA[ReMaker]]></dc:creator>
				<category><![CDATA[Programmierung]]></category>

		<guid isPermaLink="false">http://blog.matthias-herzog.net/?p=154</guid>
				<description><![CDATA[Was ist Responsive Eine Webseite ist Responsive wenn Sie sich der Auflösung des Endgerätes anpasst. Das heist eine Webseite besitzt unterscheidliche Darstellungen für unterschiedliche Auflösung oder Seitenverhältnisse. Die Motivation für Responsive desings besteht darin auch Display mit kleinen Auflösungen ein gutes Erlebniss beim surfen zu verschaffen. Oftmals ist es so das bei nicht responsive Webseiten, &#8230; <a href="https://itservice-herzog.de/blog/responsive-website/" class="more-link">Weiter lesen >> <span class="screen-reader-text">Responsive Website</span> <span class="meta-nav">&#8594;</span></a>]]></description>
								<content:encoded><![CDATA[<h2>Was ist Responsive</h2>
<p>Eine Webseite ist Responsive wenn Sie sich der Auflösung des Endgerätes anpasst. Das heist eine Webseite besitzt unterscheidliche Darstellungen für unterschiedliche Auflösung oder Seitenverhältnisse. Die Motivation für Responsive desings besteht darin auch Display mit kleinen Auflösungen ein gutes Erlebniss beim surfen zu verschaffen.<span id="more-154"></span></p>
<p> Oftmals ist es so das bei nicht responsive Webseiten, die mit einer zu niedrigen oder zu großen Auflösung betrachtet werden, Inhalte verloren gehen.</p>
<h2>CSS Media Query&#8217;s</h2>
<p>Media Query&#8217;s sind ab CSS 3 Verfügbar. Mit Ihnen ist es möglich Webseiten Layouts für verschiedene Endgeräte zu erstellen. Dabei gibt es mehrere Möglichkeiten Media Query&#8217;s in das HTML Dokument einzubinden.</p>
<p>Als erstes benötigen wir dieses snipet welches den Tablets und Smartphones sagt das sie die Webseite mit ihrer nativen Auflösung darstellen sollen.</p>
<pre class="lang:default decode:true" title="viewport">&lt;meta name="viewport" content="width=device-width"&gt;</pre>
<p>Geben wir diese Zeile nicht an versuchen die Browser mit kleinerer Auflösung die Seite so zu Skalieren das die Desktop CSS angezeigt wird.</p>
<p>Die erste Möglichkeit wäre im Head des HTML Dokuments folgende CSS Datein zu deklarieren.</p>
<pre class="font:courier-new width:600 lang:default decode:true" title="html Media Query">&lt;link rel='stylesheet' media='screen and (min-width: 901px)' href='css/desktop.css' /&gt;
&lt;link rel='stylesheet' media='screen and (min-width: 701px) and (max-width: 900px)' href='css/tablet.css' /&gt;
&lt;link rel='stylesheet' media='screen and (max-width: 700px) ' href='css/phone.css' /&gt;</pre>
<p>mit folgenden befehlen laden wir für unterschiedliche Auflösungen unterschiedliche CSS Dateien.</p>
<p>Die Zweite möglichkeit ist innerhalb einer CSS Datei mehrere Bereiche zu definieren</p>
<pre class="font:courier-new lang:default decode:true" title="css Query">@media all and (max-width: 700px) 
{
/* Smartphone */
}

@media all and (max-width: 1000px) and (min-width: 701px)
{
/* Tablet */
}
@media all and (min-width: 1001px) 
{
/* Desktop */
}</pre>
<p>Mit den Media Query&#8217;s kann man auch noch mehr machen. Man kann z.B. auch Layouts zum Drucken bestimmen oder für die Ausgabe auf Projektoren und andere Endgeräte anpassen.</p>
<p>eine Ausführliche Beschreibung findet ihr hier <a title="http://www.w3.org/TR/css3-mediaqueries/" href="http://www.w3.org/TR/css3-mediaqueries/">http://www.w3.org/TR/css3-mediaqueries/</a></p>
<h2>Auflösungen</h2>
<p><strong>Smartphone Auflösung Betriebssystem</strong></p>
<ul>
<li>240 x 320 Android</li>
<li>320 x 240 Blackberry</li>
<li>320 x 480 iOS</li>
<li>640 x 940 iOS</li>
<li>480 x 854 Android</li>
<li>480 x 800 Android</li>
<li>960 x 540 Android</li>
<li>1280 x 720 Android</li>
<li>360 x 640 Symbian</li>
<li>800 x 480 Windows Phone OS</li>
</ul>
<p><strong>TabletsTablet Auflösung Betriebssystem</strong></p>
<ul>
<li>600 x 1024 Android</li>
<li>1024 x 600 Android</li>
<li>1280 x 768 Android</li>
<li>1280 x 800 Android</li>
<li>1920 x 1080 Windows 8</li>
<li>2048 x 1536 iOS</li>
</ul>
<h2>Beispiel</h2>
<p><a title="Bilder Hochladen" href="http://pic-upload.eu">pic-upload.eu</a></p>
<p>&nbsp;</p>
<h2>Frameworks</h2>
<p><a href="http://twitter.github.io/bootstrap/">Bootstrap</a></p>
<p>ein von Twitter erstelltes HTML/ CSS Framework mit responsive aspekt</p>
<p><a href="http://purecss.io/">Pure CSS</a></p>
<p>Ein CSS/b HTML Framwork von Yahoo.</p>
<h2>Tools</h2>
<p><a title="Responsive Test" href="http://seo-textgenerator.de/index.php?Section=SEO&amp;Action=Responsive">http://seo-textgenerator.de/index.php?Section=SEO&amp;Action=Responsive</a></p>
<p>&nbsp;</p>
]]></content:encoded>
										</item>
		<item>
		<title>Programmierrichtlinien</title>
		<link>https://itservice-herzog.de/blog/programmierrichtlinien/</link>
				<comments>https://itservice-herzog.de/blog/programmierrichtlinien/#comments</comments>
				<pubDate>Tue, 28 May 2013 10:17:43 +0000</pubDate>
		<dc:creator><![CDATA[ReMaker]]></dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Codingstyle]]></category>
		<category><![CDATA[Webentwicklung]]></category>

		<guid isPermaLink="false">http://blog.matthias-herzog.net/?p=63</guid>
				<description><![CDATA[Allgemeine Arbeitsweise: 1. Zu jeder Prozedur, Funktion, Objekt und Klasse sind Header, die die Funktionalität beschreiben, anzufertigen. Bsp.: /*Programm: final-end.net *Description: in diesem Objekt werden alle Daten zum User zugreifbar und änderbar gemacht, jede Eigenschaft *(Useralter) ist somit im Programm verfügbar. *Author: Max Mustermann *Datum: 01.01.2013 *E-Mail: M.Mustermann@final-end.de */ Die Dokumentation des Quellcodes sollte kurz &#8230; <a href="https://itservice-herzog.de/blog/programmierrichtlinien/" class="more-link">Weiter lesen >> <span class="screen-reader-text">Programmierrichtlinien</span> <span class="meta-nav">&#8594;</span></a>]]></description>
								<content:encoded><![CDATA[<h1><span style="font-size: medium;"><b>Allgemeine Arbeitsweise:</b></span></h1>
<p>1. Zu jeder Prozedur, Funktion, Objekt und Klasse sind Header, die die Funktionalität beschreiben, anzufertigen.<br />
<span id="more-63"></span></p>
<p>Bsp.:<span style="color: #008000; font-family: Courier New,serif; font-size: small;"><br />
/*Programm: final-end.net<br />
*Description: in diesem Objekt werden alle Daten zum User zugreifbar und änderbar gemacht, jede Eigenschaft<br />
*(Useralter) ist somit im Programm verfügbar.<br />
*Author: Max Mustermann<br />
*Datum: 01.01.2013<br />
*E-Mail: M.Mustermann@final-end.de<br />
*/</span></p>
<p style="margin-bottom: 0cm;"><span lang="de-DE">Die Dokumentation des Quellcodes sollte kurz und prägnant gehalten sein.</span></p>
<p style="margin-bottom: 0cm;"><span lang="de-DE">Bsp.: </span><span style="font-family: Courier,serif;"><span style="font-size: small;"><span lang="de-DE">if ($<span style="font-size: small;">U</span>ser<span style="font-size: small;">-&gt;</span>getAlter() &gt; 18 <span style="font-size: small;">)</span> $Status = &#8222;erwachsen&#8220;</span></span></span><span lang="de-DE"> //</span><span style="color: #008000;"><span style="font-family: Courier New,serif;"><span style="font-size: small;"><span lang="de-DE">Useralter prüfen und Status festlegen</span></span></span></span></p>
<p style="margin-bottom: 0cm;">2. Bei jeder Änderung an Prozeduren oder Funktionen eine Beschreibung am Header hinzufügen</p>
<p>Bsp.:</p>
<p><span style="color: #008000;"><span style="font-family: Courier New,serif;"><span style="font-size: small;"><b><b>//</b> änderung: Max Mustermann &#8211; Objekt um Variable x erweitert</b></span></span></span></p>
<p>3.Grundsätzlich werden keine Umlaute verwendet. <span style="color: #ff0000;"><b>ö =&gt; oe , ä =&gt; ae, ü =&gt; ue<br />
</b></span></p>
<p>schreibt einfach in der Englischen Sprache euren Programmcode und ihr werdet feststellen das ich keinerlei Probleme mit umlauten haben werdet <img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>4. <b>Namensgebung:</b></p>
<p>Bsp.:</p>
<ul>
<li>Variablenname: <span style="color: #ff0000;">U</span>ser<span style="color: #ff0000;">V</span>orname (Höckerschreibweise)</li>
<li>Konstanten: KONSTANTEN_NAME</li>
<li>Formular: <span style="color: #ff0000;">frm</span>_<span style="color: #ff0000;">M</span>ap_<span style="color: #ff0000;">U</span>ser<span style="color: #ff0000;">D</span>ata (frm_Modul_Beschreibung) bei kleineren Projekt kann das Modul auch weggelassen werden aber Vorsicht! jedes Projekt fängt einmal klein an</li>
<li>DB-Tabelle: <span style="color: #ff0000;">tbl</span>_<span style="color: #ff0000;">User</span></li>
<li>Steuerelement: <span style="color: #ff0000;">tb</span>_<span style="color: #ff0000;">M</span>ap_<span style="color: #ff0000;">U</span>ser<span style="color: #ff0000;">D</span>ata_<span style="color: #ff0000;">S</span>ure<span style="color: #ff0000;">N</span>ame&gt;</li>
<li>Funktionen: <span style="color: #4f81bd;">o</span>pen<span style="color: #ff0000;">F</span>rm<span style="color: #ff0000;">M</span>ap<span style="color: #ff0000;">U</span>ser<span style="color: #ff0000;">D</span>ata() (Höckerschreibweise)</li>
</ul>
<p>&nbsp;</p>
<p>Hierbei ist die Höckerschreibweise genauso, wie der Aufbau der Bezeichnungen als Grundlage zu betrachten. Die Namensgebung ist so zu wählen, dass der Name eine Aussage zur Funktionalität und zum Einsatzort gibt.</p>
<p><b>Konstantennamen</b> werden immer groß geschrieben und durch „_“ (Underline) getrennt.</p>
<p>&nbsp;</p>
<p>Die Benennung von <b>Funktionen</b> erfolgt mittels Höckerschreibweise und muss beschreibende Attribute im Namen beinhalten.</p>
<p>Bsp.: <span style="color: #4f81bd;">calculateMapUnitPosition()</span> // der Name der Funktion muss den sinn und den Zweck ihres selbst wieder geben. Ich habe in meiner mehrjährigen Tätigkeit als Entwickler schon sehr viel gesehen und kann aus Erfahrung sagen funktion a() &#8211; z() die nur einen Buchstaben haben sind ja gut und schön aber niemand wird nach einem halben Jahr noch wissen was diese Fkt. tun. Haltet euch an den Leitspruch &#8222;Keep It Simple&#8220;. Gerade bei diesem Thema komme ich nicht umhin die Autocomplet Funktion der Meisten IDE&#8217;s (Integrated development environment) anzusprechen<br />
. wenn Ihr zum Beispiel ein Eclipse oder Visuallstudio benutzt versucht doch mal STRG + Leertaste. mit dem Richtigen Codingstyle und dieser Funktion werdet ihr die Programmierung im neuen Maße kennenlernen.</p>
<p><b>5 Datenbank:</b></p>
<p>Eine Sehr wichtige Konvention ist es die Datenbank sauber und übersichtlich zu halten. Viele werden jetzt bestimmt Abbnicken und sagen jetzt Übertreibt er es aber ganz schön, ich sage nein tut er nicht. Stellt euch eine Datenbank mit knapp 200 Tabellen vor, Dazu noch ein paar Hundert Views und las uns sagen noch ein paar hundert Trigger und Stored Procedures und schon seit ihr ohne Codingstyle am Rande der HÖLLE angekommen. Bitte immer im Hinterkopf behalten das die nachkommenden Konventionen dazu dienen die Datenbank aufzulockern und übersichtlicher zu gestalten. Ja mir ist bewusst das es mehr Arbeit ist kleine Buchstaben an die Datenbanken, Tabellen, und einzelnen Spalten zu schreiben, diese helfen aber nach im laufe des Projektes Zeit einzusparen.</p>
<p>Kommen wir dazu wie wir Ordnung in die Datenbank bekommen.</p>
<p><strong>Datenbank</strong></p>
<p>(db) db_FinalEnd // der Name der Datenbank<br />
Solltest du später in deinem Projekt mehrere Datenbanken mit dem selben Namen brauchen nimm einfach</p>
<p>(db) db_FinalEnd1 // der Name der Datenbank<br />
(db)db_FinalEnd2 // der Name der Datenbank</p>
<p><strong>Tabellen</strong></p>
<p>(tbl) tbl_Modul_Inhalt</p>
<p>Bsp.: tbl_Global_User // hier mit Angabe des Modules</p>
<p>tbl_User // dies wäre sich Tabelle für die User</p>
<p>tbl_UserAttribut // wäre Sozusagen die M zu N Beziehungtabelle</p>
<p>alternativ könnte man hier auch schreiben</p>
<p>tbl_AttributUser // das Äquivalent zu tbl_UserAttribut</p>
<p>Es ist kein muss den Modul Namen mit in den Tabellennamen mit aufzuführen. Stellt aber bitte sicher das wenn ihr einmal mit einer Richtlinie begonnen habt diese im Projekt auch konsequent Durchzieht.</p>
<p><strong>View&#8217;s</strong></p>
<p>(v) v_UserAttribut</p>
<p><strong>Trigger und Stored Procedures</strong></p>
<p>Ich fasse Diesen Punkt zusammen da ich der Meinung bin: &#8222;bitte benutzt Trigger und Stored Procedures&#8220; nur wenn ihr und bedingt müsst&#8220;. Ein Grund Stored Procedures zu benutzen wäre der Performance Gewinn gegenüber normalen SQL bzw. einem ORM. Das es keinen Sinn macht Große Datenmengen aus der Datenbank zu laden diese zu verarbeiten und wieder in die Datenbank abzulegen. Also wenn ihr Zeitkritische Prozeduren unter großem Datenaufwand entwickeln müsst nehmt Stored Procedures es gibt keine besser lösung. Aber seit euch bewusst das ihr zwangsläufig Anwendungslogik innerhalb der Datenbank abbildet und ihr zum Schluss an 2 punkten im system Bugfixing betreiben müsst sollte es zu Fehlern im Programm kommen. So komme ich zu fragen wie Debuggt man einen Stored Procedures ^^. Falls Ihr unit Testing im Einsatz habt baut ihr euch noch ein Testsystem für die Datenbank? Noch ein Negativbeispiel für Übertriebenes Datenbank Funktionalität. Stellt euch ein System vor in dem fast 60% der Anwendungslogik in der Datenbank Liegt. so zum beispiel auch die Fkt. insertUser(Name,PassHash, &#8230;. Macht eine Solche Funktion Sinn. Zum einen kann man in einer solchen Datenbank fkt. die Prüfung der eingaben tätigen und im Fehlerfall eine exception werfen. Zum andern würde das ein Normales SQl insert Statement auch tun, Das Problem dabei ist, sollte sich etwas am user ändern, ändert man an 2 stellen in der DB + an der st elle im Programm selbst. Ich würde in einem Solchen fall raten benutz doch einen der Zahlreichen ORM&#8217;S z.b. Linq, oder Hibernate und fackelt die Komplette Fehlerbehandlung in der Applikation ab.</p>
<p>Sind Trigger Gut oder Böse, ich sage beides. In den Richtigen Händen sind Trigger eine sehr gute Erfindung. Falls jetzt irgend jemand auf die Idee kommt seine 50 Tabellen Datenbank mit 1000 Triggern so zu optimieren das sie alles von alleine macht tut es nicht. Trigger steigern die komplezität eurer Datenbankprojekte ins unermessliche. Stellt euch vor ihr fügt einen neuen User in die Datenbank und zusätzlich werden in 5 weiteren Tabellen Daten für den User voll automatisch vorbereitet. Sowas ist Voll cool da muss ich jedem rechtgeben bis auf wenn sich was ändert. Mir ist durchaus bewusst das man mit einer Guten Projektplanung die Datenbank so aufbauen kann das Ãnderung die Ausnahme sind. <strong>Ausnahmen bestätigen die Regel</strong>. Zu mal es ist garnicht so einfach ist nachzuvollziehen wann ein Trigger abgearbeitet wird und was er getan hat. So kommen wir wieder zu dem Problem eines Bug&#8217;s, ist der Fehler nun in der Datenbank aufgetretten oder im Programmcode. Ich würde empfehlen nutzt Trigger behutsam um die Datenbank sauber zu halten. bedenken lost könnt ihr trigger einsetzen um zum beispiel im Fall das ein User aus der Db entfernt wird zusätzliche Userdaten aus der DB zu entfernen.</p>
<p><strong>Spalten</strong></p>
<p><strong></strong>Datentyp_Beschreibung</p>
<p>Bsp.: s_Name // gibt an das in der Spalte Name ein string hinterlegt ist</p>
<p>Datentypen:</p>
<ul>
<li>i Integer</li>
<li>s String (bis 50 Zeichen)</li>
<li>d DateTime</li>
<li>t Text (Feld in den XML eingefügt werden kann)</li>
<li>f Float, Double</li>
<li>b Boolean</li>
<li>dz Decimal (6,2)</li>
</ul>
<p>so ergeben Sich z.B. folgende Konstrukte</p>
<p>db_FinalEnd</p>
<p>tbl_User</p>
<p>i_Id, s_Name, s_PassHash, d_Registerdate, d_Lastogin,t_Description,b_IsPremium &#8230;&#8230;</p>
<p>Der Vorteil habt ihr wenn ihr einen ORM im Programm benutzt im normalfalls erzeug ihr euer DB Objekt ich machen das jetzt kurz in PHP mit dem Kohana Orm</p>
<p>$User=ORM::factory(&#8222;User&#8220;, 1); // ich Lade mir den User mit der Id 1 aus der db</p>
<p>$User-&gt;s_name=&#8220;Matthias&#8220;; // es wird im Porgrammcode sofort ersichtlich es muss ein string sein</p>
<p>$User-&gt;d_Registerdate=time(); // es wird im Porgrammcode sofort ersichtlich hier muss ein datum rein in diesem beispiel ein timestamp</p>
<p>$User-&gt;save();</p>
<p><b>6 Steuerelemente</b></p>
<p><span style="color: #f79646;"><span style="font-size: large;"><b>Steuerelement</b></span></span><span style="font-size: large;"><b> _</b></span><span style="color: #1f497d;"><span style="font-size: large;"><b>Template</b></span></span><span style="font-size: large;"><b>_</b></span><span style="color: #00b050;"><span style="font-size: large;"><b>Beschreibung</b></span></span></p>
<p>RadioButton (<span style="color: #f79646;"><b>rb</b></span>) &#8211; <span style="color: #f79646;"><b>rb</b></span> _<span style="color: #1f497d;"><b>Praesentation</b></span>_<span style="color: #00b050;"><b>UserRank</b></span></p>
<p>Label (<span style="color: #f79646;"><b>lbl</b></span>) &#8211; <span style="color: #f79646;"><b>lbl</b></span> _<span style="color: #1f497d;"><b>UserData</b></span>_<span style="color: #00b050;"><b>SureName </b></span></p>
<p>Button (<span style="color: #f79646;"><b>btn</b></span>) &#8211; <span style="color: #f79646;"><b>btn</b></span> _<span style="color: #1f497d;"><b>Income</b></span>_<span style="color: #00b050;"><b>Calculate</b></span></p>
<p>CheckBox (<span style="color: #f79646;"><b>cb</b></span>) &#8211; <span style="color: #f79646;"><b>cb</b></span> _<span style="color: #1f497d;"><b>UserData</b></span>_<span style="color: #00b050;"><b>HasPremium</b></span></p>
<p>ListBox (<span style="color: #f79646;"><b>lb</b></span>) &#8211; <span style="color: #f79646;"><b>lb</b></span> _<span style="color: #1f497d;"><b>UserData</b></span>_<span style="color: #00b050;"><b>Id</b></span></p>
<p>TextBox (<span style="color: #f79646;"><b>tb</b></span>) &#8211; <span style="color: #f79646;"><b>tb</b></span> _<span style="color: #1f497d;"><b>UserData</b></span>_<span style="color: #00b050;"><b>Description</b></span></p>
<p>ComboBox (<span style="color: #f79646;"><b>cob</b></span>) &#8211; <span style="color: #f79646;"><b>cob</b></span> _<span style="color: #1f497d;"><b>UserData</b></span>_<span style="color: #00b050;"><b>Titel</b></span></p>
<p>GroupBox (<span style="color: #f79646;"><b>gb</b></span>) &#8211; <span style="color: #f79646;"><b>gb</b></span> _<span style="color: #1f497d;"><b>UserData</b></span>_<span style="color: #00b050;"><b>Example</b></span></p>
<p>DateTimePicker (<span style="color: #f79646;"><b>dtp</b></span>) &#8211; <span style="color: #f79646;"><b>dtp</b></span> _<span style="color: #1f497d;"><b>UserData</b></span>_<span style="color: #00b050;"><b>BirthDate</b></span></p>
<p>DataGridView (<span style="color: #f79646;"><b>dgv</b></span>) &#8211; <span style="color: #f79646;"><b>dgv</b></span>_<span style="color: #1f497d;"><b>UserData</b></span>_<span style="color: #00b050;"><b>Survey</b></span></p>
<p>&nbsp;</p>
<p><b>7 Schleifen:</b></p>
<p>für Zählschleifen werden Grundsätzlich Zählvariablen genommen:</p>
<p>Zähler = <b>i</b>, 2. = <b>j</b>, 3. =<b>k </b> und 4. Zähler = <b>m</b></p>
<p><b>8. Arbeitsweise:</b></p>
<ol>
<li>Header erstellen</li>
<li>Einhalten der Namenskonvention (ordentliche Wahl des Namens)</li>
<li>Einhalten der Ordnerstruktur</li>
<li>Zerlegen der Funktion in kleinst mögliche Schritte</li>
</ol>
<p><b>9. Ordnerstruktur:</b></p>
<p>Ein Programm kann wie Folgt aufgebaut.</p>
<p>Der Ordner „System „ stellt den Stammordner der Software dar.</p>
<p>In Ihm wird die Unterteilung nach vorgenommen.</p>
<ol>
<ol>
<li><span style="font-size: small;"><b>Class</b></span>
<ol>
<li>DatabaseObjects // classen des ORMs</li>
<li>Objects // Praogramm spezifische klasse</li>
<li>Controler oder Logic // die Controler schicht + Programm logic</li>
<li>Database // der Datenbank Connector falls eine datenbank im system benutzt werden soll</li>
</ol>
</li>
<li><span style="font-size: small;"><b>Cfg //</b> der Platz für die Configurationsdatein<b><br />
</b></span></li>
<li><span style="font-size: small;"><b>Img // </b>der Platz für deine Bild Ressourcen<b><br />
</b></span></li>
<li><span style="font-size: small;"><b>Js // </b>eventuelle javascripts<b><br />
</b></span></li>
<li><strong>CSS // der platz für deine Css datein</strong></li>
<li><span style="font-size: small;"><b>Plugins // falls es möglich ist für dein Programm plugins zu erstellen oder du plugins von 3 anbierten benutzt die kommen hier rein<br />
</b></span></li>
<li><span style="font-size: small;"><b>View // alle Templates die erstellt werden kommen in den View ordner unr nirgends wo anders<br />
</b></span></li>
</ol>
</ol>
<p lang="de-DE">Das sind meine vorstellungen von einem Codingstyle.</p>
<p lang="de-DE">Natürlich ist das nur vorlagen die man nicht zwingend benutzen muss aber jeder der wschon einmal in einem größeren Katastrophen Programm mitgearbeitet hat weis was es bedeuten einen Codingstyle zu haben.</p>
<p lang="de-DE">Vielen Dank fürs lesen</p>
<p>&nbsp;</p>
]]></content:encoded>
							<wfw:commentRss>https://itservice-herzog.de/blog/programmierrichtlinien/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
							</item>
		<item>
		<title>Form Validator Plugin Für Jquery</title>
		<link>https://itservice-herzog.de/blog/form-validator-plugin-fur-jquery/</link>
				<pubDate>Thu, 07 Mar 2013 19:51:14 +0000</pubDate>
		<dc:creator><![CDATA[ReMaker]]></dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Jquery]]></category>
		<category><![CDATA[Plugin]]></category>

		<guid isPermaLink="false">http://85.25.246.79/blog/?p=5</guid>
				<description><![CDATA[Form Validator Plugin Für Jquery Ich stand wieder einmal vor dem Problem Formulareingaben vor der Verarbeitung durch ein PHP Script prüfen zu lassen. Also habe ich mir kurz Gedanken gemacht wie ich diese Problem lösen kann. Einige Zeit später und Hilfe von Jquery und Bootstrap habe ich eine allround Lösung Programmiert. jfv Es wird nur Jquery &#8230; <a href="https://itservice-herzog.de/blog/form-validator-plugin-fur-jquery/" class="more-link">Weiter lesen >> <span class="screen-reader-text">Form Validator Plugin Für Jquery</span> <span class="meta-nav">&#8594;</span></a>]]></description>
								<content:encoded><![CDATA[<h2><strong>Form Validator Plugin Für Jquery</strong></h2>
<p>Ich stand wieder einmal vor dem Problem Formulareingaben vor der Verarbeitung durch ein PHP Script prüfen zu lassen.<br />
Also habe ich mir kurz Gedanken gemacht wie ich diese Problem lösen kann.<span id="more-13"></span></p>
<p>Einige Zeit später und Hilfe von Jquery und Bootstrap habe ich eine allround Lösung Programmiert. <strong><a href="http://blog.matthias-herzog.net/wp-content/uploads/2013/06/jfv1.zip">jfv</a></strong> Es wird nur Jquery in der aktuellen Version und deine Bootstrap css Datei benötigt.</p>
<p>sehen wir und doch einmal ein normales HTML Formular an.</p>
<p>&lt;form method=&#8220;post&#8220; action=&#8220;index.php&#8220;&gt;<br />
&lt;input tzype=&#8220;text&#8220; value=&#8220;&#8220; name=&#8220;tb_Name&#8220;&gt;<br />
&lt;input type=&#8220;submit&#8220; value=&#8220;abschicken&#8220; /&gt;<br />
&lt;/form&gt;</p>
<p>sobald man auf den Abschicken Butten klickt wird das Formular versendet.<br />
Nun gibt es das Problem das auch wenn das Inputfeld tb_Name leer ist das Formular dennoch versendet wird.</p>
<p>Mein kleines Jquery Plugin bringt Abhilfe.<br />
fügen Sie in die zu prüfenden input Felder folgende Attribute.</p>
<p>jfvType=&#8220;string&#8220; // diese Attribut gibt den Type des Feldes an mögliche Type sind string, number, mail<br />
jfvLength=&#8220;4&#8243; // diese Attribut ist nur gültig wenn das Input Feld vom Type string ist, es gibt an das der Inhalt eine Mindestlänge 4 Zeichen haben muss.<br />
jfvError=&#8220;Fehlermeldung&#8220; // wenn das Formularfeld nicht richtig ausgefüllt worden ist wird diese Meldung als Fehlerausgabe angezeigt</p>
<p>Beispiel</p>
<pre class="lang:xhtml decode:true">&lt;link rel="stylesheet" type="text/css" href="css/jfv.css"&gt;
&lt;link rel="stylesheet" type="text/css" href="css/bootstrap.complete.css"&gt;
&lt;script type="text/javascript" src="js/jquery-1.9.0.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="js/jFormValid.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" &gt;
$(function()
{
// Handler for .ready() called.
$("#UserForm").jFormValid(
{
ErrorClass: "MyError"
});
});
&lt;/script&gt;</pre>
<pre class="lang:xhtml decode:true">&lt;!-- head ende --&gt;

&lt;form method="post" action="index.php" id="UserForm"&gt;
&lt;input tzype="text" value="" name="tb_Name" jfvType="string" jfvLength="4" jfvError="bitte geben Sie einen Namen an!"&gt;
&lt;input type="submit" value="abschicken" /&gt;
&lt;/form&gt;</pre>
<p>&nbsp;</p>
<p>Beispiel Formular mit Verwendung von Bootstrap css Framework.</p>
<pre class="lang:xhtml decode:true" title="HTML Formular">&lt;form id="UserForm" method="post" action="./"&gt;
&lt;div&gt;
&lt;label for="tb_Name"&gt;Loginname&lt;/label&gt;
&lt;div&gt;
&lt;input type="text" value="" jfvType="string" jfvLength="4" jfvError="Bitte geben Sie einen Loginnamen an welcher länger oder gleich 4 zeichen lang ist." name="tb_LoginName" id="LoginName" placeholder="MH2013" &gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;label for="tb_Street"&gt;Benutzername&lt;/label&gt;
&lt;div&gt;
&lt;input type="text" value="" jfvType="string" jfvLength="4" jfvError="Bitte geben Sie einen Benutzername an welcher länger oder gleich 4 zeichen lang ist." name="tb_UserName" id="UserName" placeholder="Matthias Herzog" &gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;label for="tb_Zip"&gt;Passwort&lt;/label&gt;
&lt;div&gt;
&lt;input type="text" value="" jfvType="string" jfvLength="4" jfvError="Bitte geben Sie ein Passwort an welches länger oder gleich 4 zeichen lang ist." name="tb_UserPass" id="UserPass" placeholder="QwErTz" &gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;label for="tb_Town"&gt;Email&lt;/label&gt;
&lt;div&gt;
&lt;input type="text" value="" jfvType="mail" jfvError="Bitte geben Sie eine EmailAdresse an." name="tb_Email" id="tb_Email" placeholder="matthias.herzog@gmx.net" &gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div&gt;
&lt;button type="submit"&gt;Edits&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/form&gt;</pre>
<p>&nbsp;</p>
<p>Lizenz MIT Lizenz</p>
]]></content:encoded>
										</item>
	</channel>
</rss>
