Sql Server Optimizer - nice tool
VB.NET - Come cambiare il colore di una ProgressBar (Codice)
VB.NET - COME CAMBIARE IL COLORE DI UNA ProgressBar (Codice)

Imports System.Collections.Generic Imports System.Linq Imports System.Text Imports System.Windows.Forms Imports System.Drawing Imports System.Drawing.Drawing2D Namespace ProgressBarNewStyle Class MyProgressBarStyle Inherits ProgressBar Public ProgressBarLabelValue As String = "0" Public colorText As Color = Color.Green Private obbligateColor As Color Private colorBarBottom As SolidBrush Private colorBarTop As SolidBrush Public Sub New() Me.SetStyle(ControlStyles.UserPaint, False) End Sub Public Sub New(colorBar As Color) Me.SetStyle(ControlStyles.UserPaint, True) Me.obbligateColor = Color.White Me.colorBarBottom = New SolidBrush(colorBar) 'riempimento del "rettangolo" superiore bianco con opacità del 50% Me.colorBarTop = New SolidBrush(Color.FromArgb(128, obbligateColor)) End Sub Protected Overrides Sub OnPaint(e As PaintEventArgs) Dim width As Integer = 0 Dim height As Integer = 0 'La proprietà ClipRectangle applicata su PaintEventArgs ritorna il rettangolo che bisogna riempire Dim rec As Rectangle = e.ClipRectangle 'Calcolo le dimensioni del rettangolo -4 rec.Width = CInt(Math.Truncate(rec.Width * (CDbl(Value) / Maximum))) - 4 rec.Height = rec.Height - 4 'grandezza e altezza del rettangolo con opacità che andremmo a sovrappore su quello principale per 'generare l'effetto width = rec.Width height = (rec.Height \ 2) 'ProgressBarRender.isSupported verifica se può essere effettuato il rendering del rettangolo in questione 'nella progressBar con la visualizzazione corrente del sistema operativo in uso If ProgressBarRenderer.IsSupported Then 'uso un metodo statico su questa classe per disegnare orizzontalmente nel componente 'ovviamente la progressBar verrà svuotata per fare spazio al nostro riempimento ProgressBarRenderer.DrawHorizontalBar(e.Graphics, e.ClipRectangle) End If 'riempio l'interno dei rettangoli ottenuti e.Graphics.FillRectangle(colorBarBottom, 2, 2, rec.Width, rec.Height) e.Graphics.FillRectangle(colorBarTop, 2, 2, width, height) 'Applico una scritta Using sb As New SolidBrush(colorText) Dim sz As SizeF = e.Graphics.MeasureString(ProgressBarLabelValue + " %", Me.Font) e.Graphics.DrawString(ProgressBarLabelValue + " %", Me.Font, sb, New PointF((Me.Width - sz.Width) / 2.0F, (Me.Height - sz.Height) / 2.0F)) End Using End Sub End Class End Namespace
Public Class Form1 Private newProgressBar As New ProgressBarNewStyle.MyProgressBarStyle(Color.Violet) Private newProgressBar1 As New ProgressBarNewStyle.MyProgressBarStyle(Color.GreenYellow) Public Sub New() InitializeComponent() newProgressBar.Location = New Point(12, 12) newProgressBar.Width = 200 newProgressBar.colorText = Color.Black Me.Controls.Add(newProgressBar) newProgressBar1.Location = New Point(12, 50) newProgressBar1.Width = 276 newProgressBar1.colorText = Color.Tomato Me.Controls.Add(newProgressBar1) End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click newProgressBar.Style = ProgressBarStyle.Blocks If newProgressBar.Value < newProgressBar.Maximum Then newProgressBar.ProgressBarLabelValue = newProgressBar.Value.ToString newProgressBar.Value += 10 End If End Sub Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load End Sub Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click newProgressBar1.Style = ProgressBarStyle.Blocks If newProgressBar1.Value < newProgressBar1.Maximum Then newProgressBar1.Value += 10 newProgressBar1.ProgressBarLabelValue = newProgressBar1.Value.ToString End If End Sub End Class
Programming in C# Jump Start
Microsoft Virtual Academy - Programming in C# Jump Start Course
https://www.microsoftvirtualacademy.com/training-courses/developer-training-with-programming-in-c
This developer training course covers C#, Microsoft’s managed C-style language for the .Net Framework. In typical Jump Start fashion, this session will be engaging and demo rich. Microsoft Technical Evangelist Jerry Nixon and the co-founder of Crank211, Daren May, provide sample after sample to show simple and complex techniques you can take back to your workplace.
Because this course loosely follows the criteria for exam 70-483, it is tailored for intermediary to seasoned developers looking to bulk up on C# or for a refresher on core concepts and features.
Instructors | Jerry Nixon | Microsoft Developer Evangelist; Daren May | President & Co-founder, Crank211
good for am 70-483: Programming in C#; Course 20483: Programming in C#
HL7
HL7
L'HL7 è un protocollo di comunicazione utilizzato in ambito sanitario, si tratta di messaggi scambiati vi socket che hanno più o meno questo aspetto:
MSH|^~\&|MELO|MELO|META|LABO|20130218083052||OML^O21^OML_O21|361F406F1DD52C8A689A|P|2.5
PID|||CNAGNN32B20F205P^^^NPAA^NN~CNAGNN32B20F205P^^^MELO^PI||CAIANI^GIOVANNI||19320220000000|M|||^MILANO^^MI^^^BDL^^015146~VIA
TRENTO, 4^CESANO BOSCONE^^MI^20090^^L^^015074~V. TRENTO 4^CESANO
BOSCONE^^MI^20090^^H^^015074|||||||CNAGNN32B20F205P|063SM829|||||||||100^ITALIA^L||||||^^L
PD1|||^^^^^^ASLA
PV1||O|||||27069^DE ANGELIS ANGELO^DE ANGELIS
ANGELO^^^^^MED_BAS||||||||||||0120130218007366^^^MELO^VN|||||||||||||||||||||||||20130218000000
PV2|||||||||||||||||||||||||||||||||||||||||||||^NO
ORC|NW|102822620130218@1^OP^102822620130218@1^URI||102822620130218^OP^102822620130218^URI||N|||20130218083000|CB^^CASSOLA
BARBARA|||01REPCUP^^^^^^^^CUP||||01REPCUP^CUP^LCUP|192.168.201.78^caba||NA|CUP^^^^^MELO&MELO^XX^^^01REPCUP
TQ1|1|1|||||||R
OBR|1|102822620130218@1^OP^102822620130218@1^URI||L00387^PT (PRELIEVO SINGOLO
DEL^LPRZ^90.75.4^PT ( SINGOLO CICLO)||||||||||||^^^^^^^MED_BAS|||||||||||||||O
NTE|1|O|NO|GI^50OBX|1|TS|DTP^DATA ORA PRELIEVO||20130218083000||||||O
Sono composti da vari segmenti che parsati ti danno le informazioni contenute nel messaggio.
Time Line
TIME LINE
La Timeline è un componente molto interessante.... continua....
Giovedi' 23 Maggio 2013 Sant'Onorato, abate
Proprietà Oggetto
Molto utile per vedere tutte le proprietà presenti in un oggetto
$.each(OGGETTO, function (key, element) {
alert('key: ' + key + '\n' + 'value: ' + element);
});
ANDROID - Android Studio non si avvia? Ecco il fix
ANDROID - Android Studio non si avvia? Ecco il fix
ANDROID - Android Studio non si avvia? Ecco il fix
Solo ieri, alcuni utenti si lamentavano del fatto che l’Android Studio non si avviasse su Windows 7 e, curiosando nei vari file di questo bundle, abbiamo scovato il problema e, conseguentemente, il fix.
Iniziamo dal motivo del mancato avvio: allo start, la nostra versione di IntelliJ ha bisogno di trovare la cartella di Java per poterne richiamare un eseguibile. E dov’è il problema? Se abbiamo installato il software, è perché il Java lo ha trovato, non è così? No, benché la premessa sia giusta, il file che avvia il nostro IDE èstudio.bat, che va ad appendere al percorso del JDK la stringa \bin\java.exe, non trovando l’eseguibile, perché la maggior parte di noi ha già inclusa la cartella dei binari nel path dello stesso Java. In questo modo, nella variabile di questo script, la cartella bin viene ripetuta due volte, causando il mancato avvio del software.
Per risolvere questo problema, andiamo quindi a creare tra le nostre variabili di sistema una nuova entry che condurrà alla cartella del JDK in modo univoco per il nostro Android Studio, in modo da non aver ulteriori problemi.
Seguiamo quindi il percorso
Pannello di controllo -> Sistema -> Impostazioni di sistema avanzate -> Variabili d’ambiente
e premiamo il tasto Nuova… più in basso, nel frame relativo alle variabili di sistema. A questo punto, diamo alla nostra nuova variabile il nome ANDROID_STUDIO_JDK e le impostiamo come valore la cartella del JDK dove troveremo la directory bin che, nel nostro caso è C:\Program Files (x86)\Java\jdk1.7.0_17. A questo punto, premiamo su tutti gli OK che vediamo e siamo pronti ad avviare l’Android Studio.
By ImaginSystems & Queen Gin
Deploy one shot da SQL Server on premise a SQL Azure database




Plantronics Voyager Legend UC B235 EMEA
Sono circa 3 mesi che sto utilizzando giornalmente questo auricolare bluetooth di professionale fattura della Plantronics, il Voyager Legend UC B235 EMEA
Ne sono davvero soddisfatto, per tutta una serie di motivi, tant’è che spesso lo utilizzo anche al posto delle cuffiette quando devo vedere filmati o altro al pc.
Diciamo subito che il suo prezzo non è tra i più popolari. Attualmente viene offerto da Amazon a circa 118 euro, che non sono effettivamente pochini.
La scatola che lo contiene è davvero ricca: scatoletta di ricarica, basetta (sempre per la ricarica), manualetto multilingue, connettore bluetooth per pc, caricatore da parete e alcuni copri auricolari di riserva, tutto di eccellente qualità.
La scatoletta che lo contiene è realizzata molto bene. Un coperchio superiore di plastica trasparente racchiude sia l’auricolare che il connettore USB per il pc.
Questa scatoletta ha però 2 importanti caratteristiche.
Innanzitutto ha gli agganci magnetici. Non appena si avvicina il connettore USB, ad esempio, viene subito risucchiato nella sua posizione (molto comodo).
E soprattutto possiede una batteria interna che funge da fonte di ricarica per l’auricolare una volta che lo si inserisce al suo interno (5 micropioli magnetici fanno da passaggio energetico con l’auricolare).
La ricarica di questa scatoletta avviene via USB-MicroUsb collegandola alla sua predisposta presa laterale.
Fino a che non la si utilizzerà nei propri viaggi/spostamenti non ci si immagina neppure la comodità di questa possibilità di ricarica.
Anche senza fonte energetica a portata di mano, basta inserire l’auricolare in questa custodia e subito si ricarica.
Lo stato della sua carica è segnalato da 2 piccoli led blu, e devo dire che riesce a resistere per settimane con un uso medio di ricarica.
Una pensata davvero geniale, che altri produttori di auricolari bluetooth dovrebbero prendere in considerazione (perlomeno per i loro modelli di più alta gamma).
Il cavetto USB-MicroUSB non è però compreso nella confezione, ma è un male minore, dato che ormai lo si trova dappertutto (se si possiede almeno un cellulare, smartphone, tablet, hard disk esterno e così via).
Il connettore bluetooth per pc è piccolo e funzionale.
Non appena inserito nella porta USB viene riconosciuto immediatamente (ho provato sia con Windows 7 che con Windows 8), e permette di utilizzare l’auricolare anche al pc, offrendo la possibilità di non avere fili che intralciano (come quelli delle cuffiette).
Sul lato del connettore, quando è in funzione, compare una striscia led blu molto discreta.
È effettivamente molto comodo poter indossare un solo dispositivo sia per ascoltare dal pc che per rispondere alle telefonate (se sopraggiunge una chiamata mentre si guarda un video, l’auricolare passa immediatamente in modalità telefono).
La vera chicca, ovviamente, è l’auricolare in sé stesso.
Qua sotto un riassunto delle sue caratteristiche principali.
Sul lato posteriore ci sono le 2 levette per accenderlo e per regolare il volume di ascolto.
Sulla striscia che fa da auricolare ci sono 2 pulsanti: quello all’estremità inferiore permette di aprire e chiudere le telefonate, come anche di impartire alcuni comandi – solo in inglese – per verificare lo stato di carica delle batterie (ad esempio).
Quello laterale è per mettere in pausa l’ascolto.
Diciamo che di quest’ultimo non ne ho quasi mai fatto uso, mentre quello alla base lo utilizzo per rispondere alle chiamate.
Quando lo si indossa, infatti, si sente la voce “Incoming call, enter or ignore?”
Ho notato però che bisogna quasi urlare “Enter!” per riuscire ad aprire la chiamata, e perciò mi sono trovato più comodo nel premere semplicemente il piccolo pulsante sull’auricolare.
La ricarica dell’auricolare può essere effettuata in 4 modi diversi.
Utilizzando la base magnetica, come si vede nella figura qua sotto.
Inserendolo nella sua custodia dotata di batteria interna (comodo quando lo si porta appresso – è protetto e nel frattempo si ricarica pure).
Oppure tramite il suo cavo apposito, questo qua.
In questo caso basta semplicemente basta agganciarlo nella apposita fessura e collegarlo alla porta Usb del pc.
Personalmente non ho mai (almeno finora) utilizzato questa modalità, dato che mi è sufficiente la ricarica attraverso la sua custodia.
La quarta modalitàè l’attacco magnetico utilizzando la basetta di ricarica, che consente di mantenere sempre in posizione l’auricolare, come si vede dalla foto qua sotto.
Vediamo un po’ di dettagli tecnici, riassunti nella tabella qua sotto.
Come si vede la durata della batteria dell’auricolare si attesta sulle 7 ore.
Il peso, inoltre, è veramente contenuto, solo 18 grammi, tant’è che dopo un po’, complice anche la sua perfetta ergonomia, non ci si accorgerà nemmeno di averlo indosso.
A questo contribuisce anche il suo rivestimento con una gomma che assomiglia ad una pelle umana, non scivolosa né attaccaticcia, molto ben congegnata.
Che dire, sono veramente soddisfatto di questo auricolare Plantronics.
Se proprio vogliamo trovargli qualche difetto, direi che manca completamente la lingua italiana.
Tutti i messaggi che fornisce sono in inglese
E aggiungerei anche la scarsa sensibilità nel prendere le chiamate semplicemente dicendo “Enter” quando queste arrivano.
Direi comunque che sono piccolezze rispetto a quanto di buono viene offerto.
Tutto sta a trovarlo al miglior prezzo possibile.
OFFRO - Offro Service Manual (Manuali Tecnici) delle seguenti Marche : TOSHIBA - OLIVETTI - ecc..
OFFRO - Offro Service Manual (Manuali Tecnici) delle seguenti Marche : TOSHIBA - OLIVETTI - ecc..

SQL Server Feature Limitations (Windows Azure SQL Database)

WPF - Binding Password in una TextBox
Dopo un po' di stupore ovviamente ho cercato in internet se potesse esserci un senso, ed ho trovato qualcosa:
Allora, sono ricorso al buon metodo "arrangiati" e la mia soluzione più veloce, anche se poco elegante, è stato implementarmi un banale controllo con TextBox e TextBlock, che simuli gli asterischi durante la digitazione.
Usando la TextBox è possibile bindare la proprietà"Text" normalmente, basta mettere il foreground a White così la lettera non si vede e sopra a questa casella di testo, la TextBlock che viene riempita di asterischi durante la digitazione (notare la proprietà"IsHitTestVisible" per essere trasparente alla digitazione).
Il parte di markup è (la proprietà si chiamava "Password"):
<UserControl x:Class="....PasswordTextBoxControl"....>
<Grid HorizontalAlignment="Stretch">
<TextBox Text="{Binding Password,Mode=TwoWay}" Name="txt" TextChanged="txt_TextChanged"
Foreground="White" FontFamily="Courier New" />
<TextBlock Name="lbl" FontWeight="Bold"
FontSize="{Binding FontSize,ElementName=txt}"
FontFamily="{Binding FontFamily,ElementName=txt}"
HorizontalAlignment="Left"IsHitTestVisible="False" Margin="5,0,0,0"
VerticalAlignment="Center" />
Grid>
UserControl>
Mentre il codice che ci sta dietro:
publicpartialclassPasswordTextBoxControl : UserControl
{
public PasswordTextBoxControl()
{
InitializeComponent();
}
privatevoid txt_TextChanged(object sender, TextChangedEventArgs e)
{
lbl.Text = newstring('*', txt.Text.Length);
}
}
Con questo, l'ho utilizzato ed ho ottenuto quello che cercavo:
Tutto risolto, soprattutto senza perderci troppo tempo.
Anche questo caso dimostra come il principio di Pareto ricorra spesso nello sviluppo di un'applicazione...
Windows 8.1
Visto il flop delle vendite sarà rilasciata una versione con funzionalità e caratteristiche leggermente differenti per venire incontro alle esigenze dei consumatori.
Nuove caratteristiche e nuove funzionalità!
Voi cosa ne pensate?
Ahref un nuovo tool SEO
Un tool SEO molto interessante per scoprire backlink.
Andando sul sito https://ahrefs.com/ potete iscrivervi ed iniziare a provare questo fantastico tools.
Grazie alle nuove funzionalità ed alle features innovative permetterà di trovare i link verso un sito web desiderato.

Un tool a nostro avviso davvero interessante ed utile per i professinisti SEO ed per tutti i SEO specialist.
Da provare!
Giocare con i trattori online
Facciamo riferimento a un sito di giochi di trattori sul quale è possibile individuare diversi giochi in cui bisogna controllare veicoli di questo tipo.
Il sito è disponibile all'url giochiditrattori.net e risulta essere semplice da usare.
L'iscrizione non è infatti richiesta e i giochi messi a disposizione sono gratis.
Sono giochi online e per questo motivo devono essere giocati attraverso il browser senza installare programmi sul pc.
Tra i diversi giochi presenti troviamo i giochi di trattori da trasporto che ottengono un enorme successo.
La modalità di gioco proposta è piuttosto facile.
Bisogna guidare i trattori che si trovano nel gioco per portare a destinazione il carico.
Sono giochi nei quali è ncessario essere rapidi e molto precisi per evitarre gli ostacoli senza perdere i prodotti.
Il sito mette a disposizione anche giochi di genere differente come i vari puzzle nei quali è necessario posizionare i pezzi in modo esatto per visualizzare l'immagine di un trattore.
Si tratta quindi di un sito sicuramente utile per i vari appassionati di questo argomento che vogliono passare il tempo in modo decisamente divertente.
Unicode Support from NAV 310 to NAV 2009
Unicode Support from NAV 3.10 to NAV 2009
Microsoft Issues
Ø The double-byte character set, code page ‘XXX’à (ex: 932 Japanese), is not supported by this version of Microsoft Dynamics NAV: Microsoft Dynamics NAV 2009, Microsoft Dynamics NAV 5.0, Microsoft Dynamics NAV 4.0, Microsoft Business Solutions–Navision 3.70, Navision Attain 3.6, or Navision Attain 3.10.
Ø Supported only on NAV 2013, native support
Double-Byte Character Set (DBCS) code page error when you start Microsoft Dynamics NAV
Ø It is known that NAV CC (Classic Client) does not support natively DBCS (Double-Byte Character Set) and so does the new NAV 2009 RTC (Role Tailored Client)
Ø Due to differences in how the CC and RTC check the code page isn’t still possible to enable DBCS in the RTC but this is possible for the CC by implementing new fin.stx file.
Workaround to handle unicode chars
Ø How to enable and to display double-byte character sets in Microsoft Dynamics NAV
https://mbs.microsoft.com/knowledgebase/KBDisplay.aspx?scid=kb;EN-US;915374
WHAT TYPE OF ENCODING?
Ø Roughly speaking regarding what we have done is merely enabling the Japanese characters to be stored into SQL Server but… not directly!
Ø The Japanese code page is 932 (Shift-JIS) while we are using the Latin1 code page 1252 to store the data. To know more about Windows Collation Designators you can check:
http://msdn.microsoft.com/en-us/library/aa176553.aspx
Ø This means that while we are typing Japanese chars in the NAV classic Client (using code page 932), this have been reverted (translation encoded) in their respective characters using code page 1252 and stored in this way in the SQL Server field.
Ø This means that while we are seeing this in NAV :
Ø Then the solution can come out clearly: use C# encoding function to manage the ‘translation’ between one set of character to another.
Support
- Note XXXX (ex. 932) is the placeholder for the one of the following code pages:
http://msdn.microsoft.com/en-us/library/aa176553.aspx
- All windows languages are supported
- SUPPORTO LINGUE CINESE TRADIZIONALE, GIAPPONESE etc.
SPIEGAZIONE SUPPORTO UNICODE PER NAV 2009 e NAV 2013
Ø NAV 2009 non supporta unicode
Ø NAV 2013 supporta unicode nativo
NAV 2013 Sample
Ø On Page Chin2 field is visible with Chinese Char
Ø Unicode & Chinese Data
NAV 2009 Sample, Classic Client
Ø Only unicode, no Chinese
Ø Se sarebbe già possibile (con la modifica sopra illustrata) inserire un dato in cinese (es: su Word) ciò non è sarebbe possibile su NAV in quanto il client non riconosce i caratteri e li scrive in formato “?????????”
Ø In pratica NAV (e SQL Server) non riescono a memorizzare il dato in cinese anche se sembra che possa essere inserito
Ø Su un database SQL Server (con collaction CS o CI latin general_1) non è possibile inserire caratteri cinesi (non li fa scrivere nel db, mette ‘???????’unknow data value)
Le possibilità di gestione sarebbero 3:
Ø 1 - Creare e scrivere direttamente in un db cinese (chinese collaction) > è un nuovo db NAV\SQL
Ø 2 - Convertire il db attuale in unicode support (raddoppia lo spazio su disco, rallenta il database, non sappiamo quanto ci metterebbe a convertirlo, potrebbe non convertire il tutto e bloccarsi durante la conversione; gestirebbe correttamente la scrittura del dato cinese sul db ma non lo potrebbe visualizzare comunque in NAV (cioè scrive nel db ma non visualizza in NAV)
Ø 3 - Modificare il db attuale modificando un parametro che permetta di inserire il dato in formato unicode metadato (cioè non in cinese ma nel suo unicode) dicendo a SQL di non scartare il dato; con questa soluzione in sostanza potremmo importare dati da file esterni : TXT, XLS se salvati in unicode format
Gestirebbe correttamente la scrittura del metadato unicode (creato da alcune procedure di Codifica\Decodifica da installare basate su windows) che rappresenta il cinese ; non lo potrebbe visualizzare comunque in NAV (cioè scrive nel db un dato che potremmo OnDemand convertire in cinese ma non visualizza in NAV)
o Soluzione meno invasiva
“Opzione 3”
Cosa si può fare:
Ø Supportiamo la scrittura del metadato sul database (unicode corrispondente al cinese)
Ø E’ possibile caricare tramite batch input (file TXT, XLS salvato in unicode) nel database
Ø E’ possibile creare ed esporre delle viste che visualizzano sia il metadato che la lingua cinese (da esporre al web)
Ø E’ possibile dal web scrivere il metadato di ritorno al db utilizzando le stesse funzioni usate
Ø Come funziona: tramite 2 funzioni custom su SQL viene fatto Encode \ Decode del dato per permettere di scrivere \ leggere il dato in unicode e di visualizzarlo in cinese.
Come lo facciamo:
Visualizzazione, esposizione dati, importazione\esportazione dati
Ø Modifica ed aggiunta dati: - Per visualizzare i dati in cinese (o modificarli \ aggiungerli etc.) è necessario creare alcune “Windows Forms” da lanciare da Nav per visualizzare\modificare i dati; queste maschere sembrano NAV ma son NAV; sono fatte in Visual Studio. Sarà possibile aggiungere dati salvando in metadati ma visualizzando in cinese
Ø Esposizione dati per Web: - Saranno create delle viste SQL che richiamando le funzioni Encode \ Decode e visualizzeranno in dati in cinese
Es: Vista con dati unicode
/****** Script for SelectTopNRows command from SSMS ******/
SELECTTOP 1000 [Code]
,[DescrReconverted]
,[Descr]
,[Chinese]
FROM[Demo Database NAV (7-0)].[dbo].[CRONUS Italia S_p_A_$V_ART_CINESE_NAV]
Ø Descr = METADATO (unicode), Chinese = dati in cinese (trascodificato da procedura)
Ø Import\Export dati: Saranno creati dei DTS che utilizzando i sistemi di codifica visti sopra permetteranno l’inserimento del metadato unicode.
ES SQL DTSX: COMPLETE FLOW
FLAT FILE (OR UNICODE OR CHINESE COLLACTION TABLE)
OBJECT SCRIPT
Ø Lo script component converte il dato NAV da Chinese in unicode e lo scrive su SQL in unicode (cosa non possibile da NAV)
Ø Input Columns (unicode data from SQL Unicode Table or Unicode TXT or EXCEL files)
DT_WSTR > double bytes for Chinese chars
Ø Output Columns (string format to handle unicode data DT_STR)
/* Help: Introduction to the Script Component */
/* The Script Component allows you to perform virtually any operation that can be accomplished in a .Net application within the context of an Integration Services data flow.
* Expand the other regions which have "Help" prefixes for examples of specific ways to use
* Integration Services features within this script component. */
Namespaces
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
using System.Text;
// RS, 20130531, Encode\Decode Integrated Script (C#)
// This is the class to which to add your code. Do not change the name, attributes, or
// parent of this class.
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
publicclassScriptMain : UserComponent
{
Help: Using Integration Services variables and parameters
* Example of reading from a variable or parameter:
* DateTime startTime = Variables.MyStartTime;
*
* Example of writing to a variable:
* Variables.myStringVariable = "new value";
*/
Help: Using Integration Services Connnection Managers
*
* If the component needs to hold a connection open while processing rows, override the
* AcquireConnections and ReleaseConnections methods.
*
* Example of using an ADO.Net connection manager to acquire a SqlConnection:
* object rawConnection = Connections.SalesDB.AcquireConnection(transaction);
* SqlConnection salesDBConn = (SqlConnection)rawConnection;
*
* Example of using a File connection manager to acquire a file path:
* object rawConnection = Connections.Prices_zip.AcquireConnection(transaction);
* string filePath = (string)rawConnection;
*
* Example of releasing a connection manager:
* Connections.SalesDB.ReleaseConnection(rawConnection);
*/
Help: Firing Integration Services Events
/* This script component can fire events.
*
* Example of firing an error event:
* ComponentMetaData.FireError(10, "Process Values", "Bad value", "", 0, out cancel);
*
* Example of firing an information event:
* ComponentMetaData.FireInformation(10, "Process Values", "Processing has started", "", 0, fireAgain);
*
* Example of firing a warning event:
* ComponentMetaData.FireWarning(10, "Process Values", "No rows were received", "", 0);
*/
///
/// This method is called once, before rows begin to be processed in the data flow.
/// You can remove this method if you don't need to do anything here.
///
Publicoverridevoid PreExecute()
{
base.PreExecute();
/*
* Add your code here
*/
}
/// This method is called after all the rows have passed through this component.
///
/// You can delete this method if you don't need to do anything here.
Publicoverridevoid PostExecute()
{
base.PostExecute();
/*
* Add your code here
*/
}
/// This method is called once for every row that passes through the component from
// Input0.
/// Example of reading a value from a column in the the row:
/// string zipCode = Row.ZipCode
///
///Example of writing a value to a column in the row:
/// Row.ZipCode = zipCode
Publicoverridevoid Input0_ProcessInputRow(Input0Buffer Row)
{
/*
* Add your code here
*/
// Create a new variable of type Encoding and
// assign it the Latin *** code page 1252 ***
// To know more about it
// http://msdn.microsoft.com/en-us/library/system.text.encoding_members.aspx
Encoding nav = Encoding.GetEncoding(1252);
// Create a new variable of type Encoding and assign it the Japanese
// *** Code page 932 Japanese
// Encoding unicode = Encoding.GetEncoding(932);
Encoding unicode = Encoding.GetEncoding(936);
// Assign Rowdata Values
byte[] unicodeCod = unicode.GetBytes(Row.Cod);
byte[] unicodeDescription = unicode.GetBytes(Row.Description);
byte[] reconverted = nav.GetBytes(Row.Description);
// Assign Added Output Fields
this.Output0Buffer.AddRow();
Output0Buffer.CodNav = nav.GetString(unicodeCod);
Output0Buffer.DescriptionNav = nav.GetString(unicodeDescription);
Output0Buffer.Reconverted = unicode.GetString(reconverted);
// **
// ComponentMetaData.FireInformation(10, "Process Values",
unicode.GetString(reconverted), "", 0, true);
// Row.Cod = nav.GetString(unicodeCod);
// Row.Description = nav.GetString(unicodeDescription);
// **
}
}
SQL Destination Preview
Ø Code = converted from Chiese to Unicode
Ø Descr = converted from Chiese to Unicode
Cosa non si può fare nel db attuale (non unicode e non in cinese):
Ø Su Nav non è possibile visualizzare i dati i cinese dal client classic > ‘???????’
Ø Non è possibile stampare il documento in cinese (stesso problema del client) > ‘???????’
Ø Non è possibile fatturare in cinese (e contabilizzare fatture in cinese)
Se servisse fatturare su NAV occorre creare un “DB Cinese”
Ø Importare tramite viste sql e stored procedures i dati dal db attuale sul db cinese trascodificando tramite le funzioni sopra descritte e scrivendo il dato in cinese
Ø Non è possibile eseguire una fatturazione in NAV poiché ci sono dei vincoli nelle localizzazioni cinesi, giapponesi etc.; sulla cinese viene messo un oggetto che collegato al tel. stacca il protocollo di fatturazione cinese che deve validare le fatture
SUPPORT UNICODE IN NAV – PROCEDURA
WINDOWS INPUT DATA
Ø Come indicato nella documentazione Microsoft, Dynamics NAV 2009 non è direttamente abilitato all’utilizzo diretto dei caratteri Unicode. Il sistema operativo (windows) permette di utilizzare i caratteri Unicode anche per la visualizzazione e l’inserimento dei dati con programmi non abilitati utilizzando una particolare impostazione del menu [Region and Language] in ITA [Paese e Lingua] (in questo documento facciamo riferimento ad un client Windows 7). Si suppone che il computer sia già impostato per utilizzare i caratteri cinesi.
MODIFICHE WINDOWS
Come si imposta:
Ø L’impostazione è[Language for non-Unicode programs], che si trova nel tab [Advanced] di [Region and Language]:
Dal menu visualizzato, selezionare Chinese Simplified, PRC,oppure Chinese Traditional (es: Taiwan). Questa impostazione richiede il riavvio del pc.
Ø Fatta questa prima modifica, il client è abilitato all’inserimento dei caratteri Unicode in Dynamics NAV; lo farebbe però solo su un db con collaction cinese
MODIFICA A PARAMETRO NAV (su SQL SERVER) per SUPPORT INPUT UNICODE DATA
Ø Prima di poter effettivamente utilizzare questa caratteristica, è necessario modificare un parametro del server Dynamics NAV che se impostato impedisce l’inserimentonel database di caratteri non compatibili con la collation indicata per il database SQL: per modificare questo parametro è necessario impostare il database in Single User Mode (), effettuare la modifica ed uscire dal Single User Mode.
Il campo [Convalida regole di confronto] in [Confronto] deve essere impostato a FALSE
Ø Cosa fa questo flag : permette a NAV di scrivere i dati senza chiedere la validazione della collaction SQL Server (bypass input)
Ø Gli altri parametri di questa pagina non devono essere modificati.
MY TEST CASE
Ø La principale difficoltà segnalata da Microsoft Italia era relativa all’impossbilità di inserire direttamente i caratteri cinesi nel database Dynamics NAV, in quanto i campi rimangono di tipo VARCHAR mentre i campi contenenti dati Unicode sono di tipo NVARCHAR. Ne deriva che un dato visualizzato in Dynamics NAV come scritto con caratteri cinesi (due bytes) viene in effetti salvato nel database nelle sue componenti costitutive in byte.
Ø Poiché sono presenti alcune procedure di scambio automatico dei dati, è stata implementata nell’ambiente di sviluppo e test una possibile soluzione per questo problema.
Ø Si tratta di una serie di metodi esposti da una classe scritta in C# per .NET 3.5, che forniscono le funzionalità di conversione dalla codifica Unicode cinese e giapponese verso la codifica utilizzata da Dynamics NAV, e viceversa.
Per installare ed utilizzare queste funzioni è necessario abilitare il server nel quale verranno richiamate le funzioni all’utilizzo di CLR, mediante i seguenti comandi:
Da console SQL (new query)
sp_configure'clr enable', 1
GO
RECONFIGURE
GO
Codeunit Parser“UnicodeConverter.dll”
Ø Cosa fa: gestisce la trascodifica unicode tramite DLL Windows
Copiare la DLL UnicodeConverter.dll nella cartella del server SQL (normalmente in C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn\) per l’utilizzo in SQL, tramite il comando
Da console SQL Server (new query)
C# Code per DLL
// ** Code, Encode ** /
// ** RS, 20130531 ** /
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
using System.Text;
// PUBLIC CLASS ** CONVERTER **
publicclassConverter
{
[SqlFunction(IsDeterministic = true)]
publicstaticSqlString Chinese2NAV(SqlString ChineseString)
{
/* Encode es: 1252 Non Unicode*/
Encoding NotUnicode = Encoding.GetEncoding(1252);
/* Encode es: 936 Unicode*/
Encoding Chinese = Encoding.GetEncoding(936);
return (NotUnicode.GetString(Chinese.GetBytes((string)ChineseString)));
}
[SqlFunction(IsDeterministic = true)]
publicstaticSqlString NAV2Chinese(SqlString NotUnicodeString)
{
/* Encode es: 1252 Non Unicode*/
Encoding NotUnicode = Encoding.GetEncoding(1252);
/* Encode es: 936 Chinese*/
Encoding Chinese = Encoding.GetEncoding(936);
// Return Chinese
return (Chinese.GetString(NotUnicode.GetBytes((string)NotUnicodeString)));
}
[SqlFunction(IsDeterministic = true)]
publicstaticSqlString Japanese2NAV(SqlString JapaneseString)
{
/* Encode es: 1252 Non Unicode*/
Encoding NotUnicode = Encoding.GetEncoding(1252);
/* Encode es: 932 Chinese*/
Encoding Japanese = Encoding.GetEncoding(932);
return (NotUnicode.GetString(Japanese.GetBytes((string)JapaneseString)));
}
[SqlFunction(IsDeterministic = true)]
publicstaticSqlString NAV2Japanese(SqlString NotUnicodeString)
{
/* Encode es: 1252 Non Unicode*/
Encoding NotUnicode = Encoding.GetEncoding(1252);
/* Encode es: 932 Chinese*/
Encoding Japanese = Encoding.GetEncoding(932);
// Return Japanese
return (Japanese.GetString(NotUnicode.GetBytes((string)NotUnicodeString)));
}
}
REGISTRAZIONE ASSEMBLY PER DLL SU SQL SERVER
Registrazione DLL‘UnicodeConverter.dll'
Ø CREATE ASSEMBLY UnicodeConverter from 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn\UnicodeConverter.dll' WITH PERMISSION_SET = SAFE
Ø Mio test case:
-- attivazione CLR per supporto Assembly --
sp_configure'clr enable', 1
GO
RECONFIGURE
GO
-- Creazione ASSEBLY per pubblicare la DLL a SQL --
CREATEASSEMBLYUnicodeConverterfrom'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\Binn\UnicodeConverter.dll'WITHPERMISSION_SET=SAFE
Infine devono essere create le funzioni su SQL utente da richiamare per la conversione:
CREATEFunctionChinese2NAV(@matchStringnvarchar(max))returnsnvarchar(max)
ASEXTERNALNAMEUnicodeConverter.Converter.Chinese2NAV
CREATEFunctionJapanese2NAV(@matchStringnvarchar(max))returnsnvarchar(max)
ASEXTERNALNAMEUnicodeConverter.Converter.Japanese2NAV
CREATEFunctionNAV2Chinese(@matchStringnvarchar(max))returnsnvarchar(max)
ASEXTERNALNAMEUnicodeConverter.Converter.NAV2Chinese
CREATEFunctionNAV2Japanese(@matchStringnvarchar(max))returnsnvarchar(max)
ASEXTERNALNAMEUnicodeConverter.Converter.NAV2Japanese
Queste funzioni potranno quindi essere utilizzate per la scrittura e la lettura dei dati nel formato Dynamics NAV.
Ø Si noti che queste funzioni convertono le stringhe senza porre limitazioni circa la lunghezza della stringa stessa: devono quindi essere verificate e confrontate rispetto alla lunghezza effettiva dei campi disponibili in Dynamics NAV tenendo presente il fatto che non c’è corrispondenza tra la lunghezza delle stringhe Unicode e quelle Dynamics NAV equivalenti.
Il test del corretto funzionamento delle funzioni può essere fatto tramite le seguenti chiamate:
Encoding nav = Encoding.GetEncoding(1252);
Encoding unicode = Encoding.GetEncoding(932);
byte[] unicodeBytes = unicode.GetBytes(textBox1.Text);
textBox2.Text = nav.GetString(unicodeBytes);
Select with Functions
select dbo.NAV2Chinese(N'²ÊƼÎâ')
example
Riferimenti:
Microsoft Officials
http://blogs.msdn.com/b/nav/archive/2009/06/16/how-to-manage-nav-dbcs-data-using-c.aspx
https://mbs2.microsoft.com/Knowledgebase/KBDisplay.aspx?scid=kb$EN-US$915374&wa=wsignin1.0
Encoding code page (ex: 1252 ITA)
http://msdn.microsoft.com/en-us/library/system.text.encoding_members.aspx
Blog Kekunda
http://petrescent5.kekunda.com/chan-4194086/all_p1.html
Referencing a custom assembly inside a Script Task
http://microsoft-ssis.blogspot.it/2011/05/referencing-custom-assembly-inside.html
http://microsoft-ssis.blogspot.it/
NAV 2013 SOAP Web Services on a multilanguage environment
Pillole di programmazione C#, C++
http://www.aino.it/Attivita/Appunti_C_Sharp/Programmazione.htm
by Roberto Stefanetti, documents repacked
Come funzionano i giochi di parcheggio online
Il sito di cui parliamo è giochidiparcheggiogratis.com che risulta essere un sito di giochi gratis su cui sono presenti solo giochi di parcheggio.
I giochi di parcheggiare rappresentano una categoria di giochi di guida abbastanza diversi dal normale perchè la precisione risulta essere certamente più importante che la velocità.
I giochi propongono ambientazioni di diverso tipo ma l'obiettivo è sempre lo stesso. Risulta essere necessario parcheggiare il veicolo in un determinato posto evitando i vari ostacoli che si trovano nel gioco.
I giochi di parcheggiare più comuni risultano essere sicuramente i giochi di parcheggio auto nei quali è necessario controllare auto di diverso genere e parcheggiarle in modo corretto.
Troviamo anche giochi più originali come giochi di bus da parcheggiare che hanno una difficoltà superiore per le dimensione del pullman.
I giochi proposti dal sito risultano essere gratis e possono essere giocati in modo molto rapido tramite il browser.
Si tratta per questo motivo di un tipo di giochi facili da utilizzare e decisamente divertenti.
Il trading
Per investire in borsa occorre conoscenza della materia, questo per evitare di perdere durante movimenti finanziari di titoli di borsa, infatti occorre conoscere i mercati per negoziare in modo più professionale. Un'altra soluzione per investire è il trading online che è simile al trading tradizionale, ma con la differenza che i titoli si negoziano via internet con qualunque computer connesso.
Nuovi corsi (riveduti) Trainsignal su SQL Server 2012
A gennaio di quest’anno avevo scritto le mie impressioni dei corsi Trainsignal su SQL Server 2008.
A parte la loro indubbia utilità (offerte formative di questo tipo sono sempre le benvenute), ne avevo sottolineato anche gli aspetti su cui la società avrebbe fatto meglio a dedicare del tempo per apportarne miglioramenti.
Negli ultimi 2 mesi ho potuto accedere alle nuove versioni di questi tutorial, questa volta dedicati a SQL Server 2012 ed anche a gran parte degli altri titoli (gli MTA, ad esempio) che mettono a disposizione, come sempre con una grande preferenza per gli aspetti sistemistici, più che di sviluppo.
Trainsignal è, infatti, piuttosto focalizzata su argomenti sistemistici, come ad esempio le certificazioni Cisco e VMWare.
Per chi non conoscesse la Trainsignal, questa immagine racchiude visivamente la sua storia.
Tutti i corsi offerti sono usufruibili sia online che disconnessi dalla rete, utilizzando il cosiddetto Trainsignal Offline Player, che ne permette il loro download (anche parziale, lezione per lezione) e tiene traccia degli avanzamenti eseguiti.
Ecco qua sotto come appare una schermata di questo tool.
Questo sotto è l’istruttore del corso su SQL Server Querying, una nuova entrata per quanto io sappia.
Mentre qua sotto il sommario di questo corso, “SQL Server 2012 Querying (70-461)”,
specificatamente indirizzato al superamento dell’esame di certificazione Microsoft 70-461.
È comunque molto utile per chiunque, anche alle prime armi, dato che si parte proprio dalle basi dello sviluppo con T-SQL.
Lesson 1: Introduction to SQL Server 2012 (00:08:37)
Lesson 2: Introduction to Relational Databases (00:38:03)
Lesson 3: Introduction to SELECT Statements (00:34:54)
Lesson 4: Filtering Results with WHERE Statements (00:19:56)
Lesson 5: Utilizing Joins (00:31:48)
Lesson 6: Executing Subqueries and UNION Statements (00:23:44)
Lesson 7: Aggregating Data (00:37:47)
Lesson 8: Advanced Data Aggregations (00:33:47)
Lesson 9: Built-In Functions (00:26:29)
Lesson 10: Query Optimization (00:27:03)
Lesson 11: Modifying Data (00:16:42)
Lesson 12: Advanced Data Modification (00:14:18)
Lesson 13: Managing Transactions (00:39:59)
Lesson 14: Implementing Error Handling (00:16:10)
Lesson 15: XML Basics (00:15:28)
Lesson 16: Retrieving XML (00:18:01)
Lesson 17: Importing XML (00:13:15)
Lesson 18: Creating and Altering Tables (00:16:36)
Lesson 19: Data Validation with Constraints (00:37:23)
Lesson 20: Creating and Modifying Triggers (00:18:06)
Lesson 21: Creating and Modifying Views (00:15:46)
Lesson 22: Creating and Modifying Stored Procedures (00:13:11)
Lesson 23: Creating and Modifying User Defined Functions (00:16:50)
Come si vede, una lezione può durare dagli 8 ai 40 minuti.
Manca purtroppo un’indicazione della durata totale del corso.
Diciamo che l’Offline Player presenta alcune comodità degne di nota.
Per prima cosa, come detto, fornisce da subito un’indicazione visiva dell’avanzamento della propria preparazione.
Molto comodi i comandi per aumentare la velocità (1,5 volte) – a patto di comprendere molto bene l’inglese – e rivedere gli ultimi 30 secondi, nel caso si volesse fissare meglio in mente un concetto appena appreso.
Ovviamente ci sono anche le indicazioni temporali: tempo trascorso e durata totale del video.
Il Trainsignal Offline Player presenta però qualche piccolo bug.
Ad esempio, più di una volta, dopo aver tentato di riprendere un download interrotto, mi segnala che c’è un errore in quella lezione, e l’unica azione che posso fare è eliminarla completamente e procedere ad un suo reinserimento nella lista, come si vede da questa immagine.
Un’altra volta, ma questo mi è capitato solo in un’occasione, è proprio uscita una schermata di errore non gestito.
Un’altra volta mi è capitato che la lezione giungesse improvvisamente alla fine, saltando gran parte del suo contenuto, pur mostrando il suo download correttamente completato.
Inoltre, non permette di memorizzare il proprio account, ed ogni volta che lo si lancia bisogna inserire le proprie credenziali. Un po’ scomodo.
Anche il download procede solo 2 lezioni alla volta: per chi dispone di una connessione veloce, è un’impostazione un po’ limitante.
Sicuramente ci sono dei punti da mettere a posto.
Ma a questo punto, non era più semplice consentire il diretto download dei video, magari proteggendoli con una password? Forse sì, ma ogni società prende le sue scelte in merito alla protezione dei propri contenuto.
Tutto sta, però, a fornire un tool di visualizzazione a prova di errori.
Per fortuna è possibile impostare la visualizzazione a tutto schermo, dato che nella modalità normale il video risulta davvero di piccole dimensioni, un po’ sacrificato dalle grandi barre superiore e inferiore.
I corsi sono però indubbiamente migliorati. Migliore presentazione, migliore realizzazione tecnica, cura nei particolari e nei dettagli. L’inglese è ben scandito e ben comprensibile (perlomeno per i corsi che ho potuto seguire io, non so per gli altri).
Alcuni aspetti, però, si potrebbero ancora migliore: innanzitutto dare più spazio alle prove pratiche (su SQL Server in questo caso), lasciando un attimo da parte le numerose slide.
Ho notato, infatti, che in alcune lezioni la parte “slide Powerpoint” occupa la metà della lezione stessa (se non di più). Un po’ troppo: meglio far vedere subito la pratica.
Aggiungerei anche un maggiore livello di approfondimento. I corsi Pluralsight – giusto per avere un metro di paragone – sono più approfonditi ed entrano maggiormente nei dettagli.
Il costo per accedere alla libreria completa si attesta sui 49 $ al mese.
Non è pochissimo, ma bisogna ammettere che la loro offerta è molto vasta, e dal punto di vista sistemistico offre davvero tutto quanto possa servire, in qualsiasi ambito.
Per chi volesse, infine, fare un pensierino sul presentare domanda di assunzione in Trainsignal (hanno sede vicino a Chicago, a Schaumburg, nell’Illinois).
Ecco cosa offrono:
Quante potrebbero essere le aziende di casa nostra che dovrebbero prendere spunto da questa offerta?
Che dire quindi: Trainsignal, come lo era anche prima, rappresenta una buona scelta come fonte di formazione informatica continua, a patto però di comprendere piuttosto bene l’inglese parlato ed accettare un prezzo di listino un po’ superiore alla media.
Ovviamente se questo viene sovvenzionato dalla propria azienda, tanto meglio.