July 22, 2014

Variable not found

#if DEBUG en Javascript (bueno, o algo así)

DebugHay veces que desde Javascript nos interesa ejecutar un código u otro en función de si la ejecución se está produciendo en un servidor de desarrollo o en uno de producción. Por ejemplo, en el primer caso suele ser interesante disponer de logs o herramientas de ayuda a la depuración, mientras que en el segundo lo normal es que queramos introducir código más eficiente y sin este tipo de condimentos.

En este post vamos a ver algunas técnicas muy básicas que nos permitirán ejecutar un código u otro en el lado cliente de aplicaciones ASP.NET MVC (o ASP.NET en general) en función del modo de compilación.

1. El lado servidor

En el lado servidor es bastante fácil de conseguir porque disponemos de directivas de compilación que nos permiten detectar si estamos generando los binarios en modo depuración:
// HomeController.cs
public ActionResult Index()
{
#if DEBUG
ViewBag.CompilationInDebugMode = true;
#else
ViewBag.CompilationInDebugMode = false;
#endif
return View();
}

@* Home/Index.cshtml *@
<p>Compilation in debug mode: @ViewBag.CompilationInDebugMode</p>
También podemos conocer en tiempo de ejecución si ASP.NET está compilando en dicho modo (compilation debug="true" en el web.config):
@* In a Razor view: *@
<p>ASP.NET debugging: @Context.IsDebuggingEnabled</p>
Normalmente esta última vía será la que utilicemos, pues es la que suele indicar si estamos ejecutando sobre un servidor de desarrollo o no, básicamente porque el cambio en el web.config del valor del parámetro debug a false es uno de esos pasos que nos han recomendado desde el principio de los tiempos al pasar una aplicación a producción. Y seguro que todos lo hacemos, ¿verdad? ;-)

2. ¿Y el lado cliente?

En el lado cliente, debido a la propia naturaleza dinámica del lenguaje Javascript, no existe una compilación en modo depuración; bueno, de hecho no existe ni siquiera compilación como tal ;-), por lo que tenemos que recurrir a algunos truquillos para conseguir emular este comportamiento.

2.1. Cargar scripts diferentes en función del modo de depuración de ASP.NET

Una posibilidad muy sencilla, y válida en algunos escenarios, es tener un archivo de script diferente para cada modo de compilación. De hecho, es empleada por muchas bibliotecas Javascript, que se distribuyen en forma de archivo .js para la versión de producción, normalmente ya compactada y minimizada, y .debug.js para la versión a utilizar durante el desarrollo.

Por ejemplo, supongamos que tenemos los dos siguientes archivos:
// File: Myscript.debug.js (development script)
function log(msg) {
console.log(msg);
}

// =====================================

// File: Myscript.js (production script)
function log(msg) {
// Nothing to do
}
Para cargar manualmente un archivo u otro en función del modo de compilación bastaría con hacer lo siguiente a la hora de referenciarlo:
<script src="~/scripts/myscript@(Context.IsDebuggingEnabled? ".debug": "").js">
</script>
Sin embargo, si utilizamos bundles es aún más sencillo: de serie, el sistema de bundling ya distinguirá entre las distintas versiones de forma automática basándose en la extensión de los archivos. Por ejemplo, continuando con el caso anterior, al añadir un bundle como el siguiente el mismo componente de optimización seleccionará el archivo myscript.debug.js cuando la depuración de ASP.NET esté activada, y myscript.js en caso contrario:
bundles.Add(new ScriptBundle("~/bundles/myscript").Include(
"~/Scripts/myscript.*"
));
La referencia desde la vista en este caso sería así de simple:
@Scripts.Render("~/bundles/myscript")

2.2. Detección inline del modo de depuración

Pero no siempre el grano es tan grueso como en el apartado anterior. Muy frecuentemente no nos interesará sustituir completamente un script por otro en función del modo de compilación, sino conocer simplemente el modo en el que estamos para tomar una decisión a nivel de código. Esto nos permitiría escribir código como el siguiente:
function doSomething() {
if (DEBUG_MODE) {
log("Entering doSomething()");
}
// ... Code
if (DEBUG_MODE) {
log("Exiting doSomething()");
}
}
Por tanto, nuestro problema se reduce a establecer esa constante DEBUG_MODE a un valor que evalúe a cierto cuando estemos ejecutando sobre una aplicación compilada en modo depuración y a falso en caso contrario. Y aplicando lo visto anteriormente, podríamos conseguirlo de varias formas.

Una, realmente sencilla de implementar, consistiría en introducir un conciso bloque de scripts antes de cargar las bibliotecas o scripts que usen este valor, por ejemplo en el encabezado del layout o página maestra del sitio web, más o menos con lo siguiente:

@* Razor Layout *@
...
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My ASP.NET Application</title>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
<script>
window.DEBUG_MODE = @(Context.IsDebuggingEnabled? "true": "false");
</script>
</head>
...
Otra posibilidad sería establecer el valor de DEBUG_MODE en un script independiente del que tendríamos dos versiones, con extensiones .debug.js y .js, que respectivamente lo inicializarían a true y false, y usar cualquiera de las dos técnicas descritas anteriormente para cargar uno u otro en función del modo de compilación.

Publicado en Variable not found.

by José M. Aguilar (noreply@blogger.com) at July 22, 2014 11:55 AM

Programania

Un entorno productivo en pareja

IMG_1711

 

Ésta foto tiene ya un tiempo. Es de finales de 2013 (ya me cuesta publicar artículos, a ver si cojo un poco de inercia… :-P). En esa época a Guille y a mí nos cayó la primera versión de un potente software no-tan-big data, a hacer con AngularJS/Javascript, Elastic Search y AKKA, alrededor de un dominio que desconocíamos completamente y donde teníamos difícil encontrar a alguien que nos lo explicara, con una deadline inminente.

Si en un escenario aplica lo de typing is not the bottleneck, creo que es en éste. Con lo que decidimos que en lugar de estar levantándonos de nuestro sitio cada cinco minutos a preguntarnos cosas el uno al otro o tomar decisiones técnicas sin contrastar, íbamos a hacer todo el trabajo en pareja y favorecer el ancho de banda de la comunicación entre nosotros muy por encima del ancho de banda de tecleo.

