Archives For Ricerca e Sviluppo

Era il 2 febbraio del 2009 quando per la prima volta è comparso un articolo riguardante un servizio tanto “stupido” quanto utile allo stesso tempo.

A due anni di distanza dalla sua prima versione (più che stabile, visto il lavoro che doveva svolgere), oggi vi presento una seconda versione che va incontro ad alcune richieste ricevute nel frattempo (grazie Marco, grazie Paolo, ndr): 9 caratteri, un ciclo in grado di mischiare meglio le lettere e i numeri disponibili, la possibilità di copiare e incollare la password priva di spazio finale (un piccolo bug che c’era nella precedente versione, almeno via Firefox e Chrome).

L’indirizzo è rimasto lo stesso:

services.gxware.org/passwd

nonostante lo script che sta alla base della pagina sia cambiato diventando decisamente più ristretto (script originale: TotallyPHP):

<?php
 function createRandomPassword($len) {
 if (!isset($len)) { $len = 9; };
 $chars = &amp;amp;amp;amp;quot;abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ&amp;amp;amp;amp;quot;;
 $charsLen = (strlen($chars)-1);
 srand((double)microtime()*1000000);
 $i = 0;
 $pass = '' ;
 while ( $i &amp;amp;amp;amp;lt; $len ) {
 $num = rand() % $charsLen;
 $tmp = substr($chars, $num, 1);
 $pass = $pass . $tmp;
 $i++;
 }
 return $pass;
}
$password = createRandomPassword();
echo $password; ?>

La seconda delle 3 novità consiste nel fatto che –se necessariopotrete scaricare una differente versione del tool anche in locale, uno script in Visual Basic che vi permetterà –una volta avviato– di scegliere il numero di password da generare e salvarle in un file di testo, una per ciascuna riga così da poter rapidamente copiare ed incollare ciò che vi serve. Il codice è stato realizzato e pubblicato su Tek-Tips.com, ed è disponibile all’indirizzo:

public.gfsolone.com/tools/passwd/randomPasswd.vbs

Per scaricarlo cliccate con il tasto destro sul collegamento e salvatelo in locale sul vostro PC (Salve destinazione come …)

'==========================================================================
'
' NAME: RandomPasswordGenerator.vbs
'
' AUTHOR: Mark D. MacLachlan , The Spider's Parlor
' URL: http://www.thespidersparlor.com
' DATE  : 7/29/2004
' MODIFICATIONS:
'         9/2/2008 Added dictionary object to ensure
'                  uniqueness of passwords
'
' COMMENT: Generates Random Passwords meeting &amp;amp;amp;amp;quot;Complex&amp;amp;amp;amp;quot; Requirements
'          By default will generate a 6 digit password.
'          Edit line passLen = 6 to change length
'==========================================================================
Option Explicit

Dim pGenNum, newpass, passList, inFlag, pgLength, x, fso, ts, passLen
Const ForWriting = 2
passLen = 9

'Give inFlag (input Flag) an initial value to ensure we run once
inFlag = &amp;amp;amp;amp;quot;Seed&amp;amp;amp;amp;quot;

Do While inFlag &amp;amp;amp;amp;lt;&amp;amp;amp;amp;gt; pGenNum
pGenNum = InputBox(&amp;amp;amp;amp;quot;How many passwords would you like to create?&amp;amp;amp;amp;quot; &amp;amp;amp;amp;amp; vbCrLf &amp;amp;amp;amp;amp; _
&amp;amp;amp;amp;quot;Enter a Numeric Value&amp;amp;amp;amp;quot; &amp;amp;amp;amp;amp; vbCrLf &amp;amp;amp;amp;amp; _
&amp;amp;amp;amp;quot;Blank Entry Will Cancel Script&amp;amp;amp;amp;quot;,&amp;amp;amp;amp;quot;Enter Number of Passwords to Create&amp;amp;amp;amp;quot;)

'Quit if no entry
If pGenNum = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot; Then WScript.Quit

