giovedì 12 novembre 2015

SEO e alcuni suggerimenti di analisi

Ormai in questa era digitale se non si ha un sito o blog discretamente strutturato e ben indicizzato dai motori di ricerca, non credo si possa andare molto avanti.
Ecco alcuni link che vorrei suggerire per SEO analisi e ricerche di vario tipo per una buona ottimizzazione:

giovedì 5 novembre 2015

ADOX Class con c# e la versione a 32 bit per creare un database Access mdb

Dopo svariati tentativi sono riuscito ad utilizzare un provider buono che girasse su server a 64bit senza cambiare l'opzione su IIS per "Enable 32-Bit Applications".
Creare tramite codice c# su un applicativo web in .Net un database Access mdb e collegare delle tabelle all'interno non è stata una passeggiata.
Per utilizzare la connessione con Jet.OLEDB bisognava avere per forza questa abilitazione.
Ecco l'errore che usciva su sistema a 64bit:
System.Runtime.InteropServices.COMException (0x80040154): Class not registered at ADOX.CatalogClass.Create

Poi mi sono inbattuto su questo link:
https://social.msdn.microsoft.com/Forums/en-US/1d5c04c7-157f-4955-a14b-41d912d50a64/how-to-fix-error-the-microsoftaceoledb120-provider-is-not-registered-on-the-local-machine?forum=vstsdb
e ho provato a scaricare il motore 2010. Niente da fare ecco l'errore:
"the 'microsoft.ace.oledb.12.0' provider is not registered on the local machine"

Ho scaricato infine l'engine 2007 alla seconda opzione qui
Incredulo e increduli... ha funzionato!
Ovviamente sul server non avevo installato il pacchetto Office, quindi è risultato semplice installare questo pacchetto Microsoft gratuito, che mi ha permesso di creare un database Access e creare all'interno anche tabelle collegate.
Di seguito un esempio di codice che ho utilizzato:

string tFilePath = "c:\example.mdb";
// string MDBConnStr = "Provider=Microsoft.Jet.OLEDB.4.0; data source=" + tFilePath + ";Jet OLEDB:Engine Type=5";

// REPLACE WITH THIS
string MDBConnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + tFilePath + ";";

ADOX.CatalogClass tCat = new ADOX.CatalogClass();
ADODB.Connection conAdodb=null;
try
{
 tCat.Create(MDBConnStr);
 conAdodb = (ADODB.Connection)tCat.ActiveConnection;
 
 //..code here, create table, linked table...
 
}catch(Exception ex)
 {
  //...code here
 }
finally {
 //best close
 if (conAdodb != null && conAdodb.State != 0)
  conAdodb.Close();
  
 System.Runtime.InteropServices.Marshal.ReleaseComObject(tCat);
 GC.Collect();
 GC.WaitForPendingFinalizers();
}

giovedì 29 ottobre 2015

Linux e il comando screen

Uno dei comandi che ritengo sia molto utile, perchè utilizzato 'sul campo' soprattutto con putty, è
screen
Permette di gestire più terminali anche con una sola 'finestra' attiva.
Ma vediamo meglio come funziona:
- dal terminale digitare screen (il cursore andrà in alto eliminando qualsiasi cosa scritta sul terminale, praticamente è come se si fosse aperto un altro terminale)
- digitare il comando dell'applicazione che si vuole far partire
- partito il programma, premere la combinazione dei tasti Ctrl + a + d
- si esce dalla finestra et voilà, l'applicazione resta in esecuzione ma si può tranquillamente chiudere il terminale

Per rientrare in quella finestra digitare su un nuovo terminale: screen -ls (che ci fornirà il numero del processo)
poi screen -r (ad esempio: screen -r 15456)
a questo punto si è riattivata la console dell'applicazione avviata
e poi di nuovo Ctrl + a + d per chiudere
e infine digitare: exit per uscire dal terminale classico

mercoledì 14 ottobre 2015

Online il sorgente iOS Countries per le Master-Detail

E' online il codice sorgente della mia app Countries in versione base per iOS qui Countries per iOS su www.chupamobile.com
L'app propone una serie di Nazioni con un dettaglio di 7 informazioni: sulla prima schermata sono presenti gli elementi, cliccando su uno di essi si va nella maschera di dettaglio dove sono presenti altre informazioni.
  
