Category Archives: Web

getPrevSaturday

Dealing width dates has always been tricky; recently I needed a way to find the first saturday of the previous week since a given date. Here’s a handy method to get the first occurrence of “Saturday”. If sunday is ‘1′ and saturday is ‘7′ and also if you use Calendar (you should use GregorianCalendar), January is ‘0′ and December is ‘11′… i spent half an hour trying to understand why today’s DAY_OF_WEEK was giving me ‘2′ (Tuesday) while I was expecting 6. Looking at the API you get that today’s MONTH is 10. If you say .set(2010,10,29) you’re setting the calendar to november… d’oh.

1
2
3
4
5
6
7
8
9
10
11
 public Calendar getPrevSaturday(Calendar in) {
   Calendar internal = in;
   Calendar prevSat = Calendar.getInstance();
   for(int i = 1; i <= 7; i ++) {
	   internal.add(Calendar.DATE, - 1);
	   if(internal.get(Calendar.DAY_OF_WEEK) == 7) // is it Saturday? then break and assign that date to our prevSat var
		break;
   }
   prevSat.set(internal.get(Calendar.YEAR), internal.get(Calendar.MONTH), internal.get(Calendar.DAY_OF_MONTH));
   return prevSat;
 }

Ok, how do you use it?

1
2
3
4
5
Calendar dataDummy = Calendar.getInstance(); // this is now.
Calendar prevSat = getPrevSaturday(dataDummy);
System.out.println(prevSat);
// if today is 2010 OCTOBER 29
// then the previous Saturday was 2010 OCTOBER 23

moving to the (gs) Grid-Service

mt gridserviceConfermo che se dovessi consigliare un hosting provider a qualcuno gli direi di affidarsi a (mt) MediaTemple, come ho fatto io nel ‘lontano’ 3 dicembre 2002 quando già si parlava di mt perché sembrava essere il provider de-facto per la maggior parte dei siti di designers di fama internazionale e Fortune-500 companies. E infatti da allora, zero problemi. Ieri ho ricevuto una mail da mt nella quale mi si chiedeva di passare (gratuitamente) al Grid-Service poichè il ‘vecchio’ Shared-Server sarebbe stato dismesso a partire dal prossimo 19 luglio. mt ha predisposto una ‘Migrate to the Grid’ web app dalla quale ho potuto – davvero con 3 click – registrare il nuovo DNS, backuppare, migrare e far funzionare il tutto in 12 ore! Una breve interruzione di servizio (5 minuti) e nessun problema di DB, connessioni o malfunzionamenti.

(gs) is a cluster-based, modern hosting service powered by hundreds of servers working in tandem to power your websites, applications and email with unrivaled power, burstability and reliability. The Grid system is designed for continuous operation 24/7/365.

Da oggi, sempre per soli 100 USD annuali (prezzo per una soluzione ‘lite’) ho 50GBs di spazio, 512GBs di network transfer mensile disponibile, antispam, rinnovato custom control panel, 100 databases.

The future of Processing

Al mio rientro dal fantastico viaggio di nozze negli US, ho cercato di vedere cosa mi ero perso in un mese di completo isolamento da Internet; per 30 giorni non ho controllato mail, visto sketches, controllato le statistiche, nulla di nulla. Solo una lunga immersione in infiniti landscapes, colori mozzafiato, scenari da far West attraverso Utah, Nevada e Arizona, con punte a New York, Las Vegas e San Francisco. 6000 chilometri con mia moglie Alessandra e presto metterò sù una gallery con le foto più belle anche se già vi dico che nessuna foto renderà mai giustizia alle immagini che ho in testa, ai vasti scenari del south-west, roba da restare senza fiato, davvero.

capitol reef
Capitol Reef National Park, 52 Scenic Dr Torrey, UT 84775, USA
Painted with Processing – GC Mingati

