08 ottobre 2010

Ubuntu 10.10 in arrivo

Ci siamo quasi.
The next version of Ubuntu is coming soon

La Comunità di ubuntu-it è pronta per l'arrivo di Maverick Meerkat.
Utilizzo questa release dalla versione Beta, e devo ammettere che è davvero sorprendente.
Appuntamento a domenica.

03 settembre 2010

#iuseubuntubecause

Il Design Team di Canonical ha lanciato un'interessante iniziativa con lo scopo di migliorare il sito di Ubuntu e mettere in luce i motivi per cui usare la distribuzione stessa sottolineando le caratteristiche del prodotto.



Da qui l'idea di invitare gli utenti a inviare un tweet (twitter o identi.ca) con il tag #iuseubuntubecause e mostrarlo nel sito web, dando voce alla comunità sul sito stesso. Già è stato fatto un test interessante (twitter / identi.ca).

In realtà l'idea non è completamente nuova, in quanto microsoft aveva introdotto un servizio simile da tempo per il suo Windows 7.

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

13 agosto 2010

ubuntu-it ha un nuovo contact

Milo Casagrande è il nuovo contact di ubuntu-it.
Complimenti a Milo e mille volte grazie a Matthew East per il lavoro svolto in tutti questi anni da contact e non solo.
La notizia ufficiale è consultabile sul sito web di ubuntu-it.

10 agosto 2010

forum admins @ work

