mercoledì, aprile 27, 2016

sabato, agosto 22, 2015

MSDeployUseChecksum too slow

The new (2013) web deploy based on file checksum is very interesting. But it's really too slow. I've tested it on a small web site on Azure (50 items aspx, images, dll, js,. etc). It requires about 3 minutes to check the site and create the list for updates. Too slow. It's completely useless. What a pity!

I noticed an high usage of outbound network on my PC and low inbound. I suppose that Visual Studio transfers all the files to the remote server for the check. Mine is only a guess.

http://blogs.msdn.com/b/webdev/archive/2013/10/30/web-publishing-updates-for-app-offline-and-usechecksum.aspx

mercoledì, maggio 14, 2014

Informazioni di base su email e filtri antispam

[Per un amico, ma potrebbe essere utile anche ad altri, quindi scrivo qui in pubblico]

Un po' di informazioni di base su email e filtri anti-spam.

In estrema sintesi, spesso un'email fa vari salti e passa attraverso vari server prima di giungere al destinatario. Durante questi salti possono intervenire vari sistemi antispam.
Un scenario tipico prevede questi passaggi:
 - client del mittente
 - server del provider email del mittente
 - (eventuali server smtp intermedi)
 - server del provider email del destinatario
 - client del destinatario

Il "client" può essere un vero client (ad esempio Office Outlook) oppure un'applicazione web (ad esempio GMail).
Lo spam può essere filtrato (cioè tolto dalla "inbox" e messo in una sottocartella) e/o bloccato, quindi messaggio non accettato e rimandato al mittente. Chi filtra e/o blocca lo spam? Putroppo un po' tutti: server mittente, server intermedi, server destinatario e client destinatario.
Alcune volte capita di mandare un messaggio ma il destinatario non lo vede. Dov'è andato a finire? In molti posti: rimandato al mittente, cancellato in automatico, messo in sottocartelle di spam/junk, parzialmente cancellato. Quindi il messaggio potrebbe essere in qualche sottocartella "spam" del server destinatario ma non essere visibile dal client del destinatario perchè il client scarica solo la posta della cartella "Inbox/Posta in arrivo", che è già stata filtrata dal server. Oppure essere nella cartella Spam del client locale (ad esempio outlook).

La cosa si complica se il messaggio viene inviato a più persone, o direttamente o via sistemi di mailing-list. Lo stesso messaggio viene copiato ed inviato ad ogni destinatario. In generale ogni copia del messaggio può seguire un percorso diverso, quindi incontrare filtri e regole diverse anti-spam. Risultato? Alcuni ricevono, altri no. E tu, mittente, hai dei feedback? Alcune volte si, altre purtroppo no.

Bisogna poi ricordarsi che esistono anche le blacklist di smtp server e range di indirizzi IP. Quindi il server del mittente potrebbe non essere in grado di inviare email indipendentemente dai filtri antispam.


giovedì, febbraio 27, 2014

How to move records between tables

AD FUTURAM REI MEMORIAM  :)
How to move all records from a source table to a destination table.

This following command only works if the two table are identical (same fields in the same order):

DELETE   [SourceTable]
OUTPUT
            DELETED.*
INTO [DestinationTable]


If stuctures are different, then you need to specify every field you want to copy, respecting the order of the fields of the destination table:

DELETE   [SourceTable]
OUTPUT
              DELETED.Name,
              DELETED.Age,
              DELETED.Address
       INTO [DestinationTable]


lunedì, dicembre 16, 2013

New Azure Storage Client not compatible with current Storage Emulator

Bad news. Azure Storage Client 3.0 and 3.0.1 is not compatible with Storage Emulator 2.2 (the current version). You will get a generic "The remote server returned an error: (400) Bad Request." on CreateIfNotExists().

No mention on releses https://github.com/WindowsAzure/azure-storage-net/blob/master/README.md
Info here: http://blogs.msdn.com/b/windowsazurestorage/archive/2013/11/27/windows-azure-storage-release-introducing-cors-json-minute-metrics-and-more.aspx