Il codice è abbastanza semplice da modificare e dinamico se si vogliono inserire nuovi item.
Il template è stato creato per aver subito a portata di mano una master-detail per iOS da cui partire e implementarla: ad esempio può essere utilizzata per una demo di un progetto o semplicemente per raccogliere dei dati e tenerli quando l'iPhone è offline.
E' sviluppata con Xcode 7.0.1 per iOS 9.0
Buon lavoro e buon divertimento se scaricate il progetto!

sabato 10 ottobre 2015

MySQL e il dump di dati e struttura

E' possibile eseguire un export o dump dei dati e di una struttura di un database MySQL eseguendo una semplice riga di comando da diversi sistemi operativi.
Eccone un esempio:

Su sistema Windows:
andare nella directory di mysql \bin e accertarsi che ci sia il comando mysqldump.exe; a questo punto digitare (la password accanto a -p è attaccata senza spazi):
mysqldump -u root -paaaa dbtest > dbtest-$(date +%d-%m-%Y-%H.%M.%S).sql 

Su sistema Linux:
se mysql è staato installato correttamente digirare sul terminale:
sudo mysqldump -u root -paaaa dbtest > dbtest-$(date +%d-%m-%Y-%H.%M.%S).sql 

Risultato del nome del file:
dbtest-07-09-2015-11.15.15.sql

giovedì 1 ottobre 2015

Online il sorgente di Quiz per Android

Per chi fosse interessato, è in vendita il codice sorgente della mia app Quiz in versione base per Android qui Quiz per Android
La differenza con la stessa app disponibile su Android market è che non dispone di banner pubblicitari, il numero di quiz è ridotto, non è presente l'area dei punteggi online.
Comunque è sempre possibile personalizzarla, inserire altri quiz, cambiare le categorie e molto altro ancora.
Buon lavoro e buon divertimento se scaricate il progetto!

giovedì 24 settembre 2015

Concatenazione di stringhe Objective-C per app iOS

Piccolo esempio per poter concatenare stringhe in Objective-C per applicazioni iOS e memorizzare il risultato in una label.
Il risultato sarà la scritta "Hello World!"
NSString *stringHello = @"Hello";
label.text = [NSString stringWithFormat:@"%@%@%@", stringHello,@" ",@"World!"];

mercoledì 16 settembre 2015

Online il sorgente di Quiz per iOS

Per chi fosse interessato, è in vendita il codice sorgente della mia app Quiz in versione base per iOS qui Quiz per iOS
La differenza con la stessa app disponibile su Android market è che non dispone di banner pubblicitari, il numero di quiz è ridotto, non è presente l'area dei punteggi online.
Comunque è sempre possibile personalizzarla, inserire altri quiz, cambiare le categorie e molto altro ancora.
Buon lavoro e buon divertimento se scaricate il progetto!

venerdì 11 settembre 2015

Online il sorgente di MyBookstore

Per chi fosse interessato, è in vendita il codice sorgente della mia app Android MyBookstore da chupamobile.com
Ecco il link di riferimento: http://www.chupamobile.com/android-books/my-bookstore-create-a-list-of-books-to-remember-10771
E' possibile personalizzarlo ed è facilmente integrabile un'altra lingua oltre a quelle già presenti.

lunedì 7 settembre 2015

Creare un semplice messaggio in app per iOS

Come inviare un messaggio a video in un'applicazione per iOS/Iphone?
L'esempio seguente da un'idea di come è possibile farlo tramite Xcode (ma leggere più avanti il link che avverte del metodo deprecato in alcune versioni di iOS).
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"TITOLO DI ESEMPIO"
message:@"MESSAGGIO DI ESEMPIO"
delegate:self
cancelButtonTitle:nil // cancelButtonTitle:@"CANC" 
otherButtonTitles:@"OK", nil];
alert.tag=101;
[alert show];

//per ricevere l'evento del pulsante cliccato
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
 if (buttonIndex == 0) {
 //...other code
 }
 //...
}

N.B. "Important: UIAlertView is deprecated in iOS 8. (Note that UIAlertViewDelegate is also deprecated.) To create and manage alerts in iOS 8 and later, instead use UIAlertController with a preferredStyle of UIAlertControllerStyleAlert." riferimento qui Developer Apple

venerdì 28 agosto 2015

Ottenere dati con Json da un sito Internet in un app iOS

Si possono ottenere dati da un sito internet anche attraverso json, così da farle visualizzare ad esempio su di una tableview di un'applicazione per Iphone.
Seguendo questi spunti di codice di esempio creati con Xcode si leggono 3 elementi restituiti da una pagina php:

>> nel controller.h
@property (nonatomic, strong) NSMutableArray *jsonArray;

>> nel controller.m
#define getDataUrl @"http://www.example.com/data.php"
//...
@implementation OnlineViewController
@synthesize jsonArray;

- (void)viewWillAppear:(BOOL)animated
{
 [self retrieveData];
}
//other code.....

#pragma mark -
#pragma mark Class Methods

-(void) retrieveData{
 NSURL *url = [NSURL URLWithString:getDataUrl];
 NSData *data = [NSData dataWithContentsOfURL:url];
 jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

 for (int i =0 ; i < jsonArray.count; i++){
 NSString *cPosition = [NSString stringWithFormat:@"%@%d", @"",(i+1)];
 NSString *cScore = [[jsonArray objectAtIndex:i] objectForKey:@"score_player"];
 NSString *cName = [[jsonArray objectAtIndex:i] objectForKey:@"name_player"];
 //...other code to set value on tableview
 }
 [self.tableView reloadData];
}

lunedì 10 agosto 2015

Far scendere la tastiera per poter scrivere in un campo testo in un app iOS

Come si può far scendere o ripristinare la tastiera in uso in un campo testo di un'applicazione per iOS/Iphone?
Semplice, con questi due metodi è possibile ripristinarla al punto iniziale cliccando su di un qualsiasi punto dello schermo.
Con Xcode collegare il metodo a "Editing Did End" del campo testo.

- (void)textViewDidEndEditing:(UITextView *)textView
{
    CGAffineTransform translateUp = CGAffineTransformMakeTranslation(0.0, 0.0);
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.2];
    self.view.transform = translateUp;
    [UIView commitAnimations];
}

//fieldName: UITextField defined in File.h
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
    if ([fieldName isFirstResponder] && [touch view] != fieldName) {
        [fieldName resignFirstResponder];
    }
    else if ([fieldCountry isFirstResponder] && [touch view] != fieldCountry) {
        [fieldCountry resignFirstResponder];
    }
    [super touchesBegan:touches withEvent:event];
}

lunedì 3 agosto 2015

Far salire la tastiera per poter scrivere in un campo testo in un app iOS

Come si può far salire la tastiera per utilizzarla in un campo testo di un'applicazione per Iphone?
Semplice, con queste poche righe di codice è possibile far apparire la tastiera; con Xcode collegare il metodo a "Editing Did Begin" del campo testo:
- (void)textViewDidBeginEditing:(UITextView *)textView
{
    CGAffineTransform translateUp = CGAffineTransformMakeTranslation(0.0, -150.0);
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.2];
    self.view.transform = translateUp;
    [UIView commitAnimations];
}

venerdì 17 luglio 2015

Tempo di attesa prima del LaunchScreen per app iOS

Prima di far partire un LaunchScreen per un app su Iphone è possibile impostare un intervallo di tempo.
Basta inserire una piccola riga di codice nel "didFinishLaunchingWithOptions" tramite Xcode, come di seguito:

File: AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    [NSThread sleepForTimeInterval:3]; //add 3 seconds
 return YES;
}

martedì 7 luglio 2015

Twuffer e i post schedulati di Twitter

Ero in cerca di un programmino o sito gratuito che mi permettesse di schedulare i post di twitter nel tempo.
Ce ne sono molti e ne ho provati alcuni, ma spesso sono versioni trial limitate e te ne accorgi dopo che hai inviato qualche tweet.
Uno che ha fatto al mio caso è stato sicuramente twuffer.com.
Imposti l'account, 140 caratteri disponibili come al solito, scheduli il post nel tempo, et voilà...in meno di 2 minuti già ne scheduli uno.
Senza limiti, tutto gratis. Almeno per ora, speriamo non lo rendano a pagamento (esiste un "donate" ovviamente). Manca solamente il caricamento di un'immagine, ma va bene ugualmente.
Well done!

mercoledì 1 luglio 2015

Un semplice log in c#

Creare un semplice log in mancanza di componenti terze parti in ambiente .Net con c#.
Ecco un esempio che passa dei parametri ad un metodo e scrive una stringa in modalità "append" su di un file.
private void CreaLog(string strMsg)
{
 System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\temp\\log.txt",true); //true: append
 file.WriteLine(strMsg);

 file.Close();
}

