Visualizzazione post con etichetta Programmazione. Mostra tutti i post
Visualizzazione post con etichetta Programmazione. Mostra tutti i post

27 novembre 2011

3+ script in python semplici e utili per sviluppatori

Avete scritto un solo file o un intero progetto i cui sorgenti sono suddivisi tra 100 directory e subdirectory?
Avete dimenticato di includere una delle licenze GPL all'inizio del file?
Avete dimenticato la shebang a inizio file?
Avete dimenticato di includere la vim modeline alla fine dei vostri file?

Allora questa serie di (per ora) 3 script scritti in python vi potrebbe essere utile.
Segnalate tranquillamente errori/miglioramenti/idee per altri script.
Sono nati in modo molto spartano per esigenze personali, li pubblico perchè potrebbero servire ad altre persone:

bzr branch lp:~lorenzosfarra/+junk/simpledevelutils

25 agosto 2010

Piccoli tips & tricks con Smarty

Preparando il nuovo sito web (a breve completamente online, rimanete in attesa! :) ) ho utilizzato alcuni di questi metodi con Smarty che non sono complicati ma molto utili, e potrebbero risultare utili.

1. Mostrare l'età, che si aggiorna dinamicamente
In questo esempio verrà sempre mostrata la mia reale età (1985 è la mia data di nascita) sfruttando un'equazione matematica e utilizzando $smarty.now per recuperare l'anno corrente:


{math equation="x - 1985" x=$smarty.now|date_format:"%Y"}


2. Utilizzare le variabili della request
(In realtà non l'ho più utilizzato, meglio parsarle nel PHP)

Questi gli equivalenti rispettivamente di $_GET['item'], $_POST['item'], $_COOKIE['item']:

{$smarty.get.item}
{$smarty.post.item}
{$smarty.cookies.item}


3. Modifier 'default' per variabili vuote
Per controllare una variabile vuota, invece di diverse righe di codice e l'uso di un if come in questo caso:


{if $item eq ''}
default item value
{else}
{$item}
{/if}



si può sfruttare il modifier default in questo modo:

{$item|default:'default item value'}



4. Alternare stili CSS
Potrebbe essere il caso di liste o tabelle o altri elementi, nelle quali si vorrebbero alternare 2 colori diversi di background:


{foreach from=$projects name=workslist item=project}

{if $smarty.foreach.workslist.iteration is not odd}

{else}

{/if}
{/foreach}


Ancora più elegante potrebbe essere una soluzione con la funzione cycle.

5. Lista separata da un carattere
Ad esempio, se vogliamo stampare una lista di nomi separati da una virgola ma (ovviamente) evitare la virgola finale:

{section name=sectionname loop=$names}
{$names[sectionname]}{if $smarty.section.sectionname.last == false}, {/if}
{/section}

L'output sarebbe qualcosa come:
Warty, Feisty, Karmic, Breezy, Lucid

28 gennaio 2010

Ubuntu Developer Week, 25-29 Gennaio 2010

Torna l'Ubuntu Developer Week, una serie di sessioni online, canale #ubuntu-classroom sul server irc.freenode.net, dove vengono trattati gli argomenti inerenti lo sviluppo di Ubuntu che vanno dalla scoperta del funzionamento e dell'organizzazione dello sviluppo stesso (le procedure, i team, la Comunità di sviluppo, etc...) alle tecniche di pacchettizzazione (dove tra l'altro non poteva che prendere parte il nostro "maestro della pacchettizzazione del mondo" DktrKranz :) ).

Come al solito la timetable è disponibile in iCal oppure direttamente nella pagina principale che contiene tutte le altre informazioni e il link ai log delle sessioni svolte.

19 novembre 2009

Mostrare tweets nel tuo HTML senza rallentare il caricamento della pagina

Se non vi accontentate dei widget disponibili, ci sono vari modi per includere i tweets del proprio account Twitter (o di qualunque altro utente) nel proprio sito.
Se poi l'inclusione di queste informazioni aggiuntive non rallenta in nessun modo il caricamento del resto della pagina, abbiamo trovato una buona soluzione.
Quella che vediamo in questo articolo la sto usando per il sito web personale che sto rinnovando e sarà presentato a breve.
Gli strumenti utilizzati sono HTML, CSS, e JavaScript con l'uso di due librerie: JQuery e Twitter.js.

La pagina inizialmente si presenta in un modo simile a questo (in questo caso lo stile è piuttosto semplice, per pure dimostrazione):



L'HTML sarà qualcosa come:


<!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">
<head>
<title>Lorenzo Sfarra :: Latest 5 tweets</title>
<!-- CSS -->
<link rel="stylesheet" href="style.css" type="text/css" />
<!-- JS -->
<!-- JQuery -->
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js">
/* */
</script>
<!-- Twitterjs -->
<script type="text/javascript"
src="http://twitterjs.googlecode.com/svn/trunk/src/twitter.min.js">
/* */
</script>
<!-- Custom JS -->
<script type="text/javascript"
src="custom.js">
/* */
</script>
</head>

<body>
<!--
Author: Lorenzo Sfarra
Copyright: (c) 2009 Lorenzo Sfarra <lorenzosfarra@ubuntu.com>

Twitter - latest 5 tweets -->
<h1>Latest 5 tweets</h1>

<div id="latesttweets">
<p>Please wait while my latest 5 tweets load <img src="images/indicator.gif" alt="loading..."/></p>
<p>If you can't wait or you haven't javascript enabled, go to my <a href="http://twitter.com/lrnzsfr">Twitter page</a>.</p>
</div>
</body>
</html>


dove style.css è:


/* CSS for the latest tweets in your HTML page.
*
* Author: Lorenzo Sfarra (lorenzosfarra@ubuntu.com)
*/
body {
margin: 0px;
padding: 0px;
width: 100%;
height: 100%;
font-family: Arial, Helvetica, Tahoma, sans-serif;
background: #000000;
color: #dddddd;
font-size: 11px;
}

h1 {
padding-left: 100px;
font-size: 18px;
color: #aaa;
}

li a, li a:visited {
color: #aaaaaa;
text-decoration: none;
font-weight: bold;
font-size: 11px;
}

li a:hover {
color: #dddddd;
}

#latesttweets ul {
list-style-type: none;
width: 300px;
}

#latesttweets ul li {
background: url(images/twitter_footer.png) no-repeat left 20%;
margin-top: 10px;
padding: 5px 0px 10px 32px;
border-bottom: 1px dotted #333333;
}

