PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005...

19
P P i i a a t t t t a a f f o o r r m m e e Antonio Cisternino Antonio Cisternino 11 Febbraio 2005 11 Febbraio 2005 O O p p e e n n S S o o u u r r c c e e e P P r r o o p p r r i i e e t t a a r r i i e e Un mondo di Un mondo di componenti componenti

Transcript of PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005...

Page 1: PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.

PPiiaattttaaffoorrmmee

Antonio CisterninoAntonio Cisternino

11 Febbraio 200511 Febbraio 2005

OOppeenn

SSoouurrccee

e PPrroopprriieettaarriiee

Un mondo di Un mondo di componenticomponenti

Page 2: PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.

Componenti, gli unknown

• L’architettura di Windows è sostanzialmente differente da quella Unix

• Nel tempo i componenti binari, piuttosto che gli eseguibili, sono diventati la vera unità di esecuzione di Windows

• Molte delle caratteristiche della piattaforma Windows sono legate a questa sua struttura

Page 3: PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.

Componenti binari

• La tecnologia chiave per l’architettura a componenti di Windows è COM

• I componenti COM sono componenti binari: un programma li può caricare ed eseguire anche se sviluppati separatamente e con linguaggi di programmazione differenti

• Il sistema si basa su convenzioni di compilazione e il meccanismo del caricamento dinamico delle DLL

Page 4: PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.

COM Live Demo

• Ma cosa vuol dire esattamente che non ci sono applicazioni ma componenti?

• Quali applicazioni sono in realtà componenti?

• La Object Shell è stata sviluppata per poter sperimentare con i componenti COM interattivamente e scrivere più facilmente script

Page 5: PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.

Come funziona?

• Il registro di sistema fu introdotto in Windows 3.0 per supportare COM

• Il ruolo fondamentale che esso gioca è quello di tenere traccia dei componenti installati nel sistema

• I GUID non sono altro che chiavi per navigare il registro

Page 6: PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.

Windows Scripting Host

• Molti (quasi tutti) credono che gli script in Windows siano ancora i file batch

• NO! La vera programmazione di sistema è basata su Active Scripting e Windows Scripting Host

• Tutti i task di sistema sono esposti mediante componenti COM

• Informazioni e documentazione: http://msdn.microsoft.com/scripting

Page 7: PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.

L’architettura

Page 8: PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.

Javascript

• Sebbene WSH ammette vari linguaggi JScript è indubbiamente un buon linguaggio:– È l’implementazione Microsoft di ECMA-262– È utilizzato anche nelle pagine Web (e

XSLT)– È un linguaggio molto ben disegnato

• Alcune applicazioni (come ad esempio Office) usano VBScript, ma è facile convertire un linguaggio nell’altro

Page 9: PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.

Javascript in 2 slidesfunction apply(arr, f) { var ret = new Array(arr.length); var i; for (i = 0; i < arr.length; i++) ret[i] = f(arr[i]); return ret;}function printArray(arr) { var i, s = "{ "; for (i = 0; i < arr.length; i++) { if (i != 0) s += ", "; s += arr[i]; } s += " }"; WScript.Echo(s); }function inc(i) { return i + 1; }var a = new Array(1, 2, 3, 4, 5);printArray(a);printArray(apply(a, inc));

Page 10: PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.

...la secondafunction Persona(n, c) { this.Nome = n; this[“Cognome”] = c;}var p = new Persona('Antonio',

'Cisternino');

function PersonaEq(o, n, c) { o.Nome = n; o.Cognome = c;}p = PersonaEq({}, 'Antonio',

'Cisternino');

