<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IdeasCart</title>
	<atom:link href="http://www.ideascart.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ideascart.com</link>
	<description>IdeasCart is a website launched for sharing experiences about web development.</description>
	<lastBuildDate>Sun, 18 Dec 2011 18:17:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>11 programming languages worth checking out</title>
		<link>http://www.ideascart.com/learn/11-programming-languages-worth-checking-out/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=11-programming-languages-worth-checking-out</link>
		<comments>http://www.ideascart.com/learn/11-programming-languages-worth-checking-out/#comments</comments>
		<pubDate>Mon, 10 Oct 2011 20:22:17 +0000</pubDate>
		<dc:creator>Marwan Arafah</dc:creator>
				<category><![CDATA[Learn]]></category>
		<category><![CDATA[Langauges]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.ideascart.com/?p=329</guid>
		<description><![CDATA[If you program for fun or profit, chances are that you know C, C++, Java, PHP, Perl, Python or Ruby. These programming languages are all widely known, and, to a different &#8230;</p><p><a class="read_more" href="http://www.ideascart.com/learn/11-programming-languages-worth-checking-out/" title="Continue Reading &#187;" rel="bookmark">Continue Reading &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>If you program for fun or profit, chances are that you know C, C++, Java, PHP, Perl, Python or Ruby. These programming languages are all widely known, and, to a different degree, used in commercial applications. At least some of them can safely be considered <em>mainstream</em>, even if that word has become so overused and misused that has almost lost its original meaning, if it ever had one.</p>
<p>If you are earning your living by coding, it’s often one of these languages that pays the bills. Nevertheless, true hackers frequently meander in other directions, exploring and discovering different paradigms and methodologies, sometimes to the most <a href="http://esolangs.org/wiki/Main_Page">esoteric</a> extremes.</p>
<blockquote><p>“The most obvious common ‘personality’ characteristics of hackers are high intelligence, consuming curiosity, and facility with intellectual abstractions. Also, most hackers are ‘neophiles’, stimulated by and appreciative of novelty (especially intellectual novelty). Most are also relatively individualistic and anti-conformist.”</p></blockquote>
<p>– Eric S. Raymond, <cite><a href="http://catb.org/jargon/html/personality.html">The Jargon File</a></cite></p>
<p>Even if you’re particularly devoted to one of the languages mentioned above, it is normal to be curious about what else is out there. As the end of the year approaches, I find myself thinking about learning – or at least become acquainted with – some less known, more experimental, programming languages.<br />
I was originally planning on learning another programming language as a New Year’s Resolution, which is quite common among programmers. The most difficult task turned out to be <em>choosing</em> a particular language: there are so many out there which makes it very hard to decide.</p>
<p>This article deals with ten possible candidates, and it’s far from being an exhaustive list. The programming languages described henceforth are very different from each other, but they all have one thing in common: they all stimulate my curiosity in their own, very different ways.</p>
<p><span id="more-329"></span></p>
<hr />
<h2 id="haskell">#1. Haskell</h2>
<p>I tried to learn Haskell in the past. Quietly, I started diving into the multitude of articles, tutorials, overviews and even books about this fascinating academic language which claims to achieve functional purity though remaining extremely useful, practical and efficient. Sadly, I’m still not able to fully grasp some of its most crucial concepts, such as <a href="http://en.wikibooks.org/wiki/Programming:Haskell_monads">monads</a>, but this still doesn’t put me off <em>wishing</em> to learn the language.</p>
<p>If you’ve never enountered Haskell before, I find <a href="http://www.willamette.edu/~fruehr/haskell/evolution.html">The Evolution of a Haskell Programmer</a> an amusing and informative read. Although aiming to be humorous in a way, it serves a very important didascalic purpose: it is one of the most complete collections of the different paradigms and programming approaches Haskell allows.</p>
<p>Besides its very elegant, pragmatic and almost-magical syntax, what really intrigues me about this language is what it offers, in terms of features:</p>
<ul>
<li>9 different <a href="http://www.haskell.org/haskellwiki/Implementations">implementations</a> (multiple compilers <em>and</em> interpreters)</li>
<li>Countless <a href="http://haskell.org/ghc/docs/latest/html/libraries/">standard libraries</a> <a href="http://hackage.haskell.org/packages/archive/pkg-list.html">packages</a> which can be used to solve <em>any</em> programming challenge</li>
<li>Abundant <a href="http://www.haskell.org/haskellwiki/Books_and_tutorials">learning material</a></li>
<li><a href="http://www.haskell.org/haskellwiki/Why_Haskell_matters#The_speed_of_Haskell">Speed</a> that rivals C and C++</li>
<li>Very mature cross-platform compatibility</li>
</ul>
<p>The catch? It is likely to be very different from any other language you might have encountered before, and that’s probably the reason why some people find it difficult to learn and master. That being said, if you are looking for a challenging (but very rewarding, I believe) New Year’s Resolution, you should definitely go for this.</p>
<hr />
<h3>To get you started…</h3>
<ul>
<li><a href="http://www.haskell.org/">Official Haskell Wiki</a></li>
<li><a href="http://en.wikibooks.org/wiki/Haskell">Haskell Wikibook</a></li>
<li><a href="http://book.realworldhaskell.org/read/index.html">Real World Haskell</a></li>
<li><a href="http://cdsmith.wordpress.com/2007/07/29/37-reasons-to-love-haskell-playing-off-the-ruby-article/">37 Reasons to Love Haskell</a></li>
<li><a href="http://antoniocangiano.com/2007/03/13/haskell-eye-for-the-ruby-guy/">Haskell for the Ruby Guy</a></li>
<li><a href="http://www.techworld.com.au/article/261007/-z_programming_languages_haskell">A-Z of Programming Languages: Haskell</a></li>
<li><a href="http://learnyouahaskell.com/">Learn you a Haskell for Great Good!</a></li>
<li><a href="http://cgi.cse.unsw.edu.au/~dons/blog/2008/05/16">Haskell Hacking</a></li>
</ul>
<hr />
<h2 id="erlang">#2. Erlang</h2>
<p><a href="http://erlang.org/">Erlang</a> is a concurrent programming language originally developed by Ericsson for their real-time applications. It goes without saying that with these premise, Erlang seems the most natural answer to all concurrency problems you may encounter in your life as a programmer.<br />
Developing with concurrency in mind feels natural and easy in Erlang, and the performance of Erlang-powered systems can be unmatched.</p>
<p>Quite a few interesting applications have been developed in this language, such as:</p>
<ul>
<li><a href="http://couchdb.apache.org/">CouchDB</a>, a popular distributed, document-oriented database</li>
<li><a href="http://yaws.hyber.org/">Yaws</a>, a high-performance web server</li>
<li>even <a href="http://www.facebook.com/note.php?note_id=14218138919&amp;id=9445547199">Facebook Chat</a></li>
</ul>
<p>The price Erlang adepts have to pay, as Damien Katz (CouchDB creator and Erlang enthusiast) <a href="http://damienkatz.net/2008/03/what_sucks_abou.html">points out</a>, is:</p>
<ul>
<li>Awkward syntax, inspired by Prolog</li>
<li>Weird if expressions</li>
<li>Difficult string operations</li>
<li>No classes or namespaces</li>
</ul>
<p>…this list could go on. Damien’s article is an interesting read, enough to put anyone off learning the language if read superficially. On the other hand, it provides an invaluable resource for newcomers who wish to be prepared before taking on the challenge of learning Erlang to build their next scalable, concurrent and industry-proof application.</p>
<hr />
<h3>To get you started…</h3>
<ul>
<li><a href="http://www.erlang.org/">Official Erlang Web Site</a></li>
<li><a href="http://www.onlamp.com/pub/a/onlamp/2007/09/13/introduction-to-erlang.html">An Introduction to Erlang</a></li>
<li><a href="http://www.defmacro.org/ramblings/concurrency.html">Erlang Style Concurrency</a></li>
<li><a href="http://www.planeterlang.org/">PlanetErlang</a></li>
<li><a href="http://www.erlang-projects.org/">Erlang Projects</a></li>
</ul>
<hr />
<h2 id="io">#3. Io</h2>
<p><a href="http://iolanguage.com/">Io</a> is a relatively new programming language by Steve Dekorte which recently surfaced from Google’s oblivion (if you tried googling for it a few months ago, you couldn’t event find its home page) thanks to a short vut stimulating <a href="http://hackety.org/2008/01/05/ioHasAVeryCleanMirror.html">article</a> by <a href="http://whytheluckystiff.net/">_why</a>. It doesn’t have the best name for a programming language, that’s for sure, but it’s definitely a breath of fresh air in terms of the way it works.</p>
<p>Its unusual, minimalist and yet elegant and powerful syntax reminds of Smalltalk, but the language goes far beyond that. Io is an object-oriented, prototype-based, message-based and fully-reflective programming language. This means that you use messages like in Smalltalk, you create objects like in Javascript and every bit of your code can be inspected and passed around as you see fit.</p>
<p>If you think Ruby allows fancy (and potentially dirty) tricks like metaprogramming and monkey-patching, Io takes this to a whole different level, imposing virtually no limitation to the programmer. What’s truly amazing is that its grammar and syntax are so minimal that you can learn them in literally 10 minutes. After that, you can start experimenting, first with its extremely small core and then with its extension libraries and bindings.</p>
<p>Io has indeed a lot of potential. Granted, it’s still young and under development, but also already quite efficient and suitable for real-world tasks demanding high speed and concurrency. It is implemented in C, but Ola Bini started to design a similar language called <a href="http://kenai.com/projects/ioke/">Ioke</a> for the Java Virtual Machine.</p>
<hr />
<h3>To get you started…</h3>
<ul>
<li><a href="http://iolanguage.com/">Official Io Web Site</a></li>
<li><a href="http://github.com/stevedekorte/io/tree/master">Io Repository on Github</a></li>
<li><a href="http://tech.groups.yahoo.com/group/iolanguage/">Io user group</a></li>
<li><a href="http://hackety.org/2008/01/05/ioHasAVeryCleanMirror.html">Io has a very clean mirror</a></li>
<li><a href="http://iota.flowsnake.org/">Io Notes</a></li>
<li><a href="http://wiki.type-z.org/index.php/Io/IoLanguage">Io Language Notes</a></li>
<li><a href="http://ozone.wordpress.com/2006/03/15/blame-it-on-io/">Blame it on Io! A slow-paced introduction to the Io language</a></li>
<li><a href="http://en.wikibooks.org/wiki/Programming:Io">Io Wikibook</a></li>
</ul>
<hr />
<h2 id="plt-scheme">#4. PLT Scheme</h2>
<p>I stumbled upon the <a href="http://plt-scheme.org/">PLT Scheme web site</a> while browsing for different Lisp flavors about a year ago. At the time, I was determined to learn the rudiments of Lisp and I started reading a few articles and books on this old and yet still popular language.<br />
Although I was originally put off by certain Common Lisp literature, which dismissed Scheme as an almost-heretic attempt to revitalize an venerable language, I soon found out that Scheme – and PLT Scheme in particular – is definitely worthy of attention and interest.</p>
<p>Being a technical writer, I immediately became fond of the <a href="http://docs.plt-scheme.org/guide/">PLT Scheme Guide</a>, one of the clearest and most well-organized examples of documentation available for a programming language I’ve ever come across.<br />
The manual is exquisitely crafted as a Getting Started Manual and a Reference Book at the same time, though remaining pleasant to read sequentially: a rare trait in technical documentation. Best of all, it’s free: you simply have no real excuse not to read it.</p>
<p>Besides its excellent documentation, PLT Scheme feels like a fresh and modern implementation of one of the two most important dialects of Lisp. It’s cross-platform, it has an extensive <a href="http://planet.plt-scheme.org/">collection of packages</a> and a very active community behind it.<br />
After my first attempt to learn Haskell, I felt compelled to try out PLT Scheme and it immediately felt much easier and more user friendly to learn, partly because of <a href="http://download.plt-scheme.org/drscheme/">DrScheme</a> a dedicated IDE/learning tool optimized to get you started and feel comfortable with the language.<br />
Caveats? None, unless you have an adversion for parenthesis, that is.</p>
<hr />
<h3>To get you started…</h3>
<ul>
<li><a href="http://plt-scheme.org/">Official PLT Scheme Web Site</a></li>
<li><a href="http://docs.plt-scheme.org/guide/index.html">PLT Scheme Guide</a></li>
<li><a href="http://planet.plt-scheme.org/">PLaneT</a></li>
<li><a href="http://docs.plt-scheme.org/quick/">Quick: An Introduction to PLT Scheme with Pictures</a></li>
<li><a href="http://docs.plt-scheme.org/more/">More: Systems Programming with PLT Scheme</a></li>
</ul>
<hr />
<h2 id="clojure">#5. Clojure</h2>
<p><a href="http://clojure.org/">Clojure</a> is the most recent and notable attempt to bring Lisp back to life and ready to face the challenges posed to IT systems by the new century: concurrency and scalability. Because it runs on the Java Virtual Machine, you also get Java interoperability for free, in a more Lispy flavour. Although I’m a bit reluctant to deal with anything related to Java nowadays, Clojure’s approach makes it more appealing.</p>
<p>Unlike other Lisps (and Schemes) you may have encountered before, Clojure comes with some interesting additions:</p>
<ul>
<li><a href="http://clojure.org/multimethods">Multimethods</a></li>
<li><a href="http://clojure.org/agents">Agents asynchronous actions</a></li>
<li>Some interestings <a href="http://clojure.org/special_forms">special forms</a></li>
<li>Many pre-built <a href="http://clojure.org/data_structures">data structures</a>, like Vectors, Maps, Sets, Collections, …</li>
</ul>
<p>Despite all this, Rich Hickey became increasingly popular both in the Lisp and Java world for creating such an interesting and well-designed language. Unlike with many new (and old) programming languages, I have yet to find a single blog post or article which is seriously criticizing Clojure in any way.</p>
<hr />
<h3>To get you started…</h3>
<ul>
<li><a href="http://clojure.org/">Official Clojure Web Site</a></li>
<li><a href="http://groups.google.com/group/clojure">Clojure User Group</a></li>
<li><a href="http://www.infoq.com/presentations/hickey-clojure">Clojure presentation on InfoQ</a></li>
<li><a href="http://netzhansa.blogspot.com/2008/10/trying-clojure.html">Trying Clojure</a></li>
<li><a href="http://groups.google.com/group/clojure/msg/f038decc18c7da37">My first look at Clojure</a></li>
<li><a href="http://enclojure.net/Index.html">Enclojure</a></li>
</ul>
<hr />
<h2 id="squeak">#6. Squeak</h2>
<p><a href="http://www.squeak.org/">Squeak</a> has become one of the most popular Smalltalk implementations available. It has been used in some very interesting projects:</p>
<ul>
<li><a href="http://wiki.laptop.org/go/Smalltalk_Development_on_XO">EToys</a>, a kids-oriented but powerful development environment built in Squeak, was included as part of the educational sofware suite of the <a href="http://www.laptop.org/">OLPC</a>.</li>
<li><a href="http://www.seaside.st/">Seaside</a> is a modern and very productive web framework running on Squeak.</li>
<li><a href="http://www.croquetproject.org/index.php/Main_Page">Croquet</a> is a development solution to build complex, multi-user virtual worlds.</li>
</ul>
<p>If you ask <a href="http://www.stonehenge.com/merlyn/">Randal Schwartz</a>, he’ll explain you <a href="http://www.infoq.com/articles/smalltalk-comeback-schwartz">why</a> Squeak and Smalltalk are at least worth a look. Personally, while I’m attracted by Smalltalk’s unique approach to programming and its friendly syntax, I am still a bit overwhelmed by the way it works.<br />
Squeak, and Smalltalk in general, runs inside (literally) a virtual machine written in Squeak itself. This means that:</p>
<ul>
<li>You write your code inside Squeak</li>
<li>You debug, inspect and interact your code inside squeak</li>
<li>You run your code inside Squeak</li>
<li>You can install Squeak on virtually any platform, including mobile phones, fairly easily</li>
</ul>
<p>Everything lives inside Squeak. It’s very weird to picture this without actually trying it, so I suggest you <a href="http://www.squeak.org/Download/">download it</a> and give it a try: it will definitely be an unusual but intriguing experience.</p>
<p>Smalltalk takes programming to a whole different level, which is simply unimaginable for other languages. In return, it asks you to fully embrace the Smalltalk way of doing things, according to which external text editors, external version control systems and other common tools familiar to traditional programmers simply loose their purpose.</p>
<hr />
<h3>To get you started…</h3>
<ul>
<li><a href="http://www.squeak.org/">Official Squeak Web Site</a></li>
<li><a href="http://squeakbyexample.org/">Squeak by Example</a></li>
<li><a href="http://www.squeakland.org/">SqueakLand</a></li>
<li><a href="http://www.infoq.com/articles/smalltalk-comeback-schwartz">Ruby’s Roots: Smalltalk Comeback and Randal Schwartz on Smalltalk</a></li>
<li><a href="http://twit.tv/floss29">FLOSS Weekly 29: Dan Ingalls</a></li>
</ul>
<hr />
<h2 id="ocaml">#7. OCaml</h2>
<p>Like Smalltalk, <a href="http://caml.inria.fr/">OCaml</a> has been getting more attention recently than in the past. Sure, not everyone is planning to learn is these days, but after reading <a href="http://enfranchisedmind.com/blog/2008/04/14/useful-things-about-static-typing/">this article</a> I admit I was eager to give it a proper try.</p>
<p>Despite being statically typed, OCaml offers some of the features which are common in dynamically typed languages like Ruby, such as duck typing, the possibility of creating Domain-Specific Languages and even extending the language syntax with custom operators and constructs.</p>
<p>Additionally, the <a href="http://batteries.forge.ocamlcore.org/">OCaml Batteries Included</a> project was created as an attempt to bundle a standard set of commonly-used library together with the language core. Even if this project is still in alpha stage, it definitely <a href="http://dutherenverseauborddelatable.wordpress.com/2008/11/07/a-taste-of-ocaml-batteries-included/">looks promising</a>.</p>
<hr />
<h3>To get you started…</h3>
<ul>
<li><a href="http://caml.inria.fr/">Official Caml Web Site</a></li>
<li><a href="http://www.ocaml-tutorial.org/">Objective Caml Tutorial</a></li>
<li><a href="http://www.csc.villanova.edu/~dmatusze/resources/ocaml/ocaml.html">A Concise Introduction to Objective Caml</a></li>
<li><a href="http://wiki.cocan.org/">The OCaml Alliance Network</a></li>
<li><a href="http://ocamlnews.blogspot.com/">OCaml News</a></li>
<li><a href="http://batteries.forge.ocamlcore.org/">OCaml Batteries Included</a></li>
</ul>
<hr />
<h2>#8. Factor</h2>
<p><a href="http://factorcode.org/">Factor</a> is to Forth what <a href="http://clojure.org/">Clojure</a> is to Common Lisp: a reincarnation of an ancient language in a more modern and practical form. In the specific case, although it borrows from Lisp and Self as well, Factor retains the main characteristics of its ancestor: it’s stack-based, concatenative and has postfix notation.<br />
While this is enough to put some people off, if you digg deeper you’ll discover that Factor offers all the most important features available in contemporary programming languages: garbage collection, dynamic typing, an object system, … they’re just presented in a very different way:</p>
<blockquote><p>“Learning Factor is tough. One reason for this is that Factor is very different from other programming languages. Programmers today are used to imperative programming languages where data is stored and passed around in named variables (or function calls, which name their variables). Factor is the opposite of this. A lot of code tends to be written in a functional style, and even more jarringly, variables are rare, only referenced in a small fraction of words. Nobody intends to change any of this; it’s a feature, not a bug!”</p></blockquote>
<p>– Daniel Ehrenberg, <cite><a href="http://useless-factor.blogspot.com/2008/01/learning-factor.html">Learning Factor</a></cite></p>
<p>Like Haskell, Factor demands a completely different programming approach to what you may be used to, but once you get past that, it can be as useful as any other language, if not more. The <a href="http://docs.factorcode.org/content/article-furnace.html">Furnace</a> web framework, which powers the <a href="http://concatenative.org/">Concatenative</a> wiki, is entirely built in Factor and runs on top of a Factor web server.</p>
<hr />
<h3>To get you started…</h3>
<ul>
<li><a href="http://factorcode.org/">Official Factor Web Site</a></li>
<li><a href="http://concatenative.org/wiki/view/Factor">Factor on the Concatenative Wiki</a></li>
<li><a href="http://docs.factorcode.org/">Factor Documentation</a></li>
<li><a href="http://learnfactor.org/">Learn Factor</a></li>
<li><a href="http://planet.factorcode.org/">Planet Factor</a></li>
</ul>
<hr />
<h2 id="lua">#9. Lua</h2>
<p><a href="http://www.lua.org/">Lua</a> (“Moon” in Portuguese), is a lightweight and fast scripting language which can be easily embedded in other systems. Compared to the other languages mentioned in this article, it is definitely the less alien of the lot: if you know a tiny bit of C or Java, you’ll be able to understand (and possibly write) 80% of Lua code without reading a single line of its documentation.</p>
<p>Despite its simplicity, Lua is considered a multi-paradigm language supporting imperative, functional and even object-oriented approaches. More specifically, Lua’s <em>tables</em> provide a simple but powerful way to create arrays, hashes and even classes (or better, prototypes). Simple (and multiple) inheritance is achieved through <em>metatables</em>, which allow calls to undefined functions to be <em>transferred</em> to parent tables.</p>
<p>Lua programs are not interpreted in the traditional way: they are compiled to bytecode and then executed in the Lua Virtual Machine. As a result, Lua code tends to be executed much faster than other interpreted languages, so fast that “as fast as Lua” has become a proverbial expression.<br />
Lua found its niche in embedded applications and games development, basically everywhere there’s the need to provide a fast scripting language which is also very easy to learn and extend with C or other languages.</p>
<hr />
<h3>To get you started…</h3>
<ul>
<li><a href="http://www.lua.org/">Official Lua Web Site</a></li>
<li><a href="http://www.lua.org/manual/">Lua Manual</a></li>
<li><a href="http://lua-users.org/">Lua-users</a></li>
<li><a href="http://icculus.org/~theoddone33/lua/">Learning Lua</a></li>
<li><a href="http://lua.gts-stolberg.de/en/index.php?uml=1">Lua for Beginners</a></li>
</ul>
<hr />
<h2 id="scala">#10. Scala</h2>
<p>You may not be happy to see <a href="http://www.scala-lang.org/">Scala</a> in this list instead of other very valid and equally powerful languages for the Java Virtual Machine such as <a href="http://groovy.codehaus.org/">Groovy</a>. While there was no doubt on whether Clojure should have been included or not, I was a bit hesitant to include Scala. In the end, I chose to do so simply because Scala fits better in this list than other languages: as you should have noticed by now, I am somehow more inclined to learn functional languages as opposed to their object-oriented counterparts.</p>
<p>Scala is both object oriented and functional. It offers the best of both worlds: classes, traits and mixins which may be familiar to OOP lovers but also anonymous functions, currying and pattern matching which may please Haskell enthusiasts. Additionally, it’s also compatible with Java: so if you use Java for work, trying out Scala for pleasure is definitely the most logical next step, especially if you want to experiment with functional programming in the meantime.</p>
<p>Compared to learning a fully-functional (no pun intended) language like Haskell, Clojure or PLT Scheme, learning Scala is definitely easier and will feel less alien.</p>
<hr />
<h3>To get you started…</h3>
<ul>
<li><a href="http://www.scala-lang.org/">Official Scala Web Site</a></li>
<li><a href="http://blogs.zdnet.com/Burnette/?p=690">The Case for Scala</a></li>
<li><a href="http://scala.sygneca.com/">Scala Wiki</a></li>
<li><a href="http://grok-code.com/75/learning-scala-with-project-euler/">Learning Scala with Project Euler</a></li>
<li><a href="http://www.codecommit.com/blog/scala/roundup-scala-for-java-refugees">Roundup: Scala for Java Refugees</a></li>
</ul>
<hr />
<h2 id="epilogue">#11. Epilogue</h2>
<p>There are so many interesting programming language out there that it’s very hard to keep track of all of them. I hope this list can aid you in the right direction, whichever it may be.<br />
Some people may debate over the very essence of this article: why <em>choosing</em> a programming language? Why spending time and energy in a task which may lead to a lot of confusion in your mind and lead you nowhere? What’s the purpose of learning something which may feel totally alien to you?</p>
<p>A programming language is ultimately just a tool to get your job done. If you have to write an end-user, desktop GUI application which will always run on Windows and which needs to inteface with Microsoft technologies, you’ll choose C# over Haskell, there’s no doubt about that. Especially if 500 developers in your company already develop in C# and you don’t, as a matter of fact, have a saying on the matter.</p>
<p>But what if you <em>could</em> choose? What if you wanted to develop your own geeky command line application to automate a particular task for yourself, and not because someone else tells you to do so? Would you be willing to experiment with something totally different and potentially difficult just for the sake of learning new things?</p>
<p>If the answer is yes, then you should take a look at this list again. Not now, maybe not this month or this year, but when you feel the time is right, and give one of these languages a shot. It may not end well (so far I attempted to learn Haskell twice, with no luck), but I promise you it will be worthwhile, in the long run.<br />
If you already mastered some of these languages already, or even all of them, be assured that they’re plenty out there ready to be discovered and open your mind even more. Or, if you prefer, there are a lot of minds out there which may need guidance in learning and discovery. Help them. Write articles, tutorials, books, educate and evangelize: ultimately, that will be your greatest reward.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ideascart.com/learn/11-programming-languages-worth-checking-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>All about CSSLint</title>
		<link>http://www.ideascart.com/learn/all-about-csslint/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=all-about-csslint</link>
		<comments>http://www.ideascart.com/learn/all-about-csslint/#comments</comments>
		<pubDate>Mon, 11 Jul 2011 13:07:11 +0000</pubDate>
		<dc:creator>Marwan Arafah</dc:creator>
				<category><![CDATA[Learn]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.ideascart.com/?p=318</guid>
		<description><![CDATA[Getting our code reviewed by a pro is a great way of improving code quality but what happens if you don’t have access to a rockstar programmer? You do the &#8230;</p><p><a class="read_more" href="http://www.ideascart.com/learn/all-about-csslint/" title="Continue Reading &#187;" rel="bookmark">Continue Reading &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Getting our code reviewed by a pro is a great way of improving code quality but what happens if you don’t have access to a rockstar programmer? You do the next best thing and grab a ‘lint’ for that language.</p>
<p>Today, I’d like to talk a little about <a href="http://csslint.net/">CSSLint</a>, a recently released code analysis tool for, you guessed it, CSS. Join me after the jump!</p>
<p><span id="more-318"></span></p>
<hr />
<h2>What Exactly is a Lint?</h2>
<p>Let’s hit Wikipedia for a definition:</p>
<blockquote><p>Lint is a tool that flags suspicious usage in software written in any computer language.</p></blockquote>
<p>Basically, a lint looks at our code and checks for bad programming practices. Undefined variables, inefficient constructs, things like that.</p>
<p>You’re probably wondering why you’d ever need such a tool. Let’s face it: not all of us possess supreme knowledge of what we’re working with or have the luxury of getting our code peer reviewed. In these cases, sticking our code in a lint is the next best option. And unlike clean up tools, lint spits out tidbits about your code and how to improve it.</p>
<hr />
<h2>Introducing CSSLint</h2>
<p>Created by <a href="http://www.nczonline.net/">Nicholas Zakas</a> and <a href="http://www.stubbornella.org/">Nicole Sullivan</a>, CSSLint is an open source tool that checks your syntax against a set of predefined rules to root out possible inefficiencies and make sure that your presentation works as expected with little surprises.</p>
<p>After heading over to the CSSLint site, you can merely paste in your source CSS and choose which rules you’d like enforced. Hit the lint button and CSSLint will start eroding your smugness.</p>
<p>If you’re a Node junkie like me, there’s a version for that as well. Just type in <code>sudo npm install -g csslint</code> and you’re good to go!</p>
<hr />
<h2>The CSS Lint Rules</h2>
<p>Let’s take a quick look at the rules that CSSLint enforces.</p>
<ul>
<li>Parsing errors should be fixed</li>
<li>Don’t use adjoining classes</li>
<li>Remove empty rules</li>
<li>Use correct properties for a display</li>
<li>Don’t use too many floats</li>
<li>Don’t use too many web fonts</li>
<li>Don’t use too may font-size declarations</li>
<li>Don’t use IDs in selectors</li>
<li>Don’t qualify headings</li>
<li>Heading styles should only be defined once</li>
<li>Zero values don’t need units</li>
<li>Vendor prefixed properties should also have the standard</li>
<li>CSS gradients require all browser prefixes</li>
<li>Avoid selectors that look like regular expressions</li>
<li>Beware of broken box models</li>
<li>Don’t use @import</li>
<li>Don’t use !important</li>
<li>Include all compatible vendor prefixes</li>
<li>Avoid duplicate properties</li>
</ul>
<p>If you’re anything like me, a few of the rules must have had you flummoxed.</p>
<hr />
<h2>Do the Rules make Sense?</h2>
<p>Quite frankly, yes, no and everything in between.</p>
<p>After lurking at a number of discussion boards and IRC rooms, I found out that many developers seem to be in uproar over the rules and maybe right so. Let me attempt to explain why most of the rules make sense but others do not.</p>
<hr />
<h3>The Controversial Rules</h3>
<h4>Don’t use IDs in selectors</h4>
<blockquote><p>IDs shouldn’t be used in selectors because these rules are too tightly coupled with the HTML and have no possibility of reuse. It’s much preferred to use classes in selectors and then apply a class to an element in the page.</p></blockquote>
<p>This one struck a nerve with a lot of developers since we’re quite accustomed to assigning IDs for the main structural components of a layout like the header and footer.</p>
<p>CSSLint argues that the styling for such elements, by definition, can’t be directly reused. If you want dual sidebars on your page, a class lets you reuse styling while an ID will not.</p>
<p>Keep in mind that just because a class can be reused doesn’t mean it has to be. Unique classes are perfectly acceptable and a swell way to reuse styling if the need arises.</p>
<hr />
<h4>Don’t qualify headings</h4>
<blockquote><p>Heading elements (h1-h6) should be defined as top-level styles and not scoped to particular areas of the page.</p></blockquote>
<p>Most developers, including me, have gotten used to writing context sensitive headers. As in, we define separate styling for headers depending on, say, which page it is being displayed on. An argument in favor of this approach is that it moves all cruft from the markup to the stylesheet. You can merely define a tag and let the CSS cascade accordingly.</p>
<p>CSSLint argues that such an approach compromises the predictability of your design. If someone else were to pick up your design and tried putting in a heading somewhere, he/she would need to be aware of the context and placement of the element. With headings defined unconditionally, he or she can use a heading anywhere confident of its presentation regardless of its parents.</p>
<hr />
<h4>Heading styles should only be defined once</h4>
<blockquote><p>Heading elements (h1-h6) should have exactly one rule on a site.</p></blockquote>
<p>An extension of the rule above to improve predictability of presentation. Right or wrong, keep in mind that this basically excludes including some sort of reset code within your stylesheet. Every reset sheet works on your headings as well and thus CSSLint will mark it as an error.</p>
<hr />
<h3>The Questionable Rules</h3>
<h4>Don’t use adjoining classes</h4>
<blockquote><p>Adjoining classes look like .foo.bar. While technically allowed in CSS, these aren’t handled properly by Internet Explorer 6 and earlier.</p></blockquote>
<p>With this rule enabled, CSSLint flags rules like <code>.nav.red</code>, with the official reason being that Internet Explorer 6 and below don’t play well with the selector. I respect the developers but I have to disagree here. Just because it doesn’t work with <em>Internet ‘Dev-buster’ Explorer 6</em> is not a great reason to stop working with a useful feature.</p>
<hr />
<h4>Beware of broken box models</h4>
<blockquote><p>Borders and padding add space outside of an element’s content. Setting width or height along with borders and padding is usually a mistake because you won’t get the visual result you’re looking for. CSS Lint warns when a rule uses width or height in addition to padding and/or border.</p></blockquote>
<p>The box model maybe broken but almost every front end developer I know is intimately aware of the shortcomings and how to overcome the disparities with implementation. Are we really ready to give up a layer of control because some older browsers have a different implementation?</p>
<hr />
<h4>Don’t use too many web fonts</h4>
<blockquote><p>Using web fonts comes with performance implications as font files can be quite large and some browsers block rendering while downloading them. For this reason, CSS Lint will warn you when there are more than five web fonts in a style sheet.</p></blockquote>
<p>I don’t foresee a situation where I’d be using more than five fonts in a page but I feel that dipping into this territory is a bit questionable. If anything, this is a design flaw than a development flaw. If a developer is referencing five separate fonts in his stylesheet, chances are, it ain’t by accident.</p>
<hr />
<h4>Don’t use too many floats i.e. abstract the functionality away</h4>
<blockquote><p>CSS Lint simply checks to see if you’ve used float more than 10 times, and if so, displays a warning. Using this many floats usually means you need some sort of abstraction to achieve the layout.</p></blockquote>
<p>While I concur with the creators’ argument that having more than ten instances of float is a bad idea, I also feel that this will affect the markup once past a given size.</p>
<p>For example, in a situation where you’d want to float two elements, traditionally you’d use:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;container-1&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;container-2&quot;&gt;&lt;/div&gt;
</pre>
<p>and the styling, by traditional methods.</p>
<pre class="brush: css; title: ; notranslate">
.container-1 { width: 70%; float: left; }
.container-2 { width: 30%; float: left; }
</pre>
<p>The CSSLint method would be abstracting the float like so:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;container-1 float&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;container-2 float&quot;&gt;&lt;/div&gt;
</pre>
<p>and styling like so:</p>
<pre class="brush: css; title: ; notranslate">
.container-1 { width: 70%; }
.container-2 { width: 30%; }
.float { float: left;}
</pre>
<p>While I agree that this is a viable approach, I feel that the markup will get significantly crowded once you try to abstract more away. I’d rather see a class containing most of its styling in one place than clutter the markup with 10+ classes. Again, I feel that this is a subjective topic.</p>
<h3>The Obvious Rules</h3>
<ul>
<li>Remove empty rules</li>
<li>Avoid duplicate properties</li>
<li>Zero values don’t need units</li>
<li>Vendor prefixed properties should also have the standard</li>
<li>Parsing errors should be fixed</li>
<li>Include all compatible vendor prefixes</li>
<li>… rest of the rules</li>
</ul>
<p>All of the rules above adhere to the current standard practices. Sure, some of the rules have little real world significance, like zero values not needing units, or will be caught by a decent IDE, like parsing errors, but nevertheless these are good rules to have in a CSS test suite.</p>
<hr />
<h2>A Few Concerns</h2>
<p>CSSLint is, no doubt, written by developers with great credentials and is definitely going to help a lot of developers and designers down the road.</p>
<p>What I find a little irksome is that a lot of the controversial rules come from Object Oriented CSS, a CSS framework intended to let developers write maintainable CSS. While I have nothing against the framework, and its paradigm, you’d have to agree that it’s a way of doing things, not <em>the</em> way to do things.</p>
<p>As opposed to JSLint where I feel like all the rules make sense, with CSSLint, it feels like I’m being told that one style of writing CSS is right and the others are wrong. It’d be like someone asking me to give up the Beatles because Rolling Stones is their preferred band.</p>
<hr />
<h2>It’s Only a Tool</h2>
<p>Of course, we, as a group, tend to be rather clingy when it comes to our code. We don’t enjoy hearing that our code could have *gasp* potential issues or be written in an entirely different way.</p>
<p>The main thing to make a note of here is that CSSLint is, ultimately, a tool. It merely lets you know that some of the areas <em>may</em> have errors.</p>
<p>CSSLint doesn’t have to be the iron fist around which you base your entire ego on. There’s no reason to bend over backwards to avoid a warning if you know precisely what you’re doing.</p>
<hr />
<h2>So, Should you Start Using CSSLint?</h2>
<p>In CSS, as in integral calculus, there are many solutions to a given problem. There necessarily isn’t a ‘best’ way to do things — you may favor readability while I may favor efficiency. What’s important is that you realize that each and everyone of us have our unique way of doing things.</p>
<p>If you don’t have the same perspectives towards solving a problem, you may disagree with another approach and may even find it questionable.</p>
<p>Having said that, there’s never a good reason for not learning new things. Looking at problems from the perspective of another developer is a great way to see if you can learn something new.</p>
<hr />
<h2>Wrapping Up</h2>
<p>What do you think about CSSLint? Find it useful? Confusing? Has it helped with your real world problems? Let us know in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ideascart.com/learn/all-about-csslint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sorting Multi-Dimensional Arrays in PHP</title>
		<link>http://www.ideascart.com/learn/sorting-multi-dimensional-arrays-in-php/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sorting-multi-dimensional-arrays-in-php</link>
		<comments>http://www.ideascart.com/learn/sorting-multi-dimensional-arrays-in-php/#comments</comments>
		<pubDate>Fri, 01 Jul 2011 03:02:06 +0000</pubDate>
		<dc:creator>Marwan Arafah</dc:creator>
				<category><![CDATA[Learn]]></category>
		<category><![CDATA[Arrays]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Sorting]]></category>

		<guid isPermaLink="false">http://www.ideascart.com/?p=304</guid>
		<description><![CDATA[Every time I need to sort a multi-dimensional array in PHP, I have to remind myself how to do it. It&#8217;s not quite as quick and easy to look up &#8230;</p><p><a class="read_more" href="http://www.ideascart.com/learn/sorting-multi-dimensional-arrays-in-php/" title="Continue Reading &#187;" rel="bookmark">Continue Reading &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Every time I need to sort a multi-dimensional array in PHP, I have to remind myself how to do it. It&#8217;s not quite as quick and easy to look up as most things, so I&#8217;m going to blog a quick example. I&#8217;ve always felt like there must be a better way to do this, so please let me know if there is, and I&#8217;ll update this post accordingly.</p>
<p>Here&#8217;s a simple array of users:</p>
<pre class="brush: php; title: ; notranslate">
$users = array();

$users[] = array('username' =&gt; 'shiflett', 'name' =&gt; 'Chris Shiflett');
$users[] = array('username' =&gt; 'dotjay', 'name' =&gt; 'Jon Gibbins');
$users[] = array('username' =&gt; 'a', 'name' =&gt; 'Andrei Zmievski');
</pre>
<p><span id="more-304"></span><br />
There are a few different ways to create this array. Here&#8217;s the output of <code>print_r($users)</code>, so you clearly understand the structure:</p>
<pre class="brush: plain; title: ; notranslate">
Array
(
    [0] =&gt; Array
        (
            [username] =&gt; shiflett
            [name] =&gt; Chris Shiflett
        )

    [1] =&gt; Array
        (
            [username] =&gt; dotjay
            [name] =&gt; Jon Gibbins
        )

    [2] =&gt; Array
        (
            [username] =&gt; a
            [name] =&gt; Andrei Zmievski
        )

)
</pre>
<p>If I want to sort by username, I first create a separate array of usernames:</p>
<pre class="brush: php; title: ; notranslate">
$usernames = array();

foreach ($users as $user) {
    $usernames[] = $user['username'];
}
</pre>
<p>I then use <code>array_multisort()</code>:</p>
<pre class="brush: php; title: ; notranslate">
array_multisort($usernames, SORT_ASC, $users);
</pre>
<p>Here&#8217;s the output of <code>print_r($users)</code> after sorting by username:</p>
<pre class="brush: plain; title: ; notranslate">
Array
(
    [0] =&gt; Array
        (
            [username] =&gt; a
            [name] =&gt; Andrei Zmievski
        )

    [1] =&gt; Array
        (
            [username] =&gt; dotjay
            [name] =&gt; Jon Gibbins
        )

    [2] =&gt; Array
        (
            [username] =&gt; shiflett
            [name] =&gt; Chris Shiflett
        )

)
</pre>
<p>To sort the array by name instead, I&#8217;d do something very similar:</p>
<pre class="brush: php; title: ; notranslate">
$names = array();

foreach ($users as $user) {
    $names[] = $user['name'];
}

array_multisort($names, SORT_ASC, $users);
</pre>
<p>Here&#8217;s the output of <code>print_r($users)</code> after sorting by name:</p>
<pre class="brush: plain; title: ; notranslate">
Array
(
    [0] =&gt; Array
        (
            [username] =&gt; a
            [name] =&gt; Andrei Zmievski
        )

    [1] =&gt; Array
        (
            [username] =&gt; shiflett
            [name] =&gt; Chris Shiflett
        )

    [2] =&gt; Array
        (
            [username] =&gt; dotjay
            [name] =&gt; Jon Gibbins
        )

)
</pre>
<p>There are many more uses of <code>array_multisort()</code>, and there are many other useful sorting functions. Please feel free to share some of your favorites in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ideascart.com/learn/sorting-multi-dimensional-arrays-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using GROUP_CONCAT in MySQL</title>
		<link>http://www.ideascart.com/learn/using-group_concat-in-mysql/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=using-group_concat-in-mysql</link>
		<comments>http://www.ideascart.com/learn/using-group_concat-in-mysql/#comments</comments>
		<pubDate>Sat, 18 Jun 2011 10:49:36 +0000</pubDate>
		<dc:creator>Marwan Arafah</dc:creator>
				<category><![CDATA[Learn]]></category>
		<category><![CDATA[DataBase]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.ideascart.com/?p=288</guid>
		<description><![CDATA[If we have two tables with the following structure: Then you can use &#8216;GROUP_CONCAT&#8217; as following: And the result would be: user_id ids 1 2,3,6,7 2 1,3,4,7,8 3 1,2,6,8 What &#8230;</p><p><a class="read_more" href="http://www.ideascart.com/learn/using-group_concat-in-mysql/" title="Continue Reading &#187;" rel="bookmark">Continue Reading &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<h2>If we have two tables with the following structure:</h2>
<pre class="brush: sql; title: Member Table; notranslate">
CREATE TABLE
	member(user_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20) NOT NULL);
INSERT INTO
	member (name)
VALUES
	('Vasim'),
	('Alice'),
	('Sumit'),
	('Sunil'),
	('Vipul'),
	('Pravin'),
	('Nikhil'),
	('Harshad');
</pre>
<p><span id="more-288"></span></p>
<pre class="brush: sql; title: Friendships Table; notranslate">
CREATE TABLE
	friendships(friendship_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, initiator_id INT NOT NULL, reciprocator_id INT NOT NULL, UNIQUE(initiator_id,reciprocator_id));
INSERT INTO
	friendships
VALUES
	(1,1,2),
	(2,1,3),
	(5,1,6),
	(6,1,7),
	(9,2,1),
	(10,2,3),
	(13,2,4),
	(14,2,7),
	(17,2,8),
	(19,3,1),
	(20,3,2),
	(23,3,6),
	(24,3,8);
</pre>
<hr />
<h2>Then you can use &#8216;GROUP_CONCAT&#8217; as following:</h2>
<pre class="brush: sql; title: ; notranslate">
SELECT
	m.user_id, GROUP_CONCAT(f.reciprocator_id) as ids
FROM
	friendships f
JOIN
	member m
ON
	m.user_id = f.initiator_id
WHERE
	1=1
GROUP BY
	m.user_id;
</pre>
<h3>And the result would be:</h3>
<div>
<table>
<tr>
<th>user_id</th>
<th>ids</th>
</tr>
<tr>
<td>1</td>
<td>2,3,6,7</td>
</tr>
<tr>
<td>2</td>
<td>1,3,4,7,8</td>
</tr>
<tr>
<td>3</td>
<td>1,2,6,8</td>
</tr>
</table>
</div>
<hr />
What if you want to select user names too instead of just IDs? you can do this as following:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT
	m1.name, GROUP_CONCAT(m2.name) friends
FROM
	friendships f
LEFT JOIN
	member m1
ON
	m1.user_id = f.initiator_id
LEFT JOIN
	member m2
ON
	m2.user_id = f.reciprocator_id
GROUP BY
	name;
</pre>
<h3>And the result would be:</h3>
<div>
<table>
<tr>
<th>name</th>
<th>friends</th>
</tr>
<tr>
<td>Alice</td>
<td>Vasim,Sumit,Sunil,Nikhil,Harshad</td>
</tr>
<tr>
<td>Sumit</td>
<td>Vasim,Alice,Pravin,Harshad</td>
</tr>
<tr>
<td>Vasim</td>
<td>Nikhil,Alice,Sumit,Pravin</td>
</tr>
</table>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.ideascart.com/learn/using-group_concat-in-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DDL, DML, DCL and TCL Explanation and Examples</title>
		<link>http://www.ideascart.com/learn/ddl-dml-dcl-and-tcl-explanation-and-examples/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ddl-dml-dcl-and-tcl-explanation-and-examples</link>
		<comments>http://www.ideascart.com/learn/ddl-dml-dcl-and-tcl-explanation-and-examples/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 18:58:23 +0000</pubDate>
		<dc:creator>Marwan Arafah</dc:creator>
				<category><![CDATA[Learn]]></category>
		<category><![CDATA[DataBase]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.ideascart.com/?p=280</guid>
		<description><![CDATA[DDL: DDL is abbreviation of Data Definition Language. It is used to create and modify the structure of database objects in database. Examples: CREATE: to create objects in the database &#8230;</p><p><a class="read_more" href="http://www.ideascart.com/learn/ddl-dml-dcl-and-tcl-explanation-and-examples/" title="Continue Reading &#187;" rel="bookmark">Continue Reading &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<h2>DDL:</h2>
<p>DDL is abbreviation of <strong>Data Definition Language</strong>. It is used to create and modify the structure of database objects in database.</p>
<p><strong>Examples: </strong></p>
<p><code>CREATE</code>: to create objects in the database<br />
<code>ALTER</code>: alters the structure of the database<br />
<code>DROP</code>: delete objects from the database<br />
<code>TRUNCATE</code>: remove all records from a table, including all spaces allocated for the records are removed<br />
<code>COMMENT</code>: add comments to the data dictionary<br />
<code>RENAME</code>: rename an object<br />
<span id="more-280"></span></p>
<hr />
<h2>DML:</h2>
<p>DML is abbreviation of <strong>Data Manipulation Language</strong>. It is used to retrieve, store, modify, delete, insert and update data in database.</p>
<p><strong>Examples: </strong></p>
<p><code>SELECT</code>: retrieve data from the a database<br />
<code>INSERT</code>: insert data into a table<br />
<code>UPDATE</code>: updates existing data within a table<br />
<code>DELETE</code>: deletes all records from a table, the space for the records remain<br />
<code>MERGE</code>: UPSERT operation (insert or update)<br />
<code>CALL</code>: call a PL/SQL or Java subprogram<br />
<code>EXPLAIN PLAN</code>: explain access path to data<br />
<code>LOCK TABLE</code>: control concurrency</p>
<hr />
<h2>DCL:</h2>
<p>DCL is abbreviation of <strong>Data Control Language</strong>. It is used to create roles, permissions, and referential integrity as well it is used to control access to database by securing it.</p>
<p><strong>Examples: </strong></p>
<p><code>GRANT</code>: gives user&#8217;s access privileges to database<br />
<code>REVOKE</code>: withdraw access privileges given with the GRANT command</p>
<hr />
<h2>TCL:</h2>
<p>TCL is abbreviation of <strong>Transactional Control Language</strong>. It is used to manage different transactions occurring within a database.</p>
<p><strong>Examples: </strong></p>
<p><code>COMMIT</code>: save work done<br />
<code>SAVEPOINT</code>: identify a point in a transaction to which you can later roll back<br />
<code>ROLLBACK</code>: restore database to original since the last COMMIT<br />
<code>SET TRANSACTION</code>: Change transaction options like isolation level and what rollback segment to use</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ideascart.com/learn/ddl-dml-dcl-and-tcl-explanation-and-examples/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Five common PHP Design Patterns</title>
		<link>http://www.ideascart.com/learn/five-common-php-design-patterns/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=five-common-php-design-patterns</link>
		<comments>http://www.ideascart.com/learn/five-common-php-design-patterns/#comments</comments>
		<pubDate>Fri, 27 May 2011 15:45:44 +0000</pubDate>
		<dc:creator>Marwan Arafah</dc:creator>
				<category><![CDATA[Learn]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP5]]></category>

		<guid isPermaLink="false">http://www.ideascart.com/?p=257</guid>
		<description><![CDATA[Design patterns were introduced to the software community in Design Patterns, by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides (colloquially known as the &#8220;gang of four&#8221;). The core &#8230;</p><p><a class="read_more" href="http://www.ideascart.com/learn/five-common-php-design-patterns/" title="Continue Reading &#187;" rel="bookmark">Continue Reading &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Design patterns were introduced to the software community in <em>Design Patterns</em>,  by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides  (colloquially known as the &#8220;gang of four&#8221;). The core concept behind  design patterns, presented in the introduction, was simple. Over their  years of developing software, Gamma et al found certain patterns of  solid design emerging, just as architects designing houses and buildings  can develop templates for where a bathroom should be located or how a  kitchen should be configured. Having those templates, or <em>design patterns</em>, means they can design better buildings more quickly. The same applies to software.<br />
<span id="more-257"></span><br />
Design patterns not only present useful ways for  developing robust software faster but also provide a way of  encapsulating large ideas in friendly terms. For example, you can say  you&#8217;re writing a messaging system to provide for loose coupling, or you  can say you&#8217;re writing an <em>observer</em>, which is the name of that pattern.</p>
<p>It&#8217;s difficult to demonstrate the value of patterns using  small examples. They often look like overkill because they really come  into play in large code bases. This article can&#8217;t show huge  applications, so you need to think about ways to apply the principles of  the example &#8212; and not necessarily this exact code &#8212; in your larger  applications. That&#8217;s not to say that you shouldn&#8217;t use patterns in small  applications. Most good applications start small and become big, so  there is no reason not to start with solid coding practices like these.</p>
<p>Now that you have a sense of what design patterns are and  why they&#8217;re useful, it&#8217;s time to jump into five common patterns for PHP  V5.</p>
<hr />
<h2>The factory pattern</h2>
<p>Many of the design patterns in the original <em>Design Patterns</em> book encourage <em>loose coupling</em>.  To understand this concept, it&#8217;s easiest to talk about a struggle that  many developers go through in large systems. The problem occurs when you  change one piece of code and watch as a cascade of breakage happens in  other parts of the system &#8212; parts you thought were completely  unrelated.</p>
<p>The problem is <em>tight coupling</em>. Functions and  classes in one part of the system rely too heavily on behaviors and  structures in other functions and classes in other parts of the system.  You need a set of patterns that lets these classes talk with each other,  but you don&#8217;t want to tie them together so heavily that they become  interlocked.</p>
<p>In large systems, lots of code relies on a few key  classes. Difficulties can arise when you need to change those classes.  For example, suppose you have a <code>User</code> class that reads from a  file. You want to change it to a different class that reads from the  database, but all the code references the original class that reads from  a file. This is where the factory pattern comes in handy.</p>
<p>The <em>factory pattern</em> is a class that has some methods that create objects for you. Instead of using <code>new</code> directly, you use the factory class to create objects. That way, if you  want to change the types of objects created, you can change just the  factory. All the code that uses the factory changes automatically.</p>
<p>Listing 1 shows an example of a factory class. The server  side of the equation comes in two pieces: the database, and a set of  PHP pages that let you add feeds, request the list of feeds, and get the  article associated with a particular feed.</p>
<pre class="brush: php; title: Listing 1. Factory1.php; notranslate">
interface IUser
{
  function getName();
}

class User implements IUser
{
  public function __construct( $id ) { }

  public function getName()
  {
    return &quot;Jack&quot;;
  }
}

class UserFactory
{
  public static function Create( $id )
  {
    return new User( $id );
  }
}

$uo = UserFactory::Create( 1 );
echo( $uo-&gt;getName().&quot;\n&quot; );
</pre>
<p>An interface called <code>IUser</code> defines what a user object should do. The implementation of <code>IUser</code> is called <code>User</code>, and a factory class called <code>UserFactory</code> creates <code>IUser</code> objects. This relationship is shown as UML in Figure 1.<br />
<strong>Figure 1. The factory class and its related IUser interface and user class</strong><br />
<img src="http://www.ibm.com/developerworks/library/os-php-designptrns/factory1.gif" alt="The factory class and its related IUser interface and user class" width="221" height="86" /></p>
<p>If you run this code on the command line using the <code>php</code> interpreter, you get this result:</p>
<pre class="brush: bash; title: ; notranslate">
% php factory1.php
Jack
%
</pre>
<p>The test code asks the factory for a <code>User</code> object and prints the result of the <code>getName</code> method.</p>
<p>A variation of the factory pattern uses factory methods.  These public static methods in the class construct objects of that type.  This approach is useful when creating an object of this type is  nontrivial. For example, suppose you need to first create the object and  then set many attributes. This version of the factory pattern  encapsulates that process in a single location so that the complex  initialization code isn&#8217;t copied and pasted all over the code base.</p>
<p>Listing 2 shows an example of using factory methods.</p>
<pre class="brush: php; title: Listing 2. Factory2.php; notranslate">
interface IUser
{
  function getName();
}

class User implements IUser
{
  public static function Load( $id )
  {
        return new User( $id );
  }

  public static function Create( )
  {
        return new User( null );
  }

  public function __construct( $id ) { }

  public function getName()
  {
    return &quot;Jack&quot;;
  }
}

$uo = User::Load( 1 );
echo( $uo-&gt;getName().&quot;\n&quot; );
</pre>
<p>This code is much simpler. It has only one interface, <code>IUser</code>, and one class called <code>User</code> that implements the interface. The <code>User</code> class has two static methods that create the object. This relationship is shown in UML in Figure 2.<br />
<strong>Figure 2. The IUser interface and the user class with factory methods</strong><br />
<img src="http://www.ibm.com/developerworks/library/os-php-designptrns/factory2.gif" alt="The IUser interface and the user class with factory methods" width="95" height="113" /></p>
<p>Running the script on the command line yields the same result as the code in Listing 1, as shown here:</p>
<pre class="brush: bash; title: ; notranslate">
% php factory2.php
Jack
%
</pre>
<p>As stated, sometimes such patterns can seem like overkill in small  situations. Nevertheless, it&#8217;s still good to learn solid coding forms  like these for use in any size of project.</p>
<hr />
<h2>The singleton pattern</h2>
<p>Some application resources are <em>exclusive</em> in that  there is one and only one of this type of resource. For example, the  connection to a database through the database handle is exclusive. You  want to share the database handle in an application because it&#8217;s an  overhead to keep opening and closing connections, particularly during a  single page fetch.</p>
<p>The singleton pattern covers this need. An object is a <em>singleton</em> if the application can include one and only one of that object at a  time. The code in Listing 3 shows a database connection singleton in PHP  V5.</p>
<pre class="brush: php; title: Listing 3. Singleton.php; notranslate">
require_once(&quot;DB.php&quot;);

class DatabaseConnection
{
  public static function get()
  {
    static $db = null;
    if ( $db == null )
      $db = new DatabaseConnection();
    return $db;
  }

  private $_handle = null;

  private function __construct()
  {
    $dsn = 'mysql://root:password@localhost/photos';
    $this-&gt;_handle =&amp; DB::Connect( $dsn, array() );
  }

  public function handle()
  {
    return $this-&gt;_handle;
  }
}

print( &quot;Handle = &quot;.DatabaseConnection::get()-&gt;handle().&quot;\n&quot; );
print( &quot;Handle = &quot;.DatabaseConnection::get()-&gt;handle().&quot;\n&quot; );
</pre>
<p>This code shows a single class called <code>DatabaseConnection</code>. You can&#8217;t create your own <code>DatabaseConnection</code> because the constructor is private. But you can get the one and only one <code>DatabaseConnection</code> object using the static <code>get</code> method. The UML for this code is shown in Figure 3.<br />
<strong>Figure 3. The database connection singleton</strong><br />
<img src="http://www.ibm.com/developerworks/library/os-php-designptrns/singleton.gif" alt="The database connection singleton" width="165" height="41" /></p>
<p>The proof in the pudding is that the database handle returned by the <code>handle</code> method is the same between two calls. You can see this by running the code on the command line.</p>
<pre class="brush: bash; title: ; notranslate">
% php singleton.php
Handle = Object id #3
Handle = Object id #3
%
</pre>
<p>The two handles returned are the same object. If you use the database  connection singleton across the application, you reuse the same handle  everywhere.</p>
<p>You could use a global variable to store the database  handle, but that approach only works for small applications. In larger  applications, avoid globals, and go with objects and methods to get  access to resources.</p>
<hr />
<h2>The observer pattern</h2>
<p>The observer pattern gives you another way to avoid tight  coupling between components. This pattern is simple: One object makes  itself observable by adding a method that allows another object, the <em>observer</em>,  to register itself. When the observable object changes, it sends a  message to the registered observers. What those observers do with that  information isn&#8217;t relevant or important to the observable object. The  result is a way for objects to talk with each other without necessarily  understanding why.</p>
<p>A simple example is a list of users in a system. The code  in Listing 4 shows a user list that sends out a message when users are  added. This list is watched by a logging observer that puts out a  message when a user is added.</p>
<pre class="brush: php; title: Listing 4. Observer.php; notranslate">
interface IObserver
{
  function onChanged( $sender, $args );
}

interface IObservable
{
  function addObserver( $observer );
}

class UserList implements IObservable
{
  private $_observers = array();

  public function addCustomer( $name )
  {
    foreach( $this-&gt;_observers as $obs )
      $obs-&gt;onChanged( $this, $name );
  }

  public function addObserver( $observer )
  {
    $this-&gt;_observers []= $observer;
  }
}

class UserListLogger implements IObserver
{
  public function onChanged( $sender, $args )
  {
    echo( &quot;'$args' added to user list\n&quot; );
  }
}

$ul = new UserList();
$ul-&gt;addObserver( new UserListLogger() );
$ul-&gt;addCustomer( &quot;Jack&quot; );
</pre>
<p>This code defines four elements: two interfaces and two classes. The <code>IObservable</code> interface defines an object that can be observed, and the <code>UserList</code> implements that interface to register itself as observable. The <code>IObserver</code> list defines what it takes to be an observer, and the <code>UserListLogger</code> implements that <code>IObserver</code> interface. This is shown in the UML in Figure 4.<br />
<strong>Figure 4. The observable user list and the user list event logger</strong><br />
<img src="http://www.ibm.com/developerworks/library/os-php-designptrns/observer.gif" alt="The observable user list and the user list event logger" width="414" height="99" /></p>
<p>If you run this on the command line, you see this output:</p>
<pre class="brush: bash; title: ; notranslate">
% php observer.php
'Jack' added to user list
%
</pre>
<p>The test code creates a <code>UserList</code> and adds the <code>UserListLogger</code> observer to it. Then the code adds a customer, and the <code>UserListLogger</code> is notified of that change.</p>
<p>It&#8217;s critical to realize that the <code>UserList</code> doesn&#8217;t know what the logger is going to do. There could be one or more  listeners that do other things. For example, you may have an observer  that sends a message to the new user, welcoming him to the system. The  value of this approach is that the <code>UserList</code> is ignorant of  all the objects depending on it; it focuses on its job of maintaining  the user list and sending out messages when the list changes.</p>
<p>This pattern isn&#8217;t limited to objects in memory. It&#8217;s the  underpinning of the database-driven message queuing systems used in  larger applications.</p>
<hr />
<h2>The chain-of-command pattern</h2>
<p>Building on the loose-coupling theme, the <em>chain-of-command</em> pattern routes a message, command, request, or whatever you like  through a set of handlers. Each handler decides for itself whether it  can handle the request. If it can, the request is handled, and the  process stops. You can add or remove handlers from the system without  influencing other handlers. Listing 5 shows an example of this pattern.</p>
<pre class="brush: php; title: Listing 5. Chain.php; notranslate">
interface ICommand
{
  function onCommand( $name, $args );
}

class CommandChain
{
  private $_commands = array();

  public function addCommand( $cmd )
  {
    $this-&gt;_commands []= $cmd;
  }

  public function runCommand( $name, $args )
  {
    foreach( $this-&gt;_commands as $cmd )
    {
      if ( $cmd-&gt;onCommand( $name, $args ) )
        return;
    }
  }
}

class UserCommand implements ICommand
{
  public function onCommand( $name, $args )
  {
    if ( $name != 'addUser' ) return false;
    echo( &quot;UserCommand handling 'addUser'\n&quot; );
    return true;
  }
}

class MailCommand implements ICommand
{
  public function onCommand( $name, $args )
  {
    if ( $name != 'mail' ) return false;
    echo( &quot;MailCommand handling 'mail'\n&quot; );
    return true;
  }
}

$cc = new CommandChain();
$cc-&gt;addCommand( new UserCommand() );
$cc-&gt;addCommand( new MailCommand() );
$cc-&gt;runCommand( 'addUser', null );
$cc-&gt;runCommand( 'mail', null );
</pre>
<p>This code defines a <code>CommandChain</code> class that maintains a list of <code>ICommand</code> objects. Two classes implement the <code>ICommand</code> interface &#8212; one that responds to requests for mail and another that responds to adding users. The UML is shows in Figure 5.<br />
<strong>Figure 5. The command chain and its related commands</strong><br />
<img src="http://www.ibm.com/developerworks/library/os-php-designptrns/chain.gif" alt="The command chain and its related commands" width="359" height="121" /></p>
<p>If you run the script, which contains some test code, you see the following output:</p>
<pre class="brush: bash; title: ; notranslate">
% php chain.php
UserCommand handling 'addUser'
MailCommand handling 'mail'
%
</pre>
<p>The code first creates a <code>CommandChain</code> object and adds  instances of the two command objects to it. It then runs two commands to  see who responds to those commands. If the name of the command matches  either <code>UserCommand</code> or <code>MailCommand</code>, the code falls through and nothing happens.</p>
<p>The chain-of-command pattern can be valuable in creating  an extensible architecture for processing requests, which can be applied  to many problems.</p>
<hr />
<h2>The strategy pattern</h2>
<p>The last design pattern we will cover is the <em>strategy</em> pattern. In this pattern, algorithms are extracted from complex classes  so they can be replaced easily. For example, the strategy pattern is an  option if you want to change the way pages are ranked in a search  engine. Think about a search engine in several parts &#8212; one that  iterates through the pages, one that ranks each page, and another that  orders the results based on the rank. In a complex example, all those  parts would be in the same class. Using the strategy pattern, you take  the ranking portion and put it into another class so you can change how  pages are ranked without interfering with the rest of the search engine  code.</p>
<p>As a simpler example, Listing 6 shows a user list class  that provides a method for finding a set of users based on a  plug-and-play set of strategies.</p>
<pre class="brush: php; title: Listing 6. Strategy.php; notranslate">
interface IStrategy
{
  function filter( $record );
}

class FindAfterStrategy implements IStrategy
{
  private $_name;

  public function __construct( $name )
  {
    $this-&gt;_name = $name;
  }

  public function filter( $record )
  {
    return strcmp( $this-&gt;_name, $record ) &lt;= 0;
  }
}

class RandomStrategy implements IStrategy
{
  public function filter( $record )
  {
    return rand( 0, 1 ) &gt;= 0.5;
  }
}

class UserList
{
  private $_list = array();

  public function __construct( $names )
  {
    if ( $names != null )
    {
      foreach( $names as $name )
      {
        $this-&gt;_list []= $name;
      }
    }
  }

  public function add( $name )
  {
    $this-&gt;_list []= $name;
  }

  public function find( $filter )
  {
    $recs = array();
    foreach( $this-&gt;_list as $user )
    {
      if ( $filter-&gt;filter( $user ) )
        $recs []= $user;
    }
    return $recs;
  }
}

$ul = new UserList( array( &quot;Andy&quot;, &quot;Jack&quot;, &quot;Lori&quot;, &quot;Megan&quot; ) );
$f1 = $ul-&gt;find( new FindAfterStrategy( &quot;J&quot; ) );
print_r( $f1 );

$f2 = $ul-&gt;find( new RandomStrategy() );
print_r( $f2 );
</pre>
<p>The UML for this code is shown in Figure 6.<br />
<strong>Figure 6. The user list and the strategies for selecting users</strong><br />
<img src="http://www.ibm.com/developerworks/library/os-php-designptrns/strategy.gif" alt="The user list and the strategies for selecting users" width="309" height="138" /></p>
<p>The <code>UserList</code> class is a wrapper around an array of names. It implements a <code>find</code> method that takes one of several strategies for selecting a subset of those names. Those strategies are defined by the <code>IStrategy</code> interface, which has two implementations: One chooses users randomly  and the other chooses all the names after a specified name. When you run  the test code, you get the following output:</p>
<pre class="brush: bash; title: ; notranslate">
% php strategy.php
Array
(
    [0] =&gt; Jack
    [1] =&gt; Lori
    [2] =&gt; Megan
)
Array
(
    [0] =&gt; Andy
    [1] =&gt; Megan
)
%
</pre>
<p>The test code runs the same user lists against two strategies and  shows the results. In the first case, the strategy looks for any name  that sorts after <code>J</code>, so you get Jack, Lori, and Megan. The  second strategy picks names randomly and yields different results every  time. In this case, the results are Andy and Megan.</p>
<p>The strategy pattern is great for complex data-management  systems or data-processing systems that need a lot of flexibility in  how data is filtered, searched, or processed.</p>
<hr />
<h2>Conclusions</h2>
<p>These are just a few of the most common design patterns used in PHP applications. Many more are demonstrated in the <em>Design Patterns</em> book. Don&#8217;t be put off by the mystique of architecture. Patterns are  great ideas you can use in any programming language and at any skill  level.</p>
<hr />
<h2>Resources</h2>
<ul>
<li> Wikipedia has a <a href="http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29">good article</a> on design patterns.</li>
<li> The C2 Wiki is another good place to look for information about design patterns like <a href="http://c2.com/cgi/wiki?ObserverPattern">observer</a>, <a href="http://c2.com/cgi/wiki?SingletonPattern">singleton</a>, and more.</li>
<li> The original <a href="http://www.amazon.com/gp/product/0201633612"> <em>Design Patterns</em> </a> book is a must-read for any engineer.</li>
<li> O&#8217;Reilly&#8217;s <a href="http://www.amazon.com/gp/product/0596007124"> <em>Head First Design Patterns</em> </a> is a lighter-weight way to get into design patterns.</li>
<li> The book <a href="http://www.amazon.com/gp/product/0596101392"> <em>PHP Hacks</em> </a> has several hacks for design patterns that extend beyond the examples shown here.</li>
<li> <a href="http://www.php.net/">PHP.net</a> is the central resource for PHP developers.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ideascart.com/learn/five-common-php-design-patterns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>11 More Things to Learn from the jQuery Source</title>
		<link>http://www.ideascart.com/learn/11-more-things-to-learn-from-the-jquery-source/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=11-more-things-to-learn-from-the-jquery-source</link>
		<comments>http://www.ideascart.com/learn/11-more-things-to-learn-from-the-jquery-source/#comments</comments>
		<pubDate>Fri, 27 May 2011 03:22:30 +0000</pubDate>
		<dc:creator>Marwan Arafah</dc:creator>
				<category><![CDATA[Learn]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Session]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://www.ideascart.com/?p=246</guid>
		<description><![CDATA[As a follow-up to his popular presentation from the jQuery conference, Paul continues with eleven more interesting notes and facts on jQuery. &#8230;</p><p><a class="read_more" href="http://www.ideascart.com/learn/11-more-things-to-learn-from-the-jquery-source/" title="Continue Reading &#187;" rel="bookmark">Continue Reading &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>As a follow-up to his popular presentation from the jQuery conference, Paul continues with eleven more interesting notes and facts on jQuery.</p>
<p><span id="more-246"></span></p>
<hr />
<span style="text-align:center; display: block;"><a href="http://www.ideascart.com/learn/11-more-things-to-learn-from-the-jquery-source/"><img src="http://img.youtube.com/vi/ARnp9Y8xgR4/2.jpg" alt="" /></a></span>
]]></content:encoded>
			<wfw:commentRss>http://www.ideascart.com/learn/11-more-things-to-learn-from-the-jquery-source/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5, CSS3 and Dom Performance</title>
		<link>http://www.ideascart.com/learn/html5-css3-and-dom-performance/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=html5-css3-and-dom-performance</link>
		<comments>http://www.ideascart.com/learn/html5-css3-and-dom-performance/#comments</comments>
		<pubDate>Fri, 27 May 2011 03:13:38 +0000</pubDate>
		<dc:creator>Marwan Arafah</dc:creator>
				<category><![CDATA[Learn]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[Dom]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://www.ideascart.com/?p=241</guid>
		<description><![CDATA[Paul Irish, from the Chrome Developer Relations team, walks through smart techniques to improve the performance of your app. He describes CSS reflows and how to avoid them, hardware accelerated &#8230;</p><p><a class="read_more" href="http://www.ideascart.com/learn/html5-css3-and-dom-performance/" title="Continue Reading &#187;" rel="bookmark">Continue Reading &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Paul Irish, from the Chrome Developer Relations team, walks through smart techniques to improve the performance of your app. He describes CSS reflows and how to avoid them, hardware accelerated CSS, animation optimization, web workers, benchmarking and build scripts.<br />
<span id="more-241"></span></p>
<hr />
<span style="text-align:center; display: block;"><a href="http://www.ideascart.com/learn/html5-css3-and-dom-performance/"><img src="http://img.youtube.com/vi/q_O9_C2ZjoA/2.jpg" alt="" /></a></span>
]]></content:encoded>
			<wfw:commentRss>http://www.ideascart.com/learn/html5-css3-and-dom-performance/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Best Web Development Books</title>
		<link>http://www.ideascart.com/learn/the-best-web-development-books/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-best-web-development-books</link>
		<comments>http://www.ideascart.com/learn/the-best-web-development-books/#comments</comments>
		<pubDate>Fri, 27 May 2011 00:52:34 +0000</pubDate>
		<dc:creator>Marwan Arafah</dc:creator>
				<category><![CDATA[Learn]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.ideascart.com/?p=230</guid>
		<description><![CDATA[Some people say web development books are dead. Why spend $40 when there’s a seemingly never-ending stream of information available for free on the web. Well, there’s absolutely validity to &#8230;</p><p><a class="read_more" href="http://www.ideascart.com/learn/the-best-web-development-books/" title="Continue Reading &#187;" rel="bookmark">Continue Reading &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Some people say web development books are dead. Why spend $40 when there’s a seemingly never-ending stream of information available for free on the web.<br />
Well, there’s absolutely validity to that statement, but the fact remains, nothing compares to curling up on a couch with a fully researched, definitive guide to a particular subject.</p>
<p>With that in mind, we’ve prepared a list of books that we feel are among the best of the best.<br />
<span id="more-230"></span></p>
<hr />
<h3>Jump to a Topic</h3>
<ul>
<li><a href="#section-php">PHP</a></li>
<li><a href="#section-js">JS</a></li>
<li><a href="#section-jquery">jQuery</a></li>
<li><a href="#section-html">HTML</a></li>
<li><a href="#section-wp">WordPress</a></li>
<li><a href="#section-css">CSS</a></li>
<li><a href="#section-misc">Miscellaneous</a></li>
</ul>
<hr />
<h2 id="section-php">PHP</h2>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://bit.ly/mdA1xv" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/phpsln.jpg" alt="Book Image" width="175" /></a></div>
<h3><a href="http://bit.ly/mdA1xv">PHP Solutions: Dynamic Web Design Made Easy</a></h3>
<p><strong>Author:</strong> <a href="http://foundationphp.com/">David Powers</a></p>
<p>“So why another PHP book? Well, not everyone who uses PHP is a programmer. PHP is the most common dynamic web language used by designers, if their web sites require dynamic functionality, and there are hordes of novice users who want to set up dynamic web sites.”</p>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://amzn.to/lXKD6P" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/phpab.jpg" alt="Book Image" width="175" /></a></div>
<h3><a href="http://amzn.to/lXKD6P">PHP  for Absolute Beginners</a></h3>
<p><strong>Author:</strong> <a href="http://www.copterlabs.com/">Jason Lengstorf</a></p>
<p>“PHP for Absolute Beginners starts at the very beginning stages of web programming, showing even the most inexperienced web developer, through examples, how to build a basic content management system. The book dives directly into writing web applications with accompanying explanation rather than explaining elements of the language and then showing examples.”</p>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://amzn.to/iEaKOm" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/phpcb.gif" alt="Book Image" width="175" /></a></div>
<h3><a href="http://amzn.to/iEaKOm">PHP Cookbook</a></h3>
<p><strong>Author:</strong> <a href="http://www.trachtenberg.com/">Adam Trachtenberg</a></p>
<p>“PHP Cookbook has a wealth of solutions for problems that you’ll face regularly. With topics that range from beginner questions to advanced web programming techniques, this guide contains practical examples — or “recipes” — for anyone who uses this scripting language to generate dynamic web content.”</p>
<hr />
<h2 id="section-js">JavaScript</h2>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://amzn.to/fr6c8z" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/js-for-webdevelopers.jpg" alt="Professional JavaScript for Web Developers" width="175" /></a></div>
<h3><a href="http://amzn.to/fr6c8z">Professional JavaScript for Web Developers</a></h3>
<p><strong>Author:</strong> <a href="http://www.nczonline.net/">Nicholas Zakas</a></p>
<p>“Starting at the beginning, the book explores how JavaScript originated and evolved into what it is today. A detailed discussion of the components that make up a JavaScript implementation follows, with specific focus on standards such as ECMAScript and the Document Object Model (DOM).”</p>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://amzn.to/injjqX" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/good-parts.jpg" alt="JavaScript - The Good Parts" width="175" /></a></div>
<h3><a href="http://amzn.to/injjqX">JavaScript – The Good Parts</a></h3>
<p><strong>Author:</strong> <a href="http://net.tutsplus.com">Douglas Crockford</a></p>
<p>“Most programming languages contain good and bad parts, but JavaScript has more than its share of the bad, having been developed and released in a hurry before it could be refined. This authoritative book scrapes away these bad features to reveal a subset of JavaScript that’s more reliable, readable, and maintainable than the language as a whole-a subset you can use to create truly extensible and efficient code.”</p>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://amzn.to/jbgwJR" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/oo-js.jpg" alt="Object-Oriented JavaScript" width="175" /></a></div>
<h3><a href="http://amzn.to/jbgwJR">Object-Oriented JavaScript</a></h3>
<p><strong>Author:</strong> <a href="http://net.tutsplus.com">Stoyan Stefanov</a></p>
<p>“Create scalable and reusable high-quality JavaScript applications and libraries using the concepts of object-oriented programming. This book is for the beginning to intermediate web developer who wants to solve web development problems with smart JavaScript. It does not assume any prior knowledge of JavaScript programming; however even if you already know some JavaScript, there will be plenty for you to learn here.”</p>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://amzn.to/mPfo1M" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/js-patterns.jpg" alt="JavaScript Patterns" width="175" /></a></div>
<h3><a href="http://amzn.to/mPfo1M">JavaScript Patterns</a></h3>
<p><strong>Author:</strong> <a href="http://net.tutsplus.com">Stoyan Stefanov</a></p>
<p>“What’s the best approach for developing an application with JavaScript? This book helps you answer that question with numerous JavaScript coding patterns and best practices. If you’re an experienced developer looking to solve problems related to objects, functions, inheritance, and other language-specific categories, the abstractions and code templates in this guide are ideal — whether you’re writing a client-side, server-side, or desktop application with JavaScript.”</p>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://amzn.to/lSadso" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/pjt.jpg" alt="Book Image" width="175" /></a></div>
<h3><a href="http://amzn.to/lSadso">Pro JavaScript Techniques</a></h3>
<p><strong>Author:</strong> <a href="http://ejohn.org/">John Resig</a></p>
<p>“This book addresses all the points above in detail – modern browser support (including information on Internet Explorer 7), Object-Oriented JavaScript, testing and debugging, Unobtrusive JavaScript techniques using DOM Scripting, Ajax, creating and using blocks of reusable code, and looking towards the future of JavaScript.”</p>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://amzn.to/iF4X70" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/j24.jpg" alt="JavaScript 24 Hour Trainer" width="175" /></a></div>
<h3><a href="http://amzn.to/iF4X70">JavaScript 24 Hour Trainer</a></h3>
<p><strong>Author:</strong> <a href="http://www.wdonline.com/blog/">Jeremy McPeak</a></p>
<p>“This unique book-and-DVD package shows you how to use JavaScript to make web pages more dynamic and interactive so that you can create a first-rate user experience. Packed with expertly written lessons, this must-have book-and-DVD set provides instructional demonstrations on the DVD that enhance your Java Script learning experience through tutorial demos and helpful examples.”</p>
<hr />
<h2 id="section-jquery">jQuery</h2>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://amzn.to/jXAN98" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/jqcb.jpg" alt="Book Image" width="175" /></a></div>
<h3><a href="http://amzn.to/jXAN98">jQuery Cookbook</a></h3>
<p><strong>Author:</strong> <a href="http://www.codylindley.com/">Cody Lindley</a></p>
<p>“Ideal for newcomers and JavaScript veterans alike, jQuery Cookbook starts with the basics and then moves to practical use cases with tested solutions to common web development hurdles. You also get recipes on advanced topics, such as methods for applying jQuery to large projects.”</p>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://jqueryenlightenment.com/" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/jqe.gif" alt="Book Image" width="175" /></a></div>
<h3><a href="http://jqueryenlightenment.com/">jQuery Enlightenment</a></h3>
<p><strong>Author:</strong> <a href="http://www.codylindley.com/">Cody Lindley</a></p>
<p>“jQuery Enlightenment was written to express, in short-order, the concepts essential to intermediate and advanced jQuery development. Its purpose is to instill in you, the reader, practices that jQuery developers take as common knowledge. Each chapter contains concepts essential to becoming a seasoned jQuery developer.”</p>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://amzn.to/lmyBgd" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/jqina.jpg" alt="Book Image" width="175" /></a></div>
<h3><a href="http://amzn.to/lmyBgd">jQuery in Action</a></h3>
<p><strong>Author:</strong> <a href="http://www.bibeault.org/resume/">Bear Bibeault</a></p>
<p>“jQuery in Action is a fast-paced introduction and guide. It shows you how to traverse HTML documents, handle events, perform animations, and add Ajax to your web pages. The book’s unique “lab pages” anchor the explanation of each new concept in a practical example. You’ll learn how jQuery interacts with other tools and frameworks and how to build jQuery plugins.”</p>
<hr />
<h2 id="section-html">HTML 5</h2>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://amzn.to/jaijnC" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/ihtml5.jpg" alt="Book Image" width="175" /></a></div>
<h3><a href="http://amzn.to/jaijnC">Introducing HTML5 </a></h3>
<p><strong>Author:</strong> <a href="http://www.brucelawson.co.uk/">Bruce Lawson</a></p>
<p>“Written by developers who have been using the new language for the past year in their work, this book shows you how to start adapting the language now to realize its benefits on today’s browsers. Rather than being just an academic investigation, it concentrates on the practical—the problems HTML5 can solve for you right away.”</p>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://amzn.to/la91SM" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/phtml5.jpg" alt="Book Image" width="175" /></a></div>
<h3><a href="http://amzn.to/la91SM">Pro HTML 5 Programming</a></h3>
<p><strong>Author:</strong> <a href="http://www.linkedin.com/in/peterlubbers">Peter Lubbers</a></p>
<p>“The biggest revolution since Ajax, Pro HTML 5 Programming: Powerful APIs for Richer Internet Application Development introduces the most revolutionary new feature of HTML 5, the ability to build Real-Time Web applications using Web Sockets. “</p>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://amzn.to/leh3S0" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/html5uar.jpg" alt="Book Image" width="175" /></a></div>
<h3><a href="http://amzn.to/leh3S0">HTML5: Up and Running </a></h3>
<p><strong>Author:</strong> <a href="http://diveintomark.org/">Mark Pilgrim</a></p>
<p>“With HTML5: Up &amp; Running, you’ll learn how this new version enables browsers to interact with JavaScript much more easily than before. “</p>
<hr />
<h2 id="section-wp">WordPress</h2>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://rockablepress.com/books/rockstar-wordpress-designer/" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/rockable-wordpress.jpg" alt="Rockable WordPress Designer" width="175" /></a></div>
<h3><a href="http://rockablepress.com/books/rockstar-wordpress-designer/">Rockable WordPress Designer</a></h3>
<p><strong>Author:</strong> <a href="http://envato.com">Collis Ta’eed and Harley Alexander </a></p>
<p>“Managing web content has always been tricky, but with WordPress, any web designer can have a flexible, free and powerful CMS to use not just on blogging projects, but on all sorts of websites. In How To Be a Rockstar WordPress Designer you will learn step by step how to take a straight HTML site and power it with WordPress.”</p>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://amzn.to/iiU69Q" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/diw.jpg" alt="Professional JavaScript for Web Developers" width="175" /></a></div>
<h3><a href="http://marketplace.tutsplus.com/item/digging-into-wordpress/122737">Digging into WordPress</a></h3>
<p><strong>Author:</strong> <a href="http://digwp.com">Chris Coyier and Jeff Starr</a></p>
<p>“There is much to learn about the World’s most popular publishing platform. Digging into WordPress is nearly 450 pages of taking you from your first steps of learning about WordPress all the way through maintaining a site throughout the years.”</p>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://amzn.to/k2tM06" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/wppd.png" alt="Book Image" width="175" /></a></div>
<h3><a href="http://amzn.to/k2tM06">Professional WordPress Plugin Development</a></h3>
<p><strong>Author:</strong> <a href="http://webdevstudios.com/">Brad Williams</a>, <a href="http://justintadlock.com/">Justin Tadlock</a>, <a href="http://planetozh.com/blog/">Ozh Richard</a></p>
<p>“As one of the most popular open source content management systems available today, WordPress boasts a framework that allows you to easily customize and extend it through plugins. This comprehensive book shows you how plugins work, reviews the tools and APIs available in WordPress, and demonstrates how to extend the functionality of WordPress with plugins.”</p>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://www.amazon.com/dp/0470560541" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/pwp.gif" alt="Book Image" width="175" /></a></div>
<h3><a href="http://www.amazon.com/dp/0470560541">Professional WordPress</a></h3>
<p><strong>Author:</strong> <a href="http://www.snowmanonfire.com/">Hal Stern</a></p>
<p>“An in-depth look at the internals of the WordPress system. As the most popular blogging and content management platform available today, WordPress is a powerful tool. This exciting book goes beyond the basics and delves into the heart of the WordPress system, offering overviews of the functional aspects of WordPress as well as plug-in and theme development.”</p>
<hr />
<h2 id="section-css">CSS</h2>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://fivesimplesteps.com/books/hardboiled-web-design" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/hwd.jpg" alt="Hardboiled Web design" width="175" /></a></div>
<h3><a href="http://fivesimplesteps.com/books/hardboiled-web-design">Hardboiled Web design</a></h3>
<p><strong>Author:</strong> <a href="http://net.tutsplus.com">Andy Clarke</a></p>
<p>“‘Hardboiled Web Design’ offers a fresh perspective on designing for the web — never compromising, always pushing boundaries. It strips markup to the bone and uses HTML5 and CSS3 to the maximum to help make your sites more adaptable to whatever the web might throw at them. “</p>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://amzn.to/fr6c8z" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/css-mastery2.jpg" alt="CSS Mastery" width="175" /></a></div>
<h3><a href="http://amzn.to/fr6c8z">CSS Mastery</a></h3>
<p><strong>Author:</strong> <a href="http://www.andybudd.com/">Andy Budd</a></p>
<p>“A book that brings together the most useful CSS techniques in one place, that focuses on real-world browser issues and that helps plug common gaps in people’s CSS knowledge.”</p>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://amzn.to/kXVxix" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/cssdg.jpg" alt="Book Image" width="175" /></a></div>
<h3><a href="http://www.amazon.com/dp/0596527330">CSS: The Definitive Guide</a></h3>
<p><strong>Author:</strong> <a href="http://amzn.to/kXVxix">Eric Meyer</a></p>
<p>“CSS: The Definitive Guide provides you with a comprehensive guide to CSS implementation, along with a thorough review of all aspects of CSS 2.1. Updated to cover Internet Explorer 7, Microsoft’s vastly improved browser, this new edition includes content on positioning, lists and generated content, table layout, user interface, paged media, and more. “</p>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://amzn.to/kcw2BY" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/csscb.jpg" alt="CSS Cookbook" width="175" /></a></div>
<h3><a href="http://amzn.to/kcw2BY">CSS Cookbook</a></h3>
<p><strong>Author:</strong> <a href="http://christopherschmitt.com/">Christopher Schmitt</a></p>
<p>“Learn how to solve the real problems you face with CSS. This cookbook offers hundreds of practical examples for using CSS to format your web pages, and includes code samples you can use right away. You’ll find exactly what you need, from the basics to complex hacks and workarounds.”</p>
<hr />
<h2 id="section-misc">Miscellaneous</h2>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://rockablepress.com/books/getting-good-with-git/" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/get-good-with-git.jpg" alt="Getting Good with Git" width="175" /></a></div>
<h3><a href="http://rockablepress.com/books/getting-good-with-git/">Getting Good with Git</a></h3>
<p><strong>Author:</strong> <a href="http://net.tutsplus.com/author/andrewburgess/">Andrew Burgess</a></p>
<p>“In this book, Andrew Burgess will take you from knowing nothing about source code management to being able to use Git proficiently. You’ll look at why you should use a version control system, why Git is better than the other options, and how to set up and use Git.”</p>
<hr />
<div style="clear: both; float:left; margin-right:20px; margin-bottom:20px;"><a href="http://amzn.to/kjCj8B" class="no_border"><img src="http://d2o0t5hpnwv4c1.cloudfront.net/969_cssMastery/regular-expressions-cookbook.jpg" alt="Regular Expressions Cookbook" width="175" /></a></div>
<h3><a href="http://amzn.to/kjCj8B">Regular Expressions Cookbook</a></h3>
<p><strong>Author:</strong> <a href="http://net.tutsplus.com">Jan Goyvaerts</a></p>
<p>“Whether you’re a novice or an experienced user, Regular Expressions Cookbook will help deepen your understanding of the tool. You’ll learn powerful new tricks, avoid language-specific gotchas, and save valuable time with this huge library of proven solutions to difficult, real-world problems.”</p>
<hr />
<h2>What Did We Miss?</h2>
<p>We’ve undoubtedly forgotten a handful of books, so let us know which books the list <strong>should</strong> include below.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ideascart.com/learn/the-best-web-development-books/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create WordPress Plugin using OOP Techniques</title>
		<link>http://www.ideascart.com/learn/create-wordpress-plugin-using-oop-techniques/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=create-wordpress-plugin-using-oop-techniques</link>
		<comments>http://www.ideascart.com/learn/create-wordpress-plugin-using-oop-techniques/#comments</comments>
		<pubDate>Thu, 26 May 2011 14:52:59 +0000</pubDate>
		<dc:creator>Marwan Arafah</dc:creator>
				<category><![CDATA[Learn]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Techniques]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WordPress Plugin]]></category>

		<guid isPermaLink="false">http://www.ideascart.com/?p=200</guid>
		<description><![CDATA[Object-oriented code, among other things, can help organize and add reusability to your code. In this tutorial, I will teach you the basics of writing a WordPress plugin using object &#8230;</p><p><a class="read_more" href="http://www.ideascart.com/learn/create-wordpress-plugin-using-oop-techniques/" title="Continue Reading &#187;" rel="bookmark">Continue Reading &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Object-oriented code, among other things, can help organize and add reusability to your code. In this tutorial, I will teach you the basics of writing a WordPress plugin using object oriented techniques. We’ll be using Dribbble’s API as an example for this tutorial. Ready?</p>
<hr />
<h2>What We’re Going to Learn:</h2>
<ul>
<li>Benefits of using OOP for WordPress plugins.</li>
<li>How to setup a shortcode.</li>
<li>How to setup a template tag.</li>
<li>How to enable shortcode in WordPress widgets.</li>
<li>Real-world example by using Dribbble’s API.</li>
</ul>
<p><span id="more-200"></span></p>
<hr />
<h2>Why Use OOP?</h2>
<p>Creating WordPress plugins with object oriented code is quite  efficient and tidy, when compared to using procedural code. It’s easier  to manage the code base, and expand it using inheritance techniques,  which can be particularly helpful when writing a large plugin.</p>
<hr />
<h2>Dribbble</h2>
<p>To write a WordPress plugin, we first need a sense of direction.  We’re going to write a plugin that will display the latest shots from <a href="http://dribbble.com/">Dribbble</a>, using their REST API. We’ll then add shortcode support for posts and widgets, and template tag for themes.</p>
<hr />
<h2>Step 1 &#8211; Setting up the Plugin Class</h2>
<p>Object oriented code is based on classes and methods (functions).  Let’s create our core class, which will interact with WordPress’ hooks  and filters</p>
<pre class="brush: php; title: ; notranslate">
class WPDribbble {
	public function __construct()
	{
	}
}

$wpDribbble = new WPDribbble();
</pre>
<p>PHP classes have a constructor function, <code>__construct</code>,  which is executed as soon as a new instance of a class is instantiated.  All WordPress hooks and filters will be registered under the constructor  of our plugin class. Lets push ahead and register a shortcode for our  plugin. The <code>add_shortcode()</code> function/hook will go under the constructor function.</p>
<p>The new instance of a class/object is registered using the <code>new</code> keyword. Refer to the last line in the code below.</p>
<pre class="brush: php; title: ; notranslate">
class WPDribbble {
	public function __construct()
	{
		add_shortcode('Dribbble', array($this, 'shortcode'));
	}

	public function shortcode()
	{
	}
}

$wpDribbble = new WPDribbble();
</pre>
<ul>
<li><strong>add_shortcode</strong> – The first parameter is the shortcode tag, and the second is the callback function.</li>
</ul>
<blockquote><p>Notice how we’re using an <code>array</code> in the callback function parameter? To register callback functions inside an object, we have to use an <code>array</code>.</p></blockquote>
<p>The first item of the array references the object, via <code>$this</code>. The second item in the <code>array</code> is the method name within the class. All hooks and filters have to be referenced like this when inside a class.</p>
<hr />
<h3>Still Confused?</h3>
<pre class="brush: php; title: ; notranslate">
# 1. Standard usage
add_shortcode('shortcode_name', 'shortcode_func');

function shortcode_func()
{
 // Contents of this function will execute when the blogger
 // uses the [shortcode_name] shortcode.
}

# 2. With PHP 5.3, we can pass an anonymous function.
add_shortcode('shortcode_name', function() {
   // Contents of this function will execute when the blogger
   // uses the [shortcode_name] shortcode.
});

#3. Within a class
class WPDribbble {
	public function __construct()
	{
		add_shortcode('Dribbble', array($this, 'shortcode'));
	}

	public function shortcode()
	{
           // Contents of this function will execute when the blogger
           // uses the [shortcode_name] shortcode.
	}
}
</pre>
<hr />
<h2>Step 2 &#8211; Dribbble API Class</h2>
<p>Since we currently do not require any fancy API functions, we’re  going to create a rather simple API wrapper for Dribbble. There is  already a library available for Dribbble, but, for the sake of this  tutorial, we’re going to write our own. It’ll help you understand the  concepts behind this tutorial.</p>
<p>We’re going to write a DribbbleAPI <code>object</code>, and register a <code>method</code> called <code>getPlayerShots()</code> to interact with Dribbble’s API and return an <code>array</code> of the latest shots.</p>
<p>Let’s create a new file for this class, called <code>DribbbleAPI.php</code></p>
<pre class="brush: php; title: ; notranslate">
class DribbbleAPI {
	// url to Dribbble api
	protected $apiUrl = 'http://api.dribbble.com/';

	// Dribbble username or user id
	protected $user;
}
</pre>
<p>Above, we’re setting up two class variables.</p>
<ul>
<li><strong>$apiUrl</strong> – The link to the Dribbble API, where the calls will be sent.</li>
<li><strong>$user</strong> – The username or user id of a Dribbble user. This value will be set from within the constructor (<code>__construct</code>) method.</li>
</ul>
<pre class="brush: php; title: ; notranslate">
class DribbbleAPI {
	// url to Dribbble api
	protected $apiUrl = 'http://api.dribbble.com/';

	// Dribbble username or user id
	protected $user;

	public function __construct($user)
	{
		$this-&gt;user = $user;
	}
}
</pre>
<p>The constructor is passed a <code>$user</code> variable, which is then passed on by the constructor to the class property, called <code>user</code>.</p>
<p>We prefix the property, or variable name with <code>public</code> to specify that the value of this property can be retrieved from outside of the <code>class</code>. If we instead wish to limit access to the property to only this <code>class</code>, and perhaps any <code>class</code>es that inherit from it, we’d use the <code>protected</code> prefix. This practice is referred to as encapsulation.</p>
<p>We have the base ready for our Dribbble API wrapper. Now, We’re going to write a new <code>method</code>, called <code>getPlayerShots()</code>. The purpose of this <code>method</code> will be to query the API and convert the result into an <code>array</code> for usage within our plugin.</p>
<pre class="brush: php; title: ; notranslate">
class DribbbleAPI {
	// url to Dribbble api
	protected $apiUrl = 'http://api.dribbble.com/';

	// Dribbble username or user id
	protected $user;

	public function __construct($user)
	{
		$this-&gt;user = $user;
	}

	public function getPlayerShots($perPage = 15)
	{
		$user = $this-&gt;user;

		$json = wp_remote_get($this-&gt;apiUrl . 'players/' . $user . '/shots?per_page=' . $perPage);

		$array = json_decode($json['body']);

		$shots = $array-&gt;shots;

		return $shots;
	}
}
</pre>
<p>The <code>getPlayerShots</code> function retrives the user from the class variable. It uses WordPress’  <code>wp_remote_get</code> function to query the Dribbble API. The API then responds to our query with a JSON string, which is then parsed into an <code>array</code> and sent back to the function using the <code>return</code> keyword.</p>
<p>This is all that we require from the API at the moment – simply an <code>array</code> of player shots. If we happen to require more functionality in the future, we can either add more <code>method</code>s to the current <code>class</code>, or create a new <code>class</code> that <a href="http://php.net/manual/en/keyword.extends.php">extend</a>s this one. Again, this is referred to as inheritance.</p>
<hr />
<h2>Step 3 – Integrating the <code>DribbbleAPI</code> Class</h2>
<p>This is the fun part; the freshly baked <code>DribbbleAPI</code> <code>class</code> will come into use. We’re going to loop through the shots retrived from the API, and generate an <code>html</code> list of shots, which will be passed on to the shortcode and the  template tag. During the loop, the full-sized Dribbble images will be  cached and saved in the plugin folder, and the thumbnails will be  generated using <a href="http://www.darrenhoyt.com/2008/04/02/timthumb-php-script-released/">TimThumb.</a></p>
<p>To determine if the full images are already stored locally, the <code>plugin path</code> is required. Also, to generate the thumbnails with <code>timthumb</code>, the <code>plugin url</code> is required. For this purpose, we’ll create two class variables called <code>pluginPath</code> and <code>pluginURL</code> in our <code>WPDribbble</code> class, and then set their values from within the constructor <code>method</code>.</p>
<hr />
<h3>Setting PluginPath and PluginUrl</h3>
<pre class="brush: php; title: ; notranslate">
class WPDribbble {
	protected $pluginPath;
	protected $pluginUrl;

	public function __construct()
	{
		// Set Plugin Path
		$this-&gt;pluginPath = dirname(__FILE__);

		// Set Plugin URL
		$this-&gt;pluginUrl = WP_PLUGIN_URL . '/wp-Dribbble';

		add_shortcode('Dribbble', array($this, 'shortcode'));
	}
</pre>
<hr />
<h3><code>getImages()</code> Method</h3>
<p>Create a new <code>method</code> within the <code>WPDribbble</code> <code>class</code>, called <strong>getImages</strong>.</p>
<blockquote><p>Inside a <code>class</code>, you can use generic names for functions.  They will not conflict with other plugins or WordPress’ built-in  functions, because they are under the <code>class</code> namespace.</p></blockquote>
<pre class="brush: php; title: ; notranslate">
public function getImages($user, $images = 3, $width = 50, $height = 50, $caption = true)
{
}
</pre>
<ul>
<li><strong>$user</strong> – Username or User ID of Dribbble. <code>$user</code> will be used when registering a new instance of the <code>DribbbleAPI</code> class.</li>
<li><strong>$images</strong> – Number of images to render. <code>$images</code> will be used when querying the API through the <code>getPlayerShots</code> method.</li>
<li><strong>$width and $height</strong> – Timthumb will be used to generate thumbnails.</li>
<li><strong>$caption</strong> – Option to render title of an image.</li>
</ul>
<p>Next, we’re going to include the <code>DribbbleAPI</code> class in the <code>getImages()</code> function,  and create a new instance of it to grab the images.</p>
<pre class="brush: php; title: ; notranslate">
public function getImages($user, $images = 3, $width = 50, $height = 50, $caption = true)
{
	include 'DribbbleAPI.php';

	$DribbbleAPI = new DribbbleAPI($user);
	$shots = $DribbbleAPI-&gt;getPlayerShots($images);

	if($shots) {
	}
}
</pre>
<p>The <code>$shots</code> variable in the code is populated with an <code>array</code> of three recent Dribbbles from the <code>$user</code>.</p>
<p>As mentioned previously, we’re going to loop through the <code>$shots</code> <code>array</code>,  and save the full size images locally for caching purposes. The cached  images will be used with TimThumb to serve the thumbnails. For storing  full-images and thumbnails generated by TimThumb, create two folders.  We’ll use <code>full-images/</code> for storing the full size images, and <code>cache/</code> for the thumbnails, since that is the default folder name for TimThumb.</p>
<p>The HTML for the list will be generated within the <code>$shots</code> loop.</p>
<pre class="brush: php; title: ; notranslate">
public function getImages($user, $images = 3, $width = 50, $height = 50, $caption = true)
{
	include 'DribbbleAPI.php';

	$DribbbleAPI = new DribbbleAPI($user);
	$shots = $DribbbleAPI-&gt;getPlayerShots($images);

	if($shots) {
		$html[] = '
&lt;ul class=&quot;wp-Dribbble&quot;&gt;';

		foreach($shots as $shot) {
			$image = $shot-&gt;image_url; // url of the image
			$fileName = $shot-&gt;id . '.png'; // generating a filename image_id.png

			if (!file_exists($this-&gt;pluginPath . '/full-images/' . $fileName)) { // check if the full image exists
				$rawImage = wp_remote_get($image); // get the full image
				$newImagePath = $this-&gt;pluginPath  . '/full-images/' . $fileName;
				$fp = fopen($newImagePath, 'x');
				fwrite($fp, $rawImage['body']); // save the full image
				fclose($fp);
			}

			// generate thumbnail url
			$localImage = $this-&gt;pluginUrl . '/timthumb.php?src=' . strstr($this-&gt;pluginPath, 'wp-content') . '/full-images/' . $fileName . '&amp;w=' . $width . '&amp;h=' . $height . '&amp;q=100';

			if($caption) { // if caption is true
				$captionHTML = '

' . $shot-&gt;title . '

';
			}

			// combine shot url, title and thumbnail to add to the ul list
			$html[] = '
	&lt;li class=&quot;wp-Dribbble-list&quot;&gt;&lt;a title=&quot;' . $shot-&gt;title . '&quot; href=&quot;' . $shot-&gt;url . '&quot;&gt;&lt;img src=&quot;' . $localImage . '&quot; alt=&quot;' . $shot-&gt;title . '&quot; /&gt;&lt;/a&gt;'.$captionHTML.'&lt;/li&gt;
';
		}

		$html[] = '&lt;/ul&gt;
';

		return implode(&quot;\n&quot;, $html);
	}
}
</pre>
<h3>Adding Classes</h3>
<p>It’s always a good idea to add classes to each element of your  plugin. This provides the advanced users of your plugin with the freedom  to customize it. Avoid using inline CSS for content that is generated  through your plugin.</p>
<hr />
<h2>Step 4 – Setting up the Shortcode</h2>
<blockquote><p>Shortcodes, as the name suggests, allows users to easily add complex content into blog posts.</p></blockquote>
<p>We already have the <code>add_shortcode</code> hook ready in our plugin class constructor. Now, we’re going to write the shortcode <code>method</code> inside our <code>class</code>, which will exract the shortcode attributes and return the Dribbble images by using the <code>getImages()</code> method.</p>
<p>We’ll be calling our shortcode <code>[Dribbble]</code>. As mentioned previously, the name of the shortcode is determined by the first parameter in the <code>add_shortcode</code> function. It will be used with the attributes required for the <code>getImages()</code> method. For example: <code>[Dribbble user=haris images=5 width=100 height=100 caption=true]</code>.</p>
<pre class="brush: php; title: ; notranslate">
public function shortcode($atts)
{
	// extract the attributes into variables
	extract(shortcode_atts(array(
		'images' =&gt; 3,
		'width' =&gt; 50,
		'height' =&gt; 50,
		'caption' =&gt; true,
	), $atts));

	// pass the attributes to getImages function and render the images
	return $this-&gt;getImages($atts['user'], $images, $width, $height, $caption);
}
</pre>
<h3>Add Shortcode support for WordPress Widgets</h3>
<p>By default, WordPress widgets don’t support shortcodes, however, by using the <code>widget_text</code> filter, we can force shortcode support in WordPress widgets.</p>
<p>We can add the filter in our <code>WPDribbble</code> object constructor.</p>
<pre class="brush: php; title: ; notranslate">
public function __construct()
{
	// Set Plugin Path
	$this-&gt;pluginPath = dirname(__FILE__);

	// Set Plugin URL
	$this-&gt;pluginUrl = WP_PLUGIN_URL . '/wp-Dribbble';

	add_shortcode('Dribbble', array($this, 'shortcode'));

	// Add shortcode support for widgets
	add_filter('widget_text', 'do_shortcode');
}
</pre>
<h2>Step 5 Setting up the Template Tag</h2>
<p>The template tag can be used directly in WordPress themes. The basic  purpose of the template tag will be to create a new instance of our <code>WPDribbble</code> class, and call the <code>getImages()</code> method. The template tag will be a simple PHP function and it has to be registered outside the plugin <code>class</code>.  It needs to have a unique name; otherwise, it will conflict with  functions / plugins with similiar name. Since our plugin is called <code>WP-Dribbble</code>, we’ll call the template tag, <code>wp_Dribbble()</code>.</p>
<pre class="brush: php; title: ; notranslate">
function wp_Dribbble($user, $images = 3, $width = 50, $height = 50, $caption = true)
{
	$wpDribbble = new WPDribbble;
	echo $wpDribbble-&gt;getImages($user, $images, $width, $height, $caption);
}
</pre>
<hr />
<h2>Voila!</h2>
<p>Congratulations! You have successfully written a WordPress plugin with OOP. If you have any questions, leave a comment below, and we will do our best to help you.</p>
<p><strong>Source:</strong></p>
<ol>
<li><strong>Nettuts:</strong> <a title="Create WordPress Plugins with OOP Techniques<br />
" href="http://net.tutsplus.com/tutorials/wordpress/create-wordpress-plugins-with-oop-techniques/" target="_blank">Create WordPress Plugins with OOP Techniques</a>.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.ideascart.com/learn/create-wordpress-plugin-using-oop-techniques/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Life Without Limbs &#8211; Nick Vujicic</title>
		<link>http://www.ideascart.com/blog/life-without-limbs-nick-vujicic/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=life-without-limbs-nick-vujicic</link>
		<comments>http://www.ideascart.com/blog/life-without-limbs-nick-vujicic/#comments</comments>
		<pubDate>Tue, 17 May 2011 21:13:51 +0000</pubDate>
		<dc:creator>Marwan Arafah</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Inspirational]]></category>
		<category><![CDATA[Speech]]></category>

		<guid isPermaLink="false">http://www.ideascart.com/?p=188</guid>
		<description><![CDATA[Feeling disappointed? Can&#8217;t help yourself get out of this anymore? Then please watch Nick Vujicic speaking in this video, and how can he use things he miss to make people &#8230;</p><p><a class="read_more" href="http://www.ideascart.com/blog/life-without-limbs-nick-vujicic/" title="Continue Reading &#187;" rel="bookmark">Continue Reading &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Feeling disappointed?</p>
<p>Can&#8217;t help yourself get out of this anymore?</p>
<p>Then please watch Nick Vujicic speaking in this video, and how can he use things he miss to make people understand the meaning of life:</p>
<p><span id="more-188"></span></p>
<hr />
<span style="text-align:center; display: block;"><a href="http://www.ideascart.com/blog/life-without-limbs-nick-vujicic/"><img src="http://img.youtube.com/vi/xYWPLxVJca0/2.jpg" alt="" /></a></span>
]]></content:encoded>
			<wfw:commentRss>http://www.ideascart.com/blog/life-without-limbs-nick-vujicic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>152 Free Sticker PNG Icons</title>
		<link>http://www.ideascart.com/design/152-free-sticker-png-icons/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=152-free-sticker-png-icons</link>
		<comments>http://www.ideascart.com/design/152-free-sticker-png-icons/#comments</comments>
		<pubDate>Tue, 17 May 2011 11:12:10 +0000</pubDate>
		<dc:creator>Marwan Arafah</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Icons]]></category>
		<category><![CDATA[PNG]]></category>

		<guid isPermaLink="false">http://www.ideascart.com/?p=170</guid>
		<description><![CDATA[A Pack of 152 Sticker PNG icons, contains 16, 32, 48, 64, 128, 256, and 512 variants. &#8230;</p><p><a class="read_more" href="http://www.ideascart.com/design/152-free-sticker-png-icons/" title="Continue Reading &#187;" rel="bookmark">Continue Reading &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p><strong>Preview:</strong></p>
<p><img class="aligncenter size-full wp-image-171" title="StickersPNG" src="http://www.ideascart.com/wp-content/uploads/StickersPNG.jpg" alt="StickersPNG" width="878" height="175" /></p>
<hr />
<p>A Pack of 152 Sticker PNG free icons, contains 16, 32, 48, 64, 128, 256, and 512 variants.<br />
<span id="more-170"></span></p>
<hr />
<p>Password for StickersPNG.zip file: IdeasCart</p>
<hr />
<p><strong>Links:</strong></p>
<ol>
<li><strong>MediaFire:</strong> <a title="152 Free Sticker PNG Icons MediaFire Link" href="http://www.mediafire.com/?x7vq48q8qna52rs" target="_blank">152 Free Sticker PNG Icons MediaFire Link</a>.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.ideascart.com/design/152-free-sticker-png-icons/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>New Website Design</title>
		<link>http://www.ideascart.com/blog/new-website-design/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=new-website-design</link>
		<comments>http://www.ideascart.com/blog/new-website-design/#comments</comments>
		<pubDate>Sun, 15 May 2011 22:48:38 +0000</pubDate>
		<dc:creator>Marwan Arafah</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Announcements]]></category>

		<guid isPermaLink="false">http://www.ideascart.com/?p=165</guid>
		<description><![CDATA[We are pleased to announce the launch of IdeasCart in the new design. Please feel free to browse our new website and don&#8217;t hesitate to contact us if you have &#8230;</p><p><a class="read_more" href="http://www.ideascart.com/blog/new-website-design/" title="Continue Reading &#187;" rel="bookmark">Continue Reading &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>We are pleased to announce the launch of IdeasCart in the new design.<br />
Please feel free to browse our new website and don&#8217;t hesitate to contact us if you have any ideas or suggestions.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ideascart.com/blog/new-website-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hiding Download Source</title>
		<link>http://www.ideascart.com/learn/hiding-download-source/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=hiding-download-source</link>
		<comments>http://www.ideascart.com/learn/hiding-download-source/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 02:53:26 +0000</pubDate>
		<dc:creator>Marwan Arafah</dc:creator>
				<category><![CDATA[Learn]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[HTTP Header]]></category>
		<category><![CDATA[MIME Type]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Source]]></category>

		<guid isPermaLink="false">http://www.ideascart.com/?p=45</guid>
		<description><![CDATA[Here is a simple code for hiding the download source from your visitors: And here is an example on making a download for a text file named &#8220;downloaded.txt&#8221; from a &#8230;</p><p><a class="read_more" href="http://www.ideascart.com/learn/hiding-download-source/" title="Continue Reading &#187;" rel="bookmark">Continue Reading &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Here is a simple code for hiding the download source from your visitors:</p>
<pre class="brush: php; title: ; notranslate">
// defines file type using MIME Type
header(&quot;Content-type:MIME Type&quot;);

// tells the browser to download the file, not to show it and defines the destination file name
header(&quot;Content-Disposition:attachment;filename='file name'&quot;);

// defines the source file path and name
readfile(&quot;path/to/file&quot;);
</pre>
<p><span id="more-45"></span>And here is an example on making a download for a text file named &#8220;downloaded.txt&#8221; from a source files named &#8220;source.txt&#8221;.<br />
Create a file and name it &#8220;download.php&#8221; for example, then paste the following code in it.</p>
<pre class="brush: php; title: ; notranslate">

// defines file type using MIME Type
header(&quot;Content-type:text/plain&quot;);

// tells the browser to download the file, not to show it and defines the destination file name
header(&quot;Content-Disposition:attachment;filename='downloaded.txt'&quot;);

// defines the source file path and name
readfile(&quot;source.txt&quot;);
</pre>
<p>Then create another file with any content and name it &#8220;source.txt&#8221; and put it beside &#8220;download.php&#8221; file.</p>
<hr />
<p><strong>Hints :</strong></p>
<ol>
<li>You can change the readfile() function to echo() function to print any text dynamically from database for example.</li>
<li>You can find more of MIME Types in the link below.</li>
</ol>
<p><strong>External Links :</strong></p>
<ol>
<li><a title="PHP header() function manual" href="http://www.php.net/manual/en/function.header.php" target="_blank">PHP header() function manual</a>.</li>
<li><a title="List of MIME Types" href="http://www.w3schools.com/media/media_mimeref.asp" target="_blank">List of MIME Types</a>.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.ideascart.com/learn/hiding-download-source/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gravatar (Globally Recognized Avatar)</title>
		<link>http://www.ideascart.com/learn/gravatar-globally-recognized-avatar/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=gravatar-globally-recognized-avatar</link>
		<comments>http://www.ideascart.com/learn/gravatar-globally-recognized-avatar/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 01:48:22 +0000</pubDate>
		<dc:creator>Marwan Arafah</dc:creator>
				<category><![CDATA[Learn]]></category>
		<category><![CDATA[Automattic]]></category>
		<category><![CDATA[Services]]></category>

		<guid isPermaLink="false">http://www.ideascart.com/?p=10</guid>
		<description><![CDATA[Some people may don&#8217;t know what this word exactly means, or even what it is belongs to. Gravatar (Globally Recognized Avatar) is simply &#8220;an avatar image that follows you from &#8230;</p><p><a class="read_more" href="http://www.ideascart.com/learn/gravatar-globally-recognized-avatar/" title="Continue Reading &#187;" rel="bookmark">Continue Reading &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Some people may don&#8217;t know what this word exactly means, or even what it is belongs to.</p>
<p><strong>Gravatar (<span style="text-decoration: underline;">G</span>lobally <span style="text-decoration: underline;">R</span>ecognized <span style="text-decoration: underline;">Avatar</span>)</strong> is simply &#8220;an avatar image that follows you from blog to blog appearing beside your name when you comment on gravatar enabled sites&#8221;.</p>
<p><span id="more-10"></span></p>
<p>I think now you can guess what is it.</p>
<p>It really follows the e-mail that you have registered with in <a title="Gravatar" href="http://www.gravatar.com/" target="_blank">gravatar.com</a>.</p>
<p>So when you type this e-mail at any website supporting Gravatar, the website contacts Gravatar service to check if this e-mail is already registered or not.</p>
<p>If it was found then Gravatar reply with the avatar you have assigned to this e-mail, so you can easily have your picture following you at any blog you visit.</p>
<hr />
<p><strong>Resources : </strong></p>
<ol>
<li><a title="Gravatar" href="http://en.gravatar.com/" target="_blank">http://www.gravatar.com</a></li>
</ol>
<p><strong>External Links :</strong></p>
<ol>
<li><a title="Gravatar Sign up" href="http://en.gravatar.com/site/signup" target="_blank">http://en.gravatar.com/site/signup</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.ideascart.com/learn/gravatar-globally-recognized-avatar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk
Object Caching 1841/2040 objects using disk

Served from: www.ideascart.com @ 2012-02-22 20:09:36 -->
