Adobe Creative Cloud e AdobeIPCBroker

Se sei capitato su questo articolo, forse anche tu hai esaurito il tuo credito di bestemmie contro la Adobe e i suoi programmi che causano diarrea, vomito e gastrite cronica.
Dreamweaver che “attende le altre applicazioni”, manco fosse sulla banchina di una cazzo di stazione, Photoshop che ti mette in attesa manco la segretaria di un avvocato.

Insomma, sta Adobe, ma come cacchio lavora?
Il Customer Care di Adobe è una schifezza mai vista, centinaia di post senza risposta (diciamo anche migliaia?), migliaia di persone con lo stesso problema e non uno straccio di risposta ufficiale, se non le canoniche risposte automatiche, utili come un pettine a Mengacci.

Nel mio caso specifico, dove varie prove, oltre ai soliti problemi di file JS in Dreamweaver che si schiantano, al lag mostruoso con un qualsiasi progetto in Bootstrap (inaccettabile, considerata la diffusione sul mercato), c’era una cosa che mi faceva veramente urlare invettive contro il demonio: l’eseguibile AdobeIPCBroker.exe.
Ho riscontrato che, ogni qual volta che DW o Photoshop andava in crash, AdobeIPCBroker.exe era lì, bello vivo e funzionante, che comunicava con la casa madre non so quali cazzo di istruzioni. Credo che, indicativamente, comunichi con Adobe se l’utente in questione è un utente attivo in Creative Cloud e, cosa più importante per loro, se ha pagato.

Personalmente ho risolto questo problema specifico (che mandava Dreamweaver e Photoshop in AppHangB1) rinominando AdobeIPCBroker in due posti:
1) C:\Windows\Prefetch: rinominate il file adobeipcbroker.exe.XXXXX (dove XXXXX sta per un po’ di HEX values) in qualcos’altro, o cambiategli semplicemente l’estensione
2) C:\Programmi x86\Common Files\Adobe\OOBE\PDApp\IPC\: rinominate il file AdobeIPCBroker.exe in AdobeIPCBrokerVAIAPRENDERLODOVEMERITI.exe
3) Andate in Task Manager e schiantate manualmente AdobeIPCBroker.exe: non ve ne pentirete e farete un nobile gesto verso la natura e l’umanità.

Browser che si schianta usando la tastiera? Trovato il colpevole

Dopo uno dei vari aggiornamenti di Windows 7 (ebbene si, resistere resistere resistere), ho riscontrato un fantastico baco: usando un qualsiasi browser, o Skype, non appena digitavo un qualsiasi pulsante della mia tastiera, l’applicazione si schiantava.

Ho aggiornato il driver della tastiera: niente.
Provato a vedere se il problema consiste nel Framework .NET o in qualcosa del genere: nulla.

L’unico aggiornamento che esulava dalle classiche patch di sicurezza era un aggiornamento driver Bluetooth: trovato l’arcano.

Il fantastico BTTray.exe tende ad aggiornarsi discretamente male, difatti tende a non sovrascrivere il vecchio driver: il risultato è l’avere due driver che si sovrappongono tra di loro, schiantando l’applicazione in questione.

Già eliminando dalle risorse in uso l’eseguibile BTTray.exe il problema si risolve.
Eliminate anche dagli eseguibili che partono all’avvio il suddetto eseguibile: il problema non si ripresenterà più.125423

CSV e MySQL: importare un file .csv in un db MySQL

Piccolo tutorial sull’uso del comando all’interno di MySQL.
Ho avuto la necessità di importare un file .csv, contenente una serie di destinazioni italiane, all’interno del mio db MySQL, dentro una tabella denominata tblcomuni.

La struttura della mia tabella

 

 

 

 

 

 

 

 

 

 

 

 

Posso fare tutto in maniera ultra rapida utilizzando il comando LOAD DATA INFILE.
Ho salvato il  mio file .csv in F:\, così da averlo a portata di mano nello script.
Dato il nome della tabella, TBLCOMUNI, e dato il nome del file, COMUNI.CSV, posso tranquillamente lanciare il seguente comando in MySQL:

LOAD DATA INFILE 'f:/comuni.csv' 
INTO TABLE tblcomuni
FIELDS TERMINATED BY ';' 
ENCLOSED BY ''
LINES TERMINATED BY '\n'
IGNORE 0 ROWS;

