Arreglar Error Chrome en páginas https NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM

5
Estándar

Muchos de vosotros seguro que habéis estado horas buscando como arreglar el fallo NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM en el navegador Chrome con paginas que usen algún certificado digital https con SHA-1.

La buena noticia es que el error no proviene de Chrome, sino del antivirus, en este caso de Avast.

Os explico como solucionarlo de la siguiente forma:

1. Abrimos las configuración desde la ventana de interfaz de Avast.
1

2. Seleccionamos la opción “Protección Activa”.

2
3. Dentro de “Protección Activa”, clicamos el enlace “Personalizar” del Escudo Web.
3

4. Una vez dentro quitamos el check de la opción “Activar análisis de HTTPS”

4

5. Guardamos en el boton “Aceptar”.

Con esta modificación se deberían solucionar estos problemas con las páginas https que usen certificados SHA1 y devuelven NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM.

Nota: en otros antivirus debéis buscar las mismas opciones para deshabilitar esa característica.

Chrome Network Error Download Files on C# or Vb.Net

error_network_chrome
Estándar

With the last update of Google Chrome (Versión 53.0.2785.116 m at this point) many Microsoft developers get the surprise of download buttons of their web applications start to fail with Network Error.

This maybe cause by the flush() and close() behaviour on our code and the use of this methods on download functions.

One of the solutions that i find to fix it, its to change flush() and close() to end() adding a empty System.Threading.ThreadAbortException catch to avoid problems on execution.

C#

...            
//Response.Flush();
//Response.Close();
Response.End();
}
catch (System.Threading.ThreadAbortException)
{}
.....

 

Vb.Net

Try
.....
'Response.Flush()
'Response.Close()
Response.End()
Catch exx As System.Threading.ThreadAbortException
End Try

 

I hope this work for you, share and comment this post.

Como crear un marketplace I

Marketplace
Estándar

El verdadero negocio ya no está en el ecommerce tradicional. Al igual que las pequeñas tiendas de barrio que fueron absorbidas por los grandes supermercados en el mundo real, en el mundo digital empieza a producirse el mismo fenomeno entre las tiendas online y los marketplace.

El ejemplo mas usado de marketplace lo tenemos en Amazon, un “all in one” donde podemos encontrar casi de todo, y que no parece que tenga techo en su cifra de ventas, al menos, de momento. Las ventajas para los usuarios son evidentes, poder comprar todo en el mismo sitio, al igual que en un comercio fisico, ademas, debido al volumen de ventas, estas plataformas pueden ofrecer otros servicios adicionales o el envío, a precios muy competitivos, incluso en ocasiones gratis.

La cuestión es como iniciar un proyecto de este estilo y en esta serie de post intentaré desgranar los puntos básicos en el tema técnico, que, debido a mi trayectoria, he podido ver de primera mano. A nivel profesional he participado en dos proyectos de marketplace, con resultados dispares (Portobellostreet.es y Timetak.com).

Experiencia Previa

Por un lado tenemos Portobellostreet.es, del que soy IT Manager y creador de toda la infraestructura técnica, todo con codigo inhouse, sin usar plataformas preprogramadas, como Magento o Prestashop. En Timetak fui el Project Manager de todo el desarrollo de la plataforma, tambien con código “adhoc”.

Plataformas ecommerce vs codigo “adhoc”.

Juan Macías es blogger, CEO de deMartina.com y consejero de Adigital (Asociación Española para la Economía Digital) y participa como inversor y advisor en varias start-ups. En su blog, escribió hace un tiempo un articulo sobre la situacion actual del ecommerce en España, en el cual, hablaba precisamente de este tema y de la plataforma a usar en este caso.

