Fed up of deleteing spam, I decided to disable comments for a while. I will open only comments on a few posts.
Fed up of deleteing spam, I decided to disable comments for a while. I will open only comments on a few posts.
Recently I installed from scratch a couple of machines, and as long I were needing my applications I generated this list of essential ones:
QuicksilverFree. Quicksilver is a launcher. When you call Quicksilver through the key combination Ctrl+space and you start typing, it suggests an application, document or file that contains that letters you typed in any place. Then you can open it, send it by email, reveal it on Finder and a long long etc... There are a lot of plugins to integrate it with more applications. See the overview for more info |
|
Virtue for TigerFree. Virtue completes the missing virtual desktops in Mac OS X. Being a Linux user it is difficult to work without it. There are other applications doing this, but no one like virtue. |
|
Mail.appetizerFree. A configurable and elegant notify window for incoming email with message preview. In the preferences you can specify for what Mail folders you should be warned when a new mail arrives. Let's imagine you receive tons of mail daily and you don't want to be distracted, then you activate Mail.appetizer only for the folder "Bosses" |
|
TextwranglerFree. Textwrangler is a plain text editor for programmers. It has many interesting features such as syntax highlighting, remote edition (FTP/SFTP), strong search options, diff, encodings, etc... You can also use Smultron, Subethaedit (both free), TextMateTextMate or Skedit (commercials) just to mention some |
|
CyberduckFree. Lovely duck! My preferred ftp/sftp client. It has an easy and intuitive interface and allows you to edit remote files in your local editor as if they were in your very own machine. When you save them, they are uploaded back to the server. |
|
NeoOfficeFree. Who ever needed word? This is a port of the original OpenOffice with aqua menus and the key combinations for mac. The main problem I find in OpenOffice under X11 is the keyboard usage. |
|
TeXShopFree. For writing true documentation with LaTeX |
|
AdiumFree. More ducks, this is a multiprotocol instant messenger. It works simultaneously with Jabber, ICQ, MSN, Yahoo, GoogleTalk and many others... It is a pleasure to do tabbed chat :) |
|
SizzlingKeysFree. Do you listen music? With SizzlingKeys you can jump between songs without using iTunes. A translucid window will be displayed with the art cover, song, and artist name every time there is a change. If you go to Yellow Mug, it's worth to download a second free application called SnapNDrag letting you take screenshots and save them in the format you want. |
|
TextpanderFree. Textpander puts text snippets on the fly whenever you enter their corresponding predefined abbreviations. Best regards, Albert Lombarte Fake street 33, Barcelona |
|
Recentlly I posted on How to play mp3 with ubuntu and now I am posting how to do it again but also:
The solution arrives by installing EasyUbuntu
Run this code into the terminal and enjoy :)
sudo apt-get install subversion cd ; svn checkout svn://freecontrib.org/easyubuntu gksudo easyubuntu/trunk/easyubuntu.py
It is a typical situation in the web developing arena that when a new technology emerges so strongly as Ajax or the so called Web 2.0 have done, programmers tend to use it to their last consequences. So we may go from a nearly 100% server side-processing-with-pages-refresh paradigm to establish multiple HTTPRequest petitions on every little interaction between the visitors and our application, to better serve their user experience.
But as some people have warned us before (on uk.builder.com, on the wikipedia, or dhtmlnirvana.com), there are some trade-offs in abusing from these technologies, so we should better stay in middle ground, picking accurately where to put the magic.
One of my favourite scenarios for implementing some Ajax stuff is when I have to render a tabulated list of elements. Depending on the number of properties that compose a given row, we may have to show a great number of columns, which compromises the layout of our site and also forces the user to visually parse the information all at once.
An elegant solution to this problem could be to show only the most relevant columns, and when the user clicks on an element we make a background call to our server and show the rest of the information, expanding the row of the object to accommodate it.
By using Ajax this call is transparent to the user, providing him with an agile way to focus on the stuff he is most interested in. You can find a lightweight library that implements this functionality at dhtmlgoodies.com, along with lots of other amazing stuff. Let's see how it works: This is a showNode() javascript function, when called loads the content of some_url.html and displays it onto the initially hidden div:
<a href="http://www.harecoded.com/wp-admin/post.php#" mce_href="http://www.harecoded.com/wp-admin/post.php#" tal:content="item/filename"
title="${item/shortname}" onclick="showNode('${item/ref_object}','${item/href}details')" />
<div id="window_${item/ref_object}" class="hidden" class2="${item/class}"></div>
Please bear with the screwed html, it's wordpress' fault and my lack of energy right now to search for the workaround :-)
//Useful for loading content via ajax
//Afterwards it changes the div container from hidden to visible
function showNode(id,url){
var id ='window_'+id;
obj= document.getElementById(id);
if(class2 = obj.getAttribute('class2')) {
alterClass = class2;
}else {
alterClass = "";
}
if (obj.className == 'hidden') {
obj.className = alterClass;
}else {
obj.className = 'hidden';
}
loadAjaxContent(url,id);
}
The following javascript code comes directly from the dhtmlgoodies library, and creates the Ajax connection:
var peticion = false;
try {
peticion = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
peticion = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
peticion = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
peticion = false;
}
}
}
if (!peticion) alert("Ajax error");
function loadAjaxContent(fragment_url, element_id) {
var element = document.getElementById(element_id);
element.innerHTML = '__img xsrc="/themes/Default/img/animated/loading.gif" mce_src="/themes/Default/img/animated/loading.gif" alt="loading..." /__';
peticion.open("GET", fragment_url);
peticion.onreadystatechange = function() {
if (peticion.readyState == 4) {
element.innerHTML = peticion.responseText;
}
}
peticion.send(null);
}
So let's keep moving. The following code is the xhtml view (some_url.html) that is requested from the HTTPRequest call, extracted from an app I am developing right now with Albert. In case you wonder what are exactly these strange tal:content and tal:condition tags, they belong to the PHPTAL templating system, which you can find here.
< -- ?xml version="1.0" encoding="ISO-8859-1"?>
< --!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
< --html xmlns="http://www.w3.org/1999/xhtml">
< --body>
< --div id="fileproperties" metal:define-macro="render">
< --table summary="sampleContent" width="100%" style="font-size:1em;" tal:condition="task_updates">
< --tbody>
< --tr valign="top">
< --td colspan="2">
< --tal :block repeat="item task_updates">
< --img xsrc="${theme_path}img/buttons/updates.gif" mce_src="${theme_path}img/buttons/updates.gif" />
< --span tal:content="item/update_time"> - < --/span>
< --br />
< --/tal>
< --/td>
< --/tr>
< --/tbody>
< --/table>
< --/div>
< --/body>
< --/html>

