Montegrotto Terme, 31/12/2007
Qui da noi al nord (ma ricordiamoci che tutti sono a sud di qualcuno e che a Milano ancora chiamano i veneti "terun dal nord") in questi giorni è pieno di turisti, soprattutto italiani che passano le feste negli alberghi facendosi spalmare il corpo di fango.
Ci sono le luminarie e ci sono gli avvisi luminosi del nostro sindaco (con la s minuscola) che invita i concittadini a emigrare perchè è impossibilitato a difenderci contro gli extracomunitari (considera extracomunitari tutti gli stranieri, senza distinzione tra extracomunitari "veri" e comunitari di altri paesi) i suoi allegati sono ancora più restrittivi, considerano allo stesso modo "extracomunitari" tutti quelli che non sono nati sulla Padania da figli di Padani.
Al mio sindaco l'augurio di perdere tutti gli extracomunitari che non lo lasciano dormire, così poi vediamo se i miei concittadini albergatori e i lavoratori delle terme sono contenti.
Auguri al nostro Presidente Napolitano, che è una roccia incrollabile, un esempio per noi giovani.
Auguri al PdC Prodi, speriamo che la sua bonarietà non sia male interpretata.
Auguri alla maggioranza, vorrei vedervi almeno per un giorno accapigliarsi su che cosa fare per risolvere i problemi piuttosto che assistere alle penose mediazioni su come spartirsi la torta dei finanziamenti e dei tagli favorendo clientele e mafiosità sempre presenti a tutti i livelli di governo.
Auguri all'opposizione di passare dalle forme di monarchia assoluta almeno ad una monarchia costituzionale, ricordandosi che fare opposizione non vuol dire diare del "comunista" a tutti quelli che non ci piacciono ma confrontarsi sui problemi reali.
In definitiva .. auguri a tutti, in una simile situazione si può solo pensare che al peggio non c'è mai fine.
lunedì 31 dicembre 2007
I Miei Auguri Di Felice Anno Nuovo 2008
giovedì 27 dicembre 2007
Dynamics NAV - Calcolo IBAN
Come noto dal 1' gennaio 2008 il codice IBAN è obbligatorio sui flussi dove sono presenti Abi/Cab Conto Corrente.
Agli amici di Dynamics NAV ha provveduto Microsoft con una sua HotFix.
Per avere l'aggiornamento è sufficiente collegarsi al sito Microsoft Dynamics Partnersource e scaricare l'hotfix.
Appena ho un pò di tempo verifico il loro algoritmo rispetto al mio :)
sabato 15 dicembre 2007
Calcolo Cin BBAN IBAN per VBA / VB6
Ho apportato alcune modifiche ai sorgenti del progetto Visual Basic 6 per far funzionare il calcolo anche con un foglio Excel / VBA.
Esempio per VB6
Esempio per VBA
giovedì 13 dicembre 2007
Una funzione di arrotondamento per C# e VB.NET
Ho riscritto una vecchia funzione di arrotondamento che avevo relizzato con vb6.
Per la realizzazione ho sfruttato la classe Math del Framework .NET nei suoi metodi:
Math.Round - Arrotondamento matematico
Math.Ceiling - Arrotondamento per eccesso
Math.Floor - Arrotondamento per difetto
L'arrotondamento presentato nella funzione è alquanto diverso da quello del framework, infatti sono possibili anche arrotondamenti come quello presentato nella form, impossibile da realizzare con la sola classe Math.
Il campo arrotondamento presentato è la "vera" differenza, sul campo (e sul parametro della funzione) va inserito il valore del "seme" dell'arrotondamento da ottenere es: 1 per arrotondamento all'unità 0,1 per l'arrotondamento con 1 decimale, 0,01 con due decimali (questi tre casi sono risolvibili anche con la sola classe Math), invece sono possibili anche arrotondamenti allo 0,15 o 9,998.
Storicamente, la funzione è nata per risolvere il problema del calcolo della quantità (peso) di materia prima da introdurre nelle confezioni, infatti con 1 grammo si facevano più di 10 confezioni, piccole differenze di materia prima moltiplicate per molte volte facevano saltare fuori grandi differenze con conseguenti problemi per gli approvvigionamenti che dovevano essere il più "giusti" possibile.
venerdì 7 dicembre 2007
Sql Server Books Online - Settembre 2007
La documentazione aggiornata a settembre 2007 di Sql Server 2005 è disponibile per lo scaricamento.
martedì 4 dicembre 2007
Windows Vista - Non smette mai di stupirmi
Oggi volevo vedere se finalmente riuscivo a configurare una stampante Hp 970Cxi attaccata al mio linux
A dire il vero già riesco a stampare ma tramite Samba, volevo vedere se ci riuscivo usando il protocollo LPD.
E questo cosa c'entra con Windows Vista chiederete, c'entra , c'entra ora lo spiego:
Si dà il caso che il protocollo LPD su vista sia necessario attivarlo a parte, quando si dice il caso!, insieme a questo sono disabilitati di default Telnet e Ftp non sarà perchè i maggiori server che consentono tali connessioni sono dei sistemi Unix/Like ?
A pensare male si va all'inferno ma ci si indovina!
lunedì 3 dicembre 2007
Archivio Sportelli Bancari - Elenco Abi Cab Aggiornato a fine Novembre 2007
L'archivio sportelli bancari elenco Abi Cab aggiornato a fine novembre 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.
Questo archivio è da considerarsi frutto di una rielaborazione "amatoriale" dei dati, si declina ogni responsabilità derivante dai danni causati dal suo uso.
domenica 2 dicembre 2007
Microsoft Outlook Connector? - No Grazie
Questo è quanto dice Microsoft sulla pagina dello scaricamento gratuito di MIcrosoft Outlook Connector
"Con Microsoft Office Outlook Connector, è possibile utilizzare Microsoft Office Outlook 2003 o Microsoft Office Outlook 2007 per accedere e gestire gratuitamente gli account di Microsoft Windows Live Hotmail o Microsoft Office Live Mail, inclusi messaggi di posta elettronica e contatti."
Ok, ho fatto una prova però quello che si sono dimenticati di dire è che connector prende possesso e riattiva i al massimo livello i filtri antispam rendendo la protezione uguale a quella che ho sulla mia casella di Hotmail, non solo! ha applicato il filtro anche alla mia casella di posta IMAP che ho su un server Linux server che non è raggiungibile dall'esterno, lo uso per archiviare la posta di outlook fuori dal mio portatile.
I filtri antispam di Microsoft su outlook fanno più danni che altro, almeno a mio avviso sono incapaci di distinguere il vero spam da normali messaggi di una mailing list, specie quella su Postgresql , io da molto tempo li avevo disattivati, ho scelto di utilizzare SpamBayes un tool antispam che riesce a intercettare tutto lo spam in arrivo.
Una seconda cosa che non mi è piaciuta è la gestione dei calendari, quello di Outlook e quello di Hotmail sono due calendari che mi sarebbe piaciuto vedere unificati in un unico calendario ma ... la feature, a meno che non abbia preso un abbaglio, non è gratuita ma a pagamento.
Poi ho cominciato a notare un rallentamento della possibilità di accedere alla mia posa su hotmail, da quando arriva l'avviso (se ho msn attivo) e il momento in cui posso materialmente accedere alla posta passano dei minuti.
Alla fine ho disinstallato Micrososft Outlook Connector
sabato 1 dicembre 2007
Visual Studio Express 2008 - Prime impressioni
Ho scaricato dal mio abbonamento MSDN l'immagine ISO del DVD contenente Visual Studio 2008 Express.
La suite di Visual Studio 2008 Express è composta dai pacchetti:
- Visual Basic 2008 Epress Edition
- Visual C# 2008 Express Edition
- Visual C++ 2008 Express Edition
- Visual Web Developer 2008 Express Edition
- Sql Server 2005 Express Edition
Visual Studio 2008 Express può essere scaricato qui nelle versioni "Web Install" e "Offline Install", nel primo caso si possono scegliere i pacchetti singolarmente, nel secondo caso è necessario scaricare l'intera suite da masterizzare successivamente in un DVD.
Non esiste ancora la localizzazione italiana, ma ... consiglio di installare sempre e comunque la versione inglese :)).
Ho installato C# Visual Basic e Visual Web Developer
Esiste anche la possibilità di scaricare e installare localmente MSDN LIbrary nelle versioni "Express" (specifica per le versioni Express) oppure anche nella versione "classica" per Visual Studio 2008, la differenza tra l'uno e l'altra è che la versione "Express" è limitata al solo framework .net o quasi mentre la versione completa contiene anche molti altri riferimenti e documentazione come ad esempio le API WIN32, Visual Studio 6 (non più in vendita), ecc.
L'installazione di MSDN Library è consigliata a quanti sono sprovvisti di una connessione veloce, chi è beneficiato da tale fortuna può utilizzare MSDN Library OnLine come fonte primaria di ricerca.
La versione su DVD contiene anche MSDN Library per cui è inutile scaricarla singolarmente, rimane comunque la possibilità di scaricare la versione completa di MSDN Library.
Sono installati anche Sql Server Compact Edition 3.5 ed il runtime di SilverLight
L'installazione, fatta su una macchina virtuale con Windows XP Sp2 gestita da Virtual PC 2007 è durata circa 30 minuti per l'installazione di C# che ho attivato per prima e circa 10 minuti ciascuno per Visual Basic e Visual Web Developer.
Su XP avevo già presenti Visual C# express 2005 e Visual Basic 2005, ho provato ad aprirli autonomamente ed insieme a C# Express 2008, nessun problema di compatibilità riscontrato.
Rispetto alle connessioni disponibili gestite dal wizard di configurazione del dataset non è cambiato nulla o quasi, a Sql Server 2005 e Access (Access 2007 escluso) è stato aggiunto di Sql Server Compact Edition 3.5, ovviamente tutti e tre i database per essere usati devono risiedere nella macchina che esegue Visual Express.
Ovviamente la mia applicazione con Visual C# Express 2008 è stata quella di generare un nuovo progetto "Windows Presentation Foundation", aggiungere un bottone e un evento, il tutto ovviamente in onore di Kernigan e Ritchie lanciare la mia esortazione, come dovrebbe ogni buon neofita.
Mi spiace, i sorgenti del progetto non sono disponibili neanche a pagamento! )).
giovedì 29 novembre 2007
Windows Vista - Ancora non ci siamo con la velocità delle cartelle condivise
Ho due portatili, uno con un Acer Travelmate 8104WLMi con XP / SP2 2GB ram ed un Acer Travelmate 8125WLMi con Vista Ultimate + SP1 beta 2 4GB ram.
Ho connesso su entrambi un disco del mio server Linux, ho "alzato" Wingrep, fatto la medesima ricerca su entrambi, su XP 41,1 secondi, con Vista 132,4 secondi.
Da notare che su Vista ho già disattivato la feature "Compressione Differenziale Remota".
Speriamo bene perchè Vista nonostante tutto comincia a piacermi
mercoledì 21 novembre 2007
Gestire l'allineamento del testo nei controlli ListBox con C# e VB.NET
Per risolvere il problema dell'allineamento (Sinistra, Giustificato, Destra) si può intercettare l'evento DrawItem del controllo di tipo ListBox e ridefinire graficamente la stringa.
Una enumerazione per la gestione del DataSource della ComboBox
enum Allineamento
{
Giustificato,
Sinistra,
Destra
}
...
comboBox1.DataSource = Enum.GetValues(typeof(Allineamento));
Gestiamo il ridisegno delle stringhe intercettando DrawItem
// intercettiamo l'evento DrawItem
void ListBox1DrawItem(object sender, DrawItemEventArgs e)
{
Graphics g = e.Graphics;
SolidBrush sBrush;
string s;
StringFormat sFormat = new StringFormat();
// Scelta allineamento
switch(comboBox1.SelectedValue.ToString())
{
case "Sinistra":
sFormat.Alignment = StringAlignment.Near;
break;
case "Destra":
sFormat.Alignment = StringAlignment.Far;
break;
default:
sFormat.Alignment = StringAlignment.Center;
break;
}
try
{
s = listBox1.Items[e.Index].ToString();
}
catch (Exception ex)
{
s = "";
Trace.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
}
// definizione oggetto di tipo SolidBrush che
// utilizzeremo per disegnare la stringa
sBrush = new SolidBrush(Color.White);
g.FillRectangle(sBrush, e.Bounds);
if (e.State == DrawItemState.Selected)
g.FillRectangle(Brushes.LightBlue, e.Bounds);
g.DrawString(s, listBox1.Font, Brushes.Black, (RectangleF) e.Bounds, sFormat);
sBrush.Dispose();
}
Riferimenti
Esempio realizzato con C
Esempio realizzato con VB.NET
martedì 20 novembre 2007
Automazione Office Outlook - Utilizzo del Late Binding - Esempio Invio Mail
A compendio del mio post precedente ho potuto verificare che la libreria, necessaria per l'interfacciamento Microsoft.Office.Interop.Outlook è disponibile solo a partire dalla versione 2003.
Per poter usare l'automazione su queste e sulle versioni precedenti ho installato Office 2000 su un mio pc virtuale, ho potuto in questo modo referenziare la libreria di Outlook e "costringere" il compiler a generare la dll wrapper, cosa che non ero riuscito a fare con Office 2007.
Anche i riferimenti interne alle enumerazioni di Outlook sono leggermente cambiate.
Ho riconfezionato gli esempi:
domenica 18 novembre 2007
Automazione Office Outlook - Utilizzo del Late Binding - Esempio di invio Mail
Ne avevo bisogno per lavoro, ho provato a cercare in giro ma non sono riuscito a trovare esempi di utilizzo del Late Binding per l'invio di posta utilizzando l'automazione di Office Outlook.
Pazienza :)) me lo sono fatto da me.
L'automazione di Office su C# e VB.NET è possibile sostanzialmente con le tecniche:
- Early Binding
- Late Binding
L'Early Binding prevede la definizione e l'utilizzo degli oggetti di Office all'interno del programma, l'uso dei membri di Office è fatto direttamente all'interno degli statements, l'associazione degli oggetti è fatta durante la fase di compilazione.
Microsoft.Office.Interop.Outlook.Application oApp; // definizione oggetto di tipo Outlook.Application
oApp = new Microsoft.Office.Interop.Outlook.Application(); // creazione nuovo oggetto
// Definizione di oggetto di tipo MailItem
Microsoft.Office.Interop.Outlook.MailItem mItem = (Microsoft.Office.Interop.Outlook.MailItem) oApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
// Assegnazione valori
mItem.To = myemail@myserver.com;
...
mitem.Send(); //invio email
L'early Binding è relativamente semplice da utilizzare una volta imparato il "trucco" è più veloce del Late Binding ma ha il grosso svantaggio che l'associazione tra la nostra interfaccia e Office prevede che chi utilizza il programma sia in possesso della stessa versione di Office di chi ha scritto il programma.
Per ovviare a questo fondamentale inconveniente di solito "il programmatore" fa uso della versione più bassa di Office in circolazione, infatti con questa tattica è di solito le versioni successive di Office "funzionano" con l'Early Binding.
Il Late Binding invece è più complesso perchè prevede la definizione e l'utilizzo di Office solo come server, nel programma si "lanciano" dei comandi al server (Outlook) e con questi comandi si possono impostare/leggere delle proprietà o eseguire dei metodi.
L'ho detto che si utilizzano solo o quasi la classe object e la Reflection per dare i comandi?, ora si può ben capire che diventa tutto molto, molto più complicato.
In compenso però si è svincolati dal legame alla versione di Office, infatti l'associazione è realizzata durante l'esecuzione del programma.
L'apertura del collegamento con il server è fatta generando un'istanza di Otlook:
objClassType = Type.GetTypeFromProgID("Outlook.Application");
objApplication = Activator.CreateInstance(objClassType);
Si prosegue definendo un oggetto di tipo MailItem, allo sesso modo dell'Early ma .. con una sintassi alquanto più complicata.
// Definizione di oggetto di tipo MailItem
objMailItem = (( Microsoft.Office.Interop.Outlook.MailItem) InvokeMethod(objApplication, "CreateItem", Microsoft.Office.Interop.Outlook.OlItemType.olMailItem));
Per ovviare in modo parziale alla complicazione ho provveduto con un Metodo ad hoc.
// Definizione interfaccia per Esecuzione metodo
private object InvokeMethod(object obj, string sProperty, object[] oParam)
{
return obj.GetType().InvokeMember(sProperty, BindingFlags.InvokeMethod, null, obj, oParam);
}
L'assegnazione delle proprietà avviene sempre in modo indiretto tramite InvokeMember mediante l'utilizzo di del metodo "SetProperty"
// Assegnazione valori
SetProperty(objMailItem, "To", m.To);
..
Allo stesso modo dei metodi ho provveduto alla definizione del metodo SetProperty
private void SetProperty(object obj, string sProperty, object oValue)
{
object[] oParam = new object[1];
oParam[0] = oValue;
obj.GetType().InvokeMember(sProperty, BindingFlags.SetProperty, null, obj, oParam);
}
Alla fine si può inviare la mail
// Invio mail
object ob = InvokeMethod(objMailItem, "Send" , null );
Riferimenti
Progetto di esempio realizzato con C#
Progetto di esempio realizzato con VB.NET
Reflection
Definizione Binding
Windows Vista Sp1 Release Candidate Preview
Ho recentemente installato il Sp1 RC preview di Windows Vista.
Anche questo Service Pack è riservato ai beta tester Microsoft agli abbonati MSDN e TechNet.
Visto che avevo già precedentemente installato il SP1 RTM (Release To Manufacturing) ho dovuto disinstallarlo.
Tra la disinstallazione e la successiva installazione del SP1 RC di Windows Vista ho "consumato" circa 3 ore.
La prima impressione è che si tratti di un prodotto "maturo", i drivers / programmi preesistenti sia alla prima beta che installati durante la prima beta continuano a funzionare correttamente.
Mi aspetto ora qualche grosso guaio come contraccolpo alle mie dichiarazioni :))
sabato 10 novembre 2007
Piccole differenze tra Visual Studio 2005 e SharpDevelop
Usando indifferentemente secondo entrambi, Visual Studio 2005 e SharpDevelop ho notato alcune differenze su come vengono organizzati, alla creazione, i progetti Visual Basic e C#.
Con C# entrambi generano un progetto che ha nella classe "program.cs" il punto di entrata e partenza con le classiche istruzioni:
/*
* Creato da SharpDevelop.
* Utente: Luciano
* Data: 14/10/2007
* Ora: 11.13
*
*/
using System;
using System.Windows.Forms;
namespace SerializeCs
{
/// <summary>
/// Class with program entry point.
/// </summary>
internal sealed class Program
{
/// <summary>
/// Program entry point.
/// </summary>
[STAThread]
private static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
}
Visual Studio come unica differenza da #D on C# genera la classe Program non dichiarandola internal e sealed
Dove cambia invece è sulla generazione dei progetti Visual Basic.
Visual Studio non genera nessun file separato e mette la Form (Form1) come oggetto di avvio.
#D genera un file "program.vb" che contiene una estensione della classe MyApplication e mette questo oggetto come oggetto di avvio
' Creato da SharpDevelop.
' Utente: Luciano
' Data: 09/11/2007
' Ora: 16.25
'
Imports Microsoft.VisualBasic.ApplicationServices
Namespace My
' This file controls the behaviour of the application.
Partial Class MyApplication
Public Sub New()
MyBase.New(AuthenticationMode.Windows)
Me.IsSingleInstance = False
Me.EnableVisualStyles = True
Me.SaveMySettingsOnExit = False ' MySettings are not supported in SharpDevelop.
Me.ShutDownStyle = ShutdownMode.AfterMainFormCloses
End Sub
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = My.Forms.MainForm
End Sub
End Class
End Namespace
Visual Studio inoltre di default "mostra tutto" su C# e "nasconde gran parte" dei file su Visual Basic (per vedere i file nascosti è necessario premere l'opzione "mostra tutti i file".
Queste differenze mi hanno portato ad una semplice conclusione:
Psicologicamente Microsoft considera Visual Basic inferiore a C# in quanto considera Visual Basic come un IDE che deve predisporre un progetto che avrà in genere una sola Form.
L'atteggiamento mentale della costruzione dell'interfaccia è sì rivolta alla semplificazione del lavoro ma qui abbiamo passato il limite, si è fatto un gran lavoro per nascondere di default agli occhi del pubblico opzioni che invece su C# non sono neanche state parametrizzate o previste.