En la foto se puede ver lo que para mí es un entorno ideal para trabajar el software:

  • un ordenador principal con dos teclados y dos ratones y espacio más que de sobra para estar cómodos y centrados frente a las pantallas.
  • un ordenador secundario. Esto es clave. En un escenario de incertidumbre máxima te atascas cada dos minutos y tienes que guguelear a mansalva. Si estás con un sólo ordenador, uno busca, y el otro tiene que andar aguantándose las ganas de buscar cosas distintas. Lo mejor es buscar en paralelo e ir comentando lo que se encuentra.
  • panel físico para gestionar el To Do. Según avanzábamos, íbamos redefiniendo una y otra vez el trabajo a hacer. Destruyendo post-its y creando unos nuevos con nuestra nueva visión de las tareas a realizar. Para nosotros era clave poder hacer esto sin los impedimentos de una herramienta electrónica como Jira, mucho más lenta. Máxime cuando la trazabilidad, en éste punto, no nos servía para nada.
  • pared pintable para discutir ideas y diagramar cosas. Tuvo mucho flow el poder discutir una idea, pintarla, e ir implementándola teniéndola siempre de referencia y pudiéndonos dar la vuelta en cualquier momento a discutir cualquier aspecto.

Es fácil enamorarse de ésta forma de trabajar. Y, al enamorarte, perder un poco la perspectiva. El sistema nos funcionó bien para su principal función: maximizar la información radiada y la comunicación entre nosotros como estrategia para abordar un producto de alta incertidumbre técnica y de dominio. Lo que no nos funcionó:

  • fuimos incapaces de mantener un sólo “to do” en el panel. Como éramos novatos en todo, aprendíamos una manera más decente de hacer las cosas cada media hora, y todo el código anterior nos parecía refactorizable (y lo apuntábamos al “to do”). Al final manteníamos el panel, un archivo todo.txt en el intellij, y las anotaciones //TODO:  en el propio código. Aunque planteábamos sesiones dedicadas sólo a fundirnos esas listas, no lo conseguíamos.
  • hacer pairing el 100% del tiempo trabajando a veces en jornadas de 10 horas es demasiado. Ya sé que esto, leído, puede sonar bastante evidente. Pero cuando estás dándolo todo, cansado, hay cosas de las que no te das cuenta. Por ejemplo, yo adquirí muchos conocimientos de “angularjs pasivo“. Como Guille es más rápido que yo pensando y empezó el proyecto manejando más de AngularJS, yo solía ser un mero espectador cuando encontrábamos una solución a un problema en JS. No soy manco: a veces se me ocurría la solución a mí… pero normalmente (especialmente cuando estábamos cansados) la implementaba él porque le suponía menos esfuerzo. Con lo que yo no terminaba de asimilar las cosas.

Lecciones aprendidas. Cómo y cuando hacemos pairing ahora:

  • hacemos pairing siempre que lo que nos impide avanzar es el conocimiento (ya sea técnico o de dominio).
  • hacemos pairing siempre que se va a tomar una decisión de diseño importante en la que se va a basar el proyecto (cómo vamos a organizar los componentes, si se va a usar tal o cuál patrón, estrategia de testeo, etc…)
  • siempre que hacemos pairing tenemos una lista preparada con el orden del día. Y sí: normalmente hacemos pairing de jornadas completas, preparando el entorno previamente para ser productivos y tener toda la información disponible y la posibilidad de tener discusiones productivas.
  • es importante no hacer pairing cuando quieres asimilar algo que has aprendido.

Como consecuencia de todo esto, en el último proyecto que hemos hecho juntos habremos hecho un día a la semana de trabajo en pareja. Al menos durante la fase principal del proyecto, acumulando en ese día las decisiones de diseño y la lista de cosas que queríamos aprender del otro. Inventándome la cifra, diré que habremos hecho un 10-15% de pairing.

¿100% o 15% de pairing? Para mí aquí ( como siempre) la clave es el contexto. Y el punto de vista desde el que analizar ese contexto, es el del conocimiento. Si analizo el proyecto en el que hicimos 100% de trabajo en pareja y soy sincero conmigo mismo, no creo que hubiéramos acabado antes ni mejor haciéndolo por separado. No creo que hubiera salido más barato ( argumento clásico en contra del trabajo en pareja). Sin embargo, si analizo el proyecto donde hemos hecho 10-15% de pairing, si que creo que más tiempo hubiera supuesto perder el tiempo. Y también sé que trabajar más por mi cuenta en AngularJS me ha hecho mucho más ágil e independiente.

 

by Luis Artola at July 22, 2014 07:16 AM

July 21, 2014

Variable not found

Enlaces interesantes 167

Enlaces interesantesAhí van los enlaces recopilados durante la semana pasada, espero que os resulten interesantes ;-)

.Net

ASP.NET

Azure / Cloud

Conceptos/Patrones/Buenas prácticas

Data access

Html/Css/Javascript

Visual Studio/Complementos/Herramientas

Cross-platform

Otros

Publicado en Variable not found

by José M. Aguilar (noreply@blogger.com) at July 21, 2014 02:26 PM

Programania

Panel Time Control

Éste es un pequeño apunte para recordar un panel que nos ha funcionado muy bien a Guille y a mí en un desarrollo que hemos hecho a presupuesto cerrado.

la foto

 

El panel es una especie de Story Map traspuesto. Cada columna es una entrega (diseñamos una estrategia con dos demos y una entrega final). Cada fila es un vertical de la aplicación (un “context boundary” que se diría en DDD).  La primera celda de cada fila contiene un glosario de términos del vertical y una lista de dudas o incertidumbre a ir aclarando.

No dimos color a los post-it´s. Distinguimos la funcionalidad del spike o tarea técnica poniendo de título al post-it “spike”. Viéndolo en retrospectiva hubiera estado bien darles un color de post-it distinto. Lo que si distinguimos fue el feedback/detalle descubierto en las demos(post-it amarillo), de la funcionalidad original (verde). Para visualizar si una funcionalidad estaba terminada, simplemente la tachábamos.

