novembre 2005 Blog Posts
try ruby! (in your browser)
Una (IMHO) fantastica web application in ajax per
provare ruby.
Scrivete help sula console per far partire il tutorial
try ruby! (in your browser)
P.S: E' vero che tanti considerano ajax "aria fritta", però che figata...
powered by IMHO 1.3
Invoke e Compact Framework
Dell'importanza del metodo Control.Invoke non mi sembra il caso di discuterne
nemmeno; è stato sorprendente per me però scoprire che di base non è possibile
passare argomenti ad un metodo tramite invoke nel compact framework, visto e
considerato che nell'ambiente di sviluppo per palmari
l'overload public virtual object Invoke(Delegate, object[]); non è supportato!
Ecco quindi una classe, leggermente maneggiata (ma nemmeno tanto)
rispetto a quella disponibile qui, per superare la limitazione:
using System;using System.Collections;using System.Windows.Forms;namespace TerraNova.OnSite{ public delegate void MethodCallInvoker (object[] o); public class ControlInvoker { private class MethodCall { public MethodCallInvoker invoker; public object[] arguments; public MethodCall (MethodCallInvoker invoker, object[] arguments) { this.invoker = invoker; this.arguments = arguments; } } private Control control; private Queue argumentInvokeList = new Queue(); public ControlInvoker(Control control) { this.control = control; } public void Invoke(MethodCallInvoker invoker, params object[] arguments) { this.argumentInvokeList.Enqueue(new MethodCall(invoker, arguments)); control.Invoke(new EventHandler(ControlInvoke)); } private void ControlInvoke (object sender, EventArgs e) { MethodCall methodCall = (MethodCall)argumentInvokeList.Dequeue(); methodCall.invoker(methodCall.arguments); } }}
powered by IMHO 1.3
ImpersonationChanger: una classe per la modifica a runtime dell'account loggato al sistema
Questa classe incapsula una serie di dichiarazioni
P/INVOKE per la modifica a runtime dell'utente loggato al sistema, utile ad
esempio se da una pagina ASP.NET occorre accedere
MOMENTANEAMENTE a risorse accessibili solo come
utente != ASP.NET...
Chiaramente occhio a quello che fate...
using System;using System.Runtime.InteropServices;using System.Security.Principal;namespace GisSharpBlog.Logging{ /// <summary> /// Changes the account logged to system. /// </summary> public class ImpersonationChanger : IDisposable { #region STATIC P/INVOKE DECLARATIONS [DllImport("advapi32.dll")] private static extern int LogonUser(string userName, string domain, string password, int logonType, int logonProvider, ref IntPtr token); [DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)] private static extern int DuplicateToken(IntPtr token, int impersonationLevel, ref IntPtr newToken); [DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)] private static extern bool RevertToSelf(); [DllImport("kernel32.dll", CharSet=CharSet.Auto)] private static extern bool CloseHandle(IntPtr handle); #endregion #region PARAMETERS private const int LOGON32_LOGON_NETWORK = 3; private const int LOGON32_PROVIDER_DEFAULT = 0; #endregion #region CLASS IMPL private WindowsImpersonationContext impersonationContext = null; private string domain = String.Empty; private string username = String.Empty; private string password = String.Empty; public ImpersonationChanger(string domain, string username, string password) { this.domain = domain; this.username = username; this.password = password; } /// <summary> /// Log to system with modified user informations. /// </summary> /// <exception cref="ApplicationException">If wrong user parameters are used.</exception> public WindowsImpersonationContext ImpersonateValidUser() { WindowsIdentity windowsIdentity = null; IntPtr token = IntPtr.Zero; if(RevertToSelf()) { if(LogonUser(username, domain, password, LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, ref token) != 0) { windowsIdentity = new WindowsIdentity(token); impersonationContext = windowsIdentity.Impersonate(); if (impersonationContext != null) { CloseHandle(token); return impersonationContext; } } } if(token != IntPtr.Zero) CloseHandle(token); throw new ApplicationException("Should never reach here!"); } /// <summary> /// Revert changes. /// </summary> /// <param name="impersonationContext"></param> public void UndoImpersonation() { if(impersonationContext != null) impersonationContext.Undo(); impersonationContext = null; } #endregion #region IDISPOSABLE IMPL /// <summary> /// /// </summary> public virtual void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) UndoImpersonation(); impersonationContext = null; } ~ImpersonationChanger() { Dispose (false); } #endregion }}
download code
Ecco come si usa:
using(new GisSharpBlog.Logging.ImpersonationChanger("domain", "username", "password")){ // Do work with new log user credentials...}// Continue with old credentials...
Difficile, no? Sia benedetto il pattern Dispose...
Posto un paio di configurazioni: questo codice mi serviva
per accedere a dei files in rete locale da un WebService, cosa che l'utente
normale ASP.NET non permette di fare; ora, non sono riuscito a compiere tale
operazione utilizzando questa classe (da alcuni post trovati su internet pare
che non sia possibile se non...
Prossima trasferta a Milano... Microsoft Mobile Conference!
Compatibilmente con gli impegni
e le risorse finanziarie, mi sembra molto interessante come conferenza,
soprattutto perchè il Compact Framework 2.0 è un bel salto in
avanti...
Se qualcuno si aggrega, magari si
fa il viaggio insieme
Iscrizioni aperte alla Microsoft Mobile Conference :
evento gratuito del 15 Dicembre dovi si parlerà di sviluppo mobile con
la piattaforma .NET Compact Framework 2.0, Visual Studio 2005 e SQL
2005 Mobile (tutti rilasciati settimana scorsa) .
La giornata si propone
con una serie di sessioni che vanno dalle caratteristiche di base di VS
2005 fino all'approfondimento di alcune tecniche per l'ottimizzazione
dell'accesso a SQL 2005 Mobile. Molti...
[OT] : Veronesi, la chiesa, l'eutanasia...
Segnalo un articolo estremamente interessante dell'oncologo Umberto
Veronesi sul sito della Repubblica.
Lo segnalo perchè parla, con la competenza, la pacatezza e la decisione che
solo un uomo di scienza e di cultura come lui può dare, di argomenti "spinosi" e
importanti, e di questi tempi poche persone parlano di argomenti "spinosi" e
importanti in modo così chiaro.
Certo che bruciare la sua candidatura a sindaco di Milano è stata una bella
stupidaggine, anche se una intervista del genere avrebbe di certo messo in
difficoltà una buona parte della "sinistra" (mi immagino le reazioni di Rutelli
e Mastella...).
Ecco alcuni estratti:
In questo clima che...
Classe Color, serializzazione XML, WebServices...
Memore dei "problemi" avuti in un recente passato da Igor
con la serializzazione della struttura Color, non mi sono stupito
più di tanto quando non ho trovato i membri R, G, e B di una mia proprietà di
tipo Color "dall'altra parte" di un Web Service...
Mi spiego meglio:
ho realizzato un semplice WebService (che dovrà essere obbligatoriamente
consumato da una applicazione .NET - Desktop e PocketPC), che espone una
classe, la quale contiene una proprietà,
TrasparentColor, di tipo Color per l'appunto.
Lato client, e per gli stessi motivi citati da Igor nel suo post, non vengono
ricostruite le proprietà che permettono di recuperare i valori...
Anche SourceForge si rifà il trucco...
Dopo asp.net e gotdotnet, pure sourceforge
cambia layout: da oggi (pare) con ancora più XMLHttpRequest (sta frase
mi ricorda una certa maglietta...).
Cmq fatto bene...
P.S: scusate la pubblicità occulta, ma è per campa...
powered by IMHO 1.3
Google Base in partenza!
E finalmente aggiungo io...
Google
Base
powered by IMHO 1.3
P/Invoke e PocketPC: la rivincita di .NET...
Al di là del titolo stupido, i problemi di "convivenza" tra PocketPC e codice
nativo C++ che citavo in precedenza sono stati risolti grazie
alla segnalazione di Stefano Ottaviani : su MSDN ci sono una serie di articoli che spiegano + o -
tutto quello che c'è da sapere... compreso il problema della ridenominazione dei
metodi, che in realtà si chiama Name Mangling:
basta aggiungere alla firma dei metodi extern "C"
per evitare la modifica del nome dei
metodi!
Per quanto riguarda il problema dell'eccezione
NotSupportedException
generata se
si usano come tipo...
P/Invoke e Pocket PC: istruzioni per l'uso
Parallelamente al progetto che sto intraprendendo attualmente, ho iniziato a seguire un
"percorso alternativo": sto cercando di vedere se e come realizzare un software
GIS su piattaforme PocketPC.Nell'analisi delle possibilità di sviluppo del
software, ho verificato che non esiste la possibilità di gestire via palmare i
file .dbf tramite codice managed, sia tramite il Compact
Framework 1/2, che tramite estensioni OpenNET o componenti esterni.Siccome
xò i file dbf sono alla base della gestione degli attributi nei file shapefile
(PDF delle specifiche del formato di file Shapefile), ed è
essenziale che qualsiasi cosa si chiami GIS gestisca bene questo formato di file
(che...
DllImport ed extern functions: tipi unmanaged e corrispondenti tipi managed
Questa tabella riassuntiva penso sarà utile a chiunque stia "impazzendo" col P/Invoke, (e dire che l'intervento di Raffaele al workshop è stato pure molto istruttivo...
C/C++
C#
HANDLE, LPDWORD, LPVOID, void*
IntPtr
LPCTSTR, LPCTSTR, LPSTR, char*, const char*, Wchar_t*, LPWSTR
String [in], StringBuilder [in, out]
DWORD, unsigned long, Ulong
UInt32, [MarshalAs(UnmanagedType.U4)]
bool
bool
LP<struct>
[In] ref <struct>
SIZE_T
uint
LPDWORD
out uint
LPTSTR
[Out] StringBuilder
PULARGE_INTEGER
out ulong
WORD
uInt16
Byte, unsigned char
byte
Short
Int16
Long, int
Int32
float
single
double
double
NULL pointer
IntPtr.Zero
Uint
Uint32
L'articolo completo lo trovate qui
P.S: Postare senza IMHO (che non so perchè oggi non vuole andare... aspetto di riavviare il PC e riprovare prima di dichiararlo un bug!) è un incubo...
[OT] IE in un tab di firefox!
Chi usa Firefox conosce sicuramente IE View, che permette di aprire il browser Internet Explorer durante la navigazione in internet con Firefox.
Con IETab però è possibile aprire IE come tab di Firefox!
Fantastico...
[OT - Fantacalcio]: L'armata rossa alla prima vittoria della nuova gestione!
Spinto da pressanti moti di piazza, ho rilevato una
società di (fanta)calcio oramai allo sbando, causa una precedente gestione a dir
poco fallimentare da parte di un presidente, tale Lorenzo
Secchiaroli (il cui soprannome "Mostro di Jesi" dice
tutto...), interessato più agli eventuali introiti dei diritti televisivi (che
non ci sono stati visti i deludenti risultati) che agli autentici valori
sportivi che sottendono alla gestione di una società sportiva qualsiasi; la
squadra, al termine del girone di andata, occupava il terz'ultimo posto in
classifica, ed i giocatori erano oramai abbandonati a loro stessi e ai piaceri
del lusso in attesa...
Google aiuta OpenOffice...
Google plans to hire programmers to improve OpenOffice.org, a
demonstration of its affinity for open source initiatives and one the
company believes also shows sound practical sense.
Fonte: Google throws bodies at OpenOffice | CNET News.com
Sembra chiara la voglia di aiutare OpenOffice nella lotta contro Office,
strano xò che Google non pensi a creare una web application di qualche tipo (in
effetti un Word fatto in ajax nn me lo immagino proprio...).
Magari è solo per dare fastidio "politicamente" a Microsoft...
powered by IMHO 1.3