Tag Archive - PHP

Jetpack: modifica del comportamento Twitter anche con i nuovi pulsanti

Wp HackAvevo già parlato di modifica al funzionamento di Jetpack per l’integrazione del proprio utente Twitter (qui il primo articolo, qui quello riguardante l’aggiornamento), lo avevo però fatto per chi utilizza i pulsanti tradizionali e non quelli “nuovi” proposti dal team di WordPress.com. Una semplice aggiunta di username ad una funzione specifica farà funzionare il trucco anche con i pulsanti differenti.

Ancora una volta il file da modificare è lo sharing-sources.php contenuto nella cartella /wp-content/plugins/jetpack/modules/sharedaddy/. Con l’attuale versione la funzione da modificare comincia alla riga 333. Si passa quindi dal codice originale privo di username (notare gli apici senza contenuto dopo “jetpack_sharing_twitter_via“:


function sharing_twitter_via( $post ) {
// Allow themes to customize the via
return apply_filters( 'jetpack_sharing_twitter_via', '', $post->ID );
}

a quello che lo include permettendo così di far comparire il “via @nomeutente“:


function sharing_twitter_via( $post ) {
// Allow themes to customize the via
return apply_filters( 'jetpack_sharing_twitter_via', 'gioxx', $post->ID );
}

Ancora una volta si parla di codice “modificato a mano” che verrà quindi sovrascritto da una nuova versione di Jetpack, dovrete perciò ripetere il trucco anche in futuro fino a quando WordPress non consentirà di specificare l’utente Twitter nella pagina profilo personale includendolo così di default.

Buona condivisione :-)

WordPress: pulsanti della Dashboard non correttamente funzionanti

Pillole

Le pillole sono articoli di veloce lettura dedicati a notizie, script o qualsiasi altra cosa possa essere "divorata e messa in pratica" con poco. Uno spazio del blog riservato ai post "a bruciapelo"!

Caso protagonista di questa pillola quotidiana è Vincenzo che ha lamentato l’impossibilità di utilizzare correttamente i pulsanti interni alla Dashboard dopo l’aggiornamento a WordPress 3.5 pubblicato qualche giorno fa:

Wordpress: pulsanti in Dashboard non funzionanti

Facendo clic su Impostazion schermo o Aiuto o qualsiasi altro pulsante posto in quella posizione nella Dashboard (e non solo) non si ottiene assolutamente nulla se non l’inserimento dell’a:link nell’URL della pagina, poco utile ai nostri fini. Per risolvere questa anomalia occorre modificare il file di configurazione del blog (wp-config.php) generalmente contenuto nella root della vostra installazione, come spiegato qui:

wordpress.org/support/topic/help-admin-page-not-working-correctly-cant-do

Basterà quindi aggiungere un define(‘CONCATENATE_SCRIPTS’, false ); tra i vostri define personalizzati, salvare, sostituire il file sul vostro spazio FTP (se non sapete come modificarlo direttamente) e aggiornare la pagina del browser. I pulsanti torneranno ora a funzionare correttamente :-)

Buon lavoro!

MySQL di grandi dimensioni: importazione ed esportazione

Avere a che fare con grandi dump MySQL può costituire un problema soprattutto quando si ha a che fare con hosting condiviso, nessun accesso terminale e phpMyAdmin limitato da tempi o numero di istruzioni da eseguire.

Avete mai avuto la necessità di ovviare al problema? Io ho provato qualche tool trovato in rete e alla fine ho fatto la mia scelta: Sypex Dumper, il giusto compromesso tra qualità e velocità di installazione, configurazione ed utilizzo.

Cos’è e come configurarlo

Un semplice pacchetto di file PHP da caricare sullo spazio web di destinazione, quello del provider sul quale dovrete importare il DB MySQL di grandi dimensioni.

Sypex Dumper (SXD per comodità) è disponibile gratuitamente sul sito web ufficiale: sypex.net/en/. Ne esiste anche una versione PRO a pagamento, ma non è ciò che serve allo scopo basilare dell’importare un database grande senza andare contro il timeout di phpMyAdmin. Il collegamento diretto alla versione gratuita più aggiornata è sypex.net/files/SypexDumper_2010.zip.

Scompattate e caricate la cartella “sxd” sul vostro spazio web, quindi modificate i permessi della cartella “backup” portandoli a 777 (lettura, scrittura ed esecuzione completa per tutti) e dei file cfg.php e ses.php a 666 (lettura e scrittura per tutti). Prima di concludere entrate nella cartella backup e caricate il file SQL che dovete andare a ripristinare. Ho avuto qualche problema con il file compattato in ZIP, ho notato invece che non ci sono anomalie dandogli in pasto direttamente il .sql.

Siete ora pronti ad accedere al software ed effettuare le operazioni desiderate!

Accesso e utilizzo

Da qualsiasi browser puntate all’URL del vostro spazio web, quindi alla cartella dove avete caricato SXD. Nel mio caso si tratta di un semplice dominio.tld/sxd. Comparirà così la finestra di login del software:

Ho volutamente evidenziato la voce “Details” che vi permetterà di accedere alle opzioni di collegamento host e porta, altrimenti non disponibili (verrebbe preso “localhost” di default). Compilando tutti i campi richiesti e facendo clic su Enter, Sypex vi permetterà di gestire il database e di operare una serie di modifiche direttamente dalla sua interfaccia.

Quella che a noi interessa in questo caso è proprio l’importazione di un backup all’interno di un diverso database, anche se già utilizzato e popolato da altre tabelle. Per fare questo basterà andare nella schermata “Import“, dove dovrebbe già essere visibile il database di produzione e il backup pronto nella colonna di sinistra:

Inutile dire che nel caso in cui ci siano più backup disponibili nella cartella “/backup” dello spazio FTP vi basterà selezionare il menu a tendina sotto “File” per scegliere quello adatto al restore.

Per lanciare l’operazione sarà quindi sufficiente fare clic sul pulsante “Execute” in basso a destra:

e attendere che il software faccia il resto :-)

Avrete così aggirato i limiti di phpMyAdmin e dell’esecuzione degli script più in generale, dovrete solo avere pazienza affinché tutto termini. Potete seguire costantemente l’avanzamento tra percentuale e MB macinati tenendo d’occhio il Total status della finestra.

Lascio a voi l’esplorazione delle (neanche tanto) poche altre opzioni messe a disposizione dalla versione gratuita di Sypex, tutte a portata di clic :-)

Buon lavoro!

Script: RandomQuote, le citazioni che preferisci, con un semplice include

Articolo leggero ideale per un sabato mattina, dedicato a tutti coloro che vogliono inserire una citazione scelta a caso tra varie disponibili (ed inserite dall’utente in qualunque momento) all’interno di una propria pagina web, del blog o di chissà cos’altro!

Il codice che vado a riportare non fa uso di SQL. Si basa su se stesso. Le frasi vengono dichiarate all’interno di un array e una semplice funzione random ne restituisce solo una come risultato dell’esecuzione dello script, includendo lo script dove si desidera si otterrà quindi una riga di testo (completa di collegamenti ipertestuali, se presenti) ereditando il CSS della pagina e comparendo esattamente dove da voi richiamata:


<?php
# RandomQuote 0.2
# Revision 20120824
# web: http://goo.gl/BUPJ3 mailto: dev@gfsolone.com

  /*
	=ARRAY CITAZIONI=
	La modalità per dichiararle è la seguente:

		$quotes[] = 'TESTO CITAZIONE (<em><a href="COLLEGAMENTO_PAGINA_AUTORE" />AUTORE</a></em>)';

	A partire dal primo apice si potrà iniziare a riportare il testo facendo attenzione a quanto
	specificato nell'articolo del blog. Nella parentesi e nel giusto spazio si potrà inserire
	l'autore e il collegamento ad una pagina web che ne riporti la biografia o qualsiasi altro
	dettaglio, come è possibile nelle frasi dello script originale.

  */

  $quotes[] = 'Quel NOOOO che hai appena tirato non lo diresti nemmeno di fronte alla tua ragazza che ti dice che &egrave; rimasta incinta. No, quel NO lo cacci di gola solo ed esclusivamente quando sbagli un gol a PES! (<em><a href="http://giovanni.solone.it" />Gioxx</a></em>)';
  $quotes[] = 'Cose che ho imparato nel 2009: per qualsiasi prestazione professionale, farsi pagare almeno una percentuale a inizio lavori. (<em><a href="http://friendfeed.com/kurai/c65087ba/cose-che-ho-imparato-nel-2009-per-qualsiasi" />Federico Fasce</a></em>)';
  $quotes[] = 'Stay hungry, stay foolish. Thank You for all, <a href="http://gxware.org/steve">Steve <img src="http://gxware.org/steve/images/apple_icon.gif" style="width: 15px; float: right; padding-left: 5px;" /></a>';
  $quotes[] = 'La disumanit&agrave; del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (<em><a href="http://it.wikipedia.org/wiki/Isaac_Asimov" />Isaac Asimov</a></em>)';
  $quotes[] = 'Non provare mai a spiegare il computer a un profano. &Egrave; pi&ugrave; facile spiegare il sesso a una vergine. (<em><a href="http://it.wikipedia.org/wiki/Robert_Anson_Heinlein" />Robert Anson Heinlein</a></em>)';
  $quotes[] = 'Mentre in fisica devi capire come &egrave; fatto il mondo, in informatica sei tu a crearlo. Dentro i confini del computer, sei tu il creatore. Controlli -almeno potenzialmente- tutto ci&ograve; che vi succede. Se sei abbastanza bravo, puoi essere un dio. Su piccola scala. (<em><a href="http://it.wikipedia.org/wiki/Linus_Torvalds" />Linus Torvalds</a></em>)';
  $quotes[] = 'Men are from Mars, Women are from Venus, Phones are from Hell (<em>Unknown</em>)';
  $quotes[] = 'The more I have given away, the more I have gotten back (<em><a href="http://ma.tt/about/" />Matt Mullenweg</a></em>)';
  $quotes[] = 'I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. L\'insieme dei due costituisce una forza incalcolabile ... (<em><a href="http://it.wikipedia.org/wiki/Albert_Einstein" />Albert Einstein</a></em>)';
  $quotes[] = 'Tutto quel che sapete far bene contribuisce alla vostra felicit&agrave;. (<em><a href="http://it.wikipedia.org/wiki/Bertrand_Russell" />Bertrand Russell</a></em>)';
  $quotes[] = 'L\'ordine &egrave; solo disordine con scarsa fantasia ... (<em>Sconosciuto</em>)';
  $quotes[] = 'I maschi non crescono mai, cambiano solo i giocattoli! (<em>Sconosciuto</em>)';
  $quotes[] = 'In una battaglia vince colui che ha fermamente deciso di vincere. (<em><a href="http://it.wikipedia.org/wiki/Lev_Tolstoj" />Lev Tolstoj</a></em>)';
  $quotes[] = 'Quello che gli altri pensano di te, &egrave; un problema loro. (<em><a href="http://it.wikipedia.org/wiki/Charlie_Chaplin" />Charlie Chaplin</a></em>)';
  $quotes[] = 'Sei vecchio quando: servono due o pi&ugrave; colpi di scroll per selezionare il giusto valore &quot;anno di nascita&quot; in un form di registrazione ... (<em><a href="https://twitter.com/Gioxx/status/218764189387333633" />Gioxx</a></em>)';

  /* Non modificare nulla a partire da questa riga */
  srand ((double) microtime() * 1000000);
  $random_number = rand(0,count($quotes)-1);

  echo ($quotes[$random_number]);

