Leonardo Lima - Programador Web de São José do Rio Preto - São Paulo

Programador para Desenvolvimento Web Rio Preto e Região

Disponível para atuar como consultor especializado em desenvolvimento de soluções para internet.
Trabalho sempre com total comprometimento em relação a prazos e em busca da total satisfação do cliente em relação ao resultado do serviço contratado.
Conto com experiência no processo de planejamento e desenvolvimento de websites, lojas virtuais, intranet e sistemas web personalizados e faço uso das tecnologias ASP.NET, HTML, TABLESS, CSS, Javascript, AJAX, boas práticas de desenvolvimento web com XHTML, entre outras para oferecer sempre a melhor solução para o seu problema.

Sua hospedagem está ruim? Entre em contato tenho parceria com excelentes empresas de hospedagem, após uma análise de desempenho de seu site e seu publico alvo posso indicar o melhor parceiro para hospedar o seu site. Sempre os melhores valores


Desenvolvimento Web Rio Preto by Leonardo Lima - São José do Rio Preto e região

Recent Articles

26
abr

TSQL – Consultar e alterar LogicalName de uma base de dados

/*CODIGO PARA CONSULTAR*/
USE master
GO
/* Identify Database File Names */
SELECT name AS [Logical Name], physical_name AS [DB File Path], type_desc AS [File Type], state_desc AS [State]
FROM sys.master_files
WHERE database_id = DB_ID(N’newDataBaseName’)

/*CODIGO PARA ALTERAR*/
/* Set Database as a Single User */
ALTER DATABASE newDataBaseName SET SINGLE_USER WITH ROLLBACK IMMEDIATE
/* Change Logical File Name */
ALTER DATABASE newDataBaseName MODIFY FILE (NAME=N’oldDataBaseName’, NEWNAME=N’newDataBaseName’)
GO
ALTER DATABASE newDataBaseName MODIFY FILE (NAME=N’oldDataBaseName_log’, NEWNAME=N’newDataBaseName_log’)
GO
ALTER DATABASE newDataBaseName SET MULTI_USER
GO

Estes códigos devem ser utilizados quando for necessário criar uma nova base a partir de uma já existente, como o caso acima, foi necessário criar a base newDataBaseName, e utilizamos um backup da base oldDataBaseName como base, então como criamos uma nova base e restauramos o backup de uma outra base devemos verificar a questão do logical name, que em geral o que fica é o nome da base restaurada e não da nova base

26
abr

SQL SERVER – Aumentar tamanho do banco

USE master;

DECLARE @DB_NAME VARCHAR(MAX) = 'myDatabase' /*NOME DO BANCO*/
DECLARE @SIZE VARCHAR(MAX) = '4000' /*EM MB*/

