msgbartop
Around Software Development and Innovation
msgbarbottom

14 Jul 12 GitStack!!!

Ieri volevo installare GIT sul mio server per un progetto a cui lavoro ed ho provato diverse soluzioni, pero’ mi serviva qualcosa che fosse potente e che avesse molte piu’ funzionalita’ rispetto a msysgit. Dopo una breve ricerca mi son imbattuto in GitStack che fornisce a prezzi contenuti (nella versione basic e’ totalmente free) una soluzione estremamente semplice e potente per GIT.

Sembra di avere github sul proprio server ed e’ semplicissimo da configrare ed utilizzare, supporta https e permette una semplice e veloce gestione mediante una web console.

Insomma lo consiglio vivamente a chiunque avesse un server windows sul quale vuole usare GIT.

Per informazioni andate su gitstack.com

Tonio

16 Jun 11 Misurare e testare le performance delle applicazioni WPF

Ogni tanto lavoro con WPF, e spesso sento l’esigenza di capire quello che succede dietro le quinte…

Un ottimo aiuto lo fornisce WPF Performance Suite.

Tonio

08 May 11 Smartphone Day Atto 2

Dopo le disavventure made in Aru**, voglio ringraziare tutti per l’evento di Roma, in particolare gli speaker Rosalba,Roberto e Dan. Sono stato molto contento sopratutto per la mia breve introduzione alla Computer Vision…

Tonio

01 Mar 11 Localization Library

Spesso ci troviamo di fronte al problema di localizzazare applicazioni realizzate mediante l’uso di XAML con Silverlight,WPF o WP7. Volevo segnalare a riguardo una ottima libreria realizzata dall’ottimo collega ed amico Nicola Gallo.

Potete trovarla qui e se volete potete supportare o contribuire al progetto.

Antonio

28 Feb 11 Smartphone Day una settimana dopo

Oggi, a poco più di una settimana dallo SmartPhone Day a Potenza, possiamo dire di aver fatto un buon lavoro. Tanti partecipanti a dispetto del poco tempo che abbiamo avuto per pubblicizzare e preparare l’evento, tanto interesse ed ottimi argomenti :)

Per chi non c’era potete trovare le slides al link dell’evento al seguente URL: http://www.smartphoneday.com/.

Altre informazioni le trovate anche sul blog di Rosalba.

Antonio

27 Feb 11 Un semplice custom WCF Behaviour

Ho scritto ed allego un custom WCF behaviour che collega l’hash del messaggio all’headers e alle properties.

Si tratta di un semplice esempio ma forse serve a qualcun’altro…

:D

Antonio

2010_1_BehaviourSample

27 Feb 11 Repository pattern & Nhibernate

Ho scritto tempo fa un software che doveva girare su ASP.NET basato su DDD. L’ORM usato è NHibernate. Ho usato un semplice repository di cui riporto il sorgente (viene usato Windsor anche per fare IOC).:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Jobbing.DAL.Repository
{

//Repository Interface
    public interface IRepository<T>
    {
        void Save(T obj);
        void Update(T obj);
        void Delete(T obj);
        T Load<T>(object id);
        T GetReference<T>(object id);
        void DeleteAll(IList<T> objs);
        void UpdateAll(IList<T> objs);
        void InsertAll(IList<T> objs);
        IList<T> GetAll<T>();
        IList<T> GetAllOrdered<T>(string propertyName,bool Ascending);
        IList<T> Find<T>(IList<string> criteria);
        void Detach(T item);
        IList<T> GetAll<T>(int pageIndex, int pageSize);
        void Commit();
        void Rollback();
        void BeginTransaction();
    }
}

//Implementation of NHibernate Repository

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using NHibernate;
using NHibernate.Expression;
using NHibernate.Engine.Query;
using NHibernate.Mapping;

namespace Jobbing.DAL.Repository
{
    public class NHibernateRepository<T> : IRepository<T>
    {
        private ISession session;

        public NHibernateRepository()
        {
            session = NHibernateSessionManager.Instance.GetSession();
        }

        #region IRepository<T> Members

        public void Save(T obj)
        {
            session.Save(obj);
        }

        public void Update(T obj)
        {
            session.Update(obj);
        }

        public void Delete(T obj)
        {
            session.Delete(obj);
        }

        public T Load<T>(object id)
        {
            return session.Load<T>(id);
        }

        public T GetReference<T>(object id)
        {
            return session.Get<T>(id);
        }