'Now clear inFlag so we can compare it to the pGenInput going forward
inFlag = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;
pgLength = Len(pGenNum)
'Enumerate each character to ensure we only have numbers
For x = 1 To pgLength
If Asc(Mid(pGenNum,x,1)) &amp;amp;amp;amp;lt; 48 Or Asc(Mid(pGenNum,x,1)) &amp;amp;amp;amp;gt; 57 Then
inFlag = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;
Else
'Build inFlag one character at a time if it is a number.
inFlag = inFlag &amp;amp;amp;amp;amp; Mid(pGenNum,x,1)
End If
Next
'We made it through each character.  If not equal prompt for a number.
If inFlag &amp;amp;amp;amp;lt;&amp;amp;amp;amp;gt; pGenNum Then inFlag = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;
Loop

'Generate the number of required passwords.
'Use a dictionary object to ensure uniqueness.
Dim objDict
Set objDict = CreateObject(&amp;amp;amp;amp;quot;Scripting.Dictionary&amp;amp;amp;amp;quot;)
Do Until objDict.Count = CInt(pGenNum)
newpass = generatePassword(passLen)
If Not objDict.Exists(newpass) Then
objDict.Add newpass, &amp;amp;amp;amp;quot;Unique Password&amp;amp;amp;amp;quot;
passList = passList &amp;amp;amp;amp;amp; newpass &amp;amp;amp;amp;amp; vbCrLf
End If
Loop

'Now save it all to a text file.
Set fso = CreateObject(&amp;amp;amp;amp;quot;Scripting.FileSystemObject&amp;amp;amp;amp;quot;)
Set ts = fso.CreateTextFile (&amp;amp;amp;amp;quot;PasswordList.txt&amp;amp;amp;amp;quot;, ForWriting)
ts.write passList
MsgBox &amp;amp;amp;amp;quot;Passwords saved to PasswordList.txt&amp;amp;amp;amp;quot;,,&amp;amp;amp;amp;quot;Passwords Generated&amp;amp;amp;amp;quot;
set ts = nothing
set fso = nothing

Function generatePassword(PASSWORD_LENGTH)

Dim NUMLOWER, NUMUPPER, LOWERBOUND, UPPERBOUND, LOWERBOUND1, UPPERBOUND1, SYMLOWER, SYMUPPER
Dim newPassword, count, pwd
Dim pCheckComplex, pCheckComplexUp, pCheckComplexLow, pCheckComplexNum, pCheckComplexSym, pCheckAnswer

NUMLOWER    = 48  ' 48 = 0
NUMUPPER    = 57  ' 57 = 9
LOWERBOUND  = 65  ' 65 = A
UPPERBOUND  = 90  ' 90 = Z
LOWERBOUND1 = 97  ' 97 = a
UPPERBOUND1 = 122 ' 122 = z
SYMLOWER    = 33  ' 33 = !
SYMUPPER    = 46  ' 46 = .
pCheckComplexUp  = 0 ' used later to check number of character types in password
pCheckComplexLow = 0 ' used later to check number of character types in password
pCheckComplexNum = 0 ' used later to check number of character types in password
pCheckComplexSym = 0 ' used later to check number of character types in password

' initialize the random number generator
Randomize()

newPassword = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;
count = 0
DO UNTIL count = PASSWORD_LENGTH
' generate a num between 2 and 10

' if num &amp;amp;amp;amp;lt;= 2 create a symbol
If Int( ( 10 - 2 + 1 ) * Rnd + 2 ) &amp;amp;amp;amp;lt;= 2 Then
pwd = Int( ( SYMUPPER - SYMLOWER + 1 ) * Rnd + SYMLOWER )

' if num is between 3 and 5 create a lowercase
Elseif Int( ( 10 - 2 + 1 ) * Rnd + 2 ) &amp;amp;amp;amp;gt; 2 And  Int( ( 10 - 2 + 1 ) * Rnd + 2 ) &amp;amp;amp;amp;lt;= 5 Then
pwd = Int( ( UPPERBOUND1 - LOWERBOUND1 + 1 ) * Rnd + LOWERBOUND1 )

' if num is 6 or 7 generate an uppercase
Elseif Int( ( 10 - 2 + 1 ) * Rnd + 2 ) &amp;amp;amp;amp;gt; 5 And  Int( ( 10 - 2 + 1 ) * Rnd + 2 ) &amp;amp;amp;amp;lt;= 7 Then
pwd = Int( ( UPPERBOUND - LOWERBOUND + 1 ) * Rnd + LOWERBOUND )