/* SET DATABASE AS A SINGLE USER */
EXEC('ALTER DATABASE ' + @DB_NAME + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE')
/* SET NEW SIZE */
EXEC(' ALTER DATABASE ' + @DB_NAME + ' MODIFY FILE (NAME = '+@DB_NAME+', SIZE = '+@SIZE+'MB);')
/* SET DATABASE AS A MULTI USER */
EXEC ( 'ALTER DATABASE '+ @DB_NAME + ' SET MULTI_USER ')
6
mar

TSQL – Restaurar base de dados através do código

Bom, estava precisando agilizar a minha vida por aqui dai surgiu o script abaixo, neste script o caminho do diretório dever ser informado no formato abreviado. Para conseguir o nome abreviado do diretório basta abrir o Command, ir até o diretório que contem a pasta desejada e utilizar o comando “dir /x” este comando irá retornar o nome do diretório abreviado:

06/03/2012 11:09 PROGRA~1 Program Files
06/03/2012 11:06 PROGRA~2 Program Files (x86)

DECLARE @PATH_BAK VARCHAR(8000)
DECLARE @PATH_DB VARCHAR(8000)
DECLARE @DB_NAME VARCHAR(8000)

SET @PATH_BAK = N'C:\TEMP\arquivo.bak'
SET @PATH_DB = N'C:\BancoDeDados\'
SET @DB_NAME = 'nomeDaBase'

DECLARE @LogicalName VARCHAR(8000)
DECLARE @LogicalName_log VARCHAR(8000)
DECLARE @PhysicalName VARCHAR(8000)
DECLARE @PhysicalName_log VARCHAR(8000)
DECLARE @TMP TABLE (
      LogicalName NVARCHAR(128) , PhysicalName NVARCHAR(260) , [Type] CHAR(1) , FileGroupName NVARCHAR(128) , Size NUMERIC(20, 0) ,
      MaxSize NUMERIC(20, 0) , FileID BIGINT , CreateLSN NUMERIC(25, 0) , DropLSN NUMERIC(25, 0) , UniqueID UNIQUEIDENTIFIER ,
      ReadOnlyLSN NUMERIC(25, 0) , ReadWriteLSN NUMERIC(25, 0) , BackupSizeInBytes BIGINT , SourceBlockSize INT , FileGroupID INT ,
      LogGroupGUID UNIQUEIDENTIFIER , DifferentialBaseLSN NUMERIC(25, 0) , DifferentialBaseGUID UNIQUEIDENTIFIER ,
      IsReadOnl BIT , IsPresent BIT , TDEThumbprint VARBINARY(32)
)
INSERT  INTO @TMP EXEC ( 'RESTORE FILELISTONLY FROM DISK = '''+@PATH_BAK+''' WITH FILE=1;' )

SET @LogicalName =  ( SELECT LogicalName FROM ( SELECT ROW_NUMBER() OVER (ORDER BY LogicalName ASC) AS rownumber,LogicalName FROM @TMP ) AS LogicalName WHERE rownumber = 1 )
SET @LogicalName_log = ( SELECT LogicalName FROM ( SELECT ROW_NUMBER() OVER (ORDER BY LogicalName ASC) AS rownumber,LogicalName FROM @TMP ) AS LogicalName WHERE rownumber = 2 )

SET @PhysicalName = @PATH_DB + @LogicalName + '.mdf'
SET @PhysicalName_log = @PATH_DB + @LogicalName_log + '.ldf'

EXEC(' ALTER DATABASE '+@DB_NAME+'  SET SINGLE_USER WITH ROLLBACK IMMEDIATE ')
EXEC('RESTORE DATABASE '+@DB_NAME+' FROM DISK = '''+@PATH_BAK+''' WITH REPLACE, MOVE '''+@LogicalName+''' TO '''+@PhysicalName+''', MOVE '''+@LogicalName_log+''' TO '''+@PhysicalName_log+''' ')
EXEC(' ALTER DATABASE '+@DB_NAME+'  SET MULTI_USER ')
6
mar

TSQL – IF com BEGIN/END

Hoje pela manhã descobri que no TSQL assim como no C# deve-se utilizar BEGIN/END para blocos de código que tenham mais de uma linha.

1
jul

ASP.NET MVC 3 com FluentNHibernate + Ninject

Estou com um novo projeto, e acabei chegando nesta proposta de arquitetura… gostaria que opniassem…

GenericDAO == Base para as demais DAO´s

DaoFacade   == Concentra todos objetos DAO´s para expor para a aplicação MVC, assim não preciso ficar dando using em cada DAO, muito menos ficar injetando as DAO´s

NHibernateHelper == Expõe as operações do NHibernate para o ActionFilter TransactionPerRequest, assim minha aplicação ASP.NET não precisa conhecer nada de NHibernate…

TransactionPerRequest == Ainda tenho duvidas se todas as operações precisam abrir uma Transaction, estou achando que estou fazendo uma redundancia dentro da GenericDAO, ainda estou debugando para confirmar (se alguem puder opniar deixa um comment),  mas pelo menos está garantindo que a ISession seja Closed a cada final de Request, e também posso indicar as Actions que usam, também só injeto a DaoFacade na Action que vai utilizar…

GenericDAO

using System;
using System.Collections.Generic;
using NHibernate;
using NHibernate.Criterion;
using Portal.Domain.Infrastructure;

namespace Portal.Domain.Core
{
    public abstract class GenericDAO<T, IdT> : IDao<T, IdT>
    {
        private Type persitentType = typeof(T);

        protected ISession NHibernateSession
        {
            get { return NHibernateHelper.GetCurrentSession(); }
        }

        /// <summary>
        /// Loads an instance of type TypeOfListItem from the DB based on its ID.
        /// </summary>
        public T GetById(IdT id)
        {
            T entity;
            entity = (T)NHibernateSession.Load(persitentType, id);
            return entity;
        }

        /// <summary>
        /// Save a new Entity
        /// </summary>
        public T Save(T entity)
        {
            using (ITransaction transaction = NHibernateSession.BeginTransaction())
            {
                try
                {
                    NHibernateSession.Save(entity);
                    transaction.Commit();
                    NHibernateSession.Flush();
                }
                catch (HibernateException ex)
                {
                    transaction.Rollback();
                    throw ex;
                }
            }
            return entity;
        }

        /// <summary>
        /// Save an Entity that don't exists, or update an existing Entity
        /// </summary>
        public T SaveOrUpdate(T entity)
        {
            using (ITransaction transaction = NHibernateSession.BeginTransaction())
            {
                try
                {
                    NHibernateSession.SaveOrUpdate(entity);
                    transaction.Commit();
                    NHibernateSession.Flush();
                }
                catch (HibernateException)
                {
                    transaction.Rollback();
                    throw new HibernateException();
                }
            }
            return entity;
        }

        /// <summary>
        /// Update an existing Entity
        /// </summary>
        public T Update(T entity)
        {
            using (ITransaction transaction = NHibernateSession.BeginTransaction())
            {
                try
                {
                    NHibernateSession.Update(entity);
                    transaction.Commit();
                    NHibernateSession.Flush();
                }
                catch (HibernateException)
                {
                    transaction.Rollback();
                    throw new HibernateException();
                }
            }
            return entity;
        }

        /// <summary>
        /// Delete an existing Entity
        /// </summary>
        public void Delete(T entity)
        {
            using (ITransaction transaction = NHibernateSession.BeginTransaction())
            {
                try
                {
                    NHibernateSession.Delete(entity);
                    transaction.Commit();
                    NHibernateSession.Flush();
                }
                catch (HibernateException)
                {
                    transaction.Rollback();
                    throw new HibernateException();
                }
            }
        }

        /// <summary>
        /// Delete an List of existing Entities
        /// </summary>
        public void DeleteAll(IList<T> itemsToDelete)
        {
            foreach (T item in itemsToDelete)
            {
                try
                {

                    using (ITransaction transaction = NHibernateSession.BeginTransaction())
                    {
                        NHibernateSession.Delete(item);
                        transaction.Commit();
                        NHibernateSession.Flush();
                    }
                }
                catch (HibernateException)
                {
                    NHibernateSession.Transaction.Rollback();
                }
            }

        }
    }
}

NHibernateHelper

using NHibernate;
using NHibernate.Context;
using FluentNHibernate.Cfg;
using System.Reflection;

namespace Portal.Domain.Infrastructure
{
    public class NHibernateHelper
    {
        private static ISessionFactory sessionFactory;

        /// <summary>
        /// SessionFactory is static because it is expensive to create and is therefore at application scope.
        /// The property exists to provide 'instantiate on first use' behaviour.
        /// </summary>
        private static ISessionFactory SessionFactory
        {
            get
            {
                if (sessionFactory == null)
                {
                    var cfg = new NHibernate.Cfg.Configuration();
                    cfg.Configure();
                    sessionFactory = Fluently.Configure(cfg)
                        .Mappings(x => x.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly()))
                        .BuildSessionFactory();
                }
                return sessionFactory;
            }
        }

        public static ISession GetCurrentSession()
        {
            if (!CurrentSessionContext.HasBind(SessionFactory))
            {
                CurrentSessionContext.Bind(SessionFactory.OpenSession());
            }
            return SessionFactory.GetCurrentSession();
        }

        public static void DisposeSession()
        {
            var session = GetCurrentSession();
            session.Close();
            session.Dispose();
        }

        public static void BeginTransaction()
        {
            GetCurrentSession().BeginTransaction();
        }

        public static void CommitTransaction()
        {
            var session = GetCurrentSession();
            if (session.Transaction.IsActive)
            {
                session.Transaction.Commit();
            }
        }

        public static void RollbackTransaction()
        {
            var session = GetCurrentSession();
            if (session.Transaction.IsActive)
            {
                session.Transaction.Rollback();
            }
        }
    }
}

DaoFacede

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Portal.Domain.Core;
using Portal.Domain.DAO;

namespace Portal.Domain.Infrastructure
{
    public class DaoFacede
    {
        private CategoriaDAO categoriaDAO;
        public CategoriaDAO CategoriaDAO
        {
            get
            {
                if (categoriaDAO == null)
                {
                    categoriaDAO = new CategoriaDAO();
                }
                return categoriaDAO;
            }
        }
    }
}

NinjectMVC3

[assembly: WebActivator.PreApplicationStartMethod(typeof(Portal.Site.App_Start.NinjectMVC3), "Start")]
[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(Portal.Site.App_Start.NinjectMVC3), "Stop")]

namespace Portal.Site.App_Start
{
    using System.Reflection;
    using Microsoft.Web.Infrastructure.DynamicModuleHelper;
    using Ninject;
    using Ninject.Web.Mvc;
    using Portal.Domain.Infrastructure;

    public static class NinjectMVC3
    {
        private static readonly Bootstrapper bootstrapper = new Bootstrapper();

        /// <summary>
        /// Starts the application
        /// </summary>
        public static void Start()
        {
            DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule));
            DynamicModuleUtility.RegisterModule(typeof(HttpApplicationInitializationModule));
            bootstrapper.Initialize(CreateKernel);
        }

        /// <summary>
        /// Stops the application.
        /// </summary>
        public static void Stop()
        {
            bootstrapper.ShutDown();
        }

        /// <summary>
        /// Creates the kernel that will manage your application.
        /// </summary>
        /// <returns>The created kernel.</returns>
        private static IKernel CreateKernel()
        {
            var kernel = new StandardKernel();
            RegisterServices(kernel);
            return kernel;
        }

        /// <summary>
        /// Load your modules or register your services here!
        /// </summary>
        /// <param name="kernel">The kernel.</param>
        private static void RegisterServices(IKernel kernel)
        {
            kernel.Bind<DaoFacede>().ToSelf();
        }
    }
}

TransactionPerRequest

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Portal.Domain.Infrastructure;

namespace Portal.Site
{
    /// <summary>
    /// Use this filter for actions that need to persist state.
    /// </summary>
    public class TransactionPerRequest : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            NHibernateHelper.BeginTransaction();
        }

        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            // use this method instead of OnResultExecuted if the transaction / session
            // does not need be open for the view rendering.
        }

        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            if (filterContext.Exception == null)
            {
                NHibernateHelper.CommitTransaction();
            }
            NHibernateHelper.DisposeSession();
        }
    }
}

HomeController

using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Portal.Domain.Infrastructure;
using Portal.Domain;

namespace Portal.Site.Controllers
{
    public class HomeController : Controller
    {

        public HomeController()
        {

        }

        [TransactionPerRequest]
        public ActionResult Index(DaoFacede daoFacede)
        {
            Categoria objAtual = daoFacede.CategoriaDAO.GetById(1);
            if (objAtual != null)
            {
                ViewBag.Teste = objAtual.NomeController;
            }

            return View();
        }

    }
}
4
abr

.Net Architects Days 2011

 

O .Net Architects Days é uma conferência nacional sem fins lucrativos focada em arquitetura de software na plataforma .NET. O objetivo do evento é trazer para o mercado uma visão avançada sobre desenvolvimento de software utilizando padrões, práticas, técnicas e ferramentas que permitem o desenvolvimento sustentável de um aplicativo. Contaremos com assuntos técnicos, conceituais, práticos e acadêmicos.

O evento acontecerá em São Paulo em 3 e 4 de junho (sexta e sábado), o dia inteiro. Os palestrantes são figuras conhecidas do .NET Architects, do mercado e da comunidade em geral, contando com arquitetos, MVPs e desenvolvedores com experiência prática de mercado.

Para maiores informações acesse:

Home: http://bit.ly/dnad2011
Inscrições: http://bit.ly/EuVouNoDNAD
Patrocinadores: http://bit.ly/dnad11patrocinio
Palestrantes: http://bit.ly/dnad11palestrantes
Programação: http://bit.ly/dnad11prog
Twitter:  @netarchitects (#dnad11)

3
dez

LINQ – Apagar registros em cascata em uma tabela com auto-relacionamento

Hoje tive um novo “desafio” estava fazendo um sistema onde existia uma tabela com um auto-relacionamento. E a necessidade de quando excluir um registro, eu deveria excluir todos os filhos deste registro.
Para solucionar este problema acabei apelando para a recursividade, a solução abaixo funcionou para mim.
Caso alguem já tenha enfrentado este mesmo desafio e tenha uma solução melhor ou mais elegante, se possível me deixa ela em um comentário aqui.


if (objToDelete.Entitys.Count > 0)
{
DeleteChildren(objToDelete.Entitys);
}
_dataContext.Entitys.DeleteOnSubmit(objToDelete);
_dataContext.SubmitChanges();

private void DeleteChildren(EntitySet list)
{
for (int i = (list.Count-1); i >= 0; i--)
{
Entity item = list[i];

if (item.Entitys.Count > 0)
{
DeleteChildren(item.Entitys);
_dataContext.Entitys.DeleteOnSubmit(item);
_dataContext.SubmitChanges();
}
else
{
_dataContext.Entitys.DeleteOnSubmit(item);
_dataContext.SubmitChanges();
}
}
}

3
dez

ASP.NET (C#) – Aplicação perde a Session depois de utilizar o Directory.Move

Hoje durante o desenvolvimento de uma aplicação, tive a infelicidade de descobrir que não é possível utilizar variáveis de sessão quando se utiliza o Directory.Move.
Isto acontece quando a pasta a ser movida está dentro da mesma pasta da aplicação ASP.NET, ao mover a pasta ou renomear, a estrutura da aplicação é alterada, e com isto a mesma é recompilada e ai que nasce o problema, a Session é re-iniciada.
Até agora a única solução que eu achei, foi mover a pasta base que irá conter as novas pastas e arquivos para uma pasta fora da aplicação ASP.NET, com isto não há alteração na estrutura de pastas e não há recompilação.
O único problema é que tive de criar uma página proxy para fazer o download dos arquivos.

11
nov

ASP.NET AjaxToolkit AutoComplete com Titulo e Código

Hoje eu estava apanhando para fazer, acabei achando este post muito útil…
Só fiz uma modificação para usar LINQ depois eu posto…

http://lazyloading.blogspot.com/2008/05/aspnet-ajax-toolkit-getting-key-value.html

9
nov

Link Trading Area

Link Market – Free Link Exchange, Link Building and Link Trade Directory
Have you ever tried to exchange links, link building, or trade links? Was it hard? Use link market instead; – it is easy to use, free and very smart. It will save you hours of work.


Wallpaper
Free wallpapers for computer desktops. Categories: abstract, aircraft, animals, cars, cartoons, celebrities, computers, flowers, funny, games, movies, nature, places, science fiction, sports.


Pilipinas
A premier website with all informations you need to know about philippines or pilipinas. Know and learn on philippines travel, vacations, hotels, flights, news, guides, informations, real estate, houses, ads, schools and more!

4
nov

Moving to Microsoft Visual Studio 2010 ebook

Para aqueles que ainda não começaram a utilizar o VS2010 acabei de achar um link interessante. A Microsoft está disponibilizando um eBook de graça que é o Moving to Microsoft Visual Studio 2010.

Para maiores informações acesse o link: http://download.microsoft.com/download/9/0/B/90B96800-6765-4AC2-A79F-A2E9116F2157/Moving%20to%20Microsoft%20Visual%20Studio%202010%20ebook.pdf

Download direto do PDF

2
nov

Inscrições abertas para curso de Pós Graduação Lato Sensu em Computação – Desen. de Software para Web

Curso de Pós Graduação em Desenv. Web da Universidade Federal de São Carlos - UFscar

Novo Período de Inscrições para o Curso de Pós Graduação Lato Sensu em Computação – Desenvolvimento de Software para Web será aberto para o preeenchimento das vagas remanescentes. Esse novo período de inscrições permitirá que novas inscrições sejam feitas até o dia 17/janeiro/2010.

Para maiores informações e inscrição acesse: aqui

1
nov

Como tornar seu site acessível?

Outro artigo do site tableless… muito interessante…
Confira este artigo na integra no sitetableless

1
nov

Usabilidade para desenvolvedores front-end

Artigo publicado no site Tableless vale a pena ler…

A usabilidade é uma qualidade das interfaces que caracteriza a facilidade de uso. Várias diretrizes sobre usabilidade de interfaces web foram desenvolvidas ao longo dos últimos 15 anos e o interesse em proporcionar interfaces de fácil utilização tem crescido entre designers e desenvolvedores.

Confira na integra em http://www.tableless.com.br/usabilidade-para-desenvolvedores-front-end