Para visualizar las horas que habíamos empleado (clave en éste proyecto a precio cerrado) usamos el post-it fucsia. Cada semana actualizábamos las horas, moviendo el post-it hacia la derecha proporcionalmente. De tal manera que era fácil ver si estábamos en el último tercio de horas y todavía en el segundo tercio de funcionalidades (vamos tarde), etc…

En definitiva, nos ha funcionado muy bien para controlar el release plan y controlar el tema económico. También para gestionar la incertidumbre del proyecto y el detalle de las funcionalidades.

Creo que éste panel no funcionaría en cualquier contexto. El panel obedece a un escenario donde no hay bugs (porque todo el trabajo diseñado es anterior a que se ponga en producción de verdad el software) y donde al estar dos desarrolladores es fácil saber quién está haciendo qué.

 

by Luis Artola at July 21, 2014 06:37 AM

July 17, 2014

Programania

Cynefin: ¿complejo o complicado?

Siguiendo un poco con la importancia de distinguir entre simple, complejo, complicado, etc… Es muy interesante el marco de decisión( o de análisis) Cynefin.

Cynefin_framework_Feb_2011

¿Cómo tomar decisiones o analizar un problema?

  • Si existe una relación clara entre causa y efecto, el escenario es simple. Puedes percibir la situación, categorizarla y, en función de la categoría, responder. Existen unas recetillas que te dicen en función de la categorización cuál es la mejor respuesta (best practices).
  • Si existe una relación entre causa y efecto, pero no está clara, el escenario es complicado. Requiere experiencia y análisis antes de actuar. Pueden existir unas buenas prácticas pero no una sola manera de hacer las cosas bien.
  • Si existe una relación entre causa y efecto, pero sólo eres capaz de establecerla a posteriori y, además, las consecuencias de lo que está ocurriendo no son predecibles, el escenario en el que te encuentras es complejo. La situación requiere probar varias cosas, coger feedback y actuar. La manera buena de hacer las cosas va emergiendo en función del feedback. No es conocida a priori.
  • Si no existe ninguna relación entre causa y efecto, ni siquiera analizando las cosas a posteriori, estás en una situación caótica. Probar para obtener feedback no sirve porque al repetir no necesariamente va a ocurrir lo mismo. La única posibilidad es dar un paso al frente, actuar y ver qué pasa. Aquí eres siempre un novato y no puedes extraer buenas prácticas en función de la experiencia.

Creo que en general nos movemos entre lo complejo y lo complicado. Y que es difícil saber cuando pararte a analizar bien las cosas y cuando no analizarlas tanto e intentar hacer algo para tener feedback rápido. Me gusta la manera en la que Cynefin enmarca todo esto.

Para un análisis muy bueno sobre Cynefin y Agilismo el post de Liz Keogh.. y ¡ojo a la respuesta de Jon Reffies!

 

by Luis Artola at July 17, 2014 06:38 AM

July 16, 2014

Yukei

Cómo usar un certificado SSL autofirmado de forma segura

Hace un par de publicaciones atrás, explicaba cómo configurar un certificado SSL autofirmado para la administración de WordPress, y señalaba la dificultad de comprobar la integridad de la comunicación entre el cliente y el servidor debido a que un certificado autofirmado no está validado por una autoridad de certificación comercial, como las que se incluyen entre los certificados aceptados por los navegadores más populares.

Aunque por una parte esto podría entenderse como una ventana abierta para ataques de man-in-the-middle, lo cierto es que es posible eliminar el riesgo de este tipo de ataques al utilizar un certificado autofirmado siguiendo un procedimiento relativamente sencillo.

Lo importante es comprender una diferencia fundamental en la forma en que funciona un certificado autofirmado con relación a uno comprado de una autoridad certificadora. Con ambos tipos, la comunicación entre el cliente y el servidor está encriptada, pero la manera en que validan la autenticidad del receptor del mensaje es fundamentalmente distinta.

¿Cómo se comprueba la identidad del sitio en un ceritificado autofirmado?

En un certificado adquirido de una autoridad de certificación, es ésta es la que valida la identidad del servidor, ya que aplica su firma sobre la petición de certificación que luego el navegador puede comprobar verificando su propia base de datos de certificados raíz.

De este modo, el navegador confía en que un sitio es quien dice ser ya que el certificado que éste te ofrece tiene una firma que corresponde con la firma del certificado raíz que ha verificado su identidad.

827d6a0701

En un certificado autofirmado no existe un tercero que valide el certificado, y por eso al intentar conectarnos por primera vez nos muestra la advertencia de “Esta conexión no es de confianza”.

Sin embargo la validación de un tercero no es estrictamente necesaria para aseverar la seguridad de la conexión, ya que se puede reemplazar por una cadena de confianza de persona a persona — en lugar de delegar la verificación de la identidad a un tercero, tienes que confiar en que la persona que te entrega el certificado pueda validar que corresponde al sitio del que dice ser.

Es decir, quien te entrega el certificado (o tú mismo, si fuiste quien lo creó) es quien te afirma que es un certificado válido para conectarse a un sitio.

Para poder asegurar que tu conexión con el sitio va a estar protegida, el paso final es instalar el certificado autofirmado en tu navegador, de modo que incluso en el primer intento de conexión, pueda verificar que el sitio al que supuestamente te estás conectando, corresponda realmente al sitio que te quieres conectar (es decir, eliminar el factor MITM).

Instalar el certificado autofirmado

En primer lugar, debes distribuír el certificado a las personas que se van a conectar al sitio en cuestión. Obviamente debes preferir un método seguro de hacerlo, ya sea personalmente o a través de algún servicio para compartir archivos. Si lo vas a hacer por correo electrónico, lo ideal sería que fuera firmado con PGP.

Si usas Firefox, debes ingresar a Preferencias → Avanzado → Certificados. Clickea el botón de “Certificados” y luego “Importar”.

configurar-certificado-ssl-autofirmado-firefox

