Welcome to MSDN Blogs Sign in | Join | Help

Per gli appassionati di PowerShell

e magari anche per altri che vogliono trovare un punto di appoggio in italiano, ecco che è nato http://www.powershell.it/

Buona fortuna,

Posted by giuliov | 2 Comments
Filed under:

Ma Team Foundation Server è usato in Microsoft?

La risposta breve è sì.

Penso sia più interessante però saperne qualcosa di più.

È usato da "gruppuscoli" minoritari?

No. Ad esempio è usato praticamente da tutti i gruppi che sviluppano il Framework .Net, Visual Studio e Team Foundation Server.

È usato per tutti gli sviluppi Microsoft.

No: il passaggio non è così immediato e indolore considerando che stiamo parlando di migliaia di sviluppatori e milioni di righe di codice. In altri grossi gruppi, come quelli preposti a SQL Server, Office e Windows la transizione è ancora in corso e durerà ancora parecchio.

Dobbiamo capire che il grado di automazione del processo di sviluppo è molto avanzato e bisogna fare i conti con gli strumenti già in essere: bisogna migrare dai repository di codice sorgente esistenti, avere una visione complessiva delle attività tracciate in strumenti diversi, modificare gli script di build, eccetera. Qualcuno è molto avanti, come il gruppo di SQL, altri più indietro.

Ma quanto è usato allora?

Concretamente si è arrivati a oltre 1300 progetti TFS, con più di 8400 utenti attivi e 8800 build al mese (quasi 300 al giorno!), per un totale di 27 milioni di file ripartiti tra 20 diverse istanze di TFS.

Naturalmente l'infrastruttura non è composta solamente da un paio di "serverini a lama" ;-)

 

Immagino vi siano molte altre domande cui rispondere, ma per oggi ho finito il tempo.

Posted by giuliov | 1 Comments
Filed under:

COM senza registrazione e file Manifest

C'è un piccolo gioiello in Visual Studio C++ 2005 ed è il Manifest tool (mt). Qualcuno avrà letto degli articoli come Registration-Free Activation of COM Components: A Walkthrough che spiegano che da Windows XP è possibile utilizzare una componente COM "privata" alla mia applicazione senza bisogno di registrarla.

Per questo si devono compilare dei file manifest che contengano le informazioni normalmente scritte da una componente nel registry al momento della propria registrazione. Questi file son semplici concettualmente (banali per chi ha mai dovuto ripulirsi il registry a mano) ma è improponibile riempirli a mano per una componente che abbia più di una manciata di classi e di interfacce.

Visual Studio C++ 2005 ha una simpatica opzione per creare in automatico il file manifest durante la build del progetto di una componente COM, tra le proprietà del progetto, sotto Configuration Properties / Manifest tool / Isolated COM e questo va bene se ho i sorgenti della componente COM.

Quello che non ho trovato facilmente nella documentazione o nei forum è la risposta alla domanda: se ho una componente COM già realizzata, come faccio a generare il manifest?

Se ne ho la TLB (tipicamente è inclusa nelle risorse della DLL) bastano tre parametri ad MT, ad esempio:

mt -tlb:SomeCom.dll -dll:SomeCom.dll -out:SomeCom.X.manifest

Il manifest così prodotto manca solo di un passo, aggiungere come l'elemento assemblyIdentity, come in questo esempio.

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">


  <assemblyIdentity
    type="win32"
    name="SomeCom.X"
    version="1.0.0.0" />

  <file name = "SideBySide.dll">
    <!-- contenuto generato da MT -->
  </file>

  <comInterfaceExternalProxyStub >
    <!-- contenuto generato da MT -->
  </comInterfaceExternalProxyStub>

</assembly>

Adesso per usare le classi contenute nella componente COM dovremo solo creare un manifest per il programma chiamante, qualcosa del tipo:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity type="win32" 
                    name="myOrganization.myDivision.myApp" 
                    version="1.0.0.0" 
  />
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" 
                    name="SomeCom.X" 
                    version="1.0.0.0" 
      />
    </dependentAssembly>
  </dependency>
</assembly>

A questo punto potete cominciare a dimenticarvi di regsvr32.

Posted by giuliov | 1 Comments
Filed under:

Xe .NET

Venerdì sera son andato all'incontro (http://www.xedotnet.org/48/section.aspx/282) dello User Group locale.

