sabato 29 settembre 2007

29-09-07 - Installato SP1 Beta Windows Vista

Tempo fa ero stato accettato come beta-tester di Windows Vista ed ora sono tra  i beta-tester della prima beta non pubblica di Windows Vista SP1, ancora non so se tutti i problemi che ho avuto siano stati risolti per cui, per ora non mi pronuncio.
Ho scaricato una patch da 1,27GB (si avete letto bene oltre un giga), l'installazione ha comportato diversi riavvii (automatici) e quasi due ore di tempo.
E' noto che Windows Vista è afflitto da parecchi problemi e bugs, per alcuni di questi sono già disponibili degli aggiornamenti dedicati (sql server, visual studio 2005) o workaround (lentezza delle condivisioni, copia file ultralenta).
Il problema più grave, almeno per me che ci lavoro è il fatto che il client sql di Navision 4 e il client Sql di Dynamics Nav 5  su Vista con Sql Server 2005 avevano entrambi (uso il passato prossimo per una forma di scaramanzia) una lentezza esasperante che ne rendevano impossibile il funzionamento, gli stessi client su Sql Server 2005 su Xp o Windows Server 2003 non hanno problemi, per esclusione e deduzione e Windows Vista che ha dei problemi.
Windows Vista, come è noto ha, come ogni prodotto nuovo degli errori "nuovi" e inaspettati, chi non ha mai sviluppato in proprio non può non sapere che i giorni successivi alle prime installazioni reali con veri utilizzatori sono i più difficili.
Andare "go-live" infatti è una operazione che ho sempre temuto, per la legge di Murphy gli errori più antipatici e sgradevoli li trovano proprio gli utilizzatori.
Di solito un prodotto con troppi errori finisce per diventare del tutto inusabile e fallisce miseramente ... a meno che non vi chiamiate Microsoft :)).
Alla prossima!.
PS: ho messo la data sul titolo perchè non voglio confondere quelli che in futuro andranno alla ricerca del "vero" SP1 per Windows Vista.

domenica 23 settembre 2007

Conversione di un numero in altra base con VB.NET e C#

Ho ritrovato questa funzione di conversione dati numerici da basi comprese fra 2 e 36.

In effetti è poco di più di una esercitazione in quanto il numero di conversioni possibili va ben oltre le quattro abitualmente e comunemente utilizzate:

  1. binaria
  2. ottale
  3. decimale
  4. esadecimale

La tecnica adottata per la conversione di un numero in un'altro abitualmente si poggia su continue conversioni da ascii a numerico e da numerico a carattere con sottrazione / aggiunta di valori.

In effetti io invece ho utilizzato direttamente una stringa di tutti i caratteri ascii "messi in fila" tutti di seguito senza la necessità di fare (sempre rischiose) operazioni di conversione da numero a carattere o da carattere a numero.

Tale stringa fornisce sia l'esponente da utilizzare per la trasformazione in numero base 10 del valore in input che il valore posizionale di ciascun elemento del valore in output.

La funzione è divisa sostanzialmente nelle parti:

  • controllo validità valore in input / parametri
  • trasformazione in valore base 10 del valore indicato come parametro
  • conversione in altra base

Magari a qualcuno farà piacere.

Progetto VB.NET
Progetto C#

domenica 16 settembre 2007

Verifica di alcune Partite Iva Europee con C# e VB.NET

E' da un pò che faccio collezione di funzioni di verifica di partite iva, ora anche se largamente incompleta metto a disposizione la mia collezione.

Infatti è da parecchio tempo che non aggiungo nuove cose ed inoltre ho bisogno di ottenere dei messaggi di "validazione" degli algoritmi.

Alla collezione mancano ancora alcuni stati.

Mi aspetto una valanga di e-mail!

Alcuni appunti:
E' mostrato anche l'utilizzo di SortedList<Tkey,TValue>

// utilizzo una sortedlist per ordinare gli elementi
SortedList<string,string> sl = new SortedList<string, string>();                  

// aggiunta degli elementi e ordinamento

for (int k = 0; k < s.Length; k++)

       sl.Add(s[k],d[k]);                   

// generazione dati tabella stati
foreach (KeyValuePair<string, string> kvp in sl)

       dsDati.Tables["Stati"].Rows.Add(kvp.Key,kvp.Value);

Sulla classe VatCheck esistono tanti metodi quanti sono gli stati, ciascun metodo assume il nome di "CheckVat" + codice iso

Sul form pricipale (e unico) c'è solo la chiamata ad un metodo "generico" della classe VatCheck

risultatoTextBox.Text = VatCheck.CheckVat(statiComboBox.SelectedValue.ToString(),vatTextBox.Text);

Come si potrà notare vengono passati come argomento il codice dello stato e il campo "Partita iva".
Al suo interno la classe VatCheck richiama il metodo corretto utilizzando la reflection:

public static string CheckVat(string stateID,string vatNumber)

{

       string metodo = "CheckVat" + stateID.ToUpper();

       return (CallMethods(metodo,vatNumber));

}

static string  CallMethods(string pMetodo, string pIva)

{

       try

       {

              VatCheck pTiva = new VatCheck();

              Type Tipo =  pTiva.GetType();

              System.Reflection.MethodInfo metInfo;

              metInfo = Tipo.GetMethod(pMetodo, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance);

              return (string) metInfo.Invoke(pTiva, new string[] {pIva.ToUpper()});

                   

       }

       catch (Exception ex)

       {

              System.Windows.Forms.MessageBox.Show(ex.Message + Environment.NewLine + ex.StackTrace);

       }           

       return "Errore";                

}


Progetto sviluppato con C#
Progetto sviluppato con VB.NET