Capita ogni tanto, ma proprio ogni tanto, di incontrarsi con coloro che lavorano su ubuntu-it e che si trovano a Roma, dove lavoro, o nei dintorni. Per questa sera abbiamo organizzato (con sottofondo della partita della nazionale) un incontro tra admins del forum di ubuntu-it, con volans (a casa sua, tra l'altro).
Verranno apportate delle modifiche al forum attuale e continueranno i test per la prossima piattaforma.
Non ci credete ancora? Ok...ecco a voi la prova fotografica presa con cheese..:

18 luglio 2010

Un terminale reale nel browser con JQuery e Django, parte II

Mentre la prima parte è incentrata sull'HTML, il codice javascript e il CSS, in questa seconda parte ci si concentrerà sul lato server-side, ovvero il codice python associato al framework Django.

Per la spiegazione del funzionamento di Django ovviamente rimando al sito ufficiale, in questo articolo vengono riportati solo i passaggi principali.
Vediamo innanzitutto il contenuto del file urls.py, che descrive lo schema delle URL di questa applicazione (molto semplice):

# Copyright (C) 2010 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.
#


from django.conf.urls.defaults import *
from django.conf import settings

MEDIA_ROOT = settings.MEDIA_ROOT

urlpatterns = patterns('',
(r'^cmd/(?P.*)$', 'terminaljs.terminal.views.cmd'),
(r'^media/(?P.*)$', 'django.views.static.serve',
{'document_root': MEDIA_ROOT}),
(r'^$', 'terminaljs.terminal.views.index'),
)



Definiamo quindi che una URL con cmd/ iniziale richiama la view cmd con un parametro "command", il comando da eseguire. Definiamo inoltre che le URL con "media/" iniziale devono essere processate staticamente, ed infine definiamo la URL predefinita che richiama la view index.

Passiamo quindi a vedere il codice delle view, definito nel file views.py:


# Copyright (C) 2010 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.
#


from django.shortcuts import render_to_response
from django.http import HttpResponse
from commands import getoutput
import os.path

# global variable
CWD = "/home/lorenzo"

def index(request):
return render_to_response("index.html")

def is_trusted_command(command):
#TODO: check if it's a trusted command
return True

def cmd(request, command):
global CWD
if command.startswith("cd "):
new_path = command.split(" ")[1]
if not new_path.startswith("/"):
# relative path
new_path = os.path.join(CWD, new_path)
if os.path.isdir(new_path):
CWD = new_path
output = ""
else:
output = "cd: " + new_path + ": No such file or directory"
elif is_trusted_command(command):
output = getoutput("cd %s; %s" %(CWD,command))
else:
output = "Untrusted command."
return HttpResponse(output)



Da sottolineare, così come fatto nella prima parte, la funzione is_trusted_command che deve essere implementata anche server-side.

Ovviamente il tutto è puramente dimostrativo, per chi fosse interessato a migliorarlo è presente tutto il codice su Google Code.

17 luglio 2010

Un terminale reale nel browser con JQuery e Django, parte I

Nell'articolo vediamo come realizzare un terminale che accetta comandi e che li esegue effettivamente su una macchina reale.
Questa prima parte si concentra sull'HTML, il codice Javascript e il CSS necessario.
La seconda parte verrà invece incentrata sul lato della programmazione python con il framework Django.
Il lato server è stato realizzato con il web framework Python Django, il lato client sfrutta la libreria JS JQuery anche per le chiamate AJAX.

L'HTML è piuttosto semplice e si trova nel file templates/index.html


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
<head>
<title>Lorenzo Sfarra :: DJSterminal</title>
<link rel="stylesheet" href="/media/css/terminal.css"/>
<script type="text/javascript"
src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
// You may specify partial version numbers, such as "1" or "1.3",
// with the same result. Doing so will automatically load the
// latest version matching that partial revision pattern
// (e.g. 1.3 would load 1.3.2 today and 1 would load 1.4.2).
google.load("jquery", "1.4.2");


</script>

<script src="/media/js/terminal.js" type="text/javascript">/* Terminal */</script>

<script type="text/javascript">
google.setOnLoadCallback(function() {
/* Handle the enter keycode */
$("#commandline").keypress(function(event) {
if (event.keyCode == '13') {
event.preventDefault();
onEnterKey();
}
});
});
</script>
</head>

<body>
<div id="terminal">
<div id="terminaltop"><img src="/media/css/imgs/buttons.png" alt="buttons" align="left"/> <br/>Javascript Terminal</div>

<!-- Command line -->
<textarea id="commandline" cols="80" rows="15">lorenzo@josie:~$ </textarea>
<!-- End command line -->
</div>
</body>
</html>


Nelle prime righe importiamo i file necessari. In particolare sfruttiamo Google per caricare la libreria JQuery.
Nelle linee 20-29 catturiamo il tasto Invio per gestire l'input come una riga di comando.

Il file terminal.js che contiene il sorgente javascript necessario si trova nella directory media/js, ed è il seguente:


/* Copyright (C) 2010 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.
*/



// The command line prompt
var cliPrompt = "lorenzo@josie:~$ ";

// the server address where the real console exists
var cliHost = "http://localhost:8000/";

function isTrustedCommand(command) {
/**
* Function to check that the given command is trusted.
* @param command the command to check
* @return boolean
*/
// TODO: check that this is a trusted command!
return true;
}

function executeCommand(text, cliPrompt, command) {
/**
* Function to execute the given command through an AJAX call
* and retrieve the result to update the textarea value.
* @param text the current textarea value
* @param cliPrompt the prompt
* @param command the command to execute
*/
// build the URL for the command
remoteCommand = cliHost + "cmd/" + command;
output = "";
// Perform the AJAX call
$.ajax({
url: remoteCommand,
type: 'GET',
dataType: 'text',
error: function(data, textStatus, errorThrown) {
// readyState == 4? Error.
if (data.readyState == 4) {
output = "Connection error.\n"
}
},
success: function(data) {
output = data + "\n";
$("#commandline").val([text, output, cliPrompt].join("\n"));
// Textarea with focus at bottom
$("#commandline").animate({ scrollTop: 99999}, 10);
}
});

}

function onEnterKey() {
/* Function called when a user press the Enter key on its keyboard. */
text = $("#commandline").val();
// Get the command
promptIndex = text.lastIndexOf(cliPrompt);
// build the command
command = text.substring(promptIndex + cliPrompt.length);
if (command == "clear") {
// simply clear the textarea value
$("#commandline").val(cliPrompt);
} else if (isTrustedCommand(command)) {
executeCommand(text, cliPrompt, command);
} else {
output = "Invalid command.";
$("#commandline").val([text,output,cliPrompt].join("\n"));
}
}



La funzione principale è ovviamente executeCommand() che effettua la chiamata AJAX necessaria per eseguire realmente il comando sul server di riferimento.

ATTENZIONE: una funzione importantissima è isTrustedCommand(command) che ritorna "true" se il comando ha il "permesso" per essere eseguito. Questo ovviamente è necessario per proteggere il server. Al momento la funzione non effettua alcun controllo e ritorna immediatamente "true".

Il foglio di stile terminal.css si trova nella directory media/css.
Passa alla parte II ».

Per lo stile è stato preso come modello di riferimento il terminale presente nell'articolo "Forwarding E-Mails with Postfix".

19 giugno 2010

GoogleCL: Google Command Line Tool

GoogleCL è uno strumento creato da Google per interagire con alcuni dei suoi servizi direttamente dalla linea di comando.

Se si vuole aggiungere un contatto, un evento, un articolo sul blog Blogger (cosa che sto provando proprio per questo articolo), sarà possibile farlo quindi con un comando specifico. Questo articolo ad esempio, dopo aver creato il file post.html con il contenuto, è stato pubblicato con il comando:

google blogger post --tags "GoogleCL, terminale, linea di comando, Linux, Google" --title "GoogleCL: Google Command Line Tool" post.html
L'applicazione è scritta in python ed è già pronto un .deb, oltre ai sorgenti, sulla pagina del progetto.

12 giugno 2010

Top 5 Design del mese, Maggio

Ogni giorno visito vari siti web per studiarne la grafica e prendere ispirazione.
Catalogo spesso quelli che mi hanno più colpito, quindi condivido questi siti web nel blog, sperando che alcuni possano essere utili anche ad altri.
Continuiamo con altri 5 design :)