Durante questi trenta giorni è stata pubblicata questa interessante intervista agli ideatori di Processing (Ben Fry, Casey Reas), il framework col quale indago su generative graphics, geometry, chaos, particles e qualsiasi altra cosa desti il mio interesse: Daniel Shiffman ha condotto questa intervista pubblicata su Rhizome che vi invito a leggere. Processing stà crescendo, nuove librerie ed entusiasmanti novità sono in fase di sviluppo e vedranno la luce con le versioni 1.5 – 2.0. In particolare il sistema di gestione dei video abbandonerà QuickTime in favore del framework multimediale opensource GStreamer ed inoltre Processing sarà molto meglio integrato con OpenGL, cosa che renderà il framework (le applicazioni che useranno OpenGL) molto più veloci (molti, molti più FPS…); uno degli studenti di Reas, Andrés Colubri, stà lavorando all’integrazione di GStreamer e OpenGL in Processing. Con la versione 2.0, verrà rivisitato anche l’IDE.

Interessante anche processingjs.org (ricordate il porting JavaScript delle parti 2D di Processing eseguito da John Resig? Ne abbiamo parlato qualche tempo fà in ogni modo giusto per ricapitolare in due parole si tratta della possibilità (usando JavaScript ed il tag canvas – parte integrante delle specifiche HTML 5) di effettuare un rendering dinamico di immagini bitmap; il lavoro, continuato da Al MacDonald stà portando alla nascita di una community e fà crescere l’interesse nei confronti del framework perchè permette di ‘disegnare’ senza usare le Applet Java (non è quindi necessario installare un Java runtime environment o nessun altro plugin, ma basta avere un browser di ultima generazione); inoltre la semplicità delle API e della sintassi lo rendono (e lo renderanno sempre di più) uno degli strumenti ideali per lo sviluppo di rich-user-interfaces, widgets per la data-visualization e per lo sviluppo di giochi web-based favorendo la sperimentazione ed incrementando la già notevolissima notorietà di Processing.

Model-View-Controller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package net.gcmingati.jsp.beans;
import java.util.*;
public class RoomBean implements java.io.Serializable {
    private static int index = -1;
    private List staffNames;
	public static void main(String [] args)
	{
		RoomBean rb = new RoomBean();
		rb.getStaffNames();
	}
    public RoomBean() {
        initStaff();
    }
    public List getStaffNames() {
		for (int i=0; i<staffNames.size(); i++)
		{
			//return (String) staffNames.get(index);
			System.out.println((String) staffNames.get(i));
		}
        return staffNames;
    }
    private void initStaff() {
        staffNames = new ArrayList();
        staffNames.add("Gian Carlo Mingati");
        staffNames.add("Francesco D.");
        staffNames.add("Fabrizio L.");
    }
}

Un semplice esercizio con la sintassi Java; con questa classe (o JavaBean), visualizziamo gli elementi di un array (di stringhe) su una pagina JSP (in locale con Jakarta Tomcat) per mezzo dei tags JSTL e del linguaggio di espressione EL.

1
2
3
4
5
6
7
8
<jsp:useBean id="stanza" class="net.gcmingati.jsp.beans.RoomBean" />
<ul>
<c:forEach items="${stanza.staffNames}" var="selezione">
	<li>
		<c:out value="${selezione}"/>
	</li>
</c:forEach>
</ul>

E’ che sono stato abbastanza fortunato da poter seguire – obbligatoriamente – un corso di quattro settimane sulla programmazione Object-Oriented, ed in particolare su J2EE (Java Enterprise Edition), ed in particolare sull’utilizzo del framework Java che usiamo qui per sviluppare applicazioni; in partica è Struts 1.2 con una serie di plugins.

Un’esperienza che è giusto definire tale, che ha subito stimolato tutta una serie di considerazioni tra le quali, la più importante è che – con Java si può fare qualsiasi cosa.
Il bello é che comunque i concetti di base sono applicabili a qualsiasi linguaggio di programmazione e una volta che sai cosa vuoi ottenere e sai come scriverlo, il solo limite è la tua fantasia; insomma, passo molto volentieri dalla ricerca sul DOM scripting a quella su come creare applicazioni J2EE basate sul design-pattern Model-View-Controller.

Flash Player 9 update 3: the HD revolution

In questi ultimi 12-18 mesi mi sono poco dedicato al Flash e molto agli standards. La tendenza è, in linea di massima, “Standard, Simple & Social”, progettare in maniera semplice, web 2.0 (bordi arrotondati, caratteri San Serif e lower case, menu di navigazione semplici e persistenti, “bold” logos, colori vibranti, icone e ancora icone, riflessi su superfici, molto spazio bianco, tabs, drag & drop, autocomplete, widgets di ogni tipo etc.) e di sperimentare nuove forme di visualizzazione dei contenuti e nuovi ‘metodi sociali’ di navigazione, come i tag clouds, le previews, gli annotation systems, il social bookmarking, e in generale hanno spopolato i framework javascript e le librerie di effetti per le UI. Ma… non era un post sul Flash? Con tutta questa pantomima sul web 2.0 quasi me ne ero dimenticato.
flash HD
Pochi giorni fà, infatti, ho notato che Adobe ha rilasciato la update 3 (versione 9,0,115,0) del Flash Player 9. Sono andato sul sito Adobe Flash On e sono sobbalzato nuovamente sulla sedia (mi capita 2-3 volte l’anno al massimo) quando da questo sito di movie trailers noto il tasto “HD”.
Clicco e… voilà: full-screen e una definizione incredibile!

Mi ricordo che quando 4 anni fa sperimentavamo in Kyneste con i video in streaming (Flash Communication Server MX) e il player era alla versione 6, il video con flash era ancora sperimentale; lo stesso YouTube ci bombarda 4 anni dopo con video da 320px di larghezza con scarsa qualità, ma i trailers che ho visto su Flash On dimostrano come con questa release del player, Adobe abbia voluto estendendere e rinforzare la posizione di leadership nel segmento di tecnologie per il web video.

Inevitabilmente, i progetti di “desktop Internet TV” come Joost e Babelgum – che hanno investito molto per ideare qualcosa di alternativo, di simil high-definition, e per lo sviluppo di tecnologie proprietarie di video encoding, peer-to-peer networking e streaming video – subiranno dei rallentamenti, in termini di interesse da parte del pubblico; immagino che su a Milano siano sobbalzati sulla sedia anche loro, e così a Leiden. E pensare che anche io stavo per aderire alla “viewing revolution”, ma sono contento di come, tutto sommato, siano andate le cose visto che non ci siamo me$$i daccordo. Ma questa è un’altra storia e dimostra quanto sul web, tentare di affermarsi in un segmento così dinamico quale il video entertainment (entertainment e advertising online varranno ulteriori stramilioni di euro) sia davvero difficile, e ancora di più se ci si confronta con colossi come Adobe.

With the explosion of video on the Internet, a massive shift is under way in how people consume video entertainment. Television programs are being viewed not only on TV sets but also on computer screens and mobile devices. Yet challenges in creating and profiting from next-generation content persist; the future of television is online.
— adobe.com/solutions

Nessuno abbandonerà il browser (non ancora) e questo Adobe lo sa bene: con il Flash Player installato sul 99.1% dei computer collegati ad Internet e con la consapevolezza che l’80% di tutti i video streams oggi avvengono tramite Flash, é dura invogliare milioni di utenti a scaricare una desktop Internet TV application quale fonte di video entertainment. Sopratutto da questo momento in poi, ora che si può fare video broadcasting in alta definizione da fruire sempre nel “solito” browser. Certo, non è detta l’ultima parola, ma con questa mossa Adobe si aggiudica ancora una volta la leadership in un settore in grandissimo sviluppo, che nel breve periodo porterà alla nascita di nuovi servizi di video broadcasting. E’ certo che il 2008 sarà l’anno del sorpasso del web rispetto alla TV, in generale.

HD e Flash player: include da questa release il supporto per lo standard di compressione video H.264, un subset dello standard MPEG-4, lo stesso standard supportato dai device Blu-Ray e i video players HD-DVD. H.264 è anche conosciuto col nome di MPEG-4 Advanced Video Coding. In altre parole, la qualità del video ha subito un esponenziale miglioramento dalla precedente versione anche se il supporto di H.264 doveva arrivare con la versione 10 del player.

Inoltre c’è il supporto per l’High Efficiency AAC (HE-AAC) audio e “hardware accelerated, multi-core enhanced full screen video playback” e per i formati 3GP, MP4, e MOV; ovviamente l’HighDefinition si porta dietro tutti i problemi relativi alla ampiezza di banda necessaria per fare il delivery dello stesso: non aspettiamoci che per esempio YouTube converta tutto in HD rendendo impossibile lo streaming (per ora almeno), ma H.264 è comunque un codec molto più efficiente di quello in uso nelle versioni precedenti di flash player, e permette di visualizzare contenuti video di qualità assai migliore con lo stessa banda. Apple recentemente aveva chiesto a YouTube di re-encodare il suo catalogo di video nel formato H.264 per la distribuzione dei video su AppleTV e iPhone, per la stessa ragione: meno banda più qualità.

E’ iniziata la HD revolution, non ci resta che stare a guardare (nel vero senso della parola) e rimboccarci le maniche anche su questo fronte. E’ questo il bello: non sai mai come sarà domani; per non perdersi è essenziale essere attenti osservatori, avere intuito, senso critico e voglia di “vedere” cosa c’è dietro. Sempre.

Songza

Stamane sul discussion group di jQuery hanno segnalato questa simpatica (portentosa) web app: Songza – The music search engine and internet jukebox.

Songza’s primary purpose is to illustrate how to provide content using a “humane interface” – the term used to describe interfaces that reflect how people actually use software. Songza presents this concept through its clean, clutter-free design and transparent remote control. New features will be added in time.

— Jef Raskin

L’interfaccia è davvero notevole ed originale, innovativa, usabile e con un solo click si accede ad una decina di funzioni (play, share, rate, add to playlist … ) e tra i vari plugin utilizzati – eh sì plugin, perchè è fatta con jQuery – figura Thickbox dove per mezzo di finestre modali permette di ricavare – per esempio – la stringa per fare l’embed del loro player, qui visualizzato con la stessa tecnica (Thickbox), visto che c’ero.

Funziona in parte per mezzo delle API di YouTube, e sostanzialmente cerca tra i “video” quelli musicali e li riproduce su di un minuscolo flashplayer privato dello stream video, e quindi si sente solo l’audio. Grande idea, ottima interfaccia, stupenda webapp.

Adobe AIR: le RIAs girano sul desktop

AIR: Adobe Integrated Runtime.

airE’ il nome in codice per un sistema di runtime multi piattaforma che permetterà agli sviluppatori di utilizzare le “solite” tecnologie (Flash, Flex, HTML, CSS, JavaScript/ Ajax) per creare e distribuire Rich Internet Application (RIAs) sul desktop.

Quale è la più grande limitazione di una web app? Il fatto di “girare” dal web: cioè non poter interagire direttamente col sistema operativo. Le applicazioni web si sono trasformate col tempo da “semplici siti” a complesse/molto complesse applicazioni e tutto ciò ora mette in luce le limitazioni dello sviluppo all’interno del browser: operazioni “di base” come copiare, salvare o creare file, non sono possibili visto il modello di sicurezza dei browser web che non può avere accesso al file system della macchina su cui gira.

Adobe® AIR™, formerly code-named Apollo, is a cross-operating system runtime that allows developers to use their existing web development skills to build and deploy rich Internet applications to the desktop.

AIR combina la semplicità del modello di sviluppo e deploy del web, con le ricche funzionalità del modello di applicazioni desktop; permette alle Rich Internet Applications di essere distribuite al di fuori del browser e di poter accedere alle funzioni del sistema operativo utilizzando come tecnologie di sviluppo Flash, Flex, HTML e AJAX.

Google Earth Flight Simulator

Marco Gallotta sembra essere stato il primo a ’scoprire’ una hidden feature in Google Earth 4.2: un flight simulator.

earthStamane ho voluto provare io stesso. Ho installato la nuova versione, ho premuto i tasti Ctrl+Alt+A et voilà: mi si è aperto un Flight Simulator! Carramba che sorpresa!

Essendo in fissa per tutto ciò che vola o che simula il volo, beh mi sono messo subito in pista, per così dire. Partenza da Kathmandu con un SR22 (ma si può scegliere anche un F16) e voletto con comandi da tastiera. Da tastiera è difficile essere ‘proporzionali’ nei comandi quindi sopratutto il rollio è una tragedia, però se consideriamo che davvero si può volare in tutto il mondo questa si che è una bella novità per i GE users.
Questo l’elenco dei controlli.
Considerando inoltre che questa è la prima relase sono certo che alcune cosette ‘mancanti’ come le visuali e più modelli saranno disponibili nelle prossime releases.