The very first thing we should do to enhace this exercise should be to implement some visual notification mechanism with CSS to better grab the attention from the users that something has changed on the screen with their operations, maybe remorselessly copying the famous basecamp. I assure you this way of dinamically loading content is infectious, you only have to implement it once to start thinking you can take profit from this library in a lot of situations, almost immediately. But keep in mind it is easy to fall on the dark side, don't just use all the dhtmlgoodies libraries all at once :-)
Quicksilver is for me the most useful application in the OS X environment. Few days ago someone shown me the same concept ported to Linux: Katapult. It's a long way to walk for Katapult to become as much powerful as Quicksilver is, but it gives to Linux users a very useful functionallity. Despite Katapult is a KDE application I've been running it in Ubuntu (Gnome) without trouble. If you want to install it (ubuntu): sudo apt-get install katapult In the picture you can see how I started typing "Beagle" to launch the indexer...

It's usual to find many distributions without MP3 support due to licensing issues. If you have MP3 files and don't know how to play them do the following:
sudo apt-get install gstreamer0.8-plugins gstreamer0.8-lame gstreamer0.8-ffmpeg w32codecs libdivx4linux lame sox ffmpeg mjpegtools vorbis-tools gst-register-0.8
Now you can open a player like Rythmbox or Kaffeine and start listening songs. Totem won't play mp3 with this. To associate mp3 files with a player, right-clic on a mp3 file and go to "Open with" tab.
Ya ha pasado más un mes desde que destrocé la pantalla de mi Tungsten C en un muy desafortunado golpe que tuve contra una pilona anti-coches, en lo que estaba siendo un agradable paseo por la zona comercial de Dublín.
No me di cuenta de las consecuencias del golpe hasta que llegué al hotel, pero nada más encender la pda ví que la cosa no tenía solución. Consultando el servicio técnico de Palm a través de su web encontré que una sustitución de pantalla la cobran a unos 180 euros, prácticamente lo que cuesta otra TC en el mercado de ocasión (que de hecho es de donde la había adquirido). Además, te dejan más de 2 semanas sin pda, así que me decidí por lo segundo, volver al tema second hand.
Total, un mes después vuelvo a disfrutar de una de estas increíbles máquinas, con el añadido de que he podido comprar un teclado wireless palm de rebote (gracias Gerald). Lo primero que pensé es que al ser el teclado fabricado por la misma Palm se conectaría por infrarrojos a la pda y listos, pero que va, resulta que hace falta instalar drivers. En la web de Palm están los últimos drivers oficiales (versión 2.2), pero incomprensiblemente sólo están en los idiomas inglés, francés y alemán. Con lo caros que son estos teclados (unos 90 euros) considero totalmente inaceptable que Palm no haga el mínimo esfuerzo para que caracteres como la ñ y los acentos se puedan escribir como en un teclado convencional. En cambio, por no escribir en un driver los mapeados de teclas para más de tres países, obligan al resto a tener que probar combinaciones esotéricas de entre 3 y 4 teclas para escribir acentos y eñes. Eso sí, venden el teclado al mismo precio que en el resto de Europa.
En fin, buscando un poco en Internet aparecieron rápidamente algunos foros con drivers más antiguos junto a una pequeña base de datos que contiene diferentes mapeados para el teclado en castellano, italiano, sueco, etc. Como siempre, la comunidad de palmeros sacando las castañas del fuego por la compañía. Lo malo es que la versión del driver que acompaña a ese pdb de mapeado para varios idiomas, la 1.95, no reconocía mi teclado wireless, a diferencia de la 2.2. En cambio, si instalo esta última, el teclado funcionaba bien, pero no leía correctamente la base de datos, por lo que me tenía que conformar con el mapeado en inglés.
Ya un pelín desesperado, seguí buscando más opciones, pero sin suerte. Palm no proporciona versiones antiguas de sus drivers, ni ninguna indicación de cómo solucionar el problema. Finalmente, acabé en la web de Thinkoutside, una empresa fabricante de teclados inhalámbricos, que sospechosamente vende un teclado exactamente igual que el de Palm, con otros colores y algún pequeño toque de diseño. Rápidamente hice una asociación que dejaba bastante mal parada a Palm... piensa mal y acertarás, por tanto Palm ni siquiera ha diseñado el teclado que vende, simplemente lo ha comprado a esta empresa, le ha cambiado el color y le ha puesto su logotipo y ale, a comercializarlo.
Afortunadamente, esta empresa hace las cosas bien y proporciona montones de drivers, en todas sus versiones, así que me decidí a probarlos uno a uno, ya no había nada que perder, salvo algún hard reset que pudiera ocurrir eventualmente.
Al final, probando varias combinaciones de drivers junto con la base de datos de teclado para otros idiomas... ¡bingo! la versión 2.0 del driver es compatible con el teclado y además acepta el formato de la base de datos de idiomas de teclado, ¡con lo que finalmente he conseguido mi objetivo! Después de saborear unos minutos la gloria del éxito, vienen las inevitables conclusiones:
En fin, aquí teneis el driver y las bases de datos en diferentes idiomas, multilingual-drivers-for-palm-universal-keyboard.zip¡con esto espero ahorraros unas horas de búsqueda desesperada y malas sangres!
Universal keyboard multilingual drivers
Thanks a lot, ThinkOutside, and of course, all the Palm community out there!
Exactly one year ago, I was complaining to one of my clients ISP about the increasing volume of spam those people were receiving lately. The ISP answered me with some not particularly useful advices, except for one: they had inspected my client's website and had found that the contacts section had a list of clean e-mail addresses, happily standing there to the delight of some spammer's spider bot. I had put them there in the good-old format mailto:dontphunk@withmyheart.com, and the ISP adviced me to substitute the text with images, which I found weird, even more considering that all those e-mail addresses were generated dynamically.
So I didn't consider the advice then (shame on me), but as I was yesterday making some changes to the website after a long time I stepped again with the e-mail, and decided to finally take some actions. Enter Aidan's mail_obfuscate PHP function, an easy way to convert typical mailto:been@there.com addresses into something ehmm... more obscure:
<script language="javascript">eval(unescape('%64%6f%63%75%6d%65%6e%
74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22
%6d%61%69%6c%74%6f%3a%6d%61%67%75%69%6c%61%72%40%6e%6f
%76%61%62%61%64%69%61%2e%6e%65%74%22%3e%6d%61%67%75%69
%6c%61%72%40%6e%6f%76%61%62%61%64%69%61%2e%6e%65%74%3c
%2f%61%3e%27%29%3b'))</script>
Via this simple invocation:
<? echo mail_obfuscate($email);?>
Not exactly a new trick, but very useful indeed!