1. The Croquis (http://www.thecroquis.com)



2. BAHUR78 (http://www.bahur78.com/)



3. Kiwi (http://kiwi-app.net/)



4. Square (https://squareup.com/)



5. Narhir Design (http://www.narhir.com/)

18 maggio 2010

ubuntu-it-meeting Bologna - 22, 23 Maggio 2010

Siamo arrivati al quarto meeting della comunità italiana di Ubuntu, dove i componenti dei gruppi che sono l'anima di ubuntu-it si riuniscono per discutere dei gruppi stessi, dei loro progetti, del futuro della comunità, con talk tecnici e organizzativi...e ovviamente per ritrovarsi insieme!

Purtroppo non potrò essere presente, ma seguirò (se non ci saranno impedimenti) il live del meeting tramite twitter e/o identi.ca, oltre ovviamente a leggere i verbali delle riunioni nei giorni successivi.

15 maggio 2010

Top 5 design del mese, Aprile

Ogni giorno visito vari siti web per studiarne la grafica e prendere ispirazione.
Catalogo spesso quelli che mi hanno più colpito, quindi condivido questi siti web nel blog, sperando che alcuni possano essere utili anche ad altri.
Continuiamo con altri 5 design.

1. matt cronin (http://www.matt-cronin.com/)



2. Newcastle web design & development (http://newism.com.au/)



3. Strutta - the contest platform (http://www.strutta.com/)



4. Breezi (http://breezi.com/)




5. Change Given (http://www.changegiven.com/)

07 aprile 2010

Ubuntu Lucid Lynx Countdown

Sono ufficialmente stati selezionati i quattro design per il countdown che accompagnerà il rilascio di Ubuntu 10.04.

Ubuntu: For Desktops, Servers, Netbooks and in the cloud

Sono 3 versioni javascript e un'immagine singola (sopra) per chi non può o non vuole utilizzare javascript. Il codice per inserirlo nel proprio blog è semplicissimo e riportato nella pagina del sito ufficiale dedicata.

05 aprile 2010

L'Aquila - 1 anno dopo

Stasera alle ore 24:00 partirà il corteo dalla Fontana Luminosa che arriverà in Piazza Duomo alle ormai dannatamente famose 3:32 per ricordare le vittime del terremoto, e per riunire nuovamente insieme chi lo ha vissuto.

28 marzo 2010

Top 5 design del mese, Marzo

Ogni giorno visito vari siti web per studiarne la grafica e prendere ispirazione.
Catalogo spesso quelli che mi hanno più colpito, quindi condivido questi siti web nel blog, sperando che alcuni possano essere utili anche ad altri.
Continuiamo con altri 5 design :)

1. Fully Illustrated (http://www.fullyillustrated.com/)



2. Positive Hype (http://www.positivehype.com/)



3. ECTOMACHINE (http://www.ectomachine.com/)




4. Dezinerfolio (http://www.dezinerfolio.com/)



5. Jiri Sebek (http://swah.net/)

26 marzo 2010

Dottore - tesi di laurea

Eh già,
ieri (25 Marzo 2010) sono finalmente diventato Dottore, nel corso di laurea in Informatica della facoltà di Scienze MM.FF.NN dell'Aquila.
Per chi volesse dare un'occhiata alla tesi "Progettazione e realizzazione di un sistema DRM utilizzando SSL e GStreamer"..:

26 febbraio 2010

Top 5 design del mese, Febbraio

Ogni giorno visito vari siti web per studiarne la grafica e prendere ispirazione.
Catalogo spesso quelli che mi hanno più colpito, quindi condivido questi siti web nel blog, sperando che alcuni possano essere utili anche ad altri.

1. Gavin Casteton (http://www.gavincastleton.com/)



2. Echo Enduring (http://blog.echoenduring.com/)



3. SOFA - Design Interfaces & Software (http://www.madebysofa.com/)



4. Design Informer (http://designinformer.com/)



5. Mark Jardine (http://markjardine.com/)




E tu quale preferisci?

03 febbraio 2010

"Italians do artwork better"?

Alla domanda posta nel titolo, noi di ubuntu-it rispondiamo "sì" con sicurezza, tanto da creare un concorso con questo nome, il cui scopo è quello di pubblicizzare il lavoro dei nostri utenti e allo stesso tempo fornire a tutta la Comunità (non solo italiana) dei prodotti originali.



Il lavoro consiste nella creazione di sfondi per il desktop originali e nei termini di una delle licenze libere che indicheremo, e i 5/6 migliori verranno inclusi in un pacchetto DEB ufficialmente rilasciato da Ubuntu-it contestualmente all'uscita di Ubuntu 10.04 (Lucid Lynx) e pubblicizzato attraverso i nostri canali.
Se sei esperto di photoshop, Gimp o Inkscape, perchè non provarci?

Maggiori news e l'annuncio ufficiale sono consultabili sul nostro sito, in attesa dell'8 Febbraio quando verranno indicate le regole ufficiali.

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.

27 gennaio 2010

Ubuntu passa da Google a Yahoo!


È quello che accadrà in Ubuntu 10.04, che apporterà questo cambiamento di motore di ricerca predefinito in Firefox, come risultato di accordi tra Canonical e Yahoo!.
Rimarrà ovviamente la possibilità di modificare nelle preferenze il motore di ricerca predefinito.


24 gennaio 2010

Corbet: "75% del codice Linux scritto da sviluppatori pagati"

Il titolo dell'articolo è una delle frasi che uno dei fondatori di LWN.net e kernel contributor Jonathan Corbet ha pronunciato durante una presentazione al Linux.conf.au 2010 tenutosi a Wellington (Nuova Zelanda) dopo aver effettuato un'analisi del codice scritto per il kernel Linux nell'arco di tempo compreso tra Dicembre 2008 e Gennaio 2010. Il periodo analizzato è quello che ha visto l'"evoluzione" del kernel dalla versione 2.6.28 alla 2.6.32, con 2.8 milioni di linee di codice scritte e migliaia di cambiamenti.



L'articolo completo in inglese fornisce altri dati interessanti sull'argomento.

23 gennaio 2010

Top 5 design del mese, Gennaio

Ogni giorno visito vari siti web per studiarne la grafica e prendere ispirazione.
Catalogo spesso quelli che mi hanno più colpito, quindi condivido questi siti web nel blog, sperando che alcuni possano essere utili anche ad altri.
NOTA: Primo "numero" del 2010, la rubrica cambia nome, passando da "5 fantastici design" a "top 5 design del mese", per poi avere un numero speciale a fine anno.
Detto questo, continuiamo con altri 5 design :)

1. dedoce comunication on-line (http://www.dedoce.es)



2. creative leapes \& finishing moves (http://www.eldesigno.ca)



3. the best free way to manage your money (http://www.mint.com)




4. drawings and other creations (http://dlanham.com)



5. online portfolio (http://www.pinkcactus.com.au)



E tu quale preferisci?

20 gennaio 2010

Fine sondaggio: quanto sei soddisfatto di Karmic?

I dati del sondaggio:



(voti in percentuale).

Totale votanti: 37.
Il dato è interessante, il 72% circa dei votanti è soddisfatto di Ubuntu 9.10, il che è un dato favorevole anche se ristretto ovviamente a un campione piuttosto ristretto di persone.

08 gennaio 2010

Presentare un prodotto tramite un sito web

Durante un periodo strapieno della mia vita come questo (sto scrivendo una tesi bella ma difficile, sulla quale riserverò probabilmente un articolo una volta conclusa - ma della quale vi anticipo gli argomenti principali: C, OpenSSL, p2p, DRM, gstreamer - e 2 siti web da completare), non posso non segnalare un sito web davvero interessante.
In realtà il punto chiave dell'articolo l'ho già trattato qualche tempo fà parlando di sistemi operativi e dei loro siti di riferimento, ma il discorso è simile perchè da questo punto di vista si tratta di prodotti, nel senso più generico del termine, da presentare al pubblico.
Sono sempre convinto che Apple sia tuttora leader nel settore, tuttavia mi ha favorevolmente colpito il sito della Palm (nella figura) per la presentazione dei suoi prodotti.
Grande esempio di design, pulito, semplice, chiaro, che mette a disposizione le informazioni più importanti in modo molto semplice all'utente, accattivante visivamente.
Altri esempi di ottime presentazioni sono graditi nei commenti, in ogni caso questo sito entra sicuramente tra la lista delle fonti di ispirazione.