Cos'è uno User Group? In breve è un gruppo di persone, tipicamente riunito in una assocazione no-profit per scambiare esperienze e diffondere informazioni su un tema particolare, nel caso il Microsoft .NET Framework. Non si parla solo di nostri prodotti ma anche di altre iniziative, ad esempio DotNetNuke o NHibernate. Il momento di maggior valore è lo scambio di domande e di opinioni che va oltre la classica presentazione.

Ho una curiosità, dalla constatazione di una speciale enfasi sullo sviluppo web. E' il riflesso della realta regionale, o una caratterizzazione del gruppo?

Che altro dire... che ho constatato la professionalità e la qualità degli interventi e chi può partecipi ai prossimi incontri!

Posted by giuliov | 0 Comments
Filed under: ,

Rafal Lukawiecki

Stamattina leggevo il post di Sudano (http://blogs.ugidotnet.org/janky/archive/2007/11/11/teched-speaker-profile-rafal-lukawiecki.aspx) sulla sessione di Lukawiecki e mi ha ricordato della bravura di quest'uomo.

Durante un TechEd (credo del 2003), andai ad un Chalk Talk tenuto da Lukawiecki (mi pare il tema fosse sulle metodologie di sviluppo del software) e rimasi impressionato.

Non aveva lucidi pronti ma solamente un blocco gigante, di quelli con i fogli formato poster, e un pennarello. Dopo 15 minuti di introduzione è passato alle domande del pubblico... e ha tenuto un filo logico senza saltellare da un tema ad un altro! E a nessuno era permesso di porre più di una domanda alla volta, ma doveva attendere la conclusione del giro.

Così non mi stupii di scoprire che era uno dei migliori in circolazione... da non perdere anche se l'argomento non pare interessarvi.

Posted by giuliov | 1 Comments
Filed under:

Creare uno shortcut

 

La domanda del cliente pareva banale, ma ho faticato un po' a capire quale fosse la strada più agevole e con meno dipendenze per creare uno shortcut, così alla fine son arrivato a questo.

Nel progetto si aggiunge una reference alla libreria COM "Microsoft Shell Control And Automation" or direttamente a SHELL32.DLL.

// startup shortcut
string linkDir = Environment.GetFolderPath(Environment.SpecialFolder.Startup);
string linkFilename = "MyNotepad.lnk";
string linkPath = Path.Combine(linkDir, linkFilename);
// create dummy shortcut so getting the ShellLinkObject succeeds 
File.Create(linkPath).Close();
Shell shell = new ShellClass();
Folder folder = shell.NameSpace(linkDir);
FolderItem item = folder.Items().Item(linkFilename);
ShellLinkObject link = (ShellLinkObject)item.GetLink;
// now set shortcut properties as you like
string sysPath = Environment.GetFolderPath(Environment.SpecialFolder.System);
string targetPath = Path.Combine(sysPath, "notepad.exe");
link.Path = targetPath;
link.WorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
link.Description = "My Notepad shortcut";
string iconPath = Path.Combine(sysPath, "moricons.dll");
link.SetIconLocation(iconPath, 1); link.Save(linkPath);

Ho impostato alcune proprietà giusto per divertimento.

Nello specifico ero interessato a far partire in modo automatico un programma al logon e l'uso dello shortcut non da' i problemi associati alle chiave di registry tipo la HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run. L'MSDN specifica infatti:

A program run from any of these keys should not write to the key during its execution.

mentre invece l'obiettivo è che il programma, una volta lanciato, controlli se è impostato per partire in modo automatico.

[Aggiornato il 19/11/2007: Corretta la formattazione così da rendere leggibile il codice]

Posted by giuliov | 1 Comments
Filed under:

Lo script del consulente

Come consulente devo seguire più progetti su clienti diversi, ognuno dei quali ha una configurazione (rete, server, stampanti) diversa. Nel listato che segue ho riprodotto uno schema di script da usare per riconfigurare il portatile.

 1: @echo off
 2: echo Cliente - Sede
 3: pushd
 4: setlocal
 5:  
 6: ECHO interface ip > "%temp%\z.netsh"
 7: ECHO set address "Local Area Connection" static 192.168.0.123 255.255.255.0 192.168.0.160 3 >> "%temp%\z.netsh"
 8: ECHO set dns "Local Area Connection" static 192.168.0.162 >> "%temp%\z.netsh"
 9: ECHO add dns "Local Area Connection" 192.168.0.163 >> "%temp%\z.netsh"
 10: netsh -f "%temp%\z.netsh"
 11:  
 12: route add 192.168.99.200 mask 255.255.255.255 192.168.0.254
 13:  
 14: set LAN_USR1=DOMINIO\utente
 15: set LAN_PWD1=password
 16:  
 17: net use /delete /y *
 18:  
 19: echo Internet Proxy
 20: net use \\proxy\IPC$ %LAN_PWD1% /USER:%LAN_USR1%
 21:  
 22: echo Network Shares
 23: net use Q: \\server\share %LAN_PWD1% /USER:%LAN_USR1%
 24:  
 25: echo Set Default Printer 
 26: RunDll32.EXE printui.dll,PrintUIEntry /y /n "nome stampante"
 27:  
 28: echo Setting proxy
 29: ECHO Windows Registry Editor Version 5.00 > "%temp%\z.reg"
 30: ECHO [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings] >> "%temp%\z.reg"
 31: ECHO "ProxyEnable"=dword:00000001 >> "%temp%\z.reg"
 32: ECHO "ProxyServer"="proxy:port" >> "%temp%\z.reg"
 33: reg import "%temp%\z.reg"
 34:  
 35: endlocal
 36: popd

Come si vede c'è un unico file che contiene tutti i dati necessari. I passi principali sono:

  • impostazione di indirizzi di rete fissi, gateway, DNS, ecc (righe 6-12)
  • aggancio di share di rete e autenticazioni varie(righe 17-23)
  • impostazione della stampante di default (riga 26)
  • impostazione del proxy per l'accesso a Internet (righe 29-33)

Manca solo un passo ed è di agganciare il riconoscimento automatico della rete di Vista

Capture

all'esecuzione dello script!

Posted by giuliov | 2 Comments
Filed under:

Silverlight Hi-def

Carl Franklin ha messo in piedi un video demo ad alta definizione (1280x720 29 frames al secondo) con Silverlight http://perseus.franklins.net/homeatlast/. Un modo gradevole di capire le potenzialità di Silverlight.

Un avviso se vedete che l'audio non è sincronizzato con il video, vuol dire che il client non ce la fa; ad esempio il mio notebook con un Turion va' a scatti, mentre sul mio PC di casa con Athlon 64 3500 e ATI Radeon X300 è perfetto.

Posted by giuliov | 2 Comments

Un'altro linguaggio per Visual Studio?

Somasegar in questo post della scorsa settimana pubblicizza F# e lo pensa come un lingaggio di prima classe (In my mind, F# is another first-class programming language on the CLR). In realtà F# possiede già un notevole livello di integrazione con VS2005, provare per credere! Project template, editor integrato, debugger...

...le mie reminiscenze di Lisp stanno riemergendo...

Posted by giuliov | 1 Comments

Channel 9 in italiano

A Redmond (località vicina a Seattle dove si trova la sede centrale di Microsoft) c'è un discreto gruppo di italiani, così che abbiamo la fortuna di avere una nuova serie di filmati e registrazioni in italiano direttamente dall'America! Guardate qui.

Posted by giuliov | 1 Comments

Chi vuol studiare Silverlight

Può trovare qui una ricca guida.

Per chi non lo sapesse Silverlight è il nome ufficiale di WPF/E, la nuove piattaforma per creare applicazioni web interattive.

Posted by giuliov | 0 Comments

Esempi PowerShell

Riprendiamo il tema PowerShell e vediamo alcuni esempi chiassosi, roba da poche righe ma d'effetto.

Start-Transcript -Path c:\temp\transcript.ps1

Genera uno script con i comandi che via via si digitano interattivamente.

$user = [ADSI]"WinNT://./Administrator,user"

$user.description

Legge la descrizione dell'utente Administrator mediante ADSI.

(320gb*425)/1000GB

GB e MB son unità di misura predefinite… purtroppo solo queste.

([DateTime]::Now - ([DateTime]"1964-11-24")).Days

Quanti giorni ho oggi?

dir -include *.vbs, *.ps1, *.bat -recurse | Group-Object extension –noelement

Quanti file con script di comando (cioè VBS, PS1 e BAT) ho?

(dir | where {$_.name -like '*.docx'}).count

Quanti file DOCX ci sono in questa cartella?

Get-WmiObject IisWebService -namespace "root\MicrosoftIISv2"

L'oggetto WMI che rappresenta IIS.

Get-ChildItem | Measure-Object -property length -sum -max -min –average

Dimensione dei file nella cartella: compresa somma, minimo, massimo e media.

$rssUrl = "http://blogs.msdn.com/giuliov/rss.aspx"

$blog = [xml](new-object System.Net.WebClient).DownloadString($rssUrl)

$blog.rss.channel.item | select title -first 8

Gli 8 post più recenti del mio blog.

$url = "http://files.skyscrapr.net/users/arcast/ARCast20061113-ScottGu.mp3"

$file = "D:\Downloads\PodCast\ARCast - Scott Guthrie - the man, the myth, the legend.mp3"

$clnt = new-object System.Net.WebClient

$clnt.DownloadFile($url,$file)

Scarica un file da Internet.

gc test.txt | Measure-Object -Character -Word –Line

Word count (wc) sul file test.txt!

cd "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"

New-ItemProperty -Path . -Name ProxyEnable -PropertyType DWord -Value 0 –Force

Disabilita il proxy per Internet Explorer modificando il registry.

cd "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"

New-ItemProperty -Path . -Name ProxyEnable -PropertyType DWord -Value 1 -Force

New-ItemProperty -Path . -Name ProxyServer -PropertyType String -Value "myproxy:80" -Force

New-ItemProperty -Path . -Name ProxyOverride -PropertyType String -Value "*.local;<local>" –Force

Definisce un proxy per Internet Explorer, sempre agendo sul registry.

$a,$b = $b,$a

Scambia il valore di due variabili (swap).

@"

quiet 0 25

normal 26 50

loud 51 75

noisy 75 100

"@ > data.txt

$data = Get-Content data.txt | foreach {

$e=@{}

$e.level, [int] $e.lower, [int] $e.upper = $_.split()

$e

}

Costruisce un dizionario di intervalli.

($data | where { ($_.lower -lt 50) -and ($_.upper -ge 50) }).level

Uso del dizionario per vedere in che intervallo cade il valore 50.

(1,2,3)[-1]

Prende l'ultimo elemento del vettore (-2 è il penultimo, ecc.).

$prop = "length"; "Hello world".$prop

Richiamo di una proprietà per nome.

# capture the output objects in $output and the error objects in $error

$error = $( $output = myScript ) 2>&1

Come catturare in due variabili sia gli oggetti di output che quelli di errore.

myScript > file.txt

# syntactic sugar for

myScript | Out-File –path file.txt

La redirezione dell'output è in effetti un uso convenzionale della pipeline.

$id = [System.Security.Principal.WindowsIdentity]::GetCurrent()

$p = New-Object System.Security.Principal.WindowsPrincipal($id)

if ($p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator))

