Sep 8 11

Web renovada: un nuevo enfoque

por Luis Roig

Renovamos nuestra web con un nuevo enfoque, que en realidad no es nuevo sino es el que ha ido tomando por sí solo el negocio desde hace ya tiempo.

Como podréis ver por el tipo de proyectos que hemos ido acometiendo, nos hemos especializado en convertir en realidad proyectos de emprendedores que tienen una idea para un negocio en Internet, aportando tanto diseño gráfico y de interacción como software back-end y front-end.

Convergiendo hacia este modelo de servicios full-stack, para acompañar al emprendedor en toda su andadura hemos decidido también ofrecer asesoría financiera y de empresa. De este modo no sólo nos encargamos de convertir la idea de negocio en un producto real sino que también apoyamos en tareas de planificación estratégica, búsqueda de financiación e inversores, contabilidad, etc.

Dentro de muy poco comenzaremos a hablar de los proyectos que tenemos entre manos ahora mismo y algunos otros que estamos a punto de comenzar, de momento gracias por visitarnos! 😉

Abr 14 11

Mejoramos el SEO de portaldelrock.com

por Luis Roig

Hola a todos! Hace unos meses que no damos muchas señales de vida, pero se debe a que tenemos varios proyectos interesantes en el laboratorio a punto de salir a la luz y que estamos seguros de que no van a defraudar en absoluto 😉

Mientras tanto, comentar que hemos estado ayudando a los chicos de portaldelrock.com a hacer algunas modificaciones en su aplicación con el objetivo de optimizar su posicionamiento en buscadores. En concreto y entre otras mejoras, todos los contenidos de la web están ahora representados por url’s naturales y semánticas que facilitarán mucho el indexado por parte de los robots de Google.

Portaldelrock.com

Además también hemos participado en la migración de su infraestructura a los servicios de nuestros especialistas favoritos en sistemas, la gente de Iukanet.

Este es el comienzo de lo que esperamos va a ser una duradera colaboración para mejorar esta web dedicada a la buena música, estad atentos porque habrán más novedades pronto! 😉

Dic 27 10

Presentamos algoquenuncatedije.com

por Luis Roig

Estamos muy contentos de presentar Algo que nunca te dije, un proyecto diseñado y desarrollado por Nectio para YMANT. Algo que nunca te dije es una aplicación web que nos permite preparar mensajes para nuestros seres queridos en caso de que  nos ocurra algún percance.

Tras el proceso de registro se genera un código único que el usuario puede proporcionar a su familia o allegados, y que ellos pueden introducir en la web si se da el fallecimiento para que se realice automáticamente el envio de estos mensajes (por e-mail o correo postal). El usuario puede cambiar textos y mensajes en cualquier momento y comprar más envios a través de micropagos mediante SMS y Paypal. Además los textos de los mensajes se almacenan cifrados y el personal administrativo de la web no tiene acceso a ellos.

A partir de la idea de nuestro cliente, Nectio se ha encargado del diseño gráfico, maquetación, desarrollo y despliegue de la aplicación web. Concretamente hemos usado Ruby on Rails 3 con un buen surtido de plugins (devise, active_merchant, delayed_job) además de MySQL, jQuery y RSpec como framework de test. Además contamos con un hosting de primera clase gracias al servicio de IukaNet

Esperamos que os guste!! 🙂

Nov 14 10

Inyección de dependencias en ASP.NET MVC con Castle

por Luis Roig

Llevo ya tiempo queriendo dedicar un post a hablar un poco sobre el patrón de diseño de Inyección de Dependencias y de cómo podemos beneficiarnos de él, en este caso con uno de los frameworks de desarrollo web con el que estoy trabajando últimamente: ASP.NET MVC.

Según la wikipedia: “Inyección de Dependencias (en inglés Dependency Injection, DI) es un patrón de diseño orientado a objetos, en el que se suministran objetos a una clase en lugar de ser la propia clase quien cree el objeto”. Es decir, típicamente tendremos reunidos en una clase ciertos métodos que nos son útiles en varios sitios de nuestra aplicación (por ejemplo un sistema de Logging, o de acceso a base de datos) que para aclararnos vamos a llamar clase servicio.

