<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
xmlns:series="http://unfoldingneurons.com/"
><channel><title>Larry Ullman &#187; Web Development</title> <atom:link href="http://www.larryullman.com/category/web-development/feed/" rel="self" type="application/rss+xml" /><link>http://www.larryullman.com</link> <description>Translating Geek Into English</description> <lastBuildDate>Wed, 08 Feb 2012 21:58:37 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <item><title>Locale-aware Date and Time Formatting in PHP 5.3</title><link>http://www.larryullman.com/2012/02/07/locale-aware-date-and-time-formatting-in-php-5-3/</link> <comments>http://www.larryullman.com/2012/02/07/locale-aware-date-and-time-formatting-in-php-5-3/#comments</comments> <pubDate>Tue, 07 Feb 2012 15:25:43 +0000</pubDate> <dc:creator>Larry</dc:creator> <category><![CDATA[PHP]]></category> <category><![CDATA[Web Development]]></category> <category><![CDATA[date]]></category> <category><![CDATA[locale]]></category> <category><![CDATA[php5.3]]></category> <category><![CDATA[php6]]></category> <category><![CDATA[phpmysql3]]></category><guid
isPermaLink="false">http://www.larryullman.com/?p=3004</guid> <description><![CDATA[In the third edition of my &#8220;PHP and MySQL for Dynamic Web Sites: Visual QuickPro Guide&#8221; book, titled &#8220;&#8221;, I went out on a limb and used a beta version of PHP 6 when writing the book. PHP 6 was about half-way done at the time, and I didn&#8217;t want to complete the book, only [...]]]></description> <content:encoded><![CDATA[<p>In the third edition of my &#8220;PHP and MySQL for Dynamic Web Sites: Visual QuickPro Guide&#8221; book, titled &#8220;<a
href="http://www.larryullman.com/books/php-6-and-mysql-5-for-dynamic-web-sites-visual-quickpro-guide-3rd-edition/">PHP 6 and MySQL 5 for Dynamic Web Sites: Visual QuickPro Guide</a>&#8220;, I went out on a limb and used a beta version of PHP 6 when writing the book. PHP 6 was about half-way done at the time, and I didn&#8217;t want to complete the book, only to have it be outdated immediately thereafter (using PHP 6 wasn&#8217;t, by the way, an attempt to trick the reader into buying the book, as some cynical people have suggested). Well&#8230;<a
href="http://www.larryullman.com/2010/05/25/the-death-of-php-6the-future-of-php-6/">PHP 6 ended up dying due to many complications</a> and I had the proverbial egg on my face (what one reader rightfully called my &#8220;Dewey Defeats Truman&#8221; moment). In truth, only about 5% of the book or so required PHP 6, so it wasn&#8217;t a devastating mistake, but I certainly felt foolish.</p><p>One of the things I wanted to cover in PHP 6 was locale-aware date and time formatting, as part of the goal of PHP 6 was to recognize the more global Web environment. Even though PHP 6 was shelved, the key components have since been integrated into PHP 5.2, 5.3, and the forthcoming 5.4. Locale-aware date and time formatting was demonstrated in the book using the PHP 6 <strong>date_format_locale()</strong> function. That function went belly-up, and PHP 5.3 now has the <a
href="http://us2.php.net/manual/en/class.intldateformatter.php">IntlDateFormatter</a> class instead. The documentation for the class in poor, but here&#8217;s what I figured out&#8230;<img
title="More..." src="http://cloudfront.larryullman.com/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" /></p><p><span
id="more-3004"></span></p><p>First, let&#8217;s look at the original script, Script 14.5, <strong>locales.php</strong>:</p><pre class="brush: php; title: ; notranslate">// Set the default timezone:
date_default_timezone_set('UTC');

// Need a date object:
$d = new DateTime();

// Create a list of locales:
$locales = array('en_US', 'fr_FR', 'es_BO', 'zh_Hans_CN', 'ru_RU', 'el_GR', 'is_IS');

// Print the date in each locale:
foreach ($locales as $locale) {

    // Set the locale:
    locale_set_default($locale);

    // Print the date:
    echo &quot;&lt;p&gt;$locale: &quot; . strtotitle(date_format_locale($d, 'l, j F Y')) . &quot;&lt;/p&gt;\n&quot;;

}</pre><p>To convert this to work with the IntlDateFormatter class in PHP 5.3, the list of locales must first be changed to use hyphens instead of underscores:</p><pre class="brush: php; title: ; notranslate">$locales = array('en-US', 'fr-FR', 'es-BO', 'zh-Hans-CN', 'ru-RU', 'el-GR', 'is-IS');</pre><p>Then, the code for setting the local and formatting the date using that locale (both lines within the loop) have to be changed. As with many things in PHP, you can use the IntlDateFormatter class as an object or procedurally. Let&#8217;s look at the procedural approach first, which is what the book also does.</p><p>The first step is to create an IntDateFormatter object, using <strong><a
href="http://us2.php.net/manual/en/intldateformatter.create.php">datefmt_create()</a></strong>. Its first argument is the locale. Its next two arguments, both of which are required, are constants representing the date format and the time format. Those constants are <a
href="http://us2.php.net/manual/en/class.intldateformatter.php#intl.intldateformatter-constants">listed in the manual</a>. Here&#8217;s the complete function call, which would go first within the loop:</p><pre class="brush: php; title: ; notranslate">$fmt = datefmt_create($locale, IntlDateFormatter::LONG, IntlDateFormatter::SHORT);</pre><p>That variable will be used as the first argument in the <strong><a
href="http://us2.php.net/manual/en/intldateformatter.format.php">datefmt_format()</a></strong> function. The second argument to the function is the date and time, represented as a DateTime object:</p><pre class="brush: php; title: ; notranslate">echo &quot;&lt;p&gt;$locale: &quot; . datefmt_format($fmt, $d) . &quot;&lt;/p&gt;\n&quot;;</pre><p>Here is the resulting output:</p><div
id="attachment_3041" class="wp-caption aligncenter" style="width: 310px"><a
href="http://cloudfront.larryullman.com/wp-content/uploads/2012/02/PHP_locales_Figure_1.png"><img
class="size-medium wp-image-3041" title="PHP_locales_Figure_1" src="http://cloudfront.larryullman.com/wp-content/uploads/2012/02/PHP_locales_Figure_1-300x267.png" alt="" width="300" height="267" /></a><p
class="wp-caption-text">The date and time represented using different locales.</p></div><p>To do the same thing using OOP, you would write:</p><pre class="brush: php; title: ; notranslate">$ftm = new IntlDateFormatter($locale, IntlDateFormatter::LONG, IntlDateFormatter::SHORT);

$ftm-&gt;format($d);</pre><p>And there you have it!</p> ]]></content:encoded> <wfw:commentRss>http://www.larryullman.com/2012/02/07/locale-aware-date-and-time-formatting-in-php-5-3/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Modern JavaScript: Develop and Design Off To the Printer!</title><link>http://www.larryullman.com/2012/02/06/modern-javascript-develop-and-design-off-to-the-printer/</link> <comments>http://www.larryullman.com/2012/02/06/modern-javascript-develop-and-design-off-to-the-printer/#comments</comments> <pubDate>Mon, 06 Feb 2012 15:25:36 +0000</pubDate> <dc:creator>Larry</dc:creator> <category><![CDATA[JavaScript]]></category> <category><![CDATA[Web Development]]></category> <category><![CDATA[book]]></category> <category><![CDATA[jsdd]]></category><guid
isPermaLink="false">http://www.larryullman.com/?p=3023</guid> <description><![CDATA[I am very happy to say that last week my latest book, Modern JavaScript: Develop and Design, went off to the printer. It&#8217;s still slated for a late February release (in the US). Because of the increased page count (624 pages), the price of the book was raised $5.00. However, it seems that Amazon only [...]]]></description> <content:encoded><![CDATA[<p>I am very happy to say that last week my latest book, <em>Modern JavaScript: Develop and Design</em>, went off to the printer. It&#8217;s still slated for a late February release (in the US). Because of the increased page count (624 pages), the price of the book was raised $5.00. However, it seems that Amazon only raised its price like 50 cents. Amazon is currently selling it at $31 (US) and you can buy it using the link below (note: I&#8217;ll get an extra dollar or so if you use the Amazon link).</p><p>For the first time ever, I plan on selling copies of select books myself. The books will, of course, be signed (inscribed however you want). For the <em>Modern JavaScript: Develop and Design</em> book, I believe I will be able to offer it at <del>$35</del> $40 (US), plus shipping. This is slightly more than the Amazon price, but I have more overhead (well, different overhead) and fewer employees than Amazon! Plus, Amazon has that whole &#8220;economies of scale&#8221; thing working for it. I&#8217;ll confirm the price and get the e-commerce system setup in the next couple of weeks. If you have any questions or comments, let me know.</p><p><strong>ADDITION:</strong> Presumably, the book will be available internationally in time, starting with English-language countries such as Canada, the UK, and Australia, followed by translations in other European countries and Asia (that&#8217;s my educated guess, based upon how things have gone in the past). Buying the book directly from me will be the fastest way for international recipients to get a copy, by far. I&#8217;ll need to receive my copies of the book before I can estimate the shipping costs.</p><p><strong>UPDATE: I just heard back from my contact at the publisher and it will cost me more than I had thought to purchase the book for resale. In order to cover my costs, I&#8217;ll need to charge $40 (US) plus shipping. Admittedly, this is almost $10 more than Amazon, but the $40 covers the cost of: the book itself, getting the book shipped to me, and packing materials. I think shipping within the United States via media rate will be around $4.</strong></p><p><iframe
style="width: 120px; height: 240px;" src="http://rcm.amazon.com/e/cm?t=larrullm09-20&amp;o=1&amp;p=8&amp;l=as1&amp;asins=0321812522&amp;nou=1&amp;ref=qf_sp_asin_til&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=FFFFFF&amp;bg1=FFFFFF&amp;f=ifr" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="320" height="240"></iframe></p> ]]></content:encoded> <wfw:commentRss>http://www.larryullman.com/2012/02/06/modern-javascript-develop-and-design-off-to-the-printer/feed/</wfw:commentRss> <slash:comments>8</slash:comments> </item> <item><title>Top 100 E-Commerce Tips</title><link>http://www.larryullman.com/2012/02/03/top-100-e-commerce-tips/</link> <comments>http://www.larryullman.com/2012/02/03/top-100-e-commerce-tips/#comments</comments> <pubDate>Fri, 03 Feb 2012 15:31:35 +0000</pubDate> <dc:creator>Larry</dc:creator> <category><![CDATA[JavaScript]]></category> <category><![CDATA[MySQL]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[Web Development]]></category> <category><![CDATA[e-commerce]]></category> <category><![CDATA[ecom]]></category><guid
isPermaLink="false">http://www.larryullman.com/?p=2982</guid> <description><![CDATA[I just recently came across this somewhat old post titled Top 100 E-commerce Tips from WebmasterWorld. Despite the fact that the article was published over four years ago, and it&#8217;s based upon a slightly older forum thread, there&#8217;s still a lot of material in the article worth reading if you do any e-commerce. Even though [...]]]></description> <content:encoded><![CDATA[<p>I just recently came across this somewhat old post titled <a
href="http://www.soloseo.com/blog/2007/06/18/top-100-e-commerce-tips-webmasterworld/">Top 100 E-commerce Tips from WebmasterWorld</a>. Despite the fact that the article was published over four years ago, and it&#8217;s based upon a slightly older forum thread, there&#8217;s still a lot of material in the article worth reading if you do any e-commerce. Even though there are a full 100 tips here, they&#8217;re short—most are just a single sentence—and quite valid. Admittedly, I disagree with a couple, and feel like a few could be tossed out, but there are many good points made, and many reminders of things that perhaps you&#8217;ve forgotten to emphasize on your most recent e-commerce. project.</p> ]]></content:encoded> <wfw:commentRss>http://www.larryullman.com/2012/02/03/top-100-e-commerce-tips/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Transliteration in PHP 5.4</title><link>http://www.larryullman.com/2012/02/01/transliteration-in-php-5-4/</link> <comments>http://www.larryullman.com/2012/02/01/transliteration-in-php-5-4/#comments</comments> <pubDate>Wed, 01 Feb 2012 15:25:50 +0000</pubDate> <dc:creator>Larry</dc:creator> <category><![CDATA[PHP]]></category> <category><![CDATA[Web Development]]></category> <category><![CDATA[phpmysql3]]></category> <category><![CDATA[transliteration]]></category> <category><![CDATA[transliterator]]></category><guid
isPermaLink="false">http://www.larryullman.com/?p=2998</guid> <description><![CDATA[In the third edition of my &#8220;PHP and MySQL for Dynamic Web Sites: Visual QuickPro Guide&#8221; book, titled &#8220;&#8221;, I went out on a limb and used a beta version of PHP 6 when writing the book. PHP 6 was about half-way done at the time, and I didn&#8217;t want to complete the book, only [...]]]></description> <content:encoded><![CDATA[<p>In the third edition of my &#8220;PHP and MySQL for Dynamic Web Sites: Visual QuickPro Guide&#8221; book, titled &#8220;<a
href="http://www.larryullman.com/books/php-6-and-mysql-5-for-dynamic-web-sites-visual-quickpro-guide-3rd-edition/">PHP 6 and MySQL 5 for Dynamic Web Sites: Visual QuickPro Guide</a>&#8220;, I went out on a limb and used a beta version of PHP 6 when writing the book. PHP 6 was about half-way done at the time, and I didn&#8217;t want to complete the book, only to have it be outdated immediately thereafter (using PHP 6 wasn&#8217;t, by the way, an attempt to trick the reader into buying the book, as some cynical people have suggested). Well&#8230;<a
href="http://www.larryullman.com/2010/05/25/the-death-of-php-6the-future-of-php-6/">PHP 6 ended up dying due to many complications</a> and I had the proverbial egg on my face (what one reader rightfully called my &#8220;Dewey Defeats Truman&#8221; moment). In truth, only about 5% of the book or so required PHP 6, so it wasn&#8217;t a devastating mistake, but I certainly felt foolish.</p><p>I had specifically wanted to discuss PHP 6 because of its intended support for <a
href="http://unicode.org/">Unicode</a>, which is what the code in the book requires for a couple of examples. Even though PHP 6 was shelved, the key components have since been integrated into PHP 5.2, 5.3, and the forthcoming 5.4. <em>Transliteration</em>, the ability to convert text from one alphabet to another, was demonstrated in the book using the PHP 6 <strong>str_transliterate()</strong> function. That function went belly-up, and PHP 5.4 now has the <a
href="http://www.php.net/manual/en/class.transliterator.php">Transliterator</a> class instead. The documentation for the class in non-existent, but here&#8217;s what I figured out&#8230;<span
id="more-2998"></span></p><p>As with many things in PHP, you can use the Transliterator class as an object or procedurally. Let&#8217;s look at the procedural approach first, which is what the book also does. The function that does all the work is <strong>transliterator_transliterate()</strong>. Its first argument is a either a string identifying the transliteration to conduct, or a Transliterator object. Its second argument is the text to be transliterated.</p><p>In the Transliterator class, transliterators are defined using the syntax <em>from</em>-<em>to</em>. So Bengali-Tamil will transliterate from the Bengali alphabet to the Tamil alphabet. Keep in mind this is just the replacing of characters from one alphabet to the corresponding characters in another. This is not translation!</p><p>To get the list of possible transliterators, invoke the <strong>transliterator_list_ids()</strong> method (Figure 1):</p><pre class="brush: php; title: ; notranslate">echo '&lt;pre&gt;' . print_r(transliterator_list_ids(), 1) . '&lt;/pre&gt;';</pre><div
id="attachment_3013" class="wp-caption aligncenter" style="width: 310px"><a
href="http://cloudfront.larryullman.com/wp-content/uploads/2012/02/PHP_trans_Figure_1.png"><img
class="size-medium wp-image-3013" title="PHP's List of Transliterators" src="http://cloudfront.larryullman.com/wp-content/uploads/2012/02/PHP_trans_Figure_1-300x271.png" alt="" width="300" height="271" /></a><p
class="wp-caption-text">Figure 1</p></div><p>Returning to the code in the book, in Script 14.4, <strong>trans.php</strong>, my name using the Latin alphabet was stored in a variable called <strong>$me</strong>. Then, an array of destination alphabets was created:</p><pre class="brush: php; title: ; notranslate">$me = 'Larry Ullman';
$scripts = array('Greek', 'Cyrillic', 'Hebrew', 'Arabic', 'Hangul');</pre><p>Next, a <strong>for</strong> loop iterated through the array. Within the array, originally, the <strong>str_transliterate()</strong> function was called:</p><pre class="brush: php; title: ; notranslate">foreach ($scripts as $script) {
    echo &quot;$me is &quot; . str_transliterate($me, 'Latin', $script) . &quot; in $script.\n&quot;;
}</pre><p>With the updated Transliterator class, the proper syntax is now (Figure 2):</p><pre class="brush: php; title: ; notranslate">echo &quot;$me is &quot; . transliterator_transliterate (&quot;Latin-$script&quot;, $me) . &quot; in $script.\n&quot;;</pre><p>And that&#8217;s all there is to it! (To reiterate, this does require PHP 5.4 or greater.)</p><div
id="attachment_3014" class="wp-caption aligncenter" style="width: 310px"><a
href="http://cloudfront.larryullman.com/wp-content/uploads/2012/02/PHP_trans_Figure_2.png"><img
class="size-medium wp-image-3014" title="Script 14.4, trans.php, Updated" src="http://cloudfront.larryullman.com/wp-content/uploads/2012/02/PHP_trans_Figure_2-300x209.png" alt="" width="300" height="209" /></a><p
class="wp-caption-text">Figure 2</p></div><p>To do the same thing using object-oriented programming, you&#8217;d first create a new Transliterator object:</p><pre class="brush: php; title: ; notranslate">$t = Transliterator::create(&quot;Latin-$script&quot;);</pre><p>Then you call the <strong>transliterate()</strong> method of the object, providing the text to transliterate as the first argument:</p><pre class="brush: php; title: ; notranslate">$t-&gt;transliterate($me);</pre><p>And there you have it!</p><p>The Transliterator class can be told to transliterate forwards, or in reverse, allowing you to go from an alphabet written in one language to an alphabet written in another.</p> ]]></content:encoded> <wfw:commentRss>http://www.larryullman.com/2012/02/01/transliteration-in-php-5-4/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>What is Larry Thinking? #50 =&gt; OOP Design, Part 1</title><link>http://www.larryullman.com/2012/01/30/what-is-larry-thinking-50-oop-design-part-1/</link> <comments>http://www.larryullman.com/2012/01/30/what-is-larry-thinking-50-oop-design-part-1/#comments</comments> <pubDate>Mon, 30 Jan 2012 06:58:39 +0000</pubDate> <dc:creator>Larry</dc:creator> <category><![CDATA[JavaScript]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[Web Development]]></category> <category><![CDATA[jsdd]]></category> <category><![CDATA[newsletter]]></category> <category><![CDATA[oop]]></category> <category><![CDATA[security]]></category><guid
isPermaLink="false">http://www.larryullman.com/?p=2987</guid> <description><![CDATA[In this edition… What Were You Thinking? =&#62; Bimonthly Newsletters On the Web =&#62; Security and Privacy Made Simpler On the Blog =&#62; My January 2012 Non-Resolutions List Q&#38;A =&#62; How do you go about designing the main OOP classes for a project? Larry Ullman&#8217;s Book News =&#62; “Modern Javascript: Develop and Design” Done! What [...]]]></description> <content:encoded><![CDATA[<p>In this edition…</p><ul><li><a
href="http://www.larryullman.com/2012/01/30/what-is-larry-thinking-50-oop-design-part-1/#you">What Were You Thinking? =&gt; Bimonthly Newsletters</a></li><li><a
href="http://www.larryullman.com/2012/01/30/what-is-larry-thinking-50-oop-design-part-1/#web">On the Web =&gt; Security and Privacy Made Simpler</a></li><li><a
href="http://www.larryullman.com/2012/01/30/what-is-larry-thinking-50-oop-design-part-1/#web">On the Blog =&gt; My January 2012 Non-Resolutions List</a></li><li><a
href="http://www.larryullman.com/2012/01/30/what-is-larry-thinking-50-oop-design-part-1/#qa">Q&amp;A =&gt; How do you go about designing the main OOP classes for a project?</a></li><li><a
href="http://www.larryullman.com/2012/01/30/what-is-larry-thinking-50-oop-design-part-1/#news">Larry Ullman&#8217;s Book News =&gt; “Modern Javascript: Develop and Design” Done!</a></li></ul><p><span
id="more-2987"></span></p><h2 id="you">What Were You Thinking? =&gt; Bimonthly Newsletters</h2><p>In <a
href="http://www.larryullman.com/2012/01/07/what-is-larry-thinking-49-a-new-year/#you">the previous newsletter</a>, I asked for input on the idea of changing the newsletter from going out every 3-4 weeks but being longer to going out every 2 weeks but being shorter. You were also able to vote in <a
href="http://www.larryullman.com/2012/01/06/newsletter-opinion-poll/">an online poll</a>. About two-thirds of the votes were for the change, although the more passionate responses were against the change, as those recipients already felt they received too many newsletters and emails. I think what I’m going to do, as a happy medium, is to shoot for a schedule where the newsletters come out slightly faster, like every 2-3 weeks, and are slightly shorter. This should be feasible for me to pull off without overwhelming you.</p><p>Towards that end, you may note that there’s no “What is Larry Thinking?” section in this particular newsletter. With the new plan for the newsletter, I’m not going to be quite so rigid about what goes into each newsletter, limiting myself to just five or so significant pieces. The bulk of this newsletter answers a question on OOP design.</p><p>My thanks to everyone for their input. And please always feel free to provide any feedback, questions, comments, etc., that you may have. (Postscript: Several of you rightfully pointed out that I misused “biweekly” in the text of the newsletter, despite correctly using “bimonthly” in the heading. I indeed meant “bimonthly”, although “biweekly” has the same inexactitude in that it can mean both every two weeks and twice a week.)</p><h2 id="web">On the Web =&gt; Security and Privacy Made Simpler</h2><p>When I was writing my <a
href="http://www.larryullman.com/books/effortless-e-commerce-with-php-and-mysql/">Effortless E-Commerce with PHP and MySQL</a> book, I naturally did a bunch of research, particularly with regards to the various laws that apply. Understanding the programming behind an e-commerce site is relatively simple; understanding all the applicable laws and implications of doing e-commerce is complex. One of the sites I found to be quite useful was the United States <a
href="http://www.bbb.org/">Better Business Bureau</a> (BBB).</p><p>I’m currently going through some items in my “to read” folder, and am reading, or perhaps re-reading, the Better Business Bureau’s PDF titled “<a
href="http://www.bbb.org/us/corporate-engagement/security/">Security &amp; Privacy – Made Simpler</a>. If you do any e-commerce, or even just Web development, in the U.S. or not, it’s worth your time. It’s a 22-page document that discusses almost every facet of e-commerce, such as:</p><ul><li>Developing a security and privacy plan</li><li>Creating and communicating your security and privacy policies</li><li>Good employee screening and policies</li><li>Common hack/theft strategies</li><li>General Internet security</li><li>Proper handling of customer data</li><li>Payment processing</li><li>What to do in the event of a data breach</li><li>A preview of international e-commerce considerations</li></ul><p>The document also has many resources listed in these and other categories. You can download the PDF from that page, but there are also related FAQs and more on the BBB’s site.</p><h2 id="blog">On the Blog =&gt; My January 2012 Non-Resolutions List</h2><p>I’ve never been much of a New Year’s Resolution person: if something is important enough to do, start today, not on some arbitrary date that happens to be the first day of the year. (Or, you know, January 2nd, because the first is a holiday and all.) But this year I happen to have quite a long non-resolutions list. The timing is entirely coincidental: I just happen to be done with my “Modern JavaScript: Develop and Design” book around this time, and I always have a long list of things to do between books. I recently <a
href="http://www.larryullman.com/2012/01/03/my-january-2012-non-resolutions-list/">posted on my blog</a> about my immediate plans (aka, my non-resolutions list).</p><h2 id="qa">Q&amp;A =&gt; How do you go about designing the main OOP classes for a project?</h2><p>While “diving into” Object-Oriented Programming development in PHP, Chris had emailed me about how one sets up the core classes for an OOP-based site. The specific example—user management with login/logout, roles, etc.—is common and not complex, but Chris didn’t know where to start. In my opinion, OOP is easy enough to <em>use</em> once the classes have been defined; the difficulties arise from coming up with the proper classes in the first place. So let’s look at that process, in the abstract.</p><p><em>Programming is a matter of taking actions with data.</em> In a linguistic sense, it’s very much a noun-verb relationship: the user submits form data to a server; the server stores data in a database; the user requests another page; the server pulls data from a database. Whether you’re using OOP or procedural code, you need to identify both the actions and the data first. What are all the <em>verbs</em> that the user or Web site needs to be able to do? What are all the <em>nouns</em> that will be involved in those actions? Once you’ve identified those attributes of the site, procedural programming focuses first on the verbs, OOP focuses first on the nouns.</p><p>To start designing OOP classes, one must first organize the types of data the site will work with, in detail. In a user management system, there’s one obvious noun: a <strong>User</strong>. The properties of a User include: userId, username, userPass, userRole, dateRegistered, and so forth. (Conventionally, OOP uses camel-case for variable and property names.) When you think you’ve identified the nouns involved, go back and see if all of the actions now have the data that needs to be involved. When a new person registers, a User is created (as both a PHP variable and a record in the database). When a person logs in, a User is retrieved from the database and created as a PHP variable. When a person logs out, the User PHP variable can be destroyed. To see if a person has authority to do X, you’d check the <strong>User-&gt;userRole</strong> property.</p><p>In some situations, there will be nouns with overlapping roles and properties, which would suggest that you should create a hierarchy of classes. I think of shapes as being the easiest example to comprehend. All two-dimensional shapes have some common attributes, such as area and perimeter, but triangles have three sides, rectangles have four, and circles have none (but do have a radius). When you find yourself in situations like this, you’ll want to design one master class, in this case, <strong>Shape</strong>, which you never create instances of. Then you define derived classes—<strong>Triangle</strong>, <strong>Rectangle</strong>, and <strong>Circle</strong>—that you would create instances of. Admittedly, knowing when to create a hierarchy can be tough. You might think with a user roles situation that you’d want common users and administrators as two separate classes, but the only difference between the two types is in what actions each can take, which is easily managed using Access Control Lists (ACLs) or the like. Or, put another way, everything about the two users is exactly the same except for the type, so there’s no need to create separate classes (unlike, by comparison, circles and triangles that have some overlapping properties but other very different ones).</p><p>Another common class to use on a site would be one for interacting with the database. You could create your own class for this purpose, or just use the <a
href="http://www.php.net/mysqli">MySQLi object</a> or <a
href="http://www.php.net/pdo">PDO</a> or the like.</p><p>Even in a simple site with content and users, there are other clear nouns: the pages of content. Going back to the language analogy, there are some sentences that have a single noun—<em>Johnny runs</em> or <em>A User logs out</em>—but many have more than one noun—<em>Johnny reads a book</em> or <em>A User views a page of content</em>. The content, then, would also be represented by one or more classes, depending upon the variety in the content displayed. If the content is just information displayed within a template of HTML, then <strong>Content</strong> might have these attributes: contentId, title, body, createdBy, dateCreated, and dateUpdated. The createdBy could be as simple as a userID integer, or more formally be an actual User instance.</p><p>Depending upon how OOP-y you want to be, you may also create classes for generating the HTML pages (i.e., View classes) and for handling actions (i.e., Controller classes). Those move you into the realm of a true MVC architecture, which isn’t always necessary, though.</p><p>In asking the question, Chris didn’t originally know how to handle the logging in and logging out and registration and such, not knowing if one makes classes for those. Those are actions performed on, or using, objects, and don’t get represented as classes themselves.</p><p>Because I’m going to be writing the third edition of my “<a
href="http://www.larryullman.com/books/php-5-advanced-visual-quickpro-guide-2nd-edition/">PHP 5 Advanced: Visual QuickPro Guide</a>” this year, I expect I’ll be doing a lot of writing on the subject of OOP, design patterns, and the like. If anyone has any more questions or comments regarding these topics, let me know.</p><h2 id="news">Larry Ullman’s Book News =&gt; “Modern Javascript: Develop and Design” Done!</h2><p>I am very, very happy to say that my latest book, “Modern JavaScript: Develop and Design”, is officially done. Like done, done. Last week Monday, I submitted the last chapter to be written, Chapter 13, Frameworks. In it, I quickly discuss how to choose a framework, when you should use a framework, and some common libraries (as a framework alternative). The bulk of the chapter introduces and uses <a
href="http://jquery.com/">jQuery</a> and the <a
href="http://yuilibrary.com/">Yahoo! User Interface (YUI) Library</a>. For both I explain how to perform common tasks—selecting DOM elements, DOM manipulation, event handling, and Ajax, and then walk through more advanced examples. For both, the chapter explains an autocomplete example, using a PHP script as the data source. For jQuery, I also discuss the <a
href="http://datatables.net/">DataTables</a> plug-in. For YUI, I also discuss and demonstrate the <a
href="http://developer.yahoo.com/yql/">Yahoo! Query Language</a> (YQL). For it, I go through a couple of examples, including fetching a weather report and a stock quote. (For the record, I specifically target YUI3, which is an improvement over YUI1 and 2, even if some of the framework is currently in beta.)</p><p>Chapter 13 is the first chapter in Part 3 of the book, Next Steps. I already wrote Chapter 14, Advanced JavaScript, which has a heavy focus on closures. Chapter 15, A PHP and JavaScript Example, creates a pseudo-complete auction system. Auctions are set to expire on a certain date and time. Logged-in users can bid on items. All dates and times are shown using Coordinated Universal Time (UTC) or the user’s timezone, if the user is logged-in. Then, JavaScript used to enhance the experience. This includes using Ajax for the login and bid forms, retrieving the latest bids via Ajax (and updating the table of bids with them), and creating countdown timers that show the amount of time left in an auction, when that’s less than an hour. I think the chapter turned out well, and it emphasizes the various ways to pass data back and forth between PHP and JavaScript, a common point of confusion.</p><p>Not only is all of the initial writing is complete, but I’ve also done the rewrites on the entire book, and I just—moments ago—finished reviewing the PDF layouts, which is the last step before the book goes to the printer. (As you can tell, there are a lot of overlapping steps here at the end.) I believe the book will still ship, as originally planned, at the end of February.</p><p>In support of the book, I’ll also be writing a couple of articles (published online for free) and create some screencasts (to be provided in various places).</p> ]]></content:encoded> <wfw:commentRss>http://www.larryullman.com/2012/01/30/what-is-larry-thinking-50-oop-design-part-1/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>The State Of HTML5 Video, from LongTailVideo</title><link>http://www.larryullman.com/2012/01/27/the-state-of-html5-video-from-longtailvideo/</link> <comments>http://www.larryullman.com/2012/01/27/the-state-of-html5-video-from-longtailvideo/#comments</comments> <pubDate>Fri, 27 Jan 2012 16:14:43 +0000</pubDate> <dc:creator>Larry</dc:creator> <category><![CDATA[Web Development]]></category> <category><![CDATA[html5]]></category> <category><![CDATA[video]]></category><guid
isPermaLink="false">http://www.larryullman.com/?p=2990</guid> <description><![CDATA[LongTailVideo, makers of the popular JW Player (a video player for Web pages), just posted a long article titled &#8220;The State Of HTML5 Video.&#8221; I used JW Player on a couple of projects and was quite pleased with its usability and reliability. My experience was with using JW Player to present Flash video, but the [...]]]></description> <content:encoded><![CDATA[<p><a
href="http://www.longtailvideo.com/">LongTailVideo</a>, makers of the popular <a
href="http://www.longtailvideo.com/players/">JW Player</a> (a video player for Web pages), just posted a long article titled &#8220;<a
href="http://www.longtailvideo.com/html5/">The State Of HTML5 Video</a>.&#8221; I used JW Player on a couple of projects and was quite pleased with its usability and reliability. My experience was with using JW Player to present Flash video, but the player has since been modified to serve either Flash content or HTML5 video, which is great. Towards that end, the article presents the current state of HTML5-related features and functionality, with lots of stats about browser compatibility, what attributes and video formats can be used, and so forth.</p><p>If you present video on Web sites, whether you use the JW Player or not, it&#8217;s worth checking out to know where things stand. LongTailVideo intends to maintain and update that article as changes in the industry (such as statistical changes and the like) evolve.</p> ]]></content:encoded> <wfw:commentRss>http://www.larryullman.com/2012/01/27/the-state-of-html5-video-from-longtailvideo/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>What Is Larry Thinking? #49 =&gt; A New Year</title><link>http://www.larryullman.com/2012/01/07/what-is-larry-thinking-49-a-new-year/</link> <comments>http://www.larryullman.com/2012/01/07/what-is-larry-thinking-49-a-new-year/#comments</comments> <pubDate>Sat, 07 Jan 2012 16:55:27 +0000</pubDate> <dc:creator>Larry</dc:creator> <category><![CDATA[PHP]]></category> <category><![CDATA[Web Development]]></category> <category><![CDATA[bonus]]></category> <category><![CDATA[bonus content]]></category> <category><![CDATA[book]]></category> <category><![CDATA[debug]]></category> <category><![CDATA[jsdd]]></category> <category><![CDATA[newsletter]]></category><guid
isPermaLink="false">http://www.larryullman.com/?p=2967</guid> <description><![CDATA[In this edition… About This Newsletter What Are You Thinking? =&#62; Bimonthly Newsletters On the Web =&#62; How To Read a PHP Function Definition On the Blog =&#62; Finding Book Bonus Content Q&#38;A =&#62; Do You Use Any Tools to Debug Your PHP Scripts? What is Larry Thinking =&#62; Testing Your PHP Knowledge Larry Ullman&#8217;s [...]]]></description> <content:encoded><![CDATA[<p>In this edition…</p><ul><li><a
href="http://www.larryullman.com/2012/01/07/what-is-larry-thinking-49-a-new-year/#about">About This Newsletter</a></li><li><a
href="http://www.larryullman.com/2012/01/07/what-is-larry-thinking-49-a-new-year/#you">What Are You Thinking? =&gt; Bimonthly Newsletters</a></li><li><a
href="http://www.larryullman.com/2012/01/07/what-is-larry-thinking-49-a-new-year/#web">On the Web =&gt; How To Read a PHP Function Definition</a></li><li><a
href="http://www.larryullman.com/2012/01/07/what-is-larry-thinking-49-a-new-year/#blog">On the Blog =&gt; Finding Book Bonus Content</a></li><li><a
href="http://www.larryullman.com/2012/01/07/what-is-larry-thinking-49-a-new-year/#qa">Q&amp;A =&gt; Do You Use Any Tools to Debug Your PHP Scripts?</a></li><li><a
href="http://www.larryullman.com/2012/01/07/what-is-larry-thinking-49-a-new-year/#thinking">What is Larry Thinking =&gt; Testing Your PHP Knowledge</a></li><li><a
href="http://www.larryullman.com/2012/01/07/what-is-larry-thinking-49-a-new-year/#news">Larry Ullman&#8217;s Book News =&gt; &#8220;Modern JavaScript: Develop and Design&#8221;</a></li></ul><p><span
id="more-2967"></span></p><h2 id="about">About This Newsletter</h2><p>Happy New Year! I hope you are doing well and had pleasant holidays, for those of you that celebrate holidays around this time. I’m going to get right to the newsletter, without any big introduction. I will say in advance that this is going to be a shorter newsletter, for reasons I’m about to explain.</p><p>As always, questions, comments, and all feedback are much appreciated. And thanks for your interest in what I have to say and do!</p><h2 id="you">What Are You Thinking? =&gt; Bimonthly Newsletters</h2><p>First of all, how difficult is the English language? The term “bimonthly” means <em>both</em> every two weeks and every two months. Seriously? Yikes. Well, the reason I bring it up is that I’m thinking of changing the frequency of the newsletter. Right now, I try to send out the newsletter every 3-4 weeks, and target keeping it under 3,000 words (which I often don’t do). I’m debating putting it out every two weeks (-ish), but cutting the length by about half (as a point of reference this newsletter is the approximate new length). I’d also have to change some of the structure a bit. For example, I’d probably drop the “About This Newsletter” section, and only do some sections some times. What do you think?</p><p>You can reply to this email with your thoughts, or quickly vote at <a
href="http://www.larryullman.com/2012/01/06/newsletter-opinion-poll/">this online poll</a>. Thanks in advance for your input!</p><h2 id="web">On the Web =&gt; How To Read a PHP Function Definition</h2><p>It was recently pointed out to me by a couple of readers that they found my explanation for how to read the PHP manual, presented in Chapter 1 of my <a
href="http://www.larryullman.com/books/php-for-the-web-visual-quickstart-guide-4th-edition/">“PHP for the Web: Visual QuickStart Guide”</a> book, to be confusing. I think that learning how to read the manual is quite important, but I can see now that my presentation of that subject was a bit much at that early stage of the game, at least for absolute beginners. In any case, in that forum discussion, someone shared a link to a page in the PHP manual titled <a
href="http://www.php.net/manual/en/about.prototypes.php">“How to Read a Function Definition”</a>, which they found to be useful. So I thought I’d share it here!</p><h2 id="blog">On the Blog =&gt; Finding Book Bonus Content</h2><p>For many of my books, bonus content is made available through the publisher. Sometimes this is material that was intended for the book but had to be cut, such as an appendix or a chapter, and sometimes the material is a true bonus, such as a video screencast. Because it’s not clear for everyone how to access this bonus material, I recently <a
href="http://www.larryullman.com/2011/12/20/finding-book-bonus-content/">posted instructions for finding bonus material</a> on my blog.</p><h2 id="qa">Q&amp;A =&gt; Do You Use Any Tools to Debug Your PHP Scripts?</h2><p>Daniel had asked me this question and the truthful answer is that I generally don’t, crazy as that sounds. Mostly this is because I primarily write PHP code using a text editor, <a
href="http://macromates.com">TextMate</a>, that does not have a built-in debugger. That leaves me with using echo statements as my primary debugging tool. I know I <em>can</em> get <a
href="http://xdebug.org/">XDebug</a> working with TextMate on my Mac, I just haven’t felt the need.</p><p>On the other hand, I’ve used <a
href="http://www.zend.com/en/products/studio/">Zend Studio</a> some, mostly for Flex+PHP development, in conjunction with Flash Builder, and Zend Studio does have a built-in debugger. Debuggers are nice—they report the values of variables, let you walk through code, and so forth, I just haven’t been driven to force myself to use one yet. Certainly if I were to use an IDE more frequently, I would get myself into the debugger habit.</p><h2 id="thinking">What is Larry Thinking? =&gt; Testing Your PHP Knowledge</h2><p>A friend of mine recently went on a job interview for a position as a PHP programmer and was given this prompt:</p><blockquote><pre>$a = 4;
$b = 5;
$c = --$b + $a++;</pre><p>What is the value of $c?</p></blockquote><p>This is just annoying. The question is trying to test knowledge of the impact that using the postfix and prefix versions of the increment and decrement operators have. In other words, will <strong>$b</strong> be decremented and then added to <strong>$a</strong> or will <strong>$b</strong> be added to <strong>$a</strong> and then decremented (and, of course, the same goes for the <strong>$a</strong> value, too)?</p><p>Besides being a meaningless example, in no way does this test one’s actual skills as a PHP programmer. It only tests one’s ability to memorize the rules of precedence. I, for one, always considered memorizing the precedence rules to be a waste of time. The list contains many esoteric operators that aren’t commonly used. More importantly, memorizing the list is only useful if you always remember the precedence list accurately. As soon as you slip up, you’ve created a bug. And even if you don’t slip up, relying upon precedence will lead to code that’s not clearly understood (i.e., that doesn’t clearly convey the programmer’s intent). That, to me, is bad code. When I look at that prompt, I don’t wonder what the value of <strong>$c</strong> is, but rather what the original programmer intended it to be. I know it undercuts the point of the test, but a real PHP programmer should have coded:</p><blockquote><pre>$c = (--$b) + $a;
$a++;</pre></blockquote><p>That code assigns the same answer to <strong>$c</strong>—8—and then increments <strong>$a</strong>, but is much, much cleaner. And, of course, some comments wouldn’t hurt!</p><p>It probably would not have gotten me the job, but that’s what my answer would have been. To me it comes down to whether the company is looking for someone that can memorize arcane rules, or someone that actually knows how to program. This is also why I don’t personally put much stock into certifications. Those are just exams that tests one’s ability to memorize and regurgitate rules. Certification exams have little reflection of real-world programming. For example, I might be asked on a certification test the order of the arguments for PHP’s <strong>explode()</strong> function, which I can never remember for whatever reason. On the test, I’d have a 50-50 shot of getting that question right, but in the real-world, there is a 100% guarantee that I’ll use the function correctly, because I’ll just look up its definition.</p><p>Years ago, I was a trainer for Borders Bookstores. As part of the training process, we’d have the new employee go on a treasure hunt to find a slew of books. Inevitably some trainee would get stumped and tentatively ask another, more seasoned employee for help. I loved that, because it accurately reflects the job: when you got stuck, you asked the person next to you.</p><p>Many books, tests, and even these simple employee tests put way too much emphasis on knowing facts. Being able to answer a question about a rule or function is not that important in the grand scheme of things. <em>Being able to find answers to questions is far, far more critical.</em> If you rely only on what you know, there will be a time when you won’t know, and then you’ll really be stuck.</p><h2 id="news">Larry Ullman’s Book News =&gt; “Modern JavaScript: Develop and Design”</h2><p>I just submitted Chapter 14, “Advanced JavaScript,” about two days ago, which means I only have two chapters left (whohoo!). One chapter will be on frameworks, in which I introduce both <a
href="http://jquery.com">jQuery</a> and <a
href="http://developer.yahoo.com/yui/">YUI</a>, probably the two most commonly used frameworks. The other chapter will be an example chapter using JavaScript with PHP (and HTML and CSS, of course). I’m thinking right now of doing an auction-like system, which would entail timers and Ajax and DOM manipulation and all sorts of goodies.</p><p>I will have those chapters done in the next two weeks, at the latest. I’ve also done the rewrites on the first 8 chapters, and have a few more of those to go. There will be supporting video screencasts to go with the book, and probably a couple of articles to be published online. The end is nigh!</p> ]]></content:encoded> <wfw:commentRss>http://www.larryullman.com/2012/01/07/what-is-larry-thinking-49-a-new-year/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>Examples from &#8220;Building a Web Site with Ajax: Visual QuickProject&#8221;</title><link>http://www.larryullman.com/2011/12/27/examples-from-building-a-web-site-with-ajax-visual-quickproject/</link> <comments>http://www.larryullman.com/2011/12/27/examples-from-building-a-web-site-with-ajax-visual-quickproject/#comments</comments> <pubDate>Tue, 27 Dec 2011 22:18:56 +0000</pubDate> <dc:creator>Larry</dc:creator> <category><![CDATA[JavaScript]]></category> <category><![CDATA[MySQL]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[Web Development]]></category> <category><![CDATA[ajax]]></category><guid
isPermaLink="false">http://www.larryullman.com/?p=2936</guid> <description><![CDATA[Although I don&#8217;t normally do this, per a reader request, I&#8217;ve made the book&#8217;s examples available to be seen and used here. The book has three primary examples, each in an Ajax and non-Ajax form. The pages are: dept_form.html This page returns all of the employees in a selected department. add_employee.html This page uses Ajax [...]]]></description> <content:encoded><![CDATA[<p>Although I don&#8217;t normally do this, per a reader request, I&#8217;ve made the book&#8217;s examples available to be seen and used here. The book has three primary examples, each in an Ajax and non-Ajax form. The pages are:</p><dl><dt><a
href="http://demo.larryullman.com/ajax/examples/dept_form.html">dept_form.html</a></dt><dd>This page returns all of the employees in a selected department.</dd><dt><a
href="http://demo.larryullman.com/ajax/examples/add_employee.html">add_employee.html</a></dt><dd>This page uses Ajax to add an employee to the database (note: the version running on this site does not actually execute the INSERT query that updates the database.)</dd><dt><a
href="http://demo.larryullman.com/ajax/examples/search_form.html">search_form.html</a></dt><dd>This page provides a simple search to retrieve employees by last name.</dd></dl><p>There&#8217;s no navigation within or among the pages. You&#8217;ll need to click Back to return to this page to see another example. To run one of the examples without Ajax (to see what that&#8217;d be like for visitors that can&#8217;t use the Ajax version), disable JavaScript in your Web browser.</p> ]]></content:encoded> <wfw:commentRss>http://www.larryullman.com/2011/12/27/examples-from-building-a-web-site-with-ajax-visual-quickproject/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Finding Book Bonus Content</title><link>http://www.larryullman.com/2011/12/20/finding-book-bonus-content/</link> <comments>http://www.larryullman.com/2011/12/20/finding-book-bonus-content/#comments</comments> <pubDate>Tue, 20 Dec 2011 19:27:36 +0000</pubDate> <dc:creator>Larry</dc:creator> <category><![CDATA[C and C++]]></category> <category><![CDATA[Flex]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[MySQL]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[Ruby]]></category> <category><![CDATA[Web Development]]></category> <category><![CDATA[jsdd]]></category> <category><![CDATA[phpmysql4]]></category> <category><![CDATA[phpvqs4]]></category><guid
isPermaLink="false">http://www.larryullman.com/?p=2925</guid> <description><![CDATA[For many of my books, bonus content is made available through the publisher. Sometimes this is material that was intended for the book but had to be cut, such as an appendix or a chapter, and sometimes the material is a true bonus, such as a video screencast. Because it&#8217;s not clear for everyone how [...]]]></description> <content:encoded><![CDATA[<p>For many of my books, bonus content is made available through the publisher. Sometimes this is material that was intended for the book but had to be cut, such as an appendix or a chapter, and sometimes the material is a true bonus, such as a video screencast. Because it&#8217;s not clear for everyone how to access this bonus material, I thought I&#8217;d quickly post instructions here.</p><ol><li>Head to <a
href="http://www.peachpit.com">Peachpit.com</a> (almost all of my books are published by Peachpit Press)</li><li>Click on <a
href="https://memberservices.informit.com/my_account/login.aspx?partner=52">Account Sign In</a> at the top of the page.</li><li>If you don&#8217;t already have an account with Peachpit.com, click the <a
href="https://memberservices.informit.com/my_account/register.aspx">Create a new one&#8230;</a> link to register.</li><li>After you have registered, login.</li><li>On your account page (after logging in), click <em>Registered Products</em>.</li><li>On the Registered Products tab, click <em>Register Another Product</em>.</li><li>Follow the instructions to register the book.</li><li>Return to the Registered Products page.</li><li>For the book in question, click the <em>Access Bonus Content</em> link. That will take you to a page with all the bonus content for a given book.</li></ol><p>Besides being able to access bonus content, there are other benefits to registering at Peachpit&#8217;s site. And while you&#8217;re there, you can also check out <a
href="http://www.peachpit.com/authors/bio.aspx?a=2a14d669-06f6-48cf-a5b8-907169808b9f">my author page</a>, which lists the books I&#8217;ve written for Peachpit, the articles I&#8217;ve published there, and the blog postings I&#8217;ve published there. Both the articles and blog postings are viewable without registration or logging in.</p><p>I hope that helps anyone having trouble finding the material they&#8217;re looking for.</p> ]]></content:encoded> <wfw:commentRss>http://www.larryullman.com/2011/12/20/finding-book-bonus-content/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Programming Video Courses</title><link>http://www.larryullman.com/2011/12/04/programming-video-courses/</link> <comments>http://www.larryullman.com/2011/12/04/programming-video-courses/#comments</comments> <pubDate>Mon, 05 Dec 2011 02:52:16 +0000</pubDate> <dc:creator>Larry</dc:creator> <category><![CDATA[C and C++]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[Ruby]]></category> <category><![CDATA[Web Development]]></category> <category><![CDATA[programming]]></category> <category><![CDATA[video]]></category><guid
isPermaLink="false">http://www.larryullman.com/?p=2885</guid> <description><![CDATA[I&#8217;ve recently come across a couple of free, public programming courses, as a series of videos, that may be of interest to those of you out there (I haven&#8217;t had the time to view many of the individual episodes, but they look promising). The first is an Introduction to Computer Science and Programming, from an [...]]]></description> <content:encoded><![CDATA[<p>I&#8217;ve recently come across a couple of free, public programming courses, as a series of videos, that may be of interest to those of you out there (I haven&#8217;t had the time to view many of the individual episodes, but they look promising).</p><p>The first is an <a
href="http://academicearth.org/courses/introduction-to-computer-science-and-programming">Introduction to Computer Science and Programming</a>, from an instructor at MIT. It&#8217;s definitely for beginners and although it uses Python as its primary language, the goal is to convey the fundamentals and the theories involved. It probably gets a bit too high-end for some, but worth taking a gander at regardless.</p><p>The second series is <a
href="http://proglit.com/core-units/">programming literacy&#8217;s Core units</a>. This series is much more broad and covers a range of languages and topics. As I write this, the first six units have been completed and are available as YouTube videos, with downloadable PDFs (and other formats) for the slides and notes. On the other hand, the last one was finished about 20 months ago, so there may never be more in the series. Still, it&#8217;s approachable and I like that the materials are available for viewing separately. And the price is right!</p> ]]></content:encoded> <wfw:commentRss>http://www.larryullman.com/2011/12/04/programming-video-courses/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> </channel> </rss>
<!-- Served from: www.larryullman.com @ 2012-02-09 15:35:00 by W3 Total Cache -->
