Stay hungry. Stay Foolish.


Omaggio ad un genio dei nostri tempi.

author: Antonio Santise | posted @ Thursday, October 6, 2011 9:37 AM | Feedback (5)

Quanto (e quando) il design è importante?


Titolo un po' banale. Potrei averlo intitolato "la potenza è nulla senza il controllo" o in migliaia di altri modi.

Stavo leggendo Il Fatto online e sono stato colpito da questo box: "Avviso ai naviganti: prosegue la sospensione dei commenti più vecchi".

Leggo incuriosito il resto:
Cari navigatori, siamo di nuovo in troppi. Per tentare di velocizzare un po’ il sito in attesa di passare su dei server più potenti siamo stati costretti a chiudere i commenti più vecchi di 24 ore. Non preoccupatevi. Non andrà perso nulla.

Le visite continuano ad aumentare. E con esse aumenta il rischio di andare di nuovo off line. Noi qui ci mettiamo spesso decine e decine di minuti prima di riuscire a pubblicare i nostri articoli. Così ci siamo trovati di fronte a un bivio: o scomparire, o far scomparire momentaneamente parte dei vostri commenti. Ovviamente abbiamo optato per la seconda soluzione. Servirà? Al momento non lo sappiamo. Ma almeno abbiamo preso un po’ di fiato. State però certi che qui non molla nessuno. Abbiamo tanto da raccontare. E continueremo a farlo. Restate con noi.

Ora, quello che mi colpisce è il fatto che si riesca sempre a far passare il concetto "il sito è lento, è colpa del server".
Quello dei commenti e delle visite potrà anche essere un problema da non sottovalutare, ma spesso potrebbe essere risolto in maniera più soft, non cambiando il ferro.

E il problema è il solito: cattivo dimensionamento (non di solo ferro vive il programmatore). Possibile che tutti si riempino la bocca di "design" ma nessuno "calcoli", "misuri", "conti"... simuli?

author: Antonio Santise | posted @ Wednesday, October 6, 2010 8:40 AM | Feedback (0)

Un bel post di Ivar Jacobson


Bellissimo (e lunghissimo) post di IJ: In need of a theory for software engineering
Emblematica la frase “Are we working in engineering or in a fashion industry?”

Mi ha fatto venire in mente Andrea nel suo intervento al “Community Tour: UgiDotNet –Windows&Web”. In realtà Andrea ha detto delle cose molto serie nella prima mezz’ora… poi si è contraddetto illustrandoci un case history in cui ha fatto esattamente il contrario! :)

Si è contraddetto volutamente: prima ci ha detto “non dovete fare sempre le cose con l’ultima tecnologia disponibile solo per appagare il vostro ego”. Poi con il progetto ha aggiunto “a meno che i requisiti lo richiedano”.

author: Antonio Santise | posted @ Wednesday, February 17, 2010 1:46 AM | Feedback (5)

LINQ to SQL: “error-prone”?


Per chi si avvicina a LINQ, consiglio di stare attenti alla seguente frase (fonte):

L'esecuzione della query è distinta dalla creazione della query. La creazione della query definisce la query, mentre l'esecuzione viene attivata da un meccanismo diverso. Una query può essere eseguita appena definita (esecuzione immediata) oppure è possibile archiviare la definizione ed eseguire la query in un secondo momento (esecuzione posticipata).

Lo sanno anche i muri, ma fra il sapere e ricordarselo (o accorgersene), ce ne corre :)
Detto questo, cosa ci aspetteremmo dal seguente blocco di codice (vetusto, lo so, ma spero sia chiaro)?
Riformulo meglio la domanda: cosa conterrà il repeater?

var sectionId = 10;
var posts = from a in myDataContext.Articles
where a.SectionId == sectionId
select new Article { Id = a.Id, Title = a.Title };
myRepeater.DataSource = posts;

sectionId = 20;
var title = (from a in myDataContext.Articles
where a.SectionId == sectionId
select a.Title).First();
myLabel.Text = title;

this.DataBind();

La risposta è facile, e ovviamente non si vince nulla :)

Per forzare l’esecuzione immediata, si potrebbe ricorrere ai metodi ToList() o ToArray() o gli n-altri. Ovviamente si perderebbe uno dei maggiori vantaggi di LINQ:

Se la query non contiene un metodo che causa l'esecuzione immediata, l'esecuzione effettiva della query viene posticipata fino a quando non si esegue un'iterazione della variabile di query in un ciclo foreach (ad esempio). L'esecuzione posticipata consente di combinare più query o di estendere una query. Una query estesa viene modificata in modo da includere nuove operazioni. Le modifiche vengono quindi applicate all'eventuale esecuzione.

hth,
a.

Technorati Tag: ,

author: Antonio Santise | posted @ Saturday, November 21, 2009 12:23 AM | Feedback (1)

IIS 7: autenticazione e configurazione FTP #2


