<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<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/"
	>

<channel>
	<title>apache &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/apache/</link>
	<description>Feed of posts on WordPress.com tagged "apache"</description>
	<pubDate>Tue, 24 Nov 2009 05:04:22 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Configure SVN with Apache - Windows Server / XP]]></title>
<link>http://consoleart.wordpress.com/2009/11/24/configure-svn-with-apache-windows-server-xp/</link>
<pubDate>Tue, 24 Nov 2009 04:49:49 +0000</pubDate>
<dc:creator>consoleart</dc:creator>
<guid>http://consoleart.wordpress.com/2009/11/24/configure-svn-with-apache-windows-server-xp/</guid>
<description><![CDATA[I googled a lot about configuring SVN repository with Apache server and thought that I should write ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I googled a lot about configuring SVN repository with Apache server and thought that I should write my experience on how i succeeded in configuring it</p>
<p><strong>A Preface:</strong><br />
I earlier used SVN server with IIS by running a SVN service, it really messed up a lot(or atleast with the info that I had) and most of the time I happen to netwrk-share my SVN repos directory and connect from other machines, then we decided to move our SVN to a apache web server&#8230;so here is the configuration details&#8230;</p>
<p><strong>What you need ?</strong><br />
1) Apache 2.x<br />
2) SVN<br />
3) Tortoise SVN Client</p>
<p>1) Install apache &#8211; you can change the default port number(80) if you have IIS running on that machine.<br />
http://httpd.apache.org/download.cgi<br />
2) Install SVN &#8211; i used this MSI for installation Setup-Subversion-1.6.4.msi<br />
3) Install Tortoise SVN &#8211; On the client machine &#8211; we dont need this on teh server unless you want to have a working directory(for build purpose, more of this in my next article) on your server<br />
tortoisesvn.net/downloads</p>
<p>&#8211; after all this restart your machine once(not needed if you are using a windows server, if you are using XP then restart is advisable)</p>
<p><strong>Create repository -this is the easiest of all the tasks</strong><br />
Create a directory &#8211; C:\SourceCodeRepos<br />
once you have installed SVN you will find the bin folder contains svnadmin, use this to create a repos<br />
<strong>open command Prompt&#62; svnadmin create &#8220;C:\SourceCodeRepos&#8221; </strong><br />
(if you get an error bad command or filename then add the SVN bin path to the environment variables Mycomputer &#8211;&#62; right click &#8211;&#62; props &#8211;&#62; Env Variables &#8211;&#62; Path &#8211;&#62; Edit &#8211;&#62; dont overwrite the existing one&#8211;&#62; copy the bin path of SVN in the end.)</p>
<p><strong>Configure APACHE &#8211; a little less easier than the prev one</strong><br />
<strong>apache step 1) </strong><br />
Create a folder c:\etc &#8212; this directory will hold the config files of your SVN repos and apache auth files.</p>
<p><strong>Create three files inside this directory (c:\etc)</strong><br />
<strong>a) File name: subversion.conf</strong><br />
Content of the file </p>
<p>  DAV svn<br />
  SVNPath C:\SourceCodeRepos</p>
<p>  AuthType Basic<br />
  AuthName &#8220;Subversion Kinetics repository&#8221;<br />
  AuthUserFile c:/etc/svn-auth-file</p>