Al seleccionar el archivo del certificado, se mostrará un diálogo que te preguntará si deseas confiar en el certificado. Debes seleccionar la opción de Confiar en esta CA para identificar sitios web y finalmente Aceptar.

Con Chrome, el proceso sigue los mismos pasos.

Con esto el certificado ya queda instalado y te puedes conectar seguramente al sitio web.

Tags: , , ,

Related posts

The post Cómo usar un certificado SSL autofirmado de forma segura appeared first on yukei.net.

by Felipe Lavín Z. at July 16, 2014 11:15 PM

Adseok

Google+ elimina la restricción del nombre real y ya se pueden usar seudónimos y nicks

Artículo Google+ elimina la restricción del nombre real y ya se pueden usar seudónimos y nicks publicado en Adseok SEO.

google-plus-logoGoogle ha anunciado por fin que elimina la obligación de utilizar el nombre real en Google+. Cuando Google + se lanzó hace tres años solo se podía utilizar el nombre real si querías utilizar la herramienta. Esto impedía a muchos webmasters crear una cuenta con el nombre de su web.

Parece que ahora ha decidido eliminar esta restricción disculpándose y agradeciendo a la comunidad que venía reclamando esta opción desde hace mucho tiempo. De momento algunas cuentas bloqueadas siguen bloqueadas. También ha establecido el límite de cambio de nombre cada 90 días.

Está por ver en qué afecta esto el funcionamiento de la red social, pero la eliminación de las fotos de autor en los resultados han podido acelerar este proceso.

No sabemos las razones exactas de este cambio de parecer, pero sabemos que la mayoría de la gente prefiere no usar su nombre propio y esto estaba creando un serio problema con los comentarios de YouTube que quizá se pueda solucionar con esta medida.

Artículo Google+ elimina la restricción del nombre real y ya se pueden usar seudónimos y nicks publicado en Adseok SEO.

by Adseok at July 16, 2014 03:09 PM

Google avisará al usuario cuando una web con flash no funcione en su dispositivo

Artículo Google avisará al usuario cuando una web con flash no funcione en su dispositivo publicado en Adseok SEO.

Puede ser frustrante para un usuario llegar a una página y que no funcione porque su dispositivo, en general el móvil, no tiene disponible dicha tecnología. Esto es habitual con Flash, que no funciona en iOS ni Android 4.1 o superior.

flash-serp-noteGoogle ha decidido que a partir de ahora mostrará al usuario una advertencia indicando que dicha página no funcionará en su dispositivo. Podemos ver un ejemplo en la imagen: “Uses Flash. May not work on your device. Try anyway | Learn more.”

Como alternativa a Flash, Google recomienda usar HTML5 y actualziar tus webs porque esta tecnología funciona en todo tipo de sistemas y dispositivos.

Además sugiere dos nuevos recursos para construir webs en HTML5:

  • Web Fundamentals: una fuente organizada para las mejores prácticas modernas
  • Web Starter Kit:un framework que soporta las mejores prácticas básicas de la web listo para usar

Web Fundamentals incluye las mejores prácticas para el diseño responsive, como no bloquear los css, js o imágenes con el robots.txt u otro sistema, ya que Google es capaz de acceder a estos recursos externos e interpretar qué versión de la web se está usando.

Para saber si Google está penalizando la versión móvil de tu web puedes utilizar Fetch and render en Webmaster Tools y ver cómo Google interpreta tu web.

Artículo Google avisará al usuario cuando una web con flash no funcione en su dispositivo publicado en Adseok SEO.

by Adseok at July 16, 2014 07:20 AM

July 15, 2014

Maestros del Web (Editorial)

Cómo convertir el tráfico de tu sitio web en ventas. Cinco estrategias

Las estrategias de mercado de sitios web basadas en visitantes únicos son el cáncer de este bonito mundo de Internet, una enfermedad que va en contra del espíritu de la creación de contenido de calidad y de estrategias sólidas que apunten a algo más que atraer visitas y números.

Después de todo Internet nos ha demostrado que si quieres atraer visitas a tu sitio nada mejor que un par de boobies, pero en realidad creemos que se pueden crear estrategias más inteligentes y sostenibles a largo plazo.

En este post te enseñaremos algunas estrategias para convertir tu tráfico en ventas y así mostrarles a todos esos orgullosos de sus impresionantes cifras de tráfico que quizás a tu sitio no lo visitan tanto pero que sabes hacer cosas para que cada visita tenga un objetivo y se convierta en algo de utilidad para tu negocio.

¿Para qué sirve el tráfico de tu sitio?

El objetivo de una estrategia de content marketing es atraer visitas a un sitio web. Pero piénsalo, si eres el dueño de un centro comercial ¿quieres que se llene de gente que mira las vitrinas y eventualmente compra un helado o que la gente entre a comprar?

Lo que quiero decir es que tener cantidades absurdas de tráfico no se traduce necesariamente en que la estrategia de marketing que estás desarrollando se exitosa: lo será (y podrás presumir) en el momento en que ese tráfico se transforme en conversiones, así como toda esta gente en el centro comercial significará algo cuando entren a los locales a comprar.

Si los objetivos de conversión no se están cumpliendo puedes tener unas cifras de tráfico impresionantes pero -a menos que vivas estrictamente de la pauta y ni siquiera- todo lo que estás haciendo es perdido: estás perdiendo el tiempo con gente que entra a tu sitio muy seguido pero no hace nada más allá. Si es así seguramente eres el ÚNICO culpable. ¿Cómo arreglarlo?

Vamos a convertir visitas en clientes potenciales

Gracias al growth hacking, un conjunto de estrategias para utilizar la creatividad y ser mucho más ágil para atacar mercados, crecer y convertir sin gastar un montón de dinero en publicidad masiva, cualquier persona puede convertir la inversión que hace en atraer tráfico en ventas directas.

Si sigues estas 5 técnicas de growth hacking tu vida puede ser mucho mejor, dejarás de presumir de todo ese tráfico que tiene tu sitio y al fin te servirá para algo: para aumentar tu tasa de conversión.