#latesttweets ul li a, #latesttweets ul li a:visited {
color: #888888;
text-decoration: none;
}

#latesttweets ul li a:hover {
color: #aaaaaa;
border-bottom: 1px solid #aaaaaa;
}

#latesttweets p {
padding-left: 50px;
}



Quando il DOM è caricato, tramite JavaScript caricheremo i nostri tweets:



/* That's the javascript to display the latest N tweets in you HTML page.
*
* Author: Lorenzo Sfarra (lorenzosfarra@ubuntu.com)
* Requires: JQuery, TwitterJS
*/

$(document).ready(function() {
/* We are going to use the TwitterJS function 'getTwitters' with the
* following settings:
* - the css id target element
* - id: your user's (or the user you want to display) id on twitter
* - count: number of tweets to display
* - enableLinks: makes links clickable, including @replies and #hastags
* - ignoreReplies: skips over tweets starting with '@'
* - clearContents: clear the container div
* - template: html template to use for each element
*
* For the complete reference and for all the info required, visit the
* project's website at http://remysharp.com/twitter/, Twitter.js
*/
getTwitters('latesttweets', {
id: 'lrnzsfr',
count: 5,
enableLinks: true,
ignoreReplies: true,
clearContents: true,
template: '"%text%" %time%'
});
});




con il seguente risultato:



È possibile vedere un demo dal quale vedere poi il sorgente.

11 novembre 2009

Go: linguaggio by Google