{

    $Host.UI.RawUI.WindowTitle = "Administrator: " + $Host.UI.RawUI.WindowTitle

}

Cambia il titolo della console per indicare se sta girando con i privilegi amministrativi (utile se inserito nel profile script, ad es. Microsoft.PowerShell_profile.ps1).

# disable UAC

cd HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies

Set-ItemProperty -Path . -Name ConsentPromptBehaviorAdmin -Value 0

Disabilita UAC… ovviamente se la shell PS sta girando con i privilegi amministrativi.

Remove-Item Alias:dir

function dir {cmd /c dir $args}

Ripristinare il comando dir originale di CMD.EXE rimuovendo l'alias di PS che esegue il cmdlet Get-ChildItem.

Posted by giuliov | 1 Comments
Filed under: ,

PDC07 rinviato

Ovvero non si chiamerà più PDC07 ma PDC08 (o 09 o che ne so io).

Parlo della Professional Developer Conference, l'evento internazionale di maggior nota per gli sviluppatori su piattaforma MS.

Notizia qui.

Io comunque avrò la mia dose d'America quest'estate (materia per scrivere in futuro).

Posted by giuliov | 0 Comments
Filed under:

Pat Helland è tornato

http://blogs.msdn.com/pathelland/archive/2007/05/14/i-m-glad-to-be-back.aspx

La cosa incredibile è che te ne accorgi dopo giorni, cercando tutt'altro. Spero che rientri nel giro degli eventi (TechEd, PDC, ecc.)

Posted by giuliov | 0 Comments
Filed under:

Team Foundation Server news

E' uscita una nuova guida da patterns & practices per TFS. Non so se avrò il tempo di leggerla ma è sicuramente utile per consultazione. p&p sta producendo parecchio materiale per TFS in attesa che arrivino le nuove versioni.

Quello che ho scoperto personalmente si deve seguire alla lettera le istruzioni della Team Foundation Installation Guide; cercate di usare gli answer file (adattandoli) e di lanciare i setup dalla riga di comando per quanto possibile.

Gli esperti TFS son comunque altri: Barbieri (MVP) e Pica (MS) e altri.

stavolta però son arrivato 1

Posted by giuliov | 0 Comments
Filed under:
More Posts Next page »
 
Page view tracker