1. Estudia y conoce a tus clientes

Todo estudio de mercado tiene una sola palabra de fondo: NECESIDAD.

Ya que toda estrategia de marketing online debe estar precedida por un proceso de planeación, es importante targetizar a los usuarios a los que se quiere llegar con un estudio de mercado. Esto significa: saber quiénes llegan a tu sitio y por qué motivos, qué buscan, qué quieren, qué necesitan o que podrían necesitar o … qué quieres que necesiten de ti ;) .

Cuánto más tiempo dediques a estudiar a tu público objetivo tendrás mucho más datos y pistas para atacar el mercado directo a las necesidades. Estos filtros en el estudio de mercado para tener visitantes de calidad pueden ser aplicados al hacer la investigación de palabras clave.

Como ya sabemos es importante optimizar nuestro contenido hacia keywords relevantes con una buena cantidad de búsquedas, sin embargo debemos conseguir palabras más específicas orientadas al público que sabemos que está listo para convertir en nuestro sitio web. Por ejemplo si tenemos un sitio web de venta de lentes de sol deberíamos apuntar a keywords como “dónde comprar lentes ray ban”, “lentes de sol ray ban a domicilio”, etc.

Herramientas útiles para estudios de mercado:

KeywordTool.io para conocer el lenguaje que utilizan los usuarios en el buscador.

Busszumo ayuda a encontrar los temas más aceptados en redes sociales acerca de un cierto tema, autor o sitio web.

2. El landing page como bitácora de lo que quieres que tus clientes hagan

Es importante optimizar el sitio web para que cada una de las páginas a las que llegan tus usuarios tenga un objetivo, ya que una buena cantidad de ellos llegarán a las páginas internas y no solamente al inicio. Las páginas de aterrizaje (landing pages) son la mejor forma de personalizar por completo y brindarles la mejor experiencia.

En las campañas de anuncios tenemos el control total para asignar una página por campaña si así lo deseamos, esto nos da la capacidad de moldear cada página según el tráfico objetivo.

Se debe tener en cuenta que no todas las páginas deben tener como objetivo directo vender algo. Está bien que algunas cumplan con la función de captar posibles compradores como por ejemplo a través de listas de mailing, así indirectamente estaríamos capturando un cliente potencial al que podemos enviar una campaña dirigida a una página de aterrizaje optimizada para vender nuestro producto.

Algunos tips para tener en cuenta a la hora de optimizar las páginas de aterrizaje:

  • Captar la atención del usuario con un encabezado claro y conciso.
  • No olvidar el objetivo, repetir los botones de llamado a la acción y los formularios de captación de emails.
  • Todo entra por los ojos. Las gráficas, imágenes y fotografías de apoyo importan más de lo que crees.
  • Mantener la página muy liviana, la regla acá es que menos es más, en lo que a elementos visuales se refiere.
  • No olvidar que las páginas de destino tengan opciones para compartir en sitios sociales.

Unbounce ofrece un servicio de construcción de landing pages para aquellos que no tengan conocimientos en programación o diseño. Tiene un editor con plantillas, ejemplos y la posibilidad de probar diferentes diseños.

3. No hacer tests A/B, hacer tests A/B/C y hasta D

Los tests A/B consisten en probar múltiples variaciones de un mismo diseño y a través de estas pruebas medir y analizar los resultados para constatar qué versión trae mejores conversiones.

Captura de pantalla 2014-07-15 a la(s) 16.05.47

Los beneficios de probar los diseños de las páginas de un sitio web son inmensos, el análisis de los datos obtenidos por medio de los tests a/b permiten conocer de una manera más profunda a los usuarios y posibles clientes potenciales. El hack consiste en ir más allá del a/b y probar más de dos versiones, hay que tener en mente que siempre existe algo que puede mejorar, como si estuvieras siempre en beta. Hay que probar una y otra vez para combinar lo mejor de cada uno de los diseños y obtener cada vez un mejor resultado.

Optimizely es una herramienta que te permite hacer tests sin necesidad de tocar una línea de código y con la posibilidad de medir todo lo que pasa en las páginas de aterrizaje.

4. En Internet tienes que ser el más rápido, optimiza la velocidad de carga de tu sitio

La velocidad de carga de un sitio web es un punto que tiene incidencia en factores como el SEO, la experiencia de usuario y por supuesto el ratio de conversión. Por cada segundo que tarda un sitio web en cargar hay una disminución del 7% en la tasa de conversión. La recomendación por parte de Google es que un sitio web cargue con la misma velocidad que se tarda el buscador en dar los resultados. Es un gran reto, pero si lo logras representa una enorme ventaja para tu sitio, por esta razón es una característica de tu sitio que debes atacar ya mismo.

La velocidad de carga depende de varios factores: el peso de las imágenes, la caché, el servidor, etc. Google PageSpeed es una herramienta gratuita de Google que ayuda a determinar factores a atacar para disminuir el tiempo de carga.

5. Busca a tus clientes felices para que cuenten al mundo lo mágico que es tu producto

Apoyar el contenido de calidad con casos de estudio o testimonios (dependiendo del producto o servicio) puede ser el arma principal para conseguir clientes potenciales, si se utilizan en el camino correcto. La razón principal para hacerlo es ayudar al usuario a ganar credibilidad en tu producto. Los testimonios son una oportunidad increíble para demostrar la calidad del producto o servicio.

El principal consejo es no crear testimonios falsos, no tenemos que explicarte por qué ¿cierto? Si tu producto es verdaderamente bueno seguro encontrarás muchas personas dispuestas a hablar de sus bondades, para mentir sobre las maravillas que hace lo que vendes ya tenemos las televentas.

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="480" src="http://www.youtube.com/embed/AHfDd7HCREg" width="640"></iframe>
Es bueno conocer a los clientes actuales para tener su feedback y usar su testimonio, no hay que tener miedo de contactar a las personas que compran los productos o servicios y dedicarles 30 minutos en un café o, si las distancias lo impiden una conversación por skype, valerte de un motivador gratuito como un PDF con información especial del uso de los productos, un mes del servicio o algo que tenga valor para el cliente.