Con licenza Open Source Google rilascia il linguaggio di programmazione Go.
La domanda che molti si pongono è: perchè un altro linguaggio? La risposta è riportata in una delle FAQ, in breve: nessun linguaggio di programmazione è emerso nell'ultimo decennio, ma questo non rispecchia il mondo informatico che al contrario, sia a livello hardware (computer sempre più veloci, multicore) sia a livello di linguaggi diffusi (la tendenza generica per quanto riguarda il sistema dei tipi si è spostata sulla tipizzazione dinamica dei vari Python o Javascript piuttosto che sui vari C++ e Java), mancanza o carenza per quanto riguarda garbage collection e concorrenza. Il linguaggio è usato anche all'interno di Google stessa ma con cautela per la sua ancora breve vita, o come scrivono sempre nel sito ufficiale, è un «esperimento. Speriamo che utenti avventurosi lo proveranno e valuteranno se è un buon prodotto per loro.». Recentemente Rob Pike, sviluppatore di Go, ha sottolineato appunto una caratteristica appetibile del suo linguaggio, ovvero l'abilità di «gestire processori multicore, fornendo un supporto fondamentale per la comunicazione ed esecuzione concorrente.». E in seguito spiega perchè Google non si è impegnata a scrivere librerie per (ad esempio) C++ ma ha creato un nuovo linguaggio di programmazione (non ripeto, quasi tutti sono concetti espressi in precedenza).
Al momento disponibile solo su Linux e Mac OS X, Go rimane un progetto che prenderà il 20% del tempo lavorativo, come di consueto per gli esperimenti, in attesa di vedere se si evolverà in qualcosa di importante.


EDIT: Google sta affrontando qualche problema per il nome scelto, in quanto esiste (con primi documenti risalenti al 2003) un linguaggio di programmazione chiamato Go! creato da McCabe e Keith Clark, il primo dei quali ha pubblicamente espresso il proprio disappunto.

25 settembre 2009

Segnalazione: JQuery Visual Cheat Sheet

Segnalo un'interessante iniziativa di Antonio Lupetti: JQuery Visual Cheat Sheet.


Consiste in un pratico mini-manuale per jQuery (versione 1.3) che contiene 6 pagine che brevemente spiegano le intere API di jQuery con brevi descrizioni ed esempi. Consiglio il download per i web designer.

23 settembre 2009

Ordine gerarchico per directory (e non solo) con JQuery

Dopo un articolo di qualche mese fà su eleganti box con JQuery, oggi riporto come creare una struttura gerarchica come quelle di un qualunque filesystem, per capirci, che in ambito web può essere utile in varie circostanze.
Anche questo codice, come quella dell'articolo precedente già citato, è stato creato per il progetto Enchanted Webmail, anche se qui è riportato in una versione diversa e limitata. Il codice originale include anche l'uso di AJAX per ottenere dinamicamente le informazioni sulle Mailboxes IMAP, ed è consultabile nella pagina del progetto su Launchpad.

Questa è l'anteprima di quanto è possibile ottenere:



Il codice HTML è troppo lungo per essere scritto interamente qui, quindi riporto un breve estratto. Il link al codice completo è riportato alla fine dell'articolo.

L'HTML non è il massimo dell'eleganza nè validato al 100%, appunto perchè è generato dinamicamente tramite chiamate AJAX (il progetto è ancora in fase di sviluppo).


[..]
<div id="mboxApache" class="mailbox">
<span class="mailboxname">

<img src="media/images/hide_mailbox.png" id="Apache" alt="Hide Children" class="actionmailbox folder">

<a href="/mailboxes/Apache">Apache</a>

</span>

<div class="children" id="childrenApache">

<div id="mboxApache__slash__prova" class="mailbox">

<span class="mailboxname">

<img src="media/images/hide_mailbox.png" id="Apache__slash__prova" alt="Hide Children" class="actionmailbox folder">

<a href="/mailboxes/Apache/prova">prova</a>

</span>
<div class="children" id="childrenApache__slash__prova">

<div id="mboxApache__slash__prova__slash__3rd__space__level__space__2" class="mailbox">
<span class="mailboxname">

<img src="media/images/mailbox_nochildren.png" alt="No Children" class="folder">

<a href="/mailboxes/Apache/prova/3rd%20level%202">3rd level 2</a>

</span>

</div>



<div id="mboxApache__slash__prova__slash__testing__space__29__space__Nov" class="mailbox">
<span class="mailboxname">

<img src="media/images/show_mailbox.png" id="Apache__slash__prova__slash__testing__space__29__space__Nov" alt="Hide Children" class="actionmailbox folder">