venerdì 26 giugno 2015

Buona configurazione del my.ini di MySql versione 4.1

Mi sono scontrato con performance di un database MySql vecchia versione, e cambiando alcuni parametri sul my.ini di sono riuscito ad ottenere una migliore velocità in fase di lettura e scrittura.
Consideriamo anche il fatto di quanta ram e potenza del processore si ha a disposizione, nel mio caso non era molta se non 4G di RAM.
Ecco la configurazione finale:
[client]

port=3306

default-character-set=latin1

[mysqld]

default-character-set=latin1

default-storage-engine=INNODB

max_connections=100

query_cache_size=0

table_cache=256

tmp_table_size=5M

thread_cache_size=8

myisam_max_sort_file_size=100G

myisam_max_extra_sort_file_size=100G

myisam_sort_buffer_size=8M

key_buffer_size=8M

read_buffer_size=64K

read_rnd_buffer_size=256K

sort_buffer_size=212K

innodb_additional_mem_pool_size=2M

innodb_flush_log_at_trx_commit=1

innodb_log_buffer_size=1M

innodb_buffer_pool_size=8M

innodb_log_file_size=10M

innodb_thread_concurrency=18

martedì 23 giugno 2015

Numero massimo di caratteri consentiti in una UITextField

L'esempio permette di definire il numero massimo di caratteri consentiti in una UITextField per Iphone.
I campi testo nell'esempio sono due che hanno rispettivamente tag=210 e tag=200.
Con Xcode utilizzare queste righe dove verrano controllati entrambi i campi testo:

//define max chars for UITextField
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
 
    //[textField setText:[textField.text uppercaseString]]; //all text in uppercase
 
    if(textField.tag==210){
        NSUInteger newLength = [textField.text length] + [string length] - range.length;
        return (newLength > 3) ? NO : YES; //max 3 chars
    }
    else if(textField.tag==200){
        NSUInteger newLength = [textField.text length] + [string length] - range.length;
        return (newLength > 10) ? NO : YES; //max 10 chars
    }
    else{
        return YES;
    }   
}

sabato 20 giugno 2015

Aggiornamento Quiz 2.0

Nuovo aggiornamento per Quiz; riguarda la correzione di alcune domane e risposte e miglioramenti vari.
Disponibile sul market Android

mercoledì 17 giugno 2015

Aggiungere più protocolli ad una classe in app iOS

Nelle applicazioni per iOS si possono aggiungere protocolli ad una classe semplicemente separandoli da una virgola e chiudendoli tra parentesi angolari come nel seguente esempio:
@interface OptionsController : UIViewController <UIAlertViewDelegate, UITextViewDelegate, UITextFieldDelegate, NSURLConnectionDelegate>
{
//...
}

venerdì 12 giugno 2015

Invio email da asp con CDO.Message

Tramite componenti di Microsfot CDO.Message e CDO.Configuration è possibile inviare un email, ad esempio, con parametri SMTP.
Di seguito un esempio di una funzione asp per inviare un email:

function sendEmail()
email_mittente = "someone@example.com"
email_destinatario = "someone@example.com"
email_oggetto = "test object"
email_corpo = "test test body"
email_tipo = ""
set objCDO = Server.CreateObject("CDO.Message")
Set objConfig = Server.createObject ("CDO.Configuration") 
Set Flds = objConfig.Fields
Flds("http://schemas.microsoft.com/cdo/configuration/urlgetlatestversion") = True
Flds("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
Flds("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.example.com"
Flds("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
Flds("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
Flds("http://schemas.microsoft.com/cdo/configuration/sendusername") = "smtp@example.com"
Flds("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "passexample"
Flds.Update
With objCDO
 Set .Configuration = objConfig
 .From = email_mittente
 .To = email_destinatario
 .Bcc = email_bcc
 .Subject = email_oggetto
 if email_tipo = "html" then
  .HTMLBody = email_corpo
 else
  .TextBody = email_corpo
 end if
 .Send
end with
Set objConfig = Nothing
set objCDO = Nothing
end function

domenica 7 giugno 2015

mercoledì 6 maggio 2015

Nuove foto su dreamstime.com

Continuano le approvazioni su dreamstime.com delle mie foto scattate in giro per l'Italia.
Eccone una:
Red, violet and other colors of Positano, Italy http://www.dreamstime.com/stock-photo-colors-positano-red-violet-other-italy-image53155658 #architecture #background #buildings