Pero con los mecanismos que nos ofrece cualquier lenguaje orientado a objetos, si queremos usar esta clase nos tocará instanciar un objeto de esta clase servicio dentro de otra clase para usarla. Esto tiene un efecto no muy deseable, y es que estamos haciendo totalmente dependientes nuestras clases de la clase servicio. Si en vez de la clase servicio que usaba hasta ahora para el sistema de logging quiero usar otra, en todas las clases que accedan a ella tendré que cambiar el tipo que se instancia y volver a compilarlas (en caso de que no estemos usando un lenguaje interpretado).

¿No podríamos mejorar esto haciendo que los componentes de nuestra aplicación no sean tan dependientes entre ellos?. La solución es el patrón de Inyección de dependencias. La idea es que en los componentes de nuestra aplicación simplemente especifiquen los servicios que necesitamos y por detrás haya un framework que provea estos servicios. En el mundo Java la opción clásica para este framework sería Spring, y para .NET/Mono nosotros vamos a usar otra opción también open source que es Castle Windsor.

Vamos a ver un pequeño ejemplo de cómo podriamos configurar un servicio que consumirán nuestros controladores. Vamos a usar una forma bastante sencilla de hacer esto, aunque Castle nos ofrece otras muchas. En el Global.asax de nuestra aplicación ASP.NET MVC normalmente tendremos lo siguiente:

protected void Application_Start() {
    AreaRegistration.RegisterAllAreas();
    RegisterRoutes(RouteTable.Routes);
}

Nosotros vamos a añadir un método BuildContainer en el que simplemente inicializaremos el contenedor de Castle Windsor y le añadiremos un componente que podrán recibir las clases de nuestra aplicación en el constructor. Además debemos añadir una variable estática y privada que contenga el contenedor de nuestra aplicación:

private static IWindsorContainer Container;
 
protected void Application_Start() {
    BuildContainer();
    AreaRegistration.RegisterAllAreas();
    RegisterRoutes(RouteTable.Routes);
}
 
private void BuildContainer() {
    Container = new WindsorContainer();
    Container.RegisterControllers(typeof(HomeController).Assembly);
    ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(Container));
    Container.Kernel.AddComponent(
        "MvcApplication.Services.MyService", 
        typeof(IService), typeof(MyService), 
        LifestyleType.Transient);
}

Además de usar Castle Windsor, hemos hecho uso de la libreria open source MvcContrib.Castle, que extiende Windsor para proporcionarnos algunos métodos utiles para registrar nuestros controladores en el contenedor e indicar a Castle que consumirán servicios (son las llamadas que vemos a Container.RegistrerControllers y WindsorControllerFactory). Por último hemos registrado un componente indicando la clase a la que corresponde y el interfaz que implementa.

Ahora simplemente incluiremos el servicio en el constructor de nuestro controlador, Windsor se encargará de inyectar esa dependencia y ya lo podremos usar tranquilamente desde nuestras acciones:

public class HomeController : Controller {
        private IService _myService;
 
        public HomeController(IService myService) {
            _myService = myService;
        }
 
        public ActionResult Index() {
            _myService.DoSomething(); 
            return View();
        } 
}

La ventaja de trabajar con interfaces es que cuando queramos podemos cambiar MyService por otra clase que implemente este interfaz, sin afectar al código de las clases que consumen dicho servicio. Además, típicamente configuraremos los componentes del contenedor mediante un fichero de configuración xml y no por código como hemos hecho en este ejemplo, con lo que nuestra aplicación será todavia más flexible.

Oct 5 10

Nuevo site de ITA

por Luis Roig

Como no sólo de escribir software vive el hombre, nos complace presentar el nuevo site de ITA (Instalaciones Técnicas de Aluminio) en www.itasl.es.  ITA es una empresa familiar de la Comunidad Valenciana con más de 20 años de experiencia en la fabricación e instalación de productos de aluminio en edificaciones. Han participado en obras de gran calado, como la sede de Bancaja en Valencia, el parque tecnológico ACTIU o la nueva estación de Alta Velocidad de Renfe en Valencia, entre otros.