Else
pwd = Int( ( NUMUPPER - NUMLOWER + 1 ) * Rnd + NUMLOWER )
End If

newPassword = newPassword + Chr( pwd )

count = count + 1

'Check to make sure that a proper mix of characters has been created.  If not discard the password.
If count = (PASSWORD_LENGTH) Then
For pCheckComplex = 1 To PASSWORD_LENGTH
'Check for uppercase
If Asc(Mid(newPassword,pCheckComplex,1)) &amp;amp;amp;amp;gt;64 And Asc(Mid(newPassword,pCheckComplex,1))&amp;amp;amp;amp;lt; 90 Then
pCheckComplexUp = 1
'Check for lowercase
ElseIf Asc(Mid(newPassword,pCheckComplex,1)) &amp;amp;amp;amp;gt;96 And Asc(Mid(newPassword,pCheckComplex,1))&amp;amp;amp;amp;lt; 123 Then
pCheckComplexLow = 1
'Check for numbers
ElseIf Asc(Mid(newPassword,pCheckComplex,1)) &amp;amp;amp;amp;gt;47 And Asc(Mid(newPassword,pCheckComplex,1))&amp;amp;amp;amp;lt; 58 Then
pCheckComplexNum = 1
'Check for symbols
ElseIf Asc(Mid(newPassword,pCheckComplex,1)) &amp;amp;amp;amp;gt;32 And Asc(Mid(newPassword,pCheckComplex,1))&amp;amp;amp;amp;lt; 47 Then
pCheckComplexSym = 1
End If
Next

'Add up the number of character sets.  We require 3 or 4 for a complex password.
pCheckAnswer = pCheckComplexUp+pCheckComplexLow+pCheckComplexNum+pCheckComplexSym

If pCheckAnswer &amp;amp;amp;amp;lt; 3 Then
newPassword = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;
count = 0
End If
End If
Loop
'The password is good so return it
generatePassword = newPassword
End Function

Ultima novità è l’integrazione del Random Password Generator all’interno degli strumenti “mobili” del Network GxWare, da poco trasferiti sotto il nuovo dominio network.gxware.org/iphone:

network.gxware.org/iphone/passwd.php

Questo vi permetterà di generare rapidamente password sufficientemente complesse avendo a portata di mano solo il vostro telefono ed una connessione a internet.

Per chi volesse invece continuare ad usare la prima versione, ho lasciato la possibilità di accedere alla precedente pagina iniziale semplicemente puntando il browser a services.gxware.org/passwd/v1.php.

Buon lavoro! :-)

UPDATE
Grazie al suggerimento dell’utente “caccolangrifata lo script è stato modificato includendo l’utilizzo di lettere maiuscole (oltre che minuscole, come di default) e la possibilità di specificare una differente quota caratteri della password. La modifica è stata operata sia sulla pagina del servizio standard che quella mobile! :-)

Avevo letto di Efficient Related Posts qualche tempo fa su uno dei tanti blog che seguo via Google Reader, motivo per il quale mi ero deciso ad installarlo su questo WordPress, notando però l’impossibilità di farlo digerire al file CSS del tema, o almeno non nativamente. Ho deciso quindi di effettuare una piccola modifica all’interno del file PHP principale del plugin per includerlo in un DIV controllato –appunto– dal CSS custom di Standard Theme, installato su questo blog.

Il plugin va a posizionare un elenco puntato a fine di ciascun articolo e –una volta attivo– questo screenshot dovrebbe assomigliare molto a ciò che vi si presenterà davanti:

Efficient Related Posts – Visualizzazione senza modifiche al CSS

Questo è ciò che ho voluto fare io. Inutile dire che potrete modificare questo codice a vostro piacimento, magari rispettando altre modifiche operate sullo stesso WordPress precedentemente. Il CSS “intercetta” il DIV chiamato “boxcorrelati” e lo presenta così:

/* BOX ARTICOLI CORRELATI NEI POST */
.boxcorrelati {
background:transparent url(images/correlati.png) no-repeat scroll right top;
border:1px solid;
border-color:000000;
margin:8px 0;
padding: 4px 6px 2px;
font-family: Tahoma, sans-serif;
font-size: 1em;
width:550px;
min-height: 120px;
}

Per poter completare l’opera, occorrerà però andare a ritoccare il file “efficient-related-posts.php” che si trova nella cartella del plugin.

Alla riga 317 (faccio riferimento all’attuale versione 0.3.8) dovreste trovare:

$output = "<ul class='related_post'>{$output}</ul>";

seguita poi dalla 320 che riporta:

$output = "<h3 class='related_post_title'>{$settings['title']}</h3>{$output}";

Per poter caricare il DIV dichiarato nel file CSS, basterà modificare di poco le due stringhe, ottenendo quindi:

$output = "<ul class='related_post'>{$output}</ul></div>";

per la riga 317, seguita poi dalla 320 con:

$output = "<div class='boxcorrelati'><h3 class='related_post_title'>{$settings['title']}</h3>{$output}";

Salvate ora i file e caricateli nel vostro spazio FTP sostituendo quelli già presenti. Con un F5 sulla pagina dovreste riuscire a godervi il risultato, simile (seguendo i miei stessi passaggi) a questo scatto:

Efficient Related Posts – Visualizzazione con modifiche fatte al CSS

Buon lavoro :)

In passato ho avuto modo di parlarvi di condivisione della propria libreria / accesso ad iPod e iPhone da più postazioni e di come sia possibile clonare le applicazioni tra le proprie postazioni facendo sempre vincere l’ultima configurazione valida sul proprio dispositivo. Oggi dedico spazio ad un terzo articolo della fortunata serie per spiegarvi quando diventa necessario tornare temporaneamente ad un vecchio iTunes, applicare la modifica di condivisione e aggiornare all’ultima versione.

Come si può verificare il problema?

Nuovo lavoro, nuovo portatile, nuova installazione di iTunes. Questa è la combinazione che mi ha permesso di riprodurre un problema del quale mi avevano parlato alcuni utenti in passato (e per il quale non ero ancora riuscito a spiegarmi il perché). Partendo dal presupposto che conosco a memoria la procedura di clonazione del Library ID spiegata nel mio primo articolo, dopo aver installato l’ultima versione di iTunes sul mio DELL e aver inserito l’iPhone in culla, è comparso il solito messaggio di inizializzazione della libreria musicale del telefono, prepotente e puntuale come le tasse.

Occhio: non confermate mai il messaggio che esce a video, questo causerebbe l’immediata rimozione di tutti i contenuti del telefono / iPod con imprecazioni al seguito e necessità di rifare il lavoro di sincronizzazione (senza considerare che da quel momento in poi non dovreste riuscire a sincronizzare il dispositivo con le altre vostre postazioni).

E ora cosa faccio?

Niente panico. Riuscire a sfruttare il vecchio trucco della libreria clonata è ancora possibile, a patto di non passare per l’ultima versione di iTunes. E’ necessario modificare i dati prima di installare la versione più recente del software Apple, motivo per il sarà necessario un downgrade (ed in seguito un nuovo upgrade).

ATTENZIONE: Prima di eseguire qualsiasi modifica ai vostri file e/o dispositivi siete pregati di effettuare un backup di questi. Solo così sarete capaci di tornare indietro riparando ad eventuali errori di distrazione. L’articolo e l’autore non possono essere ritenuti responsabili di alcun danno subito dalla vostra strumentazione. Buon lavoro.

Ho volutamente inserito il solito messaggio per il backup dei dati perché –prima di ogni vostra mossasarebbe opportuno salvare la cartellaiTunes” (generalmente presente nella cartella Musica del proprio profilo personale) in una posizione sicura (un disco esterno o più semplicemente un taglia/incolla verso una cartella differente dello stesso disco), quindi rimuoverla per effettuare in seguito un’installazione pulita.

Occorrerà ora disinstallare (se già presenti sulla macchina) tutti i software Apple aggiornati. Questa vista sulla mia Installazione Applicazioni potrebbe tornarvi comoda:

Lista software Apple installati (clicca per ingrandire)

Dopo aver riavviato il PC, potrete scaricare ed installare iTunes 9.2.1 (qui la versione a 64 bit). Al termine della fase di setup aprite l’applicativo (così da far creare i file di libreria), chiudete l’applicativo e seguite la documentazione che già dovreste conoscere:

gioxx.org/2009/08/27/iphone-gestirlo-con-due-o-piu-pc-itunes

A questo punto (e solo ora) potrete avviare l’Apple Software Update per cercare aggiornamenti del programma, scaricarli e installarli automaticamente. Inserendo l’iPhone nella culla (o semplicemente connettendolo al cavo) dovreste ora riuscire a impostare una sincronizzazione manuale dei contenuti senza ottenere il messaggio tanto odiato :)

Uno spazio dedicato a …

La mia minuscola guida si basa su un ben più dettagliato articolo di Apple Toolbox che mi ha aiutato a capire il da farsi: http://appletoolbox.com/2010/09/how-to-downgrade-itunes-10-to-itunes-9-2-1.

Lo stesso articolo propone il da farsi nel caso in cui vogliate mantenere la vostra attuale libreria pur con l’intenzione di effettuare un downgrade. Indica anche una procedura per tutti gli utilizzatori di Mac OS X.

Buon lavoro! :-)

Su segnalazione di Luca di una manciata di giorni fa ho letto un post che lascia ben poco spazio alla teoria e vi mette davanti ad un interrogativo spesso non considerato (cosa fin troppo naturale, ndr): avete mai pensato a che fine faranno i vostri dati e i vostri account quando sarà arrivata l’ora di abbandonare questa vita terrena? (non c’è bisogno di toccarsi, dai!)

Secondo Digital Beyond svariati degli strumenti di comunicazioni attuali prevedono la possibilità e –di conseguenzala necessità che la proprietà dell’account passi ad eredi e amici, come succede con gli oggetti fisici: thedigitalbeyond.com/2010/12/so-what-does-happen-to-your-digital-assets-after-you-die.

Ho voluto riprendere il post e localizzarlo parzialmente, rimandandovi alle documentazioni originali quando necessario. Buona lettura :)

GMail

Il più rapido e più semplice nello spiegare il da farsi. Google fornisce la risposta in questo documento ufficiale, in italiano: mail.google.com/support/bin/answer.py?hl=it&answer=14300

Nonostante i tempi di comunicazione possano essere non particolarmente veloci, è sicuramente necessario rispettare ciascun passaggio per riuscire ad ottenere accesso alla casella di posta del proprio defunto. Sono richiesti fino a 30 giorni per l’elaborazione della richiesta.

Twitter

E’ in grado di assistere la famiglia e i parenti più stretti affinché l’account interessato venga chiuso, fornisce inoltre un archivio di tutti i tweet pubblici della persona scomparsa, come descritto in questo documento (in inglese).

Così come per GMail anche Twitter necessiterà sicuramente di diversi giorni tra valutazione e messa in atto della modifica, anche se non specificato nella pagina pubblica.

Facebook

Facebook specifica alcuni termini di servizio (privacy) che prevedono la possibilità di scomparsa e quindi di trasformazione del proprio account in pagina commemorativa o cancellazione completa dei propri dati.

E’ inoltre possibile scaricare completamente i dati del proprio profilo attraverso uno strumento già presente su Facebook, così da poterli navigare offline sulla propria postazione (quindi chiedere -magari- la chiusura dell’account del defunto).

YouTube

Ancora una volta è Google a decidere come si risolve “il problema“, il documento ufficiale parla infatti di risoluzione di una problematica per membro di Youtube deceduto :mrgreen:, in italiano, all’indirizzo google.com/support/youtube/bin/answer.py?hl=it&answer=94458.

Inutile dirlo, vale quanto specificato per la prima casistica. Possono servire fino a 30 giorni per l’elaborazione della richiesta.

Yahoo!

Ultimo, ma non per importanza, è Yahoo!, società che possiede Flickr e –ancora per il momentoDelicious, due servizi parecchio utilizzati, in particolar modo il primo, che ci permette di tenere al sicuro gli scatti fotografici di una vita.

