<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Hacking The Valley » PHP</title>
	
	<link>http://hackingthevalley.com</link>
	<description>Tales from the Trenches</description>
	<lastBuildDate>Sat, 28 Aug 2010 19:15:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/phpthegoodparts/UXrf" /><feedburner:info uri="phpthegoodparts/uxrf" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>PHP Trumps Rails for Online Course Management</title>
		<link>http://feedproxy.google.com/~r/phpthegoodparts/UXrf/~3/Fw0xhkrw6Fw/</link>
		<comments>http://hackingthevalley.com/2010/03/18/php-trumps-rails/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 09:02:34 +0000</pubDate>
		<dc:creator>doug</dc:creator>
				<category><![CDATA[Editorial]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[moodle]]></category>
		<category><![CDATA[online courses]]></category>
		<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://hackingthevalley.com/?p=494</guid>
		<description><![CDATA[I keep coming back to PHP for my projects. I&#8217;m not talking about anything Industrial Strength like the Wikipedia or Facebook. I&#8217;m talking about the web sites I use to teach my courses. For the last 4 years I&#8217;ve had my PHP course content on a custom Rails site that I built when I was [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>I keep coming back to PHP for my projects. I&#8217;m not talking about anything Industrial Strength like the Wikipedia or Facebook. I&#8217;m talking about the web sites I use to teach my courses. For the last 4 years I&#8217;ve had my PHP course content on a custom Rails site that I built when I was crazy about Ruby. It has languished recently, as the chore of reinventing every wheel (CMS, user authentication, etc) has taken its toll.</p>
<p>So this week I installed <a title="moodle" href="http://www.moodle.org" target="_blank">Moodle</a>, a fiendishly complex bit of PHP that contains everything I need to run all of my courses online. In the domain of online course management, it&#8217;s the top dog. And because it&#8217;s written in PHP, I feel right at home.</p>
<div id="attachment_513" class="wp-caption aligncenter" style="width: 591px">
	<a href="http://hackingthevalley.com/wp-content/uploads/2010/03/moodlerox1.jpg" rel="shadowbox[post-494];player=img;"><img class="size-full wp-image-513" title="moodlerox" src="http://hackingthevalley.com/wp-content/uploads/2010/03/moodlerox1.jpg" alt="" width="591" height="444" /></a>
	<p class="wp-caption-text">Oops. My bad. Sorry about that, Rails. </p>
</div>
<p>Don&#8217;t bother to tell me that comparing Rails and PHP is a lousy comparison. PHP and Rails are both DSLs (Domain Specific Languages)  written in general purpose languages: PHP is to C as Rails is to Ruby (not mention that Ruby is written in C, too). If you think about it, PHP and Rails really kissing cousins.</p>
<p>When duty calls and there&#8217;s work to be done, PHP is my preferred vehicle to get from point A to point B. Here&#8217;s how I spend my online/programming time these days.</p>
<ol>
<li>35% Moodle (PHP online course management software): user.</li>
<li>25% WordPress (PHP blogging software): user and programmer.</li>
<li>15% Cincom Visualworks (I&#8217;m learning Smalltalk): programmer.</li>
<li>10% phpBB (PHP forum software): programmer.</li>
<li>10% Ruby (Generating PDFs from HTML): programmer.</li>
<li>5% Lastly, Rails for my course web sites: programmer.</li>
</ol>
<p>I&#8217;ll be the first to tell you that PHP has many, many frustrating design oddities, but once you &#8220;get it&#8221;, you&#8217;ll have more time to kick back, drink some brews, and watch a little b-ball.</p>
<p>Happy hacking&#8230;</p>
<img src="http://feeds.feedburner.com/~r/phpthegoodparts/UXrf/~4/Fw0xhkrw6Fw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://hackingthevalley.com/2010/03/18/php-trumps-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://hackingthevalley.com/2010/03/18/php-trumps-rails/</feedburner:origLink></item>
		<item>
		<title>CCSF Ruby, PHP, and Seaside Term Projects</title>
		<link>http://feedproxy.google.com/~r/phpthegoodparts/UXrf/~3/wrlQr0_7Afg/</link>
		<comments>http://hackingthevalley.com/2010/02/15/ccsf-ruby-php-and-seaside-term-projects/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 20:54:12 +0000</pubDate>
		<dc:creator>doug</dc:creator>
				<category><![CDATA[Editorial]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Seaside]]></category>
		<category><![CDATA[Smalltalk]]></category>
		<category><![CDATA[CCSF]]></category>

		<guid isPermaLink="false">http://hackingthevalley.com/?p=355</guid>
		<description><![CDATA[This semester I&#8217;m going to have my Ruby and PHP classes build a form driven, AJAX-y web application as the final project. This is a bread-and-butter assignment that performs the basic task of storing form data in a database then displaying it. We&#8217;ll deal with the ever present Persistence Problem by using a SQLite3 database [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>This semester I&#8217;m going to have my Ruby and PHP classes build a form driven, AJAX-y web application as the final project. This is a bread-and-butter assignment that performs the basic task of storing form data in a database then displaying it. We&#8217;ll deal with the ever present Persistence Problem by using a SQLite3 database to store user input, and the AJAX/Javascript layer will be all JQuery.</p>
<p>I&#8217;ve created the PHP proof of concept site at <a href="http://www.istoasisto.com" target="_blank">http://www.istoasisto.com</a>, and it looks like this:</p>
<p><a href="http://istoasisto.com" target="_blank"><img class="alignnone size-full wp-image-357" title="istoasisto" src="http://hackingthevalley.com/wp-content/uploads/2010/02/istoasisto1.jpg" alt="" width="600" height="416" /></a></p>
<p>A classroom project of this size can be completed in four to six weeks, depending on the programming and web skills a student brings to the class. More is always better. </p>
<p>The PHP course will be starting from scratch (no cakePHP, no Drupal, no Joomla), while my Ruby course will be using Rails. I&#8217;ll be doing the project in Seaside. When all is said and done, we will count the lines of PHP, Ruby, and Smalltalk to see who get bragging rights for writing the fewest lines of code.</p>
<p>If you want to work along wtih us, your project should have these features:</p>
<ul>
<li>An HTML form.</li>
<li>JQuery form manipulation.</li>
<li>AJAX via JQuery.</li>
<li>Validated form input.</li>
<li>Form data stored in a SQLite database.</li>
<li>A Recaptcha form.</li>
<li>User data safely displayed (potentially harmful characters sanitized).</li>
</ul>
<p>There are dozens of features we could hang on this skeleton: pagination, search, social features (Twitter, Facebook, Buzz, etc), as well as polls, voting, thumbs-up/down, email, XML export, RSS feeds, Section 508 compliance, and more. I&#8217;ll be satisfied if most of my students can achieve basic functionality before semester burnout sets in.</p>
<p>And about that Seaside course&mdash;there isn&#8217;t one yet. But it is on my TODO list for future courses at CCSF. For the time being, as part of my own Smalltalk education, I&#8217;ll take this opportunity to complete the class project using Seaside. Since Smalltalk and Seaside are new to me, I&#8217;ll be starting on the same page as my PHP and Ruby students. This will be fun. I&#8217;ll be doing this project with Cincom Visualworks Non-Commercial which is free for non-commercial use on Windows, Linux, and Mac OS X.</p>
<p>OK. I&#8217;d better get to work on the Ruby part of this project before the Rails team unleashes another new product release just to confuse me. </p>
<p>Happy hacking&#8230;</p>
<img src="http://feeds.feedburner.com/~r/phpthegoodparts/UXrf/~4/wrlQr0_7Afg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://hackingthevalley.com/2010/02/15/ccsf-ruby-php-and-seaside-term-projects/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://hackingthevalley.com/2010/02/15/ccsf-ruby-php-and-seaside-term-projects/</feedburner:origLink></item>
		<item>
		<title>PHP vs Ruby vs Python vs C vs C++ vs Java vs Lisp: Reserved Words</title>
		<link>http://feedproxy.google.com/~r/phpthegoodparts/UXrf/~3/dwpwOqsXLUU/</link>
		<comments>http://hackingthevalley.com/2010/02/04/php-vs-ruby-vs-python-vs-c-vs-c-vs-java-vs-lisp-reserved-words/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 22:30:02 +0000</pubDate>
		<dc:creator>doug</dc:creator>
				<category><![CDATA[Editorial]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Smalltalk]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[keywords]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[reserved]]></category>
		<category><![CDATA[reserved words]]></category>

		<guid isPermaLink="false">http://hackingthevalley.com/?p=272</guid>
		<description><![CDATA[A reserved word in a programming language is a word that is off limits to the programmer. For example, in PHP print is a reserved word. This means that you, as the programmer, cannot create a function named print because PHP owns that word. Most languages have reserved words, some a few, and some very, [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>A <em>reserved word</em> in a programming language is a word that is off limits to the programmer. For example, in PHP <em>print</em> is a reserved word. This means that you, as the programmer, cannot create a function named <em>print</em> because PHP owns that word. </p>
<p>Most languages have reserved words, some a few, and some very, very many. Usually the fewer reserved words a language has, the more flexible it is. For example, in the list below, you will see that Lisp has no reserved words. We all know that Lisp is very flexible and powerful.</p>
<p>As you look at the table below, do not think unkind thoughts about PHP&#8212;it&#8217;s different from the other languages. It is not designed to be a general purpose programming language, though it can certainly do almost anything you want it to do. It is intended for web programming, which explains the existence of so many of the predefined functions and constants. Those are exactly the kinds of items that other languages must implement individually if they want to be as handy with web development as PHP. This is no small task, kids. Just take a look around try to find a web site implemented in C++.</p>
<h3>Reserved Words</h2>
<table width="100%" border="1" cellpadding="2" cellspacing="2" id="reserved-words">
<tbody>
<tr>
<th>Language</th>
<th>Count</th>
<th>Reserved Words</th>
</tr>
<tr>
<td align="center">Lisp</td>
<td align="center">0</td>
<td>Lisp has no reserved words. Lisp is written in Lisp. Alan Kay, the creator of Smalltalk, said: &#8220;Lisp isn&#8217;t a language, it&#8217;s a building material.&#8221;</td>
</tr>
<tr>
<td align="center">Smalltalk</td>
<td align="center">5</td>
<td><tt>self  super  nil  true   false</tt></td>
</tr>
<tr>
<td align="center" valign="top">C</td>
<td align="center" valign="top">32</td>
<td valign="top"><tt>auto break case chart const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while</tt></td>
</tr>
<tr>
<td align="center" valign="top">C++</td>
<td align="center" valign="top">~62</td>
<td valign="top"><tt>and and_eq asm auto bitand bitor bool break case catch char class compl const const_cast continue   default   delete do double dynamic_cast   else   enum  explicit   export extern false float  for   friend goto if inline int  long mutable    namespace new    not   not_eq operator or or_eq  private    protected public register   reinterpret_cast   return short signed sizeof static static_cast  struct switch template this   throw true try typedef    typeid typename   union  unsigned   using  virtual    void   volatile  wchar_t   while  xor   xor_eq</tt></td>
</tr>
<tr>
<td align="center" valign="top">Ruby</td>
<td align="center" valign="top">38</td>
<td valign="top"><tt>alias   and     BEGIN   begin   break   case    class   def     defined?  do      else    elsif   END     end     ensure  false   for     if in      module  next    nil     not     or      redo    rescue  retry return  self    super   then    true    undef   unless  until   when while   yield</tt></td>
</tr>
<tr>
<td align="center" valign="top">Python</td>
<td align="center" valign="top">31</td>
<td valign="top"><tt>and  del   from  not  while    as elif  global    or   with     assert    else      if  pass      yield break     except    import    print    class     exec      in        raise  continue  finally   is        return  def       for       lambda try</tt></td>
</tr>
<tr>
<td align="center" valign="top">Java</td>
<td align="center" valign="top">47</td>
<td valign="top"><tt>abstract  	do  	if  	package  	synchronized boolean 	double 	implements 	private 	this break 	else 	import 	protected 	throw byte 	extends 	instanceof 	public 	throws case 	false 	int 	return 	transient catch 	final 	interface 	short 	true char 	finally 	long 	static 	try class 	float 	native 	strictfp 	void const 	for 	new 	super 	volatile continue 	goto 	null 	switch 	while default 	assert</tt></td>
</tr>
<tr>
<td align="center" valign="top">PHP</td>
<td align="center" valign="top">418</td>
<td><tt>__CLASS__ __COMPILER_HALT_OFFSET__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ __PHP_INCOMPLETE_CLASS ABDAY_1 ABDAY_2 ABDAY_3 ABDAY_4 ABDAY_5 ABDAY_6 ABDAY_7 ABMON_1 ABMON_10 ABMON_11 ABMON_12 ABMON_2 ABMON_3 ABMON_4 ABMON_5 ABMON_6 ABMON_7 ABMON_8 ABMON_9 ABSTRACT ALT_DIGITS AM_STR AND ARGC ARGV ARRAY AS ASSERT_ACTIVE ASSERT_BAIL ASSERT_CALLBACK  ASSERT_QUIET_EVAL ASSERT_WARNING AUTH_TYPE BREAK CASE CASE_LOWER CASE_UPPER CATCH CFUNCTION CHAR_MAX CLASS CLONE CODESET CONNECTION_ABORTED CONNECTION_NORMAL CONNECTION_TIMEOUT CONST CONTINUE COUNT_NORMAL COUNT_RECURSIVE CREDITS_ALL CREDITS_DOCS CREDITS_FULLPAGE CREDITS_GENERAL CREDITS_GROUP CREDITS_MODULES CREDITS_QA CREDITS_SAPI CRNCYSTR CRYPT_BLOWFISH CRYPT_EXT_DES CRYPT_MD5 CRYPT_SALT_LENGTH CRYPT_STD_DES CURRENCY_SYMBOL D_FMT D_T_FMT DAY_1 DAY_2 DAY_3 DAY_4 DAY_5 DAY_6 DAY_7 DECIMAL_POINT DECLARE DEFAULT DEFAULT_INCLUDE_PATH DIE DIRECTORY_SEPARATOR DO DOCUMENT_ROOT E_ALL E_COMPILE_ERROR E_COMPILE_WARNING E_CORE_ERROR E_CORE_WARNING E_ERROR E_NOTICE E_PARSE E_STRICT E_USER_ERROR E_USER_NOTICE E_USER_WARNING E_WARNING ECHO ELSE ELSEIF EMPTY ENDDECLARE ENDFOR ENDFOREACH ENDIF ENDSWITCH ENDWHILE  ENT_COMPAT ENT_NOQUOTES ENT_QUOTES ERA ERA_D_FMT ERA_D_T_FMT ERA_T_FMT ERA_YEAR EVAL EXCEPTION EXIT EXTENDS EXTR_IF_EXISTS EXTR_OVERWRITE EXTR_PREFIX_ALL EXTR_PREFIX_IF_EXISTS EXTR_PREFIX_INVALID EXTR_PREFIX_SAME EXTR_SKIP FINAL FOR FOREACH FRAC_DIGITS FUNCTION GATEWAY_INTERFACE GLOBAL GROUPING HTML_ENTITIES HTML_SPECIALCHARS HTTP_ACCEPT HTTP_ACCEPT_CHARSET HTTP_ACCEPT_ENCODING HTTP_ACCEPT_LANGUAGE HTTP_CONNECTION HTTP_HOST HTTP_REFERER HTTP_USER_AGENT HTTPS IF IMPLEMENTS INCLUDE INCLUDE_ONCE INFO_ALL INFO_CONFIGURATION INFO_CREDITS INFO_ENVIRONMENT INFO_GENERAL INFO_LICENSE INFO_MODULES INFO_VARIABLES INI_ALL INI_PERDIR INI_SYSTEM INI_USER INT_CURR_SYMBOL INT_FRAC_DIGITS INTERFACE ISSET LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME LIST LOCK_EX LOCK_NB LOCK_SH LOCK_UN LOG_ALERT LOG_AUTH LOG_AUTHPRIV LOG_CONS LOG_CRIT LOG_CRON LOG_DAEMON LOG_DEBUG LOG_EMERG LOG_ERR LOG_INFO LOG_KERN LOG_LOCAL0 LOG_LOCAL1 LOG_LOCAL2 LOG_LOCAL3 LOG_LOCAL4 LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_LPR LOG_MAIL LOG_NDELAY LOG_NEWS LOG_NOTICE LOG_NOWAIT LOG_ODELAY LOG_PERROR LOG_PID LOG_SYSLOG LOG_USER LOG_UUCP LOG_WARNING M_1_PI M_2_PI M_2_SQRTPI M_E M_LN10 M_LN2 M_LOG10E M_LOG2E M_PI M_PI_2 M_PI_4 M_SQRT1_2 M_SQRT2 MON_1 MON_10 MON_11 MON_12 MON_2 MON_3 MON_4 MON_5 MON_6 MON_7 MON_8 MON_9 MON_DECIMAL_POINT MON_GROUPING MON_THOUSANDS_SEP N_CS_PRECEDES N_SEP_BY_SPACE N_SIGN_POSN NEGATIVE_SIGN NEW NOEXPR NOSTR OLD_FUNCTION OR P_CS_PRECEDES P_SEP_BY_SPACE P_SIGN_POSN PATH_SEPARATOR PATH_TRANSLATED PATHINFO_BASENAME PATHINFO_DIR NAME PATHINFO_EXTENSION PEAR_EXTENSION_DIR PEAR_INSTALL_DIR PHP_AUTH_DIGEST PHP_AUTH_PW PHP_AUTH_USER PHP_BINDIR PHP_CONFIG_FILE_PATH PHP_CONFIG_FILE_SCAN_DIR PHP_DATADIR PHP_EOL PHP_EXTENSION_DIR PHP_INT_MAX PHP_INT_SIZE PHP_LIBDIR PHP_LOCALSTATEDIR PHP_OS PHP_OUTPUT_HANDLER_CONT PHP_OUTPUT_HANDLER_END PHP_OUTPUT_HANDLER_START PHP_PREFIX PHP_SAPI PHP_SELF PHP_SHLIB_SUFFIX PHP_SYSCONFDIR PHP_USER_FILTER PHP_USER_FILTER PHP_VERSION PM_STR POSITIVE_SIGN PRINT PRIVATE PROTECTED PUBLIC QUERY_STRING RADIXCHAR REMOTE_ADDR REMOTE_HOST REMOTE_PORT REQUEST_METHOD REQUEST_TIME REQUEST_URI REQUIRE REQUIRE_ONCE RETURN SCRIPT_FILENAME SCRIPT_NAME SEEK_CUR SEEK_END SEEK_SET SERVER_ADDR SERVER_ADMIN SERVER_NAME SERVER_PORT SERVER_PROTOCOL SERVER_SIGNATURE SERVER_SOFTWARE SORT_ASC SORT_DESC SORT_NUMERIC SORT_REGULAR SORT_STRING STATIC STDCLASS STR_PAD_BOTH STR_PAD_LEFT STR_PAD_RIGHT SWITCH T_FMT T_FMT_AMPM THIS THOUSANDS_SEP THOUSEP THROW TRY UNSET USE VAR WHILE XOR YESEXPR YESSTR LASS__ __COMPILER_HALT_OFFSET__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ __PHP_INCOMPLETE_CLASS ABDAY_1 ABDAY_2 ABDAY_3 ABDAY_4 ABDAY_5 ABDAY_6 ABDAY_7 ABMON_1 ABMON_10 ABMON_11 ABMON_12 ABMON_2 ABMON_3 ABMON_4 ABMON_5 ABMON_6 ABMON_7 ABMON_8 ABMON_9 ABSTRACT ALT_DIGITS AM_STR AND ARGC ARGV ARRAY AS ASSERT_ACTIVE ASSERT_BAIL ASSERT_CALLBACK ASSERT_QUIET_EVAL ASSERT_WARNING AUTH_TYPE BREAK CASE CASE_LOWER CASE_UPPER CATCH CFUNCTION CHAR_MAX CLASS CLONE CODESET CONNECTION_ABORTED CONNECTION_NORMAL CONNECTION_TIMEOUT CONST CONTINUE COUNT_NORMAL COUNT_RECURSIVE CREDITS_ALL CREDITS_DOCS CREDITS_FULLPAGE CREDITS_GENERAL CREDITS_GROUP CREDITS_MODULES CREDITS_QA CREDITS_SAPI CRNCYSTR CRYPT_BLOWFISH CRYPT_EXT_DES CRYPT_MD5 CRYPT_SALT_LENGTH CRYPT_STD_DES CURRENCY_SYMBOL D_FMT D_T_FMT DAY_1 DAY_2 DAY_3</tt></td>
</tr>
</tbody>
</table>
<img src="http://feeds.feedburner.com/~r/phpthegoodparts/UXrf/~4/dwpwOqsXLUU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://hackingthevalley.com/2010/02/04/php-vs-ruby-vs-python-vs-c-vs-c-vs-java-vs-lisp-reserved-words/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		<feedburner:origLink>http://hackingthevalley.com/2010/02/04/php-vs-ruby-vs-python-vs-c-vs-c-vs-java-vs-lisp-reserved-words/</feedburner:origLink></item>
		<item>
		<title>Learning Ruby: Cultivate Your Curiosity</title>
		<link>http://feedproxy.google.com/~r/phpthegoodparts/UXrf/~3/MI6zG6VR1DI/</link>
		<comments>http://hackingthevalley.com/2010/01/24/learning-ruby-cultivate-your-curiosity/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 08:58:00 +0000</pubDate>
		<dc:creator>doug</dc:creator>
				<category><![CDATA[Editorial]]></category>
		<category><![CDATA[curiosity]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://hackingthevalley.com/2010/01/24/learning-ruby-cultivate-your-curiosity/</guid>
		<description><![CDATA[?! Wanting to learn is one thing, but to really go deep, you&#8217;ve got to be curious. I write about this in my latest RubyTheGoodParts.com post. Check it out, if you&#8217;re curious. Happy hacking&#8230;]]></description>
			<content:encoded><![CDATA[<p></p><div style="margin: 0pt 24px 24px 0pt; padding: 24px 24px;line-height:1 !important; background-color: rgb(0, 0, 0); color: white; height: 140px; font-size: 120px; float: left;">?!</div>
<p><i>Wanting</i> to learn is one thing, but to really go deep, <i>you&#8217;ve got to be curious</i>. I write about this in my latest <a href="http://www.rubythegoodparts.com/2010/01/24/learning-ruby-let-your-curiosity-be-your-guide/">RubyTheGoodParts.com post</a>. Check it out, if you&#8217;re curious.</p>
<p>Happy hacking&#8230;</p>
<img src="http://feeds.feedburner.com/~r/phpthegoodparts/UXrf/~4/MI6zG6VR1DI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://hackingthevalley.com/2010/01/24/learning-ruby-cultivate-your-curiosity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://hackingthevalley.com/2010/01/24/learning-ruby-cultivate-your-curiosity/</feedburner:origLink></item>
		<item>
		<title>We Have A Doppelganger At O’Reilly Books</title>
		<link>http://feedproxy.google.com/~r/phpthegoodparts/UXrf/~3/LUJPxdqD3nE/</link>
		<comments>http://hackingthevalley.com/2010/01/22/we-have-a-doppelganger-at-oreilly-books/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 07:08:00 +0000</pubDate>
		<dc:creator>doug</dc:creator>
				<category><![CDATA[Editorial]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://hackingthevalley.com/2010/01/22/we-have-a-doppelganger-at-oreilly-books/</guid>
		<description><![CDATA[Amazon is taking pre-orders for a a new O&#8217;Reilly book named PHP: The Good Parts. There&#8217;s no publication date for the book, so it may be months before it sees the light of day. I&#8217;m looking forward to giving it a read—I&#8217;m always glad to find a good PHP book. I&#8217;m hoping that it&#8217;s as [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>Amazon is taking pre-orders for a a new O&#8217;Reilly book   named <a style="border: none;" title="O'Reilly PHP THE GOOD PARTS" href="&lt;a href=&quot;http://www.amazon.com/gp/product/0596804377?ie=UTF8&amp;tag=wisebisoncom-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596804377&quot;&gt;PHP: The Good Parts&lt;/a&gt;&lt;img src=" target="_blank"><em>PHP: The Good Parts</em></a>. There&#8217;s no publication date for the book, so it may be months before it sees the light of day. I&#8217;m looking forward to giving  it a read—I&#8217;m always glad to find a good PHP book. I&#8217;m hoping that it&#8217;s as relevant to PHP as Douglas Crockford&#8217;s awesome <a title="Javascript: The Good Parts" href="http://www.amazon.com/gp/product/0596517742?ie=UTF8&amp;tag=wisebisoncom-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=0596517742" target="_blank"><em>Javascript: The Good Parts</em></a> is to Javascript.</p>
<p>While you&#8217;re waiting for the O&#8217;Reilly book, you can read mine for free. It&#8217;s called <a title="PHP THE GOOD PARTS" href="http://phpthegoodparts.com/the-good-parts-pdf/" target="_self"><em>PHP: The Good Parts</em></a>. Just so you know, I thought of the title first, but I don&#8217;t mind O&#8217;Reilly using it. They&#8217;re good guys over there, and I&#8217;ve bought tons of their books over the years. Besides, my PDF is unique because I don&#8217;t do animal testing. All of the content of my PDF is tested only on students.</p>
<p>Happy hacking&#8230;</p>
<p>[This is a repost of <a title="Doppelganger" href="http://phpthegoodparts.com/2010/01/22/we-have-a-doppelganger-at-oreilly-books/">the Original post</a> on <a title="PHP: The Good Parts" href="http://phpthegoodparts.com">phpthegoodparts.com</a>]</p>
<img src="http://feeds.feedburner.com/~r/phpthegoodparts/UXrf/~4/LUJPxdqD3nE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://hackingthevalley.com/2010/01/22/we-have-a-doppelganger-at-oreilly-books/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://hackingthevalley.com/2010/01/22/we-have-a-doppelganger-at-oreilly-books/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 0.356 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-08-30 18:39:05 -->