<a href="/mailboxes/Apache/prova/testing%2029%20Nov">testing 29 Nov</a>
</span>
[..]


Il file javascript principale è il seguente:


/* Copyright (C) 2008 Lorenzo Sfarra (lorenzosfarra@ubuntu.com)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* NOTE: jquery required.
*/

SHOWMAILBOX='media/images/show_mailbox.png';
HIDEMAILBOX='media/images/hide_mailbox.png';
LOADING='media/images/icons/loading.gif';

function mailboxes_management(element) {
// Add "children" to the current id to obtain the children div's id
var childrenid = "#children" + $(element).attr('id');
if ($(element).attr('src') == SHOWMAILBOX) {
$(childrenid).removeClass("invisible");
$(childrenid).slideDown(400);
$(element).attr('src', HIDEMAILBOX);
} else if ($(element).attr('src') == HIDEMAILBOX) {
$(element).attr('src', SHOWMAILBOX);
$(childrenid).fadeOut(400);
}

}

function show_hide_children() {
$(".mailboxeslist").click(function(event) {
element = $(event.target);
mailboxes_management(element);
});
}

$(document).ready(function() {
show_hide_children();
});



Lo script precedente si occupa di nascondere/mostrare in modo elegante il contenuto della "directory", e di cambiare l'icona della directory stessa in base all'azione appena effettuata.

Vediamo anche il CSS:


.mailboxeslist {
margin-top: 25px;
margin-left: 25px;
margin-bottom: 30px;
}

.mailboxeslist .mailboxname {
margin-left: 10px;
font-size: 1.2em;
margin-top: 0px;
}

.mailboxeslist .children {
margin-left: 10px;
border-left: 1px solid #dddddd;
margin-top: 0px;
padding-top: 5px;
}

.mailboxeslist a, .mailboxeslist a:visited {
color: #002b3d;
}

.mailboxeslist a:hover, .mailboxeslist a:active {
color: #0169c9;
}

.mailboxeslist .leaf, .mailboxeslist .leaf:visited {
color: #d40000;
}

.folder {
float: left;
}

.parentmailbox {
margin-bottom: 20px;
margin-top: 10px;
}

.mailbox {
margin-top: 5px;
}

.mailboxesplainlist {
line-height: 1.7em;
margin: 15px 0px 20px 20px;
color: #002b3d;
}

.mailboxesplainlist a, .mailboxesplainlist a:visited {
color: #002b3d;
}

.mailboxesplainlist a:active, .mailboxesplainlist a:hover {
color: #0169c9;
}

.rootmailbox {
background: #ededed url(../images/mailbox_nochildren.png) no-repeat left 40%;
padding: 5px;
margin: 6px;
padding-left: 40px;
border-top: 1px solid #dddddd;
border-right: 1px solid #dddddd;
border-left: 1px solid #aaaaaa;
border-bottom: 1px solid #aaaaaa;
}


Puoi provare un demo qui.

Per quanto riguarda il codice completo:

07 settembre 2009

Segnalazione: introduzione a Python 3

Python 3 è intenzionalmente incompatibile con la serie 2.x (e precedenti, ovviamente).
Volevo segnalare due guide molto pratiche, chiare e concise che IBM ha messo a disposizione sul proprio sito, che riguardano appunto Python 3, e più precisamente:
  1. Le novità;
  2. Argomenti avanzati.

Tra le novità analizzate c'è la funzione print(), le stringhe, nuovi meccanismi di I/O.
Tra gli argomenti avanzati, le eccezioni e soprattutto una panoramica molto ampia sulle classi e sugli argomenti annessi (decoratori, classi astratte, etc...).

31 luglio 2009

Il nuovo banner di ubuntu-it con JQuery

Da pochi giorni abbiamo un nuovo banner nella homepage del sito web di ubuntu-it.
Il suo compito è quello di evidenziare i contenuti del sito più importanti, dato che il menù, essendo un sito che contiene molti contenuti, è piuttosto corposo.
Il nuovo banner utilizza un mix di HTML, CSS e javascript con la libreria JQuery.