Nectio Labs ha diseñado íntegramente el site y desarrollado la maquetación HTML+CSS. El site funciona con WordPress como backend de gestión de contenidos y jQuery para agilizar el frontend.

Esperamos que os guste!

Ago 16 10

Desplegando Cuyahoga Framework sobre Linux con Mono

por Luis Roig

En este nuevo post vamos a hablar de los pasos necesarios para desplegar una aplicación web .NET sobre un stack Linux (Apache + MySQL) gracias al proyecto Mono. Aunque siguiendo en la línea de posts anteriores trataremos una aplicación desarrollada con Cuyahoga (un framework web modular construido sobre ASP.NET, Castle y NHibernate) gran parte de la información nos puede ser util igualmente si estamos desplegando una aplicación ASP.NET o ASP.NET MVC.

En realidad, a dia de hoy y gracias a Mono es muy sencillo que nuestra aplicación web desarrollada con tecnologías .NET de Microsoft sea servida en un servidor Linux con Apache. Gracias a mod_mono, un módulo de Apache desarrollado por el equipo de Mono, tan solo necesitaremos configurar un Virtual Host en el que indicaremos la ruta raíz a nuestra aplicación web y que dicha aplicación debe ser servida por mod_mono.

En nuestro caso, el de una una aplicación desarrollada con Cuyahoga 1.6.0, nuestro despliegue constará de tres grandes bloques:

1) Configurar el Virtual Host de Apache
2) Configurar el acceso a base de datos de Cuyahoga
3) Aplicar los permisos adecuados a la estructura de directorios de Cuyahoga

Leer más…

Jun 12 10

Test funcional con Selenium y NUnit

por Luis Roig

Antes de seguir tratando otros aspectos de Cuyahoga en siguientes posts, me gustaría escribir sobre la importancia de tener tests funcionales automatizados en el desarrollo de cualquier aplicación software.

Entre los varios tipos de tests que normalmente son usados en el desarrollo de software el test funcional o de aceptación ataca directamente al interfaz final de la aplicación al que accederá el usuario, y su objetivo es verificar el correcto funcionamiento de todo el sistema en conjunto.

En el ámbito de las aplicaciones web, lo tradicional es realizar este testeo de forma manual, lo que los americanos llaman “monkey testing” y nosotros denominamos simplemente “a mano”. Esto puede servirnos cuando estamos desarrollando una determinada funcionalidad, pero en una aplicación web medianamente grande no es operativo funcionar de esta forma. ¡Ese trabajo lo tendría que hacer una máquina! Es necesario que tengamos otras piezas de software que prueben automáticamente nuestra aplicación.

Afortunadamente existen muchas herramientas y frameworks de testing de código abierto que nos facilitan mucho la tarea de escribir estas pruebas automatizadas. En este post vamos a hablar un poco de dos de ellas: Selenium y NUnit.

Selenium es un conjunto de herramientas para testear aplicaciones web en varias plataformas. Primero nos ofrece Selenium IDE, un plugin para Firefox con el que podemos crear de forma muy fácil los distintos casos de test. Con él grabaremos nuestra interacción con la aplicación y podemos indicar con un menu contextual las condiciones que queremos que se verifiquen.