Al publicar casos de estudio también se muestra el éxito del servicio de una manera directa. Es bueno que estén apoyados por métricas reales de los objetivos logrados y la satisfacción del cliente.

Hay muchos caminos para convertir visitantes en clientes potenciales. Sin importar el tipo de servicio o producto que se tenga la clave está medir, analizar y aprender de la interacción de los usuarios con el sitio web y así brindar una excelente experiencia de usuario. Las ventas y las conversiones llegarán por añadidura, lo más importante es hacer todo este trabajo bien.

 


Alejandro González para Maestros del Web.
Agrega tu comentario | Enlace permanente al artículo


Síguenos en: @maestros | Fan page

The post Cómo convertir el tráfico de tu sitio web en ventas. Cinco estrategias appeared first on Maestros del Web.

by Alejandro González at July 15, 2014 07:22 PM

Variable not found

Novedades de SignalR 2.1 (y III): progreso de acciones

image[2]La revisión 2.1 de SignalR ha incluido otra característica que puede ser interesante en determinados escenarios: la posibilidad de notificar al cliente del progreso de la ejecución de una acción invocada en el hub.

Aunque en los métodos que normalmente implementamos no tiene demasiada utilidad, sí puede ayudar a mejorar la interacción y experiencia de usuario cuando se trate de ejecutar métodos costosos como el siguiente:
public class GodsOfTheForest: Hub
{
[...]
public async Task<int> GetTheAnswerToLifeTheUniverseAndEverything()
{
for (var i = 0; i < 10; i++)
{
await Task.Delay(1000);
// Do something very important here
  }
return 42;
}
}
Hasta ahora, si desde el cliente llamábamos a este método del hub, sólo podíamos tomar el control cuando la llamaba finalizaba, bien obteniendo el resultado si todo había ido bien, o bien capturando el error producido. Por ejemplo, en Javascript lo conseguíamos con un código como el siguiente:
proxy.server.getTheAnswerToLifeTheUniverseAndEverything()
.done(function (result) {
console.log("The answer is: " + result);
})
.fail(function(err) {
console.log("Oops, something went wrong: " + err.message);
});

Notificación de progreso en SignalR 2.1

Para notificar el progreso de la ejecución en un método del hub, a partir de SignalR 2.1 tenemos que hacer básicamente dos cosas:
  • En primer lugar, añadir al método del hub un parámetro de entrada adicional de tipo IProgress<T>, que obligatoriamente debe ser el último del método. T es el tipo de dato que vayamos a utilizar para notificar el progreso al cliente; por ejemplo, si vamos a notificar un porcentaje, podríamos usar Progress<int>.
  • En segundo lugar, en el punto del código desde donde queremos realizar la notificación, invocar al método Report() del parámetro anterior suministrándole el valor de progreso deseado.
Pero seguro que queda más claro si lo vemos con un poco de código basándonos en el ejemplo anterior:
public async Task<int> GetTheAnswerToLifeTheUniverseAndEverything(
IProgress<int> progress)
{
for (var i = 1; i <= 100; i++)
{
await Task.Delay(1000);
progress.Report(i);
}
return 42;
}
De esta forma tan simple estaremos enviando al cliente el progreso de la operación :-) Por supuesto, podríamos enviar al cliente notificaciones de cualquier tipo, como en el siguiente ejemplo, donde usamos IProgress<string> para poder notificar con mensajes de texto:
public async Task<int> GetTheAnswerToLifeTheUniverseAndEverything(
IProgress<string> progress)
{
progress.Report("Just starting...");
await Task.Delay(1000);
progress.Report("Working hard...");
await Task.Delay(1000);
progress.Report("Almost done...");
await Task.Delay(1000);
progress.Report("One second to finish...");
await Task.Delay(1000);
progress.Report("Finished");
return 42;
}

Consumo desde clientes del hub

El consumo de los datos de progreso sería bastante simple desde nuestro cliente Javascript, simplemente usar este método progress() para especificar la función callback que recibirá los datos de progreso:
proxy.server.getTheAnswerToLifeTheUniverseAndEverything()
.progress(function (value) {
log("Progress: " + value + "%");
})
.done(function (result) {
log("The answer is: " + result);
});
Ah, y un detalle muy importante a este respecto: el uso de esta característica requiere la versión 1.7 o superior de jQuery, más que nada porque en el objeto Deferred que retornan las llamadas a las funciones del hub antes no existía el método progress() que estamos usando para recibir las notificaciones de progreso.

Desde clientes .NET es igualmente sencillo. Se han añadido sobrecargas al método Invoke() de forma que podemos indicar el código a ejecutar al recibir el progreso de la operación. El siguiente código muestra una llamada a un método que retorna un entero y cómo gestionar las notificaciones de progreso que nos llegan también en forma de número entero:
int result = await proxy.Invoke<int, int>(
"GetTheAnswerToLifeTheUniverseAndEverything",
(int progress) =>
Debug.WriteLine("Progress: " + progress + "%")
);
El primer parámetro genérico del método Invoke()es el tipo de datos que retornará la llamada al hub, como ha sido siempre hasta ahora, mientras que el segundo es el utilizado para notificar el progreso. Así, si los mensajes de progreso nos llegan en forma de cadena de caracteres, deberíamos usar:
int result = await proxy.Invoke<int, string>(
"GetTheAnswerToLifeTheUniverseAndEverything",
(string progress) => Debug.WriteLine(progress)
);
Bueno, pues con este post podemos dar por cerrada la serie sobre las novedades de SignalR 2.1. Hay algunas más, pero creo que no son tan interesantes como las que hemos ido viendo; si tenéis interés en conocerlas, podéis acudir al repositorio de Github de SignalR.

Publicado en Variable not found.

by José M. Aguilar (noreply@blogger.com) at July 15, 2014 03:18 PM

Adseok

Filtrada la versión 5 de la Quality Rating Guide de Google

Artículo Filtrada la versión 5 de la Quality Rating Guide de Google publicado en Adseok SEO.