Innanzitutto nella pagina in cui verrà incluso il banner dobbiamo includere il file javascript per jquery e quello del banner, oltre ai file CSS: a questo proposito, dobbiamo includere con degli IF condizionali dei CSS speciali per Internet Explorer 7 e Internet Explorer 6, se sono i browser utilizzati dall'utente.



<link rel="stylesheet" href="banner.css">
<!--[if IE 7]><br /> <link rel="stylesheet" href="ie7tricks.css"><br /> <![endif]-->

<!--[if IE 6]><br /> <link rel="stylesheet" href="ie6tricks.css"><br /> <![endif]-->


Per quanto riguarda l'HTML, potete trovarlo qui.

Il file javascript che gestisce il banner (che contiene degli accorgimenti specifici per Internet Explorer 6, che come al solito è categoria a parte), è il seguente:


/* Licenza tagliata per limiti di spazio, si veda il file originale indicato giù per la licenza */


/* The currently selected category */
curCategory = "";
/* The URL realated to the current category */
url = "http://www.ubuntu-it.org/Ottenere_Ubuntu.shtml";
/* category -> url map */
urlsMap = {
"support": "http://www.ubuntu-it.org/Supporto.shtml",
"contribuire": "http://www.ubuntu-it.org/contribuire.shtml",
"newsletter": "http://www.ubuntu-it.org/contenuti/newsletter-italiana.shtml",
"fcm": "http://www.ubuntu-it.org/contenuti/fcm.shtml",
"media": "http://www.ubuntu-it.org/contenuti/media.shtml",
"contatti": "http://www.ubuntu-it.org/contatti.shtml"
}
/* Tracking activated items, if the user highlights more than 1 menu item
* too fast. */
activatedItems = Array();

function changeActiveCategory(liId) {
/* Change the active category in the banner.

@param liId the ID of the selected 'li' element
*/
/* Change 'li' classes for the old selected category and the new one */
newCategory = liId.substring(2);
if (curCategory != "") {
$("#li" + curCategory).removeClass("lihover");
$("#li" + curCategory).addClass("linormal");
}
$("#" + liId).removeClass("linormal");
$("#" + liId).addClass("lihover");
/* Change the main image for the new category*/
$("#bannermainbg").fadeOut("slow", function(data) {
if (curCategory != "") {
$("#bannermainbg").removeClass(curCategory + "main");
}
/* Update info about the new category */
curCategory = newCategory;
url = urlsMap[curCategory];
$("#bannermainbg").addClass(curCategory + "main");
/* Workaround for IE6: CSS class doesn't work properly, so we set
* the background manually. */
if ($.browser.msie) {
/* Check that is IE with version < 7 */
if ($.browser.version < 7.0) {
path = "url(/uploads/file/banner2009/images/" + curCategory + ".png)";
$("#bannermainbg").css("background-image", path);
}
}
$("#bannermainbg").fadeIn("slow");
});

}


$(document).ready(function() {
/* Change the link href, because the user has JS enabled */
$("#bannerlinkslist li a").attr("href", "#");
$("#bannerlinkslist li").hover(function() {
/* Give info about the current 'li' id to the function */
activatedItems.push($(this).attr("id"));
changeActiveCategory($(this).attr("id"));
},
function() {
/* If it's not the currently selected item,
* remove the correspective class */
for (iter = 0; iter < activatedItems.length; iter += 1) {
if (activatedItems[iter] != ("li" + curCategory)) {
$("#" + activatedItems[iter]).removeClass("lihover");
$("#" + activatedItems[iter]).addClass("linormal");
activatedItems.splice(iter);
}
}
});
/* Manage the onclick event on the main banner content */
$("#bannermain").click(function() {
window.location = url;
});
});

//vim: ai ts=2 sw=2 et sts=2


Il codice completo è a questo indirizzo.

La funzione changeActiveCategory() si occupa di:
1) evidenziare la voce correntemente selezionata nella lista della parte destra del banner;
2) riportare nello stato di elemento non selezionato la voce precedentemente selezionata;
3) assicurarsi che soltanto 1 sola voce sia selezionata (il problema si pone se l'utente passa velocemente su più di un elemento, più velocemente dell'effetto, che poteva portare a più voci selezionate nello stesso tempo);
4) cambiare l'immagine principale del banner nella parte sinistra: il tutto è gestito da classi CSS, tranne per IE6 per il quale aggiungiamo un controllo e cambiamo "manualmente" l'immagine;
5) cambiare l'indirizzo a cui si arriva cliccando sul banner.

