martedì, dicembre 06, 2016
mercoledì, aprile 27, 2016
Visual studio 2015 update 2
... e siamo alle solite: un update che scassa quello che prima funzionava.
Votate, votate, votate!
https://connect.microsoft.com/VisualStudio/feedback/details/2551316/untracked-files-section-missing-from-git-changes-dialog
Votate, votate, votate!
https://connect.microsoft.com/VisualStudio/feedback/details/2551316/untracked-files-section-missing-from-git-changes-dialog
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
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.
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]
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,
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
:(
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));
}
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
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
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! :(
Iscriviti a:
Post (Atom)