Nel precedente post avevo introdotto (spero) IIS7 e la modalità di autenticazione "embedded", ossia senza far ricorso ad account Windows locali per l'autenticazione. In questo vedremo come configurarne uno. (continua)

author: Antonio Santise | posted @ Friday, November 13, 2009 2:02 AM | Feedback (5)

IIS 7: autenticazione e configurazione FTP #1


Fra le tante novità di IIS7 e suo fratello 7.5, sicuramente quella che ho apprezzato maggiormente è l'integrazione di una nuova modalità di autenticazione: IIS Managar Authentication. (continua)

author: Antonio Santise | posted @ Thursday, November 12, 2009 7:36 PM | Feedback (2)

Linux appliances in Visual Studio


Questa decisione è destinata a lasciare il segno, imvho :)

In pratica: Novell rilascia uno “strumento” (riduttivo definirlo tale, lo so) per realizzare applicazioni in ambiente Linux, stand-alone, senza bisogno di setup, tutto già bello e pronto per l’utente finale. Dicasi software appliance, per l’appunto.

SUSE Studio generates appliances as Live CD/DVD, VMware and XEN virtual images, HDD and USB images, and will support Amazon EC2 images soon.

Mono rilascia un plug-in per realizzare questo genere di applicazioni in Visual Studio

The purpose of the plug-in is to allow Windows developers to create Linux appliances containing .NET applications. This is especially helpful for Windows developers who might find it difficult to test their .NET applications on Linux.

Da leggere alla fonte: http://www.infoq.com/news/2009/07/Linux-Appliance-Visual-Studio
Altre info qui: http://www.go-mono.com/monovs/

HTH,
a.

Technorati Tag: ,,

author: Antonio Santise | posted @ Thursday, July 30, 2009 3:59 PM | Feedback (0)

[OT] – Il politecnico di Milano


Scusate l’OT, ma questa la devo condividere con i miei compagni di merenda (leggi ex-colleghi) :)

http://nonciclopedia.wikia.com/wiki/Politecnico_di_Milano

La più bella, per chi ha fatto lezione nell N02:

“Questa sedia è asintotica al mio culo!”

author: Antonio Santise | posted @ Wednesday, July 8, 2009 11:12 PM | Feedback (1)

log4net – SQLite appender


A volte non è necessario scomodare SQL Server per fare un minimo di tracing/logging. A volte basta il tracing di ASP.NET. A volte vogliamo un file di testo o un file XML. Io ho avuto bisogno di configurare un appender per SQLite.

La documentazione ufficiale di log4net utilizza un appender configurato per un driver abbastanza datato (Finisar.SQLite.SQLiteConnection) che a me non andava.  
Dopo varie vicissitudini, sono riuscito a configurare un appender (funzionante) con un assembly leggermente recente.

<appender name="ADONetAppender" type="log4net.Appender.AdoNetAppender">
<connectionType
   value="System.Data.SQLite.SQLiteConnection, System.Data.SQLite" />
<connectionString value="Data Source=|DataDirectory|Trace.db3" />
<commandText
   value="INSERT INTO Log (Date, Thread, Level, Logger, User, Message)
          VALUES (@date, @thread, @level, @logger, @user, @message)" />
<commandType value="Text"/>
<bufferSize value="100" />
<parameter>
    <parameterName value="@date" />
    <dbType value="DateTime" />
    <layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
    <parameterName value="@thread" />
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern
value="%thread" />
    </layout>
</parameter>
<parameter>
    <parameterName value="@level" />
    <dbType value="String" />
    <size value="50" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%level" />
    </layout>
</parameter>
<parameter>
    <parameterName value="@logger" />
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%logger" />
    </layout>
</parameter>
<parameter>
    <parameterName value="@user" />
    <dbType value="String" />
    <size value="50" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%X{user}" />
    </layout>
</parameter>
<parameter>
    <parameterName value="@message" />
    <dbType value="String" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%m" />
    </layout>
</parameter>
</appender>

HTH,
a.

author: Antonio Santise | posted @ Saturday, June 27, 2009 6:46 PM | Feedback (2)

log4net – ConversionPattern


Sul fatto che log4net sia potente, non si discute.
Sul fatto che sia leggermente ostico… qualcosina si potrebbe dire.
Io, ad esempio, ho avuto difficoltà a trovare come configurare i layout pattern (quelle stringhe fatte di tanti % e lettere, come “%C %F %L %l %M”). Paradossalmente sono riuscito a trovare prima la versione originaria della documentazione a supporto dei pattern di concatenazione dei messaggi per log4j e finalmente questa per log4net.

Di solito, nei miliardi di esempi di configurazione che circolano per la rete, si trovano dei pattern +/- standard come il seguente: “%date %thread %level %logger %message%newline”.
Dando un’occhiata al link di cui sopra, ci si accorge delle forti customizzazioni che si possono fare sul logging (o tracing, che dir si voglia).

HTH,
a.

author: Antonio Santise | posted @ Saturday, June 27, 2009 6:30 PM | Feedback (1)