Il CSS principale è invece consultabile qui.

Il demo, oltre ovviamente al sito di ubuntu-it, è qui.

18 luglio 2009

Box semplici ed eleganti con JQuery

Trovo i box molto efficaci in un layout di un'applicazione web, soprattutto quando è piuttosto complicata e le informazioni da mostrare sono molte. C'è, come fanno molte applicazioni web, il metodo stile accordion, i tab, un mix di stili oppure i box. Ognuna di queste possibilità si adatta meglio al genere di contenuto e al genere di applicazione.
Per una delle mie applicazioni web ancora in sviluppo, Enchanted Webmail (pagina su launchpad) utilizzo appunto i box, di cui riporto l'esempio qui:



Per realizzarli utilizziamo un mix di HTML, CSS e javascript con la libreria JQuery.
Il codice sorgente:
Puoi provarlo subito visitando la pagina demo.

12 luglio 2009

Segnalazione articolo: 15 suggerimenti utili per gli sviluppatori PHP

Condivido un articolo che è stato più volte segnalato su twitter, lo ritengo molto utile: sono suggerimenti di base, quindi non così utili per programmatori esperti, ma contiene diversi procedimenti molto comuni.
I 15 punti sono:
  1. Inviare un'email in PHP (molto basilare...necessiterebbe di un articolo a parte, comprendente anche l'autenticazione SMTP, etc...);
  2. Encoding e decoding di stringhe;
  3. Ottenere l'indirizzo IP del client (anche in presenza di un proxy);
  4. Da secondi a stringhe;
  5. Validazione email;
  6. Semplice parsing XML;
  7. Connessione a un database;
  8. Creare e analizzare dati JSON;
  9. Gestire il timestamp MySQL;
  10. Generare un codice di autorizzazione;
  11. Validazione del formato della data;
  12. Reindirizzamento HTTP;
  13. Mostrare il contenuto di una directory;
  14. Ottenere il browser dell'utente;
  15. Estrarre un file .zip.
L'articolo è a questo indirizzo.

06 luglio 2009

esempi bash: zenity radiolist e rhythmbox-client


Gli script in bash vanno ben oltre l'idea di semplici sequenze di comandi eseguiti l'uno dopo l'altro.
Si può persino avere GUI, interfacciarsi con altri programmi, mostrare notifiche, barre di scorrimento, finestre di dialogo.
Questo è un esempio di un semplicissimo player che utilizza zenity e rhythmbox-client per controllare un'instanza di rhythmbox.


#!/bin/bash
# Copyright (C) 2009 Lorenzo Sfarra

# Rhythmobx is running?
RHYTHMBOXPID="`pidof rhythmbox`"
if [ "x$RHYTHMBOXPID" == "x" ]; then
# Launch rhythmbox...
rhythmbox &
else
echo "Found a rhythmbox instance with PID: $RHYTHMBOXPID";
fi

RHYTHMBOX="rhythmbox-client --no-start"

# ACTIONS AND INFOS
commands=( Pause Play Next Previous Info Details Close )
actionslist=""
command="zenity --title Player --list --radiolist --column=* --column=Action "

# Add the commands to the list
for act in ${commands[@]}
do
actionslist="$actionslist $act $act"
done
command="$command $actionslist --height 300"


# Infinite loop
while [ 1 ]; do
action="`$command`"
case "$action" in
Pause)
$RHYTHMBOX --pause
;;
Play)
$RHYTHMBOX --play
;;
Next)
$RHYTHMBOX --next
;;
Previous)
$RHYTHMBOX --previous
;;
Info)
# Display track name and track artist
playing="`$RHYTHMBOX --print-playing`"
zenity --info --title "Now playing..." --text "$playing"
;;
Details)
# A detailed list of info about the currently played song
playing="`$RHYTHMBOX --print-playing-format "%tt (%td) from %at (%ay, %ag) by %ta"`"
zenity --info --title "Details about the current track" --text "$playing"
;;
Close)
$RHYTHMBOX --quit
break;
;;
*)
break;
;;
esac
done

