<?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>// der php hacker &#187; Allgemein</title>
	<atom:link href="http://phphacker.net/category/allgemein/feed/" rel="self" type="application/rss+xml" />
	<link>http://phphacker.net</link>
	<description>ein php blog</description>
	<lastBuildDate>Wed, 27 Jan 2010 12:06:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>XINGs Recruiting Methoden</title>
		<link>http://phphacker.net/2010/01/27/xings-recruiting-methoden/</link>
		<comments>http://phphacker.net/2010/01/27/xings-recruiting-methoden/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 12:06:22 +0000</pubDate>
		<dc:creator>Cem Derin</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://phphacker.net/?p=1064</guid>
		<description><![CDATA[Eine sehr nette Idee, um sich fähige Entwickler an Bord zu holen hat XING:

Auf der anderen Seite: Haben sie derzeit aber auch dringen nötig =)
]]></description>
			<content:encoded><![CDATA[<p>Eine sehr nette Idee, um sich fähige Entwickler an Bord zu holen hat XING:</p>
<p><a href="http://phphacker.net/wp-content/uploads/2010/01/Bildschirmfoto-2010-01-27-um-13.02.25.png"><img class="aligncenter size-full wp-image-1065" title="Bildschirmfoto 2010-01-27 um 13.02.25" src="http://phphacker.net/wp-content/uploads/2010/01/Bildschirmfoto-2010-01-27-um-13.02.25.png" alt="Bildschirmfoto 2010-01-27 um 13.02.25" width="560" /></a></p>
<p>Auf der anderen Seite: Haben sie derzeit aber auch dringen nötig =)</p>
]]></content:encoded>
			<wfw:commentRss>http://phphacker.net/2010/01/27/xings-recruiting-methoden/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Warum ist das eigentlich noch keinem aufgefallen?</title>
		<link>http://phphacker.net/2010/01/23/warum-ist-das-eigentlich-noch-keinem-aufgefallen/</link>
		<comments>http://phphacker.net/2010/01/23/warum-ist-das-eigentlich-noch-keinem-aufgefallen/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 00:53:22 +0000</pubDate>
		<dc:creator>Cem Derin</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://phphacker.net/?p=1055</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><a href="http://phphacker.net/wp-content/uploads/2010/01/chalmer_balmer1.png"><img class="aligncenter size-full wp-image-1061" title="chalmer_balmer" src="http://phphacker.net/wp-content/uploads/2010/01/chalmer_balmer1.png" alt="chalmer_balmer" width="500" height="312" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://phphacker.net/2010/01/23/warum-ist-das-eigentlich-noch-keinem-aufgefallen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Von Nazis, Hackern, Datenschutz und Differenzierungen</title>
		<link>http://phphacker.net/2009/12/29/von-nazis-hackern-datenschutz-und-differenzierungen/</link>
		<comments>http://phphacker.net/2009/12/29/von-nazis-hackern-datenschutz-und-differenzierungen/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 13:23:12 +0000</pubDate>
		<dc:creator>Cem Derin</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Interna]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://phphacker.net/?p=1020</guid>
		<description><![CDATA[Die Nachricht schlug mal wieder ein wie eine Bombe: Hacker knacken Nazi-Flirtbörse und stellen Benutzerdaten ins Netz (sinngemäß). Ob man nun eher Links angehaucht ist oder nicht, eigentlich hat jeder der selbst keiner ist ein Problem mit Nazis. Insofern war der Zuspruch auf die Nachricht im Netz auch zunächst einmal positiv. Gute Sache. Toll. Epic [...]]]></description>
			<content:encoded><![CDATA[<p>Die Nachricht schlug mal wieder ein wie eine Bombe: <a href="http://www.heise.de/newsticker/meldung/26C3-Flirtboerse-der-rechten-Szene-gehackt-893403.html">Hacker knacken Nazi-Flirtbörse und stellen Benutzerdaten ins Netz</a><span> (sinngemäß). Ob man nun eher Links angehaucht ist oder nicht, eigentlich hat jeder der selbst keiner ist ein Problem mit Nazis. Insofern war der Zuspruch auf die Nachricht im Netz auch zunächst einmal positiv. Gute Sache. Toll. <span>Epic</span> <span>Win</span>! Ich persönlich bin der selben <span>meinung</span> gewesen. Dann aber huschte </span><a href="http://twitter.com/evebugs/status/7158333046"><span>dieser <span>Tweet</span> von <span>Evelyne</span></span></a><span> durch mei<span>ne</span> <span>Timeline</span>:</span></p>
<blockquote><p><em><span><span>leute</span> vom </span><a title="#26c3" href="http://twitter.com/search?q=%2326c3">#26c3</a><span> habt ihr sie noch alle? <span>ne</span> <span>seite</span> hacken ist ei<span>ne</span> <span>sache</span>, aber <span>daten</span> der <span>benutzer</span> ins <span>netz</span> stellen? so viel zum <span>datenschutz</span>&#8230;</span></em></p></blockquote>
<p><span><span>Mhm</span>. Irgendwo hat sie doch Recht. Setzt man sich doch für Datenschutz ein, will dem Staat keinen uneingeschränkten Zugriff auf sein digitales <span>Bewegungsmuster</span> gestatten. Wettert gegen die <span>Datenkrake</span>, weint aber <span>rum</span>, wenn die Suche mal <span>down</span> ist. Ich bin jemand, der sei<span>ne</span> Ansichten ger<span>ne</span> mal hinterfragt. So auch in diesem Fall. Darf man <span>sowas</span>?</span><span id="more-1020"></span><span>Nach reiflicher <span>Überlegung</span>: Ja, darf man. Ich würde es als einen Fall von &#8220;digitaler Notwehr&#8221; bezeichnen. Lässt man Menschen mit rechtsextremen Gedankengut Freiraum, so macht man sich indirekt schuldig für das, was dieses anrichtet. Was das ist, kann man so gut wie täglich in der Zeitung lesen: Da werden &#8220;Schwarzafrikaner&#8221; die eigentlich Italiener sind totgeprügelt, da werden Brandsätze auf Asylbewerberunterkünfte geworfen, da werden Menschen an der freien Entfaltung Ihrer Persönlichkeit gehindert, weil Ignoranz und Fremdenhass wie Gift dem nach <span>Polarisierung</span> lechzenden Mob entgegengespuckt wird. Ich persönlich möchte mich dafür nicht verantwortlich zeichnen.</span></p>
<p>Die Welt ist nun einmal nicht schwarz und nicht weiß, die Welt ist nach wie vor ein Sammelsurium von vielen verschiedenen Grautönen und man muss jeden Schritt den man tut, jeden Gedanken den man denkt und jede Meinung die man hat immer wieder neu bewerten und kann keine Schablone anwenden. Tut man das doch, hat man einen Punkt erreicht, den man guten Gewissens als &#8220;geistigen Stillstand&#8221; bezeichnen kann. Damit will ich keinesfalls sagen, dass Leute, die sich negativ über die Verbreitung der oben genannten Daten äußern dem entsprechen. Was ich aber damit sagen will: Man kann nicht mit einer- oder zweierlei Maß messen. Man braucht für jede Situation ein neues.</p>
]]></content:encoded>
			<wfw:commentRss>http://phphacker.net/2009/12/29/von-nazis-hackern-datenschutz-und-differenzierungen/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>php-resource.de</title>
		<link>http://phphacker.net/2009/12/18/php-resource-de/</link>
		<comments>http://phphacker.net/2009/12/18/php-resource-de/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 12:56:42 +0000</pubDate>
		<dc:creator>Cem Derin</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://phphacker.net/?p=1006</guid>
		<description><![CDATA[Ich wollte mal darauf hinweisen, dass ich seit einiger Zeit als Moderator und seit noch viel längerer Zeit als Nutzer im Forum von php-resource.de unterwegs bin! Ich würde mich freuen, evtl. ein paar von euch dort begrüßen zu können. Derzeit kann man alle Leute, die etwas auf dem Kasten haben und dort regelmäßig aktiv sind [...]]]></description>
			<content:encoded><![CDATA[<p>Ich wollte mal darauf hinweisen, dass ich seit einiger Zeit als Moderator und seit noch viel längerer Zeit als Nutzer im Forum von <a href="http://www.php-resource.de/">php-resource.de</a> unterwegs bin! Ich würde mich freuen, evtl. ein paar von euch dort begrüßen zu können. Derzeit kann man alle Leute, die etwas auf dem Kasten haben und dort regelmäßig aktiv sind an zwei Händen abzählen. Wäre toll, wenn sich das ändern würde =)</p>
]]></content:encoded>
			<wfw:commentRss>http://phphacker.net/2009/12/18/php-resource-de/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zend Framework Umfrage</title>
		<link>http://phphacker.net/2009/12/17/zend-framework-umfrage/</link>
		<comments>http://phphacker.net/2009/12/17/zend-framework-umfrage/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 01:44:03 +0000</pubDate>
		<dc:creator>Cem Derin</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://phphacker.net/?p=993</guid>
		<description><![CDATA[Wer das Zend-Framework genau so exzessiv wie ich einsetzt und sich damit auch mehr oder weniger in einer Art Abhängigkeit bugsiert, der sollte sich mal schleunigst zum Zend Framework Survey for 2009 bewegen und die Fragen beantworten. Aus den Antworten erhoffen sich die Entwickler ein besseres Verständnis davon, wie das ZF an der Front engesetzt [...]]]></description>
			<content:encoded><![CDATA[<p id="page-heading">Wer das Zend-Framework genau so exzessiv wie ich einsetzt und sich damit auch mehr oder weniger in einer Art Abhängigkeit bugsiert, der sollte sich mal schleunigst zum <a href="http://devzone.zend.com/article/11485-Zend-Framework-Survey-for-2009">Zend Framework Survey for 2009</a> bewegen und die Fragen beantworten. Aus den Antworten erhoffen sich die Entwickler ein besseres Verständnis davon, wie das ZF an der Front engesetzt wird. Und für ein bisschen ansporn sorgt dann natürlich auch noch die verschwindend geringe Möglichkeit der glückliche Gewinner des neuen iPod-Touch zu werden, der unter den Teilnehmern verlost wird &#8211; man kann aber auch anonym teilnehmen.</p>
]]></content:encoded>
			<wfw:commentRss>http://phphacker.net/2009/12/17/zend-framework-umfrage/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Headhunt my ass!</title>
		<link>http://phphacker.net/2009/12/16/headhunt-my-ass/</link>
		<comments>http://phphacker.net/2009/12/16/headhunt-my-ass/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 21:41:13 +0000</pubDate>
		<dc:creator>Cem Derin</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://phphacker.net/?p=991</guid>
		<description><![CDATA[Mit geübtem Auge kann man es vielleicht schon am Titel erahnen: Ich mag Headhunter nicht. Überhaupt nicht. Am schlimmsten finde ich die, die ihrer Tätigkeit als Agenten nachgehen. Und als Jemand, der Software entwickelt und im Internet präsent ist, wird man sozusagen von Headhuntern belagert. Damit Ihr nicht unbedingt auf solche Leute reinfallt und damit [...]]]></description>
			<content:encoded><![CDATA[<p>Mit geübtem Auge kann man es vielleicht schon am Titel erahnen: Ich mag Headhunter nicht. Überhaupt nicht. Am schlimmsten finde ich die, die ihrer Tätigkeit als Agenten nachgehen. Und als Jemand, der Software entwickelt und im Internet präsent ist, wird man sozusagen von Headhuntern belagert. Damit Ihr nicht unbedingt auf solche Leute reinfallt und damit ich mal ein bisschen Galle spucken kann, will ich mal ein wenig aus dem Nähkästchen plaudern.</p>
<p>Für die, die nicht wissen, was ein Headhunter ist oder ich damit meinen könnte: Headhunter sind Menschen, die versuchen fachlich qualifizierte und passende Menschen in ihr oder das beauftragende Unternehmen zu holen. &#8211; so jedenfalls die Theorie.</p>
<p>Zurück zu meinem Rant: Das erste mal in Kontakt mit einem Headhunter bin ich gekommen, als ich mein XING-Profil das erste mal komplett ausgefüllt habe. Wenige Tage später erhielt ich einen Anruf auf der Arbeit(!). Die Person gab sich als ein Kunde der Firma aus, für die damals gearbeitet habe und ließ sich zu mir durchstellen. Als er mich dann an der Strippe hatte, ging es ohne Umwege direkt zum Kern der Sache: &#8220;Sind die zufrieden in ihrem Unternehmen?&#8221;. Zu dem Zeitpunkt war ich das und lehnte das Angebot für ein persönliches Gespräch dankend ab. Mächtig Stolz war ich. So hat ein anderes Unternehmen einfach so interesse an mir gezeigt. Wow, und das, als die Arbeitslosenzahlen (mal wieder) einen Höchststand markierten.</p>
<p>Es dauerte eine Weile, und dann kam schon der nächste &#8230; oder eher DIE nächste. Das Schema blieb das selbe: Mit Tricks und Schummeleien zu mir durchgestellt werden und dann die Katze aus dem Sack lassen. Es wurde nervig. Aber es war auch noch im Rahmen &#8230; immerhin war da so etwas wie ein persönlicher Kontakt. So sollte es nicht bleiben.</p>
<p>Kurze Zeit später trudelten mehr und mehr ungefragte eMails, Kontaktanfragen und ähnliches ein. Immer ist von &#8220;mittelständischen&#8221; Unternehmen die Rede, die aber immer geheim bleiben. Immer sind die Leute selbst erst seit kurzem bei XING und haben ein kaum ausgefülltes Profil geschweigedenn einen Werdegang. Zum Mäusemelken. Aber mitlerweile landen diese Mails einfach im Papierkorb.</p>
<p>Seit ich aber ein Blog betreibe, wird es wieder zunehmen persönlich. Nicht unbedingt im positiven Sinne. Nach langer Zeit ging ich auf diese &#8211; oftmals recht freundlichen und auch nicht so anonymen &#8211; Anfragen ein. Am Ende wurde dann doch schnell klar: Die Leute suchen junge, talentiere Leute, die sich über den Tisch ziehen lassen. Mit einem Jahresgehalt, dass nur knapp über dem liegt, was man zum Leben braucht und in Arbeitsverhältnissen, in denen keiner glücklich wird: OS-Zwang (als Entwickler?), Editor-Zwang (WTF?), Chefs die von sich selbst behaupten mal Programmierer gewesen zu sein, aber auf neumodischen Schnickschnack wie OOP, XHTML und Technologien wie AJAX, JSON und Komparsen lieber verzichten. Läden, in denen &#8220;Server&#8221; für Behördenprogramme aus vergilbten Desktoprechnern bestehen, die altersschwach vor sich her rattern. Ausgebrannten Kollegen, die jeglichen Enthusiasmus verloren haben. Nein, Danke.</p>
<p>Unter den vielen &#8220;Anfragen&#8221; kann ich die in Frage kommenden an einer Hand abzählen. Es waren genau zwei. Einmal hat es räumlich nicht geklappt, und einmal war ein anderer Job nicht viel &#8211; aber besser. Ich mag meinen Job. Und ich mag ihn da, wo er ist. Also bitte, liebe Abwerber: Lasst mich in Ruhe!</p>
]]></content:encoded>
			<wfw:commentRss>http://phphacker.net/2009/12/16/headhunt-my-ass/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Von Eastereggs und wie man sie verstecken kann</title>
		<link>http://phphacker.net/2009/12/16/von-eastereggs-und-wie-man-sie-verstecken-kann/</link>
		<comments>http://phphacker.net/2009/12/16/von-eastereggs-und-wie-man-sie-verstecken-kann/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 14:07:21 +0000</pubDate>
		<dc:creator>Cem Derin</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Kurioses]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://phphacker.net/?p=981</guid>
		<description><![CDATA[                                Uns  Entwicklern                     [...]]]></description>
			<content:encoded><![CDATA[                                <p>Uns  Entwicklern                              
                           wird  oftmals  abgesprochen,                          
                        dass  wir  Kreativ  sind.  Das                           
                      erkennt  man  leider  schon  oft                           
                     daran,  dass  in  den  meisten  Agenturen                   
                    zwischen  „Kreativen“  und  „Entwicklern“            
                   unterschieden              wird.  Dabei                       
                   ist  das                      alles  andere                   
                   als  Gerechtfertigt.           So  verstehen                  
                   wir  unser                      Handwerk                      
                   ebenfalls                       als  eine                     
                    „Kunstform“,              erkennen                       
                     in  schönem                Code  Ästhetik,                
                       wo  das                 ungeschulte                       
                    Auge  nur  wirre  Zeichenfolgen  sieht.  Investieren         
                    wir  doch  viel  Liebe  und  Herz  in  den  Aufbau  und      
                    die  Gestaltung  unserer  Applikationen  ist  es  letztlich  
                    am  Ende  für  den  Anwender  doch  nur  ein  Werkzeug.     
                    Mich  persönlich  stimmt  es  dann  und  wann  traurig,     
                           wenn  der  Betrachter  das  Kunstwerk,                
                        das  man  geschaffen  hat  nicht                         
                      würdigt  –  oder  würdigen  kann.                      
                    Aber  daran  wird  man  wohl  auch  nie                      
                   etwas  ändern  können:  Das  was  für                      
                   die  meisten  an  Software  „schön“                      
                   ist,  ist                                                     
                   in  der                                                       
                   Regel                                                         
                   nicht  einmal                                                 
                    die  Software                                                
                      selbst                                                     
                      sondern  eben                                              
      das,  was  die  „Kreativen“  dazu  beigetragen                         
      haben.</p><p>All  das  soll  mich  aber  nicht  daran                      
      hindern,  meine  Signatur  unter  das  zu  setzen,                         
      was  ich  schaffe.  Damit  meine  ich  nicht  meinen                       
      Namen  in  den  Kommentaren,  damit  meine  ich  auch                      
                              nicht,  dass  ich                                  
                          ans  Dokumentende  ein  pubertäres                    
                       „hacked  together  by  Cem  Derin“                    
                      klatsche.  Oftmals  ist  das  ja                           
                     auch  gar  nicht  möglich.  Nein,                          
                    ich  meine,  dass    ich  meine  Handschrift                 
                   so  hinterlasse,             dass  Sie                        
                   zwar  Sichtbar                 ist  –                       
                   aber  trotzdem                  auch  Unsichtbar.             
                   Dazu  bediene                   ich  mich                     
                    dem,  was                      gemeinhin                     
                    als  „Easteregg“          bekannt                        
                      ist.  So                   stelle                          
                       ich  sicher,          dass  meine                         
                    Software  von  den  Leuten  gewürdigt  werden  kann,        
                    die  dazu  auch  in  der  Lage  sind.</p><p>Viele  Seiten    
                    beinhalten  einen  kleinen  Scherz,  einen  Kommentar,       
                    einen  Witz  oder  ähnliches,  wenn  man  bestimmte         
                    Tastenkombinationen  auf  einer  Seite  betätigt.  Das      
             hat  den  Nachteil,                                                 
           das  ein  gewisser                                                    
         Anteil  JavaScript  nachgeladen                                         
        werden  muss  und  man  ggf.                                             
       auch  Resourcen  einbettet,                                               
      die  kein  Mensch  freigegeben                                             
      hat.  Da             man  sowas  natürlich  auch  nicht                   
      mit  seinem            Gewissen  vereinbaren  kann,                        
      hatte  dies             zur  Folge,       dass  meine                      
      Eastereggs                so  versteckt   waren,  dass                     
      sie  keiner                 Gefunden      hat.</p><p>Irgendwie             
      hat  auch                                                                  
       das  geschlaucht.                                                         
       Da  gab  es  dann                                                         
         aber  noch  eine                                                        
          andere  Möglichkeit,                                                  
             wie  man                                                            
                 ein                                                             
                   Easteregg                      unterbringen                   
                   kann:  ASCII-Art.             Obwohl,                         
                    nicht  direkt.              Im  Grunde                       
                     meine  ich                 nur  das                         
                      hinzufügen              von  zusätzlichem                
                      Whitespace.             Man  verändert                    
                       den  Inhalt           nicht,  sondern                     
                        lediglich            die  Formatierung,                  
                         so  dass           dem  Betrachter                      
                         eine  Botschaft   ohne  jegliche                        
                          Nebenwirkungen   übermitteln                          
                           kann.</p><p>Dazu  habe                                
                            ich  ein     kleines                                 
                             Programm   geschrieben,                             
                             dass  zwar  noch  alles                             
                              andere  als  ausgereift                            
                               ist,  aber  seinen                                
                                Zweck  trotzdem                                  
                                schon  erfüllt.                                 
                                 Zu  finden                                      
                                  ist  es  <a                                    

href="http://phphacker.net/embed/" >hier</a>. Und wer sich nun fragt, was das Ding macht – der schaue sich den Quelltext dieses Beitrags an =)</p><p>Übrigens: Die Textbasis ist derzeit die, die ihr hier grade lest. Das wird sich aber bald ändern. Außerdem stehen die Einstellungsmöglichkeiten noch nicht zur Verfügung – denn um ein halbwegs zufrieden stellendes Ergebnis zu erzielen, muss man ganz schön den Parametern rumjustieren.</p>]]></content:encoded>
			<wfw:commentRss>http://phphacker.net/2009/12/16/von-eastereggs-und-wie-man-sie-verstecken-kann/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Die Geschichte des Hackens</title>
		<link>http://phphacker.net/2009/12/09/die-geschichte-des-hackens/</link>
		<comments>http://phphacker.net/2009/12/09/die-geschichte-des-hackens/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 09:52:52 +0000</pubDate>
		<dc:creator>Cem Derin</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://phphacker.net/?p=959</guid>
		<description><![CDATA[Eine Grafik, die genau so lustig und informativ ist wie die Bilder schlecht sind, die sie enthält. Es geht um eine kleine Zeitgeschichte des Hackens. Inkl. Analyzer … dessen Nickname ich mir Anfang der 90er borgte  

Gefunden bei focus.com durch einen Schubs von Sergej.
]]></description>
			<content:encoded><![CDATA[<p>Eine Grafik, die genau so lustig und informativ ist wie die Bilder schlecht sind, die sie enthält. Es geht um eine kleine Zeitgeschichte des Hackens. Inkl. Analyzer … dessen Nickname ich mir Anfang der 90er borgte <img src='http://phphacker.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><a href="http://www.focus.com/fyi/it-security/history-hacking/"><img class="aligncenter size-full wp-image-960" title="Bildschirmfoto 2009-12-09 um 10.50.43" src="http://phphacker.net/wp-content/uploads/2009/12/Bildschirmfoto-2009-12-09-um-10.50.43.png" alt="Bildschirmfoto 2009-12-09 um 10.50.43" width="599" height="456" /></a></p>
<p>Gefunden bei <a href="http://www.focus.com/fyi/it-security/history-hacking/">focus.com</a> durch einen Schubs von <a href="http://twitter.com/wpSEO/">Sergej</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://phphacker.net/2009/12/09/die-geschichte-des-hackens/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>URL-Shortener http://to./</title>
		<link>http://phphacker.net/2009/12/06/url-shortener-httpto/</link>
		<comments>http://phphacker.net/2009/12/06/url-shortener-httpto/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 17:20:56 +0000</pubDate>
		<dc:creator>Cem Derin</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Kurioses]]></category>

		<guid isPermaLink="false">http://phphacker.net/?p=925</guid>
		<description><![CDATA[Vor ein paar Tagen schwirrte etwas durch interessantes meine Twitter-Timeline. Ich weiß leider nicht mehr von wem (geschweige denn den genauen Wortlaut), aber es ging um den angeblich &#8220;kürzesten&#8221; URL-Shortener der Welt. Anbei war ein Link zu http://to./
Folgt man diesem, so landet man auf einer sehr rudimentären (bzw. definitiv von einem Entwickler gestalteten) Eingabemaske, die [...]]]></description>
			<content:encoded><![CDATA[<p>Vor ein paar Tagen schwirrte etwas durch interessantes meine Twitter-Timeline. Ich weiß leider nicht mehr von wem (geschweige denn den genauen Wortlaut), aber es ging um den angeblich &#8220;kürzesten&#8221; URL-Shortener der Welt. Anbei war ein Link zu <a href="http://to./">http://to./</a></p>
<p>Folgt man diesem, so landet man auf einer sehr rudimentären (bzw. definitiv von einem Entwickler gestalteten) Eingabemaske, die eine URL, einen Namen sowie ein Passwort annimmt. Versucht man allerdings das Formular auszufüllen und abzuschicken, passiert – nix.</p>
<p>Das könnte natürlich daran liegen, dass unter dem Formular in roten Lettern darauf hingewiesen wird, dass das ganze Teil (noch) nicht für den öffentlichen Gebrauch bestimmt ist. Wie dem auch sei.</p>
<p>Wirklich interessant ist: Wie kommt man an eine Domain &#8220;to.&#8221;? Viele werden wahrscheinlich wegen dem Punkt am Ende verwirrt sein. Prinzipiell kann man aber jeden TLD mit einem Punkt am Ende aufrufen. Und im DNS stehen sie sowieso genau so drin. Hier ist er allerdings wichtig, da die eingegebene URL nur so vom Browser als FQDN erkannt wird. Was macht der Browser nun? Er lässt im DNS nachschauen, wohin die Domain to. auflöst. Und das ist auch schon der Knackpunkt: to. wurde als Ressource eingetragen, löst korrekt auf eine IP auf und hinter dieser verbirgt sich ein Webserver. Padabing!</p>
<p>Und warum kam das nicht eher? Weil es eher unbequem, verwirrend und die Auswahl der möglichen Domains eher eingeschränkt ist <img src='http://phphacker.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://phphacker.net/2009/12/06/url-shortener-httpto/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Re: Wann verwende ich Exceptions</title>
		<link>http://phphacker.net/2009/05/11/re-wann-verwende-ich-exceptions/</link>
		<comments>http://phphacker.net/2009/05/11/re-wann-verwende-ich-exceptions/#comments</comments>
		<pubDate>Mon, 11 May 2009 06:36:10 +0000</pubDate>
		<dc:creator>Cem Derin</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://phphacker.net/?p=866</guid>
		<description><![CDATA[Kurz vor dem Redesign meines Blogs habe ich „Ein Herz für Blogs“-Artikel gesagt, dass ich öfter auf die Blogosphäre eingehen möchte. Bisher habe ich das auch ein paar mal getan. Leider ist es immer etwas schwierig, da die meisten Themen entweder in den Artikeln schon sehr gut abgehandelt werden, und ich nicht mehr als einen [...]]]></description>
			<content:encoded><![CDATA[<p>Kurz vor dem Redesign meines Blogs habe ich „<a href="http://phphacker.net/2009/04/21/ein-herz-fur-blogs/">Ein Herz für Blogs</a>“-Artikel gesagt, dass ich öfter auf die Blogosphäre eingehen möchte. Bisher habe ich das auch ein paar mal getan. Leider ist es immer etwas schwierig, da die meisten Themen entweder in den Artikeln schon sehr gut abgehandelt werden, und ich nicht mehr als einen Verweis hier hin schreiben könnte, oder sie sind für mich uninteressant – sei es wegen zu niedrigem Niveau (was nicht abwertend gemeint ist) oder weil sie Dinge behandeln, zu denen ich nichts sagen kann.</p>
<p><span>Heute ist das aber anders: <a href="http://www.phphatesme.com/blog/softwaretechnik/wann-verwende-ich-exceptions/">Vor ein paar Tagen fragte sich Nils, wie man wohl Exceptions korrekt verwendet</a>. Jetzt finde ich endlich mal genug Zeit, meine Meinung zu dem Thema niederzuschreiben.</span></p>
<p><span><span id="more-866"></span></span></p>
<p><span>Nils versuchte sich mit folgendem Grudsatz aus der Affäre zu ziehen</span></p>
<blockquote><p><span>Excpetions (Ausnahmen) werden immer dann geworfen, wenn etwas unerwartetes passiert.</span></p></blockquote>
<p><span>Die meisten gestandenen Entwickler werden dem Zustimmen. Die meisten Anfänger werden sich fragen, wie man unerwartete Vorfälle berücksichtigen kann. Diese werden dann müde belächelt, Erklärungen bleibt man ihnen dann aber meist dennoch schuldig. Nils immerhin gibt sich Mühe, eine Reihe solcher Ereignisse beispielhaft aufzuzählen. Am Ende weiß er dann aber selbst nicht, was man für eine Regel an die Hand geben könnte. Ich ich könnte wetten, die meisten Entwickler sind etwas ratlos, was das Thema Exceptions angeht.</span></p>
<p><span>Versuchen wir also einfach einmal, zu erörtern, wie man Exceptions am besten einsetzen könnte. Vorher will ich aber mit einer ziemlich falschen Behauptung aufräumen: Exceptions stellen keine unerwarteten Ereignisse dar, sondern Ausnahmen (wie der Name ja auch sagt). Somit hat sich der Hirnknoten, wie man unerwartetes Berücksichtigen kann hoffentlich auch aufgelöst.</span></p>
<p><span>Wer die Kommentare in Nils Beitrag gelesen hat, dem wird nicht entgangen sein, dass ich dort der Verwendung von Exceptions für strukturelle Prüfungen wie Nils negativ gegenüberstehe. Diese Meinung lege ich an dieser Stelle (vorläufig) ab (das sollte man übrigens öfter mal tun, wenn man einen Objektiven Blick auf ein Thema erhalten will).</span></p>
<h2><span>Alles ist eine Klasse – Jeder Fehler eine Exception</span></h2>
<p><span>Ich persönlich finde den Ansatz, dass alles durch eine Klasse repräsentiert wird ziemlich bequem. Beherzigt man diesen Grundsatz konsequent, kann man verdammt flexible Anwendungen bauen. Refactoring wird auf einmal extrem bequem, und wenn man dann noch das Template Pattern benutzt, ist man komplett auf der sicheren Seite. Es wäre nur Konsequent, wenn man hier Fehlerfälle durch Exceptions abbildet. Aber wie macht man so etwas richtig?</span></p>
<p><span>Einfach zu sagen „Prüfungen liefern nicht mehr true oder false sondern werfen von nun an eine Exception, wenn etwas nicht zutrifft“ ist leider etwas zu einfach. Nehmen wir das Beispiel einer User-Klasse: Wollen wir wissen, ob der Benutzer online ist, werden wir dafür eine Methode bemühen, die etwas <em>isOnline </em>heißen könnte. Ist der Benutzer nicht online, stellt dies natürlich keine Ausnahme dar. Hier ist ein Boolescher Wert (oder wenn man ganz penibel sein möchte auch die Repräsentation durch eine Klasse) vollkommen in Ordnung.</span></p>
<p><span>Nehmen wir aber an, dass wir Änderungen den Stammdaten eines Benutzers vorgenommen haben und diese nun speichern wollen. Dann haben wir für so etwas sicherlich eine Methode die <em>save</em> heißen könnte. Natürlich könnte es vorkommen, dass aus verschiedenen Gründen der Speichervorgang fehl schlägt: Die Datenbank ist plötzlich nicht mehr verfügbar, die angegebenen Daten können nicht eingetragen werden (vielleicht weil gegen Constraints verstoßen wird). </span></p>
<p><span>In diesem Fall einen Booleschen Wert als Indikator zu liefern klingt erst einmal plausibel. Der entsprechende Code könnte ungefähr so aussehen</span></p>
<pre>
<pre class="brush: php">
if($user-&gt;save()) {
	// Der Speichervorgang war erfolgreich
} else {
	// Der Speichervorgang war nicht erfolgreich
}
</pre>
</pre>
<p><span>Eine Reihe von Gründen sprechen allerdings gegen ein solches Vorgehen. Legt man beispielsweise Wert auf ein Fluent Interface (das bedeutet, dass eine Methode wenn möglich immer die Instanz des eigenen Objektes zurückgibt), ist dieser Ansatz schon einmal nicht möglich. In diesem Fall bleibt uns nichts anderes übrig, als mit Exceptions zu arbeiten.</span></p>
<p><span>Folgender Code könnte verwendet werden</span></p>
<pre>
<pre class="brush: php">
try {
	$output = $user-&gt;save()-&gt;getId();
	echo &#039;Der User hat die ID: &#039;. $output;
} catch(UserException $e) {
	echo &#039;Bitte prüfen Sie Ihre Angaben&#039;;
} catch(DbQueryException $e) {
	echo &#039;Bitte prüfen Sie Ihre Angaben&#039;;
} catch(DbException $e) {
	echo &#039;Leider ist die Datenbank zur Zeit ausgefallen. Versuchen Sie es zu einem späteren Zeitpunkt noch einmal&#039;.
} catch(Exception) {
	echo &#039;Ein unbekannter Fehler ist aufgetreten. Wir arbeiten &#039;dran&#039;;
}
</pre>
</pre>
<p><span>Das Programm versucht das Benutzerobjekt zu speichern und liest direkt die ID aus, um diese später an den Benutzer auszugeben. Wird in diesem Prozess nun eine Exception geworfen, gibt es eine Reihe von Fängern – je nach dem, welche geworfen wird. Man kann hier also auch eine tolle Fallunterscheidung treffen. Für den Fall, dass eine Komponente einen nicht dokumentierten oder hier evtl. tatsächlich nicht erwarteten Fehler in Form einer Exception auslöst, sollte man diesen Fall auch immer vorsehen und einen Catch-Block für die Basisklasse erstellen.</span></p>
<h2><span>Unter der Haube</span></h2>
<p><span>Innerhalb der Userklasse könnte der Code ungefähr so aussehen:</span></p>
<pre>
<pre class="brush: php">
class User {
	public function save() {
		$this-&gt;validate();
		$this-&gt;writeToDb();
		return $this;
	}

	public function validate()  {
		if(!$this-&gt;isValidUserName($this-&gt;data-&gt;username)) {
			throw new UserException(&#039;Username not valid&#039;);
		}
	}

	public function writeToDb() {
		$this-&gt;databaseAdapter-&gt;query($this-&gt;createInsertQuery());
	}
}
</pre>
</pre>
<p><span>Wir sehen, das in der Methode <em>validate </em>durchaus ein Boolescher Wert ausgewertet wird. Die Answendung macht hier insofern Sinn, dass hier eine Prüfung stattfindet. Im Falle der Methode <em>save</em> wird angenommen, dass alle Daten korrekt sind, unabhängig von einer evtl. erneuten Prüfung.</span></p>
<p><span>In der Methode writeToDb sehen wir, dass ein Query erzeugt wird, welcher an einen Datenbankadapter weitergereicht wird. Dieser wird im Falle eines Fehler eine Exception werfen. Diese fangen wir absichtlich nicht innerhalb der Modellklasse.</span></p>
<h2><span><strong>Exception-Codes</strong></span></h2>
<p><span>Nehmen wir nun einfach einmal an, beim Speichern unseres Benutzerobjektes wurde gegen einen Contraint in der Datenbank verstoßen. Die Datenbank meldet dies, unser Adapter wird eine Exception werfen. Wir wissen nun, dass etwas schief gelaufen ist, wir wissen auch ziemlich genau wo. Aber wir wissen nicht, was genau muckiert wird.</span></p>
<p><span>Die erste Überlegung die sicherlich nun viele haben (und die ich leider auch schon in Produktivsystemen angetroffen habe) ist, dass man Informationen in der Message des Exception-Objekts ablegt. Das ist zwar durchaus möglich und das habe ich auch schon gesehen, aber das ist eine eher unsaubere und unschöne Methode.</span></p>
<p><span>Wenn ich die Message einer Exception auslese, will ich, dass diese in einem Menschenlesbaren Format in einer definierten Sprache (und explizit nicht in einer Übersetzung) vorliegt. Ich will, dass sie für mich als Entwickler Aussagekräftig ist und nicht so weit verallgemeinert wurde, dass ein Endbenutzer auch noch etwas damit anfangen kann.</span></p>
<p><span>Wie bekomme ich nun also Informationen in die Exception verpackt, mit der das Programm arbeiten kann um so stets qualifizierte Fehlermeldungen erzeugen zu können? Ein kleiner Blick in das PHP-Handbuch hätte es verraten: Exceptions bieten die Möglichkeit neben einer Message auch einen Fehlercode zu hinterlegen. Dieser kann Eindeutig gemacht werden und so in catch-Blöcken detaillierte Fehlerausgaben ermöglichen.</span></p>
<h2><span><strong>Fazit</strong></span></h2>
<p><span>Während unserer kleinen Übrlegung hat sich folgendes herauskristallisiert: Es ist ziemlich entscheidend, an welcher Stelle Exceptions geworfen und an welcher sie gefangen werden. Konkret kann man resumieren: Geworfen werden Exceptions aus tieferen Programmschichten, gefangen und ausgewertet in höheren. Auf das MVC-Muster angewandt könnte man sich als Faustregel festhalten, dass Exceptions aus Modellen oder tieferen Hilfsklassen geworfen werden und von Controllern oder entsprechenden Hilsklassen gefangen werden.</span></p>
<p><span>Somit klärt sich neben dem <em>Wie</em> nun auch das <em>Wo</em>.</span></p>
<h2><span>Das Problem Debugging</span></h2>
<p><span>Nun haben wir doch eigentlich einen ziemlich klaren Anwendungsbereich für Exceptions erarbeitet. Trotzdem gibt es ein kleines Problem: Das fangen von Exceptions kann dazu führen, dass auftretende Fehler evtl. nicht mehr korrekt ausgegeben werden. Aus diesem Grund ein kleiner Kniff auf meiner Trickkiste: Exceptions mitloggen.</span></p>
<p><span>In einem Projekt solltet ihr für jede Klasse eigene Exceptions anlegen, die sich allerdings auch wieder von einer eigenen Exception Klasse ableiten. Diese könnte dann ungefähr so aussehen:</span></p>
<pre>
<pre class="brush: php">
class MyException extends Exception {
	public function __construct($message, $code = null) {
		parent::__construct($message, $code);
		MyLogger::log(&#039;Exception thrown with message &quot;&#039;. $message. &#039;&quot;&#039;);
	}
}
</pre>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://phphacker.net/2009/05/11/re-wann-verwende-ich-exceptions/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>