giovedì 13 settembre 2007

Calcolo dell'hash MD5 di un file con C#

In molti siti quando prendiamo un file è a disposizione un altro file contenente l'hash che ne certifica l’integrità.
Su .NET è molto semplice produrre tale chiave, con l'esempio allegato si può provare a calcolare l'hash di un file e poi a modificarlo, si potrà constatare che se il file contiene anche un solo carattere diverso l'hash risulterà diverso.

 
 

/*

 * Creato da SharpDevelop.

 * Utente: Luciano

 * Data: 13/09/2007

 * Ora: 17.38

 *

 * To change this template use Tools | Options | Coding | Edit Standard Headers.

 */

 

using System;

 

namespace CalcoloMD5

{

       /// <summary>

       /// Description of GeneraMD5.

       /// </summary>

       public class GeneraMD5

       {

             public GeneraMD5()

             {

                   

             }

             public static string CalcolaMD5Hash(string pFileName)
            
{
               // definizione stringa valore di ritorno
              
string retValue = string.Empty;
              
// generiamo uno stream a partire da un file che rimane in ram
              
// fino a quando non abbiamo concluso il calcolo
              
// il token using consente di aprire e chiudere correttamente
              
// lo stream delimitando l'area di scope
              
// così il GC lavora bene
              
using(System.IO.FileStream fs = System.IO.File.OpenRead(pFileName))
              
{
                    
// definizione del nostro tipo
                    
System.Security.Cryptography.MD5 sscMD5 = System.Security.Cryptography.MD5.Create();
                    
// recuperiamo i bytes dell'hash
                    
byte[] mHash = sscMD5.ComputeHash(fs);
                    
// conversione a 64 bit
                    
retValue = Convert.ToBase64String(mHash);

                }
               
return retValue;           

           }

       }

}

Esempio realizzato con C#

martedì 11 settembre 2007

Windows Vista - Problemi nell'utilizzare Office Image Writer con IE7

Nel mio lavoro di sviluppatore mi è capitato a volte che dialogando con altri colleghi riguardo ad errori del nostro applicativo capitassero problematiche che nascevano dalla combinazione di più cose e nessuno era in grado di dire quale fosse l'elemento che doveva essere rivisto e corretto.

Allo stesso tempo ho riscontrato sulla mia pelle che facendo una stampa da Vista con IE7  con Office Image Writer (crea un file .tiff) apparentemente tutto va bene, ti fa scegliere la stampante, scegliere il nome del file, te lo fa anche visualizzare.

Poi se torni sulla cartella con il file il file è scomparso, se rifai un'altra stampa con IE7 tutto ok di nuovo e ti fa vedere anche il file tiff creato precedentemente ma ... una volta chiusa la finestra di dialogo il "buco nero" si inghiotte anche l'altro file.

Se stampi da xp la stessa cosa con IE7 nessun problema

Se stampi con Firefox la stessa cosa nessun problema

Se stampi da Office o da qualsiasi altro programma nessun problema.

E' la perversa combinazione di Windows Vista + IE7 + Office Image Writer che causa disastri.

Ho provato un primo post su microsoft.public.it.internet_explorer e la risposta è stata (ci avrei scommesso!) rivolgiti al newgroup di vista !, ritornando alla frase iniziale: ciascuno di noi "quando non sapeva" diceva che la colpa era degli altri!, ci scommetterei che se postassi su un NG di Vista otterrei la risposta: "rivolgiti al gruppo di IE o di Office", vedete quanto il mondo è paese?.

lunedì 3 settembre 2007

Inserire una icona nella Header del controllo DataGridView

Girando per i forums mi sono imbattuto in una domanda che mi ha incuriosito, chiedeva suggerimenti riguardo la possibilità di inserire una icona nella header del DataGridView.

Avevo da parte degli appunti presi da una risposta data da un membro del team di sviluppo Microsoft che "allungava" una classe che eredita da DataGridViewColumnHeaderCell ed implementa la gestione dell'icona.

A questa non ho fatto altro che aggiungere la creazione della form e la visualizzazione del risultato.

A questo indirizzo è possibile trovare un progetto con l'esempio per Visual Basic e C#
Un piccolo appunto per la descrizione dei moduli: il progetto è diviso in 3 parti.

  • Esempio Visual Basic
  • Esempio C#
  • Libreria comune in C#

Putroppo non sono stato in grado, dato il poco tempo a disposizione, di fare una piena conversione della classe originale in Visual Basic, chi vorrà utilizzarla con Visual Basic Express dovrà per forza inserirla tra i riferimenti.

Chi lavora con Visual Studio 2005 invece potrà scegliere di inserire anche il progetto libreria tra i riferimenti.

Archivio Sportelli Bancari - Elenco Abi Cab Aggiornato a fine Agosto 2007

L'archivio sportelli bancari elenco Abi Cab aggiornato a fine agosto 2007  è disponibile per lo scaricamento a questo indirizzo:
Alcune informazioni sui files:
- campi separati da tabulazione hex: 09
- righe separate dal terminatore di riga windows hex: 0d0a
- intestazione colonne sulla prima riga
Il file TabAbi contiene i dati relativi alle banche.
Il file TabAbiCab contiene le informazioni relative agli sportelli
Nel file TabAbi e TabAbiCab è presente il campo "Aggiornamento" che evidenzia la data di riferimento di validità dei dati.
Tutte le righe di TabAbiCab che NON contengono la data più recente sono da considerarsi relative a sportelli non più attivi o assorbiti da altre banche, tali sportelli sono presenti solo come log dei dati storici, ne è sconsigliato l'utilizzo per nuove emissioni di flussi di comunicazione con le banche.