?>

Occorre fare attenzione ad alcuni dettagli:

  • occhio agli apici. Se volete inserirne di nuovi (‘) nella citazione ricordate che il PHP può digerirli solo se anticipati da un backslash (\), in caso contrario verranno considerate chiusure del $quotes e lo script andrà in errore quando eseguito. E’ possibile notare quanto appena specificato nel quote:
<pre>$quotes[] = 'L\'ordine &egrave; solo disordine con scarsa fantasia ... (<em>Sconosciuto</em>)';</pre>
  • nello stesso è inoltre possibile notare l’utilizzo dei codici HTML per riprodurre lettere accentate e simili, come riportato in questo documento di riferimento: ascii.cl/htmlcodes.htm. In pratica, per far comparire a video una “à” basterà scrivere “&agrave;” nel codice, comprensiva di punto e virgola finale (ma senza apici, ndr);
  • è tutto codice html estremamente semplice e facilmente riproducibile tramite qualsiasi editor, farci la mano è semplice!

Prima della funzione ho voluto inserire un avviso che prega di non modificare alcunché. Se lo fate per apportare miglioramenti a questo banale script che ben venga, magari condividetelo allo stesso modo con me e i lettori nell’area commenti! ;-)

Per vederlo all’opera basterà andare su gfsolone.com, le frasi vengono caricate nel footer del blog:

RandomQuote: all’opera su gfsolone.com

A voi non resta che completare il file con le frasi preferite e includerlo ovunque vogliate :-)

Inclusione

Caricando il file PHP all’interno del vostro spazio web e richiamandolo attraverso un “include” ovunque voi vogliate sarà possibile godere del risultato della funzione. Il codice è estremamente semplice:


<p><?php
$filename = './randomquote.php';
if (file_exists($filename)) {
include "$filename";
} else {
echo "Knock Knock Neo ...";
}
?></p>

Perché complicarmi la vita con queste righe? Perché controllano la presenza del file randomquote.php sul vostro spazio web e -nel caso non esista nella cartella specificata nella variabile $filename- inseriscono una frase unica (Knock Knock Neo, ndr) per evitare che i visitatori vedano errori di file non trovato sul sito, decisamente poco carini da mostrare no? ;-)

Aggiornamenti

Il codice di RandomQuote (randomquote.php) è stato incluso all’interno del mio Wiki pubblico, è possibile quindi trovarlo all’indirizzo public.gfsolone.com/wiki/doku.php?id=wordpress:randomquote dove pubblicherò inoltre eventuali aggiornamenti (frasi o codice) in futuro.

A voi basterà tenere d’occhio la pagina per sapere se e quando lo aggiornerò, per poterlo così scaricare e aggiornare anche sul vostro sito web (ammesso che teniate le stesse citazioni).

In conclusione

Ci sono mille modi differenti e sicuramente più eleganti per realizzare questo tipo di lavoro ma il codice che ho pubblicato è stato messo assieme in pochi minuti e senza star li a girarci troppo attorno, ho deciso di diffonderlo perché penso possa tornare utili ad altri lettori, sono ben accette critiche e miglioramenti (come già detto), fatevi avanti :-)

Buon divertimento e -nel caso doveste riscontrare delle anomalie- chiedete pure supporto nell’area commenti!

Random Password Generator, reloaded!

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):


&amp;amp;amp;amp;lt;?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 &amp;amp;amp;amp;quot;$password&amp;amp;amp;amp;quot;;?&amp;amp;amp;amp;gt;

La seconda delle 3 novità consiste nel fatto che -se necessario- potrete 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! :-)
Page 1 of 3123»