function Stack() { this.sp = 0; this.Push = function (v) { this[this.sp++] = v; } this.Pop = function () { if (this.sp == 0) throw "Empty Stack!"; return this[--this.sp]; } this.IsEmpty = function () { return this.sp == 0; }}try { var s = new Stack(); s.Push(1); s.Push("Ciao"); WScript.Echo(s.Pop()); WScript.Echo(s.Pop()); WScript.Echo(s.Pop()); // Errore! s.Push(2); // Non verra` eseguito!} catch (e) { WScript.Echo("Errore: " + e);}

Page 11: PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.

FileSystemObjectvar fso = WScript.CreateObject("Scripting.FileSystemObject");

function ProcessDir(d, p) { var e; for (e = new Enumerator(d.Files); !e.atEnd(); e.moveNext()) { var f = e.item(); if (f.Path.match(p)) WScript.Echo(f); } for (e = new Enumerator(d.SubFolders); !e.atEnd(); e.moveNext()) { var cd = e.item(); ProcessDir(cd, p);}}try { if (WScript.Arguments.length != 2) { WScript.Echo("Usage: find dir pattern"); WScript.Quit(0); } d = fso.GetFolder(WScript.Arguments.Item(0)); p = new RegExp(WScript.Arguments.Item(1)); ProcessDir(d, p);} catch (e) { WScript.Echo(e);}

Page 12: PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.

System Info...var wshnw = WScript.CreateObject("WScript.Network");var wshsh = WScript.CreateObject("WScript.Shell");var out = "Informazioni sul programma (WScript):\n\nWSH exe: " + WScript.FullName + "\nScript

name: " + WScript.ScriptFullName + "\nN. Argomenti: " + WScript.Arguments.length + "\n";for (i = 0; i < WScript.Arguments.length; i++) out += "Args[" + i + "] = '" + WScript.Arguments(i)+ "'\n"out += WScript.interactive ? "Lo script è interattivo\n" : "Lo script non è interattivo\n\n"; WScript.Echo(out);out = "Informazioni di rete (WshNetwork):\n\nComputer name: " + wshnw.ComputerName + "\nDomain

name: " + (wshnw.DomainName == undefined ? "Nessun dominio" : wshnw.DomainName) + "\nUser name: " + wshnw.UserName + "\n\nConnessioni di rete:\n\n";

for (d = wshnw.EnumNetworkDrives(), i = 0; i < d.length; i+= 2) out += d.Item(i) + " -> " + d.Item(i + 1) + "\n";out += "\nStampanti Installate:\n\n";for (p = wshnw.EnumPrinterConnections(), i = 0; i < p.length; i+= 2) out += p.Item(i) + " -> " + p.Item(i + 1) + "\n\n"; WScript.Echo(out);out = "Basic Shell Information:\n\nCurrent Directory: " + wshsh.CurrentDirectory + "\n\

nEnvironment variables:\n\n";for (en = new Enumerator(wshsh.Environment); !en.atEnd(); en.moveNext()) out += en.item() + "\n";sf = new Array("AllUsersDesktop", "AllUsersStartMenu", "AllUsersPrograms", "AllUsersStartup",

"Desktop", "Favorites", "Fonts", "MyDocuments", "NetHood", "PrintHood", "Programs", "Recent", "SendTo", "StartMenu", "Startup", "Templates"); out += "\nSpecial Folders:\n\n";

for (i = 0; i < sf.length; i++) out += sf[i] + " -> '" + wshsh.SpecialFolders.Item(sf[i]) + "'\n";out += "\nYour HKCR\\.exe default value is '"+wshsh.RegRead("HKCR\\.exe\\")+"'\n\n";

WScript.Echo(out);

Page 13: PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.

Componenti utili (DB)

var rs = WScript.CreateObject("ADODB.Recordset");

var connstr = "Driver={Microsoft Excel Driver (*.xls)};DBQ=Prova.xls;DriverID=278";

rs.Open('select * from "Sheet1$"', connstr);while (!rs.eof) { WScript.Echo(rs(0)); rs.MoveNext();}

Page 14: PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.

Accounting (ADSI)var container =

GetObject("LDAP://cn=Users,dc=miodominio,dc=it");var e = new Enumerator(container);

for (; !e.atEnd(); e.moveNext()) { var user = e.item(); if (user.Get("objectCategory").indexOf("Person") !

= -1) { WScript.Echo(user.distinguishedName); }}

Page 15: PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.

XML (MSXML)

Page 16: PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.

.NET Hype

Page 17: PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.

A managed OS

Page 18: PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.

Monad, a .NET shell

Page 19: PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.

Conclusioni