El quid de la cuestion es si es mejor usar plataformas preprogramadas o realizar desarrollos a medida. Mi opinión (y me ha costado el descarte en algun proceso de selección) es realizarlo siempre a medida. He aquí mis razones para hacerlo de esta forma:

  • Parametrizacion Inicial: Las plataformas como Magento y Prestashop aparecieron con funcionalidades que permiten a cualquier usuario medio crear una tienda online sin conocimientos de programación. Esto solo se consigue con una plataforma extremadamente rigida en cuanto al código que hay que mantener o modificar. En estos momentos, por ejemplo, Magento es una plataforma que ni siquiera un usuario medio es capaz de parametrizar, teniendo que recurrir a un programador, que en muchas ocasiones tiene esos mismos problemas, ya que al ser tan rigido, modificar cualquier aspecto se convierte en una locura.
  • Modificación y adaptación a nuevos escenarios: Al igual que al poner en marcha la beta de nuestro marketplace podemos hacerlo con este tipo de sistemas, cuando nuestro negocio evolucione y sea necesario pivotar, ofrecer otro tipo de servicios online, integraciones con ERP´s, CRM´s, etc, es muy probable que meter estos cambios en un Magento (por poner un ejemplo) sea directamente una hazaña, por las propias restricciones del sistema.
  • Actualizaciones: Estos sistemas reciben actualizaciones de forma constante, lo que hace complicado tocar partes “troncales” del propio sistema, ya que la actualización “sobreescribe” el código que tengamos insertado, o puede dejar inservibles nuestros propios módulos al cambiar la programación de los troncales.
  • Personal técnico: En una entrevista con 2 CEO´s de una empresa que aspira a convertirse en el Amazon español, me comentaban que era muy difícil encontrar verdaderos expertos en Magento y que eso complicaba la gestión de la plataforma, esto es otro handicap a la hora de apostar por estos sistemas.

eCommerce, la que se está liando

Tampoco digo que el código adhoc sea la panacea para un marketplace ( o cualquier negocio online) pero según mi punto de vista, cuando ya dispones (o vas a disponer, dependiendo del nivel de inversión) de un equipo de desarrollo, el código “hecho en casa” se ajustara al 100% a tus necesidades y podrá evolucionar en el tiempo junto a tu negocio, adaptándose a los cambios que se vayan necesitando.