Aunque el plugin para Firefox nos permite grabar y ejecutar casos de test sin ningún problema, tiene varias limitaciones: no podemos reutilizar aspectos comunes de los tests ni integrarlos en el framework de test que ya estemos utilizando para el desarrollo de nuestra aplicación. Para solucionar estas carencias existe Selenium Remote Control, un servidor que permite ejecutar nuestros tests en varios navegadores y además integrarlo con diferentes frameworks de testing (como RSpec para Ruby, JUnit para Java o NUnit para C#).

Veamos un pequeño ejemplo de los pasos que tendríamos que dar para correr un test funcional con Selenium y NUnit.

Leer más…

Abr 13 10

Cuyahoga

por Luis Roig

Actualmente estoy inmerso en el desarrollo de una aplicación web orientada principalmente a la gestión de contenidos y sites, y por ello quería dedicar un post a hablar sobre Cuyahoga, el framework open-source que estoy usando para llevar a cabo el proyecto.

Cuyahoga es un framework de código abierto escrito en C# para desarrollar aplicaciones web de forma modular bajo la plataforma .NET. ¿En que consiste exactamente esta arquitectura modular? Pues consiste en desarrollar funcionalidad en forma de pequeños módulos que serán lo más genéricos que podamos (un blog, un foro, una tienda online) y que después insertaremos en las distintas secciones de los sites que funcionen sobre Cuyahoga.

Logo Cuyahoga 2

Esta forma de trabajar nos permite tener muy acotada la extensión de una aplicación ya que dividimos en varios mini-proyectos toda la funcionalidad que necesitamos. Cuyahoga nos proporciona clases de las que heredar para crear fácilmente estos módulos. De esta forma compilaremos cada módulo en su propio .dll sin tener que recompilar o desplegar el resto de la aplicación.

Además, Cuyahoga está construido sobre Castle Windsor, un framework de software libre que entre otras cosas aporta funciones de Inversión de Control (al estilo de Spring en el mundo Java). A través del contenedor de Castle, Cuyahoga nos deja accesibles de forma sencilla servicios para acceder a la estructura del site, acceder a la base de datos (a través de NHibernate), roles de usuario y mucho más.

Actualmente la versión 2.0 de Cuyahoga está en Alpha, e incluye varias mejoras (entre ellas la de adoptar ASP.NET MVC para el desarrollo de módulos). Desgraciadamente, por ahora dista mucho de estar preparada para producción. Para este proyecto estoy usando la versión 1.6.0, que tiene un interfaz de administración más sobrio y hace uso de WebForms, pero tiene una ventaja vital: que compila y corre sin problemas sobre Mono.

Para quien no conozca Mono, decir que se trata de un importante proyecto open source que tiene como objetivo soportar la plataforma .NET de Microsoft en otros sistemas operativos, como Linux o Mac OSX. Esto quiere decir que podemos compilar Cuyahoga con Mono o incluso usar los .dll compilados previamente con Visual Studio, y correr nuestra aplicación web en un stack Linux + Apache + MySQL.

Y hasta aquí esta pequeña introducción sobre Cuyahoga. En futuros posts trataré más a fondo otros aspectos técnicos, como por ejemplo su despliegue sobre Mono, Apache, MySQL y Linux.

Feb 22 10

Bishop en Laboratorios Mediterráneo

por Luis Roig

Desde hace unos meses he estado desarrollando para Laboratorios de análisis Mediterráneo / Clínica Santa Clara un software de comunicaciones para integrar diversos autoanalizadores de sangre en su software de gestión.

Lo clásico en estos autoanalizadores (como el Cobas E411) es que dispongan de un interfaz RS232 (puerto serie) y mediante un protocolo de enlace de datos transmitan los resultados y reciban los tests que se han de realizar a una determinada muestra. Para lograr esto, y bajo la plataforma .NET, desarrollé Bishop.

Bishop consta de una librería que implementa las capas de diversos protocolos  (física, enlace de datos y de aplicación),  el acceso a base de datos,  y una aplicación de escritorio que desde un PC permite gestionar los distintos dispositivos conectados a él.

Para saber más detalles técnicos y curiosidades acerca de este proyecto, haced click en Leer más!

Leer más…

Feb 21 10

Lanzamiento del blog oficial de Nectio Labs

por Luis Roig

Bienvenidos al blog oficial de Nectio Labs!

Desde aquí inicio un espacio donde informar de la andadura de Nectio y de las diversas colaboraciones y proyectos en los que participe. También comentaré asuntos técnicos sobre protocolos de comunicaciones, buenas prácticas en desarrollo de software y sobre  las herramientas que uso en el día a día (.NET, Ruby on Rails, PHP, Linux y demás amigos).

Todo esto sin olvidar mi visión personal de lo que es iniciar una MicroSL, un proceso duro pero (esperemos) con su merecida recompensa!