sabato 20 novembre 2010

Software gratis

I software gratis che possono semplificare la vita di un analista programmatore sono molti: software per la gestione di contenuti web detti anche CMS, software per la gestione delle relazioni con i clienti detti anche CRM, programmi che implementano ottimi DBMS e la lista potrebbe continuare ancora per molto.
  1. Joomla
  2. Sugar CRM
  3. MySql
  4. Eclipse 
  5. ...
Spesso questi software gratis hanno pure il grande vantaggio di essere Open Source anche se esistono molti casi in cui questo non è vero (Open source significa letteralmente codice sorgente aperto non software gratuito).
I vantaggi di un corretto utilizzo di questo genere di programmi sono enormi in termini di tempo e sicurezza delle applicazioni. Grazie alle comunità che nascono attorno a questi prodotti siamo certi di avere continui aggiornamenti e correzioni. Spesso viene data la possibilità di estendere facilmente le applicazioni utilizzando classi e metodi propri del framework rendendo il codice robusto e ben strutturato aumentando notevolmente la manutenibilità e la estendibilità delle applicazioni.
Quando un problema informatico è stato affrontato e risolto da altri non è furbo ricominciare daccapo.
venerdì 5 novembre 2010

Cruscotto aziendale e TaleteWeb

Il Cruscotto aziendale è uno strumento informatico che consente all'imprenditore di monitorare i principali obiettivi pianificati per la propria azienda: TaleteWeb offre un potente Cruscotto aziendale in cui confluiscono tutti gli indicatori elaborati dall'applicazione per offrire una efficace visione d'insieme dell'impresa.
TaleteWeb è un programma sviluppato in ASP.NET finalizzato alla gestione integrata dei seguenti, principali, processi direzionali, organizzativi e gestionali, delle imprese pubbliche e private (in particolare delle P.M.I. di diversi settori):
  • Budget, Organizzazione, Formazione
  • Qualità, Privacy
  • Ambiente, Salute e Sicurezza
  • Sicurezza Alimentare
Ecco un esempio dei grafici presenti nel Cruscotto aziendale in TaleteWeb

Cruscotto aziendale TaleteWeb
giovedì 28 ottobre 2010

Facebook SDK C#

Facebook ha rilasciato un SDK per C#: il progetto è ospitato su github e funziona sia con ASP.NET che con le applicazioni desktop. Tra le nuove feature abbiamo OAuth 2.0  per l'autenticazione e il supporto a Open Graph su .NET. L'SDK è ancora considerato come in fase alpha.
sabato 16 ottobre 2010

Abstract Factory Design Pattern C#

Il pattern Abstract Factory fa parte dei cosiddetti Creational patterns cioè di quel genere di pattern che si occupa di istanziare (creare) oggetti.
La sua peculiarità è quella di fornire una interfaccia per creare famiglie di oggetti connessi o dipendenti tra loro, in modo che non ci sia necessità da parte dei client di specificare i nomi delle classi concrete all'interno del proprio codice.
Vediamo il diagramma UML:

Abstract Factory Design Pattern C#

Di seguito riportiamo la sua realizzazione in C#

// Abstract Factory pattern -- Structural example
using System;

namespace DoFactory.GangOfFour.Abstract.Structural
{
  /// <summary>
  /// MainApp startup class for Structural
  /// Abstract Factory Design Pattern.
  /// </summary>
  class MainApp
  {
    /// <summary>
    /// Entry point into console application.
    /// </summary>
    public static void Main()
    {
      // Abstract factory #1
      AbstractFactory factory1 = new ConcreteFactory1();
      Client client1 = new Client(factory1);
      client1.Run();

      // Abstract factory #2
      AbstractFactory factory2 = new ConcreteFactory2();
      Client client2 = new Client(factory2);
      client2.Run();

      // Wait for user input
      Console.ReadKey();
    }
  }

  /// <summary>
  /// The 'AbstractFactory' abstract class
  /// </summary>
  abstract class AbstractFactory
  {
    public abstract AbstractProductA CreateProductA();
    public abstract AbstractProductB CreateProductB();
  }


  /// <summary>
  /// The 'ConcreteFactory1' class
  /// </summary>
  class ConcreteFactory1 : AbstractFactory
  {
    public override AbstractProductA CreateProductA()
    {
      return new ProductA1();
    }
    public override AbstractProductB CreateProductB()
    {
      return new ProductB1();
    }
  }

  /// <summary>
  /// The 'ConcreteFactory2' class
  /// </summary>
  class ConcreteFactory2 : AbstractFactory
  {
    public override AbstractProductA CreateProductA()
    {
      return new ProductA2();
    }
    public override AbstractProductB CreateProductB()
    {
      return new ProductB2();
    }
  }

  /// <summary>
  /// The 'AbstractProductA' abstract class
  /// </summary>
  abstract class AbstractProductA
  {
  }

  /// <summary>
  /// The 'AbstractProductB' abstract class
  /// </summary>
  abstract class AbstractProductB
  {
    public abstract void Interact(AbstractProductA a);
  }


  /// <summary>
  /// The 'ProductA1' class
  /// </summary>
  class ProductA1 : AbstractProductA
  {
  }

  /// <summary>
  /// The 'ProductB1' class
  /// </summary>
  class ProductB1 : AbstractProductB
  {
    public override void Interact(AbstractProductA a)
    {
      Console.WriteLine(this.GetType().Name +
        " interacts with " + a.GetType().Name);
    }
  }

  /// <summary>
  /// The 'ProductA2' class
  /// </summary>
  class ProductA2 : AbstractProductA
  {
  }

  /// <summary>
  /// The 'ProductB2' class
  /// </summary>
  class ProductB2 : AbstractProductB
  {
    public override void Interact(AbstractProductA a)
    {
      Console.WriteLine(this.GetType().Name +
        " interacts with " + a.GetType().Name);
    }
  }

  /// <summary>
  /// The 'Client' class. Interaction environment for the products.
  /// </summary>
  class Client
  {
    private AbstractProductA _abstractProductA;
    private AbstractProductB _abstractProductB;

    // Constructor
    public Client(AbstractFactory factory)
    {
      _abstractProductB = factory.CreateProductB();
      _abstractProductA = factory.CreateProductA();
    }

    public void Run()
    {
      _abstractProductB.Interact(_abstractProductA);
    }
  }
}

L'Output prodotto da questo semplice programma sarà:

ProductB1 interacts with ProductA1
ProductB2 interacts with ProductA2
giovedì 14 ottobre 2010

C# params keyword

params indica un numero variabile di parametri in un metodo.


La parola chiave params introduce nella programmazione in ambiente .NET la possibilità di avere dei metodi con un numero di parametri dinamico.

public static void UseParams(params int[] list)
{
    for (int i = 0; i < list.Length; i++)
        Console.Write(list[i] + " ");
    Console.WriteLine();
}

Questo metodo può essere chiamato in questo modo:
UseParams(1, 2, 3, 4);

Se vogliamo specificare una quantità di elementi diversi basta separarli dalla virgola; sarà il compilatore a istanziare un array e a impostare gli elementi con i valori dati nel metodo.