Nuovo portatile Apple... peccato che VS non giri su OSX

Ieri al MacWord sono state presentate le novità per il 2006 in ambito Apple, e tra le varie spicca senz'altro il nuovo portatile MacBook Pro, primo computer di Apple con processore Intel, per la precisione Intel Core Duo, sviluppato da Intel appositamente per Apple.

Io sono sempre stato "contro" i sistemi Apple, ma devo ammettere che da qualche anno stanno facendo dei prodotti sempre più belli, in primis iPod e poi PowerBook, iBook, ecc...

Ormai il mio vecchio portatile Acer ha quasi 3 anni, sta raggiungendo l'età della pensione... sto facendo un pensierino all'acquisto di questo nuovo gioiellino di casa Apple, ma ha due difetti:

  1. la versione base (quella con 512Mb di RAM e processore a 1,67Ghz, 80Gb HDD) costa ben (o "solo" come dice il trafiletto sul sito Apple) 2159€... la versione con 1Gb di RAM e processore a 1,83Ghz, 100Gb HDD, costa 2699€
  2. oltre che per lavoro, sviluppo software basato su .NET anche per passione, e siccome Visual Studio non gira su Mac OsX...

Data la dotazione di serie, cioè Wi-Fi, Bluetooth, rete gigabit, masterizzatore DVD, webcam, dischi SATA da 80 o 100Gb, scheda video ATI Radeon 128/256Mb, monitor 15" e il sw in dotazione (OS X, iLive, Front Row), i 2159€ ci potrebbero anche stare, ma VisualStudio è fondamentale...

powered by IMHO 1.3

[OT] Dormire troppo fa male al cervello

E' stata chiamata "inerzia del dormire", e si riferisce alla situazione nella quale si trova il cervello umano al risveglio dopo tanto tempo passato a dormire.

"Un individuo risvegliatosi da poco è in una situazione simile se non peggiore rispetto a una persona ubriaca"

Ecco da dove deriva la frase "Dormire troppo fa diventare finocchi"

Concordo in pieno con questa "scoperta" dei ricercatori del Colorado, quando si dorme troppo inutilmente, al risveglio si è mentalmente più stanchi di quando ci si è coricati (a me succede tutti i weekend nei quali non vado fuori Milano)

Per maggiori dettagli: Se il sonno dura troppo il cervello si sveglia male

powered by IMHO 1.3

UrlRewriting con ASP.NET 1.1

Sfortunatamente non so ancora sviluppando software reale sul nuovo framework, quindi eccomi a postare ancora qualcosa sul FW 1.1

UrlRewriting, tecnica essenziale per rendere più facilmente digeribili gli url del proprio sito ai motori di ricerca che, per qualche motivo, preferiscono www.mysite.com/2005/12/12/3456/index.aspx al più comune www.mysite.com/index.aspx?y=2005&m=12&d=12&transId=3456

Con ASP.NET ci sono sostanzialmente 4 metodi per farlo:

  • Filtro ISAPI
  • HTTP Handler
  • HTTP Module
  • metodo Begin_Request del Global.asax

Non faccio ora una trattazione di quele sia il metodo migliore in base alla esigenze, ne sulle differenza tra handler e module. Per un'articolo più dettagliato ed esaustivo vi rimando all'articolo di MSDN: URL Rewriting in ASP.NET.

Io vi do giusto due linee guida per fare velocemente, in situazioni senza autenticazione, un modulo per l'URL Rewriting.

  1. Scrivere una classe che implementi IHttpModule
  2. Implementare i due metodi Init e Dispose
  3. Nel metodo Init registrare un'event handler sull'evento della HTTPApplication al quale ci si vuole "attaccare" (nel mio caso mi collego banalmente alla BeginRequest)
  4. Scrivere nell'event handler le proprie regole di rewriting, e alla fine chiamare il metodo Context.RewritePath(path, pathInfo, queryString)
  5. Registrare il modulo nel web.config

Qui una parte del codice che gestisce l'operazione di rewriting (ho omesso la mia regola di rewriting perchè troppo specifica)

    public class UrlRewriter: IHttpModule
    {
        
public UrlRewriter()
        {
        }

        
public void Init(HttpApplication app) 
        {
            app.BeginRequest+=
new EventHandler(app_BeginRequest);
        }

        
public void Dispose() 
        {
        }

        
private void app_BeginRequest(object sender, EventArgs e)
        {
            HttpApplication app = (HttpApplication) sender;
            
            
// Qui ci va le regola di rewriting
            // Potrebbe essere complessa come leggere l'url, cercare in un DB
            // il titolo del post, recuperarne l'id
            // o facile come prendere la directory numerica e salvarne
            // il valore nel context
            // nel mio caso prende url del tipo
            // www.mysite.com/145/default.aspx, tolgo la cartella numerica,
            // e la salvo nel context per poi usarla nella pagine
            
            
app.Context.Items.Add("idRivista",idRivista);
                
string queryString="";
            
if(!app.Context.Request.Url.Query.Equals(""))
                queryString=app.Context.Request.Url.Query.Substring(1);
            app.Context.RewritePath("~/"+fileName,String.Empty,queryString);
        }
    
    }

Approfondimenti ulteriori:

HTTP Handlers and HTTP Modules in ASP.NET
URL Rewriting with ASP.NET (su Codeproject)

powered by IMHO 1.3

Membership/Role Provider: tool di gestione personalizzato

Ho appena trovato sul blog di Scott Guthrie un puntatore ad due ottimi articoli di tal Peter Kellner su come sviluppare una serie di pagine di gestione che utilizzano il componente di Membership/Role provider nativo di ASP.NET 2.0.

L'esempio usa ObjectDataSource per bindare le classi del default provider alle datagrid usate per la gestione: il problema principale è che non si può usare direttamente la classe Membership
 così come fornita dal Framework, quindi ha realizzato un wrapper che esponesse i metodi necessari per la creazione, l'aggiornamento e la selezione degli utenti presenti.

In particolare ho visto una caratteristica mai vista e che dovrò approfondire, cioè la definizione dell'interfaccia della classe wrapper usando degli attributi ad-hoc per ObjectDataSource:

 [DataObject(true)]
 
public class MembershipUserWrapper {
   [DataObjectMethod(DataObjectMethodType.Select, 
true)]
   
static public Collection<MembershipUserWrapper> GetMembers(string sortData) {
     
return GetMembers(truetruenull, sortData); 
   }
  
   [DataObjectMethod(DataObjectMethodType.Insert, 
true)]
   
static public void Insert(string UserName, bool isApproved, string comment, DateTime lastLockoutDate, …) {
10    }
11          
12    [DataObjectMethod(DataObjectMethodType.Delete, 
true)]
13    
static public void Delete(object UserName, string Original_UserName){
14      Membership.DeleteUser(Original_UserName, 
true);
15    }
16    
17    [DataObjectMethod(DataObjectMethodType.Update, 
true)]
18    
static public void Update(string original_UserName,string email,…){ 
19    }

Userò sicuramente questo trucco per implementare in Kea la gestione degli utenti e dei ruoli amministrativi.

Me ne stavo scordando, ecco i link ai due articoli:

Microsoft ASP.NET 2.0 Member/Role Management with IIS Part 1: Security and Configuration Overview
Microsoft ASP.NET 2.0 Member/Role Management with IIS Part 2: Implementation

powered by IMHO 1.3

«gennaio»
domlunmarmergiovensab
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234