Nei termini di servizio della nota azienda non viene previsto alcun trasferimento di account ma è lecito inoltrare un certificato di morte per chiedere la chiusura dell’account, quindi la rimozione completa di tutti i dati salvati / caricati da quell’account:

No Right of Survivorship and Non-Transferability. You agree that your Yahoo! account is non-transferable and any rights to your Yahoo! ID or contents within your account terminate upon your death. Upon receipt of a copy of a death certificate, your account may be terminated and all contents therein permanently deleted.

Non viene specificata alcuna tempistica di evasione della pratica, tenete per buono che non può certamente essere minore di quella proposta da Google.

In conclusione

Un articolo da lasciare ai posteri molto probabilmente. Una volta si aveva a che fare “solo” con testamenti, proprietà fisiche e le eterne litigate tra parenti. Oggi vanno ad aggiungersi account di posta, di servizi e di qualunque altro accesso alla rete, dove la vita digitale prende sempre più tempo e sempre più possesso dei nostri dati. Sapere cosa fare in questi casi può sempre tornare utile.

Ora potete smettere di toccarvi! :P

Attenzione: Post a moderato contenuto nerdico, si consiglia di girare al largo nel caso in cui l’argomento non interessi! :mrgreen:

Avere un amico e collega di lavoro che non conosce cosa voglia dire “arrendersipuò tornare maledettamente utile in casi estremi dove hardware e software pensano di non poter parlare tra di loro. Riavvolgo il nastro e vi porto a qualche mese fa quando –insieme ai colleghi trasfertisti– ho chiesto all’azienda una connessione più decente della vetusta ISDN che copriva l’appartamento ad Assago dove ci appoggiamo durante i viaggi di lavoro in quel di Milano e dintorni.

La richiesta è stata accolta, così come la scelta dell’hardware: una chiavetta dati del nostro attuale carrier telefonico aziendale (Vodafone, appunto) ed una Fonera 2.0N attraverso la quale saremmo riusciti a propagare il segnale via WiFi privata e contemporaneamente configurare altre chicche che possono sempre tornare utili (ivi compreso il canale OpenVPN verso l’azienda).

Sfortunatamente la Vodafone ci ha mandato (senza prima chiedere alcunché) un nuovo dongle K4505 che –a dar retta alla Wiki di FONveniva dato come non compatibile con il loro router: wiki.fon.com/wiki/3G_compatibility.

Da oggi quel “non compatibile è cambiato“, grazie a Sergio :)

You need to flash your Fonera with the latest DEV image from download.fonosfera.org (latest is 2.3.6.1). This will allow you to access your Fonera on SSH.

Now connect via SSH to the Fonera. Username is root and password is the one you use to access web gui.

create /etc/usb-modeswitch.conf and write this inside:

########################################################
# Huawei K4505

DefaultVendor= 0x12d1
DefaultProduct=0x1521

TargetVendor= 0x12d1
TargetProduct= 0x1464

CheckSuccess=20

MessageContent=&amp;amp;quot;55534243123456780000000000000011060000000000000000000000000000&amp;amp;quot;

edit /etc/config/umtsd

config ‘umtsd’ ‘umtsd’
option  ’_country’  ’it’
option ‘apn’  ’web.omnitel.it’
option ‘dns’ ’83.224.65.134′
option ‘_provider’ ‘it_11′
config ‘umtsdstate’  ’umtsdstate’
 config ‘umtsdevice’  ’option12D11464′
 option ‘vendor’  ’Huawei’
 option ‘device’  ’K4505′

create /etc/init.d/activatek4505 with this inside:

/usr/bin/usb_modeswitch
echo “0x12d1 0×1464″ &amp;amp;gt;/sys/bus/usb-serial/drivers/option1/new_id

run:

ln -s /etc/init.d/activatek4505 /etc/rc.d/S40activatek4505

edit /Apps/umtsd.lua and change  *99***1# with *99#

finally we write changes issuing this command:

sync

reboot and it will work flawlessly.

Articolo originale: vipsnet.net/2010/fonera-2-0n-and-vodafone-k4505-key