google-quality-rating-guidelinesPeriódicamente se filtra la última versión de la guía de calidad (versión 1.0 publicada por Google en 2012) de contenido de Google, y en esta ocasión se puede ver y descargar la versión 5 de varios sitios. De momento está completa en Scribd y aquí un buen resumen de la guía.

La guía pone el énfasis en tres puntos que se pueden resumir con el acrónimo EAT: expertise, authoritativeness y trustworthiness. Nada rompedor en este punto.

Esta guía se usa internamente en Google para clasificar y poner nota al contenido. Google contrata gente mediante empresas externas que se encarga de valorar el contenido. El resultado de los clasificadores no se usa para realizar los rankings, sino para determinar la calidad de éstos. Aquí una entrevista con uno de ellos.

Artículo Filtrada la versión 5 de la Quality Rating Guide de Google publicado en Adseok SEO.

by Adseok at July 15, 2014 07:26 AM

July 14, 2014

Variable not found

Enlaces interesantes 166

Enlaces interesantesAhí van los enlaces recopilados durante la semana pasada, espero que os resulten interesantes ;-)

.Net

ASP.NET

Conceptos/Patrones/Buenas prácticas

Data access

Html/Css/Javascript

Visual Studio/Complementos/Herramientas

Otros

Publicado en Variable not found

by José M. Aguilar (noreply@blogger.com) at July 14, 2014 11:45 AM

July 11, 2014

Adseok

Technorati se despide como herramienta para blogs

Artículo Technorati se despide como herramienta para blogs publicado en Adseok SEO.

Hace poco más de un mes Technorati anunciaba que tomaba un nuevo rumbo, alejándose de los blogs para centrarse en la publicidad y en la publicación de contenidos.

Technorati

Technorati fue en su momento la fuente más importante para la búsqueda y descubrimiento de blogs, así como una herramienta seo con su puntuación de autoridad, sus rankings por categorías y lugares y su proceso de autentificación de los blogs. El Technorati Authority era un símbolo de status, como el PageRank, y todo el mundo se esforzaba por mejorarlo.

Al crear una web nueva, de la misma forma que ahora se crea una cuenta de Twitter, otra de Google Webmasters Tools, y quizá otra de Facebook, se creaba una cuenta en Technorati, se autentificaba y se empezaba la investigación.

Recuerdo con una sensación agradable aquel tiempo pasado en Technorati, los primeros tiempos todavía en esto del SEO y que fue muriendo por no ser capaz de cubrir la demanda, por lo que no quería dejar pasar la oportunidad de comentarlo en el blog.

Artículo Technorati se despide como herramienta para blogs publicado en Adseok SEO.

by Adseok at July 11, 2014 08:07 AM

Programania

Adaptación al medio: evolución y mutación

A menudo me gusta pensar en mi equipo como un organismo vivo multicelular que evoluciona y se adapta al entorno cambiante que le rodea. Tiene que ver con que soy un flipao y un pedante… :-P Sin embargo, esa adaptación creo que es el resultado de dos dinámicas que a veces pueden parecen contradictorias:

  • evolución: intentamos hacer retrospectivas basadas en datos (horas gastadas, tecnologías empleadas, bugs, etc.), de ahí intentamos entender en profundidad cuáles son las raíces reales de nuestros problemas, los priorizamos e intentamos tomar acciones para eliminar ese problema. Lo máxima aquí es: “si tomas acciones alrededor de un problema no prioritario o intentas atacar al problema sin saber cuál es su raíz, estás perdiendo tiempo y dinero”.
  • mutación: probamos cosas nuevas por instinto o por jugar. Aquí la máxima es: “conduct frequent experiments” pero asegurándote de que no penalizas económicamente al producto/cliente/empresa con el que estás trabajando. Yo suelo decirlo mucho: en un equipo no puede salir en una retrospectiva “hagamos integración continua” si ninguno de sus miembros a oído hablar jamás de ello. Rachel Davies en el  Agile Coaching afirma: “Actions are not always about fixing a problem: you need to understand a problem before you can fix it. Team may need to start with actions to explore the problem and gather data.” Sin embargo, aquí también se está teniendo un carácter totalmente reactivo: tenemos un marrón, investiguemos ahora qué hay para solucionar este marrón. Creo que eso es necesario, pero no suficiente.

Creo que todo lo que escribo es de sentido común: céntrate en solucionar los problemas reales que tienes y, también, prueba cosas nuevas mientras no cueste mucho dinero a nadie. Sin embargo, lo que suele suceder en los equipos es que se dividen en “evolucionadores” o “mutadores” cada uno con su zona de confort:

  • los “evolucionadores” se excusan para no probar nada nuevo y no aprender, en que lo que se propone no corresponde a la raíz de ningún problema. Tiene a gala que ellos son ingenieros que ponen el dedo en la picota.
  • los “mutadores” quieren jugar, y tienden a dejarse deslumbrar ante el brillo de lo nuevo sin tener en cuenta lo que puede suponer al equipo o al producto ni justificarlo económicamente. Tiene a gala que ellos son tecnólogos capaces de hincarle el diente a cualquier cosa que salga nueva que, como es nueva, es mejor (mega-sesgo).

Creo que aquí hay que trabajar en la identidad individual de las personas y que todo el mundo se vea a si mismo como evolucionador y mutador (sí, estas dos palabras no existen) porque ambas fuerzas son necesarias para adaptar y evolucionar al equipo.

 

by Luis Artola at July 11, 2014 06:39 AM

July 03, 2014

Maestros del Web (Editorial)

Qué es un IPO y cómo llegan las empresas a la bolsa

Desde la sonada llegada de Facebook al mercado de valores en el 2012, muchas redes sociales y aplicaciones móviles y web han empezado a hacer lo mismo. Aunque el comienzo para la empresa de  Zuckerberg no fue el esperado, dos años después ya hay buenos resultados que hacen creer, tanto a los inversionistas como a los empresarios de Internet, que poner acciones a la venta es una gran idea para poder crecer.

Por ejemplo la semana pasada GoPro, la compañía que desde 2002 empezó a buscar financiación en fondos de capital de riesgo, hizo  su oferta inicial de acciones (IPO) con un éxito rotundo.

