<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CUACRHszfSp7ImA9WhBaEkQ.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508</id><updated>2013-05-23T00:22:45.585-07:00</updated><category term="php5" /><category term="install" /><category term="connector" /><category term="winner" /><category term="2009" /><category term="Progettazione giardini padova" /><category term="dance challenge" /><category term="VirtualBox" /><category term="development" /><category term="Polifemo" /><category term="apt-get" /><category term="javafx game" /><category term="ps" /><category term="open source" /><category term="kill" /><category term="command" /><category term="Postgres" /><category term="chrome" /><category term="firefox" /><category term="javafx challenge" /><category term="download" /><category term="manutenzione giardini" /><category term="css" /><category term="University" /><category term="apache tomcat" /><category term="script" /><category term="gimp" /><category term="windows" /><category term="Flex" /><category term="eclipse" /><category term="web server" /><category term="mod_jk" /><category term="PermGen space failure" /><category term="rar" /><category term="layout manager" /><category term="javafx" /><category term="ballet challenge" /><category term="dance blog" /><category term="modern web site" /><category term="tomcat 7" /><category term="diego benna" /><category term="jsp" /><category term="ssh" /><category term="memory" /><category term="website" /><category term="seo" /><category term="earn" /><category term="interview" /><category term="AdSense" /><category term="java 6" /><category term="JDK" /><category term="running" /><category term="3D" /><category term="virtual host" /><category term="Database" /><category term="parchi e giardini" /><category term="my web site" /><category term="design" /><category term="successful website" /><category term="ballet blog" /><category term="MySql" /><category term="project" /><category term="ubuntu" /><category term="Prestashop" /><category term="DBMS" /><category term="Apache2" /><category term="Applet" /><category term="unity" /><title>Diego Benna's Blog</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://diegobenna.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>141</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/DiegoBenna" /><feedburner:info uri="diegobenna" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CUACRHsycSp7ImA9WhBaEkQ.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-8834540184126804186</id><published>2013-05-23T00:22:00.003-07:00</published><updated>2013-05-23T00:22:45.599-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-23T00:22:45.599-07:00</app:edited><title>Knowledge Base - Apache Optimization</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
The default Apache settings that cPanel sets upon install are 
definitely something that can be improved on. With a few small tweaks, 
the efficiency with which Apache runs with can be greatly improved.&lt;br /&gt;
&lt;br /&gt;

&lt;small&gt;Please noted: This article assumes that you are using a Linux 
server running Apache and cPanel or Plesk, and that you are familiar 
with editing files from &lt;a href="http://www.liquidweb.com/kb/new-user-tutorial-basic-ssh/"&gt;the command line.&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;
&lt;br /&gt;

&lt;span id="more-38"&gt;&lt;/span&gt;&lt;br /&gt;

To start, open the Apache configuration file and finding the 
directives section. On a cPanel server, it will be located in 
/usr/local/apache/conf/. On a Plesk server, it will be in 
/etc/httpd/conf/. If you are using vi or vim: once you open the file, 
you can find the directives by scrolling through the file, or by typing 
forward-slash ‘/’ and typing the exact string that you are looking for 
(search is case specific).&lt;br /&gt;
&lt;br /&gt;

&lt;code&gt;[root@host /] vim /usr/local/apache/conf/httpd.conf&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;

&lt;code&gt;[root@host /] vim /etc/httpd/conf/httpd.conf&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;or&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&amp;nbsp; nano /etc/apache2/apache2.conf &lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;&lt;/code&gt;

This list is a composite of the settings we will be reviewing from fresh install on a cPanel server:&lt;br /&gt;
&lt;br /&gt;

&lt;code&gt;Timeout 300&lt;br /&gt;
KeepAlive On&lt;br /&gt;
MaxKeepAliveRequests 100&lt;br /&gt;
KeepAliveTimeout 15&lt;br /&gt;
MinSpareServers 5&lt;br /&gt;
MaxSpareServers 10&lt;br /&gt;
StartServers 5&lt;br /&gt;
MaxClients 150&lt;br /&gt;
MaxRequestsPerChild 0&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;

&lt;em&gt;Please note, the settings that we will review in this article are
 by no means a complete list of tweakable options in the Apache 
configuration file.  The settings we will be focusing on are the ones 
that control how Apache handles webpage requests.&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;

&lt;strong&gt;Timeout&lt;/strong&gt;&lt;br /&gt;

&lt;blockquote&gt;
Timeout 300&lt;/blockquote&gt;
Usually this value doesn’t require editing and a default of &lt;strong&gt;300&lt;/strong&gt; is sufficient. Lowering the ‘Timeout’ value will cause a long running script to terminate earlier than expected.&lt;br /&gt;

On virtualized servers like VPS servers, lowering this value to &lt;strong&gt;100&lt;/strong&gt; can help improve performance.&lt;br /&gt;
&lt;br /&gt;

&lt;strong&gt; &lt;/strong&gt;&lt;br /&gt;

&lt;strong&gt;KeepAlive&lt;/strong&gt;&lt;br /&gt;

&lt;blockquote&gt;
KeepAlive On&lt;/blockquote&gt;
This setting should be “On” unless the server is getting requests from hundreds of IPs at once.&lt;br /&gt;

High volume and/or load balanced servers should have this setting disabled (&lt;strong&gt;Off&lt;/strong&gt;) to increase connection throughput.&lt;br /&gt;
&lt;br /&gt;

&lt;strong&gt; &lt;/strong&gt;&lt;br /&gt;

&lt;strong&gt;MaxKeepAliveRequests&lt;/strong&gt;&lt;br /&gt;

&lt;blockquote&gt;
MaxKeepAliveRequests 100&lt;/blockquote&gt;
This setting limits the number of requests allowed per persistent 
connection when KeepAlive is on. If it is set to 0, unlimited requests 
will be allowed.&lt;br /&gt;

It is recommended to keep this value at &lt;strong&gt;100&lt;/strong&gt; for virtualized accounts like VPS accounts. On dedicated servers it is recommended that this value be modified to &lt;strong&gt;150&lt;/strong&gt;.&lt;br /&gt;
&lt;br /&gt;

&lt;strong&gt; &lt;/strong&gt;&lt;br /&gt;

&lt;strong&gt;KeepAliveTimeout&lt;/strong&gt;&lt;br /&gt;

&lt;blockquote&gt;
KeepAliveTimeout 15&lt;/blockquote&gt;
The number of seconds Apache will wait for another request before 
closing the connection. Setting this to a high value may cause 
performance problems in heavily loaded servers. The higher the timeout, 
the more server processes will be kept occupied waiting on connections 
with idle clients.&lt;br /&gt;
&lt;br /&gt;

It is recommended that this value be lowered to &lt;strong&gt;5&lt;/strong&gt; on all servers.&lt;br /&gt;
&lt;br /&gt;

&lt;strong&gt; &lt;/strong&gt;&lt;br /&gt;

&lt;strong&gt;MinSpareServers&lt;/strong&gt;&lt;br /&gt;

&lt;blockquote&gt;
MinSpareServers 5&lt;/blockquote&gt;
This directive sets the desired minimum number of idle child server 
processes. An idle process is one which is not handling a request. If 
there are fewer spareservers idle then specified by this value, then the
 parent process creates new children at a maximum rate of 1 per second. 
Setting this parameter to a large number is almost always a bad idea.&lt;br /&gt;

Liquidweb recommends adjusting the value for this setting to the following:&lt;br /&gt;
&lt;br /&gt;

Virtualized server, ie VPS &lt;strong&gt;5&lt;/strong&gt;&lt;br /&gt;

Dedicated server with 1-2GB RAM &lt;strong&gt;10&lt;/strong&gt;&lt;br /&gt;

Dedicated server with 2-4GB RAM &lt;strong&gt;20&lt;/strong&gt;&lt;br /&gt;

Dedicated server with 4+ GB RAM &lt;strong&gt;25&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;

&lt;strong&gt;MaxSpareServers&lt;/strong&gt;&lt;br /&gt;

&lt;blockquote&gt;
MaxSpareServers 10&lt;/blockquote&gt;
The MaxSpareServers directive sets the desired maximum number of idle
 child server processes. An idle process is one which is not handling a 
request. If there are more than MaxSpareServers idle, then the parent 
process will kill off the excess processes.&lt;br /&gt;

The MaxSpareServers value should be set as double the value that is set in MinSpareServers.&lt;br /&gt;
&lt;br /&gt;

&lt;strong&gt; &lt;/strong&gt;&lt;br /&gt;

&lt;strong&gt;StartServers&lt;/strong&gt;&lt;br /&gt;

&lt;blockquote&gt;
StartServers 5&lt;/blockquote&gt;
This directivesets the number of child server processes created on 
startup. This value should mirror what is set in MinSpareServers.&lt;br /&gt;
&lt;br /&gt;

&lt;strong&gt; &lt;/strong&gt;&lt;br /&gt;

&lt;strong&gt;MaxClients&lt;/strong&gt;&lt;br /&gt;

&lt;blockquote&gt;
MaxClients 150&lt;/blockquote&gt;
This directive sets the limit on the number of simultaneous requests 
that will be served. Any connection attempts over the specified limit 
will be queued. Once a process is freed at the end of a different 
request, the queued connection will then be served.&lt;br /&gt;

For virtualized servers such as VPS accounts, it is recommended to keep this value at &lt;strong&gt;150&lt;/strong&gt;. For all dedicated servers the recommended value for this setting is &lt;strong&gt;250&lt;/strong&gt;.&lt;br /&gt;
&lt;br /&gt;

&lt;strong&gt;MaxRequestsPerChild&lt;/strong&gt;&lt;br /&gt;

&lt;blockquote&gt;
MaxRequestsPerChild 0&lt;/blockquote&gt;
This directive sets the limit on the number of requests that an 
individual child server process will handle. After the number of 
requests reaches the value specified, the child process will die. When 
this value is set at 0, then the process will never expire.&lt;br /&gt;

Liquidweb recommends adjusting the value for this setting to the following:&lt;br /&gt;
&lt;br /&gt;

Virtualized server, ie VPS &lt;strong&gt;300&lt;/strong&gt;&lt;br /&gt;

Dedicated server with 1-4GB RAM &lt;strong&gt;500&lt;/strong&gt;&lt;br /&gt;

Dedicated server with 4+GB RAM &lt;strong&gt;1000&lt;/strong&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/YenCbvhFx64" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/8834540184126804186/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/05/knowledge-base-apache-optimization.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/8834540184126804186?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/8834540184126804186?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/YenCbvhFx64/knowledge-base-apache-optimization.html" title="Knowledge Base - Apache Optimization" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/05/knowledge-base-apache-optimization.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AAR348eSp7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-8771930186101912316</id><published>2013-04-07T06:02:00.003-07:00</published><updated>2013-04-07T06:02:26.071-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T06:02:26.071-07:00</app:edited><title>How to use sessions on Google App Engine with Python and gae-sessions?</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div class="entry-content"&gt;
Google App Engine with Python does not provide built in session 
capabilities. This step by step walkthrough sets up a Google App Engine 
app using the lightweight &lt;a href="https://github.com/dound/gae-sessions/"&gt;gae-sessions&lt;/a&gt; utility.&lt;br /&gt;

&lt;span id="more-304"&gt;&lt;/span&gt;&lt;br /&gt;

&lt;h2&gt;
1. Download gae-sessions&lt;/h2&gt;
Download the gae-sessions code from &lt;a href="https://github.com/dound/gae-sessions/"&gt;https://github.com/dound/gae-sessions/&lt;/a&gt;&lt;br /&gt;

&lt;h2&gt;
2. Create your app directory&lt;/h2&gt;
Create a directory for your application. I’ll be using &lt;strong&gt;gaesessiontest/&lt;/strong&gt;&lt;br /&gt;

&lt;h2&gt;
3. Copy gaesessions to your app&lt;/h2&gt;
From the gae-sessions download file, copy the &lt;strong&gt;gaesessions/&lt;/strong&gt; directory to your app directory.&lt;br /&gt;

&lt;h2&gt;
4. Create your app.yaml file&lt;/h2&gt;
Within your app directory create an &lt;strong&gt;app.yaml&lt;/strong&gt; file with the contents:&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="text" style="font-family: monospace;"&gt;application: gaesessiontest
version: 1
runtime: python
api_version: 1
&amp;nbsp;
handlers:
- url: /.*
  script: main.py&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;