        public void DeleteAll(IList<T> objs)
        {
            for (Int32 I = 0; I < objs.Count; ++I)
            {
                Delete(objs[I]);
            }
        }

        public void UpdateAll(IList<T> objs)
        {
            for (Int32 I = 0; I < objs.Count; ++I)
            {
                Update(objs[I]);
            }
        }

        public void InsertAll(IList<T> objs)
        {
            for (Int32 I = 0; I < objs.Count; ++I)
            {
                Save(objs[I]);
            }
        }

        public void Detach(T item)
        {
            session.Evict(item);
        }

        internal void Flush()
        {
            session.Flush();
        }

        public IList<T> GetAll<T>(int pageIndex, int pageSize)
        {
            ICriteria criteria = session.CreateCriteria(typeof(T));
            criteria.SetFirstResult(pageIndex * pageSize);
            if (pageSize > 0)
            {
                criteria.SetMaxResults(pageSize);
            }
            return criteria.List<T>();
        }

        public IList<T> GetAll<T>()
        {
            return GetAll<T>(0, 0);
        }

        public IList<T> Find<T>(IList<string> strs)
        {
            System.Collections.Generic.IList<ICriterion> objs = new System.Collections.Generic.List<ICriterion>();
            foreach(string s in strs){
                ICriterion cr1 = Expression.Sql(s);
                objs.Add(cr1);
            }
            ICriteria criteria = session.CreateCriteria(typeof(T));
            foreach (ICriterion rest in objs)
                session.CreateCriteria(typeof(T)).Add(rest);

            criteria.SetFirstResult(0);
            return criteria.List<T>();
        }

        public void Commit()
        {
            if (session.Transaction.IsActive)
            {
                session.Transaction.Commit();
            }
        }

        public void Rollback()
        {
            if (session.Transaction.IsActive)
            {
                session.Transaction.Rollback();
                session.Clear();
            }
        }

        public void BeginTransaction()
        {
            session.BeginTransaction();
        }

        #endregion

        #region IRepository<T> Members

        public IList<T> GetAllOrdered<T>(string propertyName, bool Ascending)
        {
            Order cr1 = new Order(propertyName, Ascending);
            IList<T> objsResult = session.CreateCriteria(typeof(T)).AddOrder(cr1).List<T>();
            return objsResult;

        }

        #endregion
    }
}
Ho usato questo codice unito al pattern Open Session in View ;)
Bye
Antonio

27 Feb 11 Silverlight free controls

Qui potete trovare alcuni utilissimi controlli SilverLight gratuiti.

Bye

Antonio

27 Feb 11 Creare il DB dalle classi e dai mappings con NHibernate(Real Domain Driven Design)

Vi riporto un pò di codice per la generazione dello schema del db a partire dalle classi di dominio ed i mapping di NHibernate. Questo a mio parere è il primo punto da cui partire per fare un vero progetto basato su Domani Driven Design:

using System;
using System.Collections.Generic;
using System.Text;
using NHibernate;
using NHibernate.Cfg;
using System.Threading;
using System.Configuration;
using NHibernateConfig.Common.Configuration;
using NHibernate.Tool.hbm2ddl;

namespace Gestio.DataLayer.Nhibernate.Provider
{
public sealed class NHibernateHelper
{
private const string CurrentSessionKey = “nhibernate.current_session”;
private static readonly ISessionFactory sessionFactory;
private static NHibernate.Cfg.Configuration cfg;

static NHibernateHelper()
{
if(sessionFactory==null){
cfg = new NHibernate.Cfg.Configuration();
cfg.AddAssembly(“Gestio.NHibernate.Mappings”);

try
{
sessionFactory = cfg.BuildSessionFactory();
}
catch (Exception e)
{
throw new Exception(” Can not create session factory! ” + e.Message, e.InnerException);
}
}
}

public static ISession GetCurrentSession()
{
ISession currentSession=sessionFactory.OpenSession();
return currentSession;
}

public static void CloseSessionHelper()
{
sessionFactory.Close() ;
}

///Create database
public static void CreateDB()
{
NHibernate.Tool.hbm2ddl.SchemaExport obj=new SchemaExport(cfg,null);
System.Data.IDbConnection dbconn = new System.Data.SqlClient.SqlConnection(“Data Source=ciuccio;Initial Catalog=test;User Id=sa;Password=pippo”);
dbconn.Open();
obj.Execute(true,true,false,false,dbconn,null);
dbconn.Close();
}

}
}

Bye

Antonio

27 Feb 11 DDD

Questa è una lista molto interessante di risorse su Domain Driven Design…

Bye

Antonio