¿Cómo funcionan estas ofertas y cuáles empresas del mundo tecnológico las han hecho? ¿Cómo comprar estas acciones acciones? ¿Vale la pena?

¿Qué es IPO?

Los IPOs (initial public offer) son una oferta pública en en la que se lanzan acciones de una compañía privada por primera vez al público en general. Los IPOs normalmente son hechos por empresas jóvenes en busca de capital para expandir sus planes de negocio. Al adquirir una acción de una empresa te conviertes en dueño de una pequeña parte de esta, con el beneficio y riesgo que representa.

¿Cuáles son los resultados del IPO de GoPro?

El pasado jueves la empresa fabricante de cámaras lanzó sus acciones a un precio final de USD 24 por acción. Pasada apenas media hora de negociación las acciones alcanzaban un precio superior a los USD 31 lo que representó una valorización del 30%. Para el día de hoy (3 de julio) la acción cotizaba alrededor de los USD 44 lo que representa una valorización cercana al 80% desde su lanzamiento.

El IPO permitió que la empresa consiguiera capital por USD 427 millones con el ofrecimiento de 17,8 millones de acciones que alcanzaron una demanda de 20 veces al volumen de la oferta.

Con estos recursos GoPro planea expandirse más allá del hardware llegando a múltiples plataformas como la Xbox Live.

Twitter

La oferta de acciones de la red social tuvo una importante acogida en su primer día de cotización en noviembre del año pasado. El lanzamiento se hizo por los USD 26 por acción y un total de 70 millones de acciones. Al cierre de la primer sesión alcanzó los USD 44,9 lo que representó una valorización del 72,69%. La oferta le permitió a Twitter alcanzar recursos por USD 2.100 millones. Hoy en día la acción cotiza alrededor de los USD 41.

Screenshot 2014-07-02 at 15.49.37 - Edited

Anuncio a la entrada de la Bolsa de Nueva York el día del IPO de Twitter.

 

Facebook

En medio de muchas dudas acerca de la capacidad de rentabilizar el modelo de negocio de la red social a través de dispositivos móviles, las acciones de Facebook tuvieron una débil acogida en sus primeras jornadas en la bolsa. De hecho Facebook tardó cerca de un año en recuperar su valor inicial en el momento del lanzamiento.

Su precio inicial fue de USD 38 por acción cerrando la primer sesión apenas 38 centavos por encima, tres días después las acciones ya registraban una pérdida superior al 20%. Hoy en día la acción de Facebook se encuentra en USD 67, esto representa una valorización del 76% desde su debut en la bolsa.

 

facebook

Google

El IPO de Google fue en el año 2004 con una valoración de la compañía de USD 23.000 millones, equivalente al 25% de la valoración de Facebook cuando realizó su IPO. De hecho, el precio inicial durante la oferta para ser un accionista pionero en Google fue de USD 85 por acción en agosto hace 10 años.

En su primera sesión la acción cerró en USD 100,34 lo que significó una apreciación de la inversión del 18%. Hoy en día la acción de Google tiene un precio equivalente a USD 1.150, es decir, si hubiéramos invertido en Google durante su lanzamiento nuestra inversión habría generado una rentabilidad de algo más de 1.200%.

¿Cómo puedo adquirir acciones?

Primero que todo es necesario acudir a una entidad intermediaria que nos represente en el mercado de valores. Por esto es muy importante hacer un estudio de las alternativas y acudir a alguna sociedad intermediaria (conocidas en algunos países como Firmas Comisionistas, Casas de Bolsa o Agentes de Bolsa) y elegir la que más nos convenga de acuerdo a nuestros intereses.

Ahora bien, la gran mayoría de países latinoamericanos tienen mecanismos que permiten hacer inversiones en acciones en EEUU a través de los mercados locales. En Colombia se conoce como Mercado Global Colombiano, en México como Sistema Internacional de Cotizaciones, en Argentina se hace a través de los Certificados de Depósito Argentinos, en Chile por el Mercado de Valores Extranjeros.

Gracias a estos mecanismos no se hace necesario acudir a entidades extranjeras y es posible ahorrar trámites y tiempo para poder comprar acciones de EEUU desde su país y en la moneda local.

Estos instrumentos replican la cotización en dólares de la empresa en EEUU en la moneda local y a través de los mercados de valores de cada país permiten el acceso a todas las personas desde montos mínimos. Empresas como Microsoft, Apple, Facebook o Twitter están más cerca de lo que parece a través de este mecanismo.

Ahora bien, también existen intermediarios internacionales que permiten hacer la adquisición de los títulos a través de una empresa que te da acceso directo y en dólares a los instrumentos de inversión en EEUU.

¿Qué problemas pueden representar los intermediarios internacionales?

  • Generalmente no ofrecen asesoría personalizada, mientras que las empresas locales seguramente lo harán.
  • Algunas de estas empresas exigen residencia o ciudadanía en EEUU y un trámite que puede ser dispendioso para hacer efectiva la inversión o la liquidación de esta a nuestras cuentas.
  • Es una buena alternativa para personas con conocimientos avanzados en inversión.

¿Vale la pena comprar acciones de empresas tecnológicas?

Sin duda ingresar en un IPO es una muy buena alternativa para gestionar nuestros ahorros aunque no siempre los resultados sean inmediatos, como vimos en el caso de Facebook.

Muchas startups planean realizar sus ofertas públicas próximamente para elevar su capital y financiar sus planes de expansión. Entre ellas AirBnb, Dropbox, Pinterest, SnapChat, Evernote y Jawbone. Si bien todas estas empresas tienen un éxito rotundo por su innovación y modelo de negocio, la evolución de la acción dependerá en gran medida en la forma en que pongan en función del desempeño financiero sus actividades corporativas.


Sergio Zafra para Maestros del Web.
Agrega tu comentario | Enlace permanente al artículo


Síguenos en: @maestros | Fan page

The post Qué es un IPO y cómo llegan las empresas a la bolsa appeared first on Maestros del Web.

by Sergio Zafra at July 03, 2014 03:06 PM