5. Create your appengine_config.py file&lt;/h2&gt;
Within your app directory create an &lt;strong&gt;appengine_config.py&lt;/strong&gt; file with the contents:&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="python" style="font-family: monospace;"&gt;&lt;span style="color: #ff7700; font-weight: bold;"&gt;from&lt;/span&gt; gaesessions &lt;span style="color: #ff7700; font-weight: bold;"&gt;import&lt;/span&gt; SessionMiddleware
&lt;span style="color: #ff7700; font-weight: bold;"&gt;def&lt;/span&gt; webapp_add_wsgi_middleware&lt;span style="color: black;"&gt;(&lt;/span&gt;app&lt;span style="color: black;"&gt;)&lt;/span&gt;:
    app = SessionMiddleware&lt;span style="color: black;"&gt;(&lt;/span&gt;app, cookie_key=&lt;span style="color: darkslateblue;"&gt;"You must change this"&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;
    &lt;span style="color: #ff7700; font-weight: bold;"&gt;return&lt;/span&gt; app&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;
6. Change the cookie_key&lt;/h2&gt;
Change the &lt;strong&gt;cookie_key&lt;/strong&gt; value to a secret combination of characters.&lt;br /&gt;

&lt;h2&gt;
7. Create your main.py file&lt;/h2&gt;
Within your app directory create a &lt;strong&gt;main.py&lt;/strong&gt; file with the contents:&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="python" style="font-family: monospace;"&gt;&lt;span style="color: #ff7700; font-weight: bold;"&gt;import&lt;/span&gt; &lt;span style="color: crimson;"&gt;os&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #ff7700; font-weight: bold;"&gt;from&lt;/span&gt; google.&lt;span style="color: black;"&gt;appengine&lt;/span&gt;.&lt;span style="color: black;"&gt;ext&lt;/span&gt; &lt;span style="color: #ff7700; font-weight: bold;"&gt;import&lt;/span&gt; webapp
&lt;span style="color: #ff7700; font-weight: bold;"&gt;from&lt;/span&gt; google.&lt;span style="color: black;"&gt;appengine&lt;/span&gt;.&lt;span style="color: black;"&gt;ext&lt;/span&gt;.&lt;span style="color: black;"&gt;webapp&lt;/span&gt;.&lt;span style="color: black;"&gt;util&lt;/span&gt; &lt;span style="color: #ff7700; font-weight: bold;"&gt;import&lt;/span&gt; run_wsgi_app
&lt;span style="color: #ff7700; font-weight: bold;"&gt;from&lt;/span&gt; google.&lt;span style="color: black;"&gt;appengine&lt;/span&gt;.&lt;span style="color: black;"&gt;ext&lt;/span&gt;.&lt;span style="color: black;"&gt;webapp&lt;/span&gt; &lt;span style="color: #ff7700; font-weight: bold;"&gt;import&lt;/span&gt; template
&amp;nbsp;
&lt;span style="color: #ff7700; font-weight: bold;"&gt;from&lt;/span&gt; gaesessions &lt;span style="color: #ff7700; font-weight: bold;"&gt;import&lt;/span&gt; get_current_session
&amp;nbsp;
&lt;span style="color: #ff7700; font-weight: bold;"&gt;class&lt;/span&gt; MainPage&lt;span style="color: black;"&gt;(&lt;/span&gt;webapp.&lt;span style="color: black;"&gt;RequestHandler&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;:
    &lt;span style="color: #ff7700; font-weight: bold;"&gt;def&lt;/span&gt; get&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: green;"&gt;self&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;:
&amp;nbsp;
        &lt;span style="color: grey; font-style: italic;"&gt;# Get the current session        &lt;/span&gt;
        session = get_current_session&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;
&amp;nbsp;
        &lt;span style="color: grey; font-style: italic;"&gt;# Get the value of the counter,&lt;/span&gt;
        &lt;span style="color: grey; font-style: italic;"&gt;# defaulting to 0 if not present&lt;/span&gt;
        counter = session.&lt;span style="color: black;"&gt;get&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: darkslateblue;"&gt;'counter'&lt;/span&gt;, &lt;span style="color: orangered;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;
&amp;nbsp;
        &lt;span style="color: grey; font-style: italic;"&gt;# Increment the counter&lt;/span&gt;
        session&lt;span style="color: black;"&gt;[&lt;/span&gt;&lt;span style="color: darkslateblue;"&gt;'counter'&lt;/span&gt;&lt;span style="color: black;"&gt;]&lt;/span&gt; =  counter + &lt;span style="color: orangered;"&gt;1&lt;/span&gt; 
&amp;nbsp;
        context = &lt;span style="color: black;"&gt;{&lt;/span&gt;
             &lt;span style="color: darkslateblue;"&gt;"counter"&lt;/span&gt;: counter 
        &lt;span style="color: black;"&gt;}&lt;/span&gt;
&amp;nbsp;
        path = &lt;span style="color: crimson;"&gt;os&lt;/span&gt;.&lt;span style="color: black;"&gt;path&lt;/span&gt;.&lt;span style="color: black;"&gt;join&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: crimson;"&gt;os&lt;/span&gt;.&lt;span style="color: black;"&gt;path&lt;/span&gt;.&lt;span style="color: black;"&gt;dirname&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;__file__&lt;span style="color: black;"&gt;)&lt;/span&gt;, &lt;span style="color: darkslateblue;"&gt;'index.html'&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;
        &lt;span style="color: green;"&gt;self&lt;/span&gt;.&lt;span style="color: black;"&gt;response&lt;/span&gt;.&lt;span style="color: black;"&gt;out&lt;/span&gt;.&lt;span style="color: black;"&gt;write&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;template.&lt;span style="color: black;"&gt;render&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;path, context&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;
&amp;nbsp;
application = webapp.&lt;span style="color: black;"&gt;WSGIApplication&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;
                                     &lt;span style="color: black;"&gt;[&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: darkslateblue;"&gt;'/'&lt;/span&gt;, MainPage&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;]&lt;/span&gt;,
                                     debug=&lt;span style="color: green;"&gt;True&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #ff7700; font-weight: bold;"&gt;def&lt;/span&gt; main&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;:
    run_wsgi_app&lt;span style="color: black;"&gt;(&lt;/span&gt;application&lt;span style="color: black;"&gt;)&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #ff7700; font-weight: bold;"&gt;if&lt;/span&gt; __name__ == &lt;span style="color: darkslateblue;"&gt;"__main__"&lt;/span&gt;:
    main&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;
8. Create your index.html file&lt;/h2&gt;
Within your app directory create an &lt;strong&gt;index.html&lt;/strong&gt; file with the contents:&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="html4strict" style="font-family: monospace;"&gt;&lt;span style="color: #00bbdd;"&gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&amp;lt;&lt;span style="color: black; font-weight: bold;"&gt;html&lt;/span&gt; &lt;span style="color: #000066;"&gt;lang&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;&lt;span style="color: red;"&gt;"en"&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&amp;lt;&lt;span style="color: black; font-weight: bold;"&gt;head&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&amp;lt;&lt;span style="color: black; font-weight: bold;"&gt;title&lt;/span&gt;&amp;gt;&lt;/span&gt;GAE Sessions&lt;span style="color: #009900;"&gt;&amp;lt;&lt;span style="color: #66cc66;"&gt;/&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;title&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&amp;lt;&lt;span style="color: #66cc66;"&gt;/&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;head&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&amp;lt;&lt;span style="color: black; font-weight: bold;"&gt;body&lt;/span&gt;&amp;gt;&lt;/span&gt;
Counter = {{ counter}}
&lt;span style="color: #009900;"&gt;&amp;lt;&lt;span style="color: #66cc66;"&gt;/&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;body&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&amp;lt;&lt;span style="color: #66cc66;"&gt;/&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;html&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;
9. Run your application&lt;/h2&gt;
My GAE installation is located in /opt/google_appengine/ so I start the application with the command:&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="bash" style="font-family: monospace;"&gt;&lt;span style="color: black; font-weight: bold;"&gt;/&lt;/span&gt;opt&lt;span style="color: black; font-weight: bold;"&gt;/&lt;/span&gt;google_appengine&lt;span style="color: black; font-weight: bold;"&gt;/&lt;/span&gt;dev_appserver.py gaesessiontest&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;
10. View your app&lt;/h2&gt;
Open your browser and go to &lt;a href="http://localhost:8080/"&gt;http://localhost:8080/&lt;/a&gt;. You should see a counter that increments each time you refresh the page.&lt;br /&gt;


         &lt;/div&gt;
&lt;div class="entry-utility"&gt;
&lt;span class="cat-links"&gt;This entry was posted in &lt;a href="http://blog.stannard.net.au/category/google-app-engine/" rel="category tag" title="View all posts in Google App Engine"&gt;Google App Engine&lt;/a&gt;&lt;/span&gt;&lt;span class="tag-links"&gt;  and tagged &lt;a href="http://blog.stannard.net.au/tag/gae/" rel="tag"&gt;GAE&lt;/a&gt;, &lt;a href="http://blog.stannard.net.au/tag/gae-session/" rel="tag"&gt;GAE-Session&lt;/a&gt;, &lt;a href="http://blog.stannard.net.au/tag/google-app-engine/" rel="tag"&gt;Google App Engine&lt;/a&gt;, &lt;a href="http://blog.stannard.net.au/tag/python/" rel="tag"&gt;Python&lt;/a&gt;, &lt;a href="http://blog.stannard.net.au/tag/session/" rel="tag"&gt;Session&lt;/a&gt;&lt;/span&gt;. Bookmark the &lt;a href="http://blog.stannard.net.au/2011/01/09/how-to-use-sessions-on-google-app-engine-with-python-and-gae-sessions/" title="Permalink to How to use sessions on Google App Engine with Python and gae-sessions?"&gt;permalink&lt;/a&gt;. Both comments and trackbacks are currently closed.&lt;/div&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/T7KnrwjIjkI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/8771930186101912316/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/how-to-use-sessions-on-google-app.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/8771930186101912316?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/8771930186101912316?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/T7KnrwjIjkI/how-to-use-sessions-on-google-app.html" title="How to use sessions on Google App Engine with Python and gae-sessions?" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/how-to-use-sessions-on-google-app.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AEQHg7eCp7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-6667092457365170660</id><published>2013-04-07T06:01:00.000-07:00</published><updated>2013-04-07T06:01:41.600-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T06:01:41.600-07:00</app:edited><title>Another 10 Interesting JavaScript Features</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div class="entry-content"&gt;
I previously posted about &lt;a href="http://blog.stannard.net.au/2011/01/07/10-interesting-javascript-features/"&gt;10 Interesting JavaScript Features&lt;/a&gt;. Here’s ten more JavaScript features that I’ve recently found interesting.&lt;br /&gt;

&lt;span id="more-291"&gt;&lt;/span&gt;&lt;br /&gt;

&lt;h2&gt;
1. Dynamically call object methods&lt;/h2&gt;
Javascript objects can contain functions as object members.  Object 
members can be referenced using square bracket [] notation. Combining 
these ideas together we can dynamically call object methods:&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; foo &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
 one&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt; console.&lt;span style="color: #660066;"&gt;log&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #3366cc;"&gt;"one"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
 two&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt; console.&lt;span style="color: #660066;"&gt;log&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #3366cc;"&gt;"two"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; ok &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; result &lt;span style="color: #339933;"&gt;=&lt;/span&gt; foo&lt;span style="color: #009900;"&gt;[&lt;/span&gt;ok &lt;span style="color: #339933;"&gt;?&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"one"&lt;/span&gt; &lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"two"&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
console.&lt;span style="color: #660066;"&gt;log&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; result &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #006600; font-style: italic;"&gt;// Prints "one"&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;
2. Multi line strings&lt;/h2&gt;
You can create multi-line strings in JavaScript by terminating lines that should be continued with a backslash:&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; s &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"Goodbye &lt;span style="color: #000099; font-weight: bold;"&gt;\&lt;/span&gt;
cruel &lt;span style="color: #000099; font-weight: bold;"&gt;\&lt;/span&gt;
world"&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
console.&lt;span style="color: #660066;"&gt;log&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; s &lt;span style="color: #339933;"&gt;===&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"Goodbye cruel world"&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #006600; font-style: italic;"&gt;// true&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;
3. Recursion in anonymous functions&lt;/h2&gt;
JavaScript allows functions to be created that have no names. These 
are called anonymous functions. A recursive function is one that calls 
itself, but how does a function call itself if it has no name?&lt;br /&gt;

First let’s consider a small program that applies a factorial function to numbers in an array.&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #006600; font-style: italic;"&gt;// Our recursive factorial function&lt;/span&gt;
&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; factorial &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;n&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
    &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; n&lt;span style="color: #339933;"&gt;&amp;lt;=&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;1&lt;/span&gt; &lt;span style="color: #339933;"&gt;?&lt;/span&gt; &lt;span style="color: #cc0000;"&gt;1&lt;/span&gt; &lt;span style="color: #339933;"&gt;:&lt;/span&gt; n &lt;span style="color: #339933;"&gt;*&lt;/span&gt; factorial&lt;span style="color: #009900;"&gt;(&lt;/span&gt;n&lt;span style="color: #339933;"&gt;-&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;1&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #006600; font-style: italic;"&gt;// Function that applies a function to each element of the array&lt;/span&gt;
&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; applyTo &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;array&lt;span style="color: #339933;"&gt;,&lt;/span&gt;fn&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
 &lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; i&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; len&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
 &lt;span style="color: #000066; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;i&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; len&lt;span style="color: #339933;"&gt;=&lt;/span&gt;array.&lt;span style="color: #660066;"&gt;length&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i&lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt;len&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i&lt;span style="color: #339933;"&gt;++&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
  array&lt;span style="color: #009900;"&gt;[&lt;/span&gt;i&lt;span style="color: #009900;"&gt;]&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; fn&lt;span style="color: #009900;"&gt;(&lt;/span&gt; array&lt;span style="color: #009900;"&gt;[&lt;/span&gt;i&lt;span style="color: #009900;"&gt;]&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
 &lt;span style="color: #009900;"&gt;}&lt;/span&gt;
 &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; array&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #006600; font-style: italic;"&gt;// Test our function&lt;/span&gt;
&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; result &lt;span style="color: #339933;"&gt;=&lt;/span&gt; applyTo&lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;2&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;4&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;6&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; factorial &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
console.&lt;span style="color: #660066;"&gt;log&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; result &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #006600; font-style: italic;"&gt;// Prints [2, 24, 720]&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #006600; font-style: italic;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
Rather that defining the factorial function separately, we can define it inline as a parameter to the applyTo() function call.&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; result &lt;span style="color: #339933;"&gt;=&lt;/span&gt; applyTo&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;2&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;4&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;6&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; 
                     &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;n&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
                         &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; n&lt;span style="color: #339933;"&gt;&amp;lt;=&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;1&lt;/span&gt; &lt;span style="color: #339933;"&gt;?&lt;/span&gt; &lt;span style="color: #cc0000;"&gt;1&lt;/span&gt; &lt;span style="color: #339933;"&gt;:&lt;/span&gt; n &lt;span style="color: #339933;"&gt;*&lt;/span&gt; &lt;span style="color: #339933;"&gt;???&lt;/span&gt;WhatGoesHere&lt;span style="color: #339933;"&gt;???&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;n&lt;span style="color: #339933;"&gt;-&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;1&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
                     &lt;span style="color: #009900;"&gt;}&lt;/span&gt;
                 &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #339933;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
Previously, JavaScript allowed us to replace the &lt;em&gt;???WhatGoesHere???&lt;/em&gt; part with &lt;strong&gt;arguments.callee&lt;/strong&gt;, which was a reference to the current function.&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; result &lt;span style="color: #339933;"&gt;=&lt;/span&gt; applyTo&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;2&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;4&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;6&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; 
                     &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;n&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
                         &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; n&lt;span style="color: #339933;"&gt;&amp;lt;=&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;1&lt;/span&gt; &lt;span style="color: #339933;"&gt;?&lt;/span&gt; &lt;span style="color: #cc0000;"&gt;1&lt;/span&gt; &lt;span style="color: #339933;"&gt;:&lt;/span&gt; n &lt;span style="color: #339933;"&gt;*&lt;/span&gt; arguments.&lt;span style="color: #660066;"&gt;callee&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;n&lt;span style="color: #339933;"&gt;-&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;1&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
                     &lt;span style="color: #009900;"&gt;}&lt;/span&gt;
                 &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #339933;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
This method still works in modern browsers but has been &lt;a href="https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope/arguments/callee"&gt;deprecated&lt;/a&gt;, so remember what it means but &lt;strong&gt;don’t use it&lt;/strong&gt;.&lt;br /&gt;

The new method allows us to name our inline functions.&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; result &lt;span style="color: #339933;"&gt;=&lt;/span&gt; applyTo&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;2&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;4&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;6&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; 
                     &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt; fact&lt;span style="color: #009900;"&gt;(&lt;/span&gt;n&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
                         &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; n&lt;span style="color: #339933;"&gt;&amp;lt;=&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;1&lt;/span&gt; &lt;span style="color: #339933;"&gt;?&lt;/span&gt; &lt;span style="color: #cc0000;"&gt;1&lt;/span&gt; &lt;span style="color: #339933;"&gt;:&lt;/span&gt; n &lt;span style="color: #339933;"&gt;*&lt;/span&gt; fact&lt;span style="color: #009900;"&gt;(&lt;/span&gt;n&lt;span style="color: #339933;"&gt;-&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;1&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
                     &lt;span style="color: #009900;"&gt;}&lt;/span&gt;
                 &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;
4. Short cuts with ‘or’ and ‘and’ operators&lt;/h2&gt;
When you &lt;strong&gt;or&lt;/strong&gt; together several variables in a statement, JavaScript will return first ‘truthy’ value it finds (see &lt;a href="http://blog.stannard.net.au/2011/01/07/10-interesting-javascript-features/"&gt;previous post&lt;/a&gt; about truthy values). This is useful when you want to use a default value if an existing variable is undefined.&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #006600; font-style: italic;"&gt;// Create an empty person object with no properties&lt;/span&gt;
&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; person &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #006600; font-style: italic;"&gt;// person.firstName is undefined, so it returns 'unknown'&lt;/span&gt;
&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; &lt;span style="color: #000066;"&gt;name&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; person.&lt;span style="color: #660066;"&gt;firstName&lt;/span&gt; &lt;span style="color: #339933;"&gt;||&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;'unknown'&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #006600; font-style: italic;"&gt;// Prints 'unknown'&lt;/span&gt;
console.&lt;span style="color: #660066;"&gt;log&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066;"&gt;name&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #339933;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
In contrast, the &lt;strong&gt;and&lt;/strong&gt; operator returns the last element, but only if &lt;strong&gt;all&lt;/strong&gt; of the expressions are truthy, else it returns undefined.&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; o &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
o.&lt;span style="color: #660066;"&gt;x&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #cc0000;"&gt;1&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
o.&lt;span style="color: #660066;"&gt;y&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #cc0000;"&gt;2&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
o.&lt;span style="color: #660066;"&gt;z&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #cc0000;"&gt;3&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; n &lt;span style="color: #339933;"&gt;=&lt;/span&gt; o.&lt;span style="color: #660066;"&gt;x&lt;/span&gt; &lt;span style="color: #339933;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; o.&lt;span style="color: #660066;"&gt;y&lt;/span&gt; &lt;span style="color: #339933;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; o.&lt;span style="color: #660066;"&gt;z&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #006600; font-style: italic;"&gt;// Prints 3&lt;/span&gt;
console.&lt;span style="color: #660066;"&gt;log&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;n&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;
5. A note about ‘undefined’&lt;/h2&gt;
It turns out that &lt;strong&gt;undefined&lt;/strong&gt; is not a JavaScript keyword, instead undefined is a global variable, which in browsers is defined as window.undefined.&lt;br /&gt;

It is not uncommon to see code that tests if a variable is undefined like this:&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;someObject.&lt;span style="color: #660066;"&gt;x&lt;/span&gt; &lt;span style="color: #339933;"&gt;===&lt;/span&gt; undefined&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
    &lt;span style="color: #006600; font-style: italic;"&gt;// do something&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #009900;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
Which is the same as writing&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;someObject.&lt;span style="color: #660066;"&gt;x&lt;/span&gt; &lt;span style="color: #339933;"&gt;===&lt;/span&gt; window.&lt;span style="color: #660066;"&gt;undefined&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
    &lt;span style="color: #006600; font-style: italic;"&gt;// do something&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #009900;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
If by some chance your window.undefined variable is modified then 
checks for undefined like this will fail. No conscientious developer 
would ever do this intentionally, but it may happen by accident causing 
hard to find bugs, like this:&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; o &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
window&lt;span style="color: #009900;"&gt;[&lt;/span&gt;o.&lt;span style="color: #000066;"&gt;name&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;'unknown'&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #006600; font-style: italic;"&gt;// BLAM!, window.undefined is now a string&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #006600; font-style: italic;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
A better way to test for undefined is to use the &lt;strong&gt;typeof&lt;/strong&gt; operator. Typeof an undefined variable will always return the string ‘undefined’.&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #006600; font-style: italic;"&gt;// Good way to test for undefined&lt;/span&gt;
&lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;typeof&lt;/span&gt; someObject.&lt;span style="color: #660066;"&gt;x&lt;/span&gt; &lt;span style="color: #339933;"&gt;===&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;'undefined'&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
    &lt;span style="color: #006600; font-style: italic;"&gt;// do something&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;
6. Return statement&lt;/h2&gt;
The return statement needs it’s value to be on the same line as the 
return keyword. This may cause problem depending on your coding style. 
For example&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #006600; font-style: italic;"&gt;// This is ok&lt;/span&gt;
&lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; x&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #006600; font-style: italic;"&gt;// This returns undefined&lt;/span&gt;
&lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt;
    x&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #006600; font-style: italic;"&gt;// This is ok&lt;/span&gt;
&lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
    result&lt;span style="color: #339933;"&gt;:&lt;/span&gt;&lt;span style="color: #3366cc;"&gt;'success'&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #006600; font-style: italic;"&gt;// This returns undefined&lt;/span&gt;
&lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt;
&lt;span style="color: #009900;"&gt;{&lt;/span&gt;
    result&lt;span style="color: #339933;"&gt;:&lt;/span&gt;&lt;span style="color: #3366cc;"&gt;'success'&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #009900;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
This behaviour is due to &lt;a href="http://www.google.com/search?q=JavaScript+automatic+semicolon+insertion"&gt;JavaScript’s automatic semicolon insertion&lt;/a&gt;.&lt;br /&gt;

&lt;h2&gt;
7. Length of a function&lt;/h2&gt;
JavaScript functions have a length property that provides a count of the number of arguments the function expects.&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt; foo&lt;span style="color: #009900;"&gt;(&lt;/span&gt;a&lt;span style="color: #339933;"&gt;,&lt;/span&gt;b&lt;span style="color: #339933;"&gt;,&lt;/span&gt;c&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;
&amp;nbsp;
console.&lt;span style="color: #660066;"&gt;log&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; foo.&lt;span style="color: #660066;"&gt;length&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #006600; font-style: italic;"&gt;// Prints 3&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;
8. The plus operator&lt;/h2&gt;
The plus operator can be used to easily convert anything into a number by simply prefixing the value with “+”.&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;console.&lt;span style="color: #660066;"&gt;log&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt;&lt;span style="color: #3366cc;"&gt;"0xFF"&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;  &lt;span style="color: #006600; font-style: italic;"&gt;// 255&lt;/span&gt;
console.&lt;span style="color: #660066;"&gt;log&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt;&lt;span style="color: #3366cc;"&gt;"010"&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;   &lt;span style="color: #006600; font-style: italic;"&gt;// 10 &lt;/span&gt;
console.&lt;span style="color: #660066;"&gt;log&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;null&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;    &lt;span style="color: #006600; font-style: italic;"&gt;// 0&lt;/span&gt;
console.&lt;span style="color: #660066;"&gt;log&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;true&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;    &lt;span style="color: #006600; font-style: italic;"&gt;// 1&lt;/span&gt;
console.&lt;span style="color: #660066;"&gt;log&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;false&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;   &lt;span style="color: #006600; font-style: italic;"&gt;// 0&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #006600; font-style: italic;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
This is actually a just a nice shortcut for using the &lt;a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number"&gt;Number()&lt;/a&gt; function.&lt;br /&gt;

&lt;h2&gt;
9. Object property names can be any string&lt;/h2&gt;
JavaScript object members can have any string as their name.&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; o &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
    &lt;span style="color: #3366cc;"&gt;"What the!"&lt;/span&gt;&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;'a'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
    &lt;span style="color: #3366cc;"&gt;"&lt;a href="http://www.blogger.com/blogger.g?blogID=180839935467389508#"&gt;Hash&lt;/a&gt;"&lt;/span&gt;&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;'b'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
    &lt;span style="color: #3366cc;"&gt;"*****"&lt;/span&gt;&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;'c'&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #000066; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; key &lt;span style="color: #000066; font-weight: bold;"&gt;in&lt;/span&gt; o&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
    console.&lt;span style="color: #660066;"&gt;log&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; key &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
Which prints:&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="text" style="font-family: monospace;"&gt;What the!
&lt;a href="http://www.blogger.com/blogger.g?blogID=180839935467389508#"&gt;Hash&lt;/a&gt;
*****&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;
10. The ‘debugger’ statement&lt;/h2&gt;
In the past we were limited to using &lt;strong&gt;alert()&lt;/strong&gt; statements to debug our JavaScript. After that we were rescued with the much more sane &lt;strong&gt;console.log()&lt;/strong&gt;. Things have come a long way and we now have solid line debugging available in modern browsers.&lt;br /&gt;

However, there is one addition to our debugging arsenal which I’ve 
found particularly invaluable when debugging JavaScript in Internet 
Explorer; the &lt;strong&gt;debugger&lt;/strong&gt; statement.&lt;br /&gt;

When you add the &lt;strong&gt;debugger&lt;/strong&gt; statement to your code the
 browser will stop execution and open the debugging environment ready 
for you to continue stepping through your code.&lt;br /&gt;

This is moderately useful on Chrome, Firefox and Safari but I have found essential for debugging IE.&lt;br /&gt;

Note that within IE, this statement only works in IE7 and above and you need to first start the debug mode. &lt;br /&gt;

OK, so that’s 10 features, but just one more thing to wrap up which is not really a JavaScript feature.&lt;br /&gt;

&lt;h2&gt;
JavaScript Coding Coventions&lt;/h2&gt;
If you’re not following a JavaScript coding convention then here are a couple to get you started:&lt;br /&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://javascript.crockford.com/code.html"&gt;Douglas Crockford’s JavaScript Coding Conventions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml"&gt;Google’s JavaScript Style Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="entry-utility"&gt;
&lt;span class="cat-links"&gt;This entry was posted in &lt;a href="http://blog.stannard.net.au/category/javascript/" rel="category tag" title="View all posts in JavaScript"&gt;JavaScript&lt;/a&gt;&lt;/span&gt;&lt;span class="tag-links"&gt;  and tagged &lt;a href="http://blog.stannard.net.au/tag/tips/" rel="tag"&gt;Tips&lt;/a&gt;&lt;/span&gt;. Bookmark the &lt;a href="http://blog.stannard.net.au/2011/06/25/another-10-interesting-javascript-features/" title="Permalink to Another 10 Interesting JavaScript Features"&gt;permalink&lt;/a&gt;. &lt;a class="comment-link" href="http://blog.stannard.net.au/2011/06/25/another-10-interesting-javascript-features/#respond" title="Post a comment"&gt;Post a comment&lt;/a&gt; or leave a trackback: &lt;a class="trackback-link" href="http://blog.stannard.net.au/2011/06/25/another-10-interesting-javascript-features/trackback/" rel="trackback" title="Trackback URL for your post"&gt;Trackback URL&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/M8OFqRo6bG0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/6667092457365170660/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/another-10-interesting-javascript.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/6667092457365170660?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/6667092457365170660?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/M8OFqRo6bG0/another-10-interesting-javascript.html" title="Another 10 Interesting JavaScript Features" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/another-10-interesting-javascript.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EFQXo5cCp7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-1252082376509964071</id><published>2013-04-07T06:00:00.000-07:00</published><updated>2013-04-07T06:00:10.428-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T06:00:10.428-07:00</app:edited><title>Should you use semicolons in JavaScript?</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div class="entry-content"&gt;
There has been a quite a bit of chatter recently on whether or not you should use semicolons in your JavaScript code.&lt;br /&gt;
&lt;br /&gt;

JavaScript provides a feature called Automatic Semicolon Insertion 
(ASI). For the most part there are rarely problems in omitting 
semicolons, but there are a few cases where semicolons are required to 
prevent syntax errors or resolve code ambiguities.&lt;br /&gt;
&lt;br /&gt;

&lt;span id="more-342"&gt;&lt;/span&gt;&lt;br /&gt;

A site that triggered a lot of chatter was &lt;a href="http://aresemicolonsnecessaryinjavascript.com/"&gt;aresemicolonsnecessaryinjavascript.com&lt;/a&gt; which boldly states ‘NO’. The author is really trying to &lt;a href="http://blog.izs.me/post/2353458699/an-open-letter-to-javascript-leaders-regarding"&gt;explain&lt;/a&gt;
 we should not just include semicolons everywhere due a fear that our 
code might break in some environments or parsers (such as JavaScript 
minifiers). Others are also continuing the same point that we should 
better understand why &lt;a href="http://mislav.uniqpath.com/2010/05/semicolons/"&gt;semicolons in JavaScript are optional&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;

Douglas Crockford, a leading expert in JavaScript &lt;a href="http://javascript.crockford.com/code.html"&gt;recommends  using semicolons at the end of every simple statement&lt;/a&gt; and his ubiqitious JavaScript code quality tool, &lt;a href="http://www.jslint.com/"&gt;JSLint&lt;/a&gt;, by default expects semicolons to be inserted. A poll on Stack Overflow strongly &lt;a href="http://stackoverflow.com/questions/444080/do-you-recommend-using-semicolons-after-every-statement-in-javascript"&gt;recommends using semicolons everywhere&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;

Lastly, I found Armin Ronacher’s post on &lt;a href="http://lucumr.pocoo.org/2011/2/6/automatic-semicolon-insertion/"&gt;dealing with JavaScript’s automatic semicolon insertion&lt;/a&gt; to be most useful. In particular his summary where he writes:&lt;br /&gt;

&lt;blockquote&gt;
Are Semicolons Necessary in Javascript? Despite popular belief the 
answer is "sometimes" and not "no". But to save yourself time and 
troubles, just place them all the time. Not only will it save yourself 
some headaches, your code will also look more consistent. Because there 
will be situations where a semicolon becomes necessary to resolve 
ambiguities.
&lt;/blockquote&gt;
So what will I be doing? My vote goes to following Douglas Crockford’s &lt;a href="http://javascript.crockford.com/code.html"&gt;JavaScript coding guidelines&lt;/a&gt; for now and I’ll be happily including semicolons in my code.&lt;br /&gt;
&lt;br /&gt;

If you are interested, there are also a couple of discussions on Reddit regarding these couple of posts; &lt;a href="http://www.reddit.com/r/programming/comments/fgjxc/dealing_with_javascripts_automatic_semicolon/"&gt;Dealing with JavaScript’s automatic semicolon insertion&lt;/a&gt; and &lt;a href="http://www.reddit.com/r/javascript/comments/ffy3c/are_semicolons_necessary_in_javascript/"&gt;Are semicolons necessary in JavaScript?&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;


         &lt;/div&gt;
&lt;div class="entry-utility"&gt;
&lt;span class="cat-links"&gt;This entry was posted in &lt;a href="http://blog.stannard.net.au/category/javascript/" rel="category tag" title="View all posts in JavaScript"&gt;JavaScript&lt;/a&gt;&lt;/span&gt;&lt;span class="tag-links"&gt;  and tagged &lt;a href="http://blog.stannard.net.au/tag/asi/" rel="tag"&gt;ASI&lt;/a&gt;, &lt;a href="http://blog.stannard.net.au/tag/coding/" rel="tag"&gt;Coding&lt;/a&gt;, &lt;a href="http://blog.stannard.net.au/tag/convention/" rel="tag"&gt;Convention&lt;/a&gt;, &lt;a href="http://blog.stannard.net.au/tag/semicolon/" rel="tag"&gt;Semicolon&lt;/a&gt;&lt;/span&gt;. Bookmark the &lt;a href="http://blog.stannard.net.au/2011/02/10/should-you-use-semicolons-in-javascript/" title="Permalink to Should you use semicolons in JavaScript?"&gt;permalink&lt;/a&gt;. Both comments and trackbacks are currently closed.&lt;/div&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/zAksTGk84jQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/1252082376509964071/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/should-you-use-semicolons-in-javascript.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/1252082376509964071?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/1252082376509964071?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/zAksTGk84jQ/should-you-use-semicolons-in-javascript.html" title="Should you use semicolons in JavaScript?" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/should-you-use-semicolons-in-javascript.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IDRXY8fip7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-8159875372301588122</id><published>2013-04-07T05:59:00.001-07:00</published><updated>2013-04-07T05:59:34.876-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T05:59:34.876-07:00</app:edited><title>Creating namespaces in JavaScript</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div class="entry-content"&gt;
In the past it was very common to see global variables in snippets of JavaScript code across the web, such as:&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #000066;"&gt;name&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"Spock"&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt; greeting&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
 &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"Hello "&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color: #000066;"&gt;name&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #009900;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
A better approach is to place all of your code within a &lt;strong&gt;namespace&lt;/strong&gt;; an object that contains all of your code and helps to prevent name clashes with JavaScript code written by others.&lt;br /&gt;

&lt;span id="more-322"&gt;&lt;/span&gt;&lt;br /&gt;

The simplest method of creating a namespace is to use an object literal.&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; foo &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
foo.&lt;span style="color: #000066;"&gt;name&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"Spock"&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
foo.&lt;span style="color: #660066;"&gt;greeting&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
 &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"Hello "&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; foo.&lt;span style="color: #000066;"&gt;name&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #009900;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
This can also be specified using a different syntax.&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; foo &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
&amp;nbsp;
 &lt;span style="color: #000066;"&gt;name&lt;/span&gt;&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"Spock"&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
&amp;nbsp;
 greeting&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
  &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"Hello "&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; foo.&lt;span style="color: #000066;"&gt;name&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
 &lt;span style="color: #009900;"&gt;}&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #339933;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
This approach is better that having outright global variables, but it
 exposes everything within the namespace as global. In other words both 
foo.name and foo.greeting are available everywhere.&lt;br /&gt;
&lt;br /&gt;

Another problem with this approach is that greeting needs to refer to ‘foo.name’ rather than just ‘name’.&lt;br /&gt;
&lt;br /&gt;

Another method of creating a namespace is through the use of a self executing function.&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; foo &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;{&lt;/span&gt;
&amp;nbsp;
 &lt;span style="color: #006600; font-style: italic;"&gt;// Create a private variable&lt;/span&gt;
 &lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; &lt;span style="color: #000066;"&gt;name&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"Spock"&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
 &lt;span style="color: #006600; font-style: italic;"&gt;// Create a private function&lt;/span&gt;
 &lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; greeting &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
  &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"Hello "&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color: #000066;"&gt;name&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
 &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
 &lt;span style="color: #006600; font-style: italic;"&gt;// Return an object that exposes our greeting function publicly&lt;/span&gt;
 &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
  greeting&lt;span style="color: #339933;"&gt;:&lt;/span&gt; greeting
 &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #339933;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
Here, when the function is executed it creates a private variable and
 a private inner function. The inner function can refer to the private 
variable directly. The main function then returns an object literal 
containing a reference to the greeting private function – this then 
exposes the greeting function as a public function so we can call it via
 the foo namespace.&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;console.&lt;span style="color: #660066;"&gt;log&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;foo.&lt;span style="color: #660066;"&gt;greeting&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #339933;"&gt;===&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"Hello Spock"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #006600; font-style: italic;"&gt;// true&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #006600; font-style: italic;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
This post was inspired by a good post from David B. Calhoun about &lt;a href="http://davidbcalhoun.com/2011/how-to-spot-outdated-javascript"&gt;spotting outdated JavaScript&lt;/a&gt;. &lt;br /&gt;


         &lt;/div&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/S8kclnejSds" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/8159875372301588122/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/creating-namespaces-in-javascript.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/8159875372301588122?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/8159875372301588122?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/S8kclnejSds/creating-namespaces-in-javascript.html" title="Creating namespaces in JavaScript" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/creating-namespaces-in-javascript.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MMSHc8eip7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-4044207990053389338</id><published>2013-04-07T05:58:00.000-07:00</published><updated>2013-04-07T05:58:09.972-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T05:58:09.972-07:00</app:edited><title>Preventing Hotlinking with Nginx and NodeJS</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div class="entry-content"&gt;
If you are running a NodeJS site via Nginx then you may be using &lt;code&gt;proxy_pass&lt;/code&gt; to route requests from Nginx to Node.&lt;br /&gt;
&lt;br /&gt;

If you’d like to also prevent hot linking then you might like to first have a read of &lt;a href="http://www.marceleichner.de/blog/prevent-hotlinking-but-enable-facebook-and-google-image-sea/"&gt;Marcel Eichner’s post on preventing hot linking&lt;/a&gt; which this post is based on.&lt;br /&gt;
&lt;br /&gt;

Then you can use a slightly modified version of that code which includes the &lt;code&gt;proxy_pass&lt;/code&gt; directive in both of the &lt;code&gt;location&lt;/code&gt; sections.&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="text" style="font-family: monospace;"&gt;server {
    server_name yourdomain.com www.yourdomain.com;
    location ~* (\.jpg|\.png|\.gif)$ {
        valid_referers none blocked yourdomain.com www.yourdomain.com ~\.google\. ~\.yahoo\. ~\.bing\. ~\.facebook\. ~\.fbcdn\.;
        if ($invalid_referer) {
            return 403;
        }
        proxy_pass http://127.0.0.1:8123;
    }
    location / {
        proxy_pass http://127.0.0.1:8123;
    }
}&lt;/pre&gt;
&lt;pre class="text" style="font-family: monospace;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
Some notes about this code:&lt;br /&gt;

In the &lt;code&gt;valid_referers&lt;/code&gt; line, ‘blocked’ allows Referers that have been blocked by a firewall, ‘none’ allows requests with no Referer.&lt;br /&gt;
&lt;br /&gt;

This is then followed by a list of domains and domain patterns that 
are also allowed. Google, Bing, etc are allowed for their image bots to 
access your site.&lt;br /&gt;


        &lt;/div&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/RL15MDn1Wl0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/4044207990053389338/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/preventing-hotlinking-with-nginx-and.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/4044207990053389338?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/4044207990053389338?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/RL15MDn1Wl0/preventing-hotlinking-with-nginx-and.html" title="Preventing Hotlinking with Nginx and NodeJS" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/preventing-hotlinking-with-nginx-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MBQ3w6cSp7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-5492656357981672965</id><published>2013-04-07T05:56:00.003-07:00</published><updated>2013-04-07T05:57:32.219-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T05:57:32.219-07:00</app:edited><title>Decoding jQuery – domManip: DOM Manipulation</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
In the &lt;i&gt;&lt;a href="http://www.blog.highub.com/decoding-jquery/"&gt;Decoding jQuery series&lt;/a&gt;&lt;/i&gt;,
 we will break down every single method in jQuery, to study the beauty 
of the framework, as an appreciation to the collective/creative geniuses
 behind it.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.blog.highub.com/decoding-jquery/attachment/decoding-jquery-4/" rel="attachment wp-att-1576"&gt;&lt;img alt="" class="alignnone size-full wp-image-1576" height="133" src="http://www.blog.highub.com/wp-content/uploads/2011/05/decoding-jquery2.png" title="decoding-jquery" width="272" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Inside &lt;a href="https://github.com/jquery/jquery/blob/master/src/manipulation.js" target="_blank" title="manipulation.js"&gt;manipulation.js&lt;/a&gt; within the jQuery source, there is an interesting internal method named&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;domManip&lt;/code&gt;, this is mainly used for methods like: &lt;code&gt;.append()&lt;/code&gt;, &lt;code&gt;.prepend()&lt;/code&gt;, &lt;code&gt;.before()&lt;/code&gt; and &lt;code&gt;.after()&lt;/code&gt;.&lt;br /&gt;
&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;domManip&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; args&lt;span style="color: #339933;"&gt;,&lt;/span&gt; table&lt;span style="color: #339933;"&gt;,&lt;/span&gt; callback &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
  &lt;span style="color: #006600; font-style: italic;"&gt;//...&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #009900;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;b&gt;Using fragment&lt;/b&gt;&lt;br /&gt;
In &lt;code&gt;&lt;a href="https://github.com/jquery/jquery/blob/master/src/manipulation.js#L289-373" target="_blank" title="domManip"&gt;domManip&lt;/a&gt;&lt;/code&gt;, jQuery first checks if we are dealing with fragment node. In DOM, there are &lt;a href="https://developer.mozilla.org/en/nodeType" target="_blank" title="node Type"&gt;12 different node types&lt;/a&gt;, and the one jQuery is checking is type 11 (&lt;code&gt;Node.DOCUMENT_FRAGMENT_NODE == 11&lt;/code&gt;).&lt;br /&gt;
If we’re in a fragment, just use it, otherwise, building a new one using &lt;code&gt;jQuery.buildFragment&lt;/code&gt;.&lt;br /&gt;
&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; jQuery.&lt;span style="color: #660066;"&gt;support&lt;/span&gt;.&lt;span style="color: #660066;"&gt;parentNode&lt;/span&gt; &lt;span style="color: #339933;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; parent &lt;span style="color: #339933;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; parent.&lt;span style="color: #660066;"&gt;nodeType&lt;/span&gt; &lt;span style="color: #339933;"&gt;===&lt;/span&gt; &lt;span style="color: #cc0000;"&gt;11&lt;/span&gt; &lt;span style="color: #339933;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; parent.&lt;span style="color: #660066;"&gt;childNodes&lt;/span&gt;.&lt;span style="color: #660066;"&gt;length&lt;/span&gt; &lt;span style="color: #339933;"&gt;===&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #660066;"&gt;length&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
    results &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt; fragment&lt;span style="color: #339933;"&gt;:&lt;/span&gt; parent &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;else&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
    results &lt;span style="color: #339933;"&gt;=&lt;/span&gt; jQuery.&lt;span style="color: #660066;"&gt;buildFragment&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; args&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; scripts &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #009900;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;b&gt;jQuery.buildFragment&lt;/b&gt;&lt;br /&gt;
Let’s take out &lt;code&gt;&lt;a href="https://github.com/jquery/jquery/blob/master/src/manipulation.js#L477-523" target="_blank" title="buildFragment"&gt;jQuery.buildFragment&lt;/a&gt;&lt;/code&gt; and see what it does. The method comes with excellent explanation that talks about what each block of code does:&lt;br /&gt;
&lt;br /&gt;
1. nodes may contain either an explicit document object, a jQuery 
collection or context object. The following checks if nodes[0] contains a
 valid object to assign to doc&lt;br /&gt;
&lt;br /&gt;
&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; nodes &lt;span style="color: #339933;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; nodes&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;0&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
  doc &lt;span style="color: #339933;"&gt;=&lt;/span&gt; nodes&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;0&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;.&lt;span style="color: #660066;"&gt;ownerDocument&lt;/span&gt; &lt;span style="color: #339933;"&gt;||&lt;/span&gt; nodes&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;0&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #009900;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
2. Ensure that an attr object doesn’t incorrectly stand in as a 
document object, Chrome and Firefox seem to allow this to occur and will
 throw exception&lt;br /&gt;
&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #339933;"&gt;!&lt;/span&gt;doc.&lt;span style="color: #660066;"&gt;createDocumentFragment&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
  doc &lt;span style="color: #339933;"&gt;=&lt;/span&gt; document&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
With the above check, the script will then fragment&lt;br /&gt;
&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #339933;"&gt;!&lt;/span&gt;fragment &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
  fragment &lt;span style="color: #339933;"&gt;=&lt;/span&gt; doc.&lt;span style="color: #660066;"&gt;createDocumentFragment&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
  jQuery.&lt;span style="color: #660066;"&gt;clean&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; args&lt;span style="color: #339933;"&gt;,&lt;/span&gt; doc&lt;span style="color: #339933;"&gt;,&lt;/span&gt; fragment&lt;span style="color: #339933;"&gt;,&lt;/span&gt; scripts &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #009900;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
3. To check if an element is cacheable. The method only caches 
“small” (1/2 KB) HTML strings that are associated with the main 
document. Cloning options loses the selected state, so it doesn’t cache 
them. IE 6 doesn’t like it when you put &lt;code&gt;object&lt;/code&gt; or &lt;code&gt;embed&lt;/code&gt;
 elements in a fragment. Also, WebKit does not clone ‘checked’ 
attributes on cloneNode, so it doesn’t cache them either. Lastly, IE6, 
7, 8 will not correctly reuse cached fragments that were created from 
unknown elements.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; args.&lt;span style="color: #660066;"&gt;length&lt;/span&gt; &lt;span style="color: #339933;"&gt;===&lt;/span&gt; &lt;span style="color: #cc0000;"&gt;1&lt;/span&gt; &lt;span style="color: #339933;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;typeof&lt;/span&gt; first &lt;span style="color: #339933;"&gt;===&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"string"&lt;/span&gt; &lt;span style="color: #339933;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; first.&lt;span style="color: #660066;"&gt;length&lt;/span&gt; &lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: #cc0000;"&gt;512&lt;/span&gt; &lt;span style="color: #339933;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; doc &lt;span style="color: #339933;"&gt;===&lt;/span&gt; document &lt;span style="color: #339933;"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
    first.&lt;span style="color: #660066;"&gt;charAt&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;0&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #339933;"&gt;===&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"&amp;lt;"&lt;/span&gt; &lt;span style="color: #339933;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color: #339933;"&gt;!&lt;/span&gt;rnocache.&lt;span style="color: #660066;"&gt;test&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; first &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #339933;"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
    &lt;span style="color: #009900;"&gt;(&lt;/span&gt;jQuery.&lt;span style="color: #660066;"&gt;support&lt;/span&gt;.&lt;span style="color: #660066;"&gt;checkClone&lt;/span&gt; &lt;span style="color: #339933;"&gt;||&lt;/span&gt; &lt;span style="color: #339933;"&gt;!&lt;/span&gt;rchecked.&lt;span style="color: #660066;"&gt;test&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; first &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #339933;"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
    &lt;span style="color: #009900;"&gt;(&lt;/span&gt;jQuery.&lt;span style="color: #660066;"&gt;support&lt;/span&gt;.&lt;span style="color: #660066;"&gt;html5Clone&lt;/span&gt; &lt;span style="color: #339933;"&gt;||&lt;/span&gt; &lt;span style="color: #339933;"&gt;!&lt;/span&gt;rnoshimcache.&lt;span style="color: #660066;"&gt;test&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; first &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
&amp;nbsp;
    cacheable &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
    cacheresults &lt;span style="color: #339933;"&gt;=&lt;/span&gt; jQuery.&lt;span style="color: #660066;"&gt;fragments&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt; first &lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
    &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; cacheresults &lt;span style="color: #339933;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; cacheresults &lt;span style="color: #339933;"&gt;!==&lt;/span&gt; &lt;span style="color: #cc0000;"&gt;1&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
      fragment &lt;span style="color: #339933;"&gt;=&lt;/span&gt; cacheresults&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
    &lt;span style="color: #009900;"&gt;}&lt;/span&gt;
  &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #009900;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
The following script does the caching once it’s determined cacheable:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; cacheable &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
  jQuery.&lt;span style="color: #660066;"&gt;fragments&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt; first &lt;span style="color: #009900;"&gt;]&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; cacheresults &lt;span style="color: #339933;"&gt;?&lt;/span&gt; fragment &lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #cc0000;"&gt;1&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #009900;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;b&gt;Appending script&lt;/b&gt;&lt;br /&gt;
I first discovered this while inserting a &lt;code&gt;script&lt;/code&gt; tag using jQuery and inspect the element without seeing this. This is because within the &lt;code&gt;domManip&lt;/code&gt;, there is a &lt;a href="https://github.com/jquery/jquery/blob/master/src/manipulation.js#L350-368" target="_blank"&gt;check&lt;/a&gt; for script elements.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; scripts.&lt;span style="color: #660066;"&gt;length&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
  jQuery.&lt;span style="color: #660066;"&gt;each&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; scripts&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; i&lt;span style="color: #339933;"&gt;,&lt;/span&gt; elem &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
    &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; elem.&lt;span style="color: #660066;"&gt;src&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
      jQuery.&lt;span style="color: #660066;"&gt;ajax&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;{&lt;/span&gt;
        type&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"GET"&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
        global&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;false&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
        url&lt;span style="color: #339933;"&gt;:&lt;/span&gt; elem.&lt;span style="color: #660066;"&gt;src&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
        async&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;false&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
        dataType&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"script"&lt;/span&gt;
      &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
    &lt;span style="color: #009900;"&gt;}&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;else&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
      jQuery.&lt;span style="color: #660066;"&gt;globalEval&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; elem.&lt;span style="color: #660066;"&gt;text&lt;/span&gt; &lt;span style="color: #339933;"&gt;||&lt;/span&gt; elem.&lt;span style="color: #660066;"&gt;textContent&lt;/span&gt; &lt;span style="color: #339933;"&gt;||&lt;/span&gt; elem.&lt;span style="color: #660066;"&gt;innerHTML&lt;/span&gt; &lt;span style="color: #339933;"&gt;||&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;""&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #660066;"&gt;replace&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; rcleanScript&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"/*$0*/"&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
    &lt;span style="color: #009900;"&gt;}&lt;/span&gt;
&amp;nbsp;
    &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; elem.&lt;span style="color: #660066;"&gt;parentNode&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
      elem.&lt;span style="color: #660066;"&gt;parentNode&lt;/span&gt;.&lt;span style="color: #660066;"&gt;removeChild&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; elem &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
    &lt;span style="color: #009900;"&gt;}&lt;/span&gt;
  &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #009900;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
This check does 4 things here:&lt;br /&gt;
1. first it detects and loop through all the script elements&lt;br /&gt;
2. if the script element has a &lt;code&gt;src&lt;/code&gt; attribute, then jQuery uses jQuery ajax to load the script&lt;br /&gt;
3. if the script is embedded, jQuery uses jQuery.globalEval to evaluate the script&lt;br /&gt;
4. it removed the child from the parent element&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/jpvXKbz2tQI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/5492656357981672965/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/decoding-jquery-dommanip-dom.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/5492656357981672965?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/5492656357981672965?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/jpvXKbz2tQI/decoding-jquery-dommanip-dom.html" title="Decoding jQuery – domManip: DOM Manipulation" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/decoding-jquery-dommanip-dom.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QASXYycCp7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-885423490189695848</id><published>2013-04-07T05:55:00.002-07:00</published><updated>2013-04-07T05:55:48.898-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T05:55:48.898-07:00</app:edited><title>Decoding jQuery – Callbacks Object</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
In the &lt;em&gt;&lt;a href="http://www.blog.highub.com/decoding-jquery/"&gt;Decoding jQuery series&lt;/a&gt;&lt;/em&gt;,
 we will break down every single method in jQuery, to study the beauty 
of the framework, as an appreciation to the collective/creative geniuses
 behind it.&lt;br /&gt;
&lt;br /&gt;

&lt;a href="http://www.blog.highub.com/decoding-jquery/attachment/decoding-jquery-4/" rel="attachment wp-att-1576"&gt;&lt;img alt="" class="alignnone size-full wp-image-1576" height="133" src="http://www.blog.highub.com/wp-content/uploads/2011/05/decoding-jquery2.png" title="decoding-jquery" width="272" /&gt;&lt;/a&gt;&lt;br /&gt;

&lt;br /&gt;
The jQuery.Callbacks() function, introduced in version 1.7, returns a
 multi-purpose object that provides a powerful way to manage callback 
lists. It supports adding, removing, firing, and disabling callbacks. (&lt;a href="http://api.jquery.com/category/callbacks-object/" target="_blank"&gt;jQuery API Doc&lt;/a&gt;)&lt;br /&gt;

It provides many &lt;a href="http://api.jquery.com/jQuery.Callbacks/#supported-flags" target="_blank"&gt;Supported Flags&lt;/a&gt;.
 It is structured as a list of space-separated strings that change how 
the callback list behaves (eg. $.Callbacks( ‘unique stopOnFalse’ )).&lt;br /&gt;

Callbacks Object can also be used to do &lt;a href="http://api.jquery.com/jQuery.Callbacks/#pubsub" target="_blank"&gt;pub/sub&lt;/a&gt; and it is also used to make &lt;a href="http://api.jquery.com/category/deferred-object/" target="_blank"&gt;jQuery.Deferred()&lt;/a&gt;.&lt;br /&gt;

&lt;strong&gt;1. Structure of jQuery.Callbacks()&lt;/strong&gt;&lt;br /&gt;

Below is how the structure of &lt;code&gt;jQuery.Callbacks()&lt;/code&gt; function looks like in jQuery source(&lt;a href="https://github.com/jquery/jquery/blob/master/src/callbacks.js" target="_blank"&gt;callbacks.js&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;jQuery.&lt;span style="color: #660066;"&gt;Callbacks&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; flags &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
&amp;nbsp;
  &lt;span style="color: #006600; font-style: italic;"&gt;// Convert flags from String-formatted to Object-formatted&lt;/span&gt;
  &lt;span style="color: #006600; font-style: italic;"&gt;// (we check in cache first)&lt;/span&gt;
  flags &lt;span style="color: #339933;"&gt;=&lt;/span&gt; flags &lt;span style="color: #339933;"&gt;?&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; flagsCache&lt;span style="color: #009900;"&gt;[&lt;/span&gt; flags &lt;span style="color: #009900;"&gt;]&lt;/span&gt; &lt;span style="color: #339933;"&gt;||&lt;/span&gt; createFlags&lt;span style="color: #009900;"&gt;(&lt;/span&gt; flags &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
  &lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; &lt;span style="color: #006600; font-style: italic;"&gt;// Actual callback list&lt;/span&gt;
    list &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
    &lt;span style="color: #006600; font-style: italic;"&gt;// Stack of fire calls for repeatable lists&lt;/span&gt;
    stack &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
    ...
    &lt;span style="color: #006600; font-style: italic;"&gt;// Add one or several callbacks to the list&lt;/span&gt;
    add &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; args &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
      &lt;span style="color: #006600; font-style: italic;"&gt;//...&lt;/span&gt;
    &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
    &lt;span style="color: #006600; font-style: italic;"&gt;// Fire callbacks&lt;/span&gt;
    fire &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; context&lt;span style="color: #339933;"&gt;,&lt;/span&gt; args &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
      &lt;span style="color: #006600; font-style: italic;"&gt;//...&lt;/span&gt;
    &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
    self &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
      &lt;span style="color: #006600; font-style: italic;"&gt;//...&lt;/span&gt;
    &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
  &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; self&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #339933;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;strong&gt;add function&lt;/strong&gt; – adds a list of callbacks to the variable &lt;code&gt;list&lt;/code&gt; array.&lt;br /&gt;

&lt;strong&gt;fire function&lt;/strong&gt; – loops through the items in the list and fire them one by one.&lt;br /&gt;

&lt;strong&gt;self object&lt;/strong&gt; – is the actual Callbacks object returned at the end of the function. &lt;br /&gt;

The most important methods in the self object are:&lt;br /&gt;
&lt;a href="http://api.jquery.com/callbacks.add/" target="_blank"&gt;add()&lt;/a&gt; adds a callback or a collection of callbacks to the list, this is the one we use to build &lt;code&gt;subscribe&lt;/code&gt; in pub/sub function&lt;br /&gt;
&lt;a href="http://api.jquery.com/callbacks.fireWith/" target="_blank"&gt;fireWith()&lt;/a&gt; method actually calls all callbacks with the given context and arguments&lt;br /&gt;
&lt;a href="http://api.jquery.com/callbacks.fireWith/" target="_blank"&gt;fire()&lt;/a&gt; method inside the &lt;code&gt;self&lt;/code&gt; object executes &lt;code&gt;fireWith&lt;/code&gt; with the object as the context, this is the one we use to build &lt;code&gt;publish&lt;/code&gt; in pub/sub function&lt;br /&gt;

There are also many other essential and useful methods in the self object, they are:&lt;br /&gt;
&lt;a href="http://api.jquery.com/callbacks.has/" target="_blank"&gt;has()&lt;/a&gt;: a boolean check to find out if a callback list contains a specific callback&lt;br /&gt;
&lt;a href="http://api.jquery.com/callbacks.remove/" target="_blank"&gt;remove()&lt;/a&gt;: Remove a callback from the list&lt;br /&gt;
&lt;a href="http://api.jquery.com/callbacks.empty/" target="_blank"&gt;empty()&lt;/a&gt;: a method for emptiying a callback list of all callbacks added so far&lt;br /&gt;
&lt;a href="http://api.jquery.com/callbacks.disable/" target="_blank"&gt;disable()&lt;/a&gt;: disables further calls being made to the callback list&lt;br /&gt;
&lt;a href="http://api.jquery.com/callbacks.lock/" target="_blank"&gt;lock()&lt;/a&gt;: lock the list in its current state&lt;br /&gt;
&lt;br /&gt;

&lt;strong&gt;2. How to use Callbacks object&lt;/strong&gt;&lt;br /&gt;
Suppose we have a Rails application, assume we have a function &lt;code&gt;displayAlert&lt;/code&gt; and &lt;code&gt;msgStatus&lt;/code&gt; like the ones below.&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; displayAlert &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; msg &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
      console.&lt;span style="color: #660066;"&gt;log&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; msg &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
    &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
    msgStatus &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; msg &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
      fn1&lt;span style="color: #009900;"&gt;(&lt;/span&gt;msg &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;'...feed is read!'&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
      &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;false&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
    &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
    callbacks &lt;span style="color: #339933;"&gt;=&lt;/span&gt; $.&lt;span style="color: #660066;"&gt;Callbacks&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
callbacks.&lt;span style="color: #660066;"&gt;add&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; displayAlert &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
callbacks.&lt;span style="color: #660066;"&gt;fire&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;'new message 1'&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #006600; font-style: italic;"&gt;// outputs: new message 1&lt;/span&gt;
callbacks.&lt;span style="color: #660066;"&gt;add&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; msgStatus &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
callbacks.&lt;span style="color: #660066;"&gt;fire&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;'new message 2'&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #006600; font-style: italic;"&gt;// outputs: new message 2, new message 2 is read!&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #006600; font-style: italic;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
After creating a &lt;strong&gt;callbacks = $.Callbacks();&lt;/strong&gt;, we can use add to add &lt;code&gt;displayAlert&lt;/code&gt; to the &lt;code&gt;callbacks&lt;/code&gt; variable as a list item, and later add &lt;code&gt;postFeed&lt;/code&gt; as a new item. By using &lt;code&gt;fire&lt;/code&gt;, the callbacks object is fired with the function/functions executed.&lt;br /&gt;

As explained above, fire is actually &lt;code&gt;fireWith&lt;/code&gt; with the object itself as the context, you can also define/specify a context and arguments for callbacks being bound and fired.&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; fn &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;argA&lt;span style="color: #339933;"&gt;,&lt;/span&gt; argB&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
  &lt;span style="color: #006600; font-style: italic;"&gt;//..&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;
callbacks.&lt;span style="color: #660066;"&gt;add&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; fn &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
callbacks.&lt;span style="color: #660066;"&gt;fireWith&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; window&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #3366cc;"&gt;'foo'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;'bar'&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #006600; font-style: italic;"&gt;// outputs: foo, bar&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #006600; font-style: italic;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
Addy Osmani provided example code for some of these methods and some of the flags arguments in his &lt;a href="http://addyosmani.com/blog/jquery-1-7s-callbacks-feature-demystified/" target="_blank" title="Demystifying jQuery 1.7's $.Callbacks"&gt;Demystifying jQuery 1.7′s $.Callbacks&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;

&lt;strong&gt;3. How does a pub/sub function work &lt;/strong&gt;&lt;br /&gt;

Below is an example of building a &lt;code&gt;jQuery.Actions&lt;/code&gt; for publish and subscribe when microposts are received/sent, as well as sent status.&lt;br /&gt;
&lt;br /&gt;


&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; displayAlert &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;msg&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
  &lt;span style="color: #006600; font-style: italic;"&gt;//...&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; msgStatus &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;msg&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
  &lt;span style="color: #006600; font-style: italic;"&gt;//...&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="wp_syntax"&gt;
&lt;div class="code"&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; actionItems &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
jQuery.&lt;span style="color: #660066;"&gt;Actions&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; id &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
  &lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; callbacks&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
      method&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
      action &lt;span style="color: #339933;"&gt;=&lt;/span&gt; id &lt;span style="color: #339933;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; actionItems&lt;span style="color: #009900;"&gt;[&lt;/span&gt; id &lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
  &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #339933;"&gt;!&lt;/span&gt;action &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
    callbacks &lt;span style="color: #339933;"&gt;=&lt;/span&gt; jQuery.&lt;span style="color: #660066;"&gt;Callbacks&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
    action &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
      publish&lt;span style="color: #339933;"&gt;:&lt;/span&gt; callbacks.&lt;span style="color: #660066;"&gt;fire&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
      subscribe&lt;span style="color: #339933;"&gt;:&lt;/span&gt; callbacks.&lt;span style="color: #660066;"&gt;add&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
      unsubscribe&lt;span style="color: #339933;"&gt;:&lt;/span&gt; callbacks.&lt;span style="color: #660066;"&gt;remove&lt;/span&gt;
    &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
    &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; id &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
      actionItems&lt;span style="color: #009900;"&gt;[&lt;/span&gt; id &lt;span style="color: #009900;"&gt;]&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; action&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
    &lt;span style="color: #009900;"&gt;}&lt;/span&gt;
  &lt;span style="color: #009900;"&gt;}&lt;/span&gt;
  &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; action&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #006600; font-style: italic;"&gt;// Subscribers&lt;/span&gt;
$.&lt;span style="color: #660066;"&gt;Actions&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #3366cc;"&gt;'micropostArrived'&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #660066;"&gt;subscribe&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;displayAlert&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
$.&lt;span style="color: #660066;"&gt;Actions&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #3366cc;"&gt;'micropostSent'&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #660066;"&gt;subscribe&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;displayAlert&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
$.&lt;span style="color: #660066;"&gt;Actions&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #3366cc;"&gt;'micropostSent'&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #660066;"&gt;subscribe&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;msgStatus&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #006600; font-style: italic;"&gt;// Publisher&lt;/span&gt;
$.&lt;span style="color: #660066;"&gt;Actions&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #3366cc;"&gt;'micropostArrived'&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #660066;"&gt;publish&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #3366cc;"&gt;'New Items arrived'&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
$.&lt;span style="color: #660066;"&gt;Actions&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #3366cc;"&gt;'micropostSent'&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #660066;"&gt;publish&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #3366cc;"&gt;'Item posted'&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="javascript" style="font-family: monospace;"&gt;&lt;span style="color: #339933;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
In the above example, the &lt;code&gt;publish&lt;/code&gt; and &lt;code&gt;subscribe&lt;/code&gt; use &lt;code&gt;fire&lt;/code&gt; and &lt;code&gt;add&lt;/code&gt; for the pub/sub pattern, and &lt;code&gt;remove&lt;/code&gt; for &lt;code&gt;unsubscribe&lt;/code&gt;.&lt;br /&gt;

This is not the only way to use jQuery for pub/sub, Addy’s &lt;a href="https://gist.github.com/1321768" target="_blank" title="Four Ways To Do Pub/Sub With jQuery 1.7 and jQuery UI "&gt;Four Ways To Do Pub/Sub With jQuery 1.7 and jQuery UI&lt;/a&gt; gist discussed more ways of doing it with jQuery and jQuery UI.&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/_95qxC9tGXA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/885423490189695848/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/decoding-jquery-callbacks-object.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/885423490189695848?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/885423490189695848?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/_95qxC9tGXA/decoding-jquery-callbacks-object.html" title="Decoding jQuery – Callbacks Object" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/decoding-jquery-callbacks-object.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UER3g4eCp7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-4720160802905357762</id><published>2013-04-07T05:53:00.003-07:00</published><updated>2013-04-07T05:53:26.630-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T05:53:26.630-07:00</app:edited><title>Alienware Joins the Ubuntu OEM Family</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;strong&gt;Alienware &lt;strong&gt;(a Dell Inc. subsidiary) begins&amp;nbsp;offering&amp;nbsp;its first&lt;/strong&gt;&amp;nbsp;Ubuntu-powered PC targeted at gamers.&lt;/strong&gt;&lt;br /&gt;

&lt;div class="wp-caption alignright" id="attachment_76191" style="width: 237px;"&gt;
&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/alienwarex51.png" rel="fancybox"&gt;&lt;img alt="Image from alienware.com" class="size-full wp-image-76191" height="211" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/alienwarex51.png" width="237" /&gt;&lt;/a&gt;&lt;div class="wp-caption-text"&gt;
&lt;em&gt;Image from alienware.com&lt;/em&gt;&lt;/div&gt;
&lt;/div&gt;
The Alienware x51 series is a standalone PC tower which you would 
attach to your own TV and peripherals and starts at $599 (ranging up to 
$1049, with “build yours” options).&lt;br /&gt;

&lt;h4&gt;
Ubuntu on Alienware&lt;/h4&gt;
Regarding Ubuntu, Alienware describes it’s “simple and stylish” 
nature, and highlights that it’s “fast and secure” and offers “free 
applications and storage”, not to mention explaining (to newcomers, 
presumably) the plethora of Ubuntu default applications.&lt;br /&gt;

Alienware also plugs Steam for Linux as the gaming platform on this 
PC, noting the rapidly expanding Linux game library that Steam provides.&lt;br /&gt;

&lt;h4&gt;
Video Hardware&lt;/h4&gt;
Arguably&amp;nbsp;the most important element for gaming is the graphics card 
and the X51 systems offer NVIDIA hardware. Of course, under Ubuntu you 
would have NVIDIA’s supported drivers out-of-the-box, so you would be 
able to game right away. Having said that, it probably would be ideal to
 keep tabs on updates for the drivers regularly.&lt;br /&gt;

&lt;h4&gt;
More info&lt;/h4&gt;
You can check out the Alienware website for more info on the x51 
series, such as the range of hardware specifications and availability.&lt;br /&gt;
&lt;br /&gt;

&lt;div style="text-align: center;"&gt;
&lt;a class="website-link" href="http://www.alienware.com/ubuntu/" target="_blank" title="Alienware X51 with Ubuntu"&gt; Alienware X51 with Ubuntu&amp;nbsp;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/v2PMGTLrxxU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/4720160802905357762/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/alienware-joins-ubuntu-oem-family.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/4720160802905357762?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/4720160802905357762?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/v2PMGTLrxxU/alienware-joins-ubuntu-oem-family.html" title="Alienware Joins the Ubuntu OEM Family" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/alienware-joins-ubuntu-oem-family.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YDR3g-cSp7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-6638912062501943935</id><published>2013-04-07T05:52:00.003-07:00</published><updated>2013-04-07T05:52:56.659-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T05:52:56.659-07:00</app:edited><title>Intel Release Graphical Installer for Their Linux Drivers</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;strong&gt;The&amp;nbsp;Intel Linux Graphics Installer provides a friendly way for downloading the latest Intel Linux graphics software stack.&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;

Early in March, Intel –specifically the Intel Open Source Technology 
Centre– released a graphical installer providing Linux users with a 
friendly way for downloading the latest Intel-related open source Linux 
graphics components –for the more technical this includes:&lt;br /&gt;

&lt;ul&gt;
&lt;li&gt;the Intel core kernel driver&lt;/li&gt;
&lt;li&gt;Mesa 3D rendering library, responsible for 3D rendering, OpenGL compatibility, GLES, etc.&lt;/li&gt;
&lt;li&gt;the 2D renderer for the&amp;nbsp;X Window stack (xf86-video-intel), also known as DDX.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;libdrm&lt;/em&gt;&amp;nbsp;–the “Direct Rendering Manager” library,&amp;nbsp;for communication between user applications and the kernel&lt;/li&gt;
&lt;li&gt;the Cairo graphics&amp;nbsp;library, for 2D rendering and acceleration&lt;/li&gt;
&lt;li&gt;&lt;em&gt;vaapi-driver-intel &lt;/em&gt;–the APIs for&amp;nbsp;hardware-accelerated video rendering, processing and output&lt;/li&gt;
&lt;li&gt;initial support for Wayland&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Getting the Latest and Greatest Intel Linux Drivers&lt;/h4&gt;
Intel Linux Graphics Installer automatically detects your hardware 
and system specifics and adds a software repository to your sources for 
keeping you up-to-date. The installer also performs a check to see if 
your system is running the latest drivers and, if not, it runs a system 
upgrade.&lt;br /&gt;
&lt;br /&gt;

&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/intelgraphicsdriverinstaller.png" rel="fancybox"&gt;&lt;img alt="intelgraphicsdriverinstaller" class="size-full wp-image-76213 aligncenter" height="382" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/intelgraphicsdriverinstaller.png" width="804" /&gt;&lt;/a&gt;&lt;br /&gt;

&lt;br /&gt;
However, the installer doesn’t automatically add the repository 
authentication key to your system but it can manually added by opening&amp;nbsp;a
 terminal, and executing:&lt;br /&gt;
&lt;br /&gt;

&lt;pre&gt;wget --no-check-certificate https://download.01.org/gfx/RPM-GPG-KEY-ilg -O - | \
sudo apt-key add -&lt;/pre&gt;
&lt;h4&gt;
Download &amp;amp; Install for Ubuntu&lt;/h4&gt;
Supporting both 32 and 64 bit systems, the&amp;nbsp;Intel Linux Graphics 
Installer is available for download for Ubuntu 12.04 and 12.10 (as well 
as Fedora 17, 18) via their website:&lt;br /&gt;

&lt;div style="text-align: center;"&gt;
&lt;a class="website-link" href="https://01.org/linuxgraphics/downloads/2013/intel-linux-graphics-installer" target="_blank" title="Download Intel Linux Graphics Installer"&gt; Download Intel Linux Graphics Installer&amp;nbsp;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/T66cENQIKBg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/6638912062501943935/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/intel-release-graphical-installer-for_7.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/6638912062501943935?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/6638912062501943935?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/T66cENQIKBg/intel-release-graphical-installer-for_7.html" title="Intel Release Graphical Installer for Their Linux Drivers" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/intel-release-graphical-installer-for_7.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YARHoyfip7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-284086568806544086</id><published>2013-04-07T05:52:00.000-07:00</published><updated>2013-04-07T05:52:25.496-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T05:52:25.496-07:00</app:edited><title>Spotify Rival Rdio Gets New Ubuntu App</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;strong&gt;Music streaming service, and major Spotify rival, &lt;a href="http://rdio.com/" target="_blank" title="Rdio Website"&gt;Rdio&lt;/a&gt;&amp;nbsp;recently&amp;nbsp;upped its ‘free’ offerings for international users.&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;
&lt;br /&gt;
For the cost of an e-mail address users in a multitude of countries, 
including the UK, Germany and France, can now get 6 months of free 
on-demand access to Rdio’s library of music.&lt;br /&gt;

With over 18 million tracks on offer – albeit 3 million less than Spotify – most major artists, labels and songs are available.&lt;br /&gt;
&lt;br /&gt;

Alongside the 6 month ‘trial period’ free users are also subject to a
 monthly playback limit. There’s no set-rate for how many songs this is 
but there is a green ‘tracks remaining’ meter at the top of the Rdio 
page to let you know how much free music you have remaining for the 
present month.&lt;br /&gt;
&lt;br /&gt;

&lt;div class="wp-caption aligncenter" id="attachment_73158" style="width: 600px;"&gt;
&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/02/meter.jpg" rel="fancybox"&gt;&lt;img alt="meter" class="size-full wp-image-73158" height="139" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/02/meter.jpg" title="Track Remaining Meter on Rdio" width="600" /&gt;&lt;/a&gt;&lt;div class="wp-caption-text"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="wp-caption-text"&gt;
Track Remaining Meter on Rdio&lt;/div&gt;
&lt;div class="wp-caption-text"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
For contrast, Spotify offers six months of&lt;em&gt; unlimited&lt;/em&gt; but ad-supported playback for free. After this free users are subject to a 2.5 hour listening limit per week thereafter.&lt;br /&gt;

Rdio’s hope is, of course, that by offering a relatively&amp;nbsp;lengthy free
 trial with few limits, users will be such fans&amp;nbsp;of the service they’ll 
be chomping at the bit to sign up to one of the two&amp;nbsp;premium&amp;nbsp;accounts on 
offer when their free trial ends.&lt;br /&gt;

With Rdio, $4.99/£4.99 per month gets you unlimited web/desktop app 
playback, while&amp;nbsp;£9.99/$9.99 a month extends this access to smart-phones,
 tablets and media devices.&lt;br /&gt;

&lt;h3&gt;
Availability&lt;/h3&gt;
Rdio is currently available to users in the USA, New Zealand, 
Australia and much of western Europe, including Germany, France, Sweden 
and the UK.&lt;br /&gt;

A roll-out to Japan on&amp;nbsp;the&amp;nbsp;cards for later this month.&lt;br /&gt;

&lt;h3&gt;
Accessing Rdio on Ubuntu&lt;/h3&gt;
So that’s &lt;em&gt;what&lt;/em&gt; Rdio offers for free and &lt;em&gt;where&lt;/em&gt; it offers it – but how well supported is it in Ubuntu?&lt;br /&gt;

Like Spotify, Rdio provides desktop applications for various 
platforms but, unlike Spotify, this doesn’t include Linux. Worse still, 
Rdio say that&amp;nbsp;&lt;em style="font-size: 14px;"&gt;“wider Linux desktop support isn’t currently on the roadmap.”&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;

The good news is that&lt;em&gt; Rdio&lt;/em&gt;‘s primary playback spot is via 
its gorgeous web player. This can be accessed from any web-browser that 
supports Flash, and on any platform. Just log-in and away you go.&lt;br /&gt;

&lt;h4&gt;
Unity Web App&lt;/h4&gt;
&lt;div class="wp-caption alignright" id="attachment_73174" style="width: 300px;"&gt;
&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/02/unity-rdio.jpg" rel="fancybox"&gt;&lt;img alt="unity-rdio" class="size-medium wp-image-73174" height="145" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/02/unity-rdio-300x145.jpg" title="Unity web app rdio" width="300" /&gt;&lt;/a&gt;&lt;div class="wp-caption-text"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="wp-caption-text"&gt;
A Unity Web App is Already Available&lt;/div&gt;
&lt;div class="wp-caption-text"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
Further still, Rdio is one of the few third-party websites to support
 Unity’s (much maligned) Web Apps feature. Visit the web-site in Firefox
 or Chromium and you’ll be prompted to enable integration.&lt;br /&gt;
&lt;br /&gt;

Whilst this approach integrates the web plater with Ubuntu’s Sound 
Menu it doesn’t support track change notifications,&amp;nbsp;quick-list&amp;nbsp;controls,
 or media key support.&lt;br /&gt;

In fact, here at least, it also lacks an icon…&lt;br /&gt;
&lt;br /&gt;

The good news is that, thanks to a third party developer, we can now go one better on Ubuntu…&lt;br /&gt;

&lt;h3&gt;
New Rdio Desktop App for Ubuntu&lt;/h3&gt;
‘&lt;a href="https://github.com/sgringwe/rdio" target="_blank"&gt;Rdio&lt;/a&gt;‘ by&amp;nbsp;developer &lt;strong style="font-size: 14px;"&gt;Scott Ringwelski&amp;nbsp;&lt;/strong&gt;is an unofficial Rdio app for Ubuntu.&lt;br /&gt;

It runs the Rdio website interface in a dedicated windowed ‘wrapper’ 
on the desktop, hooking into the Ubuntu Sound Menu,&amp;nbsp;notification&amp;nbsp;system 
and Unity Quicklists.&lt;br /&gt;
&lt;br /&gt;

&lt;div class="wp-caption aligncenter" id="attachment_73047" style="width: 750px;"&gt;
&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/02/rdio-app.jpg" rel="fancybox"&gt;&lt;img alt="rdio-app" class=" wp-image-73047" height="368" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/02/rdio-app.jpg" width="750" /&gt;&lt;/a&gt;&lt;div class="wp-caption-text"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="wp-caption-text"&gt;
Rdio Desktop App for Ubuntu – Unity Support Baked In&lt;/div&gt;
&lt;div class="wp-caption-text"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
These minor additions turn what is, essentially, a ‘web-app’ into 
something that feels more native than running the Rdio site in a browser
 tab.&lt;br /&gt;
&lt;br /&gt;

Simple things, like being able to hit the ‘Next’ or ‘Pause’ keys to control playback really aid this.&lt;br /&gt;

If you’ve been looking for a reason to give Rdio a go – now seems the perfect time.&lt;br /&gt;

&lt;h4&gt;
Features&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu Sound Menu Integration&lt;/li&gt;
&lt;li&gt;Ubuntu Notification System Support&lt;/li&gt;
&lt;li&gt;Unity Launcher Quicklist&lt;/li&gt;
&lt;li&gt;Media Key Support&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Drawbacks&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Clicking ‘x’ will exit the app&lt;/li&gt;
&lt;li&gt;Adobe Flash is required for playback&lt;/li&gt;
&lt;li&gt;Doesn’t support music download&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
Download Rdio for Ubuntu&lt;/h3&gt;
Installing Rdio in Ubuntu 12.04, 12.10 &amp;amp; 12.10 is as easy as adding the following PPA:&lt;br /&gt;

&lt;pre&gt;sudo add-apt-repository ppa:sgringwe/rdio&lt;/pre&gt;
&lt;pre&gt;sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install rdio&lt;/pre&gt;
Or download and install one of the following .deb installers:&lt;br /&gt;
&lt;br /&gt;

&lt;div style="text-align: center;"&gt;
&lt;a class="chrome-web-store-link" href="https://code.launchpad.net/%7Esgringwe/+archive/rdio/+packages" target="_blank" title=""&gt; Download Rdio (.Deb) Installers&amp;nbsp;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
For more information on Rdio for Ubuntu head over to the project’s Github page:&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;a class="informational-link" href="https://github.com/sgringwe/rdio" target="_blank" title=""&gt; Rdio on GitHub &lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/DrB712rmN38" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/284086568806544086/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/spotify-rival-rdio-gets-new-ubuntu-app.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/284086568806544086?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/284086568806544086?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/DrB712rmN38/spotify-rival-rdio-gets-new-ubuntu-app.html" title="Spotify Rival Rdio Gets New Ubuntu App" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/spotify-rival-rdio-gets-new-ubuntu-app.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cMQ3k7eip7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-4374245163021530985</id><published>2013-04-07T05:51:00.000-07:00</published><updated>2013-04-07T05:51:22.702-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T05:51:22.702-07:00</app:edited><title>Latest Release of GNOME Web Browser Available for Ubuntu 13.04 Users</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
       &lt;nav id="post-nav" role="article"&gt;
        
        
       &lt;/nav&gt;
      


      
          &lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/web-epiphany-38.jpg" rel="fancybox"&gt;&lt;img alt="web-epiphany-38" class="aligncenter size-full wp-image-76123" height="511" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/web-epiphany-38.jpg" width="750" /&gt;&lt;/a&gt;&lt;br /&gt;

&lt;br /&gt;
&lt;strong&gt;Following on from its release last week, GNOME’s default web-browser is now available for users of Ubuntu 13.04 to install.&lt;/strong&gt;&lt;br /&gt;

The&amp;nbsp;aptly-titled Web, is a lightweight webkit browser built using 
GNOME technologies and designed specifically for the GNOME desktop.&lt;br /&gt;

Ubuntu GNOME 13.04 users can install the release from the GNOME PPAs,
 both of which also upgrade the stock GNOME 3.6 desktop to GNOME 3.8.&lt;br /&gt;

&lt;h3&gt;
Why Web?&lt;/h3&gt;
Despite being the default web-browser in GNOME few GNOME-using 
distributions actually ship with it by default. Ubuntu GNOME, Fedora and
 OpenSuSE instead provide Firefox to their users.&amp;nbsp;That’s understandable:
 Firefox is a power-house of a name.&lt;br /&gt;

But just because Web is a less well known doesn’t mean that it’s less
 useful.&amp;nbsp;In fact, it’s rather charming. The minimal gives less room to 
excessive options and more room to web-pages, and if you can live 
without add-ons, themes and extensions, you’ll find it can do just about
 anything other browsers can.&lt;br /&gt;

And that list of ‘can do’s’ grows a little longer in this latest release…&lt;br /&gt;

&lt;h3&gt;
New in Web 3.8&lt;/h3&gt;
But what’s new in Web 3.8 specifically? Quite a fair bit.&lt;br /&gt;

A &lt;strong&gt;private browsing mode&lt;/strong&gt; has been added, letting you tip-toe around the web without leaving a trace.&lt;br /&gt;

To go ‘Incognito’ just click the Web app menu and select &lt;em&gt;‘New Incognito Window’.&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;

&lt;div class="wp-caption aligncenter" id="attachment_76156" style="width: 750px;"&gt;
&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/private-and-reopen.jpg" rel="fancybox"&gt;&lt;img alt="private-and-reopen" class="size-full wp-image-76156" height="400" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/private-and-reopen.jpg" title="Private Browsing in Web 3.8" width="750" /&gt;&lt;/a&gt;&lt;div class="wp-caption-text"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="wp-caption-text"&gt;
Private Browsing in Web 3.8&lt;/div&gt;
&lt;div class="wp-caption-text"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
Another user-experience tweak – and one many will be incredibly pleased to see arrive – is the arrival of a&lt;strong&gt;&lt;em&gt; ‘New Tab’&lt;/em&gt; button&lt;/strong&gt; in the application toolbar. I sorely missed having this accessible in previous versions.&lt;br /&gt;
&lt;br /&gt;

Adobe’s &lt;strong&gt;Flash plugin is now supported natively&lt;/strong&gt;. Just install the &lt;em&gt;Adobe Flash Plugin installer&lt;/em&gt;&amp;nbsp;package from the Ubuntu Software Center and Web will do the rest.&lt;br /&gt;

Other changes in addition to those mentioned above:&lt;br /&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;span style="color: #4f4f4f;"&gt;‘Page Search’ style now matches other GNOME apps&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved HTML5 media controls&amp;nbsp;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘Undo Closed Tab’ action added to App Menu&amp;nbsp;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
Install Web 3.8 in Ubuntu GNOME 13.04&lt;/h3&gt;
In stock, freshly installed Ubuntu GNOME you can install the previous
 version of Web, version 3.6, straight from the Ubuntu Software Center.&lt;br /&gt;
&lt;br /&gt;

But for this newer, more featured and more stable release you’ll need
 to add the following GNOME Team PPA. It’s important that you’re aware 
that adding this will also upgrade the rest of your desktop to GNOME 
3.8.&lt;br /&gt;
&lt;br /&gt;

First add the GNOME Team PPA using the Terminal:&lt;br /&gt;
&lt;br /&gt;

&lt;pre&gt;sudo add-apt-repository &lt;strong&gt;ppa:gnome3-team/gnome3&lt;/strong&gt;; sudo apt-get update&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
Now hit the button below to install Web 3.8 through the Ubuntu Software Center&lt;br /&gt;
&lt;br /&gt;

&lt;div style="text-align: center;"&gt;
&lt;a class="ubuntu-software-center-link" href="apt:epiphany-browser-webkit2" target="_self" title=""&gt; Click to Install Web in Ubuntu GNOME &lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/7n7-38oOdKY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/4374245163021530985/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/latest-release-of-gnome-web-browser.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/4374245163021530985?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/4374245163021530985?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/7n7-38oOdKY/latest-release-of-gnome-web-browser.html" title="Latest Release of GNOME Web Browser Available for Ubuntu 13.04 Users" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/latest-release-of-gnome-web-browser.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cFQn4_cSp7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-8830829435890241387</id><published>2013-04-07T05:50:00.000-07:00</published><updated>2013-04-07T05:50:13.049-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T05:50:13.049-07:00</app:edited><title>Hands on With New Linux Twitter App ‘Birdie’</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div style="text-align: center;"&gt;
&lt;strong&gt;&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/birdie.jpg" rel="fancybox"&gt;&lt;img alt="Twitter App Birdie Explained" class="aligncenter size-large wp-image-75826" height="459" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/birdie-750x459.jpg" title="Twitter App Birdie" width="750" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;strong&gt;Twitter clients for Linux. Once upon there were a swathe of them. Like &lt;a href="http://en.wikipedia.org/wiki/Gremlins#Plot" target="_blank"&gt;Mogwai fed after midnight&lt;/a&gt;, newer ones seemed to appear with crazy frequency.&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;

But then Twitter got arrogant. It wanted to control the ‘app’ 
experience had by its users. It made it&amp;nbsp;harder and harder for 
third-party developers to engage with its API, and started limiting the 
number of ‘calls’ – i.e. fetching tweets – third-party apps could make 
to it.&lt;br /&gt;

Apps that slid past the limits would simply stop working. For all its users.&lt;br /&gt;
&lt;br /&gt;

The end result of these ‘rule changes’ has seen many Twitter app 
developers unable to keep pace.&amp;nbsp;The swathe dried up; abandoned clients 
dried out; and for Linux Twitter fans the options became fewer and 
scarcer.&lt;br /&gt;

Of course, we weren’t left entirely without options. There are some 
great Linux apps still around – Polly and Gwibber being two of the most 
popular. But choices never hurt, right?&lt;br /&gt;

&lt;h3&gt;
Basic Birdie&lt;/h3&gt;
As an avid Tweeter I was pretty pleased to learn of a new desktop twitter app in development -&amp;nbsp;&lt;a href="https://launchpad.net/%7Ebirdie-team" target="_blank" title="Birdie on launchpad"&gt;Birdie&lt;/a&gt;.&lt;br /&gt;

While the app is still more a hungry chick than bird in full plume (i.e.: &lt;em&gt;don’t expect bells and whistles&lt;/em&gt;) the app does&amp;nbsp;show a lot of promise.&lt;br /&gt;
&lt;br /&gt;

So far &lt;em&gt;Birdie&lt;/em&gt; covers all of the basics one would expect of a
 twitter client. It can tweet; retweet; favourite; send/receive&amp;nbsp;private 
messages; view profiles, and follow/unfollow accounts. It even 
integrates nicely into the Ubuntu desktop, supporting notifications, 
Unity Launcher badges and quicklists, and the Ubuntu Messaging Menu.&lt;br /&gt;


  
  
  &lt;div class="gallery galleryid-75455 gallery-columns-3 gallery-size-thumbnail" id="gallery-1"&gt;

&lt;dl class="gallery-item"&gt;
&lt;dt class="gallery-icon"&gt;
    &lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/mess.jpg" rel="fancybox" title="mess"&gt;&lt;img alt="mess" class="attachment-thumbnail" height="200" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/mess-350x200.jpg" width="350" /&gt;&lt;/a&gt;
   &lt;/dt&gt;
&lt;/dl&gt;
&lt;dl class="gallery-item"&gt;
&lt;dt class="gallery-icon"&gt;
    &lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/unity-bits.jpg" rel="fancybox" title="unity-bits"&gt;&lt;img alt="unity-bits" class="attachment-thumbnail" height="200" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/unity-bits-350x200.jpg" width="350" /&gt;&lt;/a&gt;
   &lt;/dt&gt;
&lt;/dl&gt;
&lt;dl class="gallery-item"&gt;
&lt;dt class="gallery-icon"&gt;
    &lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/quicklist.jpg" rel="fancybox" title="quicklist"&gt;&lt;img alt="quicklist" class="attachment-thumbnail" height="200" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/quicklist-350x200.jpg" width="350" /&gt;&lt;/a&gt;
   &lt;/dt&gt;
&lt;/dl&gt;
&lt;br style="clear: both;" /&gt;
   &lt;br style="clear: both;" /&gt;
  &lt;/div&gt;
Birdie eschews the ‘multi-column’ layout used by other Linux Twitter apps &lt;em&gt;(Gwibber, Polly, Turpial, gFeedline)&lt;/em&gt;
 in favour of a single-column view that’s more akin to the Twitter 
mobile website/apps. This has both it’s advantages and disadvantages. 
The main plus being less noise.&lt;br /&gt;
&lt;br /&gt;

&lt;div style="text-align: center;"&gt;
&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/tweet-box-birdie.jpg" rel="fancybox"&gt;&lt;img alt="The Birdie Compose Box" class="aligncenter size-full wp-image-75824" height="212" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/tweet-box-birdie.jpg" width="500" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;
Snaring Birdie&lt;/h3&gt;
If you’re twitching to try the Birdie out then you can. A ‘Stable’ 
PPA is maintained for Ubuntu 12.04, 12.10 and 13.04. But before you add 
it remember that jumping on an app during early development&amp;nbsp;does come 
with a cost: advanced features are lacking, stability is a little 
wayward, and it may eat your tweets.&lt;br /&gt;
&lt;br /&gt;

For example, Birdie’s “stable PPA” release is missing multiple-account support, &lt;del&gt;searching&lt;/del&gt;,
 and the ability to preview conversations or media in the app. All 
elements that help define a ‘good’ Twitter app from a ‘great’ one.&lt;br /&gt;
&lt;br /&gt;

But as I said at the outset, it’s early days. So far, Birdie is worth keeping an eye out for.&lt;br /&gt;

&lt;div class="post-update"&gt;
 Searching has landed in the most recent update to Birdie.&amp;nbsp;&lt;/div&gt;
&lt;div class="post-update"&gt;
&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/mess.jpg" rel="fancybox"&gt;&lt;img alt="Birdie in the Ubuntu Messaging Menu" class="aligncenter size-full wp-image-75822" height="379" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/mess.jpg" width="620" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;
Install Birdie in Ubuntu 12.04, 12.10 or 13.04&lt;/h3&gt;
Birdie is &lt;strong&gt;development software. &lt;/strong&gt;It will crash, it will have bugs, and it will eat your tweets. You install it at your own risk.&lt;br /&gt;
&lt;br /&gt;

To install Birdie you’ll first need to add the following PPA to your 
Software Sources. The quickest way to do this in Ubuntu is to open a 
Terminal and enter the following code:&lt;br /&gt;
&lt;br /&gt;

&lt;pre&gt;sudo add-apt-repository &lt;strong&gt;ppa:birdie-team/stable&lt;/strong&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/pre&gt;
Next run the following command to update your sources and install the app:&lt;br /&gt;
&lt;br /&gt;

&lt;pre&gt;sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install birdie&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
Once done you can launch Birdie from the Unity Dash. During first run
 you’ll be asked to add an account. Follow the on-screen prompts to get 
started. Initial sync takes a little while, so do be patient.&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/OvxV42TFvYc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/8830829435890241387/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/hands-on-with-new-linux-twitter-app.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/8830829435890241387?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/8830829435890241387?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/OvxV42TFvYc/hands-on-with-new-linux-twitter-app.html" title="Hands on With New Linux Twitter App ‘Birdie’" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/hands-on-with-new-linux-twitter-app.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4CQH87cSp7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-8264849145741288001</id><published>2013-04-07T05:49:00.000-07:00</published><updated>2013-04-07T05:49:21.109-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T05:49:21.109-07:00</app:edited><title>Minimal GNOME Video Player ‘Snappy’ Hits 0.3, Improves Feature Set</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;strong&gt;Does Linux really need &lt;em&gt;yet another&lt;/em&gt;&amp;nbsp;video&amp;nbsp;player? Probably not. But is it cool to have &lt;em&gt;yet another&amp;nbsp;&lt;/em&gt;anyway? For sure!&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;
&lt;br /&gt;
To be fair to&lt;a href="http://projects.gnome.org/snappy/" target="_blank"&gt; Snappy&lt;/a&gt;,
 an open-source Gstreamer-powered media player designed for the GNOME 
desktop, it has been chomping about for several years, albeit without 
gaining much in the way of attention.&lt;br /&gt;
&lt;br /&gt;

But with its first release in almost two years, Snappy 0.3 suddenly has a lot more bite.&lt;br /&gt;

The app is no longer confined to being launched through a terminal; 
is no longer lacking a logo (see new icon to the right); and is no 
longer missing key media player&amp;nbsp;features&amp;nbsp;like subtitles support and 
media queuing,&lt;br /&gt;
&lt;br /&gt;

It’s also been given some much needed visual polish. And I do mean 
much needed. Its&amp;nbsp;Clutter-based UI may have been free from 
visual&amp;nbsp;clutter, but it it was, shall we say, a little unripened…&lt;br /&gt;
&lt;br /&gt;

&lt;div class="wp-caption aligncenter" id="attachment_75683" style="width: 750px;"&gt;
&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/snapp.jpg" rel="fancybox"&gt;&lt;img alt="snappy 0.2" class="size-large wp-image-75683 " height="460" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/snapp-750x460.jpg" width="750" /&gt;&lt;/a&gt;&lt;div class="wp-caption-text"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="wp-caption-text"&gt;
Snappy 0.2 – Not Quite Ripe&lt;/div&gt;
&lt;/div&gt;
Two years on from that 0.2 release, Snappy has matured. A lot.&lt;br /&gt;
&lt;br /&gt;

&lt;div class="wp-caption aligncenter" id="attachment_75684" style="width: 750px;"&gt;
&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/snappy-03.jpg" rel="fancybox"&gt;&lt;img alt="Snappy 0.3" class="size-full wp-image-75684" height="342" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/snappy-03.jpg" width="750" /&gt;&lt;/a&gt;&lt;div class="wp-caption-text"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="wp-caption-text"&gt;
Snappy 0.3 Playing a Video.&lt;em&gt; Image:&amp;nbsp;luisbg&lt;/em&gt;&lt;/div&gt;
&lt;/div&gt;
The OSD (On Screen Display), has been refined, darkened, and sees 
flat monochromatic icons introduced; and a stack of new features have 
been added, including:&lt;br /&gt;


&lt;ul&gt;
&lt;li&gt;Drag and drop video opening&lt;/li&gt;
&lt;li&gt;Subtile support&lt;/li&gt;
&lt;li&gt;Desktop launcher&lt;/li&gt;
&lt;li&gt;Multi-screen full-screen&lt;/li&gt;
&lt;li&gt;Media queues&lt;/li&gt;
&lt;/ul&gt;
A raft of changes that could see Snappy start biting at the ankles of more established video players…&lt;br /&gt;

&lt;h3&gt;
Getting Snappy 0.3&lt;/h3&gt;
Snappy 0.2 is available to install through the Ubuntu Software Center in 11.10 through 13.04.&lt;br /&gt;

Getting this latest release, 0.3, is a little tricker. At present the
 only way to get it in Ubuntu is to build it from source. You’ll need to
 grab a stack of dependencies before attempting.&lt;br /&gt;
&lt;br /&gt;

&lt;div style="text-align: center;"&gt;
&lt;a class="website-link" href="http://projects.gnome.org/snappy/" target="_blank" title=""&gt; Snappy Home Page on GNOME Projects&amp;nbsp;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
For the more patient amongst you, I would expect to see Snappy 0.3 
added to one of the various GNOME 3 PPAs in the not-so-distant future. 
We’ll be sure to give you a heads-up when this happens.&lt;br /&gt;

&lt;strong&gt;&lt;em&gt;In the meantime, feel free to share your own video player preferences, needs and annoyances in the comment space below… &lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/pWK6bk9OMWg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/8264849145741288001/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/minimal-gnome-video-player-snappy-hits.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/8264849145741288001?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/8264849145741288001?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/pWK6bk9OMWg/minimal-gnome-video-player-snappy-hits.html" title="Minimal GNOME Video Player ‘Snappy’ Hits 0.3, Improves Feature Set" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/minimal-gnome-video-player-snappy-hits.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4FRnw4fip7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-8968249061577415003</id><published>2013-04-07T05:48:00.001-07:00</published><updated>2013-04-07T05:48:37.236-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T05:48:37.236-07:00</app:edited><title>WPS Office – A Faithful Microsoft Office Clone for Linux</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/wps-office-ribbon.jpg" rel="fancybox"&gt;&lt;img alt="wps-office-ribbon" class="size-large wp-image-75337 aligncenter" height="404" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/wps-office-ribbon-750x404.jpg" width="750" /&gt;&lt;/a&gt;&lt;br /&gt;

&lt;br /&gt;
&lt;strong&gt;When is Microsoft Office not Microsoft Office? When it’s actually a faithfully-crafted imitation, of course!&amp;nbsp;&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;

WPS Office, built by Chinese development group &lt;em&gt;Kingsoft&lt;/em&gt;, 
claims to be the leading free office suite in China. And with such a 
familiar looking interface that’s not a difficult notion to swallow.&lt;br /&gt;

Three applications make up the suite:&lt;br /&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Writer&lt;/strong&gt; – Word processing application&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Presentation&lt;/strong&gt; – Slideshow presentation maker&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spreadsheets&lt;/strong&gt; – Spreadsheet application&lt;/li&gt;
&lt;/ul&gt;
Each of the apps are incredibly familiar in look to their Microsoft counterparts.&lt;br /&gt;

Compared to other free offerings like LibreOffice, Google Docs, and 
Lotus Symphony, WPS has a distinct advantage: a lower learning curve for
 those already versed, trained, or used to the Windows apps.&lt;br /&gt;
&lt;br /&gt;

Trivial sounding, sure. But for many the notion of having relearn 
what they already know fosters reluctance. WPS, with its marriage of 
free and familiar, has a good punt at solving this.&lt;br /&gt;

&lt;h3&gt;
Features&lt;/h3&gt;
The Qt suite apes the interface of Microsoft’s ‘Ribbon’ interface, 
and whilst I can’t tell you whether it’s 100%&amp;nbsp;accurate&amp;nbsp;in its 
replication (I haven’t used Microsoft Office long enough to tell), it’s 
certainly authentic looking.&lt;br /&gt;
&lt;br /&gt;

For non-Ribbon fans WPS Office comes with the option of enabling the old, menu-based Office look&lt;br /&gt;
&lt;br /&gt;

&lt;div class="wp-caption aligncenter" id="attachment_75335" style="width: 750px;"&gt;
&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/old-look.jpg" rel="fancybox"&gt;&lt;img alt="&amp;quot;Classic Look&amp;quot; Enabled in WPS Office" class="size-large wp-image-75335 " height="353" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/old-look-750x353.jpg" width="750" /&gt;&lt;/a&gt;&lt;div class="wp-caption-text"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="wp-caption-text"&gt;
“Classic Look” Enabled in WPS Office.&lt;/div&gt;
&lt;/div&gt;
WPS Office also adds a few handy features of its own, including an 
online pool of document templates and the ability to edit multiple 
documents in tabs.&lt;br /&gt;
&lt;br /&gt;

Biggest drawbacks: the release is beta; it sucks at opening .ODT 
files. Oh, and the entire interface is in Chinese by default (though 
reader&amp;nbsp;&lt;em&gt;Mohammed Sayanvala&lt;/em&gt;&amp;nbsp;has a fix for the latter &lt;a href="http://mosayanvala.wordpress.com/2013/03/04/wps-for-linux-first-impressions/" target="_blank"&gt;on his blog)&lt;/a&gt;.&lt;br /&gt;

&lt;h3&gt;
Download WPS Office Beta for Ubuntu&lt;/h3&gt;
The latest version of WPS Office, a beta, can be downloaded for Ubuntu 32bit by hitting the button below:&lt;br /&gt;

&lt;div style="text-align: center;"&gt;
&lt;a class="website-link" href="http://wdl.cache.ijinshan.com/wps/download/Linux/unstable/wps-office_8.1.0.3724%7Eb1p2_i386.deb" target="_blank" title="Download WPS Office for Linux"&gt; WPS Office for Linux&amp;nbsp;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
Once the suite has fully downloaded double-click on the .Deb file to install through the Ubuntu Software Center.&lt;br /&gt;

After installation completes you’ll be able to launch each of the three applications through the Unity Dash.&lt;br /&gt;

On first run you’ll be prompted to sign up to.. Well, I don’t know 
because my Chinese is non-existent. Suffice to say, you can slap any old
 rubbish into the required fields and it’ll disappear.&lt;br /&gt;
&lt;br /&gt;

&lt;div class="wp-caption aligncenter" id="attachment_75334" style="width: 553px;"&gt;
&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/sigh-up.jpg" rel="fancybox"&gt;&lt;img alt="I Ain't Telling You Nothing..." class="size-full wp-image-75334" height="395" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/sigh-up.jpg" width="553" /&gt;&lt;/a&gt;&lt;div class="wp-caption-text"&gt;
I Ain’t Telling You Nothing…&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/YzEJY8VQSKI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/8968249061577415003/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/wps-office-faithful-microsoft-office.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/8968249061577415003?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/8968249061577415003?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/YzEJY8VQSKI/wps-office-faithful-microsoft-office.html" title="WPS Office – A Faithful Microsoft Office Clone for Linux" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/wps-office-faithful-microsoft-office.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8BSH48fCp7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-2360281885313416047</id><published>2013-04-07T05:47:00.002-07:00</published><updated>2013-04-07T05:47:39.074-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T05:47:39.074-07:00</app:edited><title>Multi-Account Support Added to Linux E-Mail App ‘Geary’</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;strong&gt;A new release of desktop e-mail app Geary is now available, 
and adds a number of significant improvements over previous versions.&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;

Geary, made by Yorba, the same development team behind photo app 
Shotwell, is billed as a ‘lightweight’ alternative to bigger, bulkier 
apps like Thunderbird or Evolution.&lt;br /&gt;
&lt;br /&gt;

It take much of its inspiration from web-mai clients like Gmail. To 
this end it organizes your mail into ‘conversations’ rather than 
threads, whilst also adding some rich&amp;nbsp;functionality – including Ubuntu 
desktop support – into proceedings.&lt;br /&gt;
&lt;br /&gt;

Gmail and Yahoo! Mail are supported out of the box, with manual IMAP set-up available for other providers.&lt;br /&gt;
&lt;br /&gt;

So that’s what Geary is, but what’s new in this release? Let’s take a look…&lt;br /&gt;

&lt;h3&gt;
Geary 0.3&lt;/h3&gt;
&lt;div class="wp-caption aligncenter" id="attachment_74936" style="width: 750px;"&gt;
&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/geary-3.jpg" rel="fancybox"&gt;&lt;img alt="Geary 0.3.0 Brings Many New Features" class="size-full wp-image-74936" height="378" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/geary-3.jpg" width="750" /&gt;&lt;/a&gt;&lt;div class="wp-caption-text"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="wp-caption-text"&gt;
Geary 0.3.0 Brings Many New Features&lt;/div&gt;
&lt;/div&gt;
Amongst a bunch of stability, bug and performance fixes, Geary 0.3 brings:&lt;br /&gt;

&lt;ul&gt;
&lt;li&gt;Multiple account support (including an account editor)&lt;/li&gt;
&lt;li&gt;Your own replies now show in conversations&lt;/li&gt;
&lt;li&gt;“Mark as Spam” option&lt;/li&gt;
&lt;li&gt;Able to display the GMail “Important” folder&lt;/li&gt;
&lt;li&gt;New keyboard shortcuts for marking &amp;amp; starring messages&lt;/li&gt;
&lt;li&gt;Background downloading of messages&lt;br /&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;div class="wp-caption aligncenter" id="attachment_75178" style="width: 650px;"&gt;
&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/multi-accounts.jpg" rel="fancybox"&gt;&lt;img alt="Geary's New Account Manager" class="size-full wp-image-75178" height="433" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/multi-accounts.jpg" width="650" /&gt;&lt;/a&gt;&lt;div class="wp-caption-text"&gt;
Geary’s New Account Manager&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;
Getting Geary 0.3&lt;/h3&gt;
If you’ve had enough of Evolution, or find yourself tired of Thunderbird – why not give Geary a go?&lt;br /&gt;

Geary 0.3 is available for &lt;strong&gt;Ubuntu 13.04&lt;/strong&gt; users to install directly form the Ubuntu Software Center, just hit the button below to do that.&lt;br /&gt;
&lt;br /&gt;

&lt;div style="text-align: center;"&gt;
&lt;a class="ubuntu-software-center-link" href="apt:geary" target="_self" title=""&gt; Geary on the Ubuntu Software Center&amp;nbsp;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
If you’re using&lt;strong&gt; Ubuntu 12.10 or 12.04&lt;/strong&gt;&amp;nbsp;then you’ll first need to add the &lt;a href="https://launchpad.net/%7Eyorba/+archive/ppa" target="_blank" title="Yorba PPA"&gt;Yorba PPA containing Geary&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;

Open up a new &lt;em&gt;Terminal&lt;/em&gt; window and enter the following commands:&lt;br /&gt;
&lt;br /&gt;

&lt;pre&gt;sudo add-apt-repository&amp;nbsp;&lt;strong&gt;ppa:yorba/ppa&lt;/strong&gt;&lt;/pre&gt;
&lt;pre&gt;sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install geary&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;em&gt;&lt;strong&gt;If you give Geary a go be sure to let us know what you think of it in the comments below.&lt;/strong&gt;&lt;/em&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/Bb88lr0zAuE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/2360281885313416047/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/multi-account-support-added-to-linux-e.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/2360281885313416047?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/2360281885313416047?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/Bb88lr0zAuE/multi-account-support-added-to-linux-e.html" title="Multi-Account Support Added to Linux E-Mail App ‘Geary’" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/multi-account-support-added-to-linux-e.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkANRnw_eip7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-5142922138836064581</id><published>2013-04-07T05:46:00.001-07:00</published><updated>2013-04-07T05:46:37.242-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T05:46:37.242-07:00</app:edited><title>Weather App Stormcloud Adds New Customisation Options</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/new-sotrmcloud.jpg" rel="fancybox"&gt;&lt;img alt="new-sotrmcloud" class="aligncenter size-full wp-image-75108" height="346" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/new-sotrmcloud.jpg" width="750" /&gt;&lt;/a&gt;&lt;br /&gt;

&lt;br /&gt;
&lt;strong&gt;Desktop weather tool &lt;a href="http://getstormcloud.com/" target="_blank" title="Stormcloud Website"&gt;&lt;em&gt;Stormcloud&lt;/em&gt;&lt;/a&gt; has been updated with a handful of new customisation options.&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;

Alongside existing support for multiple locations, custom colours, and specifying weather units comes:&lt;br /&gt;

&lt;ul&gt;
&lt;li&gt;Additional font options (Roboto, Lato, Ubuntu, etc)&lt;/li&gt;
&lt;li&gt;Option to set background colour based on weather or temperature&lt;/li&gt;
&lt;li&gt;Hyperlink to Yahoo Weather page for extra information&lt;/li&gt;
&lt;li&gt;Weather caching&lt;/li&gt;
&lt;li&gt;Location ordering&lt;/li&gt;
&lt;/ul&gt;
The colour changes will be the highlight of this release for many. A 
warm background colour is used when the weather is warm, and a colder 
colour when the&amp;nbsp;temperature&amp;nbsp;dips.&lt;br /&gt;
&lt;br /&gt;

&lt;div class="wp-caption aligncenter" id="attachment_75111" style="width: 750px;"&gt;
&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/tempte.jpg" rel="fancybox"&gt;&lt;img alt="Temperature Controlled Background Colours in Stormcloud" class="size-full wp-image-75111" height="513" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/tempte.jpg" width="750" /&gt;&lt;/a&gt;&lt;div class="wp-caption-text"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="wp-caption-text"&gt;
Temperature Controlled Background Colours in Stormcloud&lt;/div&gt;
&lt;div class="wp-caption-text"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
Not to your tastes? Don’t worry: the ‘chameleonic&amp;nbsp;background’ option is still available. You’ll find it listed under&lt;em style="font-family: Raleway, Ubuntu, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px;"&gt; ‘Other’.&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;

One other notable change is that the temperature report has been 
changed to the ‘Average Temperature’ rather than highs &amp;amp; lows.&lt;br /&gt;
&lt;br /&gt;

Stormcloud is available to buy from the Ubuntu Software Center and is priced at $2.99.&lt;br /&gt;

&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;a class="ubuntu-software-center-link" href="https://apps.ubuntu.com/cat/applications/stormcloud/" target="_blank" title=""&gt;Buy Stormcloud on Ubuntu &lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/uJynAymBbW8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/5142922138836064581/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/weather-app-stormcloud-adds-new.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/5142922138836064581?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/5142922138836064581?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/uJynAymBbW8/weather-app-stormcloud-adds-new.html" title="Weather App Stormcloud Adds New Customisation Options" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/weather-app-stormcloud-adds-new.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkABRHY4cCp7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-6230037855661557407</id><published>2013-04-07T05:45:00.007-07:00</published><updated>2013-04-07T05:45:55.838-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T05:45:55.838-07:00</app:edited><title>Unity Tweak Tool is Now Available in Raring</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;strong&gt;The new contender for everyone’s favourite&amp;nbsp;&lt;a href="http://www.omgubuntu.co.uk/2013/02/introducing-unity-tweak-tool" target="_blank"&gt;tweak tool&lt;/a&gt; has been approved for inclusion in the official Raring repositories. So get out there and download it folks!&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;

&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/utt-raring.png" rel="fancybox"&gt;&lt;img alt="utt-raring" class="aligncenter size-full wp-image-75058" height="583" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/utt-raring.png" width="748" /&gt;&lt;/a&gt;&lt;br /&gt;

&lt;div style="text-align: center;"&gt;
&lt;a class="ubuntu-software-center-link" href="apt:unity-tweak-tool" target="_self" title="Install Unity Tweak Tool in Ubuntu"&gt; &amp;nbsp;Install Unity Tweak Tool in Ubuntu &lt;/a&gt;&lt;/div&gt;
&lt;h4&gt;
Just a Few Notes&lt;/h4&gt;
Speaking as one of the development team members, inclusion in 13.04 is just a first step. We at&amp;nbsp;&lt;a href="https://launchpad.net/%7Efreyja-dev" target="_blank"&gt;Freyja&lt;/a&gt;&amp;nbsp;are working to have Unity Tweak Tool included in Quantal as a backport, but as of now it is only available via PPA.&lt;br /&gt;
&lt;br /&gt;

&lt;pre&gt;sudo add-apt-repository &lt;strong&gt;ppa:freyja-dev/unity-tweak-tool-daily&lt;/strong&gt;

sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install unity-tweak-tool&lt;/pre&gt;
Also, regarding 12.04 support: for &lt;a href="https://answers.launchpad.net/unity-tweak-tool/+question/218487" target="_blank"&gt;various reasons&lt;/a&gt;&amp;nbsp;(and
 the fact that this is&amp;nbsp;a relatively new project)&amp;nbsp;development focus has 
been on Quantal and beyond. The possibility of future Precise support is
 there, but there is significant work in doing so.&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/__SEbRqQNOU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/6230037855661557407/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/unity-tweak-tool-is-now-available-in.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/6230037855661557407?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/6230037855661557407?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/__SEbRqQNOU/unity-tweak-tool-is-now-available-in.html" title="Unity Tweak Tool is Now Available in Raring" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/unity-tweak-tool-is-now-available-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkAGQnc4fip7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-590848335008185777</id><published>2013-04-07T05:45:00.001-07:00</published><updated>2013-04-07T05:45:23.936-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T05:45:23.936-07:00</app:edited><title>Shotwell 0.14 Released With Improved RAW Handling, Facebook Upload Tweaks</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div class="wp-caption aligncenter" id="attachment_75023" style="width: 750px;"&gt;
&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/shotwell-14.jpg" rel="fancybox"&gt;&lt;img alt="shotwell-14" class="size-full wp-image-75023" height="426" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/shotwell-14.jpg" title="shotwell 14" width="750" /&gt;&lt;/a&gt;&lt;div class="wp-caption-text"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="wp-caption-text"&gt;
Shotwell 0.14 – You Can Finally Hide The Sidebar&lt;/div&gt;
&lt;div class="wp-caption-text"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;strong&gt;A new release of photo management and editing tool ‘Shotwell’ is available for download.&lt;/strong&gt;&lt;br /&gt;

Primarily&amp;nbsp;focusing on fixes, Shotwell 0.14 brings numerous improvements. These include:&lt;br /&gt;

&lt;ul&gt;
&lt;li&gt;Improved RAW support &amp;amp; handling&lt;/li&gt;
&lt;li&gt;New slideshow effects&lt;/li&gt;
&lt;li&gt;Uses Facebook Graph API &lt;em&gt;[Facebook Uploading]&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Photo titles appear as captions on Facebook &lt;em&gt;[Facebook Uploading]&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Video importing tweaks&lt;/li&gt;
&lt;li&gt;Option to hide Shotwell sidebar&lt;/li&gt;
&lt;/ul&gt;
A full list of bug fixes can be found on the &lt;a href="http://redmine.yorba.org/projects/shotwell/issues?c[]=tracker&amp;amp;c[]=status&amp;amp;c[]=priority&amp;amp;c[]=subject&amp;amp;c[]=author&amp;amp;c[]=assigned_to&amp;amp;f[]=status_id&amp;amp;f[]=fixed_version_id&amp;amp;f[]=&amp;amp;group_by=&amp;amp;op[fixed_version_id]=%3D&amp;amp;op[status_id]=c&amp;amp;per_page=1000&amp;amp;set_filter=1&amp;amp;v[fixed_version_id][]=28" target="_blank" title="Shotwell 0.14 bug fixes"&gt;Yorba Issue Tracker.&lt;/a&gt;&lt;br /&gt;

Shotwell 0.14 will ship as a default application in Ubuntu 13.04.&amp;nbsp;But
 if you can’t wait until then you’ll find packages for Ubuntu 12.04 
&amp;amp; 12.10 available in the Yorba PPA.&lt;br /&gt;
&lt;br /&gt;

&lt;div style="text-align: center;"&gt;
&lt;a class="website-link" href="https://launchpad.net/%7Eyorba/+archive/ppa" target="_blank" title=""&gt; Shotwell 0.14 in the Yorba PPA &lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/nsxlgdrEJcE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/590848335008185777/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/shotwell-014-released-with-improved-raw.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/590848335008185777?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/590848335008185777?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/nsxlgdrEJcE/shotwell-014-released-with-improved-raw.html" title="Shotwell 0.14 Released With Improved RAW Handling, Facebook Upload Tweaks" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/shotwell-014-released-with-improved-raw.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkENQns_eSp7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-4508149601615128695</id><published>2013-04-07T05:44:00.004-07:00</published><updated>2013-04-07T05:44:53.541-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T05:44:53.541-07:00</app:edited><title>Revamped QML ‘Gwibber’ Shown Off</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;strong&gt;Ahh Gwibber…&amp;nbsp;&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;

Ubuntu’s default social client has been around for many years but 
depsite various revamps, UI changes, and re-writes it’s never quite 
shaken off the image of being slow, bloated, and unstable.&lt;br /&gt;
&lt;br /&gt;

Hoping to change that perception – which hasn’t always been warranted
 – is a brand a new version of Gwibber rewritten in QML and making uses 
of a totally &lt;a href="https://launchpad.net/ubuntu/+source/friends" target="_blank"&gt;revamped backend called ‘Friends’.&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;

&lt;div class="wp-caption aligncenter" id="attachment_74539" style="width: 478px;"&gt;
&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/gwibber-timeline.jpg" rel="fancybox"&gt;&lt;img alt="Gwibber Timeline with reply in-line" class="size-full wp-image-74539" height="365" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/gwibber-timeline.jpg" width="478" /&gt;&lt;/a&gt;&lt;div class="wp-caption-text"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="wp-caption-text"&gt;
Gwibber Timeline with reply in-line&lt;/div&gt;
&lt;div class="wp-caption-text"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
Designed to leaner and meaner, Gwibber QML is touch-friendly, 
followings the Ubuntu Touch design guidelines, and offers features 
previously unavailable&lt;br /&gt;

You can see short demo of Gwibber QML (as i’m calling it for now) by hitting the button below.&lt;br /&gt;
&lt;br /&gt;

&lt;div style="text-align: center;"&gt;
&lt;a class="website-link" href="http://is.gd/QASAgy" target="_blank" title=""&gt; Watch Gwibber QML Demo&amp;nbsp;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
Gwibber QML is still a sort of work in progress, so don’t judge it 
too harshly yet. But you won’t have to wait long until you can try it ou
 as Ken VanDine, the chief developer of Gwibber, is hoping to upload 
this shiny new version to Ubuntu 13.04 later this week…&lt;br /&gt;
&lt;br /&gt;

&lt;div class="wp-caption aligncenter" id="attachment_74537" style="width: 475px;"&gt;
&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/gwibber-input-in-action.jpg" rel="fancybox"&gt;&lt;img alt="Gwibber QML Input Box" class="size-full wp-image-74537" height="271" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/03/gwibber-input-in-action.jpg" width="475" /&gt;&lt;/a&gt;&lt;div class="wp-caption-text"&gt;
Gwibber QML Input Box&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/_FERslOAdVY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/4508149601615128695/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/revamped-qml-gwibber-shown-off.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/4508149601615128695?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/4508149601615128695?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/_FERslOAdVY/revamped-qml-gwibber-shown-off.html" title="Revamped QML ‘Gwibber’ Shown Off" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/revamped-qml-gwibber-shown-off.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkINSH0zcCp7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-4556647081226443800</id><published>2013-04-07T05:43:00.003-07:00</published><updated>2013-04-07T05:43:19.388-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T05:43:19.388-07:00</app:edited><title>Intel Release Graphical Installer for Their Linux Drivers</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;strong&gt;The&amp;nbsp;Intel Linux Graphics Installer provides a friendly way for downloading the latest Intel Linux graphics software stack.&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;

Early in March, Intel –specifically the Intel Open Source Technology 
Centre– released a graphical installer providing Linux users with a 
friendly way for downloading the latest Intel-related open source Linux 
graphics components –for the more technical this includes:&lt;br /&gt;

&lt;ul&gt;
&lt;li&gt;the Intel core kernel driver&lt;/li&gt;
&lt;li&gt;Mesa 3D rendering library, responsible for 3D rendering, OpenGL compatibility, GLES, etc.&lt;/li&gt;
&lt;li&gt;the 2D renderer for the&amp;nbsp;X Window stack (xf86-video-intel), also known as DDX.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;libdrm&lt;/em&gt;&amp;nbsp;–the “Direct Rendering Manager” library,&amp;nbsp;for communication between user applications and the kernel&lt;/li&gt;
&lt;li&gt;the Cairo graphics&amp;nbsp;library, for 2D rendering and acceleration&lt;/li&gt;
&lt;li&gt;&lt;em&gt;vaapi-driver-intel &lt;/em&gt;–the APIs for&amp;nbsp;hardware-accelerated video rendering, processing and output&lt;/li&gt;
&lt;li&gt;initial support for Wayland&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Getting the Latest and Greatest Intel Linux Drivers&lt;/h4&gt;
Intel Linux Graphics Installer automatically detects your hardware 
and system specifics and adds a software repository to your sources for 
keeping you up-to-date. The installer also performs a check to see if 
your system is running the latest drivers and, if not, it runs a system 
upgrade.&lt;br /&gt;
&lt;br /&gt;

&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/intelgraphicsdriverinstaller.png" rel="fancybox"&gt;&lt;img alt="intelgraphicsdriverinstaller" class="size-full wp-image-76213 aligncenter" height="382" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/intelgraphicsdriverinstaller.png" width="804" /&gt;&lt;/a&gt;&lt;br /&gt;

&lt;br /&gt;
However, the installer doesn’t automatically add the repository 
authentication key to your system but it can manually added by opening&amp;nbsp;a
 terminal, and executing:&lt;br /&gt;

&lt;pre&gt;wget --no-check-certificate https://download.01.org/gfx/RPM-GPG-KEY-ilg -O - | \
sudo apt-key add -&lt;/pre&gt;
&lt;h4&gt;
Download &amp;amp; Install for Ubuntu&lt;/h4&gt;
Supporting both 32 and 64 bit systems, the&amp;nbsp;Intel Linux Graphics 
Installer is available for download for Ubuntu 12.04 and 12.10 (as well 
as Fedora 17, 18) via their website:&lt;br /&gt;
&lt;br /&gt;

&lt;div style="text-align: center;"&gt;
&lt;a class="website-link" href="https://01.org/linuxgraphics/downloads/2013/intel-linux-graphics-installer" target="_blank" title="Download Intel Linux Graphics Installer"&gt; Download Intel Linux Graphics Installer&amp;nbsp;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/zqwbIcMvohw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/4556647081226443800/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/intel-release-graphical-installer-for.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/4556647081226443800?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/4556647081226443800?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/zqwbIcMvohw/intel-release-graphical-installer-for.html" title="Intel Release Graphical Installer for Their Linux Drivers" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/intel-release-graphical-installer-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUCQ3o8eip7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-4731151978544443983</id><published>2013-04-07T05:37:00.003-07:00</published><updated>2013-04-07T05:37:42.472-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T05:37:42.472-07:00</app:edited><title>Ubuntu 13.04 Beta Released</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
       &lt;nav id="post-nav" role="article"&gt;
        
        
       &lt;/nav&gt;
      


      
          &lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/beta-desktop.jpg" rel="fancybox"&gt;&lt;img alt="beta-desktop" class="aligncenter size-full wp-image-76141" height="422" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/beta-desktop.jpg" width="750" /&gt;&lt;/a&gt;&lt;br /&gt;

&lt;br /&gt;
&lt;strong style="font-family: Raleway, Ubuntu, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px;"&gt;The final beta of Ubuntu 13.04 has been made available for download.&lt;/strong&gt;&lt;br /&gt;

Also shipping alongside it are betas for all of the official Ubuntu spins, including the newly&amp;nbsp;anointed&amp;nbsp;&lt;a href="http://www.omgubuntu.co.uk/2013/03/its-official-ubuntu-gnome-remix-joins-the-ubuntu-family" target="_blank" title="It’s Official: Ubuntu GNOME Remix Joins the Ubuntu Family"&gt;Ubuntu GNOME&lt;/a&gt; and &lt;a href="http://www.omgubuntu.co.uk/2013/03/ubuntu-to-become-the-official-os-of-china" target="_blank" title="Ubuntu To Become The Official OS Of China"&gt;Ubuntu Kylin&lt;/a&gt;&amp;nbsp;projects.&lt;br /&gt;

Key features new to Ubuntu 13.04, and available in this beta, include:&lt;br /&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.omgubuntu.co.uk/2013/03/new-unity-shutdown-dialogs-on-way-to-ubuntu-13-04" target="_blank" title="New Unity-Styled Shutdown Dialogs Heading To Ubuntu 13.04"&gt;&lt;strong&gt;New shutdown and session exit dialogs&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A new sync menu for Ubuntu One&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Faster, more performant Unity&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New interface animations, &lt;a href="http://www.omgubuntu.co.uk/2013/01/new-icons-window-snap-animation-land-in-unity" title="New Icons, Window Snap Animation Land in Unity"&gt;including window snap&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scroll-switching of open windows from Unity Launcher&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
For details of&amp;nbsp;precisely&amp;nbsp;what has changed between Ubuntu 12.10 and 13.04 you can view our development coverage by using the&amp;nbsp;&lt;a href="http://www.omgubuntu.co.uk/tag/raring-ringtail" target="_blank"&gt;&lt;em&gt;Raring Ringtail&lt;/em&gt; tag&lt;/a&gt;.&lt;br /&gt;

&lt;h3&gt;
Getting Ubuntu 13.04 Beta&lt;/h3&gt;
If you’re running daily builds of Ubuntu 13.04 you don’t need to do 
anything special to get the beta – as long as you’re up-to-date, you’re 
using it.&lt;br /&gt;
&lt;br /&gt;

Ubuntu 13.04 is scheduled for release on April 25th. It will come 
with a reduced support cycle of only 9 months. Support for it will end 
in&amp;nbsp;January 2014&lt;br /&gt;
&lt;br /&gt;

A release candidate of Ubuntu 13.04 is due for release on April 18th.&lt;br /&gt;
&lt;br /&gt;

&lt;div style="text-align: center;"&gt;
&lt;a class="chrome-web-store-link" href="http://releases.ubuntu.com/13.04/" target="_blank" title="ubuntu 13.04 beta download"&gt; Download Ubuntu 13.04 Beta &lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/5NRxdBF7eD0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/4731151978544443983/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/ubuntu-1304-beta-released.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/4731151978544443983?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/4731151978544443983?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/5NRxdBF7eD0/ubuntu-1304-beta-released.html" title="Ubuntu 13.04 Beta Released" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/ubuntu-1304-beta-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUGRn06eyp7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-7165879451121291404</id><published>2013-04-07T05:37:00.000-07:00</published><updated>2013-04-07T05:37:07.313-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T05:37:07.313-07:00</app:edited><title>Microsoft’s Market Dominance Is Coming to an End, Say Leading Analysts</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;strong&gt;Microsoft’s long-held dominance over the computing sector is coming to an end, say market experts Gartner.&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;

The industry&amp;nbsp;analysts&amp;nbsp;expect Microsoft’s roost to shrink by over 7% this year alone. And, &lt;a href="http://www.gartner.com/newsroom/id/2408515" target="_blank"&gt;in further research they’ve conducted&lt;/a&gt;, go as far as&amp;nbsp;as to predict the Windows’ makers share slipping as little as 14% by 2017.&lt;br /&gt;
&lt;br /&gt;

But if Microsoft’s grasp is&amp;nbsp;loosening, what’s taking up its slack? Simple: the meteoric&amp;nbsp;march of mobile devices.&lt;br /&gt;
&lt;br /&gt;

As worldwide PC shipments continue to fall – a market in which, back 
in 2005, commanded 97% of – sales of tablets and smartphones continues 
to rise.&lt;br /&gt;
&lt;br /&gt;

And, despite the spin, Microsoft’s Windows Phone and Windows RT OS 
continue to flounder, accounting for a very small percentage of sales 
over all.&lt;br /&gt;
&lt;br /&gt;

The future, as we’re seeing with Canonical’s investment in Ubuntu 
Touch, is mobile. &amp;nbsp;Fellow industry gurus IDC said,at the tail end of 
last year that&amp;nbsp;&lt;em style="font-family: Raleway, Ubuntu, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px;"&gt;“Consumers
 and business buyers are now starting to see smartphones, tablets and 
PCs as a single continuum of connected devices separated primarily by 
screen size.”&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;

For Microsoft the future isn’t looking great. Sales of their new 
operating system continue to eek rather than sprint forward, and with 
worldwide tablet sales are expected to grow by&amp;nbsp;almost&amp;nbsp;70% in 2013 – but 
more companies ruling out shipping Windows 8 RT on them – it seems their
 relevancy will continue to be questioned for some time to come.&lt;br /&gt;
&lt;br /&gt;

Gartner analyst &lt;em&gt;Carolina Milanesi&lt;/em&gt;&amp;nbsp;sums up 
their&amp;nbsp;predicament&amp;nbsp;quite well: “Consumers have options and consumers are 
choosing. Microsoft cannot take that for granted that they’ll be the one
 to be chosen.”&lt;br /&gt;
&lt;br /&gt;

Like most towering giants it seems that they haven’t been brought down by an outside inasmuch as their own&amp;nbsp;complacency.&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/gw7hv9rQnxw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/7165879451121291404/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/microsofts-market-dominance-is-coming.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/7165879451121291404?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/7165879451121291404?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/gw7hv9rQnxw/microsofts-market-dominance-is-coming.html" title="Microsoft’s Market Dominance Is Coming to an End, Say Leading Analysts" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/microsofts-market-dominance-is-coming.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYNQXk6fyp7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-2427091076294884155</id><published>2013-04-07T05:36:00.002-07:00</published><updated>2013-04-07T05:36:30.717-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T05:36:30.717-07:00</app:edited><title>[How To] Run Unity Next on Ubuntu 12.10</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
       &lt;nav id="post-nav" role="article"&gt;
        
        
       &lt;/nav&gt;
      


      
          &lt;strong&gt;&lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/unity-next-on-the-desktop.jpg" rel="fancybox"&gt;&lt;img alt="unity-next-on-the-desktop" class="aligncenter size-full wp-image-76024" height="466" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/unity-next-on-the-desktop.jpg" width="750" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;

&lt;br /&gt;
&lt;strong&gt;Unity Next,&lt;a href="http://www.omgubuntu.co.uk/2013/03/unity-next-project-announced" target="_blank" title="Ubuntu Announce Unity Next, Will Be Written in Qt/QML"&gt; the next-generation Qt/QML version of Ubuntu’s Unity interface&lt;/a&gt;&amp;nbsp;designed to&amp;nbsp;intelligently&amp;nbsp;adapt to multiple form factors, can now be tried, tested, and hacked-on right from the desktop.&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;

You’ll need to be running Ubuntu 12.10 and know your way around the 
command line to get it up and running. It’ll also help if you’re a dab 
hand at being able to deal with compiling errors.&lt;br /&gt;

Now, the method below, taken from&amp;nbsp;the&amp;nbsp;&lt;a href="http://unity.ubuntu.com/getinvolved/development/unitynext/" target="_blank"&gt;Unity developers page&lt;/a&gt;,
 isn’t fool-proof. Indeed, due to a slight regression with the HUD I 
needed to manually install packages from the Phablet PPA – not something
 that’s recommended on the desktop! This error should be fixed shortly.&lt;br /&gt;

Warnings aside, if you’re brave, aware of the pitfalls, and want to proceed, just follow these instructions…&lt;br /&gt;

&lt;h3&gt;
Step One: Source Grabbin’&lt;/h3&gt;
First things first: create a folder to house all of the Unity Next code:&lt;br /&gt;
&lt;br /&gt;

&lt;pre&gt; mkdir ~/unity&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
Then install Bzr and pull the Unity Next source code:&lt;br /&gt;
&lt;br /&gt;

&lt;pre&gt; sudo apt-get install bzr

 bzr branch lp:unity/phablet ~/unity/unity-next

 cd ~/unity/unity-next&lt;/pre&gt;
&lt;h3&gt;
Step Two: Building Stuff&lt;/h3&gt;
Next, run the following command:&lt;br /&gt;
&lt;br /&gt;

&lt;pre&gt;./build -s&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
This step will add couple of PPAs to your system, build and install 
some required branches, and install a bundle of necessary dependencies.&lt;br /&gt;

&lt;h3&gt;
&amp;nbsp;Step Three: Building More Stuff&lt;/h3&gt;
Now build Unity Next by issuing the following:&lt;br /&gt;

&lt;pre&gt;./build&lt;/pre&gt;
&lt;h3&gt;
Step Four: Running Unity Next&lt;/h3&gt;
Run the People Lens daemon to enable ‘contacts’ in your&lt;br /&gt;
&lt;br /&gt;

&lt;pre&gt;~/unity/unity_build/libexec/unity-people-daemon&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
To run Unity Next in a window on your desktop run:&lt;br /&gt;

&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;cd ~/unity/unity-next

./run&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
If all of the steps above have completed correctly you should see this:&lt;br /&gt;


&lt;h3&gt;
Notes&lt;/h3&gt;
To keep your Unity Next build updated run the following two commands every now and then:&lt;br /&gt;

&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;./build_unity -u
./build_unity&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
To build a-fresh, run:&lt;br /&gt;
&lt;br /&gt;

&lt;pre&gt;./build_unity --clean&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
Unity Next is currently designed for touch-input so you’ll need to 
pretend that your mouse is a finger – o.e click and drag your way around
 the interface.&lt;br /&gt;
&lt;br /&gt;

To go from ‘phone’ to ‘tablet’ interface just resize the Unity Next window.&lt;br /&gt;
&lt;br /&gt;

Lastly, please remember that this entire schaboodle is &lt;strong&gt;under active development.&lt;/strong&gt; That means you can’t complain if something is missing, broken, or buggy. Seriously.&lt;br /&gt;
&lt;br /&gt;

&lt;div style="text-align: left;"&gt;
For further information on running Unity Next on your desktop, as well as building and developing for it, head over to the &lt;a href="http://unity.ubuntu.com/getinvolved/development/unitynext/" target="_blank"&gt;Unity Developer Pages.&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/1c3QW7BTpUU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/2427091076294884155/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/how-to-run-unity-next-on-ubuntu-1210.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/2427091076294884155?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/2427091076294884155?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/1c3QW7BTpUU/how-to-run-unity-next-on-ubuntu-1210.html" title="[How To] Run Unity Next on Ubuntu 12.10" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/how-to-run-unity-next-on-ubuntu-1210.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcBQXc8eip7ImA9WhBWE04.&quot;"><id>tag:blogger.com,1999:blog-180839935467389508.post-8630214785122392727</id><published>2013-04-07T05:34:00.001-07:00</published><updated>2013-04-07T05:34:10.972-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-07T05:34:10.972-07:00</app:edited><title>‘Facebook Qt’ Offers Linux Users Standalone Social Network Experience</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
       &lt;nav id="post-nav" role="article"&gt;
        
        
       &lt;/nav&gt;
      


      
          &lt;a href="http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/facebook-qt-app.jpg" rel="fancybox"&gt;&lt;img alt="facebook-qt-app" class="aligncenter size-full wp-image-75944" height="361" src="http://www.omgubuntu.co.uk/wp-content/uploads/2013/04/facebook-qt-app.jpg" width="750" /&gt;&lt;/a&gt;&lt;br /&gt;

&lt;br /&gt;
&lt;strong&gt;I’m going to mention a certain infamous social networking 
site and I don’t want you to pelt me with rotten fruit for doing so. 
Agreed? Awesome. Yes, it’s Facebook app time again.&lt;/strong&gt;&lt;br /&gt;

Facebook desktop apps aren’t ‘new’ to Ubuntu, nor exclusive to. Some argue that they’re not even needed.&lt;br /&gt;

But where there’s a &lt;em&gt;want&lt;/em&gt; there’s usually an app to satisfy.&lt;br /&gt;

&lt;a href="http://qt-apps.org/content/show.php/Facebook?content=156543" target="_blank"&gt;&lt;strong&gt;‘Facebook Qt’&lt;/strong&gt;&lt;/a&gt;
 is the latest attempt at marrying the web’s most visited website with 
the traditional desktop OS. It can run on Windows, Linux and OS X, but 
since this is an Ubuntu-orientated site we’ll only be looking at from 
the Ubuntu perspective.&lt;br /&gt;

&lt;h3&gt;
Features&lt;/h3&gt;
On first glance it’s&amp;nbsp;difficult&amp;nbsp;to see Facebook Qt as anything more 
than a pretty-looking site-specific browser.&amp;nbsp;Indeed, the blue-themed 
window frame makes it clear from &lt;em&gt;le get go&lt;/em&gt; that the app is about one site, and one site in&amp;nbsp;particular.&lt;br /&gt;

Shunning&amp;nbsp;native window themeing the app houses navigation buttons 
within its frame, along with an ‘About’ button and a ‘Close’ button.&lt;br /&gt;

When open the app displays an icon in the system tray area. This 
turns red on&amp;nbsp;receipt&amp;nbsp;of new notifications, messages or requests, and 
stays blue when you’re unloved. Clicking on it offers up a drop-down 
menu with links that open in-app.&lt;br /&gt;

If the entire app seems familiar then I salute you on having a good 
memory. We saw a similarly-purposed, though arguably more featured, GTK 
version in last years Ubuntu App Showdown:&amp;nbsp;&lt;a href="http://www.omgubuntu.co.uk/2012/08/20-must-have-ubuntu-showdown-apps" style="font-family: Raleway, Ubuntu, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px;" target="_blank" title="20 Must-Have Ubuntu Showdown Apps"&gt;the perfunctory-named ‘Facebook&lt;/a&gt;‘.&lt;br /&gt;

&lt;h3&gt;
Key features at a glance:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Use Facebook free from a browser&lt;/li&gt;
&lt;li&gt;Get alerted to new messages, requests, and notifications&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
Download&lt;/h3&gt;
Annoyingly Facebook Qt has no &lt;em&gt;pre-built&lt;/em&gt; packages. If you want to use it you’ll need to install&amp;nbsp;&lt;em&gt;QtCreator,&lt;/em&gt; some common Qt&amp;nbsp;dependencies&amp;nbsp;(including libqtwebkit-dev) and run the application’s project file from there.&lt;br /&gt;

Everything you need, including source and further information on the app, can be found at the link below.&lt;br /&gt;

&lt;div style="text-align: center;"&gt;
&lt;a class="website-link" href="http://webrender.99k.org/Facebook/" target="_blank" title="Facebook Qt App"&gt; Facebook Qt App Website &lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DiegoBenna/~4/pYo74-Whkfc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://diegobenna.blogspot.com/feeds/8630214785122392727/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://diegobenna.blogspot.com/2013/04/facebook-qt-offers-linux-users.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/8630214785122392727?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/180839935467389508/posts/default/8630214785122392727?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DiegoBenna/~3/pYo74-Whkfc/facebook-qt-offers-linux-users.html" title="‘Facebook Qt’ Offers Linux Users Standalone Social Network Experience" /><author><name>Diego Benna</name><uri>https://plus.google.com/114385275084899169181</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-WQ9zduyCp0M/AAAAAAAAAAI/AAAAAAAAAMk/mKyAfdzjCUc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://diegobenna.blogspot.com/2013/04/facebook-qt-offers-linux-users.html</feedburner:origLink></entry></feed>