Sobre el tema del personal técnico, usando un lenguaje de programación común (C#, PHP, o Java) no deberías de tener problemas si tienes rotación de personal, siempre que tu proyecto y equipo cumpla una serie de estándares sobre documentación y patrones de programación, del tal forma que el know-how del proyecto no resida solamente en la cabeza de una u otra persona.

Comienzo de proyecto

Es importante en este tipo de proyectos contar con las personas adecuadas para liderar la parte técnica.

Deben ser conocedores del mundo ecommerce, a nivel desarrollo y sistemas, para tener una visión estratégica a largo plazo que haga posible el crecimiento sin problemas. Ha continuación desgranamos puntos importantes para comenzar un proyecto de estas características.

Análisis Funcional

Es quizás la parte mas importante del proyecto. Aquí se deciden las funcionalidades y reglas de negocio que definen todo el sistema: tanto la web (Front), como los paneles de vendedores o proveedores (Back). Este análisis funcional definirá buena parte de la estructura de datos y funciones a desarrollar, y hará ,que la evolución y mantenimiento de todo el sistema sean en el futuro mas sencillos o convertirlos en un infierno. Es conveniente realizar este análisis pensando en una metodologia LEAN, que nos permita diseñar un PMV (Producto Minimo Viable) para probar el modelo de negocio sin tener que desarrollar el 100% de la plataforma. Algo que la mayoria de startups no se pueden permitir,

Elección de lenguaje de programación, servidor web, base de datos

El CTO debe hacer un estudio muy detallado de la previsión de visitas que tendrán las diferentes áreas del marketplace, ya que hay que decidir entre diferentes tipos de servidores y lenguajes, los cuales se valoran por varios criterios: velocidad, escalabilidad, mantenimiento, fiabilidad, coste, etc.

Incluso a nivel de base de datos es necesario tener en cuenta que uso y necesidades de análisis se darán en el futuro, ya que puede interesar desarrollar directamente sobre herramientas NoSQL como MongoDB o Cassandra.

En este artículo de nuestro blog desgranamos un poco los diferentes tipos de servidores web para nuestros proyectos.

Equipo

Este es uno de los handicaps de este tipo de proyectos, ya que es raro que el equipo de desarrollo este constituido antes de empezar el proyecto. Suele empezar alguno de los socios, que además hace las funciones de CTO. En principio es casi una necesidad empezar de esta forma pero al poco tiempo será necesario introducir desarrolladores para terminar la plataforma de forma optima.

Nunca contratéis becarios para estas funciones. Tened en cuenta que esto es la base de vuestro futuro negocio, es la estructura sobre la que construir toda la empresa. Siempre profesionales y si están bien pagados mejor que mejor, ya que recibirás mas compromiso y lealtad hacia el proyecto. Si, cuando trabajas por cuenta ajena eres un mercenario, trabajas por dinero. Si eres el dueño o socio encargado de las contrataciones hazte a la idea rápido. La mayoría de personas tienen necesidades que se cubren con dinero, una vez resueltas ya puedes evangelizarlas sobre lo chachi que es tu proyecto. En el futuro ellos serán los primeros “soldados” de vuestro ejercito, y los necesitareis motivados para los días malos en los que todo sale mal.

En el siguiente artículo seguiremos con las consideraciones iniciales, así como la planificación del desarrollo y elementos a tener en cuenta antes del lanzamiento de nuestro marketplace.

 

Como empezar con MongoDB, Node.js, Express y Jade en Visual Studio

mongo_visual_studio
Estándar

Renovarse o morir.

Esa es la frase lapidaria que cualquier buen programador lleva grabada en su cerebro desde que empieza a trabajar en esta selva de lenguajes, bases de datos, frameworks y demás “fauna”.

Durante muchos años mis labores principales no eran de programación, prácticamente menos Access (y VBA) mis labores profesionales habían sido siempre de gestión de sistemas (servidores, comunicaciones, bases de datos, etc). Pero llego mi “evolución” profesional en el año 2006, cuando gracias a mis conocimientos de Access y VBA entre en una empresa en la que de verdad comencé mi carrera de amor-odio con la programación, concretamente en entorno web con ASP clásico.

Alguno ya empezará a mirar ojiplatico las palabras “ASP Clásico”, pero si, la web de mi nueva empresa estaba programada en ese lenguaje prácticamente calcado a Visual Basic…pero funcionaba, y bastante bien además. Al no provenir de la casta de los “programadores” universitarios, en muchos temas soy bastante menos extremista en cuanto a que cosas son importantes a la hora de crear código (patrones, POO, como usar variables, constantes y demás de forma “correcta”, etc)…yo soy mas pragmático, y muchos dirán “sucio”….que se le va a hacer. Admito que mi preocupación, quizás por mi pasado de Sistemas, es que el programa funcione bien, ¿Que se puede hacer ademas bonito?, seguramente, pero alguien que no entró en ese ámbito laboral desde el principio, bastante tiene con que las cosas funcionen bien. Esto me da una serie de ventajas como he dicho…soy mucho mas flexible a la hora de considerar nuevas situaciones y soluciones a los problemas diarios, y entre ellos se encuentran las evoluciones de mis desarrollos actuales.

Actualmente sigo manteniendo aplicaciones con ASP Clásico, pero mis ultimos backends ya se programan en C# (siempre sobre SQL Server). El hecho es que para vivir como freelance del desarrollo web te encuentras con muchos ámbitos distintos, y el que cada vez mas esta poniéndose en cabeza de las aplicaciones online, es el tema del BigData. Para el que no lo sepa, el “BigData” no es un monstruo de las montañas….es un concepto que engloba distintos tipos de motores de bases de datos especializadas en manejar grandes cantidades de información.

¿Porque existe el BigData?

El análisis de datos es fundamental para las estrategias de negocio actuales, incluso aunque el negocio no sea online. Este análisis siempre esta basado en consultar distintas variables en las bases de datos para extraer información relevante de los clientes, el problema es que en el caso de empresas con cientos de miles o millones de clientes/usuarios, las bases de datos relacionales (SQL Server, Oracle, MySQL, etc) empiezan a tener problemas cuando las consultas requieren manejar cientos de miles o millones de registros, precisamente por la arquitectura en la que se guarda la informacion. Para solucionar este problema desde distintas posiciones han surgido bases de datos NoSQL (Not Only SQL) que intentan solucionar esta problemática usando estrategias distintas para almacenar los datos, y hacer que la consulta y extracción de información sea mucho mas efectiva a los niveles que no llegan las relacionales.

MongoDB

De todas las bases de datos NoSQL mas conocidas hice un estudio de su implantación, uso, y complejidad de aprendizaje para empezar a trabajar con alguna de ellas, siendo Mongo la seleccionada. El argumento definitivo es que tiene mucha mas cuota de mercado que el resto de opciones, lo que la hace mas útil de cara a mis objetivos profesionales.

En lugar de guardar los datos en tablas como se hace en las base de datos relacionales, MongoDB guarda estructuras de datos en documentos parecidos a JSON con un esquema dinámico (MongoDB utiliza una especificación llamada BSON), haciendo que la integración de los datos en ciertas aplicaciones sea más fácil y rápida.

Para instalar MongoDB solo es necesario ir a su web Descargar MongoDB y seguir estos pasos:

  1. Instalar
  2. Crear una carpeta c:\data\db (es la ruta por defecto, buceando en la documentación se puede modificar)
  3. Ejecutar el servicio “mongod.exe”, en mi caso la ruta es la siguiente: C:\Program Files\MongoDB\Server\3.2\bin  (sin la carpeta donde guardar la base de datos el servicio no arrancará)

Para facilitar un poco las cosas podemos descargarnos una aplicación GUI para gestionar/ver las bases de datos, en mi caso he optado por MongoBooster el cual tiene una version free no-commercial.

Node.js, Express y Jade

Para sacarle todo el jugo a MongoDB había que elegir una plataforma donde empezar el camino y que mejor que hacer un 2×1, aprendiendo ademas de Mongo, otras tecnologías que ya son una realidad en el mundo del desarrollo web. ¿Porque elegir Node, Express y Jade?…. por comodidad, ya que existen plantillas prediseñadas para Visual Studio, así de simple.

Después de instalar Node.js para Windows  toca instalar Node para Visual Studio , que nos permite elegir nuevas plantillas al iniciar un nuevo proyecto, todas basadas en Node.js, Express (framework de Node), a la que se suma Jade (framework de plantillas HTML que funciona con Express). Node para Visual Studio requiere Visual Studio 2015 (puede ser la versión Community que es gratuita)

Concretamente mi primer “proyecto” de pruebas tiene estos 3 elementos, os dejo un pantallazo para que veais la ruta para seleccionar estas plantillas:

node visual studio

Una vez abierto el nuevo proyecto podemos ver la estructura de carpetas.

express

Para iniciar nuestras pruebas lo haremos insertando registros en Mongo y mostrándolos a través de una de las paginas de la web resultante. El modelo Node/Express es MVC, por lo que el código se divide en varios archivos para que todo funcione correctamente y sea mantenible.

Antes de empezar con el código necesitaremos instalar el modulo Mongoose a través de npm. Mongoose es un módulo adicional que podemos encontrarlo en el repositorio de npm y que nos permite realizar la conexión entre Node.js y MongoDB de una manera mas sencilla. En Visual Studio tenemos una manera sencilla de instalar cualquier modulo, haciendo clic en la carpeta npm del proyecto y seleccionando “Install New npm Packages”….saldra una pantalla donde buscar el modulo y ejecutar la instalación de manera automática. Sino siempre se puede usar la consola npm con esta orden: npm install mongoose

Empecemos con el código

Nuestro objetivo es guardar y mostrar datos de películas a través de la pagina “/movies” en nuestro proyecto.

En la carpeta /routes crearemos un js llamado movies.js en el que introduciremos el siguiente código, si os fijáis es bastante sencillo de leer:

  1. Definimos la conexión con MongoDB,
  2. Definimos un esquema de datos con el que vamos a trabajar
  3. Abrimos la conexión e instanciamos el “modelo” sobre el que vamos a interactuar contra los registros (colecciones), con la siguiente estructura (El primer argumento es el nombre en singular de la colección y el segundo el esquema). Mongoose buscara automáticamente  el plural del nombre del modelo….raro, mucho, pero es así.
  4. Una vez recojamos la petición desde el navegador buscamos registros.
  5. En el caso de que la tabla ya tenga algún registro insertamos uno nuevo y volvemos a buscar, cargando los resultados en una variable que usaremos en jade para mostrar el listado de películas.

Sobre el esquema y modelo tenéis mas información en la documentación de Mongoose 

var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');

//1
mongoose.connect("mongodb://localhost/local");
var db = mongoose.connection;

//2
var movieSchema = mongoose.Schema({
 name: String,
 released: Boolean,
 watched: Boolean
});

//3
var MovieModel = mongoose.model('movie', movieSchema);
db.on('error', console.error.bind(console, "connection error"));
db.once('open', function () {
 console.log("moviesDb is open...");

});


router.get('/', function (req, res) { 
 //4

 MovieModel.find().exec(function (error, results) {
 if (results.length === 0) {

 } else {
 //5
 MovieModel.create({ name: "Pixels", released: true, watched: false });
 console.log("Movie created...");
 }
 });
 MovieModel.find().exec(function (error, results) {
 if (results.length != 0) {
 res.render('movies', { movies: results }); 
 } 
 });
 
 
});


Con esto tenemos terminada la parte de datos, ahora crearemos la vista movies.jade en la carpeta /views en la que introduciremos el siguiente código:

extends layout

block content
 h1 Movies
 a(href="/addmovie") Add Movie
 ul
    each movie, i in movies
       li 
          a(href="/movie/#{movie.name}") #{movie.name}

Para más información sobre la sintaxis de Jade tenéis este enlace. Básicamente, como podéis ver, definimos objetos HTML pero de una manera mucho mas sencilla, incluyendo ademas funciones y operadores de tratamiento de datos.

  1. En el ejemplo extendemos la plantilla principal “layout” que contiene el codigo común.
  2. Abrimos un bloque “content”
  3. Definimos un h1 con el texto “Movies”
  4. Definimos un enlace a /addmovie con el texto “Add Movie”
  5. Abrimos un objeto ul
  6. Recorremos el objeto movies que traemos desde movies.js y por cada registro abrimos un <li> con el enlace al nombre de la pelicula.

En principio con este código ya tenemos la parte de la vista de datos, ahora tenemos que configurar el archivo de la aplicación app.js para que las llamadas a la url /movies se gestionen de manera correcta, añadiendo estas lineas

var routes = require('./routes/index');
var movies = require('./routes/movies');

var app = express();
.... 
....
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/movies', movies);

Con estas modificaciones ya deberíamos de poder lanzar el debug contra Google Chrome para probar nuestro código y ver como funciona. En principio solo con este codigo hemos probado 2 operaciones importantes contra MongoDB, búsqueda e inserción de registros.

En próximos artúculos seguiremos actualizando el proyecto con mas operaciones emulando la actividad normal de una web.

¿Que te ha parecido el post? Deja tus comentarios.

Como elegir un servidor/hosting para un negocio online

shellshock-bash-bug-affects-apache-web-server-software
Estándar

Llevo desarrollando aplicaciones y páginas web cerca de 10 años, primero como Analista-Programador, y luego siendo IT Manager en algunas empresas, actualmente ocupo esa posición en el ecommerce Portobellostreet.es, una de las tiendas online de muebles mas valoradas en España.

En el puesto de CTO o IT Manager una de las decisiones que debes de tomar y que resultan mas críticas para el negocio es el tipo de hosting en el que vas a desarrollar y poner en producción tu aplicacion y base de datos. Como primera aclaración comentar que un negocio online no tiene que ser un ecommerce, puede ser un buscador tipo Idealista, una app móvil como Parkfy o un servicio de consulta como el de Sepín Editorial Jurídica (del que forme parte hace algunos años).

Mis criterios para contratar un servidor siempre han sido estos:

  • flexibilidad de Sistema Operativo: yo trabajo casi todos los proyectos en entornos Microsoft y muchos ISP directamente solo trabajan con Linux
  • Control Remoto: Al contrario que en un simple hosting, necesito tener acceso a todas las funcionalidades del servidor, es por ello que el control remoto (ya sea para Windows o Linux) es imprescindible.
  • Caracteristicas vs Precio: Espacio en disco, RAM, Plesk, Coste de transferencia, etc.
  • Escalabilidad: Aquí esta una de las diferencias fundamentales que separan los distintos tipos de servidor.
  • Confianza en el proveedor: Cuanto mas se trabaja en este ámbito mas se conocen las empresas que prestan un buen servicio de atención al cliente y las que no.

Ahora explicare los tipos de servidor que conozco en base a la escalabilidad (se que existirán mas pero me ciño a mi propia experiencia, los comentarios están abiertos para añadir información extra)

Hosting: Un hosting no es mas que un espacio de almacenamiento web en el cual el precio varia según el espacio contratado, el tamaño de base de datos y los extras (marketing online, email, etc.). Este tipo de servicio es el más básico y personalmente solo lo contrataría si fuese una empresa que solo necesita una web corporativa y poco mas. Salvo excepciones las empresas que lo ofrecen, no disponen de la posibilidad de cambiar automáticamente las características, en caso de necesitar ampliar alguna de las especificaciones contratadas, normalmente porque ese hosting es uno mas de las decenas de compartimentos que ocupan en un servidor mas grande. Esto hace que no sea recomendable para una aplicación que pueda ir creciendo en numero de usuarios o requerimientos técnicos. La gestión se realiza desde un panel web dentro del sistema del proveedor del servicio y no se tiene acceso a la gestión del propio servidor.

VPS (del inglés virtual private server): Esto es el siguiente nivel al hosting, solo que en este caso ya tenemos acceso a un sistema operativo completo, no solo a un panel de control. Al contratarlo, al igual que el hosting, tenemos que decidir que tamaño de disco, RAM, SO, etc…queremos tener en el servidor, los proveedores suelen ofrecer “paquetes” ya configurados a un precio especifico. Este es el servidor que recomendaria a alguien que,por ejemplo, prestase servicios de desarrollo web, ya que permite configurar cuentas de usuario de hosting para pequeñas aplicaciones o ecommerce a un precio ajustado.

Además al tener acceso al propio SO, si alguna de esas aplicaciones necesita escalarse, se puede migrar de una manera mas sencilla a un servidor mas grande.

Como contrapartida tiene el mismo problema que el hosting, no es escalable, ni se pueden modificar las especificaciones contratadas, ademas de que la CPU y la RAM son compartidas con otras tantas VPS en un servidor mas grande con sistema de virtualizacion. Si necesitas ampliar, tu mismo tienes que hacer la migración.

Servidor dedicado: Como su propio nombre indica es una maquina fisica que tienes en exclusiva para tus aplicaciones y webs, con su SO, disco, RAM, etc en exclusividad para ti. Las ventajas de ese tipo de servidor son sobre todo la disponibilidad de los recursos del servidor, ya que no se comparten con ningún otro cliente de la empresa de hosting. Como desventaja tenemos que son escalables “a medias”, ya que se pueden ampliar algunos recursos (como RAM y disco duro) pero a un precio bastante prohibitivo en ocasiones.

Cloud: Los servidores cloud pueden ofrecer varios servicios, siendo el mas comunmente usado el de servidor web, aunque tambien los hay solo de almacenamiento o base de datos. Un servidor cloud es lo mismo que un VPS pero usando una tecnologia que permite hacerlo completamente escalable (CPU, RAM, disco, load balancing, VPN´s, etc). En los 2 últimos años los precios de la tecnología cloud se han estabilizado bastante, siendo bastante razonables para empresas que buscan flexibilidad y escalabilidad en su servicios web, aunque tienen el handicap de que al ser virtualizado puede sufrir los mismos problemas que un VPS, al compartir los recursos físicos de un servidor entre varios servidores virtuales.

Como IT Manager de Portobellostreet.es tome la decision hace 2 años de pasar todas las aplicaciones y servicios web públicos a Cloud, ya que necesitaba cierta flexibilidad debido al aumento de visitas y carga en la base de datos. En la oficina central el ERP tiene un servidor dedicado ya que tenemos separados los datos de la web y del ERP, de tal forma que aseguramos el funcionamiento del ERP aunque se produzca una caída de la web y viceversa. Para empresas con un negocio online potente que necesite de servicios web siempre recomendaría un servidor cloud, ya que la flexibilidad compensa el ratio de fallos que puedan ocurrir en la plataforma, ademas de permitir ciertas técnicas con el load balancing (varios servidores respondiendo a peticiones web o de base de datos)