FIELDS TERMINATED BY ‘;’ mi indica il carattere divisorio tra un campo e l’altro
ENCLOSED BY ” mi aiuta se ho dei campi che sono tra doppi apici (ed in quel caso avrei dovuto scrivere ENCLOSED BY ‘”‘ )
LINES TERMINATED BY ‘\n’, chiaramente, indica che il record successivo è a capo
IGNORE 0 ROWS, ossia che non deve NON tenere conto di alcuna riga: in alcuni casi la prima riga è dedicata alle label dei campi ( Codice, Nome Comune, Provincia) e non abbiamo intenzione di aggiungerla in tabella.

Occhio che questo script funziona solamente per MySQL server locali, non remoti: in quel caso dobbiamo utilizzare il seguente comando:

LOAD DATA LOCAL INFILE 'f:/comuni.csv' 
INTO TABLE tblcomuni
FIELDS TERMINATED BY ';' 
ENCLOSED BY ''
LINES TERMINATED BY '\n'
IGNORE 0 ROWS;

Cordova 3.4, XCode 5.1 e InAppBrowser

Ciao a tutti,
probabilmente, se siete finiti su questa pagina, state smadonnando come dei cinghiali sul perchè e sul per come Cordova non funzioni a dovere su XCode 5.1.

Tutto questo malfunzionare mi ha fatto bellamente scaricare ed installare ( da http://developer.apple.com/downloads ) la versione di XCode 5.0.4. Tutti quei warnings erano veramente fastidiosi, per non parlare delle modifiche manuali che bisogna apporre alle librerie CDVViewController e CDVCommandQueue.
Sicuramente avrete provato ed avrete incontrato non pochi errori di build.
Leggete qui, probabilmente vi risolverà non poco la vita.

Tutti questi errori con la vecchia versione di XCode non li avrete, quindi, se usate XCode prevalentemente per Cordova o Phonegap, vi consiglio vivamente di disattivarne gli aggiornamenti automatici. Gli sviluppatori di Apple sono molto più laboriosi di quelli di Cordova…

Il mio enorme problema era con InAppBrowser, il plugin che permette di aprire in una finestra separata, nella vostra app, qualsiasi URL esterno.
Nel mio caso è fondamentale poichè debbo aprire una pagina di pagamento bancario, impensabile fare tutto mediante Ajax, per non parlare della sicurezza…

Alcune cose che voglio condividere con voi: se avete scritto tutto bene, se  avete seguito alla lettera le indicazioni sulla pagina git del plugin stesso (che trovate qui), e nonostante tutto la finestra non vi si apre, beh, è colpa di Cordova, consolatevi.

Dovete sapere che, anche se il CLI di Cordova sembra fare tutto per bene, in verità così non è, e dovete fare qualche piccola modifica a manina in XCode.

Una volta che avete copiato tutti i vostri files nella cartella www (esterna a quella della piattaforma, COME SAPETE BENE, vero? ), andare a terminale e fate un bel cordova build.

Aprite XCode e verificate il nome della libreria inappbrowser.js situata in: www/plugins/org.apache.cordova.inappbrowser. Noterete che si chiama InAppBrowser.js.

Fin qui tutto bene, non è mica colpa sua se si chiama così.
Ora però il nome deve ritornarmi uguale nell’elenco plugins cordova_plugins.js, tenendo a mente che XCode si incazza perchè Case Sensitive.
Aprendo la libreria scopro che cosa?
La seguente riga: “file”:”plugins/org.apache.cordova.inappbrowser/www/inappbrowser.js”…MINUSCOLO!

Ma vai a morire ammazzato, va! 3 giorni di lavoro buttati, per non parlare del mal di testa!
Considerate una cosa: il simulatore, queste finezze pare non considerarle, quindi vi ritrovate con l’app che funziona nel simulatore e non nel device. Bella merda, eh?

Modificate il nome mettendo le maiuscole al posto giusto nel file cordova_plugins.js e re-buildate l’app, tutto andrà per il meglio (o almeno spero per voi, per me ha risolto).

CUSTOMIZZARE INAPPBROWSER

Ora che funziona, non ci accontentiamo del risultato (inguardabile) offerto dalle impostazioni di default.
Usando la sintassi corretta, apriamo l’InAppBrowser mediante il comando window.open(url, target, options);

URL
Fondamentale fare un bel encodeURI(url), vi risolvete un bel po’ di problemi di encoding del’URL.

TARGET
_blank serve per aprire la finestra correttamente nell’app, dando l’opportunità di chiuderla con l’apposito tasto.
_system vi aprirà il browser di default;
_self aprirà usando la WebView corrente, mandando a ramengo la vostra index.html

OPTIONS
Tenete bene a mente che dovrete passare le variabili divise da virgola e senza spazi.
Un esempio? Io volevo personalizzare l’InAppBrowser cambiando scritta, posizione e togliendo quell’orribile barra dell’URL.
Bene, il risultato, funzionante, è il seguente:
location=no,closebuttoncaption=Chiudi,toolbarposition=top

Manca però una cosa fondamentale: il colore della parola CHIUDI!
Mi sta tutto bene, sono attendo alla grafica ed ai dettagli, e questi fenomeni non mi mettono una opzione per customizzare il colore del link?

Risolviamo il problema aprendo, in XCode, Plugins/CDVInAppBrowser.m.
CMD-F e ricercate, all’interno del documento, la parola “tint”.
Troverete la riga
self.closeButton.tintColor = [UIColor colorWithRed:246.00 / 255.0 green:102.0  / 255.0 blue:66.0 / 255.0 alpha:1];

Cambiate i valori usando il formato RGB ed il gioco è fatto.
Spero di esservi stato utile!

Cordova 3.4 e InAppBrowser

Ultimamente mi sto parecchio concentrando sul discorso APP HTML5 con Cordova ( o Phonegap, chiamatelo come vi pare, io uso il primo perchè di PhonegapBuild non me ne frega una mazza ).

Oramai siamo arrivati alla versione 3.4, direi una versione piuttosto stabile.
Una cosa però, oggi, mi ha fatto uscire fuori di testa pesantemente.
Sto realizzando una app che ha, nella sua tabbar, un bel link per una pagina HTML esterna.

Procedo come al mio solito: accedo alla mia cartella delle app, apro il terminale del mio fido iMac, e digito:

cordova create "nomeapp" "com.nomeazienda.nomeapp" "nomeapp"

Successivamente

cd nomeapp

cordova platform add android

cordova platform add ios

Cosa ho fatto?

Ho semplicemente inserito le due piattaforme iOs e Android all’interno del progetto.

Per coloro che non fossero avvezzi alle nuove dinamiche Cordova, è molto facilitato il compito di gestire tutti i file ed i plugin, e io vi consiglio sicuramente di usare il terminale. Risparmierete una montagna di ore di prove, copia ed incolla, e incazzamenti vari.

Dentro la cartella nomeapp, chiaramente, avrò la struttura creatami da Cordova. Quella che vi interessa è la cartella WWW, che contiene i files HTML della vostra app. Cordova, in fase di build, si occuperà di copiare i files dentro la cartella platform/android.

Bene. Ma cosa vi sto a spiegare tutto questo torrone, tanto sicuramente siete più bravi di me.

Se poi avete bisogno di una mano, contattatemi qui:

Vengo al problema InAppBrowser: molto semplice. Non funzionava.
Niente da fare. Eppure nel file config.xml di base, la whitelist era a posto ( se per a posto consideriamo un * ).
Semplicemente i miei link esterni si aprivano nell’app stessa, senza alcuna possibilità di tornare indietro. Risultato? Fallimento su tutta la linea, una pagina web che si apre in _self è peggio che un calcio nel culo. Allora ho provato a forzare l’app a considerare NON in whitelist il mio dominio.

Da:

<access origin="*" />

a:

<access origin="http://www.google.com" />

Ho quindi rifatto il build di entrambe le piattaforme con un bel

cordova build

e poi ho lanciato l’app nel mio device Android:

cordova run --device android

Risultato? LA MAGIA.
InAppBrowser è tornato a funzionare come per magia, e per giunta su entrambi i domini!

Regola d’oro quindi: aggiungete a manina santa i domini che dovranno comunicare con la vostra app. Vi risparmierete un bel mal di testa.

Aggiornamento dell 18:50

Ho provato la stessa soluzione su XCode: le bestemmie.
Sul mio iPhone 3GS mi da problemi di Whitelist, a prescindere da cosa metta, dovrò approfondire come risolverlo, presumo che sia sufficiente mettere a posto nel file .plist.
Sul simulatore, invece, perfetto, apre l’InAppBrowser perfettamente.