<p>  Require valid-user</p>
<p>  AuthzSVNAccessFile c:/etc/svn-acl</p>
<p><strong>b) File Name: svn-acl</strong><br />
Content:<br />
# groups foes here<br />
[groups]<br />
developers = username1,username2,username3</p>
<p># developers group has a read/write access to source code repository<br />
[SourceCodeRepos:/]<br />
@developers = rw<br />
* = r</p>
<p><strong>c) File name: svn-auth-file</strong><br />
no content for this file&#8230;<br />
<strong><br />
apache step 2) </strong><br />
copy the modules &#8220;mod_authz_svn.so&#8221; and &#8220;mod_dav_svn.so&#8221; to your apache modules directory<br />
c:\Program Files\Apache Software Foundation\Apache2.2\modules\<br />
<strong><br />
apache step 3) </strong><br />
Add these lines to you httpd.conf (located at c\Program Files\Apache Software Foundation\Apache2.2\conf)<br />
LoadModule  dav_svn_module modules/mod_dav_svn.so<br />
LoadModule  authz_svn_module modules/mod_authz_svn.so<br />
<strong><br />
apache step 4) </strong>add this line to the end of the same file (httpd.conf)<br />
Include c:/etc/subversion.conf<br />
#this step will load the SVN configuration of our repos to apache</p>
<p><strong>restart your apache server&#8230;</strong></p>
<p>we are almost done&#8230;<br />
the final step is to create usernames and store them in the auth file<br />
here is the step to create username using htpasswd</p>
<p>htpasswd -m &#8220;c:\etc\svn-auth-file&#8221; ausername<br />
a help link is here<br />
http://httpd.apache.org/docs/2.0/programs/htpasswd.html<br />
(the htpasswd is available under the apache directory)</p>
<p>Check the URL by typing<br />
http://localhost/SourceCodeRepos &#8211; you must be prompted with a username and password, if it is so then you have succeeded, congratulations !!</p>
<p>now from any client machine you can access the repos using the url<br />
http://servername/SourceCodeRepos&#8230;<br />
use TortoiseSVN to access the repos URL&#8230;</p>
<p>I will be glad to help you in any step, do let me know&#8230;</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Quickie HowTo &ndash; Installing PHP 5.x on FreeBSD]]></title>
<link>http://jasonk2600.wordpress.com/2009/11/24/quickie-howto-installing-php-5-x-on-freebsd/</link>
<pubDate>Tue, 24 Nov 2009 00:38:00 +0000</pubDate>
<dc:creator>jasonk2600</dc:creator>
<guid>http://jasonk2600.wordpress.com/2009/11/24/quickie-howto-installing-php-5-x-on-freebsd/</guid>
<description><![CDATA[Installation Install Apache and PHP from the ports collection. NOTE: When configuring the PHP 5.x po]]></description>
<content:encoded><![CDATA[Installation Install Apache and PHP from the ports collection. NOTE: When configuring the PHP 5.x po]]></content:encoded>
</item>
<item>
<title><![CDATA[Performance Benchmarks a Webserver]]></title>
<link>http://vinaytech.wordpress.com/2009/11/23/performance-benchmarks-a-webserver/</link>
<pubDate>Mon, 23 Nov 2009 10:56:54 +0000</pubDate>
<dc:creator>Vinay</dc:creator>
<guid>http://vinaytech.wordpress.com/2009/11/23/performance-benchmarks-a-webserver/</guid>
<description><![CDATA[ApacheBench is a command line computer program for measuring the performance of HTTP web servers, in]]></description>
<content:encoded><![CDATA[ApacheBench is a command line computer program for measuring the performance of HTTP web servers, in]]></content:encoded>
</item>
<item>
<title><![CDATA[Kommunikasjon på kalenderen i uke 48: APACHE!]]></title>
<link>http://gkforum.org/2009/11/23/kommunikasjon-pa-kalenderen-i-uke-48-apache/</link>
<pubDate>Mon, 23 Nov 2009 10:26:27 +0000</pubDate>
<dc:creator>lunkenbiff</dc:creator>
<guid>http://gkforum.org/2009/11/23/kommunikasjon-pa-kalenderen-i-uke-48-apache/</guid>
<description><![CDATA[&nbsp; APACHE! For min gamle kollega og venn Rune Gerhardsen kommer høydepunktet tidlig denne uken. ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>&#160;</p>
<p><a href="http://geelmuydenkiese.wordpress.com/files/2009/11/strat2.jpg"><img class="alignnone size-full wp-image-1239" title="strat" src="http://geelmuydenkiese.wordpress.com/files/2009/11/strat2.jpg" alt="" width="500" height="370" /></a></p>
<p><strong>APACHE!</strong></p>
<p>For min gamle kollega og venn Rune Gerhardsen kommer høydepunktet tidlig denne uken. Det kommer allerede i kveld. For i kveld er det Shadows-konsert i Oslo Spektrum. Og Rune og kona sto først i billettkøen, og slo kloa i de to første billettene da salget startet. Tar jeg ikke feil blir det nachspiel hjemme på Nordseter etter konserten med Rune selv i rollen som Hank Marvin (sologitarist).</p>
<p>Få grupper har drevet på like lenge som Shadows, og få har like mange hits. Den største er instrumentallåten ”Apache”. Den skal Rune ha i begravelsen sin. Jeg håper det blir lenge til.</p>
<p><em>Hold fast og hold ut! </em></p>
<p>Hans</p>
<p><strong>Ord: Hans Geelmuyden</strong><br />
Hele kalenderen for uke 48 finner du <a href="http://bit.ly/Recmh">her</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[NUEVO BLOG]]></title>
<link>http://mundobyte.wordpress.com/2009/11/22/nuevo-blog/</link>
<pubDate>Sun, 22 Nov 2009 03:50:48 +0000</pubDate>
<dc:creator>windoctor</dc:creator>
<guid>http://mundobyte.wordpress.com/2009/11/22/nuevo-blog/</guid>
<description><![CDATA[ATENCIÓN!!!! NUEVO BLOG EN UN HOSTING JAVA. RECIEN LO VOY A COMENZAR, ASÍ QUE VISITENLO SEGUIDO PARA]]></description>
<content:encoded><![CDATA[ATENCIÓN!!!! NUEVO BLOG EN UN HOSTING JAVA. RECIEN LO VOY A COMENZAR, ASÍ QUE VISITENLO SEGUIDO PARA]]></content:encoded>
</item>
<item>
<title><![CDATA[How to install ssl on services (http, exim, imap, pop3, cpanel/WHM)]]></title>
<link>http://amshameer.wordpress.com/2009/11/21/how-to-install-ssl-on-services-http-exim-imap-pop3-cpanelwhm/</link>
<pubDate>Sat, 21 Nov 2009 10:02:45 +0000</pubDate>
<dc:creator>Shameer A M</dc:creator>
<guid>http://amshameer.wordpress.com/2009/11/21/how-to-install-ssl-on-services-http-exim-imap-pop3-cpanelwhm/</guid>
<description><![CDATA[You can install SSL on default services(http, exim, imap, pop3, cpanel/WHM) from your WHM but you re]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>You can install SSL on default services(http, exim, imap, pop3, cpanel/WHM) from your WHM but you require root login details to</p>
<p>The all cert information save in following path</p>
<p>/var/cpanel/ssl/</p>
<p>You can install the certificate from your WHM &#62;&#62;  Main &#62;&#62; Service Configuration &#62;&#62; Manage Service SSL Certificates</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[CakePHP app กับ userdir]]></title>
<link>http://veer66.wordpress.com/2009/11/21/cake_userdir/</link>
<pubDate>Sat, 21 Nov 2009 09:55:35 +0000</pubDate>
<dc:creator>वीर</dc:creator>
<guid>http://veer66.wordpress.com/2009/11/21/cake_userdir/</guid>
<description><![CDATA[เวลาเอา web app ที่เขียนด้วย cakephp ไปใส่ใน userdir เช่น /home/veer/public_html/myapp (ซึ่งมักจะไปต]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>เวลาเอา web app ที่เขียนด้วย cakephp ไปใส่ใน userdir เช่น /home/veer/public_html/myapp (ซึ่งมักจะไปตรงกับ url http://hostname/~veer/myapp) มักจะมีปัญหากับ mod_rewrite ขึ้นมา แต่ก็แก้ไม่ยาก เพียงแต่แก้ .htaccess ใน myapp  กับ myapp/app/webroot</p>
<p>เดิมทีจะเขียนไว้ประมาณนี้ (ใน myapp กับ myapp/app/webroot ไม่เหมือนกัน แต่ก็แก้เหมือนกัน)</p>
<pre>

   RewriteEngine on
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
</pre>
<p>ก็แก้โดยใส่ RewriteBase เข้าไปเป็นแบบนี้</p>
<pre>

   RewriteEngine on
   RewriteBase    /~veer/myapp
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
</pre>
<p>เสร็จแล้ว</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[A brief introduction to AppStruct]]></title>
<link>http://blog.gahooa.com/2009/11/21/a-brief-introduction-to-appstruct/</link>
<pubDate>Sat, 21 Nov 2009 05:26:45 +0000</pubDate>
<dc:creator>Jason Garber</dc:creator>
<guid>http://blog.gahooa.com/2009/11/21/a-brief-introduction-to-appstruct/</guid>
<description><![CDATA[Have been very busy at work lately.  We made the decision about a month ago to switch (most|all) new]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Have been very busy at work lately.  We made the decision about a month ago to switch (most&#124;all) new projects over to use Python 3 with Apache, mod_wsgi, and AppStruct.  You may know what the first 3 are, but the 4th??</p>
<p style="padding-left:30px;"><em>Special thanks goes to </em><strong><em>Graham Dumpleton</em></strong><em> behind mod_wsgi, and </em><strong><em>James William Pye</em></strong><em> behind Python&#62;&#62;Postgresql.   They are not involved or affiliated with AppCove or AppStruct (aside from great mailing list support) <strong>BUT</strong> if it were not for them, this framework would not exist.</em></p>
<p>AppStruct is a component of Shank, a meta-framework.  A stand-alone component in it&#8217;s own right, it represents the AppCove approach to web-application development.  Most of it is in planning, but the parts that have materialized are really, really cool.</p>
<p>Briefly, I&#8217;ll cover the two emerging areas of interest:</p>
<h1><strong>AppStruct.WSGI</strong></h1>
<p>This is a very pythonic (in my opinion) web application framework targeted toward Python 3.1 (a challenge in itself at this point).  We really wanted to base new development on Python 3.1+, as well as PostgreSQL using the excellent Python3/PostgreSQL library at <a href="http://python.projects.postgresql.org/">http://python.projects.postgresql.org/</a>.  However, none of the popular frameworks that I am aware of support Python 3, and most (if not all) of them have a lot of baggage I do not want to bring to the party.</p>
<p><a href="http://werkzeug.pocoo.org/">Werkzeug</a> was the most promising, but alas, I could not find Python 3 support for it either.  In fact, I intend to utilize a good bit of code from Werkzeug in finishing off AppStruct.WSGI.  (Don&#8217;t you just love good OSS licences?  AppStruct will be released under one of those also).</p>
<p>HTTP is just not that complicated.  It dosen&#8217;t need bundled up into n layers of indecipherable framework upon framework layers.   It doesn&#8217;t need abstracted to death.  I just needs to be streamlined a bit (with regard to request routing, reading headers, etc&#8230;).</p>
<p>Python is an amazing OO language.  It&#8217;s object model (or data model) is one of (if not the) most well conceived of any similar language, ever.  I want to use that to our advantage&#8230;</p>
<p>Inheritance, including multiple inheritance, has very simple rules in Python.  Want to use that as well.</p>
<p>Wish to provide developers with access to the low level guts they need for 2% of the requests, but not make them do extra work for the 98% of requests.</p>
<p>Speed is of the essence.  Servers are not cheap, and if you can increase your throughput by 5x, then that&#8217;s a lot less servers you need to pay for.</p>
<p><strong>So, how does it work?</strong></p>
<p>Well, those details can wait for another post.  But at this point the library is &#60; 1000 lines of code, and does a lot of interesting things.</p>
<ul>
<li>A fully compliant WSGI application object</li>
<li>1 to 1 request routing to Python packages/modules/classes</li>
<li>All request classes derived from AppStruct.WSGI.Request</li>
</ul>
<p>The application maps requests like <strong>/some/path/here</strong> to objects, like <strong>Project.WSGI.some.path.here</strong>.  If there is a trailing slash, then the application assumes that the class is named Index.  The object that is found is verified to be a subclass of AppStruct.WSGI.Request, and then&#8230;</p>
<p>Wait!  What about security?</p>
<p>Yes, yes, very important.  A couple things to point out.  First, the URLs are passed through a regular expression that ensures that they adhere to only the characters that may be used in valid python identifiers (not starting with _), delimited by &#8220;/&#8221;.  Second, the import and attribute lookup verify that any object (eg class) found is a subclass of the right thing.  And so on and so forth&#8230;</p>
<p>But you may say &#8220;wait, what about my/fancy-shmancy/urls/that-i-am-used-to-seeing?  Ever hear of mod_rewrite?  Yep.  Not trying to re-invent the wheel.  Use apache for what it was made for, not just a dumb request handler.</p>
<p><strong>What about these request objects?</strong></p>
<p>They are quite straightforward.  There are several attributes which represent request data, the environment, query string variables, post variables, and more.  There is a .Response attribute which maps to a very lightweight response object.</p>
<p>Speaking of it &#8212; it has only 4 attributes:<strong> [Status, Header, Iterator, Length]</strong>.  As you see, it&#8217;s pretty low-level-wsgi-stuff.  But the developer would rarely interact with it, other than to call a method like .Response.Redirect(&#8216;http://somewhere-else.com&#8217;, 302)</p>
<p>Once the application finds the class responsible for handling the URL, it simply does this (sans exception catching code):</p>
<pre style="padding-left:30px;">RequestObject = Request(...)</pre>
<pre style="padding-left:30px;">with RequestObject:
   RequestObject.Code()
   RequestObject.Data()</pre>
<pre style="padding-left:30px;">return RequestObject.Response</pre>
<p>Wow, that&#8217;s simple.  Let me point out one more detail.  The default implementation of Data() does this:</p>
<pre style="padding-left:30px;">def Data(self):
   self.Response.Iterator = [self.Text()]
   self.Response.Length = len(self.Response.Iterator[0])</pre>
<p>So the only thing really required of this Request class is to override Text() and return some text?  Yep, that simple.</p>
<p>But typically, you would at some point mixin a template class that would do something like this:</p>
<pre style="padding-left:30px;">class GoodLookingLayout:
   def Text(self):
      return ( 
         """&#60;html&#62;&#60;head&#62;...&#60;/head&#62;&#60;body&#62;&#60;menu&#62;""" +
         self.Menu() +
         """&#60;/menu&#62;&#60;div&#62;""" +
         self.Body() +
         """&#60;/div&#62;&#60;/body&#62;&#60;/html&#62;"""
         )</pre>
<p>And then it would be up to the developer to override Menu and Body (each returning the appropriate content for the page).</p>
<p><strong>Ohh</strong>, you may say.  What about templating engine X?  Well, it didn&#8217;t support Python 3, and I probabally didn&#8217;t want it anyway (for 9 reasons)&#8230;  If it&#8217;s really, really good and fits this structure, drop me a line, please.</p>
<p><strong>What about that Code() method?</strong></p>
<p>Yeah, that&#8217;s the place that any &#8220;logic&#8221; of UI interaction should go.  I&#8217;m not advocating mixing logic and content here, but you could do that if you wanted.  You will find in our code, a seperate package for application business logic and data access that the request classes will call upon.  But again, if you are writing a one page wonder, why go to all the trouble?</p>
<p>The only requirement for the Code() method is that it calls <strong>super().Code()</strong> at the top.  Since the idea is that the class <strong>.Foo.Bar.Baz.Index</strong> will inherit from the class <strong>.Foo.Bar.Index</strong>, this gives you a very flexible point of creating .htaccess style initialization/access-control code in one place.  So in /Admin/Index, you could put a bit of code in Code() which ensures the user is logged in.  This code will be run by all sub-pages, therefore ensuring that access control is maintained.  Relative imports are important for this task.</p>
<pre style="padding-left:30px;">from .. import Index as <span style="color:#ff0000;">PARENT</span>
from AppStruct.WSGI.Util import *</pre>
<pre style="padding-left:30px;">class Index(<span style="color:#ff0000;">PARENT</span>):
   def Code(self):
      super().Code()
      self.Name = self.Post.FirstName + " " + self.Post.LastName
      # some other init stuff
   def Body(self):
      return "Hello there " + HS(self.Name) + "!"</pre>
<p><strong>Summary of AppStruct.WSGI&#8230;</strong></p>
<p>To get up and running with a web-app using this library:</p>
<ol>
<li>A couple mod_wsgi lines in httpd.conf</li>
<li>A .wsgi file that has 1 import and 1 line of code</li>
<li>A request class in a package that matches an expected URI (myproject.wsgi.admin.foo ==  /admin/foo)</li>
</ol>
<p><strong>Speed?</strong></p>
<p>With no database calls, it&#8217;s pushing over 2,000 requests per second on a dev server.  With a couple PostgreSQL calls, it is pushing out ~ 800 per second.</p>
<h1>AppStruct.Database.PostgreSQL</h1>
<p>This is not nearly as deep as the WSGI side of AppStruct, but still really cool.  To start off, I&#8217;d like to say that James William Pye has created an amazing Postgresql connection library in Python 3.  I mean just amazing.  In fact, almost so amazing that I didn&#8217;t want to change it (but then again&#8230;)</p>
<p>What we did here was subclass the <strong>Connection</strong>, <strong>PreparedStatement</strong>, and <strong>Row </strong>classes.  (well, actually replaced the Row class).</p>
<p>Once these were subclassed, we simply added a couple useful features.  Keep in mind that all of the great functionality of the underlying library is retained.</p>
<p><strong>Connection.CachePrepare(SQL)<br />
Connection._PS_Cache</strong></p>
<p>Simply a dictionary of {SQL: PreparedStatementObject} that resides on the connection object.  When you directly or indirectly invoke CachePrepare, it says &#8220;if this SQL is in the cache, return the associated object.  Otherwise, prepare it, cache it, and return it&#8221;.  This approach really simplifies the storing of prepared statement objects in a multi-threaded environment, where there is really no good place to store them (and be thread safe, connection-failure safe, etc&#8230;)</p>
<p><strong>Connection.Value(SQL, *args, **kwargs)<br />
Connection.Row(SQL, *args, **kwargs)</strong></p>
<p><strong></strong>These simple functions take (SQL, *args, **kwargs) and return either a single value or a single row.  They will raise an exception is != 1 row is found.  They make use of CachePrepare(), so you get the performance benefits of prepared statements without the hassle.  More on *args, **kwargs later under PrePrepare()</p>
<p><strong>Connection.ValueList(SQL, *args, **kwargs)<br />
Connection.RowList(SQL, *args, **kwargs)</strong></p>
<p><strong></strong>Same as above, except returns an iterator (or list, not sure) of  zero or more values or rows.</p>
<p><strong>Row class</strong></p>
<p>Simply a dictionary that also supports attribute style access of items.  After evaluating the Tuple that behaves like a mapping, I decided for our needs, a simple dict would be a better representation of a row.</p>
<p><strong>Connection.PrePreprepare(SQL, args, kwargs) -&#62; (SQL, args)</strong></p>
<p>Ok, so what&#8217;s the big deal?  Well, the big deal is that we don&#8217;t like positional parameters.  They are confusing to write, read, analyze, and see what the heck is going on when you get about 30 fields in an insert statement.  Feel free to argue, but maybe I&#8217;m not as young as I once was.</p>
<p>We do like keyword parameters.  But postgresql prepared statement api uses numeric positional parameters.  Not changing that&#8230;</p>
<p>The most simple use case is to pass SQL and keyword arguments.</p>
<pre style="padding-left:30px;">"SELECT a,b,c FROM table WHERE id = $id AND name = $name"
dict(id=100, name='joe')</pre>
<p>It returns</p>
<pre style="padding-left:30px;">"SELECT a,b,c FROM table WHERE id = $1 AND name = $2"
(100, "joe")</pre>
<p>Which is suitable for passing directly into the Connection.prepare() method that came with the underlying library.</p>
<p>I don&#8217;t know about you, but we find this to be very, very useful.</p>
<p>If you pass tuples of (field, value) as positional arguments, then they will replace <strong>[Field]</strong>, <strong>[Value]</strong>, and <strong>[Field=Value]</strong> (in the SQL) with lists of fields, lists of values (eg $1, $2), or lists of field=values (eg name=$1, age=$2).  That really takes the verbosity out of INSERT and UPDATE statements with long field lists.</p>
<h1>Conclusion</h1>
<p>This is just in the early stages, and has a good deal of polishing to be done (especially on the WSGI side).  My purpose here was to introduce you to what you can expect to get with AppStruct, some of the rationale behind it, and that it&#8217;s really not that hard to take the bull by the horns and make software do what you want it to (especially if you use python).</p>
<p>Feel free to comment.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Líria - Segunda Parte]]></title>
<link>http://cafasorridente.wordpress.com/2009/11/20/liria-segunda-parte/</link>
<pubDate>Fri, 20 Nov 2009 21:48:51 +0000</pubDate>
<dc:creator>cafasorridente</dc:creator>
<guid>http://cafasorridente.wordpress.com/2009/11/20/liria-segunda-parte/</guid>
<description><![CDATA[Então, agora estou de volta ao quarto. O zumbi já foi embora. &#8211; É a última vez Luciano. Você e]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://cafasorridente.wordpress.com/files/2009/11/indo_missa.jpg"><img class="aligncenter size-full wp-image-1359" title="indo_missa" src="http://cafasorridente.wordpress.com/files/2009/11/indo_missa.jpg" alt="" width="497" height="392" /></a></p>
<p>Então, agora estou de volta ao quarto. O zumbi já foi embora.</p>
<p><span style="color:#ff99cc;"> &#8211; É a última vez Luciano. Você entende? Última vez que a gente transa.</span></p>
<p>Líria me fala isso olhando fixamente para meus olhos. Os seus tem uma linda coloração que oscila entre o verde e o amarelo. Desnecessariamente aponta o dedo para meu rosto. Toda a coisa tem um tom de ameaça. Eu só penso em como seus seios são duros, e como os desejo senti-los junto a mim.</p>
<p><span style="color:#808000;"> &#8211; Ok. Última vez Líria. Sem problema. Dá pra continuar a viver assim. Só acho meio anticlimático você falar isso agora&#8230;</span></p>
<p><span style="color:#ff99cc;"> &#8211; É só pra você saber. Acho importante que você saiba. É a ultima vez.</span></p>
<p>Sinto-me automaticamente impotente. Queria acender um cigarro antes de começarmos. Mas acho difícil que Líria aceite essa pausa. Penso que se é a última vez, devo fazer a melhor apresentação da minha vida. Memorável. Mas não sei lidar bem a pressão.</p>
<p><span style="color:#ff99cc;"> &#8211; Ai, para Lu. Você tá muito afoito. Parece um adolescente. Que que tá pegando?</span></p>
<p><a href="http://cafasorridente.wordpress.com/files/2009/11/dor.jpg"><img class="aligncenter size-full wp-image-1360" title="dor" src="http://cafasorridente.wordpress.com/files/2009/11/dor.jpg" alt="" width="480" height="511" /></a> Líria não sabe, mas minha cabeça está longe dali. Mui longe. Penso que não estou sendo afoito. Estou sendo voluptuoso. Isso costumava agradar as moças.</p>
<p><em>(escrevendo sobre isso, com o distanciamento que o tempo impõe&#8230; Tudo muito estranho).</em></p>
<p>Nelson R. senta na cama. Sendo um escritor morto em 1980 (e meu irmão d´alma) ele é em preto-e-branco. Se bem que toda a atmosfera do quarto está escura.</p>
<p><span style="color:#808080;"> <span style="color:#3366ff;">- Luciano, acho que você devia ir pra casa <em>(acendo um de seus indefectíveis mata-ratos</em>). Na realidade, eu não existo. Disso você sabe, sou só uma representação literária da sua esquizofrenia dormente. Aquele que você queria dialogar, nos muitos momentos em que duvida. Nas muitas horas em que acha que nenhum ser vivo vai te entender. Mas como estamos numa página de ficção, eu posso te aconselhar. Vai embora daqui.</span></span></p>
<p><span style="color:#808000;"> &#8211; Nelson, agora não. Dá-me um trago e vai embora </span><em><span style="color:#808000;">(falo isso durante a cópula. Vez em quando percebo um tom de enfado nos lindos olhos de Líria)</span>.</em></p>
<p><span style="color:#808080;"> <span style="color:#3366ff;">- Luciano. Escuta. É importante que você me escute. Você sabe que eu assisti a morte do meu irmão Roberto. Assassinado. Lembra aquela vez em que você sonhou que eu estava ao seu lado, materialmente físico? Então. Naquele sonho eu te contei isso. A morte de Roberto me marcou eternamente. Ver ele baleado, como um cão sarnento&#8230; Essas coisas ficam pra sempre.</span></span></p>
<p><span style="color:#808000;"> &#8211; Porra Nelson, eu to transando velho! Saí fora. Para de falar em morte, cacete! Tu é mórbido pacas!</span></p>
<p><span style="color:#808080;"> <span style="color:#3366ff;">- Claro que eu sou mórbido. Você já leu tudo que eu escrevi. Sempre acaba em desgraça. Mas escuta, acho melhor você ir pra casa, e&#8230;</span></span></p>
<p><span style="color:#808000;"> -Puta merda! SAI FORA!</span></p>
<p><a href="http://cafasorridente.wordpress.com/files/2009/11/chato-mescalero-apache.jpg"><img class="aligncenter size-full wp-image-1361" title="Chato-Mescalero-Apache" src="http://cafasorridente.wordpress.com/files/2009/11/chato-mescalero-apache.jpg" alt="" width="368" height="539" /></a></p>
<p>Sinto o jorro dormente dentro de meu órgão do sexo, prestes a eclodir. Com um pré medo da vergonha, do medo de decepcionar Líria, o seguro inutilmente.</p>
<p><span style="color:#808000;"> &#8211; Não, pelo amor de Deus, agora não.</span></p>
<p><span style="color:#ff99cc;"> &#8211; Hahahaha.</span></p>
<p>Líria solta aquela sua risada sonora, de encher o ambiente. Dá-me um beijo carinhoso.</p>
<p><span style="color:#ff99cc;"> &#8211; É Luciano. Essa sua última vez foi rápida hein?  Pelo menos foi bom pra você?</span></p>
<p>Paralisado de prazer, simplesmente fico de bruços, e enfio minha cara no travesseiro de Líria. Lembro-me com ternura nostálgica que algumas das meninas da minha vida, sempre elogiavam meu cheiro, que ficava presente em suas roupas de cama. Mesmo depois que eu já era lembrança, há muito tempo.</p>
<p>Peço desculpas a Líria. Ela não entende que seu nome remete a muita coisa. Que ela é ela <em>(e a amei por um momento),</em> e que ela é todas. Vejo-a andar pelo quarto, nua. É muito bela. É bonita pra caralho. Iria vê-la cerca de três dias depois. Quando as coisas estariam muito diferentes. Foi um encontro fortuito, daqueles com a câmera pegando a gente do outro lado da rua, que nem naquele filme do Woody Allen. Indicando que a intimidade <em>(tão rápida!) </em>já havia morrido. Porém, enquanto eu descia as escadas eu tinha certeza que não há veria mais.</p>
<p><a href="http://cafasorridente.wordpress.com/files/2009/11/waynepreacher.jpg"><img class="aligncenter size-full wp-image-1362" title="waynepreacher" src="http://cafasorridente.wordpress.com/files/2009/11/waynepreacher.jpg" alt="" width="288" height="287" /></a></p>
<p>Chego ao carro. Cato os bolsos em busca do meu maço. Lembro que o esqueci em cima do criado-mudo do quarto de Líria. Nunca que eu subiria novamente. Peço um dos mata-ratos de Nelson R.</p>
<p><span style="color:#808000;"> &#8211; Porra Nelson, você foi me aparecer no momento mais foda né? Precisava? Hein? Logo que? Logo que?</span></p>
<p><em>(aspira profundamente o cigarro. Nenhum homem vivo ou morto já sentiu regojizo igual ao fumar um cigarro).</em></p>
<p><em><a href="http://cafasorridente.wordpress.com/files/2009/11/sabara.jpg"><img class="aligncenter size-full wp-image-1364" title="sabara" src="http://cafasorridente.wordpress.com/files/2009/11/sabara.jpg" alt="" width="349" height="275" /></a><br />
</em></p>
<p><span style="color:#808080;"> <span style="color:#3366ff;">- Então Lu. Eu to aqui pra ajudar a conduzir essas suas lembranças. Esse negócio de usar um poeta morto pra acompanhar o protagonista é artifício velho. O Dante já usou com o Virgilio, lá no Inferno dele, há mais de quatrocentos anos.</span></span></p>
<p><span style="color:#808000;"> &#8211; O que você quer dizer?</span></p>
<p><span style="color:#808080;"> <span style="color:#3366ff;">- Que a gente deve acender essa beata que você tem no porta luvas, e irmos pra casa. Num próximo capitulo dessa história, nós vamos ter uma nova conversa no Rio, onde deixamos o Fábio e o Carlos Drummond. Mas por enquanto temos que ir pra casa. É lá que está acontecendo a crise que vai motivar a escrita desse texto, daqui um mês.</span></span></p>
<p>Nelson acende o baseado. Dá um trago, e me passa a bola. Vou dirigindo, atravesso um pequeno trecho de Avenida Amazonas e volto pela Praça da Assembléia. Voltamos mudos, eu e Nelson, já sabendo o que vou encontrar quando chegar em casa.</p>
<p>Paro o Uno no estacionamento. Caminho como para o abate. Nelson já não está do meu lado. Com a cabeça em Líria, não dou atenção para duas mulheres que começam a mexer comigo. Não tenho paciência para falar com elas. Me acham antipático e vão gritando comigo, durante todo o trajeto até minha casa.</p>
<p>O saguão do prédio está escuro. São cerca de duas da manhã. Decido subir de escada. A subirei e descerei várias vezes ainda essa noite.</p>
<p>Chego em casa, minha mãe está no tanque, lavando um pedaço de pano. Reconheço ser uma camisa regata de meu pai.</p>
<p><span style="color:#808000;"> -Pô mãe, lavando roupa essa hora da madrugada? Vai dormir mãe.</span></p>
<p><span style="color:#800080;"> <span style="color:#ffcc00;">- Dormir como filho? Seu pai ta passando mal. Seu pai ta passando mal.</span></span></p>
<p>(continua&#8230;)</p>
<p><a href="http://cafasorridente.wordpress.com/files/2009/11/wayne.jpg"><img class="aligncenter size-full wp-image-1363" title="wayne" src="http://cafasorridente.wordpress.com/files/2009/11/wayne.jpg" alt="" width="264" height="366" /></a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Easy way of monitoring errors while using a reverse proxy ]]></title>
<link>http://jhelvoort.wordpress.com/2009/11/20/easy-way-of-monitoring-errors-while-using-a-reverse-proxy/</link>
<pubDate>Fri, 20 Nov 2009 20:52:30 +0000</pubDate>
<dc:creator>John Paul van Helvoort</dc:creator>
<guid>http://jhelvoort.wordpress.com/2009/11/20/easy-way-of-monitoring-errors-while-using-a-reverse-proxy/</guid>
<description><![CDATA[When passing a website using a reverse proxy , you might encounter an 503 error when the site you tr]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>When passing a website using a reverse proxy , you might encounter an 503 error when the site you try to pass on is for some reason not available.<br />
You can monitor this behavior by implementing your own 503 reporting system.<br />
First you take on a line that will catch these errors.</p>
<blockquote><p>
 Alias /error /srv/www/htdocs/error<br />
 ErrorDocument 503 /error/503.php
</p></blockquote>
<p>After this you can put together your own 503.php script</p>
<pre class="brush: php;">
&#60;?php
ob_start();
header('HTTP/1.1 503');
header('Status: 503');
$error=503
?&#62;
&#60;html&#62;
 &#60;title&#62;Example.com Page Reported &#60;? echo $error ?&#62;&#60;/title&#62;
 &#60;body&#62;
 &#60;br&#62;
 &#60;center&#62;&#60;img src=/error/images/logo.png&#62;&#60;/center&#62;
 &#60;br&#62;
 &#60;center&#62; Technical Problem Encountered&#60;/center&#62;
 &#60;/body&#62;
&#60;/html&#62;
&#60;?
// Retrieve the URL requested
function curPageURL() {
  $isHTTPS = (isset($_SERVER[&#34;HTTPS&#34;]) &#38;&#38; $_SERVER[&#34;HTTPS&#34;] == &#34;on&#34;);
  $port = (isset($_SERVER[&#34;SERVER_PORT&#34;]) &#38;&#38; ((!$isHTTPS &#38;&#38; $_SERVER[&#34;SERVER_PORT&#34;] != &#34;80&#34;) &#124;&#124; ($isHTTPS &#38;&#38; $_SERVER[&#34;SERVER_PORT&#34;] != &#34;443&#34;)));
  $port = ($port) ? ':'.$_SERVER[&#34;SERVER_PORT&#34;] : '';
  $url = ($isHTTPS ? 'https://' : 'http://').$_SERVER[&#34;SERVER_NAME&#34;].$port.$_SERVER[&#34;REQUEST_URI&#34;];
  return $url;
}

// Fill basic variables
  $page=curPageUrl();
  $today = date(&#34;F j, Y, G:i&#34;);
  $ip=$_SERVER['REMOTE_ADDR'];

  $headers  = 'MIME-Version: 1.0' . &#34;\r\n&#34;;
  $headers .= 'Content-type: text/html; charset=iso-8859-1' . &#34;\r\n&#34;;
// E-mailadres to inform
  $to='webmaster@example.com';

  $subject='ERROR '.$error.' Reported on '.$page;

  $message = '
  &#60;html&#62;
  &#60;body&#62;
    &#60;table&#62;
      &#60;tr&#62;
       &#60;td&#62;Requested URL&#60;/td&#62;&#60;td&#62;'.$page.'&#60;/td&#62;
      &#60;/tr&#62;
      &#60;tr&#62;
       &#60;td&#62;Requested By&#60;/td&#62;&#60;td&#62;'.$ip.'&#60;/td&#62;
      &#60;/tr&#62;
      &#60;tr&#62;
       &#60;td&#62;Requested On&#60;/td&#62;&#60;td&#62;'.$today.'&#60;/td&#62;
      &#60;/tr&#62;
    &#60;/table&#62;
    &#60;/table&#62;
  &#60;/body&#62;
  &#60;/html&#62;
  ';
// Mail the error
  mail($to, $subject, $message, $headers);
?&#62;
</pre>
<p>Offcourse you can use this same code to report on different errors reported aswell <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Apache - File di Log]]></title>
<link>http://poyblog.wordpress.com/2009/11/20/apache-file-di-log/</link>
<pubDate>Fri, 20 Nov 2009 15:28:36 +0000</pubDate>
<dc:creator>poyblog</dc:creator>
<guid>http://poyblog.wordpress.com/2009/11/20/apache-file-di-log/</guid>
<description><![CDATA[Per poter gestire un web-server, ed in modo più generale per manipolare qualsiasi servizio è necessa]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Per poter gestire un web-server, ed in modo più generale per manipolare qualsiasi servizio è necessario saper trarre dati rilevanti dai file di Log. Apache fornisce vari strumenti e possibilità di configurazione dei file di log.</p>
<p>Immediatamente una considerazione sulla sicurezza. E&#8217; importante non concedere ad utenti alcuni la possibilità di scrivere all&#8217;interno della cartella che detiene i file di log del web-server, potrebbe arrivare ad ottenere i privilegi dell&#8217;utente che esegue il primo avvio del demone (solitamente <em>root</em>). Altra considerazione all&#8217;interno dei file di log potrebbero essere presenti anche informazioni confidenziali, è bene valutare anche l&#8217;accesso in lettura.<br />
<!--more--></p>
<p><strong>Error Log</strong>, questo tipo di log raccoglie tutti gli errori che vengono generati dal web server. Il nome e la locazione di tale file di log viene indicata dalla direttiva <em>ErrorLog</em>, e di norma il file di riferimento è <em>error_log</em>, all&#8217;interno della cartella dei log di apache. Tale file di log non  è personalizzabile, il formato è standard. Ecco un esempio:</p>
<p><em>[Sun Nov 15 07:31:45 2009] [error] [client 66.249.65.251] File does not exist: /var/www/default/components</em></p>
<p><strong>Access Log,</strong> questo tipo di file raccoglie invece tutte le richieste processate dal web server. La locazione del file di log e il suo formato vengono controllati dalla direttiva <em>CustomLog. </em>L&#8217;utilizzo dei file di log solitamente non è mai fine a se stessa, ma o è utile per ritrovare errori o malfunzionamenti nel servizio oppure con programmi appositi si possono generare delle statistiche per capire:</p>
<ul>
<li>carico 	del web server</li>
<li>tipi 	di client web che si connettono</li>
<li>quante 	connessioni sono attive in un determinato lasso temporale</li>
<li>etc&#8230;</li>
</ul>
<p>La creazione di statistiche in relazione al server web esula da questa trattazione, è comunque utile ricordare come un buon formato di file di log aiuta i programmi automatici di generazione delle statistiche, come per esempio awstats (h<a href="http://awstats.sourceforge.net/">ttp://awstats.sourceforge.net/</a>)</p>
<p>Analizzeremo ora due formati di Log:</p>
<ul>
<li>Common 	Log Format</li>
<li>Combined 	Log Format</li>
</ul>
<p>Il primo si indica nel modo seguente:</p>
<p><em>LogFormat &#8220;%h %l %u %t \&#8221;%r\&#8221; %&#62;s %b&#8221; common<br />
CustomLog logs/access_log common </em></p>
<p>e produce un output simile:</p>
<p><em>127.0.0.1 &#8211; frank [10/Oct/2000:13:55:36 -0700] &#8220;GET /apache_pb.gif HTTP/1.0&#8243; 200 2326 </em></p>
<p>Analizziamo nel dettaglio le voci:</p>
<ul>
<li>127.0.0.1 	(%h) → Indirizzo IP del client che ha effettuato la richiesta</li>
<li>- 	(%1) → il meno indica che l&#8217;informazione richiesta non è 	disponibile. La risorsa non disponibile in questo caso è l&#8217;identità 	del client (RFC 1413) determinata da <em>identd</em></li>
<li>frank 	(%u) → corrisponde allo userid dell&#8217;utente che ha effettuato la 	richiesta dopo una autenticazione http. Nel caso in cui non ci fosse 	stata autenticazione il valore assegnato sarebbe stato <em>-</em></li>
<li>[10/Oct/2000:13:55:36 	-0700] (%t) → la data in cui la richiesta è arrivata</li>
<li>&#8220;GET 	/apache_pb.gif HTTP/1.0&#8243; (\&#8221;%r\&#8221;) → ciò che il client ha fatto, in questo caso 	ha richiesto l&#8217;immagine apache_pb.gif</li>
<li>200 	(%&#62;s) → Il codice di stato del server web in risposta alla 	richiesta del client. Ricordo che i codici si differenziano a grandi 	linee i 4 modi:
<ul>
<li>codici 		che cominciano con 2 → risposta data con successo</li>
<li>codici 		che cominciano con 3 → redirect</li>
<li>codici 		che cominciano con 4 → errore causato dal client</li>
<li>codici 		che cominciano con 5 → errore nel server</li>
</ul>
</li>
<li>2326(%b) 	→ indica la dimensione dell&#8217;oggetto restituito al client</li>
</ul>
<p>Il Combined Log Format, è molto simile al formato appena affrontato, con l&#8217;aggiunta di due opzioni; ecco di seguito come viene espresso:</p>
<p><em>LogFormat &#8220;%h %l %u %t \&#8221;%r\&#8221; %&#62;s %b \&#8221;%{Referer}i\&#8221; \&#8221;%{User-agent}i\&#8221;" combined<br />
CustomLog log/access_log combined </em></p>
<p>e cosa produce:</p>
<p><em>127.0.0.1 &#8211; frank [10/Oct/2000:13:55:36 -0700] &#8220;GET /apache_pb.gif HTTP/1.0&#8243; 200 2326 &#8220;http://www.example.com/start.html&#8221; &#8220;Mozilla/4.08 [en] (Win98; I ;Nav)&#8221; </em></p>
<p>Analizziamo nel dettaglio le voci aggiuntive:</p>
<ul>
<li>&#8220;http://www.example.com/start.html&#8221; 	(\&#8221;%{Referer}i\&#8221;)  → si riferisce alla pagina dalla 	quale è avvenuta la richiesta del client</li>
<li>&#8220;Mozilla/4.08 	[en] (Win98; I ;Nav)&#8221; (\&#8221;%{User-agent}i\&#8221;)  → dettagli del client</li>
</ul>
<p><strong>Rotazione dei Log &#8211; </strong>La dimensione dei file di log di apache cresce molto velocemente. Dato il numero di informazioni salvate il file di accesso cresce in media di 1 MB per 10.000 richieste. E&#8217; bene quindi adottare un metodo di rotazione per eliminare i vecchi file di log con una accortezza, dato che apache continuerà a scrivere sul vecchio file di log finché non sarà riavviato.</p>
<p>La politica corretta da adottare durante la rotazione dei log e quella di effettuare la rotazione rinominando il vecchio file di log in <em>access_log.1</em>, creando il nuovo file <em>access_log</em> e riavviare in modo leggero apache (per esempio il comando <em>apache2ctl graceful</em> o <em>apache2 reload</em>).</p>
<p>In questo caso tutte le operazioni pendenti verranno concluse loggando le attività sul vecchio file di log, mentre le nuove istanze scriveranno sul nuovo file di log.</p>
<p>Va considerato per il metodo di rotazione un demone molto ben costruito come logrotate, che per sistemi debian ha già una configurazione ottimale (gestisce il riavvio dolce di apache durante la rotazione).</p>
<p><strong>Piped log &#8211; </strong>L&#8217;espressione piped Log si utilizza quando apache fornisce i dati di accesso e di errore ad un programma terzo, che in base alla propria configurazione gestisce i dati in input.</p>
<p>L&#8217;utilizzo di questa procedura incrementa in modo notevole la flessibilità dei file di log e scarica il server web dalla gestione dei medesimi file. Come contro però si deve gestire un altro programma che sia in grado di intercettare i dati di apache.</p>
<p>Per quanto riguarda i virtual host invece</p>
<p><strong>Virtual Host – </strong>Ci sono vari modi per gestire il logging dei virtual host. E&#8217; possibile inserire tutte le informazioni di log degli host virtuali all&#8217;interno del file principale, oppure è possibile indicare per ogni virtual host uno specifico file di log. In questo ultimo caso è molto più semplice ricavare statistiche in relazione al singolo sito.</p>
<p>L&#8217;utilizzo di molti Virtual Host con assegnati specifici log può andare incontro ad un problema, ovvero si rischia di raggiungere il limite massimo di file descriptor aperti.</p>
<p>In sistemi Linux per ogni processo vengono allocati un massimo di 64 file descriptor, apache ne occupa una decina per uso interno e uno per ogni file di log. Con una trentina di virual host si potrebbe essere al limite delle risorse. Le soluzioni sono due:</p>
<ul>
<li>limitare 	il numero di file di log (inserenti in un unico file tutte le 	informazioni manipolando la scrittura dei dati in modo da taggate 	quelli che provengono da un tale VirtualHost)</li>
<li>Incrementare 	il numero di file descriptor per processo</li>
</ul>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		A:link { so-language: zxx } --></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Protect your public APEX admin site when using an apache reverse proxy]]></title>
<link>http://jhelvoort.wordpress.com/2009/11/20/protect-your-public-apex-admin-site-when-using-an-apache-reverse-proxy/</link>
<pubDate>Fri, 20 Nov 2009 13:01:13 +0000</pubDate>
<dc:creator>John Paul van Helvoort</dc:creator>
<guid>http://jhelvoort.wordpress.com/2009/11/20/protect-your-public-apex-admin-site-when-using-an-apache-reverse-proxy/</guid>
<description><![CDATA[To catch all traffic which requests an APEX admin page like 4550 , you can include these RewriteRule]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>To catch all traffic which requests an APEX admin page like 4550 , you can include these RewriteRules in your Apache Reverse Proxy configuration.<br />
When not set on the first entry point ( in this case the reverse proxy ), you might run into the problem that all traffic received on your back-end server seem to come from an internal adres( your reverse proxy server)<br />
and can therefor not be filtered using the  build-in security feature in APEX. So be implementing these rules your site can be made more secure again.</p>
<pre class="brush: xml;">

# Set Engine on
RewriteEngine On

# 403 error will be thrown if met
# exclude the password change page for apex users
RewriteCond %{REQUEST_URI}%{QUERY_STRING} !/(apex&#124;builder)/f?p=4155:.*
RewriteCond %{REQUEST_URI}%{QUERY_STRING} /(apex&#124;builder)/f?p=(4[0-9]{3}:.*)
# Making it available still from 127.0.0.1 and 10.0.0.x
RewriteCond %{REMOTE_ADDR}        !^(127\.0\.0\.1&#124;10\.0\.0\.[0-9]{1,3})$

# Else , let request go threw
RewriteRule /(apex&#124;builder)/ - [F]
</pre>
<p>If you want to catch these 403 errors and show a nice error message for it, you can set these lines aswell</p>
<pre class="brush: xml;">

  alias /error /srv/www/htdocs/error

  ErrorDocument 403 /error/forbidden.html
</pre>
<p>Now place a forbidden.html file in /srv/www/htdocs/error/ and you are all set.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Apache de Proctor surfboards]]></title>
<link>http://evolart.wordpress.com/2009/11/20/apache-de-proctor-surfboards/</link>
<pubDate>Fri, 20 Nov 2009 08:03:18 +0000</pubDate>
<dc:creator>evolart</dc:creator>
<guid>http://evolart.wordpress.com/2009/11/20/apache-de-proctor-surfboards/</guid>
<description><![CDATA[&#8220;Mi objetivo es trabajar con los surfistas que son serios al aceptar el consejo que les llevar]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://evolart.wordpress.com/files/2009/11/apache-2.jpg"><img class="aligncenter size-full wp-image-1986" title="Apache 2" src="http://evolart.wordpress.com/files/2009/11/apache-2.jpg" alt="" width="500" height="330" /></a><a href="http://evolart.wordpress.com/files/2009/11/apache-1.jpg"><img class="aligncenter size-full wp-image-1987" title="Apache 1" src="http://evolart.wordpress.com/files/2009/11/apache-1.jpg" alt="" width="500" height="400" /></a><span style='text-align:center; display: block;'><object width='425' height='350'><param name='movie' value='http://www.youtube.com/v/RmdGqL_uZwU&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;hd=0' /><param name='allowfullscreen' value='true' /><param name='wmode' value='transparent' /><embed src='http://www.youtube.com/v/RmdGqL_uZwU&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;hd=0' type='application/x-shockwave-flash' allowfullscreen='true' width='425' height='350' wmode='transparent'></embed></object></span></p>
<p>&#8220;Mi objetivo es trabajar con los surfistas que son serios al aceptar el consejo que les llevará al siguiente nivel. Ofrezco diseño de alta calidad y artesanía, mi atención personal, tecnología innovadora, integridad, un precio justo y rápidos resultados.</p>
<p>Normalmente la mayoría de las empresas se reservan este tipo de servicio para los &#8220;pros&#8221; y &#8220;elite&#8221;. Me gusta hacer las tablas de muchos de los surfistas con más talento del mundo, y sus comentarios me impulsan como diseñador de tablas para que respondan a las más altas exigencias de rendimiento &#8211; Llevo el mismo nivel de calidad y atención a ti, el surfista medio que busca la tabla &#8220;mágica&#8221;.</p>
<p>Recuerde &#8211; los mejores surfistas del mundo son las que obtienen más diversión!<br />
Es tu tabla &#8230; habla con tu shaper.&#8221;</p>
<p>Todd Proctor</p>
<p>Esta es la introducción que aparece en su <a href="http://www.proctorsurf.com" target="_blank">web</a>, Proctor Surfboards es un taller de tablas (a la americana, es decir a lo grande) en Ventura, California y presume de dar un trato directo y personalizado a cada surfista.</p>
<p>Lo que me llama la atención es el particular diseño de sus tablas. Sin ir más lejos, el modelo &#8220;<a href="http://www.proctorsurf.com/Surf-Boards/Apache">Apache</a>&#8221; combina formas y conceptos que resultan en un auténtico cohete para olas pequeñas. Tiene muchos otros modelos interesantes. Mis preferidos son los incluídos en &#8220;<a href="http://www.proctorsurf.com/Surf-Boards/Rascal-Series" target="_blank">Rascal Series</a>&#8221; pero para los que prefieran algo más radical tiene verdaderas virguerías como el  modelo <a href="http://www.proctorsurf.com/Surf-Boards/parabolic" target="_blank">Parabolic</a>, o la <a href="http://www.proctorsurf.com/Surf-Boards/Lacerator" target="_blank">Lacerator</a>. Como muestra, el quiver de <a href="http://www.skuff.tv/clip/bs9sGVWL4Rd/" target="_blank">Jarrah Tutton</a> para el 2010&#8230;</p>
<p><a href="http://evolart.wordpress.com/files/2009/11/imagen-23.png"><img class="aligncenter size-full wp-image-1992" title="Imagen 2" src="http://evolart.wordpress.com/files/2009/11/imagen-23.png" alt="" width="500" height="343" /></a></p>
<p>También ofrece la posibilidad de crear, junto con el shaper, un <a href="http://www.proctorsurf.com/Surf-Boards/concept" target="_blank">nuevo concepto</a> de tabla combinando tus gustos y necesidades en formas y medidas, con el saber hacer del shaper (para que luego flote).</p>
<p>En definitiva, un gran taller que innova, crea y además ofrece un trato directo, como antes de que llegara la era del epoxy.</p>
<p><a href="http://evolart.wordpress.com/files/2009/11/blonproctor.jpg"><img class="aligncenter size-full wp-image-2008" title="blonProctor" src="http://evolart.wordpress.com/files/2009/11/blonproctor.jpg" alt="" width="500" height="712" /></a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Log4j logging]]></title>
<link>http://vkulkarni.wordpress.com/2009/11/20/log4j-logging/</link>
<pubDate>Fri, 20 Nov 2009 06:15:16 +0000</pubDate>
<dc:creator>vkulkarni</dc:creator>
<guid>http://vkulkarni.wordpress.com/2009/11/20/log4j-logging/</guid>
<description><![CDATA[How do I log only INFO statments on console and all DEBUG statements in log file? This was a questio]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>How do I log only INFO statments on console and all DEBUG statements in log file? This was a question infront of me.<br />
If you know log4j a bit you might expect it to be very simple to do (even I thought the same). You could do this very easily by using two different loggers<br />
for INFO and DEBUG statements which is kind of  annoying. I wanted to have any class-level logger to log its INFO and DEBUG seperately. Below is what I want to achieve.<br />
<font face="Courier New" size="2"></p>
<pre>
public class LoggerTest {
	public static void main(String args[]){
		Logger log = Logger.getLogger(LoggerTest.class);
		log.info("I should go to console");
		log.debug("I should go to a log file");
	}
}
</pre>
<p></font><br />
Finally, I came to a solution which worked very well for me.<br />
log4j.properties has some limitations like, you cannot specify filters in it. Hence I used log4j.xml.<br />
<font face="Courier New" size="2"></p>
<pre>
  &#60;?xml version="1.0" encoding="UTF-8"?&#62;
&#60;!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" &#62;
&#60;log4j:configuration&#62;
	&#60;appender name="debugfile"
		class="org.apache.log4j.RollingFileAppender"&#62;
		&#60;param name="maxFileSize" value="500KB" /&#62;
		&#60;param name="maxBackupIndex" value="5" /&#62;
		&#60;param name="File" value="debug.log" /&#62;
		&#60;layout class="org.apache.log4j.PatternLayout"&#62;
			&#60;param name="ConversionPattern"
				value="%d{HH:mm:ss} %5p %5M.%C - %m%n" /&#62;
		&#60;/layout&#62;
		&#60;filter class="org.apache.log4j.varia.LevelRangeFilter"&#62;
			&#60;param name="LevelMin" value="debug" /&#62;
			&#60;param name="LevelMax" value="debug" /&#62;
		&#60;/filter&#62;
	&#60;/appender&#62;

	&#60;appender name="stdout" class="org.apache.log4j.ConsoleAppender"&#62;
		&#60;layout class="org.apache.log4j.PatternLayout"&#62;
			&#60;param name="ConversionPattern"
				value="%d{HH:mm:ss} %5p %5M.%C - %m%n" /&#62;
		&#60;/layout&#62;
	&#60;!-- Apply filter to output only INFO logs in the console --&#62;
		&#60;filter class="org.apache.log4j.varia.LevelRangeFilter"&#62;
			&#60;param name="LevelMin" value="info" /&#62;
			&#60;param name="LevelMax" value="info" /&#62;
		&#60;/filter&#62;
	&#60;/appender&#62;
&#60;!--Configured "com.abc" to log only DEBUG statements to the log file
	It will ignore all other statements since we have set the level to DEBUG (least priority)
	--&#62;
	&#60;logger name="com.abc" &#62;
		&#60;level value="debug" /&#62;
		&#60;appender-ref ref="debugfile" /&#62;
	&#60;/logger&#62;
&#60;!--Configured Root to log only INFO statements into STDOUT since we want
	 only INFO statements to be displayed in the console.
	--&#62;
	&#60;root&#62;
		&#60;level value="info" /&#62;
		&#60;appender-ref ref="stdout" /&#62;
	&#60;/root&#62;
&#60;/log4j:configuration&#62;
</pre>
<p></font><br />
Configure a logger of your root of the package hierarchy to log in a debug file. For example, if your package hierarchy starts with say com.abc then configure a logger named &#8220;com.abc&#8221; to log in a debug file.<br />
This will make every class-level logger inside com.abc pkg to log its debug statements in a debug file. Okay at this point we are done with the first requirement. </p>
<p>Now, lets look how to log info statements to console. For this, we dont have to create another logger. We can utilize RootLogger which is the parent of all loggers in log4j.<br />
Since we have configured &#8220;com.abc&#8221; to log only debug statements it will ignore the info statements. Those statements are the bubbled up the hierarchy and respected by the RootLogger which we have<br />
configured to log INFOs to the console. Mission accomplished <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Opening up to Open Source]]></title>
<link>http://tabulacrypticum.wordpress.com/2009/11/19/opening-up-to-open-source/</link>
<pubDate>Thu, 19 Nov 2009 21:16:41 +0000</pubDate>
<dc:creator>The Crypticum Keeper</dc:creator>
<guid>http://tabulacrypticum.wordpress.com/2009/11/19/opening-up-to-open-source/</guid>
<description><![CDATA[It&#8217;s funny the turns Life takes. I started programming in the eartly 1980s, on Timex Sinclair,]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>It&#8217;s funny the turns Life takes.</p>
<p>I started programming in the eartly 1980s, on <a href="http://en.wikipedia.org/wiki/Timex_Sinclair_1000">Timex Sinclair</a>, <a href="http://en.wikipedia.org/wiki/Commodore_64">Commodore 64</a> and <a href="http://en.wikipedia.org/wiki/TRS-80">TRS-80</a> computers in short order.  In those wild days when high-level languages were really coming into their own, free and open source software seemed more readily available than retail equivalents.  Hobbyist magazines, online bulletin boards and even the fledgling internet (pre WWW) were stuffed with code just waiting for eager learners like to me to take and tweak.  There wasn&#8217;t much in the way of formal free and open source protocol at the time&#8211; that evolved soon enough though.</p>
<p>But as I evolved myself, from hobbyist to ad hoc developer for various employers, I found myself drawn in deeper and deeper to the closed source world.  I discovered I had a liking and knack for Visual Basic and thus fell into the Microsoft development vortex.</p>
<p>It&#8217;s a seductive and powerful sucker, too.  It was all too easy to be &#8220;bought off&#8221; by events with (<em>ironically</em>) free training, free food and even giveaways of free software.  I ultimately joined a Microsoft program that dumped thousands of dollars of tools in my lap for an embarrassingly small outlay.  Resistance was futile.</p>
<p>Yep, I was assimilated.</p>
<p><!--more--></p>
<p>Flash forward to 2005 when Nokia hired me to do data mining/management for factory quality assurance.  At first it was the usual: Microsoft SQL Server, the Office suite, VB.NET and even Oracle.  The only real challenge I faced at the time was ramping up SQL skills to an enterprise level.</p>
<p>Then, as <a href="http://tabulacrypticum.wordpress.com/2009/07/29/why-i-love-nokias-internet-tablets/">I&#8217;ve mentioned in previous articles</a>, the <a href="http://en.wikipedia.org/wiki/Nokia_770">Nokia 770 internet tablet</a> burst into my life.</p>
<p>At first it was an utterly alien object, this Linux-driven refugee from an old Star Trek show.  I only knew it mobilized the Internet like nothing else at the time&#8230; and <a href="http://tabulacrypticum.wordpress.com/2009/09/14/mid-use-case-mobile-auditing-and-inspection/">I wanted to put it to work</a>.</p>
<p>I eventually took on a new role as quality engineer for certain Nokia products and that included the 770 and then the N800, which I helped launch.  Supporting the tablets meant getting acquainted with something I had marvelled at from afar but never touched until then:</p>
<p><strong>Linux.</strong></p>
<p>At first I had to perform all device flashing from a Linux command line.  A helpful colleague introduced me to Ubuntu and after acquiring a laptop for the work I dug in.  Just not too deeply&#8211; I was still using Windows tools for the bulk of my labors so I didn&#8217;t really have time to invest in becoming a Linux guru&#8230; although the desire was certainly there.</p>
<p>And now a few years and turns later, I find myself in another role where the old trusted tools need not apply.  I haven&#8217;t even coded in VB for over a year!  Couple that with my current employer&#8217;s strong desire to save money and wham!  I&#8217;m back in the open source world.</p>
<p>Which is fine because I&#8217;m embarrassed that after a few years embedded in the Maemo culture I&#8217;ve barely picked up anything.  I want to do more application testing and even some development but I still lack the foundation.</p>
<p>So I&#8217;m excited by the opportunity I have in my employment to investigate a process workflow solution (<em><a href="http://tabulacrypticum.wordpress.com/2009/11/22/processmaker-workflows-from-open-source/">more on that in another article</a></em>) that&#8217;s completely open source and takes full advantage of the open source ecosystem (MySQL, Apache, <a href="http://en.wikipedia.org/wiki/Openbravo">OpenBravo</a>, <a href="http://en.wikipedia.org/wiki/KnowledgeTree">Knowledgetree</a>, <a href="http://en.wikipedia.org/wiki/Zimbra">Zimbra</a>).  This is my chance to pull free of the Microsoft vortex, at least a little bit, and gain some proficiency in what I think will ultimately become the status quo.</p>
<p>I&#8217;m ready now to get into Qt&#8230; Python&#8230; and whatever else looks useful.  <a href="http://talk.maemo.org/showthread.php?t=34517&#38;highlight=windows">How-To posts like those at talk.maemo.org showing how to get Windows developers onto Maemo devices</a> are just adding irresistable fuel to the fire.</p>
<p>Hello (open source) World, here I (finally) come!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Ebook PHP bằng Tiếng Việt]]></title>
<link>http://domain1hosting1gltec.wordpress.com/2009/11/19/ebook-php-b%e1%ba%b1ng-ti%e1%ba%bfng-vi%e1%bb%87t/</link>
<pubDate>Thu, 19 Nov 2009 10:11:14 +0000</pubDate>
<dc:creator>domain1hosting1gltec</dc:creator>
<guid>http://domain1hosting1gltec.wordpress.com/2009/11/19/ebook-php-b%e1%ba%b1ng-ti%e1%ba%bfng-vi%e1%bb%87t/</guid>
<description><![CDATA[Đối với các bạn gặp khó khăn khi đọc tài liệu bằng tiếng Anh thì những cuốn sách bằng tiếng Việt là ]]></description>
<content:encoded><![CDATA[Đối với các bạn gặp khó khăn khi đọc tài liệu bằng tiếng Anh thì những cuốn sách bằng tiếng Việt là ]]></content:encoded>
</item>
<item>
<title><![CDATA[Access to Tomcat server has not been authorized]]></title>
<link>http://pandazen.wordpress.com/2009/11/19/access-to-tomcat-server-has-not-been-authorized/</link>
<pubDate>Thu, 19 Nov 2009 09:24:56 +0000</pubDate>
<dc:creator>pandazen</dc:creator>
<guid>http://pandazen.wordpress.com/2009/11/19/access-to-tomcat-server-has-not-been-authorized/</guid>
<description><![CDATA[For the first time, when I try to deploy a project using Netbeans, i got this message, &nbsp; Deploy]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>For the first time, when I try to deploy a project using Netbeans, i got this message,</p>
<p>&#160;</p>
<div id="_mcePaste">Deployment error:</div>
<div id="_mcePaste">Access to Tomcat server has not been authorized. Set the correct username and password with the &#8220;manager&#8221; role in the Tomcat customizer in the Server Manager.</div>
<div id="_mcePaste">See the server log for details.</div>
<div></div>
<div>After I googling, the solution,</div>
<div>- edit the content of C:\Program Files\Apache Software Foundation\Apache Tomcat 6.0.18\conf\tomcat-users.xml file.</div>
<div>-make sure you have role = manager and user that have manager role, like this</div>
<div></div>
<div>&#60;tomcat-users&#62;<br />
&#60;role rolename=&#8221;manager&#8221;/&#62;<br />
&#60;role rolename=&#8221;standard&#8221;/&#62;<br />
&#60;user username=&#8221;admin&#8221; password=&#8221;pwd&#8221; roles=&#8221;standard,manager&#8221;/&#62;<br />
&#60;/tomcat-users&#62;</div>
<div></div>
<div>-save the file and restart Tomcat server</div>
<p>&#160;</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Microsoft は オープンソースへ走ると、O'Reilly が予言！]]></title>
<link>http://agilecat.wordpress.com/2009/11/19/microsoft-%e3%81%af-%e3%82%aa%e3%83%bc%e3%83%97%e3%83%b3%e3%82%bd%e3%83%bc%e3%82%b9%e3%81%b8%e8%b5%b0%e3%82%8b%e3%81%a8%e3%80%81oreilly-%e3%81%8c%e4%ba%88%e8%a8%80%ef%bc%81/</link>
<pubDate>Thu, 19 Nov 2009 01:02:32 +0000</pubDate>
<dc:creator>Agile Cat</dc:creator>
<guid>http://agilecat.wordpress.com/2009/11/19/microsoft-%e3%81%af-%e3%82%aa%e3%83%bc%e3%83%97%e3%83%b3%e3%82%bd%e3%83%bc%e3%82%b9%e3%81%b8%e8%b5%b0%e3%82%8b%e3%81%a8%e3%80%81oreilly-%e3%81%8c%e4%ba%88%e8%a8%80%ef%bc%81/</guid>
<description><![CDATA[Web 2.0 Expo Nov. 17 より 以下は、抜粋訳ですので、詳しくは ↓ こちらへ。。。 http://www.eweek.com/c/a/Web-Services-Web-20-and-]]></description>
<content:encoded><![CDATA[Web 2.0 Expo Nov. 17 より 以下は、抜粋訳ですので、詳しくは ↓ こちらへ。。。 http://www.eweek.com/c/a/Web-Services-Web-20-and-]]></content:encoded>
</item>
<item>
<title><![CDATA[10 Very useful web design and web programming tools]]></title>
<link>http://kahrn.wordpress.com/2009/11/18/10-very-useful-webdesign-and-web-programming-tools/</link>
<pubDate>Wed, 18 Nov 2009 20:28:31 +0000</pubDate>
<dc:creator>kahrn</dc:creator>
<guid>http://kahrn.wordpress.com/2009/11/18/10-very-useful-webdesign-and-web-programming-tools/</guid>
<description><![CDATA[Web development today Web development today isn&#8217;t just HTML editing or basic php scripts. Web ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><strong>Web development today</strong></p>
<p>Web development today isn&#8217;t just HTML editing or basic php scripts. Web development and programming today is usually achieved with a wide set of tools &#8212; any popular website around today uses a wide set of tools. For example,</p>
<ul>
<li>reddit.com &#8212; reddit uses <a href="http://python.org" target="_blank">Python</a> and <a href="http://en.wikipedia.org/wiki/PostgreSQL" target="_blank">PostgreSQL</a>, which spit out html (of xhtml syntax), javascript and <a href="http://www.w3schools.com/css/css_intro.asp" target="_blank">CSS</a>.</li>
<li>slashdot.com &#8212; slashdot.com uses Perl and MySQL, sitting on top of Apache.</li>
<li>microsoft.com &#8212; microsoft.com uses a combination of ASP.NET, running on top of IIS. The output is html (xhtml syntax), css and javascript.</li>
</ul>
<h2>The tools</h2>
<h3>Web Developer / Firefox Extension</h3>
<p>Firefox Web Developer Extension is a useful tool for being able to disable various features on a page, manage cookies, view specific css information using a picker tool for any specific elements and being able to manager userstyles. You can also manage images and various other tools including the ability to view generated source.</p>
<p>You can download it at <a href="https://addons.mozilla.org/en-US/firefox/addon/60" target="_blank">Mozilla Add-ons</a></p>
<h3>ColorZilla / Firefox Extension</h3>
<p><a href="http://kahrn.wordpress.com/files/2009/11/blogwebdevcolorzilla.png"><img src="http://kahrn.wordpress.com/files/2009/11/blogwebdevcolorzilla.png?w=300" alt="" title="Colorzilla Firefox Extension" width="125" height="119" class="alignright size-medium wp-image-246" /></a>ColorZilla is an extension to firefox that adds a color picker tool to the browser UI. It is then possible to return information for a given pixel on a website.</p>
<p>You can download it at the <a href="https://addons.mozilla.org/en-US/firefox/addon/271" target="_blank">Mozilla Add-ons</a> site.</p>
<h3>MeasureIT / Firefox Extension</h3>
<p><a href="http://kahrn.wordpress.com/files/2009/11/blogwebdevmeasureit.png"><img src="http://kahrn.wordpress.com/files/2009/11/blogwebdevmeasureit.png?w=150" alt="" title="MeasureIT Firefox Extension" width="150" height="83" class="alignright size-thumbnail wp-image-250" /></a>The measureIT Firefox extension adds a measuring tool that appears as an overlay on any webpage you need to use it on.</p>
<p>You can download measureIT at the <a href="https://addons.mozilla.org/en-US/firefox/addon/539" target="_blank">Mozilla Add-ons</a> site</p>
<h3>DOM Inspector / Firefox Extension</h3>
<p><a href="http://kahrn.wordpress.com/files/2009/11/blogwebdevdominspector.png"><img src="http://kahrn.wordpress.com/files/2009/11/blogwebdevdominspector.png?w=150" alt="" title="Firefox DOM Inspector" width="150" height="112" class="alignright size-thumbnail wp-image-253" /></a>The Document Object Model Inspector is a tool to inspect the DOM of any webpage. It often comes with the default install of firefox as an option.</p>
<p>You can download DOM Inspector at <a href="https://developer.mozilla.org/en/dom_inspector" target="_blank">https://developer.mozilla.org/en/dom_inspector</a></p>
<h3>Firebug / Firefox Extension</h3>
<p>Firebug is an extension which is useful for editing css, html or javascript elements within a webpage.</p>
<p>You can download Firebug at the <a href="https://addons.mozilla.org/en-US/firefox/addon/1843" target="_blank">Mozilla Add-ons</a> site.</p>
<h3>Google page speed / Firebug Extension</h3>
<p><a href="http://kahrn.wordpress.com/files/2009/11/blogwebdevgooglepagespeed11.png"><img src="http://kahrn.wordpress.com/files/2009/11/blogwebdevgooglepagespeed11.png?w=150" alt="" title="Google web page speed for Firebug" width="150" height="116" class="alignright size-thumbnail wp-image-255" /></a>Google page speed is a Firebug extension that is able to give you a wealth of information on the download speeds and execution time of your website. It can also give you tips on how to reduce overheads and improve code.</p>
<p>You can download the Google page speed Firebug extension at the <a href="http://code.google.com/speed/page-speed/download.html" target="_blank">google page speed</a> site.</p>
<h3>Notepad++</h3>
<p><a href="http://kahrn.wordpress.com/files/2009/11/blogwebdevnotepadplusplus1.png"><img src="http://kahrn.wordpress.com/files/2009/11/blogwebdevnotepadplusplus1.png?w=150" alt="" title="Notepad++" width="150" height="115" class="alignright size-thumbnail wp-image-259" /></a>Notepad++ is a tool I often use when working on smaller projects where I do not need a full IDE.</p>
<blockquote><p><strong>Notepad++</strong> is a free (as in &#8220;free speech&#8221; and also as in &#8220;free beer&#8221;) source code editor and Notepad replacement that supports several languages. Running in the MS Windows environment, its use is governed by <a href="http://www.gnu.org/copyleft/gpl.html" target="_blank">GPL</a> License.<br />
Based on a powerful editing component <a href="http://www.scintilla.org/" target="_blank">Scintilla</a>, Notepad++ is written in C++ and uses pure Win32 API and STL which ensures a higher execution speed and smaller program size.</p></blockquote>
<p>You can download it over at the <a href="http://notepad-plus.sourceforge.net/uk/site.htm">notepad++ sourceforge</a> project site.</p>
<h3>Netbeans with PHP Development plugin</h3>
<p><a href="http://kahrn.wordpress.com/files/2009/11/blogwebdevnetbeans.png"><img src="http://kahrn.wordpress.com/files/2009/11/blogwebdevnetbeans.png?w=150" alt="" title="Netbeans with PHP Plugin" width="150" height="116" class="alignright size-thumbnail wp-image-260" /></a>Netbeans is a Java IDE developed by Sun. It supports various plugins &#8212; one being PHP development extensions. When working on large projects, Netbeans proves useful.</p>
<p>You can download it at the <a href="http://netbeans.org/">Netbeans</a> site.</p>
<h3>Visual SVN</h3>
<p>VisualSVN is a SVN server for Windows. It is quick and easy to use and requires little previous knowledge of server administration or svn experience, but it can also be quite powerful.</p>
<p>You can download it at the <a href="http://www.visualsvn.com/server/download/">VisualSVN Server</a> site. It is free for both personal and commercial use.</p>
<h3>Tortoise SVN</h3>
<p>TortoiseSVN is an SVN client that interfaces with Windows Explorer to interface with SVN.</p>
<p>You can download it at the <a href="http://tortoisesvn.tigris.org/">TortoiseSVN</a> site.</p>
<h3>XAMPP</h3>
<p>XAMPP is a quick and easy way to get an apache server, MySQL daemon and PHP all running on Windows for a development environment. It also supports an FTP server and a few other things.</p>
<p>You can download it at the <a href="http://www.apachefriends.org/en/xampp.html">XAMPP</a> site.</p>
<p><strong>Forums</strong><br />
You can come and discuss web development, get website reviews and also SEO information at the <a href="http://tdlabs.co.uk/forums">Transcendental Labs</a> forum.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Setup mod_python with apache on windows XP]]></title>
<link>http://saketachyon.wordpress.com/2009/11/18/setup-mod_python-with-apache-on-windows-xp/</link>
<pubDate>Wed, 18 Nov 2009 18:41:38 +0000</pubDate>
<dc:creator>tachyonsaket</dc:creator>
<guid>http://saketachyon.wordpress.com/2009/11/18/setup-mod_python-with-apache-on-windows-xp/</guid>
<description><![CDATA[I was struggling to install mod_python with apache on my windows machine since last 2 days, and toda]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I was struggling to install mod_python with apache on my windows machine since last 2 days, and today finally when I succeeded I thought I must share it with all of you.</p>
<p>First of all we need compatible versions of all three of the following.</p>
<ul>
<li>Apache Web Server</li>
<li>Python environment</li>
<li>mod_python</li>
</ul>
<p>In my case I have used</p>
<ul>
<li>Apache 2.2 (<a title="Download this" href="http://httpd.apache.org/download.cgi" target="_blank">http://httpd.apache.org/download.cgi</a>)</li>
<li>ActivePython 2.5 (<a title="Download this" href="http://www.activestate.com/activepython/" target="_blank">http://www.activestate.com/activepython/</a>)</li>
<li>mod_python 3.3.1 (<a title="Download this" href="http://httpd.apache.org/modules/python-download.cgi" target="_blank">http://httpd.apache.org/modules/python-download.cgi</a>)</li>
</ul>
<p>First install Apache and python. Python can also be downloaded from official website of Python (<a title="http://www.python.org/" href="http://www.python.org/" target="_blank">http://www.python.org/</a>). While downloading mod_python take care of your Python and Apache version.After installing mod_python goto &#8220;<em>apache/conf/</em>&#8221; and edit <strong>httpd.conf</strong>.</p>
<p>Add,</p>
<blockquote><p>LoadModule python_module modules/mod_python.so</p></blockquote>
<p>where all the local modules are listed. Then add</p>
<blockquote><p>&#60;Directory /some/directory/&#62;<br />
AddHandler mod_python .py<br />
PythonHandler mod_python.publisher<br />
PythonDebug On<br />
&#60;/Directory&#62;</p></blockquote>
<p>(Substitute /some/directory above for something applicable to   your system, usually your Apache ServerRoot).<br />
This redirects all requests for URLs ending in .py to the mod_python   handler. mod_python receives those requests and looks for an appropriate   PythonHandler to handle them.</p>
<p>Restart your Apache Server ,your mod_python is configured and now you can move to testing. Create a file named <strong>hello.py</strong> in your root directory paste the following code in it</p>
<pre class="brush: python;">
from mod_python import apache
def handler(req):
 req.content_type = 'text/plain'
 req.write(&#34;Hello World!&#34;)
 return apache.OK
</pre>
<p>Point your browser to the URL referring to the hello.py;   you should see &#8220;<tt>Hello World!</tt>&#8220;</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[redirecting using .htaccess]]></title>
<link>http://pradystechblog.wordpress.com/2009/11/18/redirecting-using-htaccess/</link>
<pubDate>Wed, 18 Nov 2009 15:09:20 +0000</pubDate>
<dc:creator>prady</dc:creator>
<guid>http://pradystechblog.wordpress.com/2009/11/18/redirecting-using-htaccess/</guid>
<description><![CDATA[If you were to change your website to a new domain or changed the location of an existing file, and ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>If you were to change your website to a new domain or changed the location of an existing file, and you have your url indexed by search engines. If the pages are redirected you could end up loosing a lot of traffic by users getting the 404 error.</p>
<p>You can sort those by using redirection. This can be achieved by http-equiv, javascript or by using some server side code. But the simplest way is by using .htaccess 301 redirect.</p>
<p>This method is search engine friendly and is the easiest way around.</p>
<p>Just add the following code to your .htaccess file placed in your old site.</p>
<p>Redirect 301 /olddirectory/oldfile.html <a href="http://yoursite.com/newdirectory/newfile.html">http://yoursite.com/newdirectory/newfile.html</a></p>
<p>redirect 301 (the instruction that the page has moved)</p>
<p>/old/old.htm (the original folder path and file name)</p>
<p><a href="http://www.yoursite.com/newdirectory/new">http://www.yoursite.com/newdirectory/newdirectory/newfile.html</a> (new path and file name)</p>
<p>Test  immediately after implementing 301 redirects. If you find anything wrong, remove the redirect immediately.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Autenticación en servidor Apache]]></title>
<link>http://thebitdeveloper.wordpress.com/2009/11/17/autenticacion-en-servidor-apache/</link>
<pubDate>Tue, 17 Nov 2009 22:20:57 +0000</pubDate>
<dc:creator>Samuel</dc:creator>
<guid>http://thebitdeveloper.wordpress.com/2009/11/17/autenticacion-en-servidor-apache/</guid>
<description><![CDATA[Introducción Hoy vamos a aprender a establecer un nivel de seguridad en nuestro servidor Apache, cor]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h2>Introducción</h2>
<p style="text-align:justify;">Hoy vamos a aprender a establecer un nivel de seguridad en nuestro servidor Apache, corriendo bajo Ubuntu, aunque como siempre digo podemos usar cualquier distribución para seguir el tutorial. Constará de una autenticación mediante un usuario y contraseña. Para este tutorial voy a crear un nuevo Host basado en IP. Dicho esto, vamos a ello.</p>
<h2 style="text-align:justify;">Creando el nuevo Host</h2>
<p style="text-align:justify;">Como ya he comentado antes, voy a crear un nuevo Host basado en IP, para ello abrimos el terminal y tecleamos lo siguiente:</p>
<pre>sudo mkdir /var/www/passwordhost</pre>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img11.png"><img class="alignnone size-full wp-image-99" title="img1" src="http://thebitdeveloper.wordpress.com/files/2009/11/img11.png" alt="" width="561" height="106" /></a></p>
<p style="text-align:justify;">Una vez creado el directorio que alojará el nuevo Host, vamos a crear el <em>index.html</em>, por lo que tecleamos en el terminal:</p>
<pre style="text-align:justify;">sudo gedit /var/www/passwordhost/index.html</pre>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img21.png"><img class="alignnone size-full wp-image-100" title="img2" src="http://thebitdeveloper.wordpress.com/files/2009/11/img21.png" alt="" width="545" height="106" /></a></p>
<p style="text-align:justify;">Una vez con <em>gedit</em> abierto, escribimos un código HTML básico, como el siguiente:</p>
<pre style="text-align:justify;"><span style="color:#00ccff;">&#60;html&#62;</span>
     <span style="color:#00ccff;">&#60;head&#62;</span>
          <span style="color:#00ccff;">&#60;title&#62;</span>Ejemplo de host con password<span style="color:#00ccff;">&#60;/title&#62;</span>
     <span style="color:#00ccff;">&#60;/head&#62;</span>
     <span style="color:#00ccff;">&#60;body</span> <span style="color:#666699;">bgcolor=</span><span style="color:#ff00ff;">"#008080"</span><span style="color:#00ccff;">&#62;</span>
          <span style="color:#00ccff;">&#60;h1&#62;</span>Ejemplo de host con seguridad básica<span style="color:#00ccff;">&#60;/h1&#62;</span>
<span style="color:#00ccff;">     &#60;/body&#62;
&#60;/html&#62;</span></pre>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img31.png"><img class="alignnone size-full wp-image-101" title="img3" src="http://thebitdeveloper.wordpress.com/files/2009/11/img31.png" alt="" width="528" height="323" /></a></p>
<p style="text-align:justify;">Genial, ya tenemos creado el Host con su <em>index</em>. Como lo estamos haciendo mediante IP, ahora debemos crear una interfaz virtual. Si mal no recuerdo, nuestra interfaz se llamaba <em>eth2</em>, para comprobarlo tecleamos en el terminal:</p>
<pre style="text-align:justify;">ifconfig
</pre>
<p style="text-align:center;"><img class="alignnone size-full wp-image-98" title="ifcnf2" src="http://thebitdeveloper.wordpress.com/files/2009/11/ifcnf2.png" alt="" width="600" height="336" /></p>
<p style="text-align:justify;">Ahora ya sabemos que estaba en lo cierto, nuestra interfaz se llama <em>eth2 </em>(en amarillo<span style="color:#000000;"> </span>),<em> eth2:1</em> y<em> eth2:2</em> (en azul) son las interfaces virtuales que creamos en el anterior tutorial, dicho esto, vamos a crear la interfaz nueva a partir de <em>eth2</em>, nos vamos al terminal y escribimos:</p>
<pre style="text-align:justify;">sudo ifconfig eth2:3 172.16.100.30 netmask 255.255.0.0</pre>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img41.png"><img class="alignnone size-full wp-image-102" title="img4" src="http://thebitdeveloper.wordpress.com/files/2009/11/img41.png" alt="" width="600" height="101" /></a></p>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/ifcnf3.png"><img class="alignnone size-full wp-image-116" title="ifcnf" src="http://thebitdeveloper.wordpress.com/files/2009/11/ifcnf3.png" alt="" width="600" height="433" /></a></p>
<p style="text-align:justify;">En la imagen he marcado en rojo la nueva intrfaz, <em>eth2:3</em>.</p>
<p style="text-align:justify;">Ahora vamos a crear el archivo propio del Host dentro del directorio de configuración de Apache. Nos vamos a un terminal y escribimos:</p>
<pre style="text-align:justify;">sudo gedit /etc/apache2/sites-available/passwordhost</pre>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img5.png"><img class="size-full wp-image-103 aligncenter" title="img5" src="http://thebitdeveloper.wordpress.com/files/2009/11/img5.png" alt="" width="600" height="101" /></a></p>
<p style="text-align:justify;">Y dentro de este archivo escribimos lo siguiente:</p>
<pre>&#60;VirtualHost 172.16.100.30&#62;
     ServerName www.passwordhost.com
     DocumentRoot /var/www/passwordhost
&#60;/VirtualHost&#62;
</pre>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img6.png"><img class="size-full wp-image-104 aligncenter" title="img6" src="http://thebitdeveloper.wordpress.com/files/2009/11/img6.png" alt="" width="543" height="295" /></a></p>
<p style="text-align:justify;">Una vez creado el Host, con su archivo de configuración y demás, vamos a darlo de alta, para ello tecleamos en el terminal:</p>
<pre>sudo a2ensite passwordhost</pre>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img7.png"><img class="size-full wp-image-105 aligncenter" title="img7" src="http://thebitdeveloper.wordpress.com/files/2009/11/img7.png" alt="" width="433" height="89" /></a></p>
<h2>Estableciendo los niveles de seguridad</h2>
<p style="text-align:justify;">Una vez con el Host creado, vamos a establecer un nivel de seguridad básico para la página web. Antes de nada debemos crear el directorio que alojará la información referente a los usuarios y sus contraseñas. Vamos a crear tres usuarios y dos grupos, cada uno en su respectivo grupo. Los usuarios y grupos serán:</p>
<ul>
<li><em>policia</em>, del grupo <em>buenos</em>.</li>
<li><em>testigo</em>, del grupo <em>buenos</em>.</li>
<li><em>ladron</em>, del grupo <em>malos</em>.</li>
</ul>
<p style="text-align:justify;">A ser posible, para prevenir posibles problemas de compatibilidad, evitaremos poner tildes y carácteres raros (ñ, %, &#38;&#8230;) en el nombre del usuario.</p>
<p style="text-align:justify;">Pasemos ahora a crear dicho directorio, en el terminal tecleamos:</p>
<pre style="text-align:justify;">sudo mkdir /var/www/password</pre>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img8.png"><img class="size-full wp-image-106 aligncenter" title="img8" src="http://thebitdeveloper.wordpress.com/files/2009/11/img8.png" alt="" width="441" height="89" /></a></p>
<p style="text-align:justify;">Estupendo, una vez creado el directorio vamos a crear el primer usuario, volvemos al terminal y tecleamos:</p>
<pre style="text-align:justify;">sudo htpasswd -c /var/www/password/.pass_user policia</pre>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img9.png"><img class="size-full wp-image-107 aligncenter" title="img9" src="http://thebitdeveloper.wordpress.com/files/2009/11/img9.png" alt="" width="600" height="156" /></a></p>
<p style="text-align:justify;">Ya tenemos creado el primer usuario, <em>policia</em>. Ahora crearemos los siguientes usuarios.</p>
<p style="text-align:justify;"><strong>NOTA:</strong> Una vez tenemos creado el primer usuario, para los usuarios que creemos posteriormente no debemos poner el <strong>-c</strong> en la consola, ya que le indicaríamos al comando <strong>htpasswd</strong> que volvemos a crear el primer usuario, y <em>machacará</em> la entrada del usuario <em>policia</em>.</p>
<p style="text-align:justify;">Ahora que sabemos lo anterior, volvemos a la consola y creamos los demás usuarios:</p>
<ul>
<li>Usuario <em>testigo</em>:</li>
</ul>
<pre>sudo htpasswd /var/www/password/.pass_user testigo</pre>
<ul>
<li>Usuario <em>ladron</em>:</li>
</ul>
<pre>sudo htpasswd /var/www/password/.pass_user ladron
</pre>
<p style="text-align:justify;">Ahora ya tenemos creados los tres usuarios a los que daremos (o no) permiso permiso para visualizar el contenido de nuestro sitio web.</p>
<p style="text-align:justify;">Pasemos ahora a crear los dos grupos, <em>buenos</em> y <em>malos</em>. Para crear un grupo nos vamos al terminal y tecleamos lo siguiente:</p>
<pre>sudo htpasswd -c /var/www/password/.pass_group buenos</pre>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img10.png"><img class="size-full wp-image-108 aligncenter" title="img10" src="http://thebitdeveloper.wordpress.com/files/2009/11/img10.png" alt="" width="600" height="171" /></a></p>
<p style="text-align:justify;">Un grupo se crea de la misma forma que se crea un usuario, incluso teniendo en cuenta el parámetro <strong>-c</strong> para el primer grupo. Cuando ya tenemos creado el primer grupo, entonces creamos el segundo:</p>
<pre style="text-align:justify;">sudo htpasswd /var/www/password/.pass_group malos</pre>
<p style="text-align:justify;">Cuando ya hemos creado el segundo grupo, abrimos el archivo de grupos con <em>gedit</em>, por lo que escribimos en una consola esto:</p>
<pre style="text-align:justify;">sudo gedit /var/www/password/.pass_group</pre>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img111.png"><img class="size-full wp-image-109 aligncenter" title="img11" src="http://thebitdeveloper.wordpress.com/files/2009/11/img111.png" alt="" width="529" height="106" /></a></p>
<p style="text-align:justify;">Una vez con el archivo abierto, esto será lo que veamos:</p>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img12.png"><img class="size-full wp-image-110 aligncenter" title="img12" src="http://thebitdeveloper.wordpress.com/files/2009/11/img12.png" alt="" width="543" height="271" /></a></p>
<p style="text-align:justify;">Tenemos que borrar los caracteres incoherentes y dejar el archivo de la siguiente forma:</p>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img131.png"><img class="size-full wp-image-112 aligncenter" title="img13" src="http://thebitdeveloper.wordpress.com/files/2009/11/img131.png" alt="" width="543" height="267" /></a></p>
<p style="text-align:justify;">Guardamos el archivo y listo. Ahora volvemos al terminal, y tecleamos lo siguiente para crear el próximo archivo en el que configuraremos qué grupos y usuarios tienen acceso al Host <em>passwordhost</em>.</p>
<pre style="text-align:justify;">sudo gedit /var/www/passwordhost/.htaccess</pre>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img14.png"><img class="size-full wp-image-113 aligncenter" title="img14" src="http://thebitdeveloper.wordpress.com/files/2009/11/img14.png" alt="" width="545" height="106" /></a></p>
<p style="text-align:justify;">Una vez con <em>gedit</em>, rellenamos el archivo con lo siguiente:</p>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img15.png"><img class="size-full wp-image-114 aligncenter" title="img15" src="http://thebitdeveloper.wordpress.com/files/2009/11/img15.png" alt="" width="543" height="277" /></a></p>
<pre style="text-align:justify;">AuthType         Basic
AuthName         "Acceso a mi host"
AuthUserFile     /var/www/password/.pass_user
AuthGroupFile    /var/www/password/.pass_group
require group    buenos
</pre>
<p style="text-align:justify;">Pulsamos en guardar, y vamos ahora a editar el último archivo. Volvemos al terminal y tecleamos:</p>
<pre style="text-align:justify;">sudo gedit /etc/apache2/sites-available/default</pre>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img16.png"><img class="size-full wp-image-115 aligncenter" title="img16" src="http://thebitdeveloper.wordpress.com/files/2009/11/img16.png" alt="" width="585" height="106" /></a></p>
<p style="text-align:justify;">Nos vamos hacia el final del archivo, después de que cierre la última etiqueta <em>&#60;Directory&#62;</em>, escribimos lo mismo que en la imagen:</p>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img17.png"><img class="size-full wp-image-117 aligncenter" title="img17" src="http://thebitdeveloper.wordpress.com/files/2009/11/img17.png" alt="" width="543" height="367" /></a></p>
<pre style="text-align:justify;">&#60;Directory /var/www/passwoardhost&#62;
     AllowOverride    AuthConfig
     Order    allow,deny
     Allow    from all
&#60;/Directory&#62;</pre>
<p style="text-align:justify;">Una vez añadido eso al archivo <em>default</em>, ya sólo queda reiniciar apache, volvemos al terminal y tecleamos:</p>
<pre style="text-align:justify;">sudo apache2ctl restart</pre>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img18.png"><img class="size-full wp-image-118 aligncenter" title="img18" src="http://thebitdeveloper.wordpress.com/files/2009/11/img18.png" alt="" width="401" height="106" /></a></p>
<h2 style="text-align:justify;">Verificando el funcionamiento</h2>
<p style="text-align:justify;">Ahora ya tenemos nuestro Host protegido, y hemos establecido los permisos para los usuarios que hemos querido, ahora sólo queda comprobar que todo funciona como debe.</p>
<p style="text-align:justify;">Abrimos Firefox (o nuestro navegador habitual), y visitamos la siguiente dirección:</p>
<ul>
<li>172.16.100.30</li>
</ul>
<p>Si  todo marcha bien, esto será lo que veamos:</p>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img19.png"><img class="size-full wp-image-119 aligncenter" title="img19" src="http://thebitdeveloper.wordpress.com/files/2009/11/img19.png" alt="" width="600" height="155" /></a></p>
<p style="text-align:justify;">Ahora introducimos cualquier usuario de los que tengan permiso, por ejemplo, <em>policia</em>.</p>
<ul>
<li>En <em>Nombre de Usuario:</em> <strong>policia</strong></li>
<li>En <em>Contraseña:</em> <strong>soypoli</strong></li>
</ul>
<p style="text-align:justify;">Esos son los datos que yo use para crear el usuario, como es obvio, vosotros debéis introducir los que usasteis.</p>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img20.png"><img class="size-full wp-image-120 aligncenter" title="img20" src="http://thebitdeveloper.wordpress.com/files/2009/11/img20.png" alt="" width="600" height="155" /></a></p>
<p style="text-align:justify;">El usuario <em>policia</em>, al estar definido en el grupo <em>buenos</em> (único grupo autorizado para entrar al Host) pues ha podido entrar sin problemas.</p>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img211.png"><img class="size-full wp-image-122 aligncenter" title="img21" src="http://thebitdeveloper.wordpress.com/files/2009/11/img211.png" alt="" width="600" height="208" /></a></p>
<p style="text-align:justify;">Lo mismo debe de ocurrir con el usuario <em>testigo</em>, sin embargo, al usuario <em>ladron</em> no le permitirá entrar ya que no se encuentra en el grupo <em>buenos</em>, y por lo tanto no está autorizado.</p>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img22.png"><img class="size-full wp-image-123 aligncenter" title="img22" src="http://thebitdeveloper.wordpress.com/files/2009/11/img22.png" alt="" width="600" height="155" /></a></p>
<p style="text-align:justify;">Si el nombre de usuario que introducimos es erróneo o no está autorizado, al pulsar en <em>Aceptar</em>, nos volverá a salir la misma ventana de logeo, sin embargo, al pulsar en <em>Cancelar</em>, obtendremos el siguiente mensaje de error:</p>
<p style="text-align:center;"><a href="http://thebitdeveloper.wordpress.com/files/2009/11/img23.png"><img class="size-full wp-image-124 aligncenter" title="img23" src="http://thebitdeveloper.wordpress.com/files/2009/11/img23.png" alt="" width="600" height="351" /></a></p>
<p style="text-align:justify;">Eso significa que nuestro Host está correctamente protegido.</p>
<h2 style="text-align:justify;">Bibliografía</h2>
<ul>
<li>Apuntes de clase.</li>
</ul>
<p style="text-align:justify;">
<p style="text-align:justify;">
<p style="text-align:justify;">
<p style="text-align:justify;">
<p style="text-align:justify;">
</div>]]></content:encoded>
</item>

</channel>
</rss>
