<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1503340550471543545</id><updated>2012-02-09T15:19:57.197-08:00</updated><category term='email'/><category term='system'/><category term='antispam'/><category term='software'/><category term='php'/><category term='programming'/><category term='humor'/><title type='text'>bitbang</title><subtitle type='html'>We love software</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default?start-index=101&amp;max-results=100'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>106</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-3078702698293080008</id><published>2012-02-09T15:17:00.000-08:00</published><updated>2012-02-09T15:17:44.429-08:00</updated><title type='text'>Linux undistro concept</title><content type='html'>Here's the deal: &lt;b&gt;you install a linux distribution, then you create a script that throws away all the fat.&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Optionally the scripts ask the user what he/she needs and then installs just what is needed like, say Transmission, Pidgin or Inkscape.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Recently, I found that &lt;a href="http://lubuntu.net/"&gt;Lubuntu&lt;/a&gt; is the best thing that could happen: slim and easy to throw away even more stuff. Puppy Linux, Tiny Core, Slitaz, etc., are nice, but not really practical in a professional context.&lt;br /&gt;&lt;br /&gt;After many years trying to reach a usable thin and customized Linux, finally I got the perfect system, thanks to Lubuntu !!!&lt;br /&gt;&lt;br /&gt;Now my computers are fast, clean, simple, logical, intuitive, nice.&lt;br /&gt;&lt;br /&gt;I use Synaptics for choosing packages to remove, Bleachbit for cleaning all unnecessary files, remastersys to create a new thin distro and Xfburn to burn the ISO image on CD or DVD.&lt;br /&gt;&lt;br /&gt;Some essential commands for cleanup:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;sudo apt-get remove --purge $(deborphan)&lt;/b&gt;&lt;br /&gt;&lt;b&gt;sudo apt-get autoclean&lt;/b&gt;&lt;br /&gt;&lt;b&gt;sudo apt-get clean&lt;/b&gt;&lt;br /&gt;&lt;b&gt;sudo apt-get autoremove&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;"Undistros" are great, undistros are the way to get the perfect, customized operationg system.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-3078702698293080008?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/3078702698293080008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=3078702698293080008' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/3078702698293080008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/3078702698293080008'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2012/02/linux-undistro-concept.html' title='Linux undistro concept'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-6874626739056269209</id><published>2012-01-19T06:42:00.000-08:00</published><updated>2012-01-29T13:31:58.243-08:00</updated><title type='text'>Misconceptions and uncommon sense: interface anti-patterns</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-IZ_Qlo1w_dk/TxgmwfGLsRI/AAAAAAAAAfM/gysVXYXWK_Q/s1600/Screenshot3.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="283" src="http://2.bp.blogspot.com/-IZ_Qlo1w_dk/TxgmwfGLsRI/AAAAAAAAAfM/gysVXYXWK_Q/s320/Screenshot3.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Some unrelated occurences make me feel like Malcolm Gladwell...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. A multiuser system in a personal computer?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I use Linux. One of the most annoying features for end users is to enter their password &lt;u&gt;dozens of times&lt;/u&gt; during a single day. &lt;br /&gt;&lt;br /&gt;Why?&lt;br /&gt;&lt;br /&gt;I know It's configurable - I can disable passwords in Fedora and Ubuntu, but it's the default behavior and I like to see things on it's causes.&lt;br /&gt;&lt;br /&gt;Maybe it's a strong misconception in the industry and technical communities: a personal computer is a personal computer, a client, not a server. Systems complexity is creeping up. Users don't care about passwords and that's the way it should be.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Invisible dialog boxes&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A Windows dialog... let's call it "zone" - appears at the bottom of the screen (translating): "Do you wish to execute or save Thunderbird Setup 9.0.1.exe(16,2 MB) of mozilla.mirror.ac.za?"&lt;br /&gt;&lt;br /&gt;Problem: many, many users cannot see that, they say nothing happens. Over the "electric telephone" I reply: "Look at the bottom of the screen... there's a "zone" with a "sort of a button" that says "Execute". Click that".&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. "Programs" or "Applications"?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In Portugal everybody, even those who never touched a keyboard, were using the expression "computer program" or "program". Until Microsoft came along...&lt;br /&gt;&lt;br /&gt;In the portuguese versions of Windows, programs were renamed "Applications". Now in Windows 7, applications are called "Programs" again.&lt;br /&gt;&lt;br /&gt;How can we make ourselves clear? We can't. Communication is hard between technicians and the end user. Long established (good) culture was messed up.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. Dialog barriers and visual unusability&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Interface undesign...&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;While I'm writing these lines, I'm using Kmess to chat with two colleagues - we're configuring an IMAP server and testing Thunderbird. We'll make a youtube video to help customers download and install Thunderbird. &lt;br /&gt;&lt;br /&gt;I'm having some dificulty in seeing to which of them I'm texting.&lt;br /&gt;&lt;br /&gt;Kmess tabs use the same green icon and tab font color for both activated and unfocused tabs. Backgound color is different, but not enough.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Where's the "button"?&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Back to Windows... I uninstall Thunderbird and try to follow the way a end user works. I go to Control Panel, Add/remove "programs", but... man, where's the uninstall button? There's no button!&lt;br /&gt;&lt;br /&gt;I take 12 seconds to find that there's a word "Uninstall" above column names.&lt;br /&gt;&lt;br /&gt;Now I hover the mouse above the label "uninstall"... Oh that's nice! This is a hidden button! Great! I've found the button.&lt;br /&gt;&lt;br /&gt;I did this over and over again and I still cannot intuitively see there's a button.&amp;nbsp;I'm not a pc newbie. I use computers since 1987. Windows XP, I miss you! I hope that &lt;a href="http://www.reactos.org/en/index.html"&gt;ReactOS&lt;/a&gt; will reach mainstream.&lt;br /&gt;&lt;br /&gt;A few days ago, Google switched gmail to the new interface. My mother was clueless about where most of the funcionality went. I had to explain her again how email works like she never used a computer.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Unnecessary alerts...&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Sometimes my attention is directed to the top of the screen... I found that Blogger needs my attention each time it saves a draft, that is each 10 seconds.&lt;br /&gt;&lt;br /&gt;I remember that every time I boot my Linux PC it pops up a dialog with a progress bar saying "Starting Akonadi server"... Well, &amp;nbsp;I don't really know what is Akonadi, and chances are that I never will. All I know is that I wish Akonadi server never existed - it's nagging me every single day and now I'm just trying to uninstall it.&lt;br /&gt;&lt;br /&gt;Oh... I see that Adobe now wants to update Reader. Sometimes I don't have a single idea of what I'm really doing. There's too many stuff calling my attention. I wonder how much they've paid Microsoft to annoy users without a legal suit.&lt;br /&gt;&lt;br /&gt;These kind of problems are related to the massive amount of junk information that tries to reach our neurons every second. &lt;a href="http://www.informationdiet.com/about"&gt;Clay Johnson&lt;/a&gt; just released an interesting book called &lt;a href="http://www.informationdiet.com/"&gt;The Information Diet&lt;/a&gt;. He was recently on &lt;a href="http://twit.tv/people/leo-laporte"&gt;Leo Laporte&lt;/a&gt;'s &lt;a href="http://twit.tv/show/triangulation/38"&gt;Triangulation&lt;/a&gt; on &lt;a href="http://twit.tv/"&gt;Twit&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Scaring users&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Ubuntu and Fedora desktops are changing so fast that many users are affraid to do distribution upgrades. Recent KDE4 bad experiences (rolling out alpha stuff) wasn't enough. Ubuntu and Fedora guys had to do crap for themselves. That's why Apple's walled gardens are flourishing - they care about the user.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5. Conclusion&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I'm really tired. I see the same mistakes over and over again. I see big corporations cheating users in their back and crappy open source programmers wasting time.&lt;br /&gt;&lt;br /&gt;I see people that call themselves "inteface designers" and "web designers" that kill usability every day. As "novelty machines" we are attracted to experience, new stuff. But killing culture and intuitive advantages for the sake of being different should not be the decision. It's too expensive.&lt;br /&gt;&lt;br /&gt;I'm the first guy who likes to kill tradition. But let's replace tradition with something better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-6874626739056269209?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/6874626739056269209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=6874626739056269209' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6874626739056269209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6874626739056269209'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2012/01/misconceptions-and-uncommon-sense.html' title='Misconceptions and uncommon sense: interface anti-patterns'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-IZ_Qlo1w_dk/TxgmwfGLsRI/AAAAAAAAAfM/gysVXYXWK_Q/s72-c/Screenshot3.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-6656344226310644037</id><published>2011-11-30T15:22:00.001-08:00</published><updated>2011-12-04T21:52:32.239-08:00</updated><title type='text'>Can big banks control bitcoin?</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: 13px;"&gt;People say that Bitcoin isn't controllable by big banks and other financial institutions. Wrong.&lt;br /&gt;&lt;br /&gt;It's entirely possible for banks to stack bitcoin accounts and lend in exchange for interest, as people feel unsafe to keep bitcoins at home. &lt;br /&gt;&lt;br /&gt;In the past, they did it with gold and started printing gold certificates that became paper money, so why couldn't they do it with bitcoins? Lending policies and other financial instruments, government regulations and laws can control bitcoin.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.wired.com/magazine/2011/11/mf_bitcoin/all/1"&gt;This Wired article&lt;/a&gt; talks about the mistery of Satoshi Nakamoto, and the hype behind bitcoin. Meanwhile, my tiny bitcoin rig keeps going ;)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-6656344226310644037?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/6656344226310644037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=6656344226310644037' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6656344226310644037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6656344226310644037'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2011/11/can-big-banks-control-bitcoin.html' title='Can big banks control bitcoin?'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-6905348281726703198</id><published>2011-11-18T14:14:00.001-08:00</published><updated>2011-11-18T14:19:15.794-08:00</updated><title type='text'>CBS News buys diaspora.com domain??</title><content type='html'>According to the &lt;a href="http://web.archive.org/web/20101207043140/http://www.diaspora.com/"&gt;Wayback Machine&lt;/a&gt;, diaspora.com was property of a domain investor (or cybersquatter if you will) on April, 23th 2011. Now it leads to CBS News.&lt;br /&gt;&lt;br /&gt;Is traditional media so desperate that needs to do this kind of dodgy practices?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-6905348281726703198?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/6905348281726703198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=6905348281726703198' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6905348281726703198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6905348281726703198'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2011/11/cbs-news-buys-diasporacom-domain.html' title='CBS News buys diaspora.com domain??'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-1145779877007034967</id><published>2011-11-13T16:19:00.001-08:00</published><updated>2011-11-13T16:26:43.171-08:00</updated><title type='text'>Ilya Zhitomirskiy is dead</title><content type='html'>Ilya Zhitomirskiy, one of the &lt;a href="http://www.joindiaspora.com/"&gt;Diaspora&lt;/a&gt; founders, has passed away at 21 years old, presumably affected by overwork.&lt;br /&gt;&lt;br /&gt;His legacy, however, is massive. Diaspora is already the most promising privacy-friendly social network, a strong Facebook competitor.&lt;br /&gt;&lt;br /&gt;I've been using Diaspora for one week now, and it seems to me the most friendly and clean social network ever made. Things will never be the same. As Facebook tries to be everything, it was refreshing to see that a new, decentralized network is emerging that truly respects people.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-1145779877007034967?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/1145779877007034967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=1145779877007034967' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1145779877007034967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1145779877007034967'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2011/11/ilya-zhitomirskiy-is-dead.html' title='Ilya Zhitomirskiy is dead'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-3302589386277307238</id><published>2011-09-16T15:53:00.000-07:00</published><updated>2011-09-16T16:04:14.352-07:00</updated><title type='text'>Why microformats suck, use microdata</title><content type='html'>Sorry guys, microformats are a badly implemented good idea. They pollute the CSS class namespacing. Why are they piggybacking visual presentation CSS classes and ids? &lt;br /&gt;&lt;br /&gt;Why is that better than using a separate html attribute like &lt;b&gt;mf="vcard"&lt;/b&gt; ??&amp;nbsp;Do the creators of microformats know that HTML is extensible?&amp;nbsp;Does anyone really think that this is a clean way to do it?&lt;br /&gt;&lt;br /&gt;Fortunately, someone seems to be doing it right. &lt;a href="http://www.schema.org/docs/gs.html#microdata_how"&gt;Microdata&lt;/a&gt; is the way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-3302589386277307238?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/3302589386277307238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=3302589386277307238' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/3302589386277307238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/3302589386277307238'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2011/09/why-microformats-suck.html' title='Why microformats suck, use microdata'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-5559794296628020679</id><published>2011-09-11T17:47:00.000-07:00</published><updated>2011-09-11T17:47:57.489-07:00</updated><title type='text'>Fedora 15: shutdown instantly</title><content type='html'>For those who noticed the annoying default config that enforces people to &lt;b&gt;logout before power-off&lt;/b&gt;, there's a tweak:&lt;br /&gt;&lt;br /&gt;Just install &lt;b&gt;gnome-shell-extensions-alternative-status-menu&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Or press the ALT key while having the power-off/suspend options visible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-5559794296628020679?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/5559794296628020679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=5559794296628020679' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/5559794296628020679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/5559794296628020679'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2011/09/fedora-15-shutdown-instantly.html' title='Fedora 15: shutdown instantly'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-1323264418064604576</id><published>2011-08-24T18:35:00.000-07:00</published><updated>2011-08-24T18:35:03.360-07:00</updated><title type='text'>Richard Dawkins on computer programming</title><content type='html'>&lt;iframe width="480" height="295" src="http://www.youtube.com/embed/gQp1QaW_onk?fs=1" frameborder="0" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-1323264418064604576?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/1323264418064604576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=1323264418064604576' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1323264418064604576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1323264418064604576'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2011/08/richard-dawkins-on-computer-programming.html' title='Richard Dawkins on computer programming'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/gQp1QaW_onk/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-5866287697363273111</id><published>2011-08-24T18:31:00.001-07:00</published><updated>2011-08-24T18:31:18.650-07:00</updated><title type='text'></title><content type='html'>If debugging is the process of removing software bugs, then programming must be the process of putting them in. (Edsger Dijkstra)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-5866287697363273111?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/5866287697363273111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=5866287697363273111' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/5866287697363273111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/5866287697363273111'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2011/08/if-debugging-is-process-of-removing.html' title=''/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-6237265932825545716</id><published>2011-07-27T15:16:00.000-07:00</published><updated>2011-07-27T15:16:09.376-07:00</updated><title type='text'>A new email protocol based on HTTPS - Towards a decentralized Facebook</title><content type='html'>While Facebook is good for social purposes, companies need a simple messaging/collaboration system. The problem is: email is not hype anymore and it's a huge mess. And Facebook is not the answer, as it messes with personal and professional life.&lt;br /&gt;&lt;br /&gt;The world is crying for a new, clean, simple "email" protocol far away from this huge broken legacy patchwork of technologies. Some attempts include Diaspora. But Diaspora is taking too long.&lt;br /&gt;&lt;br /&gt;Email 2.0 is not really email. It's a distributed conversation/messaging system totally secure, based on real personal relationships, not spam. A distributed system not being run by a single company that is controlling every aspect of the communication and every aspect of the user interface.&lt;br /&gt;&lt;br /&gt;Webmasters will feel confortable if the solution is a simple web app with almost zero config. The distributed messaging of the future is now in their hands. Leveraging the knowledge of millions of webmasters seems to be the solution: using web technologies to create a decentralized Facebook.&lt;br /&gt;&lt;br /&gt;Our biggest enemy is a bad design and lack of contract that creates unnecessary complexity. While defining what should be done, we also must define what should'nt be done.&lt;br /&gt;&lt;br /&gt;A system that unifies chat, forum, email, and social interaction/collaboration under a simple communication method has been an attempt in the last few years, but reality is: Facebook is centralizing communication and creeping up the complexity. Other alternatives are also&amp;nbsp;just&amp;nbsp;not simple enough.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Some incomplete random thoughts follow to my best knowledge.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;Any help appreciated.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;I'm not a network or distributed systems expert, so please comment &amp;nbsp;:)&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;- &lt;b&gt;Single URL&lt;/b&gt;:&amp;nbsp;Every web server is almost automatically an https message server. All communication runs under HTTPS GET/POST to a standardized web server URL with optional paramenters, like https://www.recipientdomain.com/messaging/?op=send&lt;br /&gt;&lt;br /&gt;- &lt;b&gt;Access&lt;/b&gt;: Users login via the same URL without parameters. No other script urls execute code other than declaring classes, since the index file follows the &lt;a href="http://en.wikipedia.org/wiki/Front_Controller_pattern"&gt;Front Controller Pattern&lt;/a&gt;, dispatching all requests. This makes it possible to have a standardized url while helping security, allowing different script languages to implement the protocol and server configurations to exist as well as avoiding configuration.&lt;br /&gt;&lt;br /&gt;- &lt;b&gt;Protocol&lt;/b&gt;: Messages will&amp;nbsp;not be sent/managed/received via XAML, IMAP, POP3, SMTP, etc. just HTTPS with standard GET/POST and JSON.&amp;nbsp;No unprotected HTTP is allowed as the messaging system discards any HTTP request.&lt;br /&gt;&lt;br /&gt;- &lt;b&gt;Request/Response Model&lt;/b&gt;: Sender machines send an HTTPS POST signaling that they've got a message available. This post includes a simple JSON metadata with a long string key associated with the user at the sender machine. Recipient server will use later the same key to access the message in the sender user@domain, either immediately after or in other time in the future. Recipient server will immediately discard this metadata if the recipient user@domain is not present in the personal contact list.&amp;nbsp;The web app must not show failed message sends, as this is considered as setting spam as a feature.&lt;br /&gt;&lt;br /&gt;- &lt;b&gt;User contact list&lt;/b&gt;. Every user has a list of users@domains that are allowed to send, like Facebook friends.&amp;nbsp;The first HTTPS POST will be discarded if the sender is not in the whitelist table.&amp;nbsp;Users in the list are organized like in Facebook or Google+. This system has no relation with Google or Facebook services but may import contacts.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;- &lt;b&gt;Manual contact list management&lt;/b&gt;. As this resource is universal and forged requests may be crafted, no method exists to request inclusion in the user's contact list. Users exchange addresses by other means of personal contact to ensure legitimacy, and require manual inclusion to be whitelisted. A user name is the the email address and software implementations sould never allow automatic or semi-automatic list inclusion. As said above, failed attempts must never be shown to the user, in order to render them useless.&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;-&amp;nbsp;&lt;b&gt;Data availability:&amp;nbsp;&lt;/b&gt;The old email system does not leverage the fact that the same message is in the sender's sent box and in the user's inbox for data recovery purposes.&amp;nbsp;A message is cached in the recipient server, while being available at the sender. Metadata requests allow the recipient server access the message in the sender site also without storing it in the recipient server. The same applies in the case of sender failure. The sender system may request back metadata of sent messages for reconstructing lost messages.&amp;nbsp;Caching the message makes the whole system more error-prone while a cache will speedup retrieval and avoid multiple network connections. Data must not be cached at the user personal machines, as this makes the model unnecessarily complex, although user may download individual messages and file attachments.&lt;br /&gt;&lt;br /&gt;- &lt;b&gt;Messaging server role&lt;/b&gt;. An HTTPS message server basically: keeps outbound and inbound (cached) messages, keeps metadata of outbound and inbound (cached) messages, and keeps a HTML/CSS/Javascript-based user interface (messaging web site) at the same server directory for message send/receiving and contact list management (our homebrew Facebook internet node). All the code is kept under the same web server directory and, as said above, all requests go to the same URI with different parameter keys and values. All the data is kept in a directory with no public access, either in a subdirectory of the web server root directory ou somewhere else. The most secure and no-configuration method should be the one to implement.&lt;br /&gt;&lt;br /&gt;- &lt;b&gt;Message&lt;/b&gt;: A message must be a stripped-down version of HTML, like allowing bold/italic, lists and a few more tags only. The conversation model of messaging seems to exclude an odf-like file structure in favor of a simpler text format that allows attachments.&lt;br /&gt;&lt;br /&gt;- &lt;b&gt;Profiles&lt;/b&gt;: Each message has a permission profile: individual or group. A user creates ad-hoc groups for collaboration. In this case of allowed users, the servers envolved in the group will notify the participants that they were included in the group. A user confirms if s/he alows to be included.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-6237265932825545716?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/6237265932825545716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=6237265932825545716' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6237265932825545716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6237265932825545716'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2011/07/new-email-protocol-based-on-https.html' title='A new email protocol based on HTTPS - Towards a decentralized Facebook'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-5993315698516313180</id><published>2011-05-28T11:04:00.000-07:00</published><updated>2012-01-29T13:39:09.351-08:00</updated><title type='text'>The best programming language to learn</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-FeVoWZp4nYY/TeE5cdxjLwI/AAAAAAAAAZs/7jLKKmfMjWg/s1600/Untitled.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-FeVoWZp4nYY/TeE5cdxjLwI/AAAAAAAAAZs/7jLKKmfMjWg/s1600/Untitled.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;If you decided to study computer languages, you've chosen one of the most interesting subjects in the world. The problem is what language is the best.&lt;br /&gt;&lt;br /&gt;There's no real answer, but one thing is for sure:&amp;nbsp;You'd want to learn several different languages to really master, by comparison, how a language works and how terminology is applied to each one of them.&lt;br /&gt;&lt;br /&gt;If you need an "enterprisey" language, forget Java -&amp;nbsp;&lt;a href="http://www.scala-lang.org/node/197"&gt;Scala&lt;/a&gt; is a better choice and it's 100% compatible with Java. But if you think of Scala as something needless complex, don't miss out&amp;nbsp;&lt;a href="http://fantom.org/doc/docIntro/WhyFantom.html"&gt;Fantom&lt;/a&gt;, an amazingly consistent, promising new language that replaces Java and let's you learn how to do things right. You'll find that one of the most amazing things in Fantom is a clean, comprehensive documentation.&lt;br /&gt;&lt;br /&gt;On a conceptual basis, try &lt;a href="http://www.pharo-project.org/home"&gt;Pharo&lt;/a&gt;, &lt;a href="http://selflanguage.org/"&gt;Self&lt;/a&gt; and &lt;a href="http://iolanguage.com/"&gt;io&lt;/a&gt;, or even the beautiful &lt;a href="http://smalltalk.gnu.org/"&gt;GNU Smalltalk&lt;/a&gt; with &lt;a href="http://canol.wordpress.com/category/programming/"&gt;Canol Gökel's excelent book&lt;/a&gt;&amp;nbsp;as some the best philosophical sources. These languages are not mainstream but their concepts are so ahead of time that no other language will be so advanced like these in the coming years. We cannot see a single better IDE than Pharo's, a better visionary simplicity as in Self or such a frugal power as in io.&lt;br /&gt;&lt;br /&gt;Before your final decision, also take a look at &lt;a href="http://www.lua.org/about.html"&gt;Lua&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.erlang.org/"&gt;Erlang&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Be careful with PHP, Python and Ruby: while very useful and popular languages, they've got their own caveats. PHP is regarded as an architectural mess, Python is seen as not quite good for enterprise arena and Ruby is beautiful but slow.&lt;br /&gt;&lt;br /&gt;But if you really want to use PHP, then study &lt;a href="http://developers.facebook.com/opensource/"&gt;Facebook open source platform tools&lt;/a&gt;&amp;nbsp;- these guys did it.&lt;br /&gt;&lt;br /&gt;Programming for the web? Javascript is your choice because it's taking over the web, including server-side web with &lt;a href="http://node.js/"&gt;node.js&lt;/a&gt;. But it's slow, has some quirks and it's regular expression engine is not so powerful.&lt;br /&gt;&lt;br /&gt;Anyway, studying a computer language is a several year commitment, so a very important idea is to read a lot about these candidates before sticking to a final choice.&lt;br /&gt;&lt;br /&gt;I hope this post can help you in finding your way. &lt;br /&gt;&lt;br /&gt;Take care!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-5993315698516313180?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/5993315698516313180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=5993315698516313180' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/5993315698516313180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/5993315698516313180'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2011/05/best-programming-language-to-learn.html' title='The best programming language to learn'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-FeVoWZp4nYY/TeE5cdxjLwI/AAAAAAAAAZs/7jLKKmfMjWg/s72-c/Untitled.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-410887369786143856</id><published>2011-02-10T15:10:00.000-08:00</published><updated>2011-02-10T15:15:39.265-08:00</updated><title type='text'>Exposing vertical text spam</title><content type='html'>Vertically formated text spam has started to invade my inbox. This is a first attempt to format the text for content analysis. &lt;br /&gt;&lt;br /&gt;Normal horizontal text can also be analysed for words ("pill"), marketing hype ("visit us") and obscurity ("h t t p : / /") for a score system like spamassassin uses.&lt;br /&gt;&lt;br /&gt;&lt;code style="font-family:courier"&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;                                                                                                                                                                                &lt;br /&gt;&lt;span style="color: #0000bb;"&gt;&lt;br /&gt;$s&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;'&lt;br /&gt;V&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;C&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;L&lt;br /&gt;I&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;I&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;E&lt;br /&gt;G&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;V&lt;br /&gt;R&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;L&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;I&lt;br /&gt;A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;I&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;T&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;S&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;R&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;A&lt;br /&gt;&lt;br /&gt;$1.29/pill&amp;nbsp;&amp;nbsp;&amp;nbsp;$1.58/pill&amp;nbsp;&amp;nbsp;&amp;nbsp;$2.81/pill&lt;br /&gt;&lt;br /&gt;+&amp;nbsp;many&amp;nbsp;other&amp;nbsp;positions!&lt;br /&gt;&lt;br /&gt;Visit&amp;nbsp;Us&amp;nbsp;at:&lt;br /&gt;h&amp;nbsp;t&amp;nbsp;t&amp;nbsp;p&amp;nbsp;:&amp;nbsp;/&amp;nbsp;/&amp;nbsp;d&amp;nbsp;r&amp;nbsp;g&amp;nbsp;m&amp;nbsp;e&amp;nbsp;d&amp;nbsp;.&amp;nbsp;c&amp;nbsp;o&amp;nbsp;m&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[delete&amp;nbsp;spaces&amp;nbsp;before&amp;nbsp;visiting]&lt;br /&gt;'&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$a&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;explode&lt;/span&gt;&lt;span style="color: #007700;"&gt;(&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"\n"&lt;/span&gt;&lt;span style="color: #007700;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$s&lt;/span&gt;&lt;span style="color: #007700;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #ff8000;"&gt;//&amp;nbsp;Detect&amp;nbsp;biggest&amp;nbsp;line:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000bb;"&gt;$cols&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;0&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&lt;br /&gt;foreach&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$a&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;as&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$iRow&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$sRow&lt;/span&gt;&lt;span style="color: #007700;"&gt;)&amp;nbsp;if&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;strlen&lt;/span&gt;&lt;span style="color: #007700;"&gt;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$sRow&lt;/span&gt;&lt;span style="color: #007700;"&gt;)&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$cols&lt;/span&gt;&lt;span style="color: #007700;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$cols&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;strlen&lt;/span&gt;&lt;span style="color: #007700;"&gt;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$sRow&lt;/span&gt;&lt;span style="color: #007700;"&gt;);&lt;br /&gt;foreach&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$a&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;as&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$iRow&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$sRow&lt;/span&gt;&lt;span style="color: #007700;"&gt;)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;while(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;strlen&lt;/span&gt;&lt;span style="color: #007700;"&gt;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$a&lt;/span&gt;&lt;span style="color: #007700;"&gt;[&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$iRow&lt;/span&gt;&lt;span style="color: #007700;"&gt;])&amp;nbsp;&amp;lt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$cols&lt;/span&gt;&lt;span style="color: #007700;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$a&lt;/span&gt;&lt;span style="color: #007700;"&gt;[&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$iRow&lt;/span&gt;&lt;span style="color: #007700;"&gt;]&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$a&lt;/span&gt;&lt;span style="color: #007700;"&gt;[&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$iRow&lt;/span&gt;&lt;span style="color: #007700;"&gt;]&amp;nbsp;.&amp;nbsp;&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;'&amp;nbsp;'&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$rows&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;count&lt;/span&gt;&lt;span style="color: #007700;"&gt;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$a&lt;/span&gt;&lt;span style="color: #007700;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #ff8000;"&gt;//&amp;nbsp;Rotate&amp;nbsp;CCW&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000bb;"&gt;$b&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;nbsp;array();&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff8000;"&gt;//&amp;nbsp;rotated&amp;nbsp;version&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #007700;"&gt;foreach&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$a&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;as&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$iRow&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$sRow&lt;/span&gt;&lt;span style="color: #007700;"&gt;)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$f&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;strlen&lt;/span&gt;&lt;span style="color: #007700;"&gt;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$sRow&lt;/span&gt;&lt;span style="color: #007700;"&gt;)&amp;nbsp;-&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;1&lt;/span&gt;&lt;span style="color: #007700;"&gt;);&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$f&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;&amp;gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;0&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$f&lt;/span&gt;&lt;span style="color: #007700;"&gt;--)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$b&lt;/span&gt;&lt;span style="color: #007700;"&gt;[&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$cols&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$f&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;1&lt;/span&gt;&lt;span style="color: #007700;"&gt;][&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$iRow&lt;/span&gt;&lt;span style="color: #007700;"&gt;]&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$sRow&lt;/span&gt;&lt;span style="color: #007700;"&gt;[&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$f&lt;/span&gt;&lt;span style="color: #007700;"&gt;];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #ff8000;"&gt;//&amp;nbsp;Rebuild&amp;nbsp;string&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$ss&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;''&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&lt;br /&gt;foreach&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$b&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;as&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$row&lt;/span&gt;&lt;span style="color: #007700;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$ss&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;.=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;'&amp;nbsp;'&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;implode&lt;/span&gt;&lt;span style="color: #007700;"&gt;(&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;""&lt;/span&gt;&lt;span style="color: #007700;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$row&lt;/span&gt;&lt;span style="color: #007700;"&gt;)&amp;nbsp;.&amp;nbsp;&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"\n"&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$ss&amp;nbsp;&lt;/span&gt;&lt;span style="color: #007700;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;strtolower&lt;/span&gt;&lt;span style="color: #007700;"&gt;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$ss&lt;/span&gt;&lt;span style="color: #007700;"&gt;);&lt;br /&gt;&lt;br /&gt;print&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$ss&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-410887369786143856?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/410887369786143856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=410887369786143856' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/410887369786143856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/410887369786143856'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2011/02/exposing-vertical-text-spam.html' title='Exposing vertical text spam'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-6425068779229972231</id><published>2010-09-18T14:24:00.000-07:00</published><updated>2010-09-18T14:24:34.662-07:00</updated><title type='text'>What's happening with web advertising?</title><content type='html'>Since a few weeks, I've noticed that, after seeing a web site, lots of advertising of that same company appears in front of me.&lt;br /&gt;&lt;br /&gt;I don't know if that's a good strategy, but in my case, it isn't and it's extremely annoying. Now I'm installing software to block advertising just because some product that I don't want keeps haunting me all the time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-6425068779229972231?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/6425068779229972231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=6425068779229972231' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6425068779229972231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6425068779229972231'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/09/whats-happening-with-web-advertising.html' title='What&apos;s happening with web advertising?'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-1500279132946630486</id><published>2010-09-18T14:18:00.000-07:00</published><updated>2010-09-18T14:18:33.772-07:00</updated><title type='text'>What about a social plug-in for old-fashioned web sites?</title><content type='html'>It worries me that the free web may come to an end. People think that Facebook is the world (believe me, it's just your friends and friends of friends while the whole web is much more representative of the world).&lt;br /&gt;&lt;br /&gt;That's because webmasters are basically sleeping and updating their web sites with Facebook "like" buttons.&lt;br /&gt;&lt;br /&gt;Quirky old web CMS systems are just another obstacle.&lt;br /&gt;&lt;br /&gt;What we need is to enable traditional web sites with a simple protocol to create a distributed social network. That is, to show real people behind each web site. How to do it, I still don't know. The thing is, that media is not helping at all - they are just repeaters of the main trend interests.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-1500279132946630486?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/1500279132946630486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=1500279132946630486' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1500279132946630486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1500279132946630486'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/09/what-about-social-plug-in-for-old.html' title='What about a social plug-in for old-fashioned web sites?'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-876362424299392371</id><published>2010-09-04T22:09:00.000-07:00</published><updated>2010-09-04T22:10:53.951-07:00</updated><title type='text'>Method for fighting spam, virus and scams: a contextual approach</title><content type='html'>I know there are nice projects like &lt;b&gt;spamassassin&lt;/b&gt;, &lt;b&gt;clamav&lt;/b&gt;, &lt;b&gt;spamcop&lt;/b&gt;, &lt;b&gt;spamhaus&lt;/b&gt;, etc., and good anti-this and that like &lt;b&gt;Kaspersky&lt;/b&gt;, and some good bayesian tools like &lt;b&gt;bogofilter&lt;/b&gt; and others. &lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;I know that people should not reinvent the wheel. But in this case I think the wheel is sort of square.&lt;br /&gt;&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;Having corporate customers who rely heavily on email services, I find myself thinking about how to deal with junk mail facing such complex methods that hardly resolve the consequences and sit on my servers making my life less enjoyable.&lt;br /&gt;&lt;br /&gt;The problem gets worse when I may break systems by updating a huge amount of packages, perl stuff, and the linux kernel just to enable bogofilter or others.&lt;br /&gt;&lt;br /&gt;Spam is a social problem, so I'm also annoyed by solutions like &lt;b&gt;Plesk&lt;/b&gt; that don't allow to use spamassassin by default and ask for an additional purchase.&lt;br /&gt;&lt;br /&gt;I'm also annoyed by &lt;b&gt;Cpanel/WHM&lt;/b&gt;, considered the "industry standard" for web server management, having the most quirky patchworked nonsensical user interface and hillarious portuguese translation I've ever seen.&lt;br /&gt;&lt;br /&gt;Ideally, the few guys who do large-scale spam, like the russians that invade my email account dozens of times a day, should be in jail. But &lt;b&gt;politicians&lt;/b&gt; and &lt;b&gt;lawmakers&lt;/b&gt; are too void to understand what's going on. Therefore, I'm also annoyed by&amp;nbsp;&lt;b&gt;&lt;/b&gt;&lt;i&gt;illusive formalistic geographically-limited government-backed attempts&lt;/i&gt; to block spam.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Context is the answer&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;So I got my hands dirty and started to study new ways to deal with junk mail. I found that &lt;b&gt;context&lt;/b&gt; is the answer because I know the small universe of my customers and their needs. &lt;br /&gt;&lt;br /&gt;You see, I'm portuguese and we speak portuguese here. More than 90% of  spam messages are crafted in english, exception made to a few crazy  chinese that think we understand logograms and some portuguese amateurs  who send funny messages. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Context 1&lt;/b&gt;: My customers will never expect small executable programs sent by email or downloaded through the web;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Context 2:&lt;/b&gt; I don't have customers dealing with pharmaceutical, watches or sex products;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Context 3&lt;/b&gt;: My customers are all portuguese, some of them dealing with foregin suppliers.&lt;br /&gt;&lt;i&gt;&lt;b&gt;&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;Instead of relying on domain/IP blocklists or message source, I care about what the spammer wants the user to do and the  specific context where the junk filter is operating.&lt;/b&gt;&lt;/i&gt; &lt;br /&gt;&lt;br /&gt;I'll be testing extensively to avoid curve-fitting deception, although I think it's better to have a human part of the system doing some adjustments once in a few months because of emerging forms of junk (like PDF or Excel attachments).&lt;br /&gt;&lt;br /&gt;One thing is for sure: It won't use a black-box learning algorithm. I  like to be in control and understand what's going on, although I have  to mention that &lt;b&gt;bogofilter&lt;/b&gt; is doing a wonderful job in my  Evolution MUA.&lt;br /&gt;&amp;nbsp; &lt;br /&gt;My script will:&lt;br /&gt;&lt;br /&gt;1 - Decode mime messages&lt;br /&gt;&lt;br /&gt;2 - Open message URI's (through HTML and Javascript) and do content analysis  of the destination web site, checking also for attempts to transfer executables. Well-known sites like Facebook are ignored.&lt;br /&gt;&lt;br /&gt;3 - Do text content analysis of message subject, body and mime text parts&lt;br /&gt;&lt;br /&gt;4 - Detect executable attachments&lt;br /&gt;&lt;br /&gt;5 - Open zip and rar files and search for executables&lt;br /&gt;&lt;br /&gt;6 - Detect javascript code in message &lt;br /&gt;&lt;br /&gt;I don't rely on my customers to sort messages or to report spam to a learning system - because that's my job. &lt;br /&gt;&lt;br /&gt;So my junk filter will be based in the following ideas:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;* 1 :&lt;/b&gt; &lt;b&gt;Whitelisted domains:&lt;/b&gt; If the sender &lt;u&gt;&lt;i&gt;domain&lt;/i&gt;&lt;/u&gt; is found in some email  address in the customer contact lists, message is always delivered.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;* 2 :&lt;/b&gt; &lt;b&gt;Whitelist text patterns:&lt;/b&gt; Messages with certain text patterns are&amp;nbsp; originated by my web CMS, so they are always delivered.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;* 3 :&lt;/b&gt; &lt;b&gt;English is suspect:&lt;/b&gt; English messages are more likely junk. Still, regular english messages should be delivered without problem - they just score higher.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;* 4 :&lt;/b&gt; &lt;b&gt;Portuguese is good&lt;/b&gt;: Messages written in portuguese get a negative score  depending on each text pattern. Still, portuguese spam is detected through content analysis getting a positive score.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;* 5 :&lt;/b&gt; &lt;b&gt;Small executables are forbidden&lt;/b&gt;: Messages smaller than 500KB having an executable attachment (also inside a compressed archive - zip or rar) are simply discarded.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;* 6 :&lt;/b&gt; &lt;b&gt;Web link leading to executable file is forbidden&lt;/b&gt;: Messages with URI's or javascript that lead to executable files in some web site are also discarded.&lt;br /&gt;&lt;br /&gt;The downside is that we must open the spammer's web site, signaling  our  IP saying that we've "received" the message and possibly confirming  that our email is alive and well.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;* 7 :&lt;/b&gt; &lt;b&gt;Javascript is suspicious&lt;/b&gt;: Messages with javascript code (like "document.write") are scored highly.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;* 8 : Content analysis&lt;/b&gt;: Messages having certain text patterns are scored for each pattern (english and portuguese). You know, /[vw]+[iy!|]+[a]+[g]+[r]+[a]+/i gets the highest score...&lt;br /&gt;&lt;br /&gt;While I see that detecting simple text patterns seems to be old school and the least efficient, today my spamassassin let plain "viagra" messages get into my box while filtering others with "V|AGRA" in the subject line. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;* 9: Destination web pages are analysed&lt;/b&gt;:&lt;b&gt; &lt;/b&gt;If a message links to a web site, content analysis will be made in that web page.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;On the bright side:&lt;br /&gt;&lt;br /&gt;- It takes few system resources;&lt;br /&gt;&lt;br /&gt;- Random text used to confuse bayesian filters does not apply here;&lt;br /&gt;&lt;br /&gt;- It may be implemented in some popular scripting language in a single file;&lt;br /&gt;&lt;br /&gt;- It's easy to extend, change or debug.&lt;br /&gt;&lt;br /&gt;Relying on &lt;b&gt;specific context&lt;/b&gt;, this method becomes too simple to have spamassassin, clamav and others trying to do the same job.&lt;br /&gt;&lt;br /&gt;Now it's time to do some programming.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Do you have some good way to prevent spam using a simple script? I'll be reading your comments.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-876362424299392371?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/876362424299392371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=876362424299392371' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/876362424299392371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/876362424299392371'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/09/method-for-fighting-spam-virus-and.html' title='Method for fighting spam, virus and scams: a contextual approach'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-1123274373159073582</id><published>2010-08-14T20:34:00.000-07:00</published><updated>2010-08-14T20:34:36.259-07:00</updated><title type='text'>Very small Linux distros</title><content type='html'>I'm exploring two small linux distros: &lt;a href="http://tinycorelinux.com/"&gt;Tiny Core&lt;/a&gt; and Slitaz. I've been using Tiny Core for some time with pratical results. &lt;br /&gt;&lt;br /&gt;Now I'm taking a look at &lt;a href="http://www.slitaz.org/en/"&gt;Slitaz&lt;/a&gt; and it looks also promising.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-1123274373159073582?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/1123274373159073582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=1123274373159073582' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1123274373159073582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1123274373159073582'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/08/very-small-linux-distros.html' title='Very small Linux distros'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-4388700418851936623</id><published>2010-08-13T07:27:00.000-07:00</published><updated>2010-08-13T07:27:51.987-07:00</updated><title type='text'>Email is broken. And no one cares.</title><content type='html'>Having to deal with WHM/Cpanel servers, I'm astonished by the whole mess the old email system is. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;No one really cares to create a new email protocol, maybe web-based, almost with zero configuration, that  would provide anti-spam and anti-virus by design, not patchwork.&lt;/b&gt;&lt;br /&gt;- Email clients don't integrate well with Spamassassin, i. e., no spam button to report spam...&lt;br /&gt;&lt;br /&gt;- Spam is king and is becoming worse.&lt;br /&gt;&lt;br /&gt;- Configuring an email system is way too complicated for today's fast-paced agenda and expertise level of most webmasters.&lt;br /&gt;&lt;br /&gt;- People use silly/cranky/old (web)mail clients that just complicate things even more.&lt;br /&gt;&lt;br /&gt;- EMail is not social, not instant, etc.&lt;br /&gt;&lt;br /&gt;- Google Wave is (was...) too complicated.&lt;br /&gt;&lt;br /&gt;So, I'm thinking about a shiny new, simple, effective solution while the rest of the world just complaints and tells me that legacy systems are very important.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-4388700418851936623?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/4388700418851936623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=4388700418851936623' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/4388700418851936623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/4388700418851936623'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/08/email-is-broken-and-no-one-cares.html' title='Email is broken. And no one cares.'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-7228798576071260520</id><published>2010-06-18T06:47:00.000-07:00</published><updated>2010-06-18T06:47:28.547-07:00</updated><title type='text'>Cuis, a fast simple and powerfull Smalltalk environment</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px;"&gt;Cuis is a free Smalltalk-80 environment derived from Squeak (&lt;a href="http://www.squeak.org/" style="color: #6633ff; text-decoration: none;"&gt;www.squeak.org&lt;/a&gt;). Main project web is at&amp;nbsp;&lt;a href="http://www.jvuletich.org/Cuis/Index.html" style="color: #6633ff; text-decoration: none;"&gt;www.jvuletich.org/Cuis/Index.html&lt;/a&gt;&lt;span style="color: #6633ff;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;. Its main features are being simple and powerful. It is also completely portable, fast and efficient, meaning it can be a great tool for running smart phones and pdas, even on a CEO's&amp;nbsp;&lt;a href="http://www.o2.co.uk/" style="color: #6633ff; text-decoration: none;"&gt;business phone&lt;/a&gt;.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-7228798576071260520?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/7228798576071260520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=7228798576071260520' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/7228798576071260520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/7228798576071260520'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/06/cuis-fast-simple-and-powerfull.html' title='Cuis, a fast simple and powerfull Smalltalk environment'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-1837773907014257462</id><published>2010-05-22T19:44:00.000-07:00</published><updated>2010-05-22T19:44:11.998-07:00</updated><title type='text'>The smallest Linux Computer in the World</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.picotux.com/pt112x.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://www.picotux.com/pt112x.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;"&gt;The picotux 100 is the world's smallest Linux computer, only slightly larger (35mm×19mm×19mm) than an RJ45 connector. More&amp;nbsp;&lt;a href="http://www.picotux.com/techdatae.html"&gt;information&lt;/a&gt;&amp;nbsp;can be found here.&amp;nbsp;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-1837773907014257462?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/1837773907014257462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=1837773907014257462' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1837773907014257462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1837773907014257462'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/05/smallest-linux-computer-in-world.html' title='The smallest Linux Computer in the World'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-521838791625815825</id><published>2010-05-15T10:39:00.000-07:00</published><updated>2010-05-15T10:39:55.518-07:00</updated><title type='text'>Ubuntu background noise FIXED</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_uSNjah9XxzA/S-7cXDEV6iI/AAAAAAAAATM/7FUmqhXPe-g/s1600/mixer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="324" src="http://2.bp.blogspot.com/_uSNjah9XxzA/S-7cXDEV6iI/AAAAAAAAATM/7FUmqhXPe-g/s640/mixer.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I had an annoying background noise even if volume was turned off. &amp;nbsp;The first idea that came to my mind was that it was a Preferences -&amp;gt; Sound thing, but no. The solution is simple.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Using terminal:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. Open Terminal ("console")&lt;br /&gt;2. Type alsamixer ENTER&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;If you need to install alsamixer:&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;sudo bash&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;apt-get install alsa-utils&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;3. Use RIGHT CURSOR key to find "Mic"&lt;br /&gt;4. Use DOWN CURSOR key to disable mic volume&lt;br /&gt;5. Hit ESC key.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Using GUI:&lt;/b&gt;&lt;br /&gt;1. Go to Applications -&amp;gt; Sound &amp;amp; Video -&amp;gt; "GNOME ALSA Mixer"&lt;br /&gt;&lt;br /&gt;&lt;b&gt;If you need "GNOME ALSA Mixer":&lt;/b&gt;&lt;br /&gt;- Go to System -&amp;gt; Administration -&amp;gt; Synaptic Package Manager&lt;br /&gt;- In the Quick Search Box, type gnome-alsamixer&lt;br /&gt;- Click the checkbox left to the package&lt;br /&gt;- Click "Mark for Installation"&lt;br /&gt;- Click "Apply"&lt;br /&gt;&lt;br /&gt;2. Under "Mic", just hit "Mute"&lt;br /&gt;&lt;br /&gt;That's it. Happy sounds!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-521838791625815825?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/521838791625815825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=521838791625815825' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/521838791625815825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/521838791625815825'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/05/ubuntu-background-noise-fixed.html' title='Ubuntu background noise FIXED'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_uSNjah9XxzA/S-7cXDEV6iI/AAAAAAAAATM/7FUmqhXPe-g/s72-c/mixer.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-2907576079075575962</id><published>2010-04-23T18:50:00.000-07:00</published><updated>2010-04-23T18:50:27.366-07:00</updated><title type='text'>OpenLike</title><content type='html'>&lt;span class="Apple-style-span" style="color: #1e250d; font-family: 'Lucida Grande', Calibri, Arial, sans-serif; font-size: 14px; line-height: 21px;"&gt;&lt;i&gt;&lt;a href="http://openlike.org/"&gt;OpenLike&lt;/a&gt; lets your users promote the things they like on your site through multiple recommendation, fan and personalization networks without you having to worry about the details of each network.&lt;/i&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-2907576079075575962?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/2907576079075575962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=2907576079075575962' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/2907576079075575962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/2907576079075575962'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/04/openlike.html' title='OpenLike'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-3817938270553383376</id><published>2010-04-10T11:13:00.000-07:00</published><updated>2010-04-10T11:13:57.445-07:00</updated><title type='text'>CESG2010</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_uSNjah9XxzA/S8C_3hCMUMI/AAAAAAAAASE/R--ORjgFd94/s1600/Untitled.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_uSNjah9XxzA/S8C_3hCMUMI/AAAAAAAAASE/R--ORjgFd94/s320/Untitled.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;The Services Engineering and Management Congress, is going to take place at the Faculty of Engineering of Universidade do Porto on May 14th, 2010 and is based in the three fundamental principles below:&lt;br /&gt;&lt;br /&gt;Mission: Promote an event that presents the available instruments in Engineering and Management to develop technological Services with immediate aplication in business reality.&lt;br /&gt;&lt;br /&gt;Vision: Be a reference congress, which estimulates the exchange of experiences and successful cases in Services, reaching the satisfaction of all the present public as source of new ideas, sinergy and creativity.&lt;br /&gt;&lt;br /&gt;Strategic Targets:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Promote the relationship between FEUP community and the business community.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Present the utility and business range of projects developed by FEUP scientific community.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Share and discuss real successful and unsuccessful business cases.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Give visibility of the best practices of the Services Sector.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Present the competences developed by MESG (Master in Services Engineering and Management) students.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Attract the best students to MESG.&lt;br /&gt;&lt;br /&gt;Read more at &lt;a href="http://www.cesg2010.com/"&gt;www.cesg2010.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-3817938270553383376?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/3817938270553383376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=3817938270553383376' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/3817938270553383376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/3817938270553383376'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/04/cesg2010.html' title='CESG2010'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_uSNjah9XxzA/S8C_3hCMUMI/AAAAAAAAASE/R--ORjgFd94/s72-c/Untitled.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-1472546426296016014</id><published>2010-04-09T16:31:00.000-07:00</published><updated>2010-04-09T16:31:48.586-07:00</updated><title type='text'>K3D is amazing!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://logo.cafepress.com/nocache/0/606420.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://logo.cafepress.com/nocache/0/606420.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;I started using K3D for 3D modelling in Linux. It's the first time I see a simple, comfortable, professional app for this purpose. Blender is great, but too complicated and bloated, and others just seem like quirky experiments. One usable and useful for serious 3D modelling is K3D.&lt;br /&gt;&lt;br /&gt;From the web site:&amp;nbsp;&lt;i&gt;K-3D is free-as-in-freedom 3D modeling and animation software. It combines flexible plugins with a visualization pipeline architecture, making K-3D a versatile and powerful tool for artists.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;Easy: K-3D's interface uses your platform's look-and-feel, and it's consistent with the applications you already know. New artists will find K-3D easy to understand, and professionals feel right at home. K-3D is intuitive, consistent, and discoverable.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;Powerful: K-3D features procedural and parametric workflows. Properties can be adjusted interactively and results appear immediately. The powerful, node-based visualization pipeline allows more possibilities than traditional modifier stacks or histories. Selection flows from one modifier to the next. &lt;/i&gt;&lt;br /&gt;&lt;a href="http://www.k-3d.org/"&gt;Read more...&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-1472546426296016014?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/1472546426296016014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=1472546426296016014' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1472546426296016014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1472546426296016014'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/04/k3d-is-amazing.html' title='K3D is amazing!'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-421387439092263442</id><published>2010-04-07T14:34:00.000-07:00</published><updated>2010-04-07T14:34:15.819-07:00</updated><title type='text'>Lua, a powerful embeddable language</title><content type='html'>"Lua is a powerful, fast, lightweight, embeddable scripting language.&lt;br /&gt;&lt;br /&gt;Lua combines simple procedural syntax with powerful data description constructs based on associative arrays and extensible semantics. Lua is dynamically typed, runs by interpreting bytecode for a register-based virtual machine, and has automatic memory management with incremental garbage collection, making it ideal for configuration, scripting, and rapid prototyping.&lt;br /&gt;&lt;br /&gt;(...)&lt;br /&gt;&lt;br /&gt;Lua has been used in many industrial applications (e.g., Adobe's Photoshop Lightroom), with an emphasis on embedded systems (e.g., the Ginga middleware for digital TV in Brazil) and games (e.g., World of Warcraft). Lua is currently the leading scripting language in games. Lua has a solid reference manual and there are several books about it. Several versions of Lua have been released and used in real applications since its creation in 1993. Lua featured in HOPL III, the Third ACM SIGPLAN History of Programming Languages Conference, in June 2007." - &lt;a href="http://www.lua.org/about.html"&gt;Read more...&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-421387439092263442?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/421387439092263442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=421387439092263442' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/421387439092263442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/421387439092263442'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/04/lua-powerful-embeddable-language.html' title='Lua, a powerful embeddable language'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-1895952892591917896</id><published>2010-03-27T01:58:00.000-07:00</published><updated>2010-03-27T01:58:06.648-07:00</updated><title type='text'>iPad 2010 = CDROM 1994</title><content type='html'>&lt;i&gt;If you weren’t following the tech news back then, let me offer you a quick recap. CD-ROMS were going to serve as the media industry’s digital lifeboat. A whole “multimedia industry” emerged around them, complete with high-end niche publishers and mass-market plays&lt;/i&gt;. &lt;a href="http://www.wordyard.com/2010/03/26/for-the-media-biz-ipad-2010-cdrom-1994/"&gt;Read Scot Rosenberg's article&lt;/a&gt;...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-1895952892591917896?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/1895952892591917896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=1895952892591917896' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1895952892591917896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1895952892591917896'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/ipad-2010-cdrom-1994.html' title='iPad 2010 = CDROM 1994'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-7868749964430181562</id><published>2010-03-23T22:45:00.000-07:00</published><updated>2010-03-23T22:49:59.915-07:00</updated><title type='text'>Is Zynga preparing to leave Facebook?</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_uSNjah9XxzA/S6mntq_K42I/AAAAAAAAAR0/v41vdXIaZs8/s1600-h/fv-jpg.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_uSNjah9XxzA/S6mntq_K42I/AAAAAAAAAR0/v41vdXIaZs8/s320/fv-jpg.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;In a weird news item, All Facebook, the unnoficial Facebook blog, was posting that Zynga launched farmville.com to let users play Farmville outside Facebook:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;«Ever had that burning desire to play Farmville, but didn’t want to head over to Facebook.com and get distracted by all your friends? Your answer has arrived, courtesy of Zynga, and it’s called Farmville.com. Zynga has ported their 80 million monthly active user Facebook game to an independent website, where you can play the game free from any Facebook distractions. &amp;nbsp;The site also provides an improved interface for serious Farmville players.» -&amp;nbsp;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;Souce: All Facebook RSS feed.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;However, the title was leading to All Facebook site and the footer link was taking you to Social Times, with the same result: Page not Found.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-7868749964430181562?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/7868749964430181562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=7868749964430181562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/7868749964430181562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/7868749964430181562'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/zynga-preparing-to-leave-facebook.html' title='Is Zynga preparing to leave Facebook?'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_uSNjah9XxzA/S6mntq_K42I/AAAAAAAAAR0/v41vdXIaZs8/s72-c/fv-jpg.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-8048131192221547704</id><published>2010-03-22T21:46:00.000-07:00</published><updated>2010-03-22T21:47:02.133-07:00</updated><title type='text'>Multicore requires OS rewrites?</title><content type='html'>&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 17px;"&gt;A Microsoft kernel engineer, Dave Probert, gave a presentation last week outlining his thoughts on how the Windows kernel should evolve to meet the needs of the multicore future ahead of us. Probert complained that current operating systems fail to capitalize on the capabilities of multicore processors and leave users waiting.&amp;nbsp;"Why should you ever, with all this parallel hardware, ever be waiting for your computer?" he asked.&amp;nbsp;&lt;a href="http://arstechnica.com/software/news/2010/03/multicore-requires-os-rewrites-well-maybe.ars?utm_source=rss&amp;amp;utm_medium=rss&amp;amp;utm_campaign=rss"&gt;Read Ars Technica article...&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-8048131192221547704?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/8048131192221547704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=8048131192221547704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/8048131192221547704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/8048131192221547704'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/multicore-requires-os-rewrites.html' title='Multicore requires OS rewrites?'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-3860136517872243691</id><published>2010-03-18T22:24:00.001-07:00</published><updated>2010-03-18T22:24:53.276-07:00</updated><title type='text'>Valgrind analysis</title><content type='html'>«&lt;i&gt;Valgrind is an  &lt;a href="http://valgrind.org/gallery/awards.html"&gt;award-winning&lt;/a&gt;  instrumentation framework for building dynamic analysis tools.  There are Valgrind tools that can automatically detect many memory management and threading bugs, and profile your programs in detail.  You can also use Valgrind to build new tools. &lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;The Valgrind distribution currently includes six production-quality tools: a memory error detector, two thread error detectors, a cache and branch-prediction profiler, a call-graph generating cache profiler, and a heap profiler.  It also includes two experimental tools:  a heap/stack/global array overrun detector, and a SimPoint basic block vector generator.  It runs on the following platforms: X86/Linux, AMD64/Linux, PPC32/Linux, PPC64/Linux, and X86/Darwin (Mac OS X).&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;Valgrind is &lt;a href="http://www.opensource.org/"&gt;Open Source&lt;/a&gt; /  &lt;a href="http://www.gnu.org/philosophy/free-sw.html"&gt;Free Software&lt;/a&gt;, and is freely available under the  &lt;a href="http://www.gnu.org/licenses/gpl-2.0.html"&gt;GNU General Public  License, version 2&lt;/a&gt;. &lt;/i&gt;»&lt;br /&gt;&lt;br /&gt;&lt;a href="http://valgrind.org/"&gt;Read more...&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-3860136517872243691?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/3860136517872243691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=3860136517872243691' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/3860136517872243691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/3860136517872243691'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/valgrind-analysis.html' title='Valgrind analysis'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-2897213923895273375</id><published>2010-03-16T18:20:00.000-07:00</published><updated>2010-03-16T18:20:13.222-07:00</updated><title type='text'>An interview with John McCarthy</title><content type='html'>«In this interview, John McCarthy presents his latest programming language ideas; Elephant 2000. He describes elephant memory, references to the past and to the future and how speach acts can be used in programming. He also presents his view on Lisp's influences on Ruby and his view of the history and current state of the computer industry.» &amp;nbsp;&lt;a href="http://www.infoq.com/interviews/mccarthy-elephant-2000"&gt;Read more...&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-2897213923895273375?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/2897213923895273375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=2897213923895273375' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/2897213923895273375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/2897213923895273375'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/interview-with-john-mccarthy.html' title='An interview with John McCarthy'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-2921262505113857760</id><published>2010-03-16T16:48:00.000-07:00</published><updated>2010-03-16T16:48:29.101-07:00</updated><title type='text'>Browser wars reloaded !!!</title><content type='html'>Maybe the best thing a web professional could expect: Internet Explorer 9 is made to compete: CSS3, fast javascript engine, SVG, graphics acceleration, video tag, etc.&lt;br /&gt;&lt;br /&gt;Goodbye to Flash and Silverlight. Hello to the new web platform.&amp;nbsp;Finally SVG is taking the world and Adobe is the favorite scapegoat.&lt;br /&gt;&lt;br /&gt;This is History happening.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-2921262505113857760?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/2921262505113857760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=2921262505113857760' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/2921262505113857760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/2921262505113857760'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/browser-wars-reloaded.html' title='Browser wars reloaded !!!'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-7635970671134261261</id><published>2010-03-14T14:57:00.000-07:00</published><updated>2010-03-14T14:57:20.882-07:00</updated><title type='text'>Programmers are still programmers?</title><content type='html'>«&lt;b&gt;Whatever happened to programming&lt;/b&gt;» is an interesting article written by Mike Taylor. And he's got a point... «Today, I mostly paste libraries together. &amp;nbsp;So do you, most likely, if you work in software. &amp;nbsp;(..) &amp;nbsp;a huge part of my job these days seems to be impedence-matching between big opaque chunks of library software that sort of do most of what my program is meant to achieve, but don’t quite work right together so I have to, I don’t know, translate USMARC records into Dublin Core or something. &amp;nbsp;Is that programming? &amp;nbsp;Really? » &lt;a href="http://reprog.wordpress.com/2010/03/03/whatever-happened-to-programming/"&gt;Read all...&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-7635970671134261261?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/7635970671134261261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=7635970671134261261' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/7635970671134261261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/7635970671134261261'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/programmers-are-still-programmers.html' title='Programmers are still programmers?'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-4680414834308129741</id><published>2010-03-12T19:36:00.000-08:00</published><updated>2010-03-12T19:36:35.149-08:00</updated><title type='text'>Amahi: Powerful, Simple, Home Networking</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://blog.amahi.org/wp-content/themes/amahi-water/amahi-logo-red.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="100" src="http://blog.amahi.org/wp-content/themes/amahi-water/amahi-logo-red.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;«Efficiently manage the networking and backup of all the computers, game consoles and other devices in your network, and securely access your network from the internet, FREE. That's just the start of what you'll be able to do with &lt;a href="http://www.amahi.org/"&gt;Amahi&lt;/a&gt;.»&lt;br /&gt;&lt;br /&gt;«The Amahi Linux Home Server makes your home networking simple. We like to call the Amahi servers HDAs, for "Home Digital Assistants." Each HDA delivers all the functionality you would want in a home server, while being as easy to use as a web browser.»&lt;br /&gt;&lt;br /&gt;Amahi was at &lt;a href="http://wiki.twit.tv/wiki/FLOSS_Weekly_112"&gt;FLOSS Weekly&lt;/a&gt;, with Leo Laporte, Jono Bacon and Randall Schwartz. Nice...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-4680414834308129741?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/4680414834308129741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=4680414834308129741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/4680414834308129741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/4680414834308129741'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/amahi-powerful-simple-home-networking.html' title='Amahi: Powerful, Simple, Home Networking'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-1373230454365449097</id><published>2010-03-12T19:12:00.000-08:00</published><updated>2010-03-12T19:12:02.098-08:00</updated><title type='text'>Statusnet: Open Source Microblogging PHP Solution</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://status.net/sites/default/files/statustheme_logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://status.net/sites/default/files/statustheme_logo.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, 'DejaVu Sans', Geneva, Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 17px;"&gt;«StatusNet is the open source&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Microblogging" style="color: #1e55af; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" title="What is microblogging?"&gt;microblogging&lt;/a&gt;&amp;nbsp;platform that helps you share and connect in real-time within your own domain.&lt;br /&gt;&lt;br /&gt;With StatusNet you can encourage collaboration, build and engage your community, and be in command of your brand.»&lt;br /&gt;&lt;br /&gt;&lt;a href="http://status.net/"&gt;Read more...&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-1373230454365449097?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/1373230454365449097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=1373230454365449097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1373230454365449097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1373230454365449097'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/statusnet-open-source-microblogging-php.html' title='Statusnet: Open Source Microblogging PHP Solution'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-4841603492902396960</id><published>2010-03-12T17:07:00.000-08:00</published><updated>2010-03-12T17:07:06.287-08:00</updated><title type='text'>OStatus got started!</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, Verdana, 'Bitstream Vera Sans', sans-serif; font-size: 14px; line-height: 21px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://ostatus.org/sites/default/files/acquia_prosper_logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://ostatus.org/sites/default/files/acquia_prosper_logo.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;«OStatus lets people on different social networks follow each other. It's transparent to your friends, colleagues and family which software or service you use. They can get your status updates on their own sites and reply, like, or re-post your updates.&lt;/div&gt;&lt;div style="margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;OStatus isn't a new protocol; it applies some great protocols in a natural and reasonable way to make distributed social networking possible.» - &lt;a href="http://ostatus.org/"&gt;Read more...&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-4841603492902396960?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/4841603492902396960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=4841603492902396960' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/4841603492902396960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/4841603492902396960'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/ostatus-got-started.html' title='OStatus got started!'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-6370408095734682671</id><published>2010-03-12T06:13:00.000-08:00</published><updated>2010-03-12T06:13:46.702-08:00</updated><title type='text'>Cassandra, a highly scalable, eventually consistent, distributed, structured key-value store</title><content type='html'>&lt;span class="Apple-style-span" style="color: #222222; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 14px; line-height: 21px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://incubator.apache.org/cassandra/media/img/cassandra_logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="64" src="http://incubator.apache.org/cassandra/media/img/cassandra_logo.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;br /&gt;«The Apache Cassandra Project develops a highly scalable second-generation distributed database, bringing together&amp;nbsp;&lt;a href="http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"&gt;Dynamo's&lt;/a&gt;&amp;nbsp;fully distributed design and&amp;nbsp;&lt;a href="http://labs.google.com/papers/bigtable.html" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"&gt;Bigtable's&lt;/a&gt;&amp;nbsp;ColumnFamily-based data model.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Cassandra&amp;nbsp;&lt;a href="http://www.new.facebook.com/note.php?note_id=24413138919" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"&gt;was open sourced by Facebook in 2&lt;/a&gt;&lt;a href="http://www.new.facebook.com/note.php?note_id=24413138919" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"&gt;008&lt;/a&gt;, where it was designed by Avinash Lakshman (one of the authors of Amazon's Dynamo) and Prashant Malik. In a lot of ways you can think of Cassandra as Dynamo 2.0.»&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 1.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;a href="http://incubator.apache.org/cassandra/"&gt;Read more...&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-6370408095734682671?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/6370408095734682671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=6370408095734682671' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6370408095734682671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6370408095734682671'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/cassandra-highly-scalable-eventually.html' title='Cassandra, a highly scalable, eventually consistent, distributed, structured key-value store'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-1552694034930691855</id><published>2010-03-12T06:01:00.000-08:00</published><updated>2010-03-12T06:01:07.046-08:00</updated><title type='text'>Web 2.0 versus Control 2.0</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_uSNjah9XxzA/S5pJDgz_jDI/AAAAAAAAARM/o73dl6Jl_wU/s1600-h/Untitled.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_uSNjah9XxzA/S5pJDgz_jDI/AAAAAAAAARM/o73dl6Jl_wU/s320/Untitled.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;«The fight for free access to information is being played out to an ever greater extent on the Internet.The&lt;br /&gt;emerging general trend is that a growing number of countries are attemptimg to tighten their control of&lt;br /&gt;the Net, but at the same time, increasingly inventive netizens demonstrate mutual solidarity by mobilizing&lt;br /&gt;when necessary.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Internet: a space for information-sharing and mobilizing&lt;/b&gt;&lt;br /&gt;In authoritarian countries in which the traditional media are state-controlled, the Internet offers a unique&lt;br /&gt;space for discussion and information-sharing, and has become an ever more important engine for protest&lt;br /&gt;and mobilization.The Internet is the crucible in which repressed civil societies can revive and develop.»&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="https://docs.google.com/viewer?url=http://www.rsf.org/IMG/pdf/Internet_enemies.pdf"&gt;Read more...&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-1552694034930691855?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/1552694034930691855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=1552694034930691855' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1552694034930691855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1552694034930691855'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/web-20-versus-control-20.html' title='Web 2.0 versus Control 2.0'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_uSNjah9XxzA/S5pJDgz_jDI/AAAAAAAAARM/o73dl6Jl_wU/s72-c/Untitled.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-8662870556793040507</id><published>2010-03-10T09:20:00.000-08:00</published><updated>2010-03-10T09:20:27.329-08:00</updated><title type='text'>Self 4.4 Beta 1 released!</title><content type='html'>&lt;i&gt;«Self is a prototype-based dynamic object-oriented programming language, environment, and virtual machine centered around the principles of simplicity, uniformity, concreteness, and liveness.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;Self includes a programming language, a collection of objects defined in the Self language, and a programming environment built in Self for writing Self programs. The language and environment attempt to present objects to the programmer and user in as direct and physical a way as possible. The system uses the prototype-based style of object construction.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;The first version of the Self language was designed in 1986 by David Ungar and Randall B. Smith at Xerox PARC. A series of Self implementations and a graphical programming environment were built at Stanford University by Craig Chambers, Urs Hölzle, Ole Agesen, Elgin Lee, Bay-Wei Chang, and David Ungar. The project continued at Sun MIcrosystems Laboratories, where it benefited from the efforts of Randall B. Smith, Mario Wolczko, John Maloney, and Lars Bak. Smith and Ungar jointly led it there. Work on the project officially ceased in 1995.»&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;a href="http://selflanguage.org/index.html"&gt;Learn more...&lt;/a&gt;&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-8662870556793040507?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/8662870556793040507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=8662870556793040507' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/8662870556793040507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/8662870556793040507'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/self-44-beta-1-released.html' title='Self 4.4 Beta 1 released!'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-6819698260208966613</id><published>2010-03-09T17:33:00.000-08:00</published><updated>2010-03-09T17:33:36.349-08:00</updated><title type='text'>Gnome Do</title><content type='html'>&lt;span class="Apple-style-span" style="color: #444444; font-family: sans-serif; font-size: 13px; line-height: 19px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://do.davebsd.com/wiki/images/9/99/Open-with.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="246" src="http://do.davebsd.com/wiki/images/9/99/Open-with.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="color: #444444; font-size: 12px; line-height: 1.4em; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"GNOME Do (Do) is an intelligent launcher tool that makes performing common tasks on your computer simple and efficient. Do not only allows you to search for items in your desktop environment (e.g. applications, contacts, bookmarks, files, music), it also allows you to specify actions to perform on search results (e.g. run, open, email, chat, play).&lt;/div&gt;&lt;ul style="line-height: 1.5em; list-style-image: url(http://do.davebsd.com/wiki/skins/do/bullet.gif); list-style-type: square; margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="list-style-image: initial; list-style-position: initial; list-style-type: square; margin-bottom: 0.1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Want to send an email to Mom? Simply type&amp;nbsp;&lt;b&gt;mom &lt;tab&gt; email&lt;/tab&gt;&lt;/b&gt;&lt;/li&gt;&lt;li style="list-style-image: initial; list-style-position: initial; list-style-type: square; margin-bottom: 0.1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Want to listen to some music? Simply type&amp;nbsp;&lt;b&gt;beatles &lt;tab&gt; play&lt;/tab&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="color: #444444; font-size: 12px; line-height: 1.4em; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Do provides instantaneous, action-oriented desktop search results that adapt to reflect your habits and preferences. For example, if you use Firefox web browser often, typing&amp;nbsp;&lt;b&gt;f&lt;/b&gt;&amp;nbsp;in Do will launch Firefox. Or, if you visit The New York Times website often, Do will open it if you simply type&amp;nbsp;&lt;b&gt;nyt&lt;/b&gt;.&lt;/div&gt;&lt;div style="color: #444444; font-size: 12px; line-height: 1.4em; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Unlike other search tools that present search results as flat, homogeneous lists, Do provides familiar graphical depictions of search results that assure you that your intent is being realized correctly; searching for "mom" will show a picture of mom, and searching for "beatles" will show a Beatles album cover. Do has many more powerful and exciting capabilities that must be seen to be appreciated. " - &lt;a href="http://do.davebsd.com/wiki/Main_Page"&gt;See more...&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-6819698260208966613?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/6819698260208966613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=6819698260208966613' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6819698260208966613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6819698260208966613'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/gnome-do.html' title='Gnome Do'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-8752523295289354510</id><published>2010-03-09T17:14:00.000-08:00</published><updated>2010-03-09T17:15:43.860-08:00</updated><title type='text'>All Your Apps Are Belong to Apple</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;i class="author" style="color: #7a7b62; font-size: 0.9em;"&gt;&lt;span class="cat"&gt;L&lt;a href="http://www.blogger.com/blog-categories/legal-analysis" style="color: #7a7b62; text-decoration: none;"&gt;egal Analysis&lt;/a&gt;&lt;/span&gt;&amp;nbsp;by&amp;nbsp;&lt;a href="http://www.blogger.com/about/staff/fred-von-lohmann" style="color: #990000;"&gt;Fred von Lohmann&lt;/a&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;div class="blogimage" style="margin-bottom: 10px; margin-left: 10px; margin-right: 10px; margin-top: 10px;"&gt;&lt;/div&gt;The entire family of devices built on the iPhone OS (iPhone, iPod Touch, iPad) have been designed to run only software that is approved by Apple—a major shift from the norms of the personal computer market. Software developers who want Apple's approval must first agree to the iPhone Developer Program License Agreement.&lt;br /&gt;&lt;br /&gt;So today we're posting the "&lt;a href="http://www.eff.org/files/20100302_iphone_dev_agr.pdf" style="color: #990000;"&gt;iPhone Developer Program License Agreement&lt;/a&gt;"—the contract that every developer who writes software for the iTunes App Store must "sign." Though more than 100,000 app developers have clicked "I agree," public copies of the agreement are scarce, perhaps thanks to the prohibition on making any "public statements regarding this Agreement, its terms and conditions, or the relationship of the parties without Apple's express prior written approval." But when we saw the&amp;nbsp;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=334325516&amp;amp;mt=8" style="color: #990000;"&gt;NASA App for iPhone&lt;/a&gt;, we used the&amp;nbsp;&lt;a href="http://www.eff.org/issues/foia" style="color: #990000;"&gt;Freedom of Information Act (FOIA)&lt;/a&gt;&amp;nbsp;to ask NASA for a copy, so that the general public could see what rules conrolled the technology they could use with their phones. NASA responded with the Rev. 3-17-09 version of the agreement (it has&amp;nbsp;&lt;a href="http://stackoverflow.com/questions/2160860/what-changes-are-there-in-the-iphone-developer-program-license-agreement" style="color: #990000;"&gt;reportedly&lt;/a&gt;&amp;nbsp;been revised somewhat since—please send us the current version if you are able).&lt;br /&gt;&lt;br /&gt;This "license agreement" is particularly relevant right now, given the&amp;nbsp;&lt;a href="http://www.appleinsider.com/articles/10/03/05/apple_ipad_to_arrive_in_u_s_on_april_3_preorders_begin_march_12.html" style="color: #990000;"&gt;imminent launch&lt;/a&gt;&amp;nbsp;of the iPad and anytime-now issuance of the U.S. Copyright Office's ruling regarding&amp;nbsp;&lt;a href="http://www.eff.org/cases/2009-dmca-rulemaking/" style="color: #990000;"&gt;jailbreaking of the iPhone&lt;/a&gt;.&lt;br /&gt;So what's in the Agreement? Here are a few troubling highlights:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ban on Public Statements&lt;/b&gt;: As mentioned above, Section 10.4 prohibits developers, including government agencies such as NASA, from making any "public statements" about the terms of the Agreement. This is particularly strange, since the Agreement itself is not "Apple Confidential Information" as defined in Section 10.1. So the terms are not confidential, but developers are contractually forbidden from speaking "publicly" about them.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;App Store Only&lt;/b&gt;: Section 7.2 makes it clear that any applications developed using Apple's SDK may only be publicly distributed through the App Store, and that Apple can reject an app for any reason, even if it meets all the formal requirements disclosed by Apple. So if you use the SDK and your app is rejected by Apple, you're prohibited from distributing it through competing app stores like&amp;nbsp;&lt;a href="http://cydia.saurik.com/" style="color: #990000;"&gt;Cydia&lt;/a&gt;&amp;nbsp;or&amp;nbsp;&lt;a href="http://rockyourphone.com/" style="color: #990000;"&gt;Rock Your Phone&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ban on Reverse Engineering&lt;/b&gt;: Section 2.6 prohibits any reverse engineering (including the kinds of reverse engineering for interoperability that courts have recognized as a fair use under copyright law), as well as anything that would "enable others" to reverse engineer, the SDK or iPhone OS.&lt;br /&gt;&lt;b&gt;No Tinkering with&amp;nbsp;&lt;i&gt;Any&lt;/i&gt;&amp;nbsp;Apple Products&lt;/b&gt;: Section 3.2(e) is the "ban on jailbreaking" provision that received some&amp;nbsp;&lt;a href="http://arstechnica.com/apple/news/2009/04/latest-iphone-developer-agreement-bans-jailbreaks.ars" style="color: #990000;"&gt;attention&lt;/a&gt;&amp;nbsp;when it was introduced last year. Surprisingly, however, it appears to prohibit developers from tinkering with&amp;nbsp;&lt;i&gt;any&lt;/i&gt;&amp;nbsp;Apple software or technology, not just the iPhone, or "enabling others to do so." For example, this could mean that iPhone app developers are forbidden from making&amp;nbsp;&lt;a href="http://www.eff.org/deeplinks/2008/11/apple-confuses-speech-dmca-violation" style="color: #990000;"&gt;iPods interoperate with open source software&lt;/a&gt;, for example.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: url(http://www.eff.org/sites/all/themes/frontier/images/quotes.gif); background-origin: initial; background-position: 0px 5px; background-repeat: no-repeat no-repeat; margin-bottom: 0px; margin-left: 0px; margin-right: 30px; margin-top: 0px; padding-bottom: 1px; padding-left: 47px; padding-right: 40px; padding-top: 3px;"&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: url(http://www.eff.org/sites/all/themes/frontier/images/quotes-end.gif); background-origin: initial; background-position: 100% 100%; background-repeat: no-repeat no-repeat; margin-bottom: 5px; margin-right: -40px; padding-bottom: 10px; padding-left: 0px; padding-right: 40px; padding-top: 0px;"&gt;You will not, through use of the Apple Software, services or otherwise create any Application or other program that would disable, hack, or otherwise interfere with the Security Solution, or any security, digital signing, digital rights management, verification or authentication mechanisms implemented in or by the iPhone operating system software, iPod Touch operating system software, this Apple Software, any services or other Apple software or technology, or enable others to do so&lt;/div&gt;&lt;/blockquote&gt;&lt;b&gt;&lt;br /&gt;Kill Your App Any Time&lt;/b&gt;: Section 8 makes it clear that Apple can "revoke the digital certificate of any of Your Applications at any time." Steve Jobs has&amp;nbsp;&lt;a href="http://www.telegraph.co.uk/technology/3358134/Apples-Jobs-confirms-iPhone-kill-switch.html" style="color: #990000;"&gt;confirmed&lt;/a&gt;&amp;nbsp;that Apple can remotely disable apps, even after they have been installed by users. This contract provision would appear to allow that.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;We Never Owe You More than Fifty Bucks&lt;/b&gt;: Section 14 states that, no matter what, Apple will never be liable to any developer for more than $50 in damages. That's pretty remarkable, considering that Apple holds a developer's reputational and commercial value in its hands—it's not as though the developer can reach its existing customers anywhere else. So if Apple botches an update, accidentally kills your app, or leaks your entire customer list to a competitor, the Agreement tries to cap you at the cost of a nice dinner for one in Cupertino.&lt;br /&gt;&lt;br /&gt;Overall, the Agreement is a very one-sided contract, favoring Apple at every turn. That's not unusual where end-user license agreements are concerned (and not all the terms may ultimately be enforceable), but it's a bit of a surprise as applied to the more than 100,000 developers for the iPhone, including many large public companies. How can Apple get away with it? Because it is the sole gateway to the more than 40 million iPhones that have been sold. In other words, it's only because Apple still "owns" the customer, long after each iPhone (and soon, iPad) is sold, that it is able to push these contractual terms on the entire universe of software developers for the platform.&lt;br /&gt;&lt;br /&gt;In short, no competition among app stores means no competition for the license terms that apply to iPhone developers.&lt;br /&gt;&lt;br /&gt;If Apple's mobile devices are the future of computing, you can expect that future to be one with more limits on innovation and competition (or "&lt;a href="http://arstechnica.com/old/content/2008/06/book-review-2008-06-2-admin.ars" style="color: #990000;"&gt;generativity&lt;/a&gt;," in the words of Prof. Jonathan Zittrain) than the PC era that came before. It's frustrating to see Apple, the&amp;nbsp;&lt;a href="http://yupnet.org/zittrain/archives/6#2" style="color: #990000;"&gt;original pioneer in generative computing&lt;/a&gt;, putting shackles on the market it (for now) leads. If Apple wants to be a real leader, it should be fostering innovation and competition, rather than acting as a jealous and arbitrary feudal lord. Developers should demand better terms and customers who love their iPhones should back them.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table id="attachments" style="border-collapse: collapse;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: none; border-bottom-width: 3px; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; color: #7a7b62; font-weight: 400; padding-right: 1em; text-align: left;"&gt;&lt;br /&gt;Attachment&lt;/th&gt;&lt;th style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: none; border-bottom-width: 3px; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; color: #7a7b62; font-weight: 400; padding-right: 1em; text-align: left;"&gt;Size&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="border-top-color: initial; border-top-style: none; border-top-width: initial;"&gt;&lt;tr class="odd" style="background-color: #eeeeee; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; padding-bottom: 0.1em; padding-left: 0.6em; padding-right: 0.6em; padding-top: 0.1em;"&gt;&lt;td style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none !important; border-color: initial !important; border-left-style: none !important; border-right-style: none !important; border-top-style: none !important; border-width: initial !important; padding-right: 15px;"&gt;&lt;a href="http://www.eff.org/files/20100302_iphone_dev_agr.pdf" style="color: #cc0000;"&gt;20090317_iphone_dev_agr.pdf&lt;/a&gt;&lt;/td&gt;&lt;td style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none !important; border-color: initial !important; border-left-style: none !important; border-right-style: none !important; border-top-style: none !important; border-width: initial !important; padding-right: 15px;"&gt;680.72 KB&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="topics" style="color: #7a7b62; font-style: italic;"&gt;&lt;br /&gt;Related Issues:&amp;nbsp;&lt;a class="topicsitem" href="http://www.blogger.com/issues/dmca" style="color: #990000;"&gt;DMCA&lt;/a&gt;,&amp;nbsp;&lt;a class="topicsitem" href="http://www.blogger.com/issues/dmca-rulemaking" style="color: #990000;"&gt;DMCA Rulemaking&lt;/a&gt;,&amp;nbsp;&lt;a class="topicsitem" href="http://www.blogger.com/issues/foia" style="color: #990000;"&gt;FOIA Litigation for Accountable Government&lt;/a&gt;,&amp;nbsp;&lt;a class="topicsitem" href="http://www.blogger.com/issues/terms-of-abuse" style="color: #990000;"&gt;Terms Of (Ab)Use&lt;/a&gt;&lt;/div&gt;&lt;div class="topics" style="color: #7a7b62; font-style: italic;"&gt;&lt;br /&gt;Related Cases:&amp;nbsp;&lt;a class="topicsitem" href="http://www.blogger.com/cases/2009-dmca-rulemaking" style="color: #990000;"&gt;2009 DMCA Rulemaking&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This article is licensed under&amp;nbsp;&lt;span class="Apple-style-span" style="color: black; font-style: normal;"&gt;&lt;a href="http://creativecommons.org/licenses/by/3.0/us/" style="color: #cc0000;"&gt;Creative Commons Attribution License&lt;/a&gt;.&amp;nbsp;&lt;a href="http://www.eff.org/deeplinks/2010/03/iphone-developer-program-license-agreement-all"&gt;Article source&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-8752523295289354510?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/8752523295289354510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=8752523295289354510' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/8752523295289354510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/8752523295289354510'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/all-your-apps-are-belong-to-apple.html' title='All Your Apps Are Belong to Apple'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-3589410742289049208</id><published>2010-03-06T22:56:00.000-08:00</published><updated>2010-03-06T22:56:13.279-08:00</updated><title type='text'>Newspeak programming language by Gilad Bracha</title><content type='html'>"Newspeak is a new programming language in the tradition of Self and Smalltalk. Newspeak is highly dynamic and reflective &amp;nbsp;- but designed to support modularity and security. It supports both object-oriented and functional programming.&lt;br /&gt;&lt;br /&gt;Like Self, Newspeak is message-based; all names are dynamically bound. However, like Smalltalk, Newspeak uses classes rather than prototypes. As in Beta, classes may nest. Because class names are late bound, all classes are virtual, every class can act as a mixin, and class hierarchy inheritance falls out automatically. Top level classes are essentially self contained parametric namespaces, and serve to define component style modules, which naturally define sandboxes in an object-capability style. Newspeak was deliberately designed as a principled dynamically typed language. We plan to evolve the language to support pluggable types." &lt;a href="http://bracha.org/Site/Newspeak.html"&gt;Source&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-3589410742289049208?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/3589410742289049208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=3589410742289049208' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/3589410742289049208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/3589410742289049208'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/newspeak-programming-language-by-gilad.html' title='Newspeak programming language by Gilad Bracha'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-5930390547034383901</id><published>2010-03-06T22:46:00.001-08:00</published><updated>2010-03-06T23:14:58.834-08:00</updated><title type='text'>Gerrit: a Git code reviewer</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="max-width: 65em;"&gt;Gerrit is a web based code review system, facilitating online code reviews for projects using the Git version control system.&amp;nbsp;Gerrit makes reviews easier by showing changes in a side-by-side display, and allowing inline comments to be added by any reviewer.&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;br /&gt;Gerrit simplifies Git based project maintainership by permitting any authorized user to submit changes to the master Git repository, rather than requiring all approved changes to be merged in by hand by the project maintainer. This functionality enables a more centralized usage of Git.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/gerrit/"&gt;Read more...&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-5930390547034383901?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/5930390547034383901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=5930390547034383901' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/5930390547034383901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/5930390547034383901'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/gerrit-git-code-reviewer.html' title='Gerrit: a Git code reviewer'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-4422945504499980994</id><published>2010-03-06T22:44:00.001-08:00</published><updated>2010-03-06T23:15:23.372-08:00</updated><title type='text'>Coreboot: how to replace proprietary BIOS</title><content type='html'>&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: sans-serif; font-size: 13px; line-height: 19px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="line-height: 1.5em; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.4em;"&gt;&lt;b&gt;coreboot&lt;/b&gt;&amp;nbsp;(formerly known as LinuxBIOS) is a Free Software project aimed at replacing the proprietary BIOS (firmware) you can find in most of today's computers. It performs just a little bit of hardware initialization and then executes a so-called&amp;nbsp;payload.&lt;/div&gt;&lt;div style="line-height: 1.5em; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.4em;"&gt;With this separation of hardware initialization and later boot logic, coreboot is capable of scaling from specialized applications run directly from firmware, operating systems in Flash, and custom bootloaders to implementations of firmware standards like PCBIOS and EFI without having to carry features not necessary in the target application, reducing the amount of code and flash space required.&lt;/div&gt;&lt;div style="line-height: 1.5em; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.4em;"&gt;We currently support&amp;nbsp;&lt;b&gt;213&lt;/b&gt;&amp;nbsp;different mainboards.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.coreboot.org/Welcome_to_coreboot"&gt;Source&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-4422945504499980994?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/4422945504499980994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=4422945504499980994' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/4422945504499980994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/4422945504499980994'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/coreboot-how-to-replace-proprietary.html' title='Coreboot: how to replace proprietary BIOS'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-4243638555323996285</id><published>2010-03-06T22:37:00.000-08:00</published><updated>2010-03-06T22:38:50.056-08:00</updated><title type='text'>Pinax, a pyhton open source web platform</title><content type='html'>&lt;strong&gt;Pinax&lt;/strong&gt;&amp;nbsp;is an open-source platform built on the&amp;nbsp;&lt;a href="http://djangoproject.com/"&gt;Django Web Framework&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;By integrating numerous reusable Django apps to take care of the things that many sites have in common, it lets you focus on what makes your site different.&lt;br /&gt;&lt;div class="announcement" style="font-size: 14pt; text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://blip.tv/file/1952623"&gt;Video of Talk on Pinax at PyCon 2009&lt;/a&gt;&lt;/div&gt;&lt;div class="announcement" style="font-size: 14pt; text-align: center;"&gt;&lt;a href="http://www.youtube.com/watch?v=1J91Ownq-7g"&gt;Video of Talk on Pinax at DjangoCon 2008&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;While the initial development was focused around a demo social networking site, Pinax is suitable for a wide variety of websites. Pinax project is working on a number of editions tailored to intranets, event management, learning management, software project management and more. &lt;a href="http://pinaxproject.com/"&gt;Source&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-4243638555323996285?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/4243638555323996285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=4243638555323996285' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/4243638555323996285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/4243638555323996285'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/pinax-pyhton-open-source-web-platform.html' title='Pinax, a pyhton open source web platform'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-2419554902745728573</id><published>2010-03-06T22:33:00.000-08:00</published><updated>2010-03-06T22:33:16.506-08:00</updated><title type='text'>MariaDB 5.1.42 Stable released!</title><content type='html'>&lt;i&gt;«MariaDB is a backward compatible, drop-in replacement branch of the MySQL® Database Server. It includes all major open source storage engines, including the Maria storage engine. MariaDB is community developed in collaboration with Monty Program.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;What is the goal of MariaDB?&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;To provide a community developed, stable, and always Free branch of MySQL that is, on the user level, compatible with the main version.&amp;nbsp;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;MariaDB will be kept up to date with the latest MySQL release from the same branch. For example MariaDB 5.1 will be kept up to date with MySQL 5.1, and so on.&lt;/i&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;We strive to keep our main trees as free from bugs as possible. It should be reasonably safe to pull from our trees at any time. We work to provide builds of the main branch and active development branches every month.»&amp;nbsp;&lt;/i&gt;&lt;a href="http://askmonty.org/wiki/index.php/MariaDB"&gt;Source&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-2419554902745728573?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/2419554902745728573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=2419554902745728573' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/2419554902745728573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/2419554902745728573'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/mariadb-5142-stable-released.html' title='MariaDB 5.1.42 Stable released!'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-6689960291727722094</id><published>2010-03-06T22:29:00.000-08:00</published><updated>2010-03-06T22:29:02.697-08:00</updated><title type='text'>Create games with Delta3D</title><content type='html'>Delta3D is a widely used and well-supported open source game and simulation engine. Delta3D is a fully-featured game engine appropriate for a wide variety of uses including training, education, visualization, and entertainment. Delta3D is unique because it offers features specifically suited to the Modeling and Simulation and DoD communities such as High Level Architecture (HLA), After Action Review (AAR), large scale terrain support, and SCORM Learning Management System (LMS) integration.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Delta3D Engine&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Delta3D is an Open Source engine which can be used for games, simulations, or other graphical applications. Its modular design integrates other well-known Open Source projects such as Open Scene Graph, Open Dynamics Engine, Character Animation Library, and OpenAL. Rather than bury the underlying modules, Delta3D integrates them together in an easy-to-use API -- always allowing access to the important underlying components. This provides a high-level API while still allowing the end user the optional, low-level functionality. [&lt;a href="http://www.delta3d.org/article.php?story=20041105154425816&amp;amp;topic=about"&gt;Source&lt;/a&gt;]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-6689960291727722094?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/6689960291727722094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=6689960291727722094' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6689960291727722094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6689960291727722094'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/create-games-with-delta3d.html' title='Create games with Delta3D'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-1801946206969664654</id><published>2010-03-06T22:23:00.000-08:00</published><updated>2010-03-06T22:23:51.378-08:00</updated><title type='text'>newLISP® for Mac OS X, GNU Linux, Unix and Win32</title><content type='html'>&lt;i&gt;newLISP is a Lisp-like, general-purpose scripting language. It has all the magic of traditional Lisp but is easier to learn and use. newLISP is friendly, fast, and small. Most of the functions you will ever need are already built in. newLISP runs on most operating systems.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;newLISP is a LISP-like scripting language for doing things you typically do with scripting languages: programming for the internet, system administration, text processing, gluing other programs together, etc. newLISP is a scripting LISP for people who are fascinated by LISP's beauty and power of expression, but who need it stripped down to easy-to-learn essentials. newLISP is small on resources like disk space and memory but has a deep, practical API. &amp;nbsp;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;Source: &lt;a href="http://www.newlisp.org/"&gt;http://www.newlisp.org/&lt;/a&gt;&lt;/i&gt;&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-1801946206969664654?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/1801946206969664654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=1801946206969664654' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1801946206969664654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1801946206969664654'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/newlisp-for-mac-os-x-gnu-linux-unix-and.html' title='newLISP® for Mac OS X, GNU Linux, Unix and Win32'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-338420343982457699</id><published>2010-03-06T22:16:00.000-08:00</published><updated>2010-03-06T22:16:57.146-08:00</updated><title type='text'>What is eLua?</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;div&gt;&lt;i&gt;eLua stands for Embedded Lua and the project aims to offer the full implementation of the Lua Programming Language to the embedded world. (...)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Why Lua? Extremely well crafted, Lua is the perfect example of a minimal, yet fully functional language. Although generally advertised as a "scripting language" (and used accordingly especially in the game industry), it is also fully capable of running stand-alone programs and web services (ex: Adobe Lightroom, World of Warcraft, ...). Its limited resource requirements make it suitable to a lot of microcontroller families. The intrinsic high portability of the original Lua code (which is ANSI C and runs virtually on every platform), combined with the highly portable software architecture of eLua, allow for easy porting of the project to a large variety of architectures. The peripheral access libraries/modules exported by eLua are also portable by design, so one could run a Lua program (without or with very few modifications) on every eLua supported platform. This brings an unprecedent level of portability to the embedded aplications world. eLua inherits the minimalistic and functional design of Lua, staying in line with the well known KISS, Keep It Small and Simple philosophy.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;The aim of the project is to have a fully functional Lua development environment on the microcontroller itself, without the need to install a specific development environment on the PC side, other than a serial or ehternet console/terminal emulator.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;We can't end this short presentation without presenting our project motto: No matter what you do with eLua, always remember to have Fun with it :)&lt;/i&gt;&amp;nbsp;- Source:&amp;nbsp;&lt;a href="http://www.eluaproject.net/en_overview.html#whatis"&gt;http://www.eluaproject.net/en_overview.html#whatis&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-338420343982457699?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/338420343982457699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=338420343982457699' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/338420343982457699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/338420343982457699'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/03/what-is-elua.html' title='What is eLua?'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-7258530401945026979</id><published>2010-02-22T15:12:00.000-08:00</published><updated>2010-02-22T15:12:45.685-08:00</updated><title type='text'>Computer Systems: A Programmer's Perspective</title><content type='html'>Contrary to popular opinion, a real programmer understands how a computer works: from hardware to web services. Hardware components, binary code, assembly, preprocessors, linkers, compilers, virtual machines, programming paradigms and languages, OOP, etc. A real programmer is constantly studying computer languages to the bare metal.&lt;br /&gt;&lt;br /&gt;The problem is that the mindset of a programmer is different, so it would be wonderful to have a good manual specially tailored for him.&amp;nbsp;Fortunately, that book exists:&amp;nbsp;&lt;a href="http://www.amazon.com/Computer-Systems-Programmers-Perspective-2nd/dp/0136108040/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1266878934&amp;amp;sr=8-1"&gt;Computer Systems: A Programmer's Perspective&lt;/a&gt;, written by Randal E. Bryant and David R O'Hallaron is really great.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;From the Back Cover:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;This book is for programmers who want to write faster and more reliable programs. By learning how programs are mapped onto the system and executed, readers will better understand why programs behave the way they do and how inefficiencies arise. Computer systems are viewed broadly, comprising processor and memory hardware, compiler, operating system, and networking environment. With its programmer's perspective, readers can clearly see how learning about the inner workings of computer systems will help their further development as computer scientists and engineers. It also helps prepare them for further study in computer architecture, operating systems, compilers, and networking.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;Topics include: data representations, machine-level representations of C programs, processor architecture, program optimization, memory hierarchy, linking, exceptional control flow, virtual memory and memory management, system-level 1/O, network programming, and concurrent programming. The coverage focuses on how these areas affect application and system programmers. For example, when covering data representations, it considers how the finite representations used to represent numbers can approximate integer and real numbers, but with limitations that must be understood by programmers. When covering caching, it discusses how the ordering of loop indices in matrix code can affect program performance. When covering networking, it describes how a concurrent server can efficiently handle requests from multiple clients.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;The book is based on Intel-compatible (IA32) machines executing C programs on Unix or related operating systems such as Linux. Some familiarity with C or C++ is assumed, although hints are included to help readers making the transition from Java to C.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;A complete set of resources, including labs and assignments, lecture notes, and code examples are available via the book's Web site at csapp.cs.cmu.edu.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-7258530401945026979?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/7258530401945026979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=7258530401945026979' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/7258530401945026979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/7258530401945026979'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/02/computer-systems-programmers.html' title='Computer Systems: A Programmer&apos;s Perspective'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-5793971843919846862</id><published>2010-02-19T17:46:00.000-08:00</published><updated>2010-02-19T17:50:54.636-08:00</updated><title type='text'>Self programming language gaining momentum</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://selflanguage.org/_static/self.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://selflanguage.org/_static/self.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Just as Xerox never understood Smalltalk, I think Sun never understood Smalltalk and Self. I imagine that there are people who fear simple, powerful open systems like these and just like to hide the power from the user.&lt;br /&gt;&lt;br /&gt;So it's nice to see that some of the best software technologies out there, funded by academia and big corporations but left behind by their marketing campaigns, are gaining attention by the community.&lt;br /&gt;&lt;br /&gt;One of the most incredible programming languages is &lt;a href="http://selflanguage.org/"&gt;Self&lt;/a&gt;, where everything is an object and there are no classes at all. &lt;br /&gt;&lt;br /&gt;There's a &lt;a href="http://docs.selflanguage.org/"&gt;nice manual&lt;/a&gt; and &lt;a href="http://selflanguage.org/download/index.html"&gt;versions for Mac OS, Sparc Solaris and Linux&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Also there's &lt;a href="http://kleinvm.sourceforge.net/"&gt;Klein&lt;/a&gt;, a new virtual machine under development and some &lt;a href="http://research.sun.com/self/papers/papers.html"&gt;great research papers&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-5793971843919846862?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/5793971843919846862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=5793971843919846862' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/5793971843919846862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/5793971843919846862'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/02/self-programming-language-gaining.html' title='Self programming language gaining momentum'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-1203482737058620753</id><published>2010-02-12T17:12:00.000-08:00</published><updated>2010-02-12T17:12:30.958-08:00</updated><title type='text'>Simply the best?</title><content type='html'>Canol Gökel's book, &lt;a href="http://www.canol.info/books/computer_programming_using_gnu_smalltalk/computer_programming_using_gnu_smalltalk.zip"&gt;Computer Programming using GNU Smalltalk&lt;/a&gt;, might well be the single best way to start learning computer programming.&lt;br /&gt;&lt;br /&gt;Why Smalltalk? Because it's the original, clean and pure way to learn Object Oriented Programming (OOP). Smalltalk's philosophy clears the way to good programming practices in other languages.&lt;br /&gt;&lt;br /&gt;Why Canol's book? Because it seems to be the most clear and easy way to dive into programming.&lt;br /&gt;&lt;br /&gt;And why GNU Smalltalk? It makes you concentrate in the language, not the interface.&lt;br /&gt;&lt;br /&gt;You might want to step later to &lt;a href="http://www.pharo-project.org/"&gt;Pharo&lt;/a&gt; and learn the beauty of a Smalltalk graphical environment, or see Seaside, the most powerful web framework out there, pre-installed in &lt;a href="http://www.seaside.st/download/pharo"&gt;Seaside One-Click Experience&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-1203482737058620753?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/1203482737058620753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=1203482737058620753' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1203482737058620753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1203482737058620753'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/02/simply-best.html' title='Simply the best?'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-6680858096053117502</id><published>2010-02-12T17:02:00.000-08:00</published><updated>2010-02-12T17:02:24.799-08:00</updated><title type='text'>Reinventing with incremental changes</title><content type='html'>Some wisdom of Pharo, the Squeak fork:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #74706f; font-family: 'Helvetica Neue', Arial, Helvetica, Geneva, sans-serif; font-size: 17px; line-height: 23px;"&gt;«&lt;i&gt;There is an important aspect behind Pharo: we want to make sure that Pharo is not a copy of the past but really a reinvention of Smalltalk. Now big-bang approaches rarely succeed. We will really favor evolutionary and incremental changes. We want to be able to experiment with important new features or libraries. For example, we need a new file library but that's unlikely to happen in a day. Evolution means that we accept mistakes, we are not aiming for the next perfect solution in one big step -- even if we would love it. We will favor small incremental changes but a multitude of them. We will pay attention to your submissions to improve the system.&lt;/i&gt;» - &lt;a href="http://www.pharo-project.org/about"&gt;More...&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-6680858096053117502?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/6680858096053117502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=6680858096053117502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6680858096053117502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6680858096053117502'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/02/reinventing-with-incremental-changes.html' title='Reinventing with incremental changes'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-3981138292914891755</id><published>2010-01-10T15:33:00.000-08:00</published><updated>2010-01-10T22:55:35.927-08:00</updated><title type='text'>The narrow vision of today's open source webmail applications</title><content type='html'>Open source is open source, there's the good, the bad, the pretty and the ugly.&lt;br /&gt;&lt;br /&gt;Meanwhile, desktop email is almost dead. Long live webmail. For several reasons - system failure, easy access, etc. - people want a googl... sorry, good web mail app.&lt;br /&gt;&lt;br /&gt;As I was evaluating some open source web mail apps, I just couldn't understand what kind of mindset some programmers live in.&lt;br /&gt;&lt;br /&gt;Is it by tradition, those conservative, outdated decisions? Or just because it's volunteer work so it lags in the timeline? You see, a modern web mail system must:&lt;br /&gt;&lt;br /&gt;1. Integrate a spam blocker like spamassassin with the user contact lists (that is, never classify as spam a message whose sender the user added to the contact list)&lt;br /&gt;&lt;br /&gt;2. Allow for a message to be classified as spam or not spam, and influence the spam blocker software behavior&lt;br /&gt;&lt;br /&gt;3. Have spam mail delivered directly to a Spam folder&lt;br /&gt;&lt;br /&gt;4. Allow, out of the box, simple login formality (forget usernames as user.domain or user@domain.com...)&lt;br /&gt;&lt;br /&gt;5. Etc.&lt;br /&gt;&lt;br /&gt;It seems that it's hard to have this working with some of the most konwn webmail open source options. That's why I - a programmer but also a marketing guy - had two options: to spend days tweaking linux or to recommend and help my customers moving to&amp;nbsp;Google Apps (professional Gmail). Some of them will be using Roundcube, which seems to be the best, and for critical businesses there's Gmail.&lt;br /&gt;&lt;br /&gt;It's sad to envision a future where the world shows half a dozen of huge internet companies and almost none of innovation. I still believe in widespread innovation, but it's getting harder as time goes by.&lt;br /&gt;&lt;br /&gt;And I certainly dismiss the idea of having second-grade amateur software messing with my agenda.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-3981138292914891755?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/3981138292914891755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=3981138292914891755' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/3981138292914891755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/3981138292914891755'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2010/01/narrow-vision-of-todays-open-source.html' title='The narrow vision of today&apos;s open source webmail applications'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-6855941299629364946</id><published>2009-12-31T19:56:00.000-08:00</published><updated>2009-12-31T19:56:17.893-08:00</updated><title type='text'>Values and Change - Clojure's approach to Identity and State.</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://clojure.org/space/showimage/clojure-icon.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://clojure.org/space/showimage/clojure-icon.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Some goods points about the difference between programming languages when it comes to the changing reality seen from the perspective of an imperative language versus Clojure's different view of the world.&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;We need to move away from a notion of state as "the content of this memory block" to one of "the value currently associated with this identity". Thus an identity can be in different states at different times, but the state itself doesn't change. That is, an identity is not a state, an identity has a state. Exactly one state at any point in time. And that state is a true value, i.e. it never changes. If an identity appears to change, it is because it becomes associated with di&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;fferent state values over time. This is the Clojure model.&lt;/i&gt;&lt;/span&gt;&lt;/i&gt;&lt;/blockquote&gt;Clojure is Lisp Reloaded running on a Java Virtual Machine.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://clojure.org/state"&gt;Read more...&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-6855941299629364946?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/6855941299629364946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=6855941299629364946' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6855941299629364946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6855941299629364946'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2009/12/values-and-change-clojures-approach-to.html' title='Values and Change - Clojure&apos;s approach to Identity and State.'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-1612792494773110666</id><published>2009-12-17T16:57:00.000-08:00</published><updated>2009-12-17T16:57:42.684-08:00</updated><title type='text'>Smalltalk, Ruby, Self and Java: the common history</title><content type='html'>A wonderful &lt;a href="http://itc.conversationsnetwork.org/shows/detail3432.html#"&gt;talk&lt;/a&gt; by Avy Bryant, creator of Seaside, and some &lt;a href="http://research.sun.com/self/papers/papers.html"&gt;research documents&lt;/a&gt; that were the basis for the creation of the Java programming language.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-1612792494773110666?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/1612792494773110666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=1612792494773110666' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1612792494773110666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1612792494773110666'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2009/12/smalltalk-ruby-self-and-java-common.html' title='Smalltalk, Ruby, Self and Java: the common history'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-5540861561629399744</id><published>2009-11-03T16:51:00.000-08:00</published><updated>2009-11-03T16:51:03.168-08:00</updated><title type='text'>Computer language popularity: TIOBE Programming Community Index</title><content type='html'>If you're a programmer and invest thousands of hours learning a new language, you might better check the tendencies and see if you're in the right way. Some good language popularity index like &lt;a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html"&gt;TIOBE&lt;/a&gt; is nice to see how things are going.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-5540861561629399744?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/5540861561629399744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=5540861561629399744' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/5540861561629399744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/5540861561629399744'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2009/11/computer-language-popularity-tiobe.html' title='Computer language popularity: TIOBE Programming Community Index'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-1380565803211018967</id><published>2009-11-02T15:25:00.000-08:00</published><updated>2009-11-02T15:25:01.422-08:00</updated><title type='text'>The Complete Guide to Google Wave</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_uSNjah9XxzA/Su9qI5cBw9I/AAAAAAAAAPI/K6l9kF3OprU/s1600-h/Thecompleteguidetogooglewavecover01.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_uSNjah9XxzA/Su9qI5cBw9I/AAAAAAAAAPI/K6l9kF3OprU/s320/Thecompleteguidetogooglewavecover01.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;big&gt;&lt;b&gt;&lt;a class="external text" href="http://completewaveguide.com/" title="http://completewaveguide.com"&gt;«The Complete Guide to Google Wave&lt;/a&gt; is a comprehensive user manual by &lt;a class="external text" href="http://ginatrapani.org/" title="http://ginatrapani.org"&gt;Gina Trapani&lt;/a&gt; with &lt;a class="external text" href="http://adampash.com/" title="http://adampash.com"&gt;Adam Pash&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;/big&gt; &lt;br /&gt;&lt;a class="external text" href="http://wave.google.com/" title="http://wave.google.com"&gt;Google Wave&lt;/a&gt; is a new web-based collaboration tool that's notoriously &lt;a class="external text" href="http://easiertounderstandthanwave.com/" title="http://easiertounderstandthanwave.com/"&gt;difficult to understand&lt;/a&gt;. This guide will help. Here you'll learn how to use Google Wave to get things done with your group. Because Wave is such a new product that's evolving quickly, this guidebook is a work in progress that will update in concert with Wave as it grows and changes. Read more &lt;a href="http://completewaveguide.com/guide/About_The_Complete_Guide_to_Google_Wave" title="About The Complete Guide to Google Wave"&gt;about The Complete Guide to Google Wave&lt;/a&gt;» &lt;br /&gt;&lt;a href="" id="Table_of_Contents" name="Table_of_Contents"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-1380565803211018967?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/1380565803211018967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=1380565803211018967' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1380565803211018967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1380565803211018967'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2009/11/complete-guide-to-google-wave.html' title='The Complete Guide to Google Wave'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_uSNjah9XxzA/Su9qI5cBw9I/AAAAAAAAAPI/K6l9kF3OprU/s72-c/Thecompleteguidetogooglewavecover01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-6151013463379739779</id><published>2009-10-24T17:29:00.000-07:00</published><updated>2009-10-24T17:29:24.979-07:00</updated><title type='text'>Easy introduction to jQuery</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_uSNjah9XxzA/SuObnKby9VI/AAAAAAAAAOo/9cZZ_nocfRk/s1600-h/jquery.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_uSNjah9XxzA/SuObnKby9VI/AAAAAAAAAOo/9cZZ_nocfRk/s320/jquery.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://jquery.com/"&gt;JQuery&lt;/a&gt; came to save us from the DOM doom. If you're a Javascript programmer and you don't know what jQuery is, you never saw the light. &lt;br /&gt;&lt;br /&gt;A simple way to get your feet wet is to see a &lt;a href="http://marcgrabanski.com/article/jquery-essentials-presentation-minnewebcon"&gt;nice presentation by Mark Grabanski&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-6151013463379739779?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/6151013463379739779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=6151013463379739779' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6151013463379739779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6151013463379739779'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2009/10/easy-introduction-to-jquery.html' title='Easy introduction to jQuery'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_uSNjah9XxzA/SuObnKby9VI/AAAAAAAAAOo/9cZZ_nocfRk/s72-c/jquery.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-2072565502198435289</id><published>2009-10-23T13:19:00.000-07:00</published><updated>2009-10-23T13:19:37.980-07:00</updated><title type='text'>An Idea for Youtube evolution</title><content type='html'>Small video snippets that can easily be integrated in conversations. Just like emoticons, but the user could choose the start and end of any existing youtube video and incorporate in his message in a much smaller size.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-2072565502198435289?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/2072565502198435289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=2072565502198435289' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/2072565502198435289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/2072565502198435289'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2009/10/idea-for-youtube-evolution.html' title='An Idea for Youtube evolution'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-2935408553537544214</id><published>2009-10-10T09:49:00.000-07:00</published><updated>2009-10-10T09:49:24.865-07:00</updated><title type='text'>SAPO Codebits 2009</title><content type='html'>Lisbon, Portugal. 3 days. 24 hours a day. 600 attendees. Talks. Workshops. Lots of food and beverages. 24 hour programming/hacking competition. Quizz Show. Rock Band Contest. Lots of gaming consoles. More food. More beverages. More coding. Sleeping areas. More fun. An unforgettable experience.&lt;br /&gt;&lt;br /&gt;Oh, did we mention attendance is free? You need only to register and get approved for the event.&lt;br /&gt;&lt;br /&gt;Stay tuned with the blog to hear about the speakers we're getting to this event and all the stuff we're preparing for you.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://codebits.eu/"&gt;More...&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-2935408553537544214?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/2935408553537544214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=2935408553537544214' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/2935408553537544214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/2935408553537544214'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2009/10/sapo-codebits-2009.html' title='SAPO Codebits 2009'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-3026997427082881155</id><published>2009-09-27T07:51:00.001-07:00</published><updated>2009-09-27T07:51:18.148-07:00</updated><title type='text'>Java problems? Take a look at Scala</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;If you feel like Java is too verbose and old fashioned, you should see Scala.&lt;br/&gt;&lt;p&gt;&lt;i&gt;Scala is a general purpose programming language designed to express&lt;br /&gt;common programming patterns in a concise, elegant, and type-safe way.&lt;br /&gt;It smoothly integrates features of object-oriented and functional&lt;br /&gt;languages, enabling Java and other programmers to be more&lt;br /&gt;productive. Code sizes are typically reduced by a factor of two to&lt;br /&gt;three when compared to an equivalent Java application.&lt;/i&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;i&gt;Many existing companies who depend on Java for business critical&lt;br /&gt;applications are turning to Scala to boost their development&lt;br /&gt;productivity, applications scalability and overall reliability. &lt;br/&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;For example, at &lt;a href='http://twitter.com/' class='ext'&gt;Twitter&lt;/a&gt;,&lt;br /&gt;the social networking service, Robey Pointer moved their core message&lt;br /&gt;queue from Ruby to Scala. This change was driven by the companies need&lt;br /&gt;to reliably scale their operation to meet fast growing Tweet rates,&lt;br /&gt;already reaching &lt;a href='http://blog.metaroll.com/2009/01/22/almost-5000-tweets-per-minute-during-obamas-inauguration/' class='ext'&gt;5000 per minute during the Obama Inauguration&lt;/a&gt;. Robeys thinking behind the &lt;a href='http://blog.twitter.com/2009/01/building-on-open-source.html' class='ext'&gt;Twitter Kestrel project&lt;/a&gt; is explained in the developers &lt;a href='http://robey.livejournal.com/53832.html' class='ext'&gt;live journal&lt;/a&gt;. His concise &lt;a href='http://github.com/robey/kestrel/tree/master' class='ext'&gt;1500 lines of Scala code&lt;/a&gt; can be seen as he has generously made  them available as an open source project.&lt;/i&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;i&gt;Many top-notch programmers and industry leaders have already been&lt;br /&gt;captivated by Scala. They have become quite vocal encouraging others,&lt;br /&gt;creating a growing range of &lt;a href='http://www.scala-lang.org/node/959'&gt;books on Scala&lt;/a&gt; and an almost endless supply of tips for Java programmers new to Scala, some of which are collected in &lt;a href='http://www.scala-lang.org/node/960'&gt;"Java to Scala with the help of experts"&lt;/a&gt;. While here on the scala-lang site, there is a broad range of material too, from &lt;a href='http://www.scala-lang.org/docu/files/ScalaTutorial.pdf#'&gt;introductory Scala tutorials&lt;/a&gt; to &lt;a href='http://www.scala-lang.org/node/143'&gt;advanced language research topics&lt;/a&gt;, or look at some &lt;a href='http://www.scala-lang.org/node/219'&gt;Scala code examples&lt;/a&gt;, or just get started by &lt;a href='http://www.scala-lang.org/downloads#api'&gt;installing Scala&lt;/a&gt; now. &lt;/i&gt;&lt;/p&gt;&lt;br /&gt;&lt;h2 id='SeamlessintegrationwithJava'&gt;&lt;i&gt;Seamless integration with Java&lt;/i&gt;&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;&lt;i&gt;Existing Java code and programmer skills are fully re-usable. Scala&lt;br /&gt;programs run on the Java VM, are byte code compatible with Java so you&lt;br /&gt;can make full use of existing Java libraries or existing application&lt;br /&gt;code. You can call Scala from Java and you can call Java from Scala,&lt;br /&gt;the integration is seamless. Moreover, you will be at home with&lt;br /&gt;familiar development tools, &lt;a href='http://www.scala-lang.org/node/91#ide_plugins'&gt;Eclipse, NetBeans or Intellij&lt;/a&gt;&lt;br /&gt;for example, all of which support Scala. It does not take long to&lt;br /&gt;become an effective Scala programmer when you are half way there&lt;br /&gt;already!&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;small&gt;(from the Scala website)&lt;/small&gt;&lt;i&gt;&lt;br/&gt;&lt;/i&gt;&lt;/p&gt;&lt;br /&gt;Some resources:&lt;br/&gt;&lt;a href='http://video.google.com/videoplay?docid=553859542692229789#docid=6469485006686878021'&gt;Scala presentation (streaming)&lt;/a&gt;&lt;br/&gt;&lt;a href='http://www.scala-lang.org/'&gt;Scala web site&lt;/a&gt;&lt;br/&gt;&lt;a href='http://en.wikipedia.org/wiki/Scala_%28programming_language%29'&gt;Scala entry at Wikipedia&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-3026997427082881155?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/3026997427082881155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=3026997427082881155' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/3026997427082881155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/3026997427082881155'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2009/09/java-problems-take-look-at-scala.html' title='Java problems? Take a look at Scala'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-2568380535845023498</id><published>2009-08-23T13:48:00.001-07:00</published><updated>2009-08-23T13:48:53.071-07:00</updated><title type='text'>StrongTalk: the quest for the lost code</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I knew that Java had been created with strong influence of Smalltalk. "Write once, run everywhere" was the brilliant slogan for something completely new - programmers were free from the hassle of making versions of their code to suit several operating systems. However, that "novelty" was known 20 years before - Smalltalk was implementing this in a more elegant fashion since the 70's. In the nineties, a group of programmers in a startup company were secretly creating a better Smalltalk when, suddenly, their activity was ceased.&lt;br/&gt;&lt;br/&gt;Programming History geeks might love to know this:&lt;br/&gt;&lt;i&gt;&lt;br/&gt;«The Strongtalk system was developed in secret in the mid-90's by a small startup company. Before the Strongtalk system could be released, the company was acquired by Sun Microsystems, Inc. to work on the Java® virtual machine. Development of Strongtalk was halted at that point, so very few people have ever had a chance to see the Strongtalk system in action. This is highly unfortunate, since Smalltalk is still a more elegant and advanced programming language than any existing mainstream programming language, and Strongtalk is by far the fastest implementation of Smalltalk ever.» &lt;/i&gt;&lt;a href='http://www.strongtalk.org/index.html'&gt;Read more...&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=c0912964-0c63-8f6e-a03f-7d92a094b540' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-2568380535845023498?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/2568380535845023498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=2568380535845023498' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/2568380535845023498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/2568380535845023498'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2009/08/strongtalk-quest-for-lost-code.html' title='StrongTalk: the quest for the lost code'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-8929226931585246474</id><published>2009-08-20T07:54:00.001-07:00</published><updated>2009-08-20T07:54:06.466-07:00</updated><title type='text'>Switch/break statements: broken logic?</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;As a programming languages user, watching the great newbie &lt;a href='http://webcast.berkeley.edu/course_details.php?seriesid=1906978343'&gt;Berkeley lectures on Java by Jonathan Shewchuck&lt;/a&gt;, I began to think thak computer languages basically perpetuate some bad unlogical traditions and one of them is the switch statement:&lt;br/&gt;&lt;br/&gt;&lt;b&gt;&lt;i&gt;switch (month) {&lt;br/&gt;&lt;br/&gt;   case 2:&lt;br/&gt;     days = 28;&lt;br/&gt;     break;&lt;br/&gt;&lt;br/&gt;   case 4:&lt;br/&gt;   case 6:&lt;br/&gt;   case 9:&lt;br/&gt;   case 11:&lt;br/&gt;      days = 30;&lt;br/&gt;      break;&lt;br/&gt;&lt;br/&gt;  default:&lt;br/&gt;    days = 31;&lt;br/&gt;}&lt;br/&gt;&lt;/i&gt;&lt;/b&gt;&lt;br/&gt;Why is there a "break" statement when common sense tells us that the next "case" or "default" just does the same? And why would I want to mess things up and let execution flow to the next "case" statement? And why so many "case" repetition when you could have them in the same line, like something like "case 4,6,9,11:"? Maybe some top-down approach to building a computer language should be useful. And maybe that's why there's &lt;a href='http://groovy.codehaus.org/'&gt;Groovy&lt;/a&gt; out there...&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=ada7ae69-71e4-81e5-b035-7d20c3ba69af' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-8929226931585246474?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/8929226931585246474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=8929226931585246474' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/8929226931585246474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/8929226931585246474'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2009/08/switchbreak-statements-broken-logic.html' title='Switch/break statements: broken logic?'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-5360269404012615079</id><published>2009-06-07T09:29:00.001-07:00</published><updated>2009-06-07T09:29:37.954-07:00</updated><title type='text'>HTML sucks. We need SVG.</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Web designers live in a daily struggle against what is essentially a broken platform: an HTML-based web. We know Microsoft hates SVG, but that's exactly what we need. SVG is open. SVG supports CSS and Javscript. It just needs links and web forms. Why W3C ignores it? Are they trying to please tradition, bureaucracy or just nurturing their own lack of vision?&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-5360269404012615079?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/5360269404012615079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=5360269404012615079' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/5360269404012615079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/5360269404012615079'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2009/06/html-sucks-we-need-svg.html' title='HTML sucks. We need SVG.'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-599807093807704584</id><published>2009-03-15T10:43:00.001-07:00</published><updated>2009-03-15T10:43:47.722-07:00</updated><title type='text'>Why was the web created?</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;a href='http://news.cnet.com/8301-10787_3-10195512-60.html'&gt;This article&lt;/a&gt; highlights the reasons behind the creation, exactly 20 years ago, of the World Wide Web. The fast rotation of people in CERN was causing the loss of precious knowledge that would leave the organization together with the owners of the respective brains! &lt;br/&gt;&lt;br/&gt;This actually is the principle of intrablogging: to register an organization mental activity, keeping knowledge inside the organisation and speeding up the integration of new people, who access this historical log to better integrate themselves:&lt;br/&gt;&lt;br/&gt;&lt;i&gt;"When two years is a typical length of stay, information is&lt;br /&gt;constantly being lost. The introduction of the new people demands a&lt;br /&gt;fair amount of their time and that of others before they have any idea&lt;br /&gt;of what goes on. The technical details of past projects are sometimes&lt;br /&gt;lost forever, or only recovered after a detective investigation in an&lt;br /&gt;emergency. Often, the information has been recorded, it just cannot be&lt;br /&gt;found.&lt;/i&gt;"&lt;br/&gt;&lt;br/&gt;The tough reality is that the majority of organizations are managed by pre-web generations who don't have a single idea of how to manage their own information.&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-599807093807704584?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/599807093807704584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=599807093807704584' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/599807093807704584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/599807093807704584'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2009/03/why-was-web-created.html' title='Why was the web created?'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-8567696146987927385</id><published>2009-03-14T19:39:00.001-07:00</published><updated>2009-03-14T19:39:55.944-07:00</updated><title type='text'>Freshmeat now fresh</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;New web design... «&lt;a href='http://www.freshmeat.net/'&gt;freshmeat &lt;/a&gt;maintains the Web's largest index of Unix and cross-platform  software, themes and related "eye-candy", and Palm OS software. Thousands of  applications, which are preferably released under an open source license, are  meticulously cataloged in the freshmeat database, and links to new  applications are added daily. Each entry provides a description of the  software, links to download it and to obtain more information, and a history  of the project's releases, so readers can keep up-to-date on the latest  developments.»&lt;/p&gt;   &lt;p&gt;«Freshmeat is the first stop for Linux users hunting for the  software they need for work or play. It is continuously updated with the  latest developments from the "release early, release often" community. In  addition to providing news on new releases, freshmeat offers a variety of  original content on technical, political, and social aspects of software and  programming, written by both freshmeat readers and Free Software luminaries.  The comment board attached to each page serves as a home for spirited  discussion, bug reports, and technical support. An essential resource for  serious developers, freshmeat.net makes it possible to keep up on who's doing  what, and what everyone else thinks of it.»&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-8567696146987927385?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/8567696146987927385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=8567696146987927385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/8567696146987927385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/8567696146987927385'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2009/03/freshmeat-now-fresh.html' title='Freshmeat now fresh'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-963840652057208086</id><published>2009-03-14T19:36:00.001-07:00</published><updated>2009-03-14T19:36:25.314-07:00</updated><title type='text'>Pixel Image Editor</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;img src='http://lh6.ggpht.com/_uSNjah9XxzA/SbxpgAEl_eI/AAAAAAAAAKY/ptFmpxTg9yY/%5BUNSET%5D.jpg'/&gt;Just take a look at this amazing Photoshop alternative: &lt;a href='http://www.kanzelsberger.com/pixel/?page_id=12'&gt;Pixel &lt;/a&gt;is a RGB, CMYK and HDR image editing, photo retouching, graphics manipulating and animation program available for many operating systems formerly known as Pixel32. It is available for Windows, Linux, Linspire, MacOSX, BeOS, Zeta, QNX, MorphOS, FreeBSD, eComStation, OS/2, SkyOS and even old plain DOS, for both x86 and PowerPC architectures. It is often called as Photoshop alternative.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-963840652057208086?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/963840652057208086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=963840652057208086' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/963840652057208086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/963840652057208086'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2009/03/pixel-image-editor.html' title='Pixel Image Editor'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_uSNjah9XxzA/SbxpgAEl_eI/AAAAAAAAAKY/ptFmpxTg9yY/s72-c/%5BUNSET%5D.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-6592463872049991989</id><published>2009-02-07T14:15:00.001-08:00</published><updated>2009-02-07T14:15:46.962-08:00</updated><title type='text'>From Spaghetti to Semantic: The revenge of a user now in control</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Scene 1: This week a customer had all invoices zeroed by a popular accounting software from a prestigious international software company. Their tech support asked him for the data files for analysis and recovery, but my customer is not a computer technician - he had multiple data folders scattered across disks as the result of several software updates, in obscure proprietary formats.&lt;br/&gt;&lt;br/&gt;After a long tedious ping-pong over the "electric telephone" with customer support, he had to go out, buy a pen drive, get back to the office, save all the files he could stuff into the pen, then get out again into his car and travel to a neighbour city to deliver all the broken data to those enlightened couch potatoes who probably weren't using a remote desktop utility and were used to put customers at their service.&lt;br/&gt;&lt;br/&gt;This seems somewhat unreal but it happened this week here in the reasonably developed city of Porto, Portugal. &lt;br/&gt;&lt;br/&gt;Scene 2: I'm thinking about my personal data. Bookmarks are in Firefox, Internet Explorer and Safari. Time tracking data is in a freeware app, notes are kept in my outliner, have some contacts in Gmail, client data and task list are in a custom CRM in MySQL, holiday calendar is a piece of paper on the wall, more notes in text files, emails of former college mates in a distribution list at my personal website, and I remember that some contacts were left in my cell phone which were lost when I recently updated the mobile operating system. Meanwhile, my "Start" menu and "Documents" aren't anything but junk folders filled with advertising neat tricks.&lt;br/&gt;&lt;br/&gt;So, how do I relate a task with a national bank holiday, with a friend's birthday, and with a monthly payment to a supplier? How do I associate a contact with the respective customer data? How do I create a recurrent task and let my PC create my weekly agenda?&lt;br/&gt;&lt;br/&gt;The reality: I feel that software companies need a vision.&lt;br/&gt;&lt;br/&gt;Scene 3: The Revenge. I'm defining my own format to store my own data. Just a few character codes - no boring XML -, like * for meeting, + for agenda item, $ for cash income, w for pending payment, +m for recurrent monthly task, p for person (contact). Each line is an entry. For now, a small script will generate all sorts of reports, like time spent by month for each client, averages, etc.&lt;br/&gt;&lt;br/&gt;Scene 4: Epilogue. Now I feel that I control my data and will be able to leverage all those hidden relationships between different entries. I have simple text files that I can edit directly if case of a system failure, or have a simple software crunching all the data just as I need.&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-6592463872049991989?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/6592463872049991989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=6592463872049991989' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6592463872049991989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6592463872049991989'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2009/02/from-spaghetti-to-semantic-revenge-of.html' title='From Spaghetti to Semantic: The revenge of a user now in control'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-3396522598275571351</id><published>2009-01-31T08:49:00.000-08:00</published><updated>2009-01-31T08:53:16.183-08:00</updated><title type='text'>Digital slavery</title><content type='html'>I'm beginning to feel worried about all of this hype around social media like Twitter, Facebook, etc. We produce content. We consume advertising. They keep the money. History teaches us that the benefit goes to the promoters.&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://www.ccsr.cse.dmu.ac.uk/resources/general/ethicol/Ecv17no5.html"&gt;this article&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-3396522598275571351?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/3396522598275571351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=3396522598275571351' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/3396522598275571351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/3396522598275571351'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2009/01/digital-slavery.html' title='Digital slavery'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-8480710010395507713</id><published>2009-01-12T15:32:00.000-08:00</published><updated>2009-01-12T15:53:04.307-08:00</updated><title type='text'>Forbidden: You don't have permission to access / on this server.</title><content type='html'>Here's the solution. Paulo asked me what was going on with his new Ubuntu web server. Having apache.conf configured, he couldn't fetch any file from the web service. However, in the first place, this error means that the web servre is accepting connections and replying.&lt;br /&gt;&lt;br /&gt;So this "permission" error usually has to do with file permissions. He said that the web files were properly set up with chmod -R 755 /path/to/webroot and chown -R www-data:www-data /path/to/webroot, but even so there was no way to see his web site.&lt;br /&gt;&lt;br /&gt;After some chat, we solved the problem. &lt;span style="font-weight: bold;"&gt;The upper directories must at least be executable (chmod a+x dirname) so that Apache can access the files! That's logic...&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-8480710010395507713?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/8480710010395507713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=8480710010395507713' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/8480710010395507713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/8480710010395507713'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2009/01/forbidden-you-dont-have-permission-to.html' title='Forbidden: You don&apos;t have permission to access / on this server.'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-8011283485328704119</id><published>2008-12-20T13:57:00.001-08:00</published><updated>2008-12-20T13:57:24.066-08:00</updated><title type='text'>A Quick Introduction to C++ by Tom Anderson</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;i&gt;"If programming in Pascal is like being in a straightjacket, then programming in C is like playing with knives, and programming in C++ is like juggling chainsaws" - Anonymous&lt;/i&gt;&lt;br/&gt;&lt;br/&gt;&lt;i&gt;This note introduces some simple C++ concepts and &lt;u&gt;outlines a subset od C++ that is easier to lean and use than the full language&lt;/u&gt;. Although we originally wrote this note for explaining the C++ used in the Nachos Project, I believe it is useful to anyone learning C++.&lt;/i&gt; &lt;a href='http://www.cs.washington.edu/homes/tom/c++example/c++.pdf'&gt;Read all...&lt;/a&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-8011283485328704119?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/8011283485328704119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=8011283485328704119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/8011283485328704119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/8011283485328704119'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2008/12/quick-introduction-to-c-by-tom-anderson.html' title='A Quick Introduction to C++ by Tom Anderson'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-6183736204586382397</id><published>2008-12-20T10:19:00.001-08:00</published><updated>2008-12-20T10:19:31.434-08:00</updated><title type='text'>A Guide to Nachos Java Operating System</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;i&gt;The &lt;a href='http://inst.eecs.berkeley.edu/%7Ecs162/sp07/Nachos/walk/walk.html'&gt;Nachos&lt;/a&gt; instructional operating system, developed at Berkeley, was first tested on guinea pig students in 1992. The authors intended it to be a simple, yet realistic, project for undergraduate operating systems classes. Nachos is now in wide use.&lt;br/&gt;&lt;br/&gt;The original Nachos, written in a subset of C++ (with a little assembly), ran as a regular UNIX process. It simulated the hardware devices of a simple computer: it had a timer, a console, a MIPS R3000 processor, a disk, and a network link. In order to achieve reasonable performance, the operating system kernel ran natively, while user processes ran on the simulated processor. Because it was simulated, multiple Nachos instances could run on the same physical computer.&lt;/i&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-6183736204586382397?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/6183736204586382397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=6183736204586382397' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6183736204586382397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6183736204586382397'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2008/12/guide-to-nachos-java-operating-system.html' title='A Guide to Nachos Java Operating System'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-6524203404629948594</id><published>2008-12-18T17:10:00.001-08:00</published><updated>2008-12-18T17:10:24.311-08:00</updated><title type='text'>Why abstraction is so important in programming</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;a href='http://www.brpreiss.com/books/opus6/'&gt;Bruno R. Preiss&lt;/a&gt; does a great job explaining it:&lt;br/&gt;&lt;br/&gt;&lt;i&gt; «Abstraction can be thought of as &lt;b&gt;a mechanism for suppressing irrelevant details while at the same time emphasizing relevant ones&lt;/b&gt;. An important benefit of abstraction is that it makes it easier for the programmer to think about the problem to be solved. &lt;/i&gt;&lt;p&gt;&lt;i&gt; For example, &lt;u&gt;&lt;em&gt;procedural abstraction&lt;/em&gt;&lt;/u&gt; lets the software designer think about the actions to be performed without worrying about how those actions are implemented. Similarly, &lt;u&gt;&lt;em&gt;data abstraction&lt;/em&gt;&lt;/u&gt; lets the software designer think about the objects in a program and the interactions between those objects without having to worry about how those objects are implemented. &lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt; There are also many different &lt;em&gt;levels of abstraction&lt;/em&gt;. The lower the levels of abstraction expose more of the details of an implementation whereas the higher levels hide more of the details» &lt;/i&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-6524203404629948594?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/6524203404629948594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=6524203404629948594' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6524203404629948594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6524203404629948594'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2008/12/why-abstraction-is-so-important-in.html' title='Why abstraction is so important in programming'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-4967405199725562320</id><published>2008-12-03T13:26:00.001-08:00</published><updated>2008-12-03T13:35:54.033-08:00</updated><title type='text'>From dumbcase to smartcase</title><content type='html'>Have you ever got a text all written in uppercase? Awful, seems like written in a typewriter from the eighties!&lt;br /&gt;&lt;br /&gt;Most word processors just copy each other's functionality, not paying attention to what the users need. It would be very easy to add some sort of SmartCase option.&lt;br /&gt;&lt;br /&gt;So, here you see a more intelligent case script, that knows where to put the uppercase letters and lowercase letters:&lt;br /&gt;&lt;br /&gt;#!/usr/bin/php&lt;br /&gt;&lt;?php&lt;br /&gt;   &lt;br /&gt;    if (empty($argv[1])) die("file??");&lt;br /&gt;   &lt;br /&gt;    $a = file($argv[1]);&lt;br /&gt;   &lt;br /&gt;    $s_out = '';&lt;br /&gt;   &lt;br /&gt;    foreach ($a as $line)&lt;br /&gt;    {&lt;br /&gt;        $line = strtolower(trim($line));&lt;br /&gt;        $up = false;&lt;br /&gt;       &lt;br /&gt;        $i = strlen($line);&lt;br /&gt;       &lt;br /&gt;        for ($ii = 0; $ii &lt; $i; $ii++)&lt;br /&gt;        {&lt;br /&gt;            if ($char == '.' || $ii == 0) $up = true;&lt;br /&gt;           &lt;br /&gt;            $char = substr($line, $ii, 1);&lt;br /&gt;           &lt;br /&gt;            if ($up &amp;amp;&amp;amp; is_letter($char))&lt;br /&gt;            {&lt;br /&gt;                $s_out .= strtoupper($char);&lt;br /&gt;               &lt;br /&gt;                $up = false;&lt;br /&gt;               &lt;br /&gt;            } else {&lt;br /&gt;               &lt;br /&gt;                $s_out .= $char;&lt;br /&gt;            }&lt;br /&gt;           &lt;br /&gt;        }&lt;br /&gt;       &lt;br /&gt;        $s_out .= "\n";&lt;br /&gt;       &lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;    file_put_contents($argv[1], $s_out);&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;    function is_letter($c)&lt;br /&gt;    {&lt;br /&gt;        if (strpos('abcdefghijklmnopqrstuvwxyzçABCDEFGHIJKLMNOPQRSTUVWXYZÇáéíóúàèìòùÁÉÍÓÚÀÈÌÒÙ', $c) !== false) return true;&lt;br /&gt;       &lt;br /&gt;        return false;&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;?&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-4967405199725562320?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/4967405199725562320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=4967405199725562320' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/4967405199725562320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/4967405199725562320'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2008/12/from-dumbcase-to-smartcase.html' title='From dumbcase to smartcase'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-4402889561426744678</id><published>2008-11-29T10:58:00.000-08:00</published><updated>2008-11-29T11:02:41.150-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='email'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='antispam'/><title type='text'>Mailwasher: nice and easy spam blocker</title><content type='html'>Mail Washer is really good. It's a spam blocker software that classifies your email before it gets into your inbox.&lt;br /&gt;&lt;br /&gt;"MailWasher is free to use and won't ever expire. It works with Outlook, Outlook Express and every other email program. Use this powerful spam blocker software to effectively stop email spam. Discover the safe way to stop unwanted e-mails before they get to your computer.&lt;br /&gt;No gimmicks here, it is so easy to set up and use that you'll be managing your email like a pro in seconds. It can even be used as an effective privacy tool. I think you will find this to be the easiest, most effective way to manage your incoming e-mails and stop spam. You will be amazed at how quickly you will like using MailWasher. " - &lt;a href="http://www.mailwasher.net/"&gt;from the home page, here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-4402889561426744678?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/4402889561426744678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=4402889561426744678' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/4402889561426744678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/4402889561426744678'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2008/11/mailwasher-nice-and-easy-spam-blocker.html' title='Mailwasher: nice and easy spam blocker'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-4059187072105804978</id><published>2008-11-29T10:54:00.001-08:00</published><updated>2008-11-29T11:03:15.342-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>PHP arrays and float keys</title><content type='html'>PHP arrays are amazing. Basically you can associate keys to values in multiple levels without any problem. But be careful! If you use arrays having float numbers as keys, PHP will chop the fractional part. Instead of using array(123.4 =&gt; 10, 22.55 =&gt; 12), do array("123.4" =&gt; 10, "22.55" =&gt; 12), converting them to strings.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-4059187072105804978?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/4059187072105804978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=4059187072105804978' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/4059187072105804978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/4059187072105804978'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2008/11/php-arrays-and-float-keys.html' title='PHP arrays and float keys'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-5990497462001467533</id><published>2008-07-19T20:20:00.000-07:00</published><updated>2008-11-29T11:03:30.932-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><title type='text'>Let's meet at "Translate Server Error"</title><content type='html'>You know how machine translation works, but I got extremely surprised by this one: There is actually a &lt;a href="http://www.boingboing.net/2008/07/15/chinese-restaurant-c.html"&gt;chinese restaurant&lt;/a&gt; called "Translation Server Error".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-5990497462001467533?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/5990497462001467533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=5990497462001467533' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/5990497462001467533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/5990497462001467533'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2008/07/lets-meet-at-translate-server-error.html' title='Let&apos;s meet at &quot;Translate Server Error&quot;'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-417614177020992372</id><published>2008-07-19T18:36:00.000-07:00</published><updated>2008-11-29T11:03:40.923-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='system'/><title type='text'>Minix left University</title><content type='html'>&lt;div align="left"&gt;Minix, the tiny operating system created by &lt;a href="http://www.cs.vu.nl/~ast/"&gt;Andrew Tannenbaum&lt;/a&gt; for academic purposes and also the inspiration for Linux, turned itself towards the commercial &amp;amp; embedded arena. &lt;a href="http://www.minix3.org/"&gt;Minix3&lt;/a&gt; is an incredibly 3800-line small operating system that works in PC and embedded systems and is free to download, experiment and use.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Minix3's web site claims that it's a highly reliable, flexible, modular and safe operating system, and rather different from the previous versions. It's POSIX-compliant, with TCP/IP networking, X Windows system, 650 UNIX programs and it's multi-user. The source code is freely available.&lt;br /&gt;&lt;br /&gt;Tannenbaum is a reference and his works - with covers of colorful drawings, are available in virtually every bookstore.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-417614177020992372?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/417614177020992372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=417614177020992372' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/417614177020992372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/417614177020992372'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2008/07/minix-left-university.html' title='Minix left University'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-2030755380506379829</id><published>2008-07-19T18:26:00.000-07:00</published><updated>2008-11-29T11:03:53.349-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='antispam'/><title type='text'>New kid on the fight against spam block</title><content type='html'>Spam is one of the "evil doers" most evil deeds. For spam to end, people must stop buying "VLLAGR@" from those who steal our precious time and money.&lt;br /&gt;&lt;br /&gt;In the meantime, there's a new promise: &lt;a href="http://www.untangle.com/"&gt;Untangle - Free Spam Blocker&lt;/a&gt; - is a free solution to fight spam from our local networks. It's based on a server that processes all email and filters messages before they even get into our PCs. Their web site and product are extremely well designed from a visual standpoint. We hope it's a good weapon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-2030755380506379829?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/2030755380506379829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=2030755380506379829' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/2030755380506379829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/2030755380506379829'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2008/07/new-kid-on-fight-against-spam-block.html' title='New kid on the fight against spam block'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-4778432465810766149</id><published>2008-07-19T16:05:00.000-07:00</published><updated>2008-07-19T16:09:45.307-07:00</updated><title type='text'>Is Windows Vista a shopping mall?</title><content type='html'>Windows Vista users are surprised with a new addition to their Control Panel: MobileMe. &lt;span id="intelliTxt"&gt;A link to "MobileMe Preferences" has been appearing for those who have installed the latest Apple iTunes software, without any notification at all.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-4778432465810766149?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/4778432465810766149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=4778432465810766149' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/4778432465810766149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/4778432465810766149'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2008/07/is-windows-vista-shopping-mall.html' title='Is Windows Vista a shopping mall?'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-8565068777150984975</id><published>2008-05-06T05:07:00.000-07:00</published><updated>2008-05-06T05:12:11.591-07:00</updated><title type='text'>Pro-active cybersquatters??</title><content type='html'>Their creativity never stops. Now they give you a warm, friendly warning... &lt;br /&gt;&lt;br /&gt;From: sueliang &lt;br /&gt;To: xxxxxxxxxx&lt;br /&gt;Sent: Thursday, April 24, 2008 8:21 AM&lt;br /&gt;Subject: xxxxxxxxxx-Internet Domain Name&lt;br /&gt;&lt;br /&gt;Dear CEO,   &lt;br /&gt; &lt;br /&gt;We are XXXXXX Network Information &amp; Technology Co.Ltd which is one of the domain name registrant centres in China. We received a formal application from Napase Investment Co.Ltd on April 24, 2008. They applied to register the following domain names and Internet Key word:&lt;br /&gt; &lt;br /&gt;Internet Domain Name&lt;br /&gt; xxxxxxxxxx.biz     &lt;br /&gt; xxxxxxxxxx.cn     &lt;br /&gt; xxxxxxxxxx.com.cn     &lt;br /&gt; xxxxxxxxxx.hk     &lt;br /&gt; xxxxxxxxxx.info     &lt;br /&gt; xxxxxxxxxx.net.cn     &lt;br /&gt; xxxxxxxxxx.org.cn     &lt;br /&gt; xxxxxxxxxx.tw     &lt;br /&gt; xxxxxxxxxx.ws &lt;br /&gt; &lt;br /&gt;Internet Key Word&lt;br /&gt;  xxxxxxxxxx&lt;br /&gt; &lt;br /&gt;We are dealing with this matter these days. In order to solve the problem in a better way,we should confirm it with you. &lt;br /&gt;&lt;br /&gt;Please contact me as soon as possible.&lt;br /&gt; &lt;br /&gt;Best regards&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Sue&lt;br /&gt;&lt;br /&gt;XXXXXXX Network Information &amp; Technology Co.,Ltd&lt;br /&gt;Tel:+86-XXXXX-XXXXXXXX&lt;br /&gt;Fax:+86-XXXX-XXXXXXX &lt;br /&gt;Website：http://www.XXXXX.org.cn&lt;br /&gt;E-mail ：info@XXXXX.org.cn&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-8565068777150984975?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/8565068777150984975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=8565068777150984975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/8565068777150984975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/8565068777150984975'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2008/05/pro-active-cybersquatters.html' title='Pro-active cybersquatters??'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-7626691693368896020</id><published>2008-05-05T16:26:00.000-07:00</published><updated>2008-11-29T11:04:17.186-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='system'/><title type='text'>Human Version Control System</title><content type='html'>&lt;a href="http://bazaar-vcs.org/"&gt;Bazaar&lt;/a&gt;, from Canonical, is a friendly, fast, out-of-the-box, extensible distributed version control system. With the same "humanist" aproach as Ubuntu, it says that software should not be complex. And that's true...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-7626691693368896020?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/7626691693368896020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=7626691693368896020' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/7626691693368896020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/7626691693368896020'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2008/05/human-version-control-system.html' title='Human Version Control System'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-1661425593571081262</id><published>2008-01-23T14:17:00.000-08:00</published><updated>2008-01-23T14:19:52.027-08:00</updated><title type='text'>Calculate total, average and median of values in a text file</title><content type='html'>For those of you who don't like Excel, here's a PHP script that takes a txt file with values and calculates basic stats:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt; &lt;br /&gt; print "\n\nTotal, Average and Median of values in a text file\n------\n";&lt;br /&gt; &lt;br /&gt; if (empty($argv[1])) die ("Argument 1 must be a txt filename with list of numeric values (1 for each line)\n");&lt;br /&gt; &lt;br /&gt; $a_file = file($argv[1]);&lt;br /&gt; &lt;br /&gt; if (empty($a_file)) die ("No values found in " . $argv[1] . "...\n");&lt;br /&gt; &lt;br /&gt; // Clean data&lt;br /&gt; &lt;br /&gt; $a = array();&lt;br /&gt; &lt;br /&gt; foreach ($a_file as $k =&gt; $s) &lt;br /&gt; {&lt;br /&gt;  $s = str_replace(',', '.', trim($s));&lt;br /&gt;  &lt;br /&gt;  if ($s != '0') $a[] = (float) $s;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; $f_sum = array_sum($a);&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; print "Total: " . $f_sum . "\n";&lt;br /&gt; &lt;br /&gt; print "Average: " . $f_sum / count($a) . "\n";&lt;br /&gt; &lt;br /&gt; print "Number of values: " . count($a) . "\n";&lt;br /&gt; &lt;br /&gt; print "Median: " . median($a) . "\n";&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; function median($a)&lt;br /&gt; {&lt;br /&gt;  sort($a);&lt;br /&gt;  &lt;br /&gt;  $i_cnt = count($a);&lt;br /&gt;  &lt;br /&gt;  $i_middle = $i_cnt / 2;&lt;br /&gt;  &lt;br /&gt;  if ($i_middle % 2 == 0) $f_median = ($a[$i_middle - 1] + $a[$i_middle]) / 2;&lt;br /&gt;  &lt;br /&gt;  else $f_median = $a[$i_middle];&lt;br /&gt;  &lt;br /&gt;  return $f_median;&lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-1661425593571081262?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/1661425593571081262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=1661425593571081262' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1661425593571081262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1661425593571081262'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2008/01/calculate-total-average-and-median-of.html' title='Calculate total, average and median of values in a text file'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-2574352661083999506</id><published>2008-01-19T20:55:00.001-08:00</published><updated>2008-01-19T21:06:21.636-08:00</updated><title type='text'>How to build a computer</title><content type='html'>God gave NAND to Man and told him: «Go build a computer». Man asked: «How?». And God said: «One step at a time».&lt;br /&gt;&lt;br /&gt;That's the way professor Shimon Schocken starts his lecture. During a semester only, students will build a complete computer - from hardware to software - with the ability to play Space Invaders, Tetris and Snakes. All it begins with the NAND logical operator, that allows to generate the other operators, then the CPU, machine language, assembler, virtual machine, operating system, and finally, the applications.&lt;br /&gt;&lt;br /&gt;The MIT published the textbook, where you find 12 lessons that you can use along with a simulation software for Unix/Linux and Windows. So you really don't need to mess around with electronics.&lt;br /&gt;&lt;br /&gt;The book's website contains some chapters and the software to do it all. The truth is that the traditional education of computer science separates people from context. But some universities are adopting this textbook.&lt;br /&gt;&lt;br /&gt;See more:&lt;br /&gt;&lt;a href="http://video.google.com/videoplay?docid=2798405881160655115"&gt;Youtube presentation&lt;/a&gt;&lt;br /&gt;&lt;a href="http://video.google.com/videoplay?docid=7654043762021156507"&gt;Tech Talk at Google&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-2574352661083999506?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/2574352661083999506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=2574352661083999506' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/2574352661083999506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/2574352661083999506'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2008/01/how-to-build-computer.html' title='How to build a computer'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-5331736886978703560</id><published>2008-01-19T20:41:00.000-08:00</published><updated>2008-01-19T20:44:32.385-08:00</updated><title type='text'>How to fetch streaming video in Windows</title><content type='html'>Saving streaming video is a headache. I used to do it with Net Transport, but today I found &lt;a href="http://www.orbitdownloader.com/download.htm"&gt;Orbit&lt;/a&gt;, a free software. Seems great. Give it a try.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-5331736886978703560?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/5331736886978703560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=5331736886978703560' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/5331736886978703560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/5331736886978703560'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2008/01/how-to-fetch-streaming-video-in-windows.html' title='How to fetch streaming video in Windows'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-6035699612034542899</id><published>2008-01-19T20:28:00.001-08:00</published><updated>2008-01-19T20:36:43.962-08:00</updated><title type='text'>Free Alternative Windows</title><content type='html'>ReactOS is a promising project aimed to be a free replacement of the Windows operating system. I tried the ReactOS vmware image after not having any luck with the Live CD, and now I believe that soon we will see a lot of people dumping Windows. It's still alpha, but beta is coming. It looks great, it looks professional and it runs Firefox already. And it's sooo small. A great way to learn how an operating system works. &lt;a href="http://www.reactos.org/en/index.html"&gt;See the web site&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-6035699612034542899?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/6035699612034542899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=6035699612034542899' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6035699612034542899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6035699612034542899'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2008/01/free-alternative-windows.html' title='Free Alternative Windows'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-1570783789348882710</id><published>2008-01-19T20:17:00.000-08:00</published><updated>2008-01-19T20:47:46.495-08:00</updated><title type='text'>Basic statistics with a frequency range calculator</title><content type='html'>If you have a list of numeric values and need to group them into ranges and calculate the percentage of each range against the total, this PHP script I made might help you. MS Excel has a frequency function, but it's quirky, so here you go:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt; &lt;br /&gt; print "Frequency Range Calculator&lt;br /&gt; Usage: php frequency.php data.txt range.txt&lt;br /&gt; data.txt contains one value per line.\nrange.txt contains range data like this:&lt;br /&gt; 0-&gt;19.99&lt;br /&gt; 20-&gt;39.99&lt;br /&gt; 40-&gt;59.99&lt;br /&gt; Etc...\n\n";&lt;br /&gt; &lt;br /&gt; if (!empty($argv[1])) $a_input = file($argv[1]);&lt;br /&gt; else die ('Argument 1 must be a txt file with input data, one value per line');&lt;br /&gt; &lt;br /&gt; if (!empty($argv[2])) $a_ranges = file($argv[2]);&lt;br /&gt; else die ('Argument 2 must be a range data file.');&lt;br /&gt;&lt;br /&gt; // Clean data&lt;br /&gt; foreach ($a_input as $k =&gt; $v) &lt;br /&gt; {&lt;br /&gt;  $a_input[$k] = clean($v);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; // Prepare ranges&lt;br /&gt; foreach ($a_ranges as $k =&gt; $v)&lt;br /&gt; {&lt;br /&gt;  $a = explode('-&gt;', $v);&lt;br /&gt;&lt;br /&gt;  $a_ranges[$k] = array('from' =&gt; clean($a[0]), 'to' =&gt; clean($a[1]), 'frequency' =&gt; 0);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; $i_events = count($a_input); //Count data&lt;br /&gt;&lt;br /&gt; //Count frequencies&lt;br /&gt; foreach ($a_input as $v)&lt;br /&gt; {&lt;br /&gt;  foreach ($a_ranges as $k =&gt; $a)&lt;br /&gt;  {&lt;br /&gt;   if ($v &gt;= $a['from'] &amp;&amp; $v &lt;= $a['to'])&lt;br /&gt;   {&lt;br /&gt;    $a_ranges[$k]['frequency']++;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; // Frequency&lt;br /&gt; foreach ($a_ranges as $k =&gt; $a)&lt;br /&gt; {&lt;br /&gt;  $a_ranges[$k]['percent'] = ($a_ranges[$k]['frequency'] / $i_events) * 100;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; // Report&lt;br /&gt; $out = "Range\tFrequency\tPercent\r\n";&lt;br /&gt; &lt;br /&gt; foreach ($a_ranges as $a)&lt;br /&gt; {&lt;br /&gt;  $out .= $a['from'] . '-' . $a['to'] . "\t" . $a['frequency'] . "\t" . $a['percent'] . "\r\n";&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; $out .= 'Total events: ' . $i_events . "\r\n";&lt;br /&gt; &lt;br /&gt; file_put_contents('frequency.txt', $out);&lt;br /&gt;&lt;br /&gt; print $out;&lt;br /&gt; &lt;br /&gt; print "frequency.txt saved. Bye\n";&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; function clean($value)&lt;br /&gt; {&lt;br /&gt;  return (float) str_replace(',', '.', trim($value));&lt;br /&gt; }&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;So, "What's the Frequency, Kenneth?"...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-1570783789348882710?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/1570783789348882710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=1570783789348882710' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1570783789348882710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1570783789348882710'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2008/01/frequency-range-calculator.html' title='Basic statistics with a frequency range calculator'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-6089455755676848912</id><published>2008-01-17T16:14:00.000-08:00</published><updated>2008-01-17T16:15:46.706-08:00</updated><title type='text'>How to get a list of all directories in BASH</title><content type='html'>This gives you a list of all directories below your current directory:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;find . -type d&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-6089455755676848912?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/6089455755676848912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=6089455755676848912' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6089455755676848912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6089455755676848912'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2008/01/how-to-get-list-of-all-directories-in.html' title='How to get a list of all directories in BASH'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-8731757743009110908</id><published>2007-12-30T06:53:00.000-08:00</published><updated>2007-12-30T07:10:41.158-08:00</updated><title type='text'>Hack your mouse with PHP and Linux</title><content type='html'>Using your mouse for weird experiments is easy with PHP. Just do:&lt;br /&gt;&lt;br /&gt; $p = fopen('/dev/input/ts0', 'r'); // replace ts0 if you need to&lt;br /&gt; $i_read = 8;  &lt;br /&gt; while (true) {&lt;br /&gt;  $s = fread($p, $i_read);&lt;br /&gt;  for($i = 0; $i &lt; $i_read; $i++) print asc2bin($s[$i]) . " " . ord($s[$i]) . "\t";&lt;br /&gt;  print "\n";&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; // Source: http://www.phpfreaks.com/quickcode/ASCII-to-Binary-to-ASCII-Conversion-Functions/244.php&lt;br /&gt; function asc2bin($inputString, $byteLength=8)&lt;br /&gt; { &lt;br /&gt;  $binaryOutput = ''; &lt;br /&gt;  $strSize = strlen($inputString); &lt;br /&gt;  for($x=0; $x&lt;$strSize; $x++) &lt;br /&gt;  { &lt;br /&gt;   $charBin = decbin(ord($inputString{$x})); &lt;br /&gt;   $charBin = str_pad($charBin, $byteLength, '0', STR_PAD_LEFT); &lt;br /&gt;   $binaryOutput .= $charBin; &lt;br /&gt;  }&lt;br /&gt;  return $binaryOutput; &lt;br /&gt; } &lt;br /&gt;&lt;br /&gt;You're able to get several mouse inputs choosing the right /dev/input/ file.&lt;br /&gt;Have fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-8731757743009110908?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/8731757743009110908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=8731757743009110908' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/8731757743009110908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/8731757743009110908'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2007/12/hack-your-mouse-with-php-and-linux.html' title='Hack your mouse with PHP and Linux'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-1442713014486835600</id><published>2007-11-20T18:43:00.000-08:00</published><updated>2007-11-20T19:15:35.157-08:00</updated><title type='text'>Free book about Squeak</title><content type='html'>When I read about Alan Kay and Dan Ingalls, and what the wonderful team at Xerox PARC did in the seventies, I was amazed: those powerful ideas continue to change the world because many weren't implemented. So, once in a while I take a look at Squeak's website because I believe that Smalltalk is the most beautiful and influential computer language ever created and has a bright future ahead.&lt;br /&gt;&lt;br /&gt;I found a very interesting link to a great book, «&lt;a href="http://www.iam.unibe.ch/~scg/SBE/"&gt;Squeak by Example&lt;/a&gt;», by Andrew P. Black, Stéphane Ducasse, Oscar Nierstrasz, Damien Pollet with Damien Cassou and Marcus Denker. You can download the whole book in PDF format. It's new and very good.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-1442713014486835600?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/1442713014486835600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=1442713014486835600' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1442713014486835600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/1442713014486835600'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2007/11/free-book-about-squeak.html' title='Free book about Squeak'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-701043512215756657</id><published>2007-11-13T14:14:00.000-08:00</published><updated>2007-11-13T14:22:04.999-08:00</updated><title type='text'>Father of UNIX publicly released</title><content type='html'>I saw a bit of MULTIC's source code. This operating system was so powerful in the sixties that UNIX was a simplified version of it. Learn more at &lt;a href="http://www.kirps.com/web/main/_blog/all/mit-releases-the-sources-of-multics-the-father-of-unix.shtml"&gt;Jos Kirps' site&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-701043512215756657?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/701043512215756657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=701043512215756657' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/701043512215756657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/701043512215756657'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2007/11/father-of-unix-publicly-released.html' title='Father of UNIX publicly released'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-6428093751100819534</id><published>2007-11-13T14:01:00.001-08:00</published><updated>2007-11-13T14:06:41.837-08:00</updated><title type='text'>Access a Linux computer from Windows</title><content type='html'>I do not live without my Kubuntu box even when I'm on a Windows PC. Now I can access everything with Xming, a very useful app that connects through ssh and needs no virtualization. Check &lt;a href="http://www.freesoftwaremagazine.com/articles/run_any_gnu_linux_app_on_windows_without_any_virtualization?page=0%2C1"&gt;this story at Free Software Magazine&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-6428093751100819534?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/6428093751100819534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=6428093751100819534' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6428093751100819534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6428093751100819534'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2007/11/access-linux-computer-from-windows.html' title='Access a Linux computer from Windows'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-4275083709662782743</id><published>2007-10-25T11:40:00.000-07:00</published><updated>2007-10-25T11:52:29.956-07:00</updated><title type='text'>How to extract images from MS Word files</title><content type='html'>If your customer likes to send you lots of emails with images embedded in old MSWord files, don't waste time looking for an easy way - I took many hours to discover this: use &lt;a href="http://wvware.sourceforge.net/"&gt;wvWare &lt;/a&gt;command line tools like wvText. Example:&lt;br /&gt;&lt;br /&gt;wvText sourcefile.doc ./dummy.txt &lt;br /&gt;&lt;br /&gt;A simple bash script like this can automate image extraction:&lt;br /&gt;&lt;br /&gt;for FILE in ./*.doc&lt;br /&gt;do&lt;br /&gt;wvText $FILE ./dummy.txt&lt;br /&gt;done&lt;br /&gt;rm ./dummy.txt&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-4275083709662782743?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/4275083709662782743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=4275083709662782743' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/4275083709662782743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/4275083709662782743'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2007/10/how-to-extract-images-from-ms-word.html' title='How to extract images from MS Word files'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-5486932141239941173</id><published>2007-10-07T06:23:00.000-07:00</published><updated>2007-10-07T06:25:53.954-07:00</updated><title type='text'>So, you wanna make Linux Desktop apps?</title><content type='html'>A good start is Mono project's &lt;a href="http://www.mono-project.com/GtkSharpBeginnersGuide"&gt;GtkSharp tutorial page&lt;/a&gt;. With sample code and screencasts, you will become a linux geek in 21 days...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-5486932141239941173?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/5486932141239941173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=5486932141239941173' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/5486932141239941173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/5486932141239941173'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2007/10/so-you-wanna-make-linux-desktop-apps.html' title='So, you wanna make Linux Desktop apps?'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-6586800149595178315</id><published>2007-10-07T05:50:00.000-07:00</published><updated>2007-10-07T05:52:07.458-07:00</updated><title type='text'>Write fast C# code without .net with Vala</title><content type='html'>From &lt;a href="http://live.gnome.org/Vala"&gt;Vala website&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;"Many developers want to write GNOME applications and libraries in high-level programming languages but can't or don't want to use C# or Java for various reasons, so they are stuck with C without syntax support for the GObject type system. The Vala compiler allows developers to write complex object-oriented code rapidly while maintaining a standard C API and ABI and keeping the memory requirements low."&lt;br /&gt;&lt;br /&gt;"C# and Java libraries can't be used the same way as native GObject libraries from C and other languages and can't be accepted as part of the GNOME Platform. Managed applications also suffer from usually higher memory requirements which is not acceptable in some situations."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-6586800149595178315?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/6586800149595178315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=6586800149595178315' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6586800149595178315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6586800149595178315'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2007/10/write-fast-c-code-without-net-with-vala.html' title='Write fast C# code without .net with Vala'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-7291446845190141559</id><published>2007-08-18T07:50:00.000-07:00</published><updated>2007-08-18T07:52:25.845-07:00</updated><title type='text'>If programming languages were cars...</title><content type='html'>An update to an old series of jokes about &lt;a href="http://www.cs.caltech.edu/~mvanier/hacking/rants/cars.html"&gt;computer languages being like cars&lt;/a&gt;, by Mike Vanier. With some modern languages to the list.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-7291446845190141559?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/7291446845190141559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=7291446845190141559' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/7291446845190141559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/7291446845190141559'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2007/08/if-programming-languages-were-cars.html' title='If programming languages were cars...'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-6575295955709670071</id><published>2007-08-04T12:22:00.000-07:00</published><updated>2007-08-04T12:47:34.438-07:00</updated><title type='text'>Batch image processing with GIMP and Linux/PHP</title><content type='html'>&lt;a href="http://members.ozemail.com.au/~hodsond/dbp.html"&gt;David's Batch Processor&lt;/a&gt; is a very nice GIMP extension for image processing that automates a lot of boring tasks. Just download the source file, unzip it, type make and then make install. You must have libgimp2.0-dev installed. &lt;br /&gt;&lt;br /&gt;Next, restart GIMP as the same user. You'll find a new menu below Xtns to do things like: select multiple files, rotate images, blur, brightness, contrast, saturation adjustments with auto-levels,  relative and absolute image resizing, batch image crop tool, sharpen, batch rename image files, and several output options.&lt;br /&gt;&lt;br /&gt;If you use Linux/GNU with PHP, pdfimages and convert (ImageMagick) like me, you can also make your life a lot easier by making a few PHP scripts. Today, I created a very useful one - you just type the shell command and it resizes a whole directory tree of images for web publishing, extracting all PDF images along the way. It makes a "websized" directory in your Desktop with a tree structure like the original.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/php&lt;br /&gt;&lt;?php&lt;br /&gt;&lt;br /&gt; // File list to parse&lt;br /&gt; // Alpha version!!&lt;br /&gt; &lt;br /&gt; $s_files = shell_exec('find');&lt;br /&gt; $a_files = explode("\n", $s_files);&lt;br /&gt; foreach ($a_files as $k =&gt; $s)&lt;br /&gt; {&lt;br /&gt;  $s = substr($s, 1);&lt;br /&gt;  $s = trim($s);&lt;br /&gt;  $a_files[$k] = $s;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; // Prepare output directories&lt;br /&gt; $s_source_path = $_ENV['PWD'];&lt;br /&gt; $s_output_path = $_ENV['HOME'] . '/Desktop/websized';&lt;br /&gt; exec('cd $HOME/Desktop; rm -rf websized; mkdir websized');&lt;br /&gt; &lt;br /&gt; clone_tree($s_source_path, $s_output_path); // Clone directory structure&lt;br /&gt; &lt;br /&gt; foreach ($a_files as $s)&lt;br /&gt; {&lt;br /&gt;  $s_full_path = $_ENV['PWD'] . $s; // Full file path&lt;br /&gt;  if (file_exists($s_full_path))&lt;br /&gt;  {&lt;br /&gt;   $i = strrpos($s_full_path, '/'); // last "/" position&lt;br /&gt;   $s_dir = substr($s_full_path, 0, $i); // Source directory&lt;br /&gt;   $s_fn = substr($s_full_path, $i + 1); // Filename&lt;br /&gt;   $s_ext = extension($s_fn);&lt;br /&gt;   $s_file_output_path = $s_output_path . $s;&lt;br /&gt;  &lt;br /&gt;   print " s_full_path=$s_full_path\n s_source_path=$s_source_path\n s_output_path=$s_output_path\n i=$i\n s_dir=$s_dir\n s_fn=$s_fn\n s_ext=$s_ext\n s_file_output_path=$s_file_output_path\n";&lt;br /&gt;&lt;br /&gt;   if ($s_ext == 'pdf')&lt;br /&gt;   {&lt;br /&gt;    $s_pdf_path = $s_file_output_path . '_extract';&lt;br /&gt;    mkdir($s_pdf_path);&lt;br /&gt;    print "PDF extract: dir=$s_dir; fn=$s_fn; extract to $s_pdf_path\n";&lt;br /&gt;    system('cd "' . $s_dir . '";pdfimages -f 1 -l 9999 "' . $s_fn . '" "' . $s_pdf_path . '"');&lt;br /&gt;    system('cd "' . $s_pdf_path . '";convert -quality 95 *.ppm *.jpg; convert -quality 95 *.pbm *.jpg; rm ./*.pbm ./*.ppm');&lt;br /&gt;    &lt;br /&gt;   } elseif ($s_ext == 'jpg' || $s_ext == 'jpeg' || $s_ext == 'tif' || $s_ext == 'png' || $s_ext == 'bmp')&lt;br /&gt;   {&lt;br /&gt;    $s_file_output_path =  change_extension($s_file_output_path, 'jpg');&lt;br /&gt;    print "Converting to $s_file_output_path\n";&lt;br /&gt;    exec('convert -sharpen 10 "' . $s_full_path . '" -quality 95 +antialias -resize 550x550 "' . $s_file_output_path . '"');&lt;br /&gt;    print "\n\n";&lt;br /&gt;   } elseif (strlen($s_ext) &gt;= 2)&lt;br /&gt;   {&lt;br /&gt;    print "WARNING: file $s_full_path to be copied without modification\n";&lt;br /&gt;    copy($s_full_path, $s_file_output_path);&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; function clone_tree($s_source_path, $s_output_path)&lt;br /&gt; {&lt;br /&gt;  $s_files = shell_exec('cd "' . $s_source_path . '"; find');&lt;br /&gt;  $a_files = explode("\n", $s_files);&lt;br /&gt;  foreach ($a_files as $k =&gt; $s)&lt;br /&gt;  {&lt;br /&gt;   $s = substr($s, 1);&lt;br /&gt;   $s = trim($s);&lt;br /&gt;   $s = rtrim_until('/', $s); // Cut filename from path&lt;br /&gt;   if (!file_exists($s_output_path . $s)) &lt;br /&gt;   {&lt;br /&gt;    print "Creating directory " . $s_output_path . $s . "\n";&lt;br /&gt;    mkdir($s_output_path . $s, 0777,true);&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; function rtrim_until($s_search, $s)&lt;br /&gt; {&lt;br /&gt;  $i = strrpos($s, $s_search);&lt;br /&gt;  return substr($s, 0, $i);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; function change_extension($s, $s_new_extension)&lt;br /&gt; {&lt;br /&gt;  $s_dot_pos = strrpos($s, '.');&lt;br /&gt;  if ($s_dot_pos === false) return false;&lt;br /&gt;  return substr($s, 0, $s_dot_pos) . '.' . $s_new_extension;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; function extension($s_fn)&lt;br /&gt; {&lt;br /&gt;  $s_ext = strrchr($s_fn, '.');&lt;br /&gt;  return strtolower(substr($s_ext, 1));&lt;br /&gt; }&lt;br /&gt;?&gt;&lt;br /&gt; &lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-6575295955709670071?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/6575295955709670071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=6575295955709670071' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6575295955709670071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6575295955709670071'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2007/08/batch-tasks-with-gimp-and-php.html' title='Batch image processing with GIMP and Linux/PHP'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-3578983835740972813</id><published>2007-08-02T11:53:00.000-07:00</published><updated>2007-08-02T12:19:03.612-07:00</updated><title type='text'>PHP 6.0 changes</title><content type='html'>Here's a few links to help you know what is going to change. PHP is growing fast and you need to know if your code is prepared:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.corephp.co.uk/archives/19-Prepare-for-PHP-6.html"&gt;Core PHP&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blog.agoraproduction.com/index.php?/archives/19-Installing-PHP6-For-beginners.html"&gt;Installing PHP6 for beginners&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dotvoid.com/view.php?id=57"&gt;PHP 6 Overview&lt;/a&gt;&lt;br /&gt;&lt;a href="http://jero.net/articles/php6"&gt;Taking a look at PHP6&lt;/a&gt;&lt;br /&gt;&lt;a href="http://cvs.php.net/viewvc.cgi/php-src/NEWS?view=markup"&gt;PHP news file&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Some people is talking about PHP 6.0 &lt;a href="http://www.programmerstalk.net/thread981.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;See also the &lt;a href="http://php6dev.blogspot.com/"&gt;PHP6 Blog&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-3578983835740972813?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/3578983835740972813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=3578983835740972813' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/3578983835740972813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/3578983835740972813'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2007/08/php-60-changes.html' title='PHP 6.0 changes'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-3550363475312282494</id><published>2007-07-29T10:15:00.000-07:00</published><updated>2007-07-29T10:19:38.845-07:00</updated><title type='text'>Build a server with PHP</title><content type='html'>&lt;a href="http://www.chabotc.nl/phpsocketdaemon/"&gt;phpSocketDaemon&lt;/a&gt; seems to be a serious piece of software. The author says: «&lt;span style="font-style:italic;"&gt;This project came into existence while i was writing a new, ground breaking IRC chat web application.&lt;br /&gt;&lt;br /&gt;To deal with 1000's of concurrent, always on (comet aka hanging iframe) http (server) connections, and an equal amount of IRC client connections, plus being able to interpret and parse and delegate all the messages and events, i needed a very fast, stable, flexible and easy to use 'daemon' library for PHP.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-3550363475312282494?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/3550363475312282494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=3550363475312282494' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/3550363475312282494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/3550363475312282494'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2007/07/build-server-with-php.html' title='Build a server with PHP'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-6666469691462369928</id><published>2007-07-29T10:09:00.000-07:00</published><updated>2007-07-29T10:14:28.789-07:00</updated><title type='text'>Socket Programming made easy</title><content type='html'>Internet programming just got easier. Brian Hall published &lt;a href="http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html"&gt;this wonderful guide&lt;/a&gt; for network socket programming. Available in several formats.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-6666469691462369928?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/6666469691462369928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=6666469691462369928' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6666469691462369928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/6666469691462369928'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2007/07/socket-programming-made-easy.html' title='Socket Programming made easy'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1503340550471543545.post-7865425567046147078</id><published>2007-07-23T12:13:00.000-07:00</published><updated>2007-07-23T12:42:42.954-07:00</updated><title type='text'>UOS - Universal Object System - Good or bad?</title><content type='html'>I know there are object-oriented/object-relational database systems. But would it be good to use PHP to avoid SQL database structures and create a "universal object database"? Like, one ID column, a class name column and a serialized object... Sort of a "UOS - Universal Object System" or maybe a good name would be "RPS - Real Persistent Objects"... Here's a nice and basic object serialization example:&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;&lt;br /&gt;class freezer&lt;br /&gt;{&lt;br /&gt; var $s_shelf;&lt;br /&gt; &lt;br /&gt; function put($s_food)&lt;br /&gt; {&lt;br /&gt;  $this-&gt;s_shelf = $s_food;&lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; function get()&lt;br /&gt; {&lt;br /&gt;  return $this-&gt;s_shelf;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Put chicken&lt;br /&gt;&lt;br /&gt;$o_freezer = new freezer;&lt;br /&gt;&lt;br /&gt;$o_freezer-&gt;put("Chicken");&lt;br /&gt;&lt;br /&gt;file_put_contents('freezer.txt', serialize($o_freezer));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Get chicken&lt;br /&gt;&lt;br /&gt;$o_freezer2 = unserialize(file_get_contents('freezer.txt'));&lt;br /&gt;&lt;br /&gt;print "I've got a " . $o_freezer2-&gt;get() . " in the freezer\n";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;I can imagine some pros and cons like how could we index object properties??... but it would simplify a lot... Oh, and forgetting XML would be wonderful.&lt;br /&gt;&lt;br /&gt;There's a lot of object persistence libraries out there. Just yahoo/google for it. Wikipedia article on &lt;a href="http://en.wikipedia.org/wiki/Object_database"&gt;object databases&lt;/a&gt; is worth taking a look.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1503340550471543545-7865425567046147078?l=bitbang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bitbang.blogspot.com/feeds/7865425567046147078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1503340550471543545&amp;postID=7865425567046147078' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/7865425567046147078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1503340550471543545/posts/default/7865425567046147078'/><link rel='alternate' type='text/html' href='http://bitbang.blogspot.com/2007/07/uos-universal-object-system-good-or-bad.html' title='UOS - Universal Object System - Good or bad?'/><author><name>Antonio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
