<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-2482669050683633099</atom:id><lastBuildDate>Fri, 18 Dec 2009 20:03:46 +0000</lastBuildDate><title>Programming</title><description></description><link>http://heylinux.blogspot.com/</link><managingEditor>noreply@blogger.com (onecoolworld)</managingEditor><generator>Blogger</generator><openSearch:totalResults>26</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-3933534349001849731</guid><pubDate>Fri, 19 Sep 2008 02:30:00 +0000</pubDate><atom:updated>2008-09-18T19:31:22.907-07:00</atom:updated><title>Taking The Big Leap To Achieving Web Business Freedom</title><description>&lt;a href="http://4.bp.blogspot.com/_VwNG__y550g/SNMO2DCKTFI/AAAAAAAAD5M/eoQfGDFELtY/s1600-h/52.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5247554312506854482" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_VwNG__y550g/SNMO2DCKTFI/AAAAAAAAD5M/eoQfGDFELtY/s400/52.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Picture in your mind a high, windswept cliff overlooking a deep canyon. From the top, it’s impossible to see into the seemingly bottomless abyss below.&lt;br /&gt;At the top of the cliff, a small crowd has gathered. Minutes before, a solitary, simply dressed man had approached and gotten their attention. He is curiously carrying a large, red toolbox.&lt;br /&gt;“In just a few minutes, I’ll be jumping off the edge of the cliff,” the man said.&lt;br /&gt;A loud gasp rippled through the crowd. A voice shouted, “Are you crazy? You’ll get yourself killed!” Others chimed in:“Don’t do it!”“Hey, mister, whatever the problem is, there’s got to be another solution!”“You’re throwing your life away!”&lt;br /&gt;The man raised a hand to speak, and the crowd grew silent.&lt;br /&gt;“I know you think I am insane, and what I’m about to do probably is, to a degree,” he began. “But they’re a couple things you need to know.&lt;br /&gt;“First, I’m not the first to jump off this cliff,” he continued. “In fact, it happens many, many times every day.” The crowd murmured, with some pressing a little closer and some taking a step back.&lt;br /&gt;“Sometimes there are groups like this watching, and sometimes not,” the man said. “Some watching want and even hope the person will plunge and not make it. Yet others pray the person will somehow avoid certain disaster, and offer what encouragement they can.&lt;br /&gt;“Second, whatever the reason that brings them to the edge, the people who take this leap share a few things in common,” he said. “They’re at a point in their lives when they feel they have no choice but to jump into the void. Life has driven them to the precipice, and they are eventually willing, despite all fear and doubt and despair, to take the plunge.&lt;br /&gt;“Finally, each person stands at the edge with a toolbox, much like this,” the man said. He held up the shiny, red toolbox. “Inside each person’s box is a unique set of tools. No two sets are alike. But each literally holds the keys to their future—whether their leap ends dashed on the rocks, or whether they are able to build wings and fly.”&lt;br /&gt;A woman from the crowd interrupted. “That is ridiculous!” she said. “Once you take a leap like that, no one can possibly use ‘tools’ to save themselves, much less ‘fly!’”&lt;br /&gt;The man looked at the woman, and then around at the others, and smiled.&lt;br /&gt;“Fortunately, this is not just any ordinary toolbox,” he said. “For the ‘tools’ represent all the talents and qualities that make up each person’s life—their attitude about success and failure, their willingness to let go, their belief in themselves, and so on. And even for people who seemingly lack any special knowledge or skills, often there is real magic that takes place, enabling them to save themselves and even others!”&lt;br /&gt;The man was silent, and let his words sink in. Then, he picked up the box and turned to face the edge. Suddenly, and without looking back, he went over and was gone in a flash.&lt;br /&gt;The people rushed to the edge, waiting and listening and wondering what fate would bring the crazy man with the red toolbox.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-3933534349001849731?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/09/taking-big-leap-to-achieving-web.html</link><author>noreply@blogger.com (onecoolworld)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_VwNG__y550g/SNMO2DCKTFI/AAAAAAAAD5M/eoQfGDFELtY/s72-c/52.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-2286530571550654636</guid><pubDate>Mon, 08 Sep 2008 15:47:00 +0000</pubDate><atom:updated>2008-09-08T08:48:38.036-07:00</atom:updated><title>Ads, comments &amp; social bookmarking, these are all things that website owners hope &amp; wish that the visitors to their sites will click on.</title><description>&lt;a href="http://3.bp.blogspot.com/_VwNG__y550g/SMVJIhrxNCI/AAAAAAAAC4Y/8kq4SbvWPK8/s1600-h/18.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5243677751972541474" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_VwNG__y550g/SMVJIhrxNCI/AAAAAAAAC4Y/8kq4SbvWPK8/s400/18.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;There are some questions that seem to have no definitive answers bouncing around in my head. Ads, comments &amp;amp; social bookmarking, these are all things that website owners hope &amp;amp; wish that the visitors to their sites will click on or participate in. Lets discuss each of these three items and see if you can help answer some questions I &amp;amp; perhaps yourself have.&lt;br /&gt;Ads&lt;br /&gt;Do you click on ads when you like someone’s website? Is it inappropriate to click on an ad if you enjoy a site knowing it will just send two cents or a dollar into the owners ad account(s)? Are we as visitors adverse to doing this or do people just not know that it helps contribute to the designer of said site?&lt;br /&gt;I know that there are many sites I have enjoyed over the years and on some I have never clicked on an ad. As I look back I wonder would it have been so bad to click an ad or two to show my appreciation. Lately I have been clicking on an ad if I actually enjoy someone’s site. In some cases I will even click an ad if the article I am reading just captures my attention so that I read it to the end.&lt;br /&gt;Think of clicking on ad as paying for a newspaper or local news rag. The small amount that the owner receives should entice them to create more &amp;amp; more enjoyable content. Maybe in this way we can reward those who deserve it for their contribution. Perhaps by clicking on a skyscraper ad versus a smaller ad depending upon our enjoyment of the site or content would make us a true connoisseur of the content.&lt;br /&gt;Comments&lt;br /&gt;While I have less thoughts on this subject, more of a piece of advice really, here’s one question. Is it proper etiquette to leave a comment about an article if you enjoyed it? Have we as visitors really gotten to the point where we move too fast that this one minute would slow us down? I am myself also guilty of not leaving comments but am really putting forth an effort to do so lately.&lt;br /&gt;My piece of advice is actually common sense but there are still some people out there, blog owners mostly, that do not have captcha or do not moderate the comments posted on their sites/blogs. This allows spam of the highest proportion to flood their blogs. Have you that moderate your sites comments seen some of the stuff that spammers try to get thru? I have seen comments that are like whole entire miniature websites of links try to get posted on this site.&lt;br /&gt;Moderate your comments!&lt;br /&gt;Social Bookmarking&lt;br /&gt;With the advent of social bookmarking like Digg, StumbleUpon, Buzz &amp;amp; Technorati among others a whole new way of grading or reviewing websites &amp;amp; articles has opened up. Websites and blogs can now be graded by visitors Digging or Stumbling your content, this can either bring you yet more visitors if your content appeals to the masses or just leave you stuck on the sidelines if graded poorly.&lt;br /&gt;My question is do you actually take the few seconds to socially bookmark a site or article? Clicking an ad would be more my style as it just seems quicker to me, I am lazy, but I am getting in the habit of socially bookmarking more &amp;amp; more. When an article of mine gets Dugg or Stumbled it brings in more &amp;amp; more traffic making me feel liking writing more often.&lt;br /&gt;There is nothing more rewarding than going from 50 -60 visitors a day to 200-300 for a webmaster. To reach the front page of Digg or any of the other social bookmarking front runners out there is the pinnacle of achievement for a writer. While I have yet to obtain this lofty status I can aspire to one day climb that summit.&lt;br /&gt;Afterword&lt;br /&gt;I hope to receive some answers to my questions knowing that some of you out there have answers of your own. Clicking on an ad, making a comment or socially bookmarking will not hurt you in any way, shape or form. In fact it might make you start to reward those who do well in their endeavors. Some of you can explain if you feel that my opinions could be considered proper website or blog visitor etiquette.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-2286530571550654636?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/09/ads-comments-social-bookmarking-these.html</link><author>noreply@blogger.com (onecoolworld)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_VwNG__y550g/SMVJIhrxNCI/AAAAAAAAC4Y/8kq4SbvWPK8/s72-c/18.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-6459999965641283172</guid><pubDate>Mon, 08 Sep 2008 12:08:00 +0000</pubDate><atom:updated>2008-09-08T05:08:20.902-07:00</atom:updated><title>Mule has the ability to notify you when certain key internal events occur.</title><description>Mule has the ability to notify you when certain key internal events occur. It can, for example, raise a notification when a transaction is successfully committed or when it has successfully completed loading. This facility is not very well known and I thought I would create a series of blog posts to talk about it and show how it can be used.&lt;br /&gt;Let me first point out that these notifications are NOT Mule messages. The notification is NOT sent to an endpoint. It is NOT sent via a router. It has nothing to do with the messages that would be sent through a normal Mule application.&lt;br /&gt;The only way you can receive these notifications is if you create a POJO that is registered to listen for them.  There are (currently) 12 different types of notifications that Mule can raise:&lt;br /&gt;&lt;br /&gt;Manager notifications are raised while the state of your Mule application changes, such as when it is initialising, starting or even stopping.&lt;br /&gt;Model notifications, on the other hand, are raised when the state within a single Mule model (identified by the &lt;model&gt; XML elements) changes.  You will also receive notifications when individual components are being registered or unregistered.&lt;br /&gt;Component notifications are specific to state changes for individual components.  Whenever a component is started or stopped (or paused and resumed), a component notification is raised.&lt;br /&gt;Connection notifications are related to transports and can tell you whether it was un/successful in connecting to the underlying resource or whether the resource was released.&lt;br /&gt;Message notifications are fired when a MuleMessage is sent or received by the Mule application. While ideal for tracing, the performance impact when using these is tremendous and it is disabled by default for this reason alone. It is the only notification to be disabled by default.&lt;br /&gt;Exception notifications indicate that an exception was thrown.&lt;br /&gt;Transaction notifications show a change in the life cycle of a transaction and therefore shows whether a transaction was started, committed or rolled back.&lt;br /&gt;Security notifications indicate that a request is denied security access.&lt;br /&gt;Space Monitor notifications are related to space implementations such as JavaSpaces, when messages are sent into, or received from, a space.&lt;br /&gt;Admin notifications are fired when requests are received by the Mule Admin agent, usually from the MuleClient through the RemoteDispatcher, which proxies calls to a remote server.&lt;br /&gt;Custom notifications - can be used to raise notifications of your own.&lt;br /&gt;Management notifications show that monitored resources are low ( but this has yet to be implemented)&lt;br /&gt;By being able to monitor certain key events within a Mule application, you can react to changes by performing different tasks. For example, you could stop a service from processing any more messages from its inbound endpoint given certain criteria.&lt;br /&gt;Over the next few blog posts, I am going to do the following:&lt;br /&gt;Show how to create Java classes that can listen for these notifications and act upon them.&lt;br /&gt;Show how to register these Java classes with Mule both through configuration and programmatically.&lt;br /&gt;Demonstrate a typical use-case where system notifications can be used. &lt;a hef="#"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-6459999965641283172?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/09/mule-has-ability-to-notify-you-when.html</link><author>noreply@blogger.com (onecoolworld)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-8266067061837739715</guid><pubDate>Sat, 06 Sep 2008 17:20:00 +0000</pubDate><atom:updated>2008-09-06T10:21:22.834-07:00</atom:updated><title>Google Chrome: A developer's perspective</title><description>I was as blindsided by Google Chrome as everyone else, but there's no denying that its release was a momentous occasion. Chrome is more than just a browser; it represents Google's latest entry in the ongoing discussion of standards and best practices for the Web as an application platform. As such, it may be the company's most important offering since Gears. &lt;br /&gt;&lt;br /&gt;"From my perspective, Google Chrome and Gears are entering the Web from two directions," says Google's Adam Goodman in Scott McCloud's comic-strip introduction to Chrome. "The [Chrome] browser project is an effort to make the Web better for users. The Gears team wants to make the Web better for developers." &lt;br /&gt;&lt;br /&gt;[ Check out InfoWorld's Special Report for all the news, reviews, and commentary on Google's open source Chrome browser. ] &lt;br /&gt;&lt;br /&gt;Lucky for us, Google Chrome ships with all of the functionality of the Gears plug-in for Firefox and Internet Explorer already baked in. But I don't agree that users are the only beneficiaries of the other effort that's gone into Chrome. There's a lot going on beneath the hood of the new browser that should interest developers, too. &lt;br /&gt;&lt;br /&gt;Roaring engines&lt;br /&gt;For starters, Google's decision to use the WebKit HTML rendering engine may not be surprising, but it's still significant. WebKit, an improved version of the open source KHTML project, is the rendering engine used by Apple for its Safari browser. It's also the engine found in both Apple's iPhone and Google Android, arguably the two most important mobile Web platforms today. &lt;br /&gt;&lt;br /&gt;That means Google Chrome isn't yet another browser to support, as my pal Paul Venezia suggests. Rather, it's one more vote in favor of making WebKit a primary target for new Web development projects. It only makes sense to test against the engine that's available on the widest range of platforms and devices. &lt;br /&gt;&lt;br /&gt;And popularity isn't the only reason why WebKit was a good choice. Current WebKit builds are very fast. As a result, pages generally pop up more quickly in Chrome than in Firefox 3. More importantly, WebKit leads the pack in Web standards compliance (with Opera a close second). The more developers get on board with writing fully standards-compliant code, free of undocumented tricks and browser-specific hacks, the better it will be for everyone. &lt;br /&gt;&lt;br /&gt;Chrome raises the bar in other ways, as well. Its V8 code execution engine beats Firefox's forthcoming TraceMonkey to the punch by offering a just-in-time native compilation engine for JavaScript. That means it runs Web applications at blazing speeds. But V8 is also a proper virtual machine environment; it's designed to handle multiple execution threads and memory management better than any other JavaScript implementation to date. For developers, these efforts further cement JavaScript's position as a legitimate application development platform, rather than a toy language for one-off scripting. &lt;br /&gt;&lt;br /&gt;From specs to prototype&lt;br /&gt;I wholeheartedly recommend reading the introductory comic strip for more insight into how Google rebuilt the browser from the ground up. Everything, from the browser security model to how plug-ins are managed, has been crafted with the utmost care. Google Chrome really is the next step in the ongoing project to create the ultimate client for the Web application platform. &lt;br /&gt;&lt;br /&gt;To understand what I mean by that, think of the drafting of Web standards as the requirements-gathering phase of Web browser development. The various specifications describe the type of documents that the browser will be expected to parse and how it should deal with them when it receives them. With Chrome, Google has taken the next step. It has offered us its own vision of what a reference implementation of the browser should look like -- not just how it should render pages, but how each module of the application should operate and interoperate. &lt;br /&gt;&lt;br /&gt;Mind you, we don't have to just take Google's word for it. For example, I still think this fixation on JavaScript might be a little bit unhealthy. But that's fine. Because Chrome is open source, we're free to take the ideas -- and even the code -- that we want, and leave the rest. Or we can add the parts that are missing: an ad blocker, for example. &lt;br /&gt;&lt;br /&gt;Google doesn't need Chrome to be a "Firefox-killer," or to become the dominant browser on the market. The important thing is that Chrome will keep us talking -- and in so doing, as Google is so fond of saying, it will help to push the Web forward. It's high time that we developed new standards and practices for today's Web. In that discussion, Google now clearly sits at the head of the table.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-8266067061837739715?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/09/google-chrome-developers-perspective.html</link><author>noreply@blogger.com (onecoolworld)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-6356103797824198358</guid><pubDate>Fri, 05 Sep 2008 02:32:00 +0000</pubDate><atom:updated>2008-09-04T19:33:02.488-07:00</atom:updated><title>Google Chrome and Lightstreamer</title><description>Chrome, the new Google browser, was released a couple of days ago as a beta version for Windows Vista/XP and officially entered the browser war, currently dominated by Microsoft Internet Explorer and Mozilla Firefox. Chrome offers many interesting features, aimed at making the browsing experience more robust, more secure, and faster. I was especially interested in the new V8 JavaScript engine, with its just-in-time compiler and a full-fledged garbage collector.&lt;br /&gt;&lt;br /&gt;We tested Lightstreamer on Chrome soon after its release, and the results were amazing, as all the Comet demos worked seamlessly out of the box. I posted a quick &lt;br /&gt;&lt;br /&gt;Some of the Lightstreamer online demos are shown in the video. I noticed a couple of Chrome features that should be particularly interesting to the Comet community:&lt;br /&gt;&lt;br /&gt;Chrome offers a Task manager, under the Developer menu, which reports the memory footprint and the used bandwidth for each process (one of the most appealing features of Chrome is that it runs independent Web applications as different native processes, to increase the level of sandboxing; see below). This native bandwidth meter is probably gonna be an important tool for Comet developers. &lt;br /&gt;Chrome decides whether to create a new tab as part of an existing process or in a new process based on the navigation path. I have noticed that if you open a new tab from an existing tab’s link, the new tab will live in the same process of the previous, instead of creating a new sandbox (the heuristic could probably be a bit more complex, but I won’t investigate this here). Opening multiple instances of a Comet application in the same tab space (process) or in different tab spaces affects the possibility of sharing resources. For example, Lightstreamer is able to share the Comet connection among different web applications (and different instances of the same applications) to minimize the HTTP connection pool exploitation. This happens if the applications share the same process, though based on different tabs. On the other hand, if the tabs live in different processes, they will create their own Comet connections. I consider this a wonderful trade-off. In other words, based on the level of affinity of applications, the Comet connection will be automatically shared or not.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-6356103797824198358?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/09/google-chrome-and-lightstreamer.html</link><author>noreply@blogger.com (onecoolworld)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-6247938142147772515</guid><pubDate>Fri, 05 Sep 2008 02:22:00 +0000</pubDate><atom:updated>2008-09-04T19:22:57.786-07:00</atom:updated><title>Keyword Stuffing: Google vs. Yahoo’s Treatment of Keywords</title><description>&lt;a href="http://3.bp.blogspot.com/_VwNG__y550g/SMCX7nMy3MI/AAAAAAAACeI/Zp7oeInQ3mU/s1600-h/72.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_VwNG__y550g/SMCX7nMy3MI/AAAAAAAACeI/Zp7oeInQ3mU/s400/72.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5242357016649981122" /&gt;&lt;/a&gt;&lt;br /&gt;Everyone on the internet this morning seems to be doing one of two things: googling for Sarah Palin or blogging about the new Google web browser, Chrome.  So like any good SEO I start thinking about how I can capture a piece of this search engine traffic.  My bright idea?  Why not capture both markets by titling a blog post What Sarah Palin could do with the Chrome on a Trailer Hitch?&lt;br /&gt;&lt;br /&gt;Of course, I won’t do that, because I’m all about ethical SEO, and that’s what my blog post will be about today - how to not engage in keyword stuffing.  Not Sarah Palin, or the Republican National Convention, or the Google Chrome Browser.  Seriously.  No keyword stuffing here.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The term keyword stuffing is an old one which was probably first invented to describe the excessive use of the Meta Keywords Tag.  But it has evolved to mean any site which either puts way too many keywords on a web page, or tries to hide the use of excessive keywords.  I would hope most SEOs and web designers today realize that Google will penalize for it, but I still get plenty of requests from clients to either add lots of keywords in nonsensical places in their content, or to hide keywords in invisible sections of their code.  Why?&lt;br /&gt;&lt;br /&gt;One reason may be the fine line we do have to walk between keyword-stuffing, and simple keyword placement.  Google has a number of factors which it takes into account for ranking pages, and believe it or not keywords in actual page body content are not really that high on the list — Google depends more on keywords in backlink anchor text.  But other search engines, most notably, Yahoo, do place more importance on keywords in content.  Whereas with Google you could probably get away with just placing your primary keywords in the page title and an H1 tag, Yahoo will look at keyword density, proximity, and page location of keywords (putting more prominent keywords in the beginning of the page’s content).&lt;br /&gt;&lt;br /&gt;So how and when are keywords overused?  You may have noticed I have probably already used the term “keywords” way too often in this post.  Even I’m getting sick of it.  If you read your website’s content to yourself and you get tired of reading the same word over and over again, then you’ve overused it.  It’s pretty much that simple; write your site content for humans, not for search engines.  As long as you’ve done a reasonably good job writing content for humans Google’s not going to penalize you.  And if you hired someone to work on SEO for your site and they repeat your target keyword 100 times on a page, get out of that contract fast.&lt;br /&gt; &lt;br /&gt;But wait, what about plural versions, misspellings, different verb conjugations, etc. - all those variations on keywords for which you want to capture the search traffic?  It’s not really stuffing if you pepper in just a couple of those, but really, do not focus on it.  Especially misspellings - you might capture the top search engine rank for a misspelled word, but everyone reading your content is going to think you can’t afford a good copy editor. &lt;br /&gt;&lt;br /&gt;And before you criticize my blog for that, I’m not mispelling on purpose, it’s because I literally can’t afford a good copy editor. My copy editor is a middle-aged guy named Sal who splits his time between the men’s room and waxing nostalgic over the days of typewriters and white-out. But I digress.&lt;br /&gt;&lt;br /&gt;I already mentioned the importance of anchor text in backlinks for Google, and it is true - that is arguably the most important determining factor in how Google ranks you.  But you can overuse keywords there also.  You don’t need 1,000 backlinks all with the exact same keyword (unless, of course, it is a highly competitive market you’re going after, in which case I’d suggest you look into long tail marketing).  Instead, try varying popular keywords in the anchor text of links which point to your site, if you have control over them.&lt;br /&gt;&lt;br /&gt;This will allow you to rank for a more varied number of queries, and will also allow you to get some better metrics on which keywords are working better for you by comparison.  If you have 10 links with term “A” and 10 links with term “B”, but visitors coming to your site with term “B” are converting more (be it pages/visit or sales), than obviously you want to shift your linkbuilding efforts to focus on term “B”.  Simple, I know, but a lot of people still don’t get it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-6247938142147772515?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/09/keyword-stuffing-google-vs-yahoos.html</link><author>noreply@blogger.com (onecoolworld)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_VwNG__y550g/SMCX7nMy3MI/AAAAAAAACeI/Zp7oeInQ3mU/s72-c/72.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-854327154588006388</guid><pubDate>Thu, 04 Sep 2008 01:47:00 +0000</pubDate><atom:updated>2008-09-03T18:48:10.941-07:00</atom:updated><title>Google App Engine: Getting Data Out Ain't Simple. Yet.</title><description>Developers who adopt the &lt;a title="More stories related to Google Inc." href="http://www.cio.com/article/447275/subject/Google+Inc."&gt;Google&lt;/a&gt; App Engine for their cloud computing platform today may fear data lock-in, since the only way to import or export data is using a Python-based API. Google is working on a tool to improve data exchange to improve data portability.&lt;br /&gt;The &lt;a href="http://code.google.com/appengine/docs/whatisgoogleappengine.html" target="_new"&gt;Google App Engine&lt;/a&gt; is intended to help developers build and scale applications to run on Google's infrastructure, says Peter Koomen, Google's product manager for App Engine. "It's still difficult to build Web apps," he notes.&lt;br /&gt;Here's why in a nutshell: a Web developer who has a bright idea has a steep ramp to climb before she can really get underway. She has to set up an infrastructure stack—renting or buying servers, setting up a Web server, configuring a database engine—burning up both time and money. That's before a single line of code is written. Then, when her website gets popular (see, it was a bright idea), it can't handle the load. The site needs to scale, and to do it quickly. So the developer has to burn even more time and money (under pressure) to rent or provision more infrastructure, while figuring out how to split access across multiple Web servers. It isn't an easy job.&lt;br /&gt;It's also a common issue. "You see this a lot with the newer social apps coming out," says Koomen. Certainly we can point to several such examples, including &lt;a href="http://www.cio.com/article/420763/Twitter_s_Potential_for_Business_Users" target="_new"&gt;Twitter's scalability problems&lt;/a&gt;, but the need is similar for any cloud-based enterprise application. Business developers, too, need to worry about getting the right infrastructure in place and making it secure and scalable.&lt;br /&gt;Google App Engine, says Koomen, fixes these problems. The application developer can focus on the application, because the App Engine takes care of the infrastructure. To quote Web technologist &lt;a href="http://www.niallkennedy.com/blog/2008/04/google-app-engine.html" target="_new"&gt;Niall Kennedy's blog post&lt;/a&gt; last April explaining the then just-announced runtime environment: "Google App Engine lets any Python developer execute CGI-driven Web applications, store its results and serve static content from a fault-tolerant geo-distributed computing grid built exclusively for modern Web applications."&lt;br /&gt;Sounds cool. So what's the problem?&lt;br /&gt;Data Lock-In—or Nervous Nellie?&lt;br /&gt;The Google App Engine uses a data store that is... different. It's not precisely SQL, says Koomen, because the data store is built to run across multiple servers. While most developers who are familiar with SQL databases (from &lt;a title="More stories related to Microsoft SQL Server" href="http://www.cio.com/article/447275/subject/Microsoft+SQL+Server"&gt;Microsoft SQL Server&lt;/a&gt; to &lt;a href="http://www.cio.com/article/113110/Five_Compelling_Reasons_to_Use_MySQL"&gt;MySQL&lt;/a&gt;) won't have a problem using the data store, some things aren't technically possible. "These restrictions aren't as terrible as you'd think," adds Koomen.&lt;br /&gt;Using Google App Engine today also requires Python, which might present a problem to &lt;a href="http://jchris.mfdz.com/code/2008/4/announcing_appdrop_com__host_go" target="_new"&gt;developers who are more familiar with other languages&lt;/a&gt;—whether &lt;a href="http://www.cio.com/article/446829"&gt;dynamic languages&lt;/a&gt; like PHP and Perl, or traditional languages like Java or C#. (Personally, I don't think Python is a significant turn-off to most Web developers, but &lt;a href="http://advice.cio.com/esther_schindler/is_computer_language_popularity_important"&gt;programming language preferences&lt;/a&gt; are passionate.)&lt;br /&gt;For more on Python, see &lt;a href="http://www.cio.com/article/185350/You_Used_Python_to_Write_WHAT_"&gt;You Used Python to Write What?!&lt;/a&gt; by Martin Aspelli, and &lt;a href="http://www.cio.com/article/158000"&gt;Python Upgrades Readied for 2008&lt;/a&gt;.&lt;br /&gt;The bigger question—a real one from a developer friend, which is what inspired me to call Google—is whether that data store creates a lock-in, preventing data-based applications from being portable. Start-ups might worry whether their companies are less attractive to investors &lt;a href="http://arstechnica.com/news.ars/post/20080408-analysis-google-app-engine-alluring-will-be-hard-to-escape.html" target="_new"&gt;if they've tied themselves to a single vendor's data store&lt;/a&gt;. Enterprise computing professionals would worry that, on top of their concerns about any &lt;a href="http://www.cio.com/article/423713/Gartner_Seven_Cloud_Computing_Security_Risks"&gt;corporate data living in the cloud&lt;/a&gt;, they'd have information they could not easily retrieve or would have trouble migrating to another database. Or, probably more important over the long term, they might worry whether database interactions involving Google App Engine would require fancy custom programming to interoperate with in-house applications, Web services components, a &lt;a href="http://www.cio.com/topic/1498/SOA"&gt;service-oriented architecture&lt;/a&gt; or other situations in which the leg bone data must connect to the thigh bone data.&lt;br /&gt;In its current "preview" state, the &lt;a href="http://googleappengine.blogspot.com/" target="_new"&gt;Google App Engine&lt;/a&gt; requires that data be stored and retrieved using a Python API called GQL, which Koomen says is as similar as possible to SQL. You can get data out of your data store only programmatically, not by copying a SQL file from one server to another.&lt;br /&gt;However, Koomen says Google sees this limitation, and &lt;a href="http://groups.google.com/group/google-appengine/browse_thread/thread/18d246b30e267da4" target="_blank"&gt;the company has actively been soliciting input&lt;/a&gt; on how best to address it. In fact, that's one of the reasons Google makes preview versions available, says Koomen. "We wanted to get it out early and see what developers thought."&lt;br /&gt;As a result, Koomen says, Google will be releasing a tool that makes it easy to get data out of the data store without writing code. They aren't ready to go into specifics, other than it'll be available "within the next two quarters," but Koomen said the intent is to make it easy to get data out of App Engine. The new tool promises to address the data portability issue, to provide a "home brew backup" and to be "completely open," according to Koomen.&lt;br /&gt;This isn't the first time user input has affected the development of Google App Engine. For example, for security reasons they had to remove the Python image library from Google App Engine. (Google App Engine supports 100% of the Python language, Koomen says, and 90% of the Python libraries.) However, developers made it clear that they needed to manipulate images in the data store, such as to scale or rotate images or to create thumbnails. "So that ability is in there, now," says Koomen.&lt;br /&gt;In the short term, developers who use App Engine don't have their data locked in. Getting data out of the App Engine data store may be awkward, or at least you should build "Darnit, I have to write that from scratch" time into the project schedule, but these limitations are temporary. That's worth knowing, certainly, because every developer adopting a new-to-her technology wants to know where the bodies are buried and where her &lt;a href="http://advice.cio.com/esther_schindler/the_superstitions_of_software_developmen"&gt;assumptions are incorrect&lt;/a&gt;.&lt;br /&gt;Within six months, however, the data lock-in concerns—and the need to write a hack—in Google App Engine should go away. "We still have some ways to go," says Koomen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-854327154588006388?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/09/google-app-engine-getting-data-out-aint.html</link><author>noreply@blogger.com (onecoolworld)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-5281618547228605247</guid><pubDate>Wed, 03 Sep 2008 07:39:00 +0000</pubDate><atom:updated>2008-09-03T00:39:51.242-07:00</atom:updated><title>Switching Web Hosts</title><description>Sooner or later this day will come. If you are moving into PupHost.com, then I just hope it happens today. Anyhow, jokes apart. Most likely you need to switch web hosts because you need more than they offer or they are just not reliable. In the present, switching web hosts is actually lot easier than you think&lt;br /&gt;I am going to tell you how to transfer a domain name, how to test your website first in the new host, and then initiate a relaunch.&lt;br /&gt;Domain Name Transfer&lt;br /&gt;When you sign up with a company most likely they will register a domain name for you. I personally wouldn’t let the web host own the domain registration. I can guarantee that my company won’t steal your domain but there are many fraudulent companies who does the following:&lt;br /&gt;When you try to switch out, they don’t let you transfer the domain out.&lt;br /&gt;Charge you a lot per year for the domain, where in PupHost.com it costs only $10 USD per year.&lt;br /&gt;If the domain is good and worth the price, they will steal and resale it.&lt;br /&gt;So if your current web host owns the domain name, I recommend that you transfer it to an independent domain registration company. Some of the reputable companies are GoDaddy, Namecheap and of course PupHost.com.&lt;br /&gt;Basically you have to visit any of the domain name registration companies first, and use their Transfer Domain wizard. Before you do that, you need to make sure the domain is free to be transferred. Which means is when you register a domain, you lock it. So, no other company can just take over your domain. First contact your current web host and tell them that you wish to transfer the domain and want to open the domain for transfer. They should unlock the domain for you, and you can easily transfer over.&lt;br /&gt;There might be specific steps you need to take for different companies. For example the transfer process might differ from GoDaddy or PupHost.com. So, you need to ask the company exactly what to do.&lt;br /&gt;New Web Host&lt;br /&gt;So, you decided to go with PupHost.com, Congratulations. Just kidding! Do not take your website down or make any kind of announcements before you test your new web host. Nowadays, quite a lot of web hosts use same or similar structure. For example, a web host might be using the same control panel as the other or offer the same features as the other. Here are some of the steps you need to take.&lt;br /&gt;Back up any important contents. (e.g. Database, Files and so on)&lt;br /&gt;From your old web host, download all the files under the web directory. (e.g. /home/username/www/ or /public_html/ or /htdocs/)&lt;br /&gt;Upload them in your new host maintaining the directory structure.&lt;br /&gt;Download the database if you have any and import them in your new web host. (Most web hosts now have PHPMyAdmin to import/export database if you are using MySQL)&lt;br /&gt;Go back to your new web host files, and change the database host, username and password accordingly.&lt;br /&gt;Visit your new website and see if it is working. (e.g. http://123.123.123.123/~username/). If you have a dedicated ip address, then you can view your website with just the IP address.&lt;br /&gt;If you see everything working as expected, now you are ready to make the move.&lt;br /&gt;Go back to your website hosted with current host (old host) and post a news that the website will be down for 36-48 hours (it usually takes 3-10 hours nowadays). Go to your domain registrar control panel and update the nameservers to your new web hosts.&lt;br /&gt;After the domain has been propagated to the new host, you will see your website is running smoothly. And there will be barely any sign of web host change.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-5281618547228605247?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/09/switching-web-hosts.html</link><author>noreply@blogger.com (onecoolworld)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-2732597411181690908</guid><pubDate>Tue, 02 Sep 2008 12:26:00 +0000</pubDate><atom:updated>2008-09-02T05:28:31.141-07:00</atom:updated><title>Google's Chrome and the browser end game</title><description>&lt;a href="http://3.bp.blogspot.com/_VwNG__y550g/SL0w-wxAvFI/AAAAAAAACMM/BeEeH08bDxo/s1600-h/55.jpg"&gt;                                                           &lt;img id="BLOGGER_PHOTO_ID_5241399396129619026" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_VwNG__y550g/SL0w-wxAvFI/AAAAAAAACMM/BeEeH08bDxo/s400/55.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;The news that Google is launching its own open source browser, called &lt;a href="http://googleblog.blogspot.com/2008/09/fresh-take-on-browser.html"&gt;Chrome&lt;/a&gt;, has understandably got the blogosphere all &lt;a href="http://www.techmeme.com/080901/p24#a080901p24"&gt;excited&lt;/a&gt;.&lt;br /&gt;It's certainly the biggest news in the browser space since Firefox started to dent Internet Explorer's lead and many people see this as a re-ignition of the browser wars.&lt;br /&gt;A few things struck me:&lt;br /&gt;1. For all Mozilla's success with Firefox, it still only has a 20% market share globally. I'll be fascinated to see if the Google cachet and brand reach will be able to drive Chrome's success any higher than Firefox.&lt;br /&gt;2. What does this mean for Firefox long term? Google is one of the biggest supporters of Firefox. It has contributed financially and in terms of development talent. According to &lt;a href="http://www.paidcontent.org/entry/419-google-to-launch-new-web-browser-chrome-open-source/"&gt;PaidContent&lt;/a&gt;, "just last week Google extended its support of the Mozilla foundation until 2011".&lt;br /&gt;Despite this, Mozilla will be feeling a little uncomfortable right now.The two organisations are next door neighbours in Mountain View and I imagine the gnashing of teeth from Mozilla were easily heard across at 1600 Amphitheatre Parkway.&lt;br /&gt;3. What does this mean for Safari? Just like Safari, Chrome is built on the open source web kit browser. Does this boost Safari because they are a common platform? Or does it mean game over for Apple's hopes in the browser space? I suspect more of the latter.&lt;br /&gt;4. This is going to mean more work for web developers. It may be based on open standards but undoubtedly web application designers are going to have to take into account the quirks and differences of Chrome to really exploit the browser.&lt;br /&gt;5. Chrome is the open source desktop people have been demanding from Google for many years. Linux supporters have long been asking for Google to release a consumer version of the Linux OS Google itself uses internally. But Google has always resisted this. And because the browser is becoming as flexible as the desktop, Chrome, in many ways, is the open source OS people have been calling for.&lt;br /&gt;6. Do we really need another browser? There's Internet Explorer, Firefox, Safari, Opera, Camino, Flock and many, many others.&lt;br /&gt;7. This is really about building a browser which leverages Google's own web applications and makes it more seamless to use functionality like Google Gears, which blurs the offline and online space. Just as Internet Explorer 8 ties in with Windows Live, Chrome will make the Google space more united.&lt;br /&gt;8. We really need a better browser for mobiles and not desktops. Expect to see Chrome as part of Google's open source Android platform for mobiles.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-2732597411181690908?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/09/googles-chrome-and-browser-end-game.html</link><author>noreply@blogger.com (onecoolworld)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_VwNG__y550g/SL0w-wxAvFI/AAAAAAAACMM/BeEeH08bDxo/s72-c/55.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-3047525746856395817</guid><pubDate>Tue, 02 Sep 2008 12:10:00 +0000</pubDate><atom:updated>2008-09-02T05:15:07.656-07:00</atom:updated><title>This article attempts to level the learning curve with a specific focus on C programming.</title><description>Vim is an extremely powerful editor with a user interface based on Bill Joy's almost 30-year-old vi, but with many new features. The features that make Vim so versatile also sometimes makes it intimidating for beginners. This article attempts to level the learning curve with a specific focus on C programming.&lt;br /&gt;&lt;a name="N0xa50890.0xb44c20"&gt;&lt;/a&gt;make and the Compile-Test-Edit Cycle&lt;br /&gt;A typical programmer's routine involves compiling and editing programs until the testing proves that the program correctly does the job it is supposed to do. Any mechanism that reduces the rigor of this cycle obviously makes any programmer's life easier. Vim does exactly that by integrating make with Vim in such a way that you don't have to leave the editor to compile and test the program. Running :make from inside of Vim does the job for you, provided a makefile is in the current directory.&lt;br /&gt;You can change the directory from inside of Vim by running :cd. To verify where you are, use :pwd. In case you are using FreeBSD and want to invoke gmake instead of make from the command line, all you have to do is enter :set makeprg=gmake. Now say you want to give some parameters to make. If, for instance, you want to give CC=gcc296: :set makeprg=gmake\ \CC=gcc296&lt;br /&gt;&lt;a name="N0xa50890.0xb44f90"&gt;&lt;/a&gt;&lt;br /&gt;does the job.&lt;br /&gt;Now comes the job of inspecting the errors, jumping to the appropriate line number in the source file and fixing them. If you want to display the line numbers in the source file, :se nu turns on this option, and :se nonu disables line number display.&lt;br /&gt;Once you compile, Vim automatically takes you to the first line that is causing the error. To go to the next error; use :cn to take you to the next line number causing the error. :cfirst and :clast take you to the first error and the last error, respectively. One you have fixed the errors, you can compile again. If you want to inspect the error list again, :clist displays it. Convenient, isn't it?&lt;br /&gt;If you want to read some other source file, say foo.c, while fixing a particular error, simply type :e foo.c.&lt;br /&gt;One shortcut provided by Vim to avoid typing too much to switch back to the previous file is to type :e # instead of typing the full path of the file. If you want to see all of the files you have opened in Vim at any point in time, you can use :ls or :buffers.&lt;br /&gt;If you have a situation in which you have opened too many files and you want to close some of them, you can issue :ls. It should display something like this: 2 # "newcachain.c" line 5&lt;br /&gt;3 %a "cachain.c" line 1&lt;br /&gt;If you want to close newcachain.c, :bd 2 or :bd newcachain.c does the job.&lt;br /&gt;While browsing C code, you may have situations in which you want to skip multiple functions fast. You can use the ]] key combination for that while in command mode. If you want to browse backward in the file, [[ can be used.&lt;br /&gt;You also can use marks to bookmark certain cursor positions. You can use any lowercase alphabet character as a mark. For instance, say you want to mark line number 256 of the source and call it b. Simply go to that line, :256, and type mb in command mode. Vim never echos what you type in command mode but silently executes the commands for you.&lt;br /&gt;If you want to go to the previous position, '' (two single-quotation marks) takes you there. Typing 'a takes you to mark a and so on.&lt;br /&gt;Especially when editing Makefiles, you may want to figure out which of the white spaces are tabs. You can type :se list, and whatever is displayed as ^I in blue are tabs. Another way to do that is to use /\t. This highlights the tabs in yellow.&lt;br /&gt;Global searches and replaces are common tasks for programmers, and Vim provides good support for both. Simply type / in command mode, and you are taken to the searched keyword. If you prefer incremental searches, à lá emacs, you can specify :se incsearch before you search. When you want to disable it, type :se nois.&lt;br /&gt;Search and replace is a powerful tool in Vim. You can execute it only on a region that you selected using the v command, only between certain line numbers or only in rectangular regions selected by using Ctrl-V command.&lt;br /&gt;Once you select your region or line number ranges, for example using :24,56 to select lines 24–56 (both inclusive), or just select your region and type : :&lt;','&gt; appears. Now type s/foo/bar to replace all occurrences of the string foo with bar.&lt;br /&gt;But, this command replaces only one instance per line. If you want to do this for multiple occurrences per line, type s/foo/bar/g. If you want to replace only some occurrences, you can use the “confirm” option with s/foo/bag/gc.&lt;br /&gt;Sometimes the string contains characters that appear as a substring of other keywords. For instance, say you want to replace the variable “in” and not the “in” in inta. To search for whole words, type /\&lt;in\&gt;/.&lt;br /&gt;Most commonly, you will want to do a global replace, which is every instance in a given file. You can do that by using either :1,$s/foo/bar/g or :%s/foo/bar/g. If you then want to replace this in all the files you have open, you can enter :bufdo %s/foo/bar/g.&lt;br /&gt;Another way of searching is by going to the keyword and typing * in command mode. The keyboard now will be highlighted wherever it occurs in the file. Searching backward is simple too; type ? instead of / while searching.&lt;br /&gt;Once the searching is over, Vim remembers it, so the next time you search for the same keyword, you have to type only / or ?, instead of typing the whole text.&lt;br /&gt;One side effect of searching is that it stays highlighted. This can be a distraction while editing programs. Turn highlighting off by typing :se nohlsearch, :nohlsearch or :nohl&lt;br /&gt;You always can use the Tab key to complete Vim commands you give with a colon. For instance, you can type :nohl&lt;tab&gt;, and Vim completes it for you. This is applicable generically, and you can press Tab to cycle through Vim's commands until Vim finds a unique match.&lt;br /&gt;&lt;a name="N0xa50890.0xb46538"&gt;&lt;/a&gt;Vim with Exuberant ctags&lt;br /&gt;Exuberant ctags (see the on-line Resources) is an external program that can generate tags for Vim to navigate source code. If all of your source code is contained in only one directory, simply go to the directory in the shell and enter: $ ctags .&lt;br /&gt;This generates a tags file called tags. Vim reads this file for jumping to functions, enums, #defines and other C constructs.&lt;br /&gt;If the source code is distributed across several directories, ctags has to generate tags for all of them relative to a certain directory. To do this, go to the root directory of the source code and execute: $ ctags -R .&lt;br /&gt;Check whether the tags file has been generated. You also can open and read the tags file in Vim.&lt;br /&gt;Now, let us move on to navigating the source code using tags. Navigating the source code using ctags is one of the most fascinating tools that a programmer has. You can read the code so nicely and quickly that you wonder how it would have been without ctags.&lt;br /&gt;Once the tags file has been generated, open the file in Vim as normal, except that if the file is deep inside, open it from the root directory. For instance, your source code is organized like this: common&lt;br /&gt;&lt;br /&gt;----&gt; gui --&gt; wxpython&lt;br /&gt;&lt;br /&gt; ------&gt;Tk&lt;br /&gt;&lt;br /&gt;----&gt; backend --&gt; networking&lt;br /&gt;include&lt;br /&gt;user&lt;br /&gt;If you want to edit tcp.c under the common/backend/networking directory, you should open it like this: $ vim common/backend/networking/tcp.c&lt;br /&gt;&lt;a name="N0xa50890.0xb3d358"&gt;&lt;/a&gt;&lt;br /&gt;instead of like this: $ cd common/backend/networking&lt;br /&gt;&lt;a name="N0xa50890.0xb3d4b8"&gt;&lt;/a&gt;&lt;br /&gt;and: $ vim tcp.c&lt;br /&gt;The tags file is situated in the directory above common, and Vim automatically knows the location of the tags file this way.&lt;br /&gt;Alternatively, you can open the file using the second method mentioned above and execute this from inside of Vim: :se tags=../../../tags&lt;br /&gt;The first method is easier for navigation. Once you open the file, you can jump from one function definition to another easily by using the key combination Ctrl-].&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-3047525746856395817?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/09/this-article-attempts-to-level-learning.html</link><author>noreply@blogger.com (onecoolworld)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-887826368753011456</guid><pubDate>Mon, 01 Sep 2008 12:27:00 +0000</pubDate><atom:updated>2008-09-01T05:28:48.006-07:00</atom:updated><title>How to Know If Your Affordable Web Hosting Plan Is A Hoax</title><description>With the upsurge of affordable web hosting plan, it is advisable to be very extra careful on choosing the kind of web host provider. There are some companies right now that offer affordable plan just to get for the bucks and never minding the quality of services it offer and the hassles it do to its clients. Many web site owners were already victimized by these cheap web hosting plans because it turned out to be hoax.&lt;br /&gt;&lt;br /&gt;Here are some tips in choosing for affordable web hosting plan. This is to avoid choosing the wrong ones and be regretful about it at the end.&lt;br /&gt;&lt;br /&gt;1. Make certain that your fit-to-you-budget web hosting package can deliver the kind of services and requirements that you will need for your website. Do not be easily swayed by alluring cheap plans out there. Look beyond the advertisement. Do not jump hastily in choosing a web hosting plan simply because it is cheap, look instead on what you will be getting out from this budget and match it with your requirements.&lt;br /&gt;&lt;br /&gt;2. Try to inquire about your web host's technical and customer support system. It does not mean that because your web site hosting is cheap, there will be no more support from it. A good web hosting company offers 24/7 customer service wherein clients can right away address concerns and problems regarding their web sites.&lt;br /&gt;&lt;br /&gt;3. Affordable web hosting plan can still be made cheaper. Some of those web hosting companies that offer cheap packages get very pricey when you add unnecessary features or services such as optional log-in file programs or password protection. As someone who is really gearing up for the affordable ones, be sure to know the prices for each service included in the plan.&lt;br /&gt;&lt;br /&gt;4. The cheapest plan may not always be the best for you. Always take note that they are the cheapest because they have certain limitations and do not have specific features which you, as the client, probably needs.&lt;br /&gt;&lt;br /&gt;5. Give as much weight - if not more - on the web host's reliability than their affordable offer. You can check the reliability of a web host by doing a little research about it. Try to ask around or do some online researching.&lt;br /&gt;&lt;br /&gt;6. Consider the bandwidth and disk space. Both are essential factors in creating or maintaining a web site. Be sure that you have enough disk space that will your requirements. Usually cheap hosting plans offer smaller disk space than those expensive ones. Be sure to ask your web host how much they will charge you if you plan to expand your storage capacity in the future. For bandwidth, make sure that you have enough of it despite its cheap price. Also, do not be easily fooled by those web hosts claiming to give unlimited bandwidth. It is better to be cleared of it from the very start.&lt;br /&gt;&lt;br /&gt;6. Let your web host know about your expectations. Letting them know your expectations and standards will, in a way, pressure them to do well in their web hosting service business.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-887826368753011456?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/09/how-to-know-if-your-affordable-web.html</link><author>noreply@blogger.com (onecoolworld)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-1204638812037415566</guid><pubDate>Wed, 27 Aug 2008 07:42:00 +0000</pubDate><atom:updated>2008-08-27T00:52:54.507-07:00</atom:updated><title>Shakespeare, 'Hamlet', Hot 3 Programming Post in today</title><description>&lt;strong&gt;Hot.1&lt;/strong&gt; &lt;strong&gt;MapQuest inches toward modernity&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_VwNG__y550g/SLUGciXMEFI/AAAAAAAABN8/3Oms6YYvGAk/s1600-h/mq-001_270x332.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5239100828845609042" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_VwNG__y550g/SLUGciXMEFI/AAAAAAAABN8/3Oms6YYvGAk/s400/mq-001_270x332.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In talking to Mark Law, the new VP of product development for AOL's MapQuest, I was surprised to learn how powerful the service still is. To my mind the formerly leading mapping system is a trailing contender against Google, Yahoo, Microsoft, and Ask.com, but apparently MapQuest is still in the game as a leading Web site, with 48 million monthly visitors to the site, not to mention the users of the service who see it embedded on partner sites. The new MapQuest puts a map on the destination page, as well as a better address entry box.Law walked me through updates to the service that will be rolling out as an optional beta test to the site's users on Tuesday. In a nutshell, the changes are evolutionary and to my mind required if the app to stay relevant. But the MapQuest team has to be careful with its updates, since so many general users of the service are accustomed to its somewhat old-fashioned interface and market-trailing features. Of his users, Law says simply, "They don't want to see a lot of change."&lt;br /&gt;More: http://news.cnet.com/8301-17939_109-10025491-2.html&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Hot.2 Improve Your Development Lifestyle&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;My friend JP has always said that man (and woman) was not meant to sit behind a desk 8+ hours a day. We were meant to do physically laborious tasks like pillage, plunder, and conquer. Although I’m a lover not a fighter, I understand what he means. I personally have always struggled with my weight being as heavy as 300 lbs to as low as 190 lbs. My pants have been as large as 44” waist to as low as 32”. It’s a constant battle to stay healthy, especially in the U.S.A. where everything can and will be super-sized. Although I love development and the challenges it brings, I do not love the lifestyle it promotes. Developers are usually convinced and persuaded to drink lots of coffee, energy drinks, and sugary snacks to stay in programming Zen. Along with bad snacks you have the long night development crams where managers lure you with pizza, and early morning deployments with incentives of donuts. Take a look around your development environment and see how many people are wearing pants that are too tight, or count the number of bellies pouring over the belt. So what do you do to improve the developer lifestyle, well it’s quite easy… on paper. It takes a lot of hard work and discipline.&lt;br /&gt;More: http://monstersgotmy.net/post/2008/08/25/Improve-Your-Development-Lifestyle.aspx&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Hot.3 Dealing with programmers who are different and disagree&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_VwNG__y550g/SLUHBRsitZI/AAAAAAAABOE/vX83cnfDaWU/s1600-h/fight-club.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5239101460026930578" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_VwNG__y550g/SLUHBRsitZI/AAAAAAAABOE/vX83cnfDaWU/s400/fight-club.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Generally, we are very tolerant and understanding. We appreciate to work with other people, listen and accept their ideas. Especially it is easy with people who completely agree with us. As for people who don’t… How could we appreciate people who disagree with your bright ideas, have own opposite opinion and don’t want to happily follow you? We can fight them, lure them and even force them to agree. There are many persuasion techniques, psychological tricks and political games that could make them to convert to your side. But should we always convert them? This post is devoted to the hard and ungrateful job of appreciating people who think, feel and behave differently.&lt;br /&gt;More: http://softwarecreation.org/2008/dealing-with-programmers-who-are-different-and-disagree/&lt;br /&gt;...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-1204638812037415566?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/08/shakespeare-hamlet-hot-3-programming.html</link><author>noreply@blogger.com (onecoolworld)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_VwNG__y550g/SLUGciXMEFI/AAAAAAAABN8/3Oms6YYvGAk/s72-c/mq-001_270x332.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-9064113423387616134</guid><pubDate>Wed, 27 Aug 2008 07:40:00 +0000</pubDate><atom:updated>2008-08-27T00:41:21.478-07:00</atom:updated><title>Java technology on the client with applets, Swing, and JavaFX has had limited success.</title><description>ActionScript 3 for Java Programmers&lt;br /&gt;Posted by on Aug 25, 2008 05:08 AM &lt;br /&gt;http://www.infoq.com/articles/actionscript-java&lt;br /&gt;&lt;br /&gt;Community Java Topics Rich Internet Apps, Rich Client / Desktop Tags Flex, ActionScript &lt;br /&gt;Let’s face it: The client has not been a friendly place for Java programmers. Java technology on the client with applets, Swing, and JavaFX has had limited success. JavaScript, despite its name, is almost nothing like the Java language. And Adobe Flash—well, it’s just like JavaScript. Or is it? It might have been the case that Flash was like JavaScript a couple of years ago, but with the advent of ActionScript 3, a lot has changed. And I think you’ll find a lot to like.&lt;br /&gt;&lt;br /&gt;RelatedVendorContent&lt;br /&gt;Guide to Calculating ROI with Terracotta Open Source JVM Clustering &lt;br /&gt;&lt;br /&gt;The Agile Business Analyst: Skills and Techniques needed for Agile &lt;br /&gt;&lt;br /&gt;Introducing application infrastructure virtualization and WebSphere Virtual Enterprise &lt;br /&gt;&lt;br /&gt;Scale your applications without punishing your database &lt;br /&gt;&lt;br /&gt;Spring App Platform, Java Concurrency/Multicore, Eclipse Mylyn and more @ QCon SF Nov 19-21 &lt;br /&gt;First, ActionScript—the programming language for Adobe Flex and Flash—is now strongly typed. It also has first-class object orientation, including classes and interfaces. It has extras that you won’t find in Java—notably, get and set functions for properties and a language extension called ECMAScript for XML (E4X), which turns any XML document into objects that you can reference with dot operators, just like regular objects.&lt;br /&gt;&lt;br /&gt;This article takes you through the basics of ActionScript 3 and shows how it compares with the Java environment you’re used to. By the end, you should have given up any preconceptions you may have had about ActionScript and have some interest in playing with it. One of the great things about Flex, Flash, and ActionScript is that they’re available at no cost. Simply download Adobe Flex Builder 3 to get started. Flex Builder, which is a sophisticated integrated development environment (IDE), is not a free application, but the Flex Software Development Kit (SDK) that it uses to build Flash applications is.&lt;br /&gt;&lt;br /&gt;A word of warning to language purists out there reading this article: I’m not a language guru, so I might gloss over some language details. I’m also not trying to present everything in ActionScript 3 in this article. If that’s what you’re after, many good books on ActionScript 3 are available. What I can do is give you a feel for the language. Here goes.&lt;br /&gt;&lt;br /&gt;Classes and interfaces&lt;br /&gt;Just as with Java, everything is really an object in ActionScript 3. There are a few primitive types like integers, but beyond that everything is an object. Similarly, like Java, there are namespaces and packages, like com.jherrington.animals, which would mean company / jack herrington / animal classes, in this case. You can put classes into the default namespace, but it’s better to control your namespace.&lt;br /&gt;&lt;br /&gt;To define a class, you use the class keyword, just as with Java. Here’s an example:&lt;br /&gt;&lt;br /&gt;package com.jherrington.animals {  public class Animal  {   public function Animal()   {   }  } }&lt;br /&gt;In this case, I'm defining an Animal class with a constructor that currently does nothing.&lt;br /&gt;&lt;br /&gt;I can add a few member variables and refine the constructor quite easily, as shown here:&lt;br /&gt;&lt;br /&gt;package com.jherrington.animals {  public class Animal  {   public var name:String = "";   private var age:int = 0;   private function Animal( _name:String, _age:int = 30 )   {    name = _name;    age = _age;   }  } }&lt;br /&gt;Here, I'm defining that an Animal object has two member variables; name, which is a public string, and age, which is a private integer. (Apparently, animals are shy about their age.) The constructor takes one or two values: either the name alone or the name and an age. You can provide default values for arguments by adding them in the function declaration.&lt;br /&gt;&lt;br /&gt;What you notice about this code is that the typing is inverted from Java. In Java, the type comes first; in ActionScript, it comes second. This is because strong typing is an add-on to ActionScript. So to support older, non-typed code, the type comes after the variable name.&lt;br /&gt;&lt;br /&gt;Let's extend the example by adding a few methods:&lt;br /&gt;&lt;br /&gt;package com.jherrington.animals {  import flash.geom.Point;  public class Animal  {   public var name:String = "";   private var age:int = 0;   private var location:Point = new Point(0,0);   public function Animal( _name:String, _age:int = 30 )   {    name = _name;    age = _age;   }   public function moveTo( x:int, y:int ) : void {    location.x = x;    location.y = y;   }   public function getLocation( ) : Point {    return location;   }  } }&lt;br /&gt;As you can see here, I've added another private member variable, location, of type Point, which I've imported from Flash's geometry package. And I've added two methods that work with the location: moveTo, which moves the animal, and getLocation, which returns the current location.&lt;br /&gt;&lt;br /&gt;Now, that's kind of the Java way to get and set a value. The ActionScript way to do it is a lot cleaner, as you can see in this code:&lt;br /&gt;&lt;br /&gt;package com.jherrington.animals{  import flash.geom.Point;  public class Animal  {   public var name:String = "";   private var age:int = 0;   private var myLocation:Point = new Point(0,0);   public function Animal( _name:String, _age:int = 30 )   {    name = _name;    age = _age;   }   public function set location( pt:Point ) : void {    myLocation = pt;   }   public function get location( ) : Point {    return myLocation;   }  } }&lt;br /&gt;Here, I'm using get and set functions that are invoked when the client code gets or sets the value of the member variable location. To the client, the location variable looks just like a regular member variable. But you can set whatever code you like to respond to the member variable setting and handle the get of the variable, as well.&lt;br /&gt;&lt;br /&gt;How can you make use of this? You can add an event that is triggered when the location changes. Check that out in this code:&lt;br /&gt;&lt;br /&gt;package com.jherrington.animals{   import flash.events.Event;  import flash.events.EventDispatcher;  import flash.geom.Point;  public class Animal extends EventDispatcher  {   public var name:String = "";   private var age:int = 0;   private var myLocation:Point = new Point(0,0);   public function Animal( _name:String, _age:int = 30 )    name = _name;    age = _age;   }   public function set location ( pt:Point ) : void {    myLocation = pt;    dispatchEvent( new Event( Event.CHANGE ) );   }   public function get location( ) : Point {    return myLocation;   }  } }&lt;br /&gt;Now, I'm specifying that the Animal class is an event dispatcher- that is, an object from which clients can listen for events. I then dispatch a new event when the location changes.&lt;br /&gt;&lt;br /&gt;Here is the client code that creates an animal, sets itself up to watch for change events, then changes its location:&lt;br /&gt;&lt;br /&gt; var a:Animal = new Animal();  a.addEventListener(Event.CHANGE, function( event:Event ) : void {   trace( "The animal has moved!" );  } );  a.location = new Point( 10, 20 );&lt;br /&gt;This code brings up a trace message when the animal has moved. You can define any type of messages you want in ActionScript. Most of the classes are EventDispatchers and have events for which you can add listeners.&lt;br /&gt;&lt;br /&gt;Interfaces&lt;br /&gt;Just like Java, the ActionScript 3 language supports builder interfaces and implementing them with classes. The interface shown below is an example of what we might make from the Animal class:&lt;br /&gt;&lt;br /&gt;package com.jherrington.animals {  import flash.geom.Point;  public interface IAnimal  {   function get name() : String;   function set name( n:String ) : void;   function get location() : Point;   function set location( pt:Point ) : void;  } }&lt;br /&gt;In this case, I'm defining two member variables for the interface that I can both set and get. Yes, you can define methods and member variables in ActionScript interfaces. How cool is that?&lt;br /&gt;&lt;br /&gt;To implement the interface, I've made some changes to the Animal class. You can see that in the code below:&lt;br /&gt;&lt;br /&gt;package com.jherrington.animals {  import flash.events.Event;  import flash.events.EventDispatcher;  import flash.geom.Point;  public class Animal extends EventDispatcher implements IAnimal  {   private var myName:String = "";   public function get name() : String   {    return myName;   }   public function set name( n:String ) : void   {    myName = n;    dispatchEvent( new Event( Event.CHANGE ) );   }   private var myLocation:Point = new Point(0,0);   public function set location ( pt:Point ) : void {    myLocation = pt;    dispatchEvent( new Event( Event.CHANGE ) );   }   public function get location( ) : Point {    return myLocation;   }   public function Animal( _name:String )   {    name = _name;   }  } }&lt;br /&gt;Of course, I can add variables and methods specific to this class or implement other interfaces in addition to the IAnimal interface. As with Java, however, I can only inherit from one base class.&lt;br /&gt;&lt;br /&gt;Statics and constants &lt;br /&gt;ActionScript 3 supports both constants and static member variables as well as static methods. Constants are easy to define, as you can see in the code below:&lt;br /&gt;&lt;br /&gt;  public const MINIMUM_AGE:int = 0;    public const MAXIMUM_AGE:int = 2000;&lt;br /&gt;Constants can be of any type you like, but they have to be defined at compile time. They can also be protected or private if you want to scope them that way.&lt;br /&gt;&lt;br /&gt;To demonstrate a static function, I show a factory method in the Animal class:&lt;br /&gt;&lt;br /&gt;  public static function buildAnimal( n:String ) : IAnimal {    return new Animal( n );   }&lt;br /&gt;Another way to use static method is in a Singleton pattern. Below is an example of a Singleton factory class for the Animal class:&lt;br /&gt;&lt;br /&gt;package com.jherrington.animals {  public class AnimalFactory  {   private static var _factory:AnimalFactory = new AnimalFactory();   public static function get instance() : AnimalFactory {    return _factory;   }   public function build( n:String ) : Animal {    return new Animal( n );   }  } }&lt;br /&gt;To invoke it, I use the instance member variable to get the single factory object:&lt;br /&gt;&lt;br /&gt;private var b:Animal = AnimalFactory.instance.build( "Russell" );&lt;br /&gt;This uses the Singleton factory object to create a new animal with the name Russell.&lt;br /&gt;&lt;br /&gt;Inheritance&lt;br /&gt;To demonstrate inheritance, I show three interfaces and classes. The first interface is the IAnimal class I showed before. The second is the Animal class, and the third is a derived class called Dog that overrides a method.&lt;br /&gt;&lt;br /&gt;The interface, IAnimal, is shown below:&lt;br /&gt;&lt;br /&gt; public interface IAnimal  {   function get name() : String;   function set name( n:String ) : void;   function move( x:int, y:int ) : void;  }&lt;br /&gt;I've simplified it a bit by taking it back to just a name member variable and a move() method. The first implementation of the interface is the Animal class:&lt;br /&gt;&lt;br /&gt;public class Animal extends EventDispatcher implements IAnimal {  private var myName:String = "";  public function get name() : String  {   return myName;  }  public function set name( n:String ) : void  {   myName = n;   dispatchEvent( new Event( Event.CHANGE ) );  }  public function Animal( _name:String )  {   name = _name;  }  public virtual  function move( x:int, y:int ) : void  {  } }&lt;br /&gt;Then, the Dog class builds on the Animal class by having its own constructor and an override of the move() method:&lt;br /&gt;&lt;br /&gt;public class Dog extends Animal {  public function Dog(_name:String)  {   super(_name);  }  public override function move( x:int, y:int ) : void  {   trace( 'Moving to '+x+', '+y );  } }&lt;br /&gt;This is a lot like Java code, so you should feel really at home in implementing your object-oriented designs in ActionScript.&lt;br /&gt;&lt;br /&gt;Operators and conditionals &lt;br /&gt;Operators in ActionScript are exactly the same as what you find in Java. Similarly, math and Boolean operators are the same:&lt;br /&gt;&lt;br /&gt; var a:int = 5;  var b:int = 6;  var c:int = a * b;  c *= 10;  var d:Boolean = ( c &gt; 10 );  var e:int = d ? 10 : 20;&lt;br /&gt;These examples show a few of the different operators. The only difference in these examples between ActionScript and Java is the syntax for defining the variables.&lt;br /&gt;&lt;br /&gt;Like operators, conditionals work exactly the same between the two languages-for example:&lt;br /&gt;&lt;br /&gt; if ( a &gt; 10 ) {   trace( 'low' );  }  else if ( a &gt; 20 ) {   trace( 'high' );  }  else {   threw new Exception( "Strange value" );  }&lt;br /&gt;shows both the conditional syntax and how you can throw exceptions. Exception handling is exactly the same in Java. You can define your own exception types or just use the standard Exception class.&lt;br /&gt;&lt;br /&gt;The try, catch, and finally syntax is shown in the example below:&lt;br /&gt;&lt;br /&gt; try  {   location = new Point( -10, 10 );  }  catch( Exception e )  {   trace( e.toString() );  }  finally  {   location = null;  }&lt;br /&gt;This code tries to set the location and traces out the error if a problem occurs. In any case, the location will be set to null at the end.&lt;br /&gt;&lt;br /&gt;Iterators&lt;br /&gt;ActionScript 3 doesn't have strongly typed containers, but it's still easy to work with arrays and hash tables. Here is an example of using a for loop to iterate an array:&lt;br /&gt;&lt;br /&gt; var values:Array = new [ 1, 2, 5 ];  for( var i:int = 0; i &lt; values.length; i++ )   trace( values[i] );&lt;br /&gt;But this isn't really the way you want to iterate an array in ActionScript. The best way is to use the for each syntax, as shown in the next sample:&lt;br /&gt;&lt;br /&gt; var values:Array = new [ 1, 2, 5 ];  for each ( var i:int in values )   trace( i );&lt;br /&gt;This code iterates through each element in the array and sets the value of i to each element along the way.&lt;br /&gt;&lt;br /&gt;To create a hash table, you use the basic Object type in ActionScript:&lt;br /&gt;&lt;br /&gt; var params:Object = { first:'Jack', last:'Herrington' };  for( var key:String in params )   trace( key+' = '+params[key] );&lt;br /&gt;ActionScript's origins in JavaScript mean that the base object type is a slots-based container that you can easily use as a hash table.&lt;br /&gt;&lt;br /&gt;Regular expressions &lt;br /&gt;Regular expressions are baked right into the base syntax for ActionScript. For example, this code:&lt;br /&gt;&lt;br /&gt; if ( name.search( /jack/i ) )  {   trace('hello jack');  }&lt;br /&gt;performs a simple check on a string.&lt;br /&gt;&lt;br /&gt;This code uses a regular expression to perform a split operation:&lt;br /&gt;&lt;br /&gt; var values:String = "1,2,3";  for each( var val:String in values.split(/,/) ) {   trace( val );  }&lt;br /&gt;Whether you should have regular expressions embedded in the core syntax is debatable. The architects of Java obviously thought these expressions should go in an external library. But I think that they are useful enough that they should be integrated as they are in ActionScript.&lt;br /&gt;&lt;br /&gt;E4X&lt;br /&gt;XML is used widely enough that ActionScript has support for it built right into the language syntax. If you're an XML junkie, you are going to love this. Check it out:&lt;br /&gt;&lt;br /&gt;var myData:XML = &lt;names&gt;  &lt;name&gt;Jack&lt;/name&gt;  &lt;name&gt;Oso&lt;/name&gt;  &lt;name&gt;Sadie&lt;/name&gt; &lt;/names&gt;;  for each ( var name:XML in myData..name ) {   trace( name.toString() ); }&lt;br /&gt;This code defines an XML document, then searches it and prints out all the tags.&lt;br /&gt;&lt;br /&gt;This next bit of code also gets &lt;name&gt; tags but only tags that are specified with a type of dog.&lt;br /&gt;&lt;br /&gt;var myData:XML = &lt;names&gt;  &lt;name type="person"&gt;Jack&lt;/name&gt;  &lt;name type="dog"&gt;Oso&lt;/name&gt;  &lt;name type="dog"&gt;Sadie&lt;/name&gt; &lt;/names&gt;;  for each ( var name:XML in myData..name.(@type='dog') ) {   trace( name.toString() ); }&lt;br /&gt;The @ syntax is similar to XPath and XSLT. It's used to specify that we are looking at attributes and not XML elements.&lt;br /&gt;&lt;br /&gt;E4X is a fantastic addition to the language. It turns XML parsing from a chore into a delight. Web services can even be returned in E4X format for easy parsing.&lt;br /&gt;&lt;br /&gt;Conclusion&lt;br /&gt;Adobe has made some extraordinary strides with ActionScript. It's a far more sophisticated language than most people give it credit for. I think you'll find that what Adobe has done is taken some of the lessons learned from what is right and wrong about Java and incorporated them into their development of the ActionScript 3 language. You'll be very happy with the result.&lt;br /&gt;&lt;br /&gt;For more information&lt;br /&gt;For more on the similarities between ActionScript and Java syntax, read Yakov Fain's article, "Comparing the syntax of Java 5 and ActionScript 3" (JDJ, November 12, 2006). &lt;br /&gt;A Java-to-ActionScript converter is available for download from Open Source Flash that allows you to use Java rather than ActionScript to create Flash content. &lt;br /&gt;For a list of resources to help you migrate between ActionScript, Flex, Java, and JavaScript development, see RIAdobe's comparison list. &lt;br /&gt;Flex.org is your source for all things Adobe Flex.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-9064113423387616134?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/08/java-technology-on-client-with-applets.html</link><author>noreply@blogger.com (onecoolworld)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-4381761239138688805</guid><pubDate>Fri, 22 Aug 2008 18:59:00 +0000</pubDate><atom:updated>2008-08-22T12:01:34.506-07:00</atom:updated><title>China takes lead in Linux education</title><description>Since the Chinese government began supporting domestic open source communities in 2005, hundreds of thousands of young people in the world's most populous country have become a part of the open source world.&lt;br /&gt;&lt;br /&gt;With the help of the government-supported Leadership of Open Source University Promotion Alliance (LUPA), Zhejiang Technology Institute of Economy (ZJTIE) founded its Linux Training &amp; Examination Center in 2006. The center started out offering a simple 48-hour course; upon completion, students received a Linux operator certificate or a Linux network administrator certificate or both. According to ZJTIE, 1,500 students in the last two years have passed the examination. However, those students who wanted to learn more had to learn by themselves.&lt;br /&gt;&lt;br /&gt;Now, however, LUPA offers nine Linux certificates, including certificates for software engineers, C programming language engineers, and LAMP system engineers. In response to a requirement from China's Ministry of Education, LUPA published 11 new Linux textbooks in July. The Ministry hopes that these textbooks will help Chinese students learn more advanced Linux technologies.&lt;br /&gt;&lt;br /&gt;Rising employment&lt;br /&gt;Some Chinese schools believe that Linux education has helped students gain employment. According to ZJTIE, 90% of the students in its Economic Information Department received the LUPA certificates in 2006; as a result, employment rose to the highest the school has seen. This may be a result of the booming open source market in China. According to CCID Consulting, the sale of Chinese open source software increased 17.1%, while sales of Linux increased 20.2% in 2007.&lt;br /&gt;&lt;br /&gt;As Linux accounts for 66.5% of China's open source market (according to a 2007 survey from CCID Consulting), open source education has been focused mostly on Linux. However, its success has encouraged ZJTIE to expand its teaching and certification. In March 2008, ZJTIE worked with LUPA to expand its education system from Linux to the whole open source industry.&lt;br /&gt;&lt;br /&gt;According to LUPA, more than 300 Chinese universities and colleges have joined its system. Open source technology has become a required course in many of these schools. Although the total number of students who have been trained for open source technologies is not available yet, Zhang Jianhua, chairman of LUPA, estimates that LUPA will train 100,000 students in Linux per year.&lt;br /&gt;&lt;br /&gt;Beyond the classroom&lt;br /&gt;Besides developing open source courses, government-supported communities also regularly hold activities such as open source conferences, speeches, contests, festivals, and campus marches to attract students to learn more about the culture, history, ideas, and technologies of the open source industry. At the same time, open source communities without government support have brought many young Chinese to the open source world by offering free open source information, translation of open source articles from other countries, and forums for open source technologies communication.&lt;br /&gt;&lt;br /&gt;Thanks in part to promotion by these communities, open source has become a powerful idea among Chinese programmers. In a survey by PHPChina in June 2007, 32.6% of PHP professionals said that they chose PHP mostly because it's open source, and 64.8% of interviewees who would start to learn PHP believed that "open source is the strong point of PHP." The same survey also showed that more than three quarters of the Chinese PHP professionals learned something from or received information through domestic PHP communities.&lt;br /&gt;&lt;br /&gt;The rapid growth of China's open source expertise has yet to result in much contribution to the development of the global open source industry. This may be because young Chinese people are still novices in the open source industry, or it may be due to the fact that they have to work more than 60 hours a week to fight for their new jobs and have no time to work on open source projects for the time being. However, as the open source education system improves and as more young people become open source veterans, the global open source community will benefit from China's presence.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-4381761239138688805?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/08/china-takes-lead-in-linux-education.html</link><author>noreply@blogger.com (onecoolworld)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-6484388158158022374</guid><pubDate>Fri, 22 Aug 2008 18:51:00 +0000</pubDate><atom:updated>2008-08-22T11:55:39.902-07:00</atom:updated><title>5 Anti-Linux Sites You Must Follow!</title><description>Ever since I read Jeremy Allison’s blog post about why we need to hear criticisms from people who dislikes Linux, I have been thinking a lot about what he said and how it hits very close to my own philosophy about life: In order to improve, you need to be open to criticisms; even from your enemies. One of the (many) things that most people dislike about Microsoft is that they don’t have any real communication between the developers and the users; so when you discover a bug or have opinions about a feature that can be improved or added, there is no real easy way to directly (or indirectly) communicate with a developer. However, recently they have showed some improvement by opening up blogs for IE8 beta and Windows 7, where product developers actively communicate with users. So why should we turn a blind eye towards Linux critics?&lt;br /&gt;&lt;br /&gt;Here are some of the popular sites who are active critics of linux:&lt;br /&gt;&lt;br /&gt;1) Why Linux Sucks: They are not really anti-linux, they just hate linux. :) &lt;br /&gt;&lt;br /&gt;Quoting:&lt;br /&gt;&lt;br /&gt;“This site’s purpose is to bring to light a lot of issues that Linux users run into that they shouldn’t run into: Issues that occur for both experienced and new Linux users. It also focuses somewhat on issues that severely need attention in order for the Linux Desktop (GNOME, KDE, etc) to become as much as it can be.&lt;br /&gt;&lt;br /&gt;We are not against Linux - quite the contrary! - but we are over the misinformation, lies and downright idiocy that surrounds and impedes the progress of a lot of Linux’s Desktops, Applications and Subsystems.”&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2) Linux Hater’s Blog: The subject of Allison’s blog post. This is a very active blog, with comments ranging from several hundred per post; most of the comments are back and forth arguments about who is right and who is wrong. The comments are rightfully named as “flames”. Most interesting of all, he has a shop selling anti-linux shirts and coffee cup. :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Click for larger View&lt;br /&gt;&lt;br /&gt;3) Promoting Linux: This is probably a parody site. But if you want some good laugh, this is the site for you :). Some quotes from the site:&lt;br /&gt;&lt;br /&gt;“I tried Linux and it burned me. Badly. Now I use Windows because “it just works.”&lt;br /&gt;&lt;br /&gt;“The freedom to write our own device drivers and recompile the kernel is no freedom at all.”&lt;br /&gt;&lt;br /&gt;“WE kNoW WhO YOU aRe. WE ArE GoInG To kILL yOU!” — Linux Kernel Team&lt;br /&gt;&lt;br /&gt;4) LinSux: A Forum devoted to linux suckiness. :). 92 members so far…&lt;br /&gt;&lt;br /&gt;5) Jerry Lee Cooper: Ok this hasn’t been updated for while, but this blog, titled: “Gems from the net guru”, is full of posts on how linux sux and windows rocks. For total awesomeness (and good laughs), skip the first couple of posts and read the rests.&lt;br /&gt;&lt;br /&gt;Ok this is all I could come up with. With all the windows hating sites out there, linux haters have a lot of catching up to do…&lt;br /&gt;&lt;br /&gt;If you liked this article, please share it on del.icio.us, StumbleUpon or Digg. I’d appreciate it. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-6484388158158022374?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/08/5-anti-linux-sites-you-must-follow.html</link><author>noreply@blogger.com (onecoolworld)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-4908821554348178580</guid><pubDate>Fri, 22 Aug 2008 18:44:00 +0000</pubDate><atom:updated>2008-08-22T11:46:06.875-07:00</atom:updated><title>Will Netbooks Pave the Way for Linux?</title><description>As we all know by now, netbooks are the latest craze in the computing world. Small notebooks, perfect for on the go, and relatively cheap. The interesting thing is that these netbooks are often offered with Linux pre-installed instead of Windows, and this prompts many to believe that it is the netbook niche where Linux will gain its first solid foothold among the general populace. "It does a lot to level the playing field. In fact, Linux looks to be quick out of the gate," said Jay Lyman, analyst with the 451 Group. However - is that really happening?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Personally, I am not so convinced that the netbook market will be a Linux stronghold. This isn't due to Linux not being ready or anything - in fact, for a netbook, Linux is 'readier' than Windows, if you ask me. As I explained in the review of the Acer Aspire One, it can run a full Linux installation with Compiz Fusion running smoothly, playing Flash and video files without a single hitch. Windows XP, on the other hand, would need more RAM, special tweaks to make it work properly on the solid state drive, and you won't get a hardware accelerated desktop. &lt;br /&gt;&lt;br /&gt;It is not the readiness that makes me doubt the stronghold assertion. What does make me doubt is opening my eyes and looking at the reality of the internets. What are the most popular threads on netbook community websites? What requests are most often made? Which blog posts get the most comments? Which howtos and guides are read the most? &lt;br /&gt;&lt;br /&gt;Exactly, the ones that detail how to install Windows XP on netbooks that ship with Linux (and threads that detail with issues concerning XP after installation). Like this one. Or this one. Or this one. Oh, and over here. And so on, and so forth. &lt;br /&gt;&lt;br /&gt;I stumbled upon all of these while finding ways to wreck my One doing research for the One review, and it quickly dawned on me. A lot of people keep saying that Microsoft's sales figures are misleading since you never know how many PCs pre-installed with Windows are in fact turned into Linux machines (or Vista into XP). I think the situation in the netbook market is the exact opposite: I firmly believe that many, many of the Linux netbooks are in fact turned into Windows XP netbooks. In other words, it is hard to say just how many netbooks are out there running Linux. &lt;br /&gt;&lt;br /&gt;In case you are wondering - yes, my One still runs Linux, and will continue to do so. I mean, fat32 just to get acceptable performance out of the SSD drive? And no wobbly windows? You must be kidding me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-4908821554348178580?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/08/will-netbooks-pave-way-for-linux.html</link><author>noreply@blogger.com (onecoolworld)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-4881463779830520133</guid><pubDate>Fri, 22 Aug 2008 18:25:00 +0000</pubDate><atom:updated>2008-08-22T11:41:55.512-07:00</atom:updated><title>New to Linux? Make sure you bookmark these</title><description>New users in the Linux/Unix land are often confused and overwhelmed by the marked differences between the OS they come from and Linux. It takes some time gettting used to the new environment and the new way of doing things. Now while you are at it, take a look at these websites that are there to help you make the smooth transition, these provide extensive documentation to step-by-step howtos, and also community support.&lt;br /&gt;&lt;br /&gt;Now while there are scores of material worthy of a mention, in the internet, I list the ones that every new user must bookmark (or atleast take a look at).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Distrowatch.com&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here, you can find reviews and news about the most popular Linux/Unix distributions as well the new ones that just came in. Regularly updated upon each new version release of the distributions and also ranks them based on page views. Overall, this is the place to be in if you are trying to find a new distro to try out.&lt;br /&gt;&lt;br /&gt;The Linux Documentation Project&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This site contains tons of materials to get you started or help you if you get stuck in the middle. From HowTos, guides, manpages, to Linux Gazette, an online magazine, this site is so full of information that its almost overwhelming in itself.&lt;br /&gt;&lt;br /&gt;The Gentoo Wiki&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;While the name might indicate that its specifically for the gentoo users, its not. The guides and howtos here can be related to most of the distributions with minor modifications like the actual download process involving the package managers, etc. Here one can find guides for a broad range of topic covering almost all aspect of Linux, from kernel configurations to wine and cedega, the gentoo wiki is for all linux users, irrespective of the choice of distribution.&lt;br /&gt;&lt;br /&gt;The Ubuntuforums&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Once again I mention something attached to a particular distribution. However, ubuntuforums, as all of its members knows, isn't just a place for ubuntu users. The sub forums in the other OS sections exists as well, although the real charm is the sheer number of people active here and the awesome community section. Nice place to get to know fellow linux users while engaging in some non-technical chat. Offcourse, you can also take a peep and find yourself comfortable in the programming section solving challenges. Its just a fun place to be here, even for the non-ubuntu users.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Linux Manpages&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As the name suggests this site is dedicated to the manpages. No distraction at all as you dive into man to find that lost option or switch. Specially beneficial for the ones who dislikes reading from the terminal. The ability to search and click also adds charm to the whole man page reading thing.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Other than these, you may also register to the forum or mailing lists of the distro you are using. IRCs are again a good place for support and discussion. Thats it fellows, read the FAQs, learn how to google and soon you will have a wealth of information at your disposal to make computing fun and comfortable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-4881463779830520133?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/08/new-to-linux-make-sure-you-bookmark.html</link><author>noreply@blogger.com (onecoolworld)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-7002508849340273030</guid><pubDate>Fri, 22 Aug 2008 18:17:00 +0000</pubDate><atom:updated>2008-08-22T11:18:31.221-07:00</atom:updated><title>Would Linux help Adobe pummel Microsoft?</title><description>Columnist John Dvorak thinks that Adobe Systems has a Microsoft problem and that Linux provides a clear solution:&lt;br /&gt;&lt;br /&gt;Adobe could port its Creative Suite...to Linux as a shot across Redmond's bow. Then the company should embrace Linux in-house and develop a complete, optimized Linux OS designed to run a high-performance version of its Creative Suite on Linux optimized for Adobe products, to be sold as a bootable bundle for multicore-workstation hardware.&lt;br /&gt;&lt;br /&gt;The idea is to produce a near-dedicated Adobe computer designed to use all the power of the newest chips to run the Adobe software under Linux. Having complete control of a high-powered OS would make all of the performance-demanding Adobe software run rings around any other implementation, if engineered correctly. It would become the viable desktop alternative to both the PC and the Mac. &lt;br /&gt;&lt;br /&gt;It's not a bad idea, though I'm not sure the world is ready to move to single-purpose PCs, at least not those that focus on creative applications to the exclusion of e-mail, Web browsing, etc.&lt;br /&gt;&lt;br /&gt;Yes, Dvorak notes that all of these applications can be had on the Linux desktop. Applications like Firefox work as well on Linux as on the Mac or Windows. But I think I'd take Dvorak's suggestion one step further: perhaps Adobe should band together with Google (or Yahoo) in a desktop partnership to bring the best of the Web and creativity applications together. Adobe and Google may butt heads in some areas, but they are the respective leaders in their markets and could find compelling reasons to work together to unseat Microsoft.&lt;br /&gt;&lt;br /&gt;His vision of an Adobe-centric Linux desktop has potential, but it has a much better chance of succeeding if it managed to marry Adobe to a great Web brand like Google. Google has an equal interest in tying its bits down into a desktop, and Linux provides an ideal, open platform.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-7002508849340273030?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/08/would-linux-help-adobe-pummel-microsoft.html</link><author>noreply@blogger.com (onecoolworld)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-6449262683620981191</guid><pubDate>Fri, 22 Aug 2008 18:15:00 +0000</pubDate><atom:updated>2008-08-22T11:15:21.878-07:00</atom:updated><title>XBMC's Linux port lacks impressive features</title><description>Linux has no shortage of audio and video players, but if you want to devote you whole system to multimedia use, you need the XBMC (formerly Xbox Media Center). Although initially designed for the Xbox gaming console, XBMC has been ported to other platforms. The alpha version of the Linux port of XBMC that I use is quite usable, especially for video playback, despite the fact that not all XBMC features have yet been ported.&lt;br /&gt;&lt;br /&gt;XBMC began life as the Xbox Media Player with its first open source release in 2002 before growing into an all-in-one media center app in 2004. The developers began porting the media center to Linux only last year. Currently precompiled binaries are available for various Ubuntu releases. If you don't use Ubuntu, you can also compile XBMC from source.&lt;br /&gt;&lt;br /&gt;XBMC main interface. Click to enlarge. &lt;br /&gt;Like a typical media center XBMC can display images and play audio and video content from various internal and external sources. XBMC is skinnable, and the default Project Mayhem III theme is very slick. The XBMC interface is divided into five menu items for accessing Programs, Pictures, Videos, Music, and Weather. The Programs entry is for accessing Xbox programs and isn't applicable in the non-Xbox ported environments. The Weather entry points to a customizable weather station. You can program three locations for which XBMC tracks weather conditions and predictions from weather.com. The other menu entries are for accessing the three media types.&lt;br /&gt;&lt;br /&gt;At the bottom of the main interface there are buttons that lead you to the XBMC settings page and the built-in file manager. From the settings page you can tweak general XBMC settings like the skin and default colors, as well as settings for picture, video, and audio playback.&lt;br /&gt;&lt;br /&gt;One of the most important features in a comprehensive application like XBMC is navigation, and the app scores high in this department. You can control the whole app from the mouse alone, as I did. There's a consistent click behavior -- left-click to enter a menu and right-click to step back -- helpful on-screen controls to navigate media, and an on-screen keyboard when you need one to search for media.&lt;br /&gt;&lt;br /&gt;With XBMC you can play media that's on your local disk on a variety of partition types, including such popular ones as NTFS, FAT, and ext3, as well as removable devices like USB disks. You can also play media from over your local network; XBMC can stream files from Windows machines on the intranet via Samba. It also packs a file manager for moving files and folders across partitions and from other machines on the local network to the one running XMBC. XBMC can also display videos in a variety of widescreen and HDTV resolutions if your machine can support these.&lt;br /&gt;&lt;br /&gt;Player capabilities&lt;br /&gt;The picture viewer support most common image formats, including BMP, JPG/JPEG, GIF, PNG, TIF/TIFF, TGA, and PCX. It can even be used as a comic reader to read comics in CBR/CBZ format. XBMC can also read and display EXIF data from images and use it to auto-rotate images. It has an inbuilt slideshow application that not only display images under a folder but also traverse inside subfolders and display images recursively. Instead of just running through images, during slideshow, XBMC uses pan and zoom effects to move around images, and can do both sequential and random plays through the images. &lt;br /&gt;&lt;br /&gt;XBMC CD ripping. Click to enlarge. &lt;br /&gt;For playing audio, XBMC relies on its own audio player, called Psycho-acoustic Audio Player. PAPlayer had no trouble playing every audio file I threw at it, including files in WAV, MP3, Ogg, WMA, RealPlayer, AC3, AAC, FLAC, MIDI, and Audio CD formats. The media center also has a built-in music library function that scans your music collection and stores ID3 tag information like artist, album, and genre, which can be used to filter the collection. You can queue music items, add them to your favorites list, or play them randomly with "Party mode." XBMC can play music from the local hard disk as well as from other computers on the intranet via Samba.&lt;br /&gt;&lt;br /&gt;One of the most irritating thing about the XBMC Linux port is the lack of music on-screen display (OSD) controls. The only way to stop an audio file or an audio track is to wait till XBMC plays out the playlist. There's also an audio ripper for ripping audio tracks and complete audio CDs, but it rips them into oblivion; I couldn't find the tracks in the specified destination directory or anywhere else on the disk.&lt;br /&gt;&lt;br /&gt;Video playback is handled by XBMC's video player, called DVDPlayer. It flawlessly played the Video CD, DVD, MPEG2, MPEG4, WMV, QuickTime, Real, and Flash files that I had on my local disk and from over the network. Like the audio player component, the video player has a video library feature. The video library gathers information about a video from external Web sites like IMDB and TV.com via scrapers. Once it has the information, you can browse your videos by genre, title, year, actors, and directors. The DVDPlayer has a nifty little OSD for navigating the videos as well as enabling and disabling subtitles.&lt;br /&gt;&lt;br /&gt;Missing quite a lot&lt;br /&gt;Searching movies by actor. Click to enlarge. &lt;br /&gt;There are a couple of features that are yet to be ported to XBMC on Linux. XBMC supports scripts, and some of the common ones for things like playing music and fetching weather forecasts are already bundled. I tried the browser script that's designed to help one browse pictures, videos, and audio available on any Web site, as well as the ABC TV script, which streams video content from Australia's ABC network, but couldn't get either of them to work. Both scripts crashed XBMC with a "segmentation fault" error.&lt;br /&gt;&lt;br /&gt;One of the most popular features of XBMC on other platforms is Internet streaming. XBMC-TV maintains a list of streams that you can download and feed to XBMC. But no matter what stream I tried playing, it buffered for a while but eventually failed to play.&lt;br /&gt;&lt;br /&gt;On other hardware XBMC can be controlled from over the network via a built-in Web server, but this feature hasn't yet been ported to the Linux version. Neither has the built-in FTP server that serves as another mechanism for transferring files to the computer running XBMC.&lt;br /&gt;&lt;br /&gt;Wrap-up&lt;br /&gt;XBMC media center is a capable media center application. Even the feature-incomplete Linux port is better and more comprehensive than a standalone media player, but it could still use some more features. I'd especially like to see OSD controls for the music player as well as the Web interface.&lt;br /&gt;&lt;br /&gt;Today, XBMC is still best for people who own an Xbox. If you want a full-featured media center for your Linux desktop, consider an application like LinuxMCE that has TV tuner support and home automation controls.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-6449262683620981191?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/08/xbmcs-linux-port-lacks-impressive.html</link><author>noreply@blogger.com (onecoolworld)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-580045934879446966</guid><pubDate>Fri, 22 Aug 2008 18:08:00 +0000</pubDate><atom:updated>2008-08-22T11:09:44.759-07:00</atom:updated><title>Anatomy of the Linux slab allocator</title><description>Dynamic memory management&lt;br /&gt;&lt;br /&gt;The goal of memory management is to provide a method by which memory can be dynamically shared amongst a variety of users for a variety of purposes. The memory management method should do both of the following:&lt;br /&gt;&lt;br /&gt;Minimize the amount of time required to manage the memory &lt;br /&gt;Maximize the available memory for general usage (minimize management overhead) &lt;br /&gt;Memory management is ultimately a zero-sum game of tradeoffs. You can develop an algorithm that uses little memory for management but takes more time to manage the available memory. You can also develop an algorithm that efficiently manages memory but uses a bit more memory. In the end, the requirements for the particular application drive the balance of the tradeoffs.&lt;br /&gt;&lt;br /&gt;Early memory managers used a heap-based allocation strategy. In this method, a large block of memory (called the heap) is used to provide memory for user-defined purposes. When users need a block of memory, they make a request for a given size. The heap manager looks at the available memory (using a particular algorithm) and returns the block. Some of the algorithms used in this search are the first-fit (the first block encountered in the heap that satisfies the request), and the best-fit (the best block in the heap that satisfies the request). When the users are finished with the memory, they return it to the heap.&lt;br /&gt;&lt;br /&gt;The fundamental problem with this heap-based allocation strategy is fragmentation. As blocks of memory are allocated, they are returned in different orders and at different times. This tends to leave holes in the heap requiring more time to efficiently manage the free memory. This algorithm tends to be memory efficient (allocating what's necessary) but requires more time to manage the heap.&lt;br /&gt;&lt;br /&gt;Another approach, called buddy memory allocation, is a faster memory technique that divides memory into power-of-2 partitions and attempts to allocate memory requests using a best-fit approach. When memory is freed by the user, the buddy block is checked to see if any of its contiguous neighbors have also been freed. If so, the blocks are combined to minimize fragmentation. This algorithm tends to be a bit more time efficient but can waste memory due to the best-fit approach.&lt;br /&gt;&lt;br /&gt;This article focuses on Linux kernel memory management and, in particular, the mechanisms provided through slab allocation.&lt;br /&gt;&lt;br /&gt;The slab cache&lt;br /&gt;&lt;br /&gt;The slab allocator used in Linux is based on an algorithm first introduced by Jeff Bonwick for the SunOS operating system. Jeff's allocator revolves around object caching. Within a kernel, a considerable amount of memory is allocated for a finite set of objects such as file descriptors and other common structures. Jeff found that the amount of time required to initialize a regular object in the kernel exceeded the amount of time required to allocate and deallocate it. His conclusion was that instead of freeing the memory back to a global pool, he would have the memory remain initialized for its intended purpose. For example, if memory is being allocated for a mutex, the mutex initialization function (mutex_init) need only be performed once when the memory is first allocated for the mutex. Subsequent allocations of the memory need not perform the initialization because it's already in the desired state from the previous deallocation and call to the deconstructor.&lt;br /&gt;&lt;br /&gt;The Linux slab allocator uses these ideas and others to build a memory allocator that is efficient in both space and time. &lt;br /&gt;&lt;br /&gt;Figure 1 illustrates the high-level organization of the slab structures. At the highest level is the cache_chain, which is a linked list of the slab caches. This is useful for best-fit algorithms that look for a cache that most closely fits the size of the desired allocation (iterating the list). Each element of the cache_chain is a kmem_cache structure reference (called a cache). This defines a pool of objects of a given size to manage.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Figure 1. The major structures of the slab allocator&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Each cache contains a list of slabs, which are contiguous blocks of memory (typically pages). Three slabs exist:&lt;br /&gt;&lt;br /&gt;slabs_full &lt;br /&gt;Slabs that are fully allocated. &lt;br /&gt;slabs_partial &lt;br /&gt;Slabs that are partially allocated. &lt;br /&gt;slabs_empty &lt;br /&gt;Slabs that are empty, or no objects allocated. &lt;br /&gt;Note that the slabs on the slabs_empty list are prime candidates for reaping. This is the process by which the memory used by slabs is provided back to the operating system for other uses.&lt;br /&gt;&lt;br /&gt;Each slab in the slab list is a contiguous block of memory (one or more contiguous pages) that is divided into objects. These objects are the fundamental elements that are allocated and deallocated from the particular cache. Note that the slab is the smallest allocation to the slab allocator, so if it needs to grow, this is the minimum by which it will grow. Typically, numerous objects are allocated per slab.&lt;br /&gt;&lt;br /&gt;As objects are allocated and deallocated from a slab, the individual slab can move between the slab lists. For example, when all objects are consumed in a slab, it moves from the slabs_partial list to the slabs_full list. When a slab is full and an object is deallocated, it moves from the slabs_full list to the slabs_partial list. When all objects are deallocated, it moves from the slabs_partial list to the slabs_empty list.&lt;br /&gt;&lt;br /&gt;Motivation behind the slab&lt;br /&gt;&lt;br /&gt;The slab cache allocator provides a number of benefits over traditional memory management schemes. First, kernels commonly rely on the allocation of small objects that are allocated numerous times over the lifetime of the system. The slab cache allocator provides this through the caching of similarly sized objects, thus avoiding the fragmentation problems that commonly occur. The slab allocator also supports the initialization of common objects, thus avoiding the need to repeatedly initialize an object for the same purpose. Finally, the slab allocator supports hardware cache alignment and coloring, which allows objects in different caches to occupy the same cache lines for increased cache utilization and better performance.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; Back to top &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;API functions&lt;br /&gt;&lt;br /&gt;Now on to the application program interface (API) for creating new slab caches, adding memory to the caches, destroying the caches, as well as the functions to allocate and deallocate objects from them.&lt;br /&gt;&lt;br /&gt;The first step is to create your slab cache structure, which you can create statically as:&lt;br /&gt;&lt;br /&gt;struct struct kmem_cache *my_cachep;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; Linux source for the slab cache&lt;br /&gt;You can find the slab cache source in ./linux/mm/slab.c. The kmem_cache structure is also defined in ./linux/mm/slab.c. The discussion in this article focuses on the current implementation in the 2.6.21 Linux kernel.  &lt;br /&gt; &lt;br /&gt;This reference is then used by the other slab cache functions for creation, deletion, allocation, and so on. The kmem_cache structure contains the per-central processing unit (CPU) data, a set of tunables (accessible through the proc file system), statistics, and necessary elements to manage the slab cache.&lt;br /&gt;&lt;br /&gt;kmem_cache_create&lt;br /&gt;&lt;br /&gt;Kernel function kmem_cache_create is used to create a new cache. This is commonly performed at kernel init time or when a kernel module is first loaded. Its prototype is defined as:&lt;br /&gt;&lt;br /&gt;struct kmem_cache *&lt;br /&gt;kmem_cache_create( const char *name, size_t size, size_t align,&lt;br /&gt;                       unsigned long flags;&lt;br /&gt;                       void (*ctor)(void*, struct kmem_cache *, unsigned long),&lt;br /&gt;                       void (*dtor)(void*, struct kmem_cache *, unsigned long));&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The name argument defines the name of the cache, which is used by the proc file system (in /proc/slabinfo) to identify this cache. The size argument specifies the size of the objects that should be created for this cache, with the align argument defining the required alignment for each object. The flags argument specifies options to enable for the cache. These flags are shown in Table 1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Table 1. Partial list of options for kmem_cache_create (as specified in flags)&lt;br /&gt;Option Description &lt;br /&gt;SLAB_RED_ZONE Insert markers at header and trailer of the object to support checking of buffer overruns. &lt;br /&gt;SLAB_POISON Fill a slab with a known pattern to allow monitoring of objects in the cache (objects owned by the cache, but modified externally). &lt;br /&gt;SLAB_HWCACHE_ALIGN Specify that the objects in this cache must be aligned to the hardware cachline. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The ctor and dtor arguments define an optional object constructor and deconstructor. The constructor and deconstructor are callback functions provided by the user. When a new object is allocated from the cache, it can be initialized through the constructor.&lt;br /&gt;&lt;br /&gt;After the cache is created, its reference is returned by the kmem_cache_create function. Note that this function allocates no memory to the cache. Instead, when attempts are made to allocate objects from the cache (when it's initially empty), memory is allocated to it through a refill operation. This same operation is used to add memory to the cache when all its objects are consumed.&lt;br /&gt;&lt;br /&gt;kmem_cache_destroy&lt;br /&gt;&lt;br /&gt;Kernel function kmem_cache_destroy is used to destroy a cache. This call is performed by kernel modules when they are unloaded. The cache must be empty before this function is called.&lt;br /&gt;&lt;br /&gt;void kmem_cache_destroy( struct kmem_cache *cachep );&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;kmem_cache_alloc&lt;br /&gt;&lt;br /&gt;To allocate an object from a named cache, the kmem_cache_alloc function is used. The caller provides the cache from which to allocate an object and a set of flags:&lt;br /&gt;&lt;br /&gt;void kmem_cache_alloc( struct kmem_cache *cachep, gfp_t flags );&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This function returns an object from the cache. Note that if the cache is currently empty, this function may invoke cache_alloc_refill to add memory to the cache. The flag options for kmem_cache_alloc are the same as those for kmalloc. Table 2 provides a partial list of the flag options.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Table 2. Flag options for the kmem_cache_alloc and kmalloc kernel functions&lt;br /&gt;Flag Description &lt;br /&gt;GFP_USER Allocate memory for a User (this call may sleep). &lt;br /&gt;GFP_KERNEL Allocate memory from kernel RAM (this call may sleep). &lt;br /&gt;GFP_ATOMIC Force no-sleep on this call (useful for interrupt handlers). &lt;br /&gt;GFP_HIGHUSER Allocate from high memory. &lt;br /&gt;&lt;br /&gt; Slab allocation for NUMA&lt;br /&gt;For Non-Uniform Memory Access (NUMA) architectures, the allocation function for a specified node is kmem_cache_alloc_node.  &lt;br /&gt; &lt;br /&gt;kmem_cache_zalloc&lt;br /&gt;&lt;br /&gt;The kernel function kmem_cache_zalloc is similar to kmem_cache_alloc, except that it performs a memset of the object to clear it out prior to returning the object to the caller.&lt;br /&gt;&lt;br /&gt;kmem_cache_free&lt;br /&gt;&lt;br /&gt;To free an object back to the slab, the kmem_cache_free is used. The caller provides the cache reference and the object to be freed.&lt;br /&gt;&lt;br /&gt;void kmem_cache_free( struct kmem_cache *cachep, void *objp );&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;kmalloc and kfree&lt;br /&gt;&lt;br /&gt;The most common memory management functions in the kernel are the kmalloc and kfree functions. The prototypes for these functions are defined as:&lt;br /&gt;&lt;br /&gt;void *kmalloc( size_t size, int flags );&lt;br /&gt;void kfree( const void *objp );&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Note that in kmalloc the only arguments are the requested size of the object to allocate and a set of flags (see the partial list in Table 2). But kmalloc and kfree use the slab cache just like the previously-defined functions. Instead of naming a specific slab cache from which to allocate an object, the kmalloc function iterates through the available caches looking for one that can satisfy its size constraint. When found, an object is allocated (using __kmem_cache_alloc). To free an object with kfree, the cache from which the object was allocated is determined with a call to virt_to_cache. This function returns the cache reference that is then used in a call to __cache_free to release the object.&lt;br /&gt;&lt;br /&gt; Generic object allocation&lt;br /&gt;Internally in the slab source, a function named kmem_find_general_cachep is provided that performs a cache search looking for a slab cache that best fits the necessary object size.  &lt;br /&gt; &lt;br /&gt;Other miscellaneous functions&lt;br /&gt;&lt;br /&gt;The slab cache API provides a number of other useful functions. The kmem_cache_size function returns the size of the objects that are managed by this cache. You can also retrieve the name of a given cache (as defined at cache creation time) through a call to kmem_cache_name. A cache can be shrunk by releasing free slabs in the cache. This can be accomplished with a call to kmem_cache_shrink. Note that this action (called reaping) is performed automatically on a periodic basis by the kernel (through kswapd).&lt;br /&gt;&lt;br /&gt;unsigned int kmem_cache_size( struct kmem_cache *cachep );&lt;br /&gt;const char *kmem_cache_name( struct kmem_cache *cachep );&lt;br /&gt;int kmem_cache_shrink( struct kmem_cache *cachep );&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; Back to top &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Example use of the slab cache&lt;br /&gt;&lt;br /&gt;The following code snippets demonstrate the creation of a new slab cache, allocating and deallocating objects from the cache, and then destroying the cache. To begin, a kmem_cache object must be defined and then initialized (see Listing 1). This particular cache contains 32-byte objects and is hardware-cache aligned (as defined by the flags argument SLAB_HWCACHE_ALIGN).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Listing 1. Creating a new slab cache&lt;br /&gt;                &lt;br /&gt;static struct kmem_cache *my_cachep;&lt;br /&gt;&lt;br /&gt;static void init_my_cache( void )&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;   my_cachep = kmem_cache_create( &lt;br /&gt;                  "my_cache",            /* Name */&lt;br /&gt;                  32,                    /* Object Size */&lt;br /&gt;                  0,                     /* Alignment */&lt;br /&gt;                  SLAB_HWCACHE_ALIGN,    /* Flags */&lt;br /&gt;                  NULL, NULL );          /* Constructor/Deconstructor */&lt;br /&gt;&lt;br /&gt;   return;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;With your slab cache allocated, you can now allocate an object from it. Listing 2 provides an example of allocating and deallocating an object from the cache. It also demonstrates two of the miscellaneous functions.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Listing 2. Allocating and deallocating objects&lt;br /&gt;                &lt;br /&gt;int slab_test( void )&lt;br /&gt;{&lt;br /&gt;  void *object;&lt;br /&gt;&lt;br /&gt;  printk( "Cache name is %s\n", kmem_cache_name( my_cachep ) );&lt;br /&gt;  printk( "Cache object size is %d\n", kmem_cache_size( my_cachep ) );&lt;br /&gt;&lt;br /&gt;  object = kmem_cache_alloc( my_cachep, GFP_KERNEL );&lt;br /&gt;&lt;br /&gt;  if (object) {&lt;br /&gt;&lt;br /&gt;    kmem_cache_free( my_cachep, object );&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Finally, Listing 3 is an example of destroying a slab cache. The caller must ensure that no attempts to allocate objects from the cache are performed during the destroy operation.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Listing 3. Destroying a slab cache&lt;br /&gt;                &lt;br /&gt;static void remove_my_cache( void )&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;  if (my_cachep) kmem_cache_destroy( my_cachep );&lt;br /&gt;&lt;br /&gt;  return;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; Back to top &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Proc interface to the slab&lt;br /&gt;&lt;br /&gt;The proc file system provides a simple way to monitor all slab caches that are active in the system. This file, called /proc/slabinfo, provides detailed information about all slab caches in addition to providing a few tunables that are accessible from user space. The current version of slabinfo provides a header so that the output is a bit more readable. For each slab cache in the system, the number of objects, number of active objects, and the object size is provided (in addition to the objects and pages per slab). A set of tunables and slab data are also provided.&lt;br /&gt;&lt;br /&gt;To tune a particular slab cache, simply echo the slab cache name and the three tunable parameters as a string to the /proc/slabinfo file. The following example illustrates how to increase the limit and batchcount while leaving the shared factor as is (format is "cache name limit batchcount shared factor"):&lt;br /&gt;&lt;br /&gt;# echo "my_cache 128 64 8" &gt; /proc/slabinfo&lt;br /&gt;             &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The limit field indicates the maximum number of objects that will be cached for each CPU. The batchcount field is the maximum number of global cache objects that will be transferred to the per-CPU cache when it becomes empty. The shared parameter indicates the sharing behavior for Symmetric MultiProcessing (SMP) systems.&lt;br /&gt;&lt;br /&gt;Note that you must have superuser privileges to tune parameters in the proc file system for a slab cache.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; Back to top &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The SLOB allocator&lt;br /&gt;&lt;br /&gt;For small embedded systems, a slab emulation layer exists called the SLOB. This slab replacement is advantageous in small embedded Linux systems, but while it conserves up to 512KB of memory, it suffers from fragmentation and poor scaling. When CONFIG_SLAB is disabled, the kernel falls back to this SLOB allocator. See the Resources section for more details.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; Back to top &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Going further&lt;br /&gt;&lt;br /&gt;The source code for the slab cache allocator is actually one of the more readable aspects of the Linux kernel. Outside of the indirection that exists in the function calls, the source is intuitive and, in general, well commented. If you'd like to know more about the slab cache allocator, I suggest that you start there as it's the most up-to-date documentation on the mechanism. The Resources section below offers a number of sources that describe the slab cache allocator, but unfortunately all of them are out of date given the current 2.6 implementation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-580045934879446966?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/08/anatomy-of-linux-slab-allocator.html</link><author>noreply@blogger.com (onecoolworld)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-7231204232063006013</guid><pubDate>Fri, 22 Aug 2008 18:04:00 +0000</pubDate><atom:updated>2008-08-22T11:06:18.288-07:00</atom:updated><title>If it's animation or special effects, it's Linux</title><description>When I was a kid, I used to make crude little animated cartoons in my notebooks using the flipbook technique. Walt Disney had nothing to worry about. I was awful even by the 3rd grade standards of White Pine elementary. Today, I could be great, because almost all top animation and special effects artists are Linux users. &lt;br /&gt;&lt;br /&gt;My colleague Eric Lai discovered recently that while top animation and FX (special effects) programs are run on Macs and some of them, like RenderMan Pro Server are being ported to Windows, it's on Linux clusters that the really serious movie and television visual effects are created. As Robin Rowe writes at LinuxMovies.org, "In the film industry, Linux has won. It's running on practically all servers and desktops used for feature animation and visual effects." &lt;br /&gt;&lt;br /&gt;Rowe's not just being a Linux booster. It's the Gospel truth. The animation and FX for Indiana Jones and the Kingdom of the Crystal Skull; Star Wars: The Clone Wars; WALL-E; 300; The Golden Compass; Harry Potter and the Order of the Phoenix; and I Am Legend, to name but a few recent movies, were all created using Pixar's RenderMan and Autodesk Maya running on Linux clusters. &lt;br /&gt;&lt;br /&gt;The really short version for why this is so comes down to Linux clustering enables you to put massive computational firepower into rendering 2D and 3D images. It's ironic. While getting the most out of NVIDIA and ATI graphic cards on a Linux desktop is still a pain and there's always some trouble dealing with proprietary video formats on Linux, the top animated and FX-heavy videos usually have their start on Linux systems. &lt;br /&gt;&lt;br /&gt;Specifically, most photo-realistic special effects are created with programs using Pixar's RISpec (RenderMan Interface Specification) compliant programs. RISpec is an extremely detailed open-standard set of APIs (application program interfaces) for 3D graphics rendering programs. To be more precise, RISpec isn't quite an open standard. While Pixar, the animation giant owned by Disney, has published the specifications for all to use, and no longer even requires a no-charge license to create a RISpec-compliant rendering program, Pixar doesn't go out of its way to specify exactly how developers can, or can't use RISpec. &lt;br /&gt;&lt;br /&gt;That said, there are open-source RISpec-compliant programs like Pixie and other rendering programs such as Blender, which can be used as a source for RISpec software. Pixar's RenderMan software suite itself, while it relies on Linux in most animation and FX shops, is unlikely ever to be open-sourced. &lt;br /&gt;&lt;br /&gt;So, while you can't point to animation and special effects software as a major win for open-source software, there is absolutely no doubt that every time you gasp at a breath-taking escape by Indy or grin at a particularly clever visual bit of fun in Ratatouille, you're appreciating the power of Linux. &lt;br /&gt;&lt;br /&gt;I wonder if I could get a few million or pre-production money for The New Adventures of StickMan? Nah. I better stick to writing rather than try moving to animation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-7231204232063006013?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/08/if-its-animation-or-special-effects-its.html</link><author>noreply@blogger.com (onecoolworld)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-5824618479642023903</guid><pubDate>Fri, 22 Aug 2008 17:58:00 +0000</pubDate><atom:updated>2008-08-22T11:00:09.311-07:00</atom:updated><title>Canonical Joins The Linux Foundation</title><description>The Linux Foundation, the nonprofit organization dedicated to accelerating the growth of Linux, today announced that Canonical has become a member of the Foundation.&lt;br /&gt;&lt;br /&gt;Canonical is the commercial sponsor of Ubuntu, a popular version of the Linux operating system, and supports a wide range of other open source projects including Bazaar, Storm and Upstart. Ubuntu has become a popular choice for the server and desktop as well as for the rapidly emerging areas of netbooks and mobile Internet devices.&lt;br /&gt;Matt Zimmerman is the CTO of the Ubuntu project in Canonical, chairs the Ubuntu Technical Board and leads all engineering efforts for the distribution. &lt;br /&gt;&lt;br /&gt;“The Linux Foundation occupies a critical, non-commercial function in the use and popularization of Linux around the world. We’ve always seen the Linux Foundation’s value and are pleased to now become an official member and support its activities. We look forward to working with them to continue the march of Linux in all areas of computing,” said Matt Zimmerman, Ubuntu program manager and CTO, Canonical. &lt;br /&gt;&lt;br /&gt;Ubuntu community members have been active participants in a variety of workgroups at the Foundation, including the Linux Standard Base, Desktop Architects and Driver Backporting groups. With Canonical’s support, user interests for both commercial and community versions of Ubuntu will be represented.&lt;br /&gt;&lt;br /&gt;“Canonical is an important new member for the Linux Foundation,” said Jim Zemlin, executive director of The Linux Foundation. “Matt and his team have created an exciting distribution that has taken the world by storm. They have rallied the cause of cross-industry, cross-community collaboration for years. We are extremely pleased to work even more closely with Canonical as we push Linux to the next stage of growth.” &lt;br /&gt;&lt;br /&gt;About the Linux Foundation&lt;br /&gt;The Linux Foundation is a nonprofit consortium dedicated to fostering the growth of Linux. Founded in 2007, the Linux Foundation sponsors the work of Linux creator Linus Torvalds and is supported by leading Linux and open source companies and developers from around the world. The Linux Foundation promotes, protects and standardizes Linux by providing unified resources and services needed for open source to successfully compete with closed platforms. For more information, please visit www.linux-foundation.org.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-5824618479642023903?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/08/canonical-joins-linux-foundation.html</link><author>noreply@blogger.com (onecoolworld)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-9126683795344722824</guid><pubDate>Fri, 22 Aug 2008 17:56:00 +0000</pubDate><atom:updated>2008-08-22T10:56:40.313-07:00</atom:updated><title>NimbleX 2008 !</title><description>NimbleX, a Slackware-based distribution, advertises itself as "the new wave of Linux." However, what is appealing in NimbleX -- its speed and small footprint and the resulting selection of alternative software choices -- will likely strike veteran GNU/Linux users as being very old school. By contrast, its limitations -- too little attention to such aspects as the installer, packaging, and security -- seem all too modern, being reminiscent of other distros intent on commercialization or emulating Windows, even though NimbleX is a community distribution and largely a labor of love for Romanian developer Bogdan Radulescu.&lt;br /&gt;&lt;br /&gt;NimbleX's recent 2008 edition is available in three CD images. The first is 200MB in size and is the one that users are steered to by the organization of the NimbleX site (and the one I used for this review). The others are 100 and 69MB. The site boasts that, when started from the hard drive, the smallest of these images results in what "is most likely the fastest distro with KDE" -- a credible claim, given that NimbleX is based on Slackware and is optimized for speed as much as compactness. &lt;br /&gt;&lt;br /&gt;You can also generate a live CD via the Internet using Custom NimbleX, a feature that Linux.com previously reviewed. When you select the packages you want, a custom .ISO image is saved for a limited time for you to download. Since the regular installer gives no choice of packages, you may prefer to take the extra step of using Custom NimbleX, especially if you plan multiple installations. &lt;br /&gt;&lt;br /&gt;Installation&lt;br /&gt;Whichever image you choose, you can install NimbleX to a hard drive or USB device from the live CD desktop. The largest version gives you the option of booting to the KDE Display Manager log in manager or directly into KDE. The only difference is that, if you boot to KDM, you have the option of choosing which graphical interface to choose, and need the default root password from the download page. Alternatively, you can save time by starting the installer directly, although the live CD is one of the fastest of its kind. &lt;br /&gt;&lt;br /&gt;The installer starts with a warning that it is "a work in progress," which is something you will have no trouble observing. Confusingly, it gives you the option of installing either to a hard drive that already contains either GNU/Linux or Windows, or to a USB device. To use the first option, you must already have the partitions ready to receive NimbleX -- an inconvenience that I haven't seen for at least eight years in an installer. Moreover, at first glance, the installer seems to have no option for installing to a blank hard drive or overwriting one. However, experimentation soon reveals that the proper option in such cases is to choose the USB device option. &lt;br /&gt;&lt;br /&gt;To make matters even more confusing, you need to choose SYSLINUX as your boot manager, because the GRUB option is broken. The install also concludes by asking if you want to save your system data to the hard drive, suggesting that "this will make NimbleX almost unbreakable." Presumably, the resulting nimble.data file is for recovery purposes, but since it can vary from 100 to 1,200 megabytes, some advice might be useful here. &lt;br /&gt;&lt;br /&gt;The main advantage of the installer is that, like the rest of NimbleX, it is optimized for speed. Unfortunately, it gains this speed by minimizing options, including not giving you any choice of what software to install. Clearly, too, it needs to reword and explain what options it does offer. Fortunately, if you do run into problems, the whole process is so quick -- less than 10 minutes -- that the inconvenience of redoing the install is minimal. &lt;br /&gt;&lt;br /&gt;Desktop and selection of software&lt;br /&gt;NimbleX boots to a silver gray wallpaper that looks as though it were borrowed from a poster for the X-Men movies. Experienced users will have no trouble observing that it is based on KDE 3.5.9, despite the fact that the latest release appeared only a couple of weeks before KDE 4.1 debuted. &lt;br /&gt;&lt;br /&gt;  Click to enlarge &lt;br /&gt;Like all the Slackware-based distributions I have tried, NimbleX offers an extremely responsive desktop -- one of the reasons that it is especially suited to a live CD or USB drive, and one noticeable enough to make you quickly forget the miniature ordeal of the installer. &lt;br /&gt;&lt;br /&gt;Another notable feature of NimbleX is its unusual choice of software. The 200MB CD image offers, in addition to KDE, a dozen window managers. Most of them, such as IceWM and OpenBox, are lightweight, although the larger Enlightenment is also an option. Noticeably missing, though, are GNOME and Xfce, no doubt sacrificed to the effort to make sure NimbleX is small and lives up to its name. &lt;br /&gt;&lt;br /&gt;Similarly, the desktop software available is limited, and, at times, highly individualistic. OpenOffice.org is not included; instead, KOffice is provided for an office suite. In much the same way, the major graphics programs are represented only by the GIMP, with Karbon, Krita, Inkscape, and Scribus unavailable. The distinct impression is that office productivity and graphics work are not a priority for the NimbleX team, although what the distribution does offer in these areas is more than adequate for many users. &lt;br /&gt;&lt;br /&gt;Exploring the menus, you can also find a number of unusual choices, such as the Rox-Filer file manager, the Kooldock floating panel, and Yakuake Quake-style terminal emulator, to say nothing of slightly less unorthodox choices such as the Dillo Web browser. So far as any criteria are detectable behind the available software, the selection seems designed to be lightweight, and to provide a limited range of alternative software wherever possible. Perhaps the default panel icons tell the story: They are a console, the Konqueror and Firefox Web browsers, the XMMS audio player, and the MPlayer media player. &lt;br /&gt;&lt;br /&gt;Newer users might chafe at the omission of many standard programs, but more advanced users may find NimbleX's selection of software a welcome change from the huge installation footprints of the leading distros. Besides keeping NimbleX small and quick, the selection is a reminder that many often-overlooked alternatives are available in free and open source software. &lt;br /&gt;&lt;br /&gt;Software installation and security&lt;br /&gt;If you are interested in trying NimbleX and wary of Slackware's reputation for difficult software installation, you may be relieved to learn that NimbleX uses slapt at the command line and Gslapt on the desktop for package management. As their names suggest, these applications are designed to bring the functionality of Debian's apt-get to Slackware-based distributions, including the automatic resolution of dependencies. As is often the case with such applications, the command-line version is easier to use once you know the basic commands, because the desktop one seems to require constant resizing of panes and flipping from tab to tab if you want to use it efficiently. &lt;br /&gt;&lt;br /&gt;The only trouble is, dependency-resolving software is only as good as the packages and repositories that support it, and, in NimbleX's case, both are rather weak. Not only is the package selection limited to fewer than 500 packages -- all KDE or non-desktop-specific -- but, in several cases, such as Bluefish and Krusader, packages were either uninstallable or unusable because they required unavailable libraries. The NimbleX team needs to pay more attention to packaging. &lt;br /&gt;&lt;br /&gt;The same is true of security. Although NimbleX installs with ClamAV and the Guarddog firewall,it completely neglects basic precautions. Not only is a user account not created during installation, but you can log into an installed desktop without even entering the default root password -- which, in any case, is displayed on the distribution's download page. Experienced users will know to correct these arrangements immediately, but for any distribution to permit such sloppy security settings seems irresponsible. &lt;br /&gt;&lt;br /&gt;Mixed results&lt;br /&gt;NimbleX leaves me of two minds. On one hand, I appreciate its clear direction, even if making speed and a small footprint seems old-fashioned and even unnecessary at a time when terabyte hard drives are starting to become common. When so many distributions are paying little or no attention to these matters, such priorities are refreshing -- especially when they result in enhanced performance. Computer users may have long ago ceased to need to coax every last bit of speed from their machines to get acceptable performance, but the efficiency of NimbleX is still something that many can appreciate. &lt;br /&gt;&lt;br /&gt;On the other hand, considering the deficiencies in the installer, packages, and security, I get the impression that NimbleX has focused so closely on its major goals that it has overlooked some of the basics of producing a distribution. &lt;br /&gt;&lt;br /&gt;Now that the new version is out the door, with any luck NimbleX developers can focus on fixing these other matters. If they can do so, then NimbleX may still become a distribution worth recommending. But, until that happens, any recommendation needs to be heavily qualified.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-9126683795344722824?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/08/nimblex-2008.html</link><author>noreply@blogger.com (onecoolworld)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-5810044620195786360</guid><pubDate>Fri, 22 Aug 2008 17:51:00 +0000</pubDate><atom:updated>2008-08-22T10:52:47.340-07:00</atom:updated><title>Linux popularity across the globe</title><description>The Linux landscape is constantly changing and has a strong community of both developers and users. But where is Linux the most popular, and where are the different Linux distributions the most popular?&lt;br /&gt;&lt;br /&gt;To try to answer these questions, we have looked at data from Google with the highly useful Insights for Search, which gave us a number of interesting and often surprising results.&lt;br /&gt;&lt;br /&gt;Aside from just looking at Linux itself, we have included eight common Linux distributions in this survey: Ubuntu, OpenSUSE, Fedora, Debian, Red Hat, Mandriva, Slackware and Gentoo.&lt;br /&gt;&lt;br /&gt;(We use both Ubuntu and Red Hat here at Pingdom, so of course we had to include those two!)&lt;br /&gt;&lt;br /&gt;How we determined popularity&lt;br /&gt;To have a way to judge popularity, we have looked at where a specific search term is most popular, i.e. how likely it is for someone in a region (country or state) to search for that specific term, for example “Linux” or “Ubuntu”. Google calls this “regional interest”.&lt;br /&gt;&lt;br /&gt;If a high proportion of the searches in a country are for the term “Linux”, this should also indicate that Linux is popular in that country, or at least that there is a high interest in Linux.&lt;br /&gt;&lt;br /&gt;Linux popularity globally&lt;br /&gt;On a global level, the interest in Linux seems to be the strongest in India, Cuba and Russia, followed by the Czech Republic and Indonesia (and Bangladesh, which has the same regional interest level as Indonesia). The first Western country when looking at regional popularity is Germany which is the 10th country in regards to search popularity for Linux.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Linux popularity in the United States&lt;br /&gt;In the United States, interest appears significantly stronger in Utah and California than the rest of the country. California’s high position is understandable, considering it is the home of Silicon Valley, but we are not sure why the interest for Linux is even higher in Utah. Perhaps some of our readers might shed some light on this?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can dig deeper into Google’s search statistics for Linux here.&lt;br /&gt;&lt;br /&gt;Global popularity of the different Linux distributions&lt;br /&gt;As mentioned in the introduction, we looked at eight common distributions: Ubuntu, OpenSUSE, Fedora, Debian, Red Hat, Mandriva, Slackware and Gentoo.&lt;br /&gt;&lt;br /&gt;Some interesting observations&lt;br /&gt;Ubuntu is most popular in Italy and Cuba. &lt;br /&gt;OpenSUSE is most popular in Russia and the Czech Republic. &lt;br /&gt;Red Hat is most popular in Bangladesh and Nepal. &lt;br /&gt;Debian is most popular in Cuba. &lt;br /&gt;Cuba is in the top five (interest-wise) of three of the eight distributions in this survey. &lt;br /&gt;Indonesia is in the top five of four of the distributions. &lt;br /&gt;Russia and the Czech Republic are in the top five of five of the distributions. &lt;br /&gt;The United States is not in the top five of any of the distributions. &lt;br /&gt;Note again that when we say “popular” here, we mean how popular the search term is. After all, this is based on Google search data.&lt;br /&gt;&lt;br /&gt;It might also be worth pointing out that the results are normalized, so the size of each region is removed as a factor. In other words, everything is in proportion to the size of the region (the total number of searches in that region, we assume). That means that larger regions are not favored over small, as would be the case otherwise.&lt;br /&gt;&lt;br /&gt;Now on to the results for the individual Linux distributions.&lt;br /&gt;&lt;br /&gt;Ubuntu&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Countries with highest interest in Ubuntu:&lt;br /&gt;&lt;br /&gt;Italy &lt;br /&gt;Cuba &lt;br /&gt;Indonesia &lt;br /&gt;Norway &lt;br /&gt;Czech Republic &lt;br /&gt;Dig deeper into Google’s search statistics for Ubuntu here.&lt;br /&gt;&lt;br /&gt;OpenSUSE&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Countries with highest interest in OpenSUSE:&lt;br /&gt;&lt;br /&gt;Russia &lt;br /&gt;Czech Republic &lt;br /&gt;Moldova &lt;br /&gt;Germany &lt;br /&gt;Indonesia &lt;br /&gt;Dig deeper into Google’s search statistics for OpenSUSE here.&lt;br /&gt;&lt;br /&gt;Fedora&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Countries with highest interest in Fedora:&lt;br /&gt;&lt;br /&gt;Sri Lanka &lt;br /&gt;Bangladesh &lt;br /&gt;India &lt;br /&gt;Nepal &lt;br /&gt;Zimbabwe &lt;br /&gt;Dig deeper into Google’s search statistics for Fedora here.&lt;br /&gt;&lt;br /&gt;Debian&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Countries with highest interest in Debian:&lt;br /&gt;&lt;br /&gt;Cuba &lt;br /&gt;Czech Republic &lt;br /&gt;Germany &lt;br /&gt;Belarus &lt;br /&gt;Russia &lt;br /&gt;Dig deeper into Google’s search statistics for Debian here.&lt;br /&gt;&lt;br /&gt;Red Hat&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Countries with highest interest in Red Hat:&lt;br /&gt;&lt;br /&gt;Bangladesh &lt;br /&gt;Nepal &lt;br /&gt;Sri Lanka &lt;br /&gt;India &lt;br /&gt;Cuba &lt;br /&gt;Dig deeper into Google’s search statistics for Red Hat here.&lt;br /&gt;&lt;br /&gt;Mandriva&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Countries with highest interest in Mandriva:&lt;br /&gt;&lt;br /&gt;Russia &lt;br /&gt;Czech Republic &lt;br /&gt;Poland &lt;br /&gt;France &lt;br /&gt;Indonesia &lt;br /&gt;Dig deeper into Google’s search statistics for Mandriva here.&lt;br /&gt;&lt;br /&gt;Slackware&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Countries with highest interest in Slackware:&lt;br /&gt;&lt;br /&gt;Bulgaria &lt;br /&gt;Indonesia &lt;br /&gt;Brazil &lt;br /&gt;Russia &lt;br /&gt;Poland &lt;br /&gt;Dig deeper into Google’s search statistics for Slackware here.&lt;br /&gt;&lt;br /&gt;Gentoo&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Countries with highest interest in Gentoo:&lt;br /&gt;&lt;br /&gt;Russia &lt;br /&gt;Czech Republic &lt;br /&gt;Belarus &lt;br /&gt;Moldova &lt;br /&gt;Estonia &lt;br /&gt;Dig deeper into Google’s search statistics for Gentoo here.&lt;br /&gt;&lt;br /&gt;Conclusion&lt;br /&gt;Linux has a lot of distributions (though Ubuntu is currently dominating the scene according to Distrowatch), but although we only included eight of those distributions it seems clear that many of them are favored by very different regions of the world. In other words, the distribution of the distributions (pardon the pun) is far from uniform.&lt;br /&gt;&lt;br /&gt;In general, Linux seems to have a stronger popularity in the East than in the West, with some exceptions (like Cuba). This is perhaps not surprising, considering that it is free software and many of the countries where Linux is most popular have a relatively low income per capita compared to most countries in the West. Or perhaps there is just a stronger focus on free software and Open Source in these regions.&lt;br /&gt;&lt;br /&gt;This could also indicate a weaker standing for Windows in the East.&lt;br /&gt;&lt;br /&gt;We would love to hear your opinion on the results, especially from Linux users living in the countries mentioned in this survey. Let us know what you think in the comments!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-5810044620195786360?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/08/linux-popularity-across-globe_22.html</link><author>noreply@blogger.com (onecoolworld)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-2482669050683633099.post-3986468526170235169</guid><pubDate>Fri, 22 Aug 2008 17:46:00 +0000</pubDate><atom:updated>2008-08-22T10:46:38.139-07:00</atom:updated><title>5 Great Alternative Linux Music Players</title><description>Amarok, Rhythmbox and Banshee are a few of the popular music players in Linux. They are great in features and have received plenty of good reviews. But what is unknown to many is that there are a lot of other music players for Linux which are also great in features, but are hidden in some corners of the world.&lt;br /&gt;&lt;br /&gt;If you are willing to try something out of the box, here are 5 great alternative music players that you can use in your Linux desktop.&lt;br /&gt;&lt;br /&gt;1. Audacious&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you love Winamp for its small, simple and skinnable interface, then you will love Audacious for sure. Audacious is a fork of Beep Media Player and XMMS. It is small, lightweight and fully skinnable. It supports both Winamp and XMMS skin. This means that you can now port your favorite Winamp skin over and make Audacious looks exactly the same.&lt;br /&gt;&lt;br /&gt;Behind the simple interface, there are options for you to configure your playlist, visualization, sound effects, mouse shortcut and also to install the various plugins to improve its functionality. If you are a loyal fan of Winamp, or just want something that does not take up the whole of your desktop space, then Audacious is definitely the best choice.&lt;br /&gt;&lt;br /&gt;2. Listen Music player&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;At first glance, ‘Listen Music Player’ looks just like Rhythmbox, but after a using it for a while you will find it is actually better than Rhythmbox. The interface is split into three views. The panel on the extreme left is the play control and playlist. At the bottom of the left pane is the ‘dynamic’ option where you can make your player ’smarter’ by configuring it to remove played tracks and append new tracks to the playlist. The middle panel is the navigation menu while the right panel displays the necessary information.&lt;br /&gt;&lt;br /&gt;Listen Music Player integrates well with last.fm, ShoutCast, and can retrieve lyrics for the playing track. You can even check up the current track’s information on Wikipedia, right within the player itself.&lt;br /&gt;&lt;br /&gt;All in all, this is a great music player with plenty of useful features.&lt;br /&gt;&lt;br /&gt;3. Quod Libet&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Other than playing music, Quod Libet has a simple interface that only shows what you want to see. It has a clean interface, yet able to display the required information all in one place. At any point of time, you can choose from the ‘View’ option to get it to show either your playlist, album list, filesystem or internet radio.&lt;br /&gt;&lt;br /&gt;It is also integrated with Ex falso, a program that allows you to add, edit and organize your MP3 metadata, to help you better manage your MP3’s. Quod Libet is not as feature-rich as Amarok or Banshee, but if you are looking for a music player where you can organize the music your way, then Quod Libet is the one for you.&lt;br /&gt;&lt;br /&gt;4. Songbird&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Songbird is a music player and a web browser. It is also a web media stream player. I hope I didn’t get you confused, but that is really what Songbird is. Built with codes from Firefox and VLC, Songbird is a desktop music player with web browsing capabilities. Like Firefox, it supports tabbed browsing and add-ons. When you chance upon any sites with media content, it will automatically list the media files in a separate pane for easy download and/or streaming.&lt;br /&gt;&lt;br /&gt;It is also compatible with most, or all of VLC’s features, which makes it a versatile audio/video player that can play almost every file format you throw at it.&lt;br /&gt;&lt;br /&gt;Overall, its web browsing capabilities and its abilities to play a wide range of file formats easily makes it one of the best, if not the best media player around.&lt;br /&gt;&lt;br /&gt;5. Decibel Audio Player&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When compared to powerhouses such as Amarok, Decibel Audio Player is really a decimal of it. The basic install of Decibel does not come with anything. Yes, you heard me right, I really mean anything. It doesn’t support any visualization, album artwork, radio streaming, podcast or anything else. It does in fact do only one thing: play music. It is very useful if you just want to play your music and not be bothered or distracted by any other miscellaneous stuff.&lt;br /&gt;&lt;br /&gt;Do you have any other favourite music players for Linux not mentioned here? Drop the link to them in the comments and tell us why you like them!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2482669050683633099-3986468526170235169?l=heylinux.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://heylinux.blogspot.com/2008/08/5-great-alternative-linux-music-players.html</link><author>noreply@blogger.com (onecoolworld)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item></channel></rss>