:(




sabato, dicembre 14, 2013

Calculate space used by VHD on Azure Blob Storage

A piece of code to calculate space used by VHD files (Azure Virtual Machine) on Azure Blob Storage.
Code adapted (and fixed) from a previous post of Michel Chi http://nettecharticles.blogspot.tw/2012/12/azurevhdcharge.html


        public static void Exec()
        {
            string accountName = ".......";
            string keyValue = ".......";

            Console.WriteLine("UTC NOW : " + DateTime.UtcNow);

            float GB = (1024 * 1024 * 1024);
            float totalBytes = 0;

            var storage = new CloudStorageAccount(new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials(accountName, keyValue), false);
            var blobClient = storage.CreateCloudBlobClient();
            var vhds = blobClient.GetContainerReference("vhds");
            var blobs = vhds.ListBlobs();

            foreach (var blob in blobs)
            {
                var pageBlob = vhds.GetPageBlobReference(blob.Uri.Segments.Last());
                pageBlob.FetchAttributes();
                var pageRanges = pageBlob.GetPageRanges();

                float vhdBytes = pageRanges.Sum(x => x.EndOffset - x.StartOffset);

                totalBytes += vhdBytes;

                Console.WriteLine(new string('-', 60));
                Console.WriteLine("ID         = " + blob.Uri.Segments.Last());
                Console.WriteLine("Used GB    = " + vhdBytes / GB);
                Console.WriteLine("DailyUsage = " + vhdBytes / GB / 31.0);
                Console.WriteLine("PageRanges = " + pageRanges.Count());                

            }

            Console.WriteLine(new string('-', 60));
            Console.WriteLine("Total GB    : " + totalBytes / GB);
            Console.WriteLine("Daily usage : " + totalBytes / GB / 31.0);

            Console.WriteLine(new string('-', 60));
        }

giovedì, novembre 28, 2013

Nuova versione dell'applicazione bollettini allerta meteoidrologica

Tre anni fa, per provare Google App Engine, avevo sviluppa un'applicazione che prelevava i bollettini (pdf!) di Allerta Meteoidrologica di Arpa Piemonte, li elaborava e li mandava (gratuitamente) via email agli iscritti.
In questi giorni ho rifatto l'applicazione, questa volta su Microsoft Azure:  http://fhtino.azurewebsites.net/bollettino/

Solito avvertimento  :)
Data la natura sperimentale e dimostrativa dell'applicazione, non è garantita la correttezza dei dati e la loro regolarità. I dati sono quindi da considerarsi NON VALIDI. Per avere i dati ufficiali fare sempre riferimento a quelli pubblicati sul sito di ARPA Piemonte all'indirizzo http://www.arpa.piemonte.it 




mercoledì, dicembre 12, 2012

Sql 2012 Management Studio bug?

Premetto che non sono un DB Admin (abbiate pietà) ma ho l'impressione che ci sia qualcosa che non va nel Management Studio di Sql 2012 (Express nel mio caso).
Ho fatto un full backup e poi un differnziale. Ho quindi iniziato il processo di restore. Per prima cosa ho fatto il restore del full, lasciano il database "aperto" (NORECOVERY). Successivamente ho fatto il restore del differenziale ma ricevo questo errore: "Unable to create a restore plan due to break in the LSN chain".

Ho seguito Tasks --> Restore --> Database...


e questo è l'errore:


Se invece seguo Tasks --> Restore --> Files and filegroups... funziona tutto per bene.




Ovviamente  funziona tutto per bene anche se eseguo i comandi TSQL direttamente:


RESTORE DATABASE [HA] FROM  DISK = N'D:\temp\dbbackup_tests\Full.bak' WITH  FILE = 1,  MOVE N'HA' TO N'D:\temp\dbbackup_tests\HA.mdf',  MOVE N'HA_log' TO N'D:\temp\dbbackup_tests\HA_log.ldf',  NORECOVERY,  NOUNLOAD,  STATS = 5

RESTORE DATABASE [HA] FROM  DISK = N'D:\temp\dbbackup_tests\Diff.bak' WITH  FILE = 1,  NOUNLOAD,  STATS = 5

Per info, i backup funzionano sia da Management Studio che direttamente da TSQL:


BACKUP DATABASE [HA] TO  DISK = N'D:\temp\dbbackup_tests\Full.bak' WITH NOFORMAT, INIT,  NAME = N'HA-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

BACKUP DATABASE [HA] TO  DISK = N'D:\temp\dbbackup_tests\Diff.bak' WITH  DIFFERENTIAL , NOFORMAT, INIT,  NAME = N'HA-Differential Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10















martedì, maggio 29, 2012

GMail down : sono uno dello 0.11%

Che bello!  Ho scoperto di essere parte di un circolo ristretto ed esclusivo di cui fanno parte solo lo 0.11% degli utenti.  Peccato che sia quello che ha gmail scassato!  :(



venerdì, aprile 20, 2012

sql server compact 4.0 & entity framework & VS 2010 (no web app)

Entity framework of VS2010 SP1 has a good support for sql server compact 4.0. But... it works only in web application projects. It's known issue... or is it feature?  ;)
I've found a simple way to use EF + SqlCompact4.0 with console and winform application in VS2010 SP1. It requires a bit of hack of the db connection string.

1 - Create an EF edmx pointing to a "normal" Sql Server (I used tempdb of a sql server express). Do not map any table.  The resulting connection string in the app.config will be something like this:
<add name="MyEntities" connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\sqlexpress;initial catalog=tempdb;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

2 - Edit the app.config. Modify the connection string and point it to the sql server 4.0 compact file. Save the file.
<add name="MyEntities" connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlServerCe.4.0;provider connection string='Data Source=&quot;C:\path_to_my_file\MyDB.sdf&quot;' " providerName="System.Data.EntityClient" />


3 - Update the EF model from database (right click on the backgrounf of the model). Now it shows the table of the sdf file.





Ad Perpetuam Rei Memoriam