#vim: ai ts=2 sw=2 et sts=2


Per vedere il codice formattato e con l'highlight della sintassi, clicca qui.

31 marzo 2009

Rilasciati Mono 2.4 e Monodevelop 2.0

Mono raggiunge la versione 2.4 con diversi obiettivi raggiunti tra cui un netto miglioramento della velocità e dell'uso della memoria (codice di XPath ottimizzato che riduce il consumo di memoria del 15%), alcuni miglioramenti per quanto riguarda Winforms, cambiato il vecchio JIT con un nuovo JIT engine basato su IR.


Altra novità è il rilascio di Monodevelop 2.0 che vede l'introduzione di molte novità e diversi miglioramenti. Il più interessante è certamente il debugger integrato sia per le applicazioni di Mono, sia per quelle C-based (usando GDB).
Ci sono altre caratteristiche tra le quali il supporto per ASP.NET migliorato, un nuovo editor di testo interamente scritto in C# che rimpiazza il widget GtkSourceView, che tra le altre caratteristiche ne ha una a me particolarmente gradita: il supporto per VI e i suoi keybindings, e molte altre.

Link utili:

27 marzo 2009

Python: 5 volte più veloce

Si tratta di Unladen Swallow, un progetto che dovrebbe portare a un miglioramento della velocità di esecuzione del linguaggio di programmazione di 5 volte. Il progetto rimpiazzerà la virtual machine di CPython con una compilazione JIT (just-in-time) usando LLVM. È importante notare che sarà compatibile con le applicazioni attuali e, essendo implementato come branch del CPython convenzionale, eventuali miglioramenti potranno essere utilizzati facendo un merge. La prima milestone release annunciata al PyCon riscontra già un incremento del 15-25% delle performance rispetto all'implementazione CPython standard. È un progetto open source sponsorizzato da Google, in cui lavorano ingegneri della casa di Mountain View.
È possibile consultare la pagina del piano di sviluppo del progetto su Google Code.

22 marzo 2009

Google, Chrome e le potenzialità di JavaScript

Il browser lanciato da Google ha tra le altre caratteristiche un JavaScript engine decisamente più performante di quelli dei browser "rivali". L'azienda di Mountain View ha avviato un sito di esperimenti che mostra il potere di JS.
Effetti particolari, giochi riprodotti, addirittura un "Amiga Workbench Emulator", che permette di gestire le finestre, lanciare la CLI e avviare comandi.
Tutti gli esperimenti su chromeexperiments.com.

20 febbraio 2009

80 operazioni con sed e awk

sed e awk sono due strumenti molto usati per chi utilizza frequentemente la shell.
In rete circolano da tempo due file che mostrano delle operazioni comuni sia per quanto riguarda sed che per quanto riguarda awk. Alcune di queste operazioni sono di difficile comprensione, ma sono disponibili due articoli che spiegano brevemente ciò che i comandi elencati fanno: sed / awk.

09 febbraio 2009

Webkit: arrivano le animazioni tramite CSS


Una notizia molto interessante, soprattutto per chi come me si trova spesso a sviluppare (applicazioni web e relativi) siti web con animazioni scritte in JavaScript, è che ora WebKit supporta le animazioni completamente in CSS.
Questo è uno dei miglioramenti per quanto riguarda i CSS proposti dal progetto WebKit, che comprende effetti quali gradienti, mask e transizioni. L'obiettivo è quello di creare semplicemente animazioni in CSS e scrivere codice facilmente mantenibile, cosa più complessa in JavaScript anche con l'ausilio di librerie quali JQuery.
Al momento è una caratteristica puramente di WebKit anche se si stanno proponendo le specifiche agli organi che gestiscono gli standard. È comunque una caratteristica già supportata e ottimizzata per piattaforma iPhone 2.0, che garantisce buone prestazioni.
Sicuramente una proposta interessante, che io personalmente seguirò con attenzione.

03 febbraio 2009

Phantom: il Sistema Operativo Russo vuole diventare immortale

Dopo la notizia riportata qualche tempo fà, Dmitry Zavalishin ci aggiorna su questo progetto a cui lui si riferisce con il nome di Phantom, sistema operativo orientato agli oggetti, che non ha processi ma threads, di cui ci svela alcuni particolari e dettagli implementativi.
Obiettivo primario? Essere immortale, ovvero spegnere completamente il computer non perderà lo stato attuale della macchina e quando sarà riaccesa, la macchina si troverà nello stato in cui si trovava quando è stata spenta (Sembra un concetto simile al suspend-to-ram e al suspend-to-disk, aspettiamo altri dettagli).
Questo è reso possibile dato che Phantom continuamente riproduce lo stato della memoria principale sul disco: pensando a un sistema operativo attuale, aggiungere una caratteristica simile lascerebbe molto perplessi soprattutto per problemi di sincronizzazione: il fatto che il sistema operativo sarà però designato intorno a questa caratteristica farà sì che il problema sia risolto. Questo modo di "pensare" il sistema operativo cambia radicalmente concetti considerati inattaccabili quali file e directory. Ovviamente ci saranno, ma non nel senso inteso nei modelli di programmazione attuale: saranno semplicemente oggetti persistenti, per cui le operazioni di I/O come le conosciamo saranno completamente rimpiazzate da metodi su questo oggetto (alcuni concetti già avviati con linguaggi di programmazione quali Java, es.: la libreria Prevayler).
Tra le FAQ del sito ufficiale, troviamo:

Q: File System?
A: [..]Nobody needs files in Phantom.[..]

Inoltre, Phantom non è POSIX-compliant. Aspettiamo maggiori dettagli, alcune idee sono molto interessanti ma verificarne la fattibilità e l'efficacia è un discorso completamente diverso.
Probabilmente, se questo sistema operativo centrasse i suoi obiettivi, sarebbe appetibile anche per quanto riguarda il mondo dei server. Staremo a vedere.

25 gennaio 2009

Debugging tool per Gtk+ dagli sviluppatori di VMware


Parasite, uno strumento di debug che si applica al processo della propria applicazione GTK+, con il quale si può analizzare l'applicazione, vedere informazioni dettagliate sulla UI, la struttura gerarchica, le proprietà dei widget e altri dettagli. È anche possibile modificare le proprietà dell'applicazione mentre è in esecuzione per testare queste modifiche per poi eventualmente renderle effettive nel codice. Un'altra caratteristica è una shell python integrata.
È importante sottolineare che non si deve modificare l'applicazione o ricompilarla per lavorare con questo strumento, dato che una volta installato è utilizzabile con qualunque applicazione GTK+ includendo il nome del modulo nella variabile d'ambiente GTK_MODULES (GTK_MODULES=gtkparasite).
È molto utile dato che lo sviluppo e il debug delle UI è spesso complesso. Come riportano nel sito del progetto, per chi conosce Firebug, è un'applicazione analoga anche se applicata alle applicazioni GTK+.
È anche disponibile uno screencast introduttivo che spiega brevemente lo scopo e le funzioni di questo strumento, e un articolo di Ars Technica che ne spiega brevemente le caratteristiche. Rilasciato con licenza MIT.

28 dicembre 2008

"OpenOffice.org è un progetto profondamente malato"

È quello che pensa e che ha scritto nel suo blog Michael Meeks, che lavora a tempo pieno su OpenOffice stesso.
Il motivo è molto semplice e si basa su una constatazione altrettanto semplice:
In un progetto in salute vedremmo un gran numero di sviluppatori volontari coinvolti
pensiero rivolto anche ad altre compagnie interessate.
I numeri sembrano confermare il pessimismo di Meeks, dato che sembra esserci il minor numero di sviluppatori attivi su OO.o di sempre: 24, portando a una situazione "stagnante" per quanto riguarda lo sviluppo del progetto.

Le cause di questa situazione sono diverse e più o meno obiettabili...ad ogni modo sembra indubbio che la Sun faccia di tutto per mostrare e dare l'impressione di essere aperta all'open source ma allo stesso tempo cerca di mantere un controllo deciso (anche per continuare la vendita di Star Office), e il codice è notoriamente e volutamente(???) difficile da capire.

Via Slashdot.org.