October 28, 2014

Maestros del Web (Editorial)

Haz que Google ame tu contenido con un poco de markup

Hace dos años migré mi blog apuntodenieve a WordPress, pues entendí que quería hacer mucho más que escribir unas recetas con unas fotos bonitas. Antes usaba Posterous, una plataforma básica que de hecho se apagó muy poco después de que hice mi migración, pues la adquirió Twitter. En ese tiempo no me interesaba mucho la forma como escribía, ni mucho menos la cantidad de personas que las leían, creo que ni siquiera haya visto alguna vez cuántas visitas tuve por esa época.

Al hacer el cambio de plataforma compré un dominio, un hosting y un theme que pronto quise empezar a personalizar. Fue en ese momento en el que entendí que debía aprender las bases del diseño y desarrollo web para encargarme yo misma de todo el proyecto: si quieres hacer las cosas bien, hazlas tu mismo.

Optimización del contenido

Quien produce el contenido es quien debería encargarse de su optimización en motores de búsqueda y de enriquecerlo antes de ser compartido en redes sociales. Cuando esto no sucede no hay una estrategia clara, pues hay huecos en el flujo de la comunicación.

Un ejemplo claro es el del Community Manager que debe publicar un artículo escrito por otra persona, en el mejor de los casos leerá el artículo y la publicación será coherente con el contenido, pero es probable que esto no suceda. Pasa lo mismo con el analista de SEO que crea meta titles, meta descriptions y keywords que hacen promesas que posiblemente el artículo no puede cumplir.

Evidentemente es difícil que una sola persona pueda hacer todo ese trabajo, sobre todo dentro de una empresa o en proyectos grandes, en los que es necesaria la colaboración de varias personas con diferentes conocimientos y cuando el tiempo es oro. Además uno no debería ser tan ermitaño. Sin embargo ese es el reto que yo me he propuesto con apuntodenieve, Carreta de recetas y ensumesa.

Recientemente he estado escribiendo sobre herramientas de desarrolladores que podemos usar los bloggers para que el contenido que producimos pueda compartirse en redes sociales, no solo de la manera adecuada, sino de forma enriquecida. Es por eso que quiero hacer una invitación a los creadores de contenido a que aprendamos sobre las bases del diseño y desarrollo web, para involucrarnos un poco más con el código de nuestro website, y que el esfuerzo de lo que escribimos se vea reflejado en texto y en HTML.

¿Qué es Schema.org?

Schema.org es una iniciativa de motores de búsqueda como Google, Yahoo y Bing basada en la idea de que podemos convertir nuestro contenido en datos comprensibles para los buscadores, y agregarles propiedades y atributos adicionales en función de que estos puedan ofrecer resultados de búsqueda más relevantes y enriquecidos, útiles para los usuarios de Internet.

Si ya leíste sobre los rich pins de Pinterest, Twitter Cards y Open Graph meta tags vas a encontrar muy familiar este proceso, pues schema.org funciona de la misma forma.

¿Por qué usar schema.org?

  1. Porque como creador de contenido, o webmaster, puedes aprender y emplear un markup estándar, que comprenden y soportan los motores de búsqueda más grandes.
  2. Porque los buscadores pueden obtener información enriquecida sobre sobre el contenido que estás produciendo para optimizar los resultados de búsqueda.
  3. Porque los usuarios necesitan encontrar contenidos relevantes, coherentes con las búsquedas que están haciendo, lo que se traduce en una mejor experiencia para ellos.

Veamos cómo se puede enriquecer un contenido, añadiendo algo del vocabulario de schema.org al HTML.

Itemscope, itemtype y itemprop: la importancia de las jerarquías

Hace unos meses le contaba a @freddier que, aunque soy comunicadora social, me gusta mucho el diseño y el desarrollo web, a lo que él me respondió con una pregunta retadora: ¿cuál es la diferencia entre un article y un section? En ese momento no le pude responder, pero hoy le diría que es una cuestión de jerarquía: un section puede agrupar varios articles. Pero más importante aún, le diría que en las jerarquías está la razón de ser de la comunicación entre quien produce el contenido y quien lo optimiza, pues conocer el contenido a profundidad nos permite organizarlo y etiquetarlo de la manera adecuada.

Analicemos el HTML de una receta:

code1_4

Ahora, hasta aquí le hemos dicho a un navegador que lo que tenemos es un título, una imagen, un párrafo, dos subtítulos y dos listas. Lo anterior podría ser desde una receta hasta un inventario de máquinas de coser. Por esta razón, lo primero que haremos será indicar que todo ese contenido es una receta.

El elemento itemscope dirá que todo lo que hay en el contenedor es sobre un solo tema. El atributo itemtype especificará el tipo de contenido que hay en el contenedor.

code2_4

Lo siguiente que debemos hacer es especificar aún más el resto de contenido que hay en el contenedor, así que añadiremos más propiedades con el atributo itemprop para señalar el nombre de la receta, la descripción, los ingredientes y la preparación.
code3_6

Con este markup los navegadores sabrán qué es cada fragmento de nuestro contenido. Claramente existen diferentes propiedades específicas para cada tipo de contenido que estás produciendo. Puedes encontrar todos los tipos y propiedades en la lista completa de schema.org para definir cuáles se adaptan más a tu website, teniendo en cuenta la jerarquía de la sintaxis, es decir que por ejemplo no debes añadir la propiedad “ingredients” sin antes haber especificado que el tipo de contenido es una receta.

Otras propiedades para las recetas:

  • recipeYield: indica para cuántas personas es la receta.
  • cookTime y prepTime: para los tiempos de cocción y preparación.
  • cookingMethod: que señala las técnicas como salteado, al vapor, al horno.
  • recipeCategory: para especificar el tipo de plato, como entrada, plato fuerte, postre.
  • Otras propiedades específicas, para diferentes tipos de contenidos
  • address, menu, servesCuisine y openingHours: para un restaurante.
  • brand, faxNumber, telephone y logo: para una empresa u organización.
  • color, model, offers y review: para un producto.
  • Asimismo existen propiedades generales que pueden emplearse en cualquier tipo de contenido como:
  • author: para indicar el autor del contenido.
  • video y audio: que señala el tipo de contenido que está embebido.
  • email: para dejar un correo electrónico.

Consejos para implementar el markup de schema.org

  • Si eres el creador del contenido solo debes revisar las propiedades disponibles de schema.org e implementarlas, o sugerirlas a la persona que lo va a hacer. Si eres frontend o editor tómate el tiempo de entender el contenido que estás etiquetando para enriquecerlo de la manera adecuada.
  • More is better, except for hidden text”. Este consejo está escrito tal cual en la página de schema.org, y lo que quiere decir es que entre más markup puedas añadir a tu contenido, mejor. Sin embargo, es recomendable añadir estos micro datos únicamente al contenido que pueden ver los usuarios y no a otros elementos.
  • Implementa el markup y verifícalo con Structured Data Testing Tool, una herramienta de Google Webmaster Tools que revisa y valida los fragmentos enriquecidos que has añadido a tu sitio web.

by maldeadora at October 28, 2014 08:42 PM

Variable not found

¡A Seattle! (episode IV)



Este año, por cuarta vez consecutiva, tendré el placer de asistir dentro de unos días al MVP Global Summit, un macro evento anual organizado por Microsoft en el que reúne a todas las personas reconocidas como Most Value Professional para compartir novedades e intercambiar ideas y planes sobre las tecnologías con las que trabajamos a diario y, mejor aún, con las que trabajaremos dentro de algún tiempo.

Podéis imaginar lo que puede salir de una coctelera en la que introducimos algunos miles de personas procedentes de todos los rincones del mundo, técnicamente excepcionales en muchos casos, y figuras reconocidas y miembros de equipos de producto de Microsoft, compartiendo innumerables sesiones técnicas, debates y encuentros informales organizados durante los días de duración del evento. Una gozada.

Además, creo que este año el evento va resultar especialmente jugoso desde el punto de vista técnico, más que nada por las nuevas tecnologías y herramientas que están empezando a vislumbrarse por el horizonte y que todos ya conocemos :)

Y por supuesto, también es una oportunidad de disfrutar de la compañía de amigos que sólo coincidimos en persona en este tipo de eventos, una o dos veces al año como máximo. Y, por qué no, para seguir conociendo Seattle y sus alrededores, que estas oportunidades hay que aprovecharlas ;)

¡Nos vemos a la vuelta!

by José M. Aguilar (noreply@blogger.com) at October 28, 2014 02:04 PM

Mejoras en bloques try/catch de C# 6

imageSeguimos con la serie donde vamos desgranando las novedades de C# 6, y en esta ocasión vamos a ver algunas mejoras en el uso de bloques try/catch, a las que seguro podremos sacar buen partido.

En este post trataremos dos temas distintos. En primer lugar, comentaremos la introducción del soporte de await en bloques catch/finally, y seguiremos con la nueva capacidad de filtrado de excepciones.

Vamos a ello :-)

Soporte de await en bloques catch/finally

Esta nueva característica cubre una pequeña ausencia presente en las versiones anteriores del lenguaje de la que, sinceramente, no me había dado cuenta hasta la fecha. Resulta que en las versiones de C# anteriores a la 6, no estaba permitido utilizar await para esperar la finalización de una llamada asíncrona en bloques catch y finally. Por tanto, un código como el siguiente lanzaba un error de compilación:

image

Como curiosidad, el motivo de que el uso de await no estuviera soportado en este tipo de bloques en las versiones anteriores del lenguaje era simplemente "porque era muy difícil de implementar" (palabras textuales).

No sé a vosotros, pero a mí incluso me ha sorprendido que no se pudiera hacer antes. Seguro que si no lo he echado en falta es porque no me he encontrado hasta ahora con la necesidad de hacerlo, lo que puede indicar que tampoco es algo habitual (al menos por mi parte, claro) pero bueno, está bien saber que ya podremos usarlo con normalidad.

Filtros de excepciones

Hasta ahora, la granularidad de los bloques catch  de C# es a nivel de tipo de excepción. Es decir, tras un try normalmente encontramos tantos catch como tipos de excepción distintos queremos controlar, indicando así dónde queremos que se gestione la excepción cuando se produzca. Podemos ver un ejemplo del código habitual en el lateral.

Aunque este enfoque es válido en muchas ocasiones, hay otras donde sería interesante poder tener un mayor control a la hora de decidir si queremos que un bloque catch concreto gestione una excepción.

Para ello, C# 6 incorpora los nuevos exception filters, que son condiciones adicionales que podemos añadir a cada cláusula catch de forma que, si no se cumplen, el bloque será ignorado y se seguirá buscando en el resto de catchs si hay alguno que puedan manejar la excepción.

Nota: efectivamente, esto existe en VB.NET desde el principio de los tiempos. Aunque a veces pueda parecer lo contrario, no siempre C# va por delante ;)

La sintaxis de estos bloques es la siguiente:


Como podéis observar, la cosa consiste simplemente en añadir condiciones a las cláusulas catch, de forma que la excepción sólo será tratada en ese bloque si la condición evalúa a cierto. En caso contrario, se continuarán evaluando el resto de catchs hasta encontrar uno capaz de gestionar la excepción. Por ejemplo, en el caso anterior, un una excepción ServerException cuya propiedad HttpCode valga 503 será evaluada por el catch final.

Fijaos que con las versiones de C# anteriores a la 6 no sería tan sencillo solucionar este escenario. Nos veríamos obligados a introducir un único catch para la excepción ServerException y decidir en su interior si debemos tratarla, pero en caso contrario no podremos dejarla fluir para que otros catch posteriores la traten. A lo sumo podríamos relanzarla, pero el resultado tampoco sería el mismo.

Por supuesto, las condiciones pueden contener cualquier tipo de expresión booleana, como en el siguiente ejemplo:



Y aprovechando esta capacidad, es posible hacer uso y abuso de estos filtros para realizar tratamiento lateral de excepciones, es decir, realizar determinadas tareas cuando una excepción se detecta, pero permitiendo que el resto de catchs sean evaluados. Por ejemplo, en el siguiente código se guardan las excepciones ServerException en el log, pero el tratamiento final de la excepción se realizará en el último catch porque el filtro siempre retorna false:



En definitiva, de nuevo estamos ante unas novedades no muy espectaculares, pero sí útiles para cubrir escenarios que con las versiones anteriores de C# no podíamos solucionar de forma tan directa.

Otros posts de la serie sobre C# 6:
Publicado en Variable not found.

by José M. Aguilar (noreply@blogger.com) at October 28, 2014 12:52 PM

October 27, 2014

Maestros del Web (Editorial)

Lo peor y lo … peor de trabajar para una startup

Startup es una de las palabras de moda. Te preguntarás por qué simplemente no le decimos “pequeña empresa” o englobamos esta clase de compañías en esa tradicional categoría de “pequeña y mediana empresa”. Pues porque NO: no son la misma cosa.

¿Qué hace diferente a una startup de cualquier otra clase de naciente empresa? Se me ocurren varias cosas:

  1. Una startup es  siempre una empresa tecnológica, busca desarrollar algún producto para ser masificado en Internet, usa tecnologías, conceptos y herramientas desarrolladas por y para Internet.
  2. Usualmente empiezan con muy poco capital monetario, su principal capital suele ser una idea y algo de ganas de ir adelante con ella. Y algún demente con otro amigo suficientemente loco, con ganas de lanzarse a la aventura.
  3. Es una clase de empresa que avanza rápidamente, sin necesidad de productos acabados, evoluciona de tiempo en tiempo con versiones mejoradas e implementaciones que buscan ofrecer una mejor experiencia cada vez. Como un beta en loop infinito.
  4. No necesitan de grandes instalaciones, mobiliario o equipos: con un computador y una conexión a Internet es posible empezar. Las oficinas estilo Google vendrán después, luego de una gran venta, financiación, mucho trabajo o  consecución de socios estratégicos ;) (o no vendrán nunca, para serte sincera, en todo caso tu peor escenario será el Starbucks más cercano).
  5. Suele implicar la presencia o el trabajo de programadores: personas que sepan algún lenguaje de programación y sus posibilidades para la clase de producto que se desarrolla.
  6. Sus fundadores suelen tener un notable espíritu viajero que les permite intercambiar ideas, planear implementaciones, buscar aliados en los grandes centros de creación de startups del mundo.

Claro, como en todo mundillo, el de las startups también está lleno de habladores, personas que se vuelven “expertas” en participar en incubadoras y mentorías, como esos estudiantes eternos de las universidades a quienes nunca verás con un producto acabado pero sí con un pitch, y mentores que de no ser por esta nueva vocación (la de emprendedor) de seguro tendrían un sitio dedicado a ofrecer consejos de crecimiento personal al mejor estilo Desiderata.

Pero no seamos tan rudos con este mundo startup que tantas cosas magníficas nos ha regalado: nuevos esquemas laborales, nuevas maneras de entender el trabajo, productos que han cambiado al mundo. Hablemos de lo mejor y lo peor de trabajar en una de estas empresas, empecemos, por supuesto, por lo peor:

Lo peor de lo peor de trabajar para una startup

  • Mientras la empresa se financia podrás ganar muy poco o incluso no ganar nada (al menos de dinero). Quizás esta sensación sea compensada —durante un tiempo— por la alegría de hacer algo que de verdad te gusta mucho. En el mejor de los casos no tendrás la asignación salarial que podrías tener en una gran compañía, ni todos los beneficios laborales que tendrías en una empresa consolidada.
  • Tendrás que soportar, en ocasiones, a gente con muy poca experiencia, que usa palabras rebuscadas y extrañas para hacer parecer que saben UN MONTÓN.
  • Siempre estás ante la inminencia de un cierre, corres el riesgo de que la startup para la que trabajas o fundaste no sea the next big thing y de un día para otro estés de nuevo sin empleo. Las startups que logran triunfar son un porcentaje muy bajo de las que se crean día a día: el 75% fracasan antes del primer año. ¿Tu consuelo? habrás aprendido muchas cosas y los demás sabrán valorar tu fracaso (en realidad no).
  • Siempre corres el riesgo de que la startup sea vendida y dentro de las condiciones del deal no esté conservar a los trabajadores que la hicieron posible. Good bye, good bye amore mio!
  • Puedes no tener oficinas durante un largo tiempo, tu oficina será el café que mejor Internet te ofrezca. Tu comida by default: pizza y CocaCola.
  • Puedes verte enfrentado a alto niveles de presión, las implementaciones y mejoras suelen ser requeridas en tiempos muy cortos pues implican lanzamientos, prototipos que querrán ver posibles inversionistas, deadlines que no puedes modificar, pues el futuro entero del proyecto está en tus manos: si no sirve lo que hiciste se fueron todos al carajo.

¿Hay cosas buenas?

Pocas, pero existen ;)

  • Nadie te exigirá certificados, diplomas, cartas de presentación o historias académicas. Con que demuestres qué sabes hacer, lo hagas bien y muestres que es pertinente para la startup para la que trabajas quizás sea suficiente.
  • Podrás trabajar con gente de edades y vocaciones muy diferentes. Por su espíritu cosmopolita los fundadores de startups no tendrán temor de contratar a alguien de 14 años si es que es útil a las necesidades del sitio y muestra suficiente compromiso.
  • Estarás siempre actualizado en las últimas tecnologías: desde vídeo juegos hasta lenguajes de programación, pues es más que una necesidad, casi un deber, estar al tanto en las tendencias de la industria. Los fundadores casi siempre estarán viajando, buscando contactos, apoyos (no solamente monetarios), alianzas. Son una clase de navegantes de este nuevo mundo de Internet, siempre enterados de lo que sucede allende las fronteras de su propio mundo.

Como en cualquier otro aspecto de la vida o empresa correrás el riesgo de enfrentarte a algún demente como fundador o  a una crazy bitch como tu jefe. Pero si tu vida es tan ligera y arriesgada como para irte a trabajar a una startup, a vivir en carne propia el famoso no pain, no gain, no tendrás ningún lío en alzar tu computadora y dejar una amable nota que diga:

I got 99 problems but a bitch ain’t one

by Aleyda Rodríguez at October 27, 2014 10:45 PM

Programania

Functional trick to compose Conditions in Jooq

I’m starting to use Jooq in my projects and it’s been a very pleasing experience so far. I was starting to extract & refactor my own DSL from my Repositories to do something much less sophisticated when I stumbled upon Jooq and soon I realized that it would be much more productive to simply switch.

I like about Jooq that it doesn’t interfere with my business logic or my domain. I have an hexagonal architecture and I love that it just handles SQL generation with a nice builder DSL. It does one thing and it does it well.

In my case, due to the nature of some parts of my apps (out of the scope of this post), I need to dynamically add and combine conditions in my SQL queries and, Jooq being a builder DSL, I didn’t like to stop the statement creation on the where() step and the conditionally combine conditions one at a time. That leads to a lot of ugly if() blocks like in this example:

<script src="https://gist.github.com/27cd0b216fa4440f3574.js"></script>

This is a very naive approach to SQL construction and it seems obvious to me that those if() blocks are getting in the way of my design. I recon that, at some point, I have to make them in order to, conditionally, add new WHERE clauses to the SQL. The question here lies on how to get rid of them.

My solution for the time being consist on applying little functional tricks that let me declaratively add conditions, but wrapping them in a class that does the if() out from my Repository’s code (enhanced thanks to a kind tweet reply by @JavaOOQ).

First I need a way to combine lists of conditions:

<script src="https://gist.github.com/79fb6380fd39d940dbcb.js"></script>

Then, I need the wrapper class to hide the if() blocks:

<script src="https://gist.github.com/aa37d148519805748b4b.js"></script>

With this, I can rewrite my Repository’s SQL construction code to this:

<script src="https://gist.github.com/93bdcf8b124304a19266.js"></script>

Neat.

I’m just starting to use Java8’s functional API and Jooq and being able to write my code this way really helps me to make it more readable, concise and maintainable. I also want to extend this idea to other SQL parts as join and group by blocks that also depend of the user’s crazy combinations from the UI.

by Guille at October 27, 2014 07:21 AM

October 23, 2014

Maestros del Web (Editorial)

Cómo escribir el copy perfecto en 11 pasos

Para los que no conocen el término, el copywriting es el arte de entregar las palabras de una forma estratégica que consiga generar respuesta directa. Es decir, llevar a las personas a tomar una decisión y/o realizar una acción. Es esencial en un proyecto y básicamente se encarga de unir todos los componentes de una estrategia de marketing digital (diseño, seo, content marketing, growth hacking).

picjumbo.com_HNCK174

Uno de los problemas que he identificado en Internet, para ser más especifico, en el mundo de las startups en Latinoamérica, es que los emprendedores, fundadores, marketeros y bloggers no se preocupan de escribir buenos copys. Copys para llegar directamente a su público, persuadirlo y convertirlo en ventas con mayor eficacia.

A continuación voy a describir el proceso que suelo utilizar para escribir buenas líneas de copy. Esta guía está enfocada a productos, servicios y todo lo relacionado con startups o con vender algo por Internet, por lo que voy a utilizar el termino “producto” como referencia general.

Paso 1: entender tu producto

Uno de los problemas más críticos que he identificado en las personas que quieren vender en Internet y, sobre todo, en emprendedores que están en el proceso de consolidar sus startups, es que no entienden  su producto, no logran definir en tan solo una línea que es lo que están vendiendo.

Para entender nuestro propio producto lo mejor es crear un documento (Word, Google Docs, Notepad) en el que respondamos las siguientes preguntas:

  • ¿Cómo se describe tu producto?
  • ¿Cuáles son los beneficios de tu producto?
  • ¿Cuales son las cinco características principales de tu producto?
  • ¿Qué hace único a tu producto?

Respondernos estas preguntas nos ayudará a comprender realmente qué es lo que estamos vendiendo. Ahora ya sabes cuales son las características de tu producto y qué es lo que lo hace único. Este es un gran punto de partida para escribir un buen copy.

Paso 2: define tus clientes

Luego de entender el producto el paso siguiente es entender a quién queremos llegar. Cuál es el público ideal al que le interesa lo que estamos vendiendo.

Este paso nos ayuda a determinar de qué manera debemos persuadir a las personas que están entrando a nuestro sitio web y cómo convencerlos de comprar. Algo que debemos tener muy claro desde el inicio del proyecto es que lo más importante son los clientes, sin ellos nuestro producto no es nada.

Entonces vamos a agregar y responder las siguientes preguntas en nuestro documento:

  • ¿Cuál es el perfil (o perfiles) de un comprador ideal?
  • ¿Cuál es la necesidad principal de tu comprador ideal?
  • ¿Cómo se puede describir un comprador de tu producto?
  • ¿A quien quieres vender tu producto?

Después de responder estas preguntas debes tener claro quiénes son tus clientes y qué es lo que realmente les importa. Así podrás tener una mejor idea de cómo escribir tu copy, ya que claramente no es lo mismo vender un producto dirigido a una industria de estudiantes universitarios a vender un producto dirigido a CEOs de empresas multinacionales.

Paso 3: la regla de los 60 caracteres

Uno de los tips básicos para escribir artículos en Internet es conseguir que la primera linea de tu artículo sea leída y pueda persuadir a los lectores para que sigan hasta llegar al final del artículo.

Básicamente aplica lo mismo para los títulos y copys de ventas. Entonces ¿qué tal si reducimos el copy a una simple linea de no más de 60 caracteres?. De esta manera lograríamos explicar con exactitud y brevemente de que se trata nuestro producto y por qué comprarlo.

Así vamos a tener un copy optimizado para buscadores.

Meta title tag lenghts

Según un estudio/guía presentado por Moz sobre la optimización de títulos en Google, la mayoría de títulos en los resultados de búsqueda está entre los 56 y 58 caracteres.

También será una frase twitteable, si contamos 60 caracteres, más tu nickname en el RT que vas a obtener con tu genial copy y la URL de tu sitio, obtendrás la medida perfecta para un tweet.

También hará un espacio perfecto en la línea de asunto para campañas de email marketing. Este estudio demuestra que la longitud perfecta para el asunto de un mail no debe sobrepasar los 70 caracteres.

Paso 4: ¡utiliza palabras clave como un ninja del marketing!

Quizás suene algo raro considerar incluir un proceso de SEO en tu copy, pero en realidad no lo es.

Si incluyes palabras clave en tu copy que la gente utiliza para buscar tu producto, seguramente vas a convencer más fácilmente ya que el visitante va sentir que acaba de encontrar en tu producto exactamente lo que ha estado buscando.

Si ya has realizado una investigación previa de palabras clave, puedes utilizarlas sin problema. Si no has hecho este proceso en ningún momento y quieres hacerlo de una manera rápida, utiliza Keywordtool.io.

Keyword Tool es una herramienta que ya había recomendado de uno de mis artículos anteriores para hacer investigación de mercado. Esta herramienta de keywords te genera fácilmente una buena cantidad de palabras clave relacionadas a tu búsqueda principal, rápido y gratis.

Herramienta de palabras clave

Paso 5: prueba el valor de tu producto

En este paso te puedes apoyar en tu respuesta del paso 1: ¿Qué hace único a tu producto?

Debes demostrarle a tu público objetivo qué es lo que tiene tu producto que lo hace diferente y mejor que los demás. Por qué comprar el tuyo y no otro, cuál es el valor agregado que tiene comprar tu producto y no el de los demás.

Demuestra que lo que vendes realmente cuesta lo que vale, haz que los visitantes de tu sitio sientan el valor de ese producto que has construido con tanto esmero.

Paso 6: la fórmula de las 4 ues

Esta fórmula originalmente fue creada por Michael Masterson para redactar títulos, títulos de cabecera y asuntos de email. Así que es momento de utilizarla para escribir el copy que va a convertir tus visitantes en clientes potenciales.

Las 4 Us

Urgente: si puedes demostrar al público objetivo que necesita tener ya mismo tu producto, que vas a solucionar su problema con tan solo un click, va ser una razón super importante para que compre tu producto.

Único: demuestra a tu visitante que tu producto es único, que no va encontrar uno igual en ninguna parte, que tienes tantos beneficios como para no dejarlo ir a otro lugar sin convertirse antes en tu comprador.

Útil: si tu producto no brinda o demuestra utilidad, ¿por qué habría de comprarlo alguien? Demuestra que vas a solucionar realmente un problema o varios a través de tus beneficios. En cuánto más útil demuestre ser más gente va querer tener tu producto tan pronto como sea posible.

Ultra-especifico: No te pongas con rodeos en el copy para tu startup, se directo y conciso. Cuenta directamente que es lo que estás vendiendo y utiliza los demás pasos para complementar esto. Si aburres a tu visitante dandole muchas vueltas con la frase principal de ventas de tu producto, perdiste!. Hazle saber directamente a tu visitante que ha encontrado el producto que estaba buscando.

Paso 7: persuade, vende emociones

En el paso 2 nos respondimos cuales son las principales características y beneficios del producto. Pues bueno, para persuadir en tu copy, hay que hacer énfasis en los beneficios que tiene tu producto, por encima de las características.

Al comprador de tu producto no lo va persuadir que a través de tu copy le vendas por ejemplo una herramienta que envíe emails ilimitados. Por el contrario, si le vendes en tu copy la idea de que tu herramienta le ahorrará tiempo en todo el proceso de email marketing, como el diseño, rastreo, parte técnica y demás. Seguramente va estar más interesado.

Inicialmente el público llega a tu sitio web buscando un producto. Si vendes emociones tu comprador va a tener una razón lógica por la que comprar y además recomendar tu producto.

Así que si quieres tener un copy que venda, utiliza los grandes beneficios de tu producto que describiste en tu documento del paso 2.

Paso 8: Escribe, escribe, escribe, y vuelve a escribir

Ya que hemos hablado bastante sobre cómo escribir, es la hora escribir utilizando todo lo aprendido. Por lo general cuándo se trata de copywriting para ventas yo suelo agarrar papel y lápiz y empezar a escribir todo lo que se me venga a la cabeza. Considero mejor el método de hacerlo a mano primero y luego si a partir de esto crear un documento y hacerlo digital.

Escribe tantas variaciones de cada frase como te sea posible, entre mas frases escribas más opciones tendrás para llegar a la frase perfecta para vender tu producto. Así que escribe, escribe y sigue escribiendo. Es recomendable que llegues por lo menos a 20 opciones y elijas las 10 mejores para el proceso de retroalimentación.

Paso 9: retroalimentación

Como mencionamos al principio lo más importante de tu producto son tus clientes, y son los únicos que en realidad te van a ayudar a tomar la mejor decisión para seleccionar tu copy.

Haz una lista con los 10 mejores copys que escribiste en el paso anterior y utiliza una herramienta para realizar encuestas o un simple formulario de Google Docs y pregúntale a una buena cantidad de personas cuál frase consideran como la mejor para describir y vender tu producto. Cuál es la que más los persuade y los convence para comprar lo que vendes.

Este es un ejemplo del headline para una encuesta que hice hace poco para un proceso de copywriting:

Encuesta en Hotjar

Herramientas para hacer tu encuesta:

SuverMonkey

Kwiksurveys

Surveygizmo

Paso 10: pruebas A/B

Las pruebas A/B son un factor que debes tener en cuenta al momento de escribir el copy para tu startup. No escribas un solo copy, por qué no seleccionar al menos los mejores 2 basados en las respuestas de la retroalimentación y así descubrir con las pruebas A/B cual es el que más convierte.

Si haces las pruebas correctamente tus clientes de manera indirecta te estarán ayudando a descubrir cual es el copy que mejor funciona para vender tu servicio. ¿Y quien lo sabe mejor si no ellos?

En serio, no tomes una decisión final con respecto a tu copy sin haber probado al menos dos de los mejores copys que escribiste durante todo este proceso.

Paso 11: toque final

Si no eres un profesional de la escritura, pide a un editor que te ayude a dar una revisión a tu copy, seguramente encontrará algo que aconsejarte.

Si no hay nadie en tu equipo de trabajo que tenga estos conocimientos, puedes probar contratando un editor freelance en páginas como oDesk o Workana.

Ejemplos de copys que convierten

Kissmetrics Copywriting

Dropbox CopywritingDropbox CopywritingDropbox Copywriting

Después de seguir estos pasos y tener la edición final de los dos (mínimo) copys que seleccionaste, ya deberías estar listo para lanzarlos al público, empezar a aumentar tus ventas y finalmente seleccionar cual es el copy que va acompañar a tu producto durante una buena trayectoria.

Recuerda que siempre hay algo que mejorar, si ya tienes tu producto en marcha, repite este proceso y seguramente vas a obtener un copy cada vez mejor, no pares de hacer pruebas y de pedir una opinión a tus clientes, gracias a ellos tu producto vive, son la razón de ser, así que tratar de hacerlos lo más felices hasta lo posible (o lo imposible también).

Si llegaste hasta acá y vas a utilizar este proceso para redactar el copy de tu producto, no dudes en pedir ayuda o una opinión. La comunidad de Maestros del Web está siempre para ayudar, escribe en los comentarios o pregúntame directamente en twitter.

by Alejandro González at October 23, 2014 04:06 PM

Davilac

Las compras online se dispararán esta Navidad

Así es como lo indica el Estudio Anual de Consumo Showroomprive Navidad 2015, realizado por Showroomprive, el segundo club privado de moda online más importante de Europa, introducido en España desde hace tres años.

Según el estudio realizado sobre la intención de compra para estas fechas, se espera que un 16% de los españoles realice todas sus compras de Navidad online. ¿Los principales motivos?  Evitar largas colas, conseguir precios más competitivos y asegurarse de conseguir los productos deseados. Esta cifra representa un aumento de 4 puntos respecto al  12% del año pasado.

Teniendo en cuenta el alto nivel de penetración de los smartphones en nuestro país, no es de extrañar. La confianza en las compras realizadas por Internet aumenta cada vez más, junto a la aparición de nuevos modelos de negocio por Internet que han contribuido a aumentar las compras online.

Con las fiestas de Navidad cerca, se espera que las compras online se disparen notablemente este año durante noviembre y diciembre. Según el estudio, se estima que el 32,4% de los españoles gaste entre 200€ y 250€ en los regalos de esta Navidad.

compras navidad 2014 presupuesto

En cuanto al tipo de regalos, los tres productos estrella son: moda y complementos (58%), gadgets tecnológicos (42%) y perfumería y cosmética (45%). Les siguen de cerca joyas y bisutería (35%) y artículos para el hogar (19%).

Fuente: showroomprive.com

by Alicia at October 23, 2014 10:11 AM

October 22, 2014

Línea de código

Añadir elementos al final de un ArrayList

Ya hemos visto como insertar elementos en un ArrayList con el lenguaje Java, ahora vamos a ver como podemos añadir elementos al final de un ArrayList.

Para ello nos vamos a basar en tener elementos en una colección, con dicha colección podremos añadir elementos al final de un ArrayList. Así, lo primero será crear una colección con elementos. Por ejemplo un Vector:

  1. Vector<String> vector = new Vector<String>();
  2. vector.add("Irene");
  3. vector.add("María");

Ahora vamos a ver como sería nuestro ArrayList. Hemos creado ya un ArrayList al cual hemos insertado elementos para poder ver el efecto de añadir elementos al final de un ArrayList.

  1. ArrayList<String> al = new ArrayList<String>();
  2.  
  3. al.add("Victor");
  4. al.add("Luis");
  5. al.add("Elena");

Si mostramos el contenido por pantalla veremos que aparece:

{"Victor","Luis","Elena"}

Para añadir elementos al final de un ArrayList vamos a apoyarnos en el método .addAll. Dicho método recibe como parámetro la colección de elementos que hemos definido en el Vector y se ejecutará como método sobre nuestro ArrayList.

  1. al.addAll(vector);

Si ahora volvemos a recorrer nuestro ArrayList:

  1. for(int x=0;x<al.size();x++) {
  2. System.out.println(al.get(x));
  3. }

Lo que tenemos será el siguiente contenido:

{"Victor","Luis","Elena","Irene","María"}

Veremos que hemos añadido los elementos del Vector al final del ArrayList. El método .addAll nos ha servido para añadir elementos al final de un ArrayList de una forma muy sencilla.Similar Posts:

La entrada Añadir elementos al final de un ArrayList aparece primero en Linea de Codigo.

by Víctor Cuervo at October 22, 2014 06:00 PM

Maestros del Web (Editorial)

Genial gadget para viajeros nace con crowdfunding y un emprendedor latinoamericano

Los viajeros tienen sus cultos secreto. Up in the Air reveló parte de sus secretos, pero también dejó claros esos hacks que te ahorran vida entre cada aventura. ¿Recuerdan cuando Clooney le explicaba a su compañera de trabajo la ventaja de llevar una maleta portátil y olvidar la almohada en el basurero?

Esa escena es mágica.

Los que se identifican conmigo y les ha tocado viajar bastante, saben que la maleta se vuelve una compañera. Empacas lo mínimo viable para sobrevivir, inviertes en cada objeto de tu maleta. Incluso no es fácil elegir a una buena compañera para las próximas cien mil millas.

Me habían hablado mucho de Diego. Emprendedor argentino que encaminó WeHostels (que en su primera versión se llamó Inbed.me) una aplicación para buscar hostales desde el móvil por el mundo entero, disponible en siete idiomas y en más de 800 ciudades. La app ha tenido buen desempeño y hace un año se independizó con la adquisición de parte de StudentUniverse, la compañía proveedora de servicios para estudiantes, de larga tradición en Internet y que resulta en el match ideal para una compañía como Wehostels ¿Qué más quiere un ratón si no que lo amarren con el queso?

Sin embargo la adquisición no ha significado el retiro del equipo base de WeHostels que se ha mantenido en su totalidad, situación que a la vez permitió a Diego expandir sus horizontes.

Respecto a esta etapa con WeHostels Diego resalta:

La lección más importante que me dejó WeHostels es la importancia de dedicarle mucha atención al producto y conseguir hacer algo que sea exponencialmente mejor que lo que ya existe. Mi recomendación a la hora de desarrollar apps móviles es enfocarse en utilidades muy simples. Las mejores apps hace una sola cosa y la hacen muy bien. Además intentar iterar lo más rápido posible retroalimentando con feedback de usuarios.

Conociendo a BlueSmart

diego-bluesmartAyer, gracias al poder de Internet, Diego Saez Gil y su equipo con sus cofundadores (Tomi Pierucci, Alejo Verlini, Martin Diz, Brian Chen) lanzaron un nuevo proyecto al mundo de la mano de Indiegogo, la plataforma de crowdfunding de California que tantas lindas historias nos ha dejado.

Bluesmart es el gadget más genial que le conocí a un viajero. Se trata de reemplazar a tu compañera, tu maleta carry on (la que puedes subir contigo a la cabina del avión) por una opción que incluye un computador. ¿Para qué carajo un computador en la maleta?

Imagina las posibilidades. Un GPS para que no se pierda y sepas en donde está. Bluetooth para indicarte la cercanía si te toca hacer el check-in de la maleta antes de abordar. Candado controlado desde la aplicación de tu celular. Cargador para todos tus gadgets, un bolsillo fácil de usar para llevar tu laptop y pasar más ágilmente los controles de seguridad cansones de este mundo moderno y temeroso. Y agrega a esto que puede pesarse fácilmente e indicarte si está en los rangos permitidos por la aerolínea para llevar la maleta contigo a la cabina.

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="315" src="http://www.youtube.com/embed/VJnvx7IhAmk" width="560"></iframe>

Definitivamente el sueño de un viajero.

Lanzado en Indiegogo el proyecto, buscando recaudar 50mil dólares, casi superando los 200mil dólares al momento de escribir este artículo. Fue lanzado ayer. Tienen más de treinta días aún para seguir acumulando una comunidad que los apoye financiera para lograr que el proyecto salga adelante.

Le pregunto a Diego: ¿Es fácil desarrollar proyectos de Hardware luego que has hecho aplicaciones móviles?

No, es mucho más difícil! Manipular átomos resulta bastante más complicado que manipular bits. Pero hoy gracias a ciertos avances tecnológicos creo que se hizo más fácil que antes. Por ejemplo con impresoras 3-D baratas es más fácil prototipar, y con crowdfunding se hace más fácil lanzar temprano y empezar a recibir feedback de usuarios antes de que el producto esté 100% producido.

<script async="async" charset="utf-8" src="http://platform.twitter.com/widgets.js"></script>

Crowdfunding en IndieGogo

¿Cuál sería el consejo más importante que le darías a alguien cuando están listos para publicar un proyecto buscando crowdfunding Diego?

Creo que las plataformas de crowdfunding son algo fantástico. Ahora hay que tener en cuenta que requiere mucho trabajo de planeación y marketing. Hay que preparar la estrategia de prensa, emails, comunidad, etc. Lo más importante es comunicar tu producto de la mejor manera posible mostrando cómo soluciona un problema de las personas.

Hace unas semanas, en el Startup School, Eric Migicovsky, el fundador de Pebble decía: “Yo tengo la ventaja que puedo ir al instante donde mi vida cambio… fue cuando pulsé el botón de publicar el proyecto de Pebble en Kickstarter”. Ya le preguntaremos a Diego en unos meses si ha ganado dicho super poder.

¿Algún mensaje final para quienes quieren colaborar con el proyecto de BlueSmart y se van a animar a participar en la campaña de IndieGogo?

diego-carry-on

Esperamos que todos nos apoyen porque creemos que es un producto buenísimo que realmente les mejorará la experiencia de viajes, y es el fruto de mucho trabajo y mucha pasión. A los que no puedan comprar la maleta, ¡toda contribución suma! Lo importante es ser parte del movimiento de aquellos que queremos un mundo mejor a través de la tecnología y la innovación.

La imagen es de Diego en el launch room el día de ayer. De casualidad nos cruzamos en el mismo rincón del planeta para conocer el prototipo.

Escribo esto desde la sala de espera del Aeropuerto LaGuardia camino a San Francisco. Me indican que el vuelo está lleno y tocará tomar todo nuestro equipaje y mandarlo al espacio de maletas. Mi compañera de viaje no tiene gps, no tiene bluetooth, ni tampoco se conecta a mi móvil. Definitivamente quiero apoyar a Bluesmart y estar pendiente de todos los futuros Gadgets que veremos de este equipo.

Más sobre Diego Saez Gil

Para cualquiera que tenga un contacto cercano con los nombres del emprendimiento latinomericano el nombre de Diego Saez Gil será familiar. Él es un emprendedor argentino,
reconocido por ser el fundador de Wehostels, la startup de acomodamiento en hostales que se gestó hace un par de años y que fue adquirida durante el 2013 por StudentUniverse.
Su espíritu emprendedor, que lo llevó a recorrer Europa algunos años atrás, lo conectó desde muy temprano con las necesidades de los viajeros: así fue como fundó Wehostels, una startup cuyo foco era ofrecer las mejores opciones de hostales para los jóvenes mochileros como él, y ahora en una fase más avanzada de la evolución de su interés en los negocios relacionados con el mundo de los viajes se ha involucrado en el proyecto que hoy reseñamos: la maleta inteligente que puedes controlar desde tu celular.

Un apasionado de la industria tech de viajes, que ha estado en las grandes ligas del emprendimiento y que con esta nueva idea pone un punto muy alto para el emprendimiento de sello latino en Estados Unidos.

Gracias a Aleyda y a Diego que colaboraron en la preparación del artículo ;)

by Christian Van Der Henst S. at October 22, 2014 02:00 AM

October 21, 2014

Variable not found

Inicialización de diccionarios en C# 6

image33En otras ocasiones hemos hablado de novedades que acompañarán a la próxima revisión de C# que nos ahorraban algo de tiempo y pulsaciones de tecla a la hora de codificar algunos escenarios bastante frecuentes, a la vez que mejoraban la legibilidad.

Pues en esa misma línea, vemos ahora una nueva forma de inicializar colecciones clave-valor, como son los diccionarios. Ciertamente es un cambio bastante pequeño, de los que fácilmente podrían pasar desapercibidos junto a otras novedades de mayor peso, pero creo que también vale la pena conocerlo.

Para ponernos en situación, echemos un vistazo al siguiente código, totalmente válido en las versiones actuales de C#:



El código anterior es bastante limpio y pocas pegas se le podría poner, salvo que a primera vista no queda claro en absoluto qué tipo de estructura es CustomColorConverter. Si lo pensamos un poco, veremos que no es sino un Dictionary<string, string>  disfrazado, pero está claro que los elementos con los que lo estamos inicializando no expresan claramente que se trata de una colección de claves y valores. De hecho, a priori una expresión como { "red", "yellow"} pasaría mejor por ser un array o algún tipo de tupla que por ser un diccionario.

Para mejorar la legibilidad en estos escenarios, C# 6 introducirá una sintaxis adicional para la inicialización de este tipo de construcciones. No reduce el número de teclas a pulsar a la hora de escribirlo, pero sin duda deja bastante más claro qué es lo que estamos haciendo:



Ahora sí que salta a la vista que estamos cargando un diccionario, ¿verdad?

Otro ejemplo claro de uso, a menudo citado a la hora de hablar de esta nueva característica, es a la hora de utilizar diccionarios para crear objetos que posteriormente van a ser serializados, por ejemplo, en JSON:



Para finalizar, como curiosidad, decir que hasta hace bien poco se ha mantenido en la lista de características candidatas para C# 6 la introducción del símbolo $ tanto para inicializar diccionarios como para acceder de forma rápida a su contenido con una sintaxis similar a la siguiente:

image

Y salvo la ligera y molesta sensación de estar tocando código PHP, la verdad es que no pintaba mal, pero finalmente ha sido descartada. En principio, este uso del símbolo $ no vendrá la luz en la próxima versión de C#, aunque no se cierra la puerta a que en el futuro se introduzca si existe demanda por parte de la comunidad.

Otros posts de la serie:
Publicado en Variable not found.

by José M. Aguilar (noreply@blogger.com) at October 21, 2014 11:48 AM

Davilac

Informe CIS: uso de las redes sociales en España

Hace una semana el CIS publicó el barómetro correspondiente al mes de Septiembre y, esta vez, también encontramos información interesante acerca del uso de las redes sociales por parte de los ciudadanos españoles.

El informe empieza con las típicas preguntas acerca de la situación económica del país, por ejemplo:

Pregunta 1. Refiriéndonos a la situación económica general de España, ¿cómo la calificaría Ud.: muy buena, buena, regular, mala o muy mala?

Únicamente un 1,6% la califica como muy buena o buena y un 19,2% la califica como regular, frente al  41,4% que piensan que es mala y el 37,4% muy mala.

Pregunta 7. ¿Cuál es, a su juicio, el principal problema que existe actualmente en España? ¿Y el segundo? ¿Y el tercero?

Un 52,7% destaca como primer problema el paro, un 16,6% destaca la corrupción y el fraude, mientras un 9,6% piensa que el principal problema en España son los políticos.

En cuanto a aspectos relacionados con tecnologías de comunicación, encontramos preguntas acerca del uso del móvil, correo electrónico y aplicaciones de mensajería:

Pregunta 19. ¿Podría decirme si ha utilizado en los últimos 6 meses…?

uso aplicaciones internet

Respecto al correo electrónico, un 25,8% dice que consulta su email una vez al día, mientras un 21,3% lo hace varias veces al día y un 17% lo hace continuamente.

En cuanto a aplicaciones de mensajería instantánea, un 46,7% dice que consulta sus mensajes continuamente y un 41,9% lo hace varias veces al día, mientras un 7,5% sólo lo hace una vez al día. WhatsApp es la aplicación más utilizada (96,4%), quedando en segundo lugar el chat de Facebook (0,8%) y en tercer lugar Skype (0,6%).

Si miramos las redes sociales, vemos que un 31% dice conectarse varias veces al día, un 25,9% lo hace una vez al día y un 17,9% se conecta continuamente.  La red social más utilizada es Facebook (90,5%), dejando en segundo lugar a Twitter (6%) y en tercero a Linkedin (1,3%).

Consultar el informe completo.

by Alicia at October 21, 2014 10:14 AM

October 20, 2014

Línea de código

Insertar un elemento dentro de un ArrayList

Un ArrayList se compone de una lista de elementos o nodos que están relacionados y los cuales podemos ir recorriendo. Y como representación de una lista podremos insertar un elemento dentro de un ArrayList.

Para poder insertar un elemento dentro de un ArrayList deberemos de saber que los elementos que hay dentro del ArrayList están numerados, siendo el 0 el índice del primer elemento.

Si creamos la siguiente ArrayList:

  1. ArrayList<String> al = new ArrayList<String>();
  2.  
  3. // Añadir elementos a un ArrayList
  4. al.add("Víctor");
  5. al.add("Luis");
  6. al.add("Elena");

Tendremos los siguientes índices:

[0] => "Víctor"
[1] => "Luis"
[2] => "Elena"

Para insertar un elemento dentro de un ArrayList vamos a ayudarnos del método .add. Este método es el mismo que utilizamos para insertar elementos en un ArrayList. Pero en este caso vamos a hacer uso del índice.

Y es que el índice será el valor que pasaremos como primer parámetro del método .add. Si se obvia dicho valor se añadirá el elemento al final de la lista.

  1. al.add(1,"Fernando");

El anterior código se utiliza insertar un elemento dentro de un ArrayList, en concreto en la posición 1. Quedándonos nuestra ArrayList de la siguiente forma:

[0] => "Víctor"
[1] => "Fernando"
[2] => "Luis"
[3] => "Elena"

Como podemos ver desplaza todos los elementos, incluido el elemento que se encontraba en dicha posición.

Si ahora queremos insertar un elemento al principio del ArrayList bastará con que indiquemos el índice 0.

  1. al.add(0,"Virginia");

Ahora nuestro ArrayList se quedará de la siguiente forma:

[0] => "Virginia"
[1] => "Víctor"
[2] => "Fernando"
[3] => "Luis"
[4] => "Elena"

Ya hemos visto como utilizar el método .add para insertar un elemento dentro de un ArrayList.Similar Posts:

La entrada Insertar un elemento dentro de un ArrayList aparece primero en Linea de Codigo.

by Víctor Cuervo at October 20, 2014 06:00 PM

Rotar un array en PHP

Rotar un array en PHP consiste en desplazar el primer elemento de un array a la última posición de dicho array y desplazar todos el resto una posición adelante.

Si partimos de un array con la siguiente información:

  1. {"amaya","julio","javier","nacho","sonsoles"}

Rotar un array en PHP conseguiría el siguiente efecto:

  1. {"julio","javier","nacho","sonsoles","amaya"}

Para rotar un array en PHP vamos a ver dos opciones. Por un lado como implementar la lógica explicada anteriormente moviendo los elementos del array y la segunda utilizando funciones ya existentes en PHP.

Rotar un array en PHP moviendo elementos

En este caso vamos a implementar la rotación moviendo directamente los elementos del array. Lo primero que haremos será guardarnos el primer elemento

  1. $primero = $numeros[0];

Ya que será este primer elemento el que posicionemos en la última posición. Lo siguiente será ir moviendo los elementos desde su posición, a la posición previa. Esto lo ejecutaremos desde el segundo elemento.

  1. for($x=0; $x<count($lista)-1; $x++)
  2. $lista[$x] = $lista[$x+1];

Lo último que ejecutará este algoritmo será el poner en la última posición, la cual es la que tiene ahora mismo la variable de control $x, el que era el primer elemento.

  1. $lista[$x-1]= $primero;

De esta forma ya habremos conseguido rotar un array en PHP moviendo de forma manual los elementos.

Rotar un array en PHP con funciones

La lógica que hemos explicado de rotación la podemos ejecutar en PHP mediante un par de funciones. En concreto con aray_push y array_shift.

En el caso de array_shift lo que conseguimos es obtener el primer elemento de un array, extrayéndolo de dicho array.

  1. array_shift($lista);

Y con aray_push lo que hacemos es poner un elemento al fina del array.

  1. array_push($lista,$elemento);

En el caso de la función aray_push se le indica como primer parámetro el array sobre el que se quiere añadir el elemento.

El código para rotar un array en PHP con funciones sería el siguiente:

  1. $elemento = array_shift($lista);
  2. array_push($lista,$elemento);

O lo que sería lo mismo en una sola línea, y mucho más sencillo.

  1. array_push($lista,array_shift($lista));

Ya hemos visto dos formas sencillas de rotar un array en PHP.Similar Posts:

La entrada Rotar un array en PHP aparece primero en Linea de Codigo.

by Víctor Cuervo at October 20, 2014 06:00 PM

October 08, 2014

Yukei

Trabajar con fechas en MySQL

Trabajar con fechas es una tarea que al estar sujeta a tantas reglas especiales (meses con distinta cantidad de días, años bisiestos, comienzo de mes a media semana, etc) puede ser muy compleja si lo intentamos abordar sin el apoyo de una buena base.

Anteriormente he escrito sobre cómo trabajar con fechas en PHP y en Javascript: en ambos casos contamos con el concepto de fechas como objetos, lo que ordena y facilita bastante su manipulación a través de los métodos propios de cada lenguaje.

En MySQL existe a su vez un concepto de fechas y tiempos como tipos de datos con sus propias características, y junto con ellos, un montón de funciones que nos pueden servir para realizar distintos cálculos y operaciones al realizar consultas.

Tipos de fecha y horas

En MySQL existen los siguientes tipos de fecha y tiempo:

  • DATETIME corresponde a una representación completa de fecha y hora, es decir, algo como el 25 de octubre del 2014 a las 8:00 pm, lo que se almacena del modo 2014-10-25 20:00:00. Es notable la ausencia de la indicación de una zona horaria, cuya gestión queda delegada a la aplicación.
  • Los tipos DATE y TIME, como quizás ya estás adivinando, almacenan solamente fecha o solamente hora. Los formatos son los mismos que su parte correspondiente en una columna DATETIME, es decir, YYYY-MM-DD para las fechas y HH:MM:SS para el tiempo.
  • El tipo YEAR es un dato aun más específico y almacena solamente un año. Aunque se puede almacenar sólo con 2 dígitos, creo que no es necesario ahondar en lo evidentemente necesario de utilizar el formato de 4 dígitos.
  • Finalmente, existe el tipo TIMESTAMP que es similar a DATETIME pero con la salvedad de que todos los datos son convertidos hacia y desde UTC al escribir y leer la información, tomando como base la configuración de zona horaria del servidor, o bien, si se ha especificado, de la conexión con el motor de base de datos. Por ejemplo, si mi servidor está en la zona horaria de Santiago de Chile y voy a guardar el dato 2014-01-30 12:00:00, MySQL lo convierte a 2014-01-30 15:00:00 que sería la fecha y hora correspondientes en UTC.

Utilizando fechas y horas en consultas

Como ya sabemos que MySQL “entiende” de fechas y horas, podemos hacer consultas relacionadas con éstas de forma muy sencilla. Por ejemplo, si queremos averiguar las entradas de WordPress publicadas en una jornada de trabajo en particular:

SELECT * FROM wp_posts
WHERE post_date >= '2014-03-19 08:00:00'
AND post_date <= '2014-03-19 18:00:00'
AND post_status = 'publish'
ORDER BY post_date ASC

… donde post_date es una columna con datos tipo DATETIME.

También podríamos consultar por todas las entradas publicadas un día en particular, sin importar la hora. Para esto, una opción ingenua sería:

SELECT * FROM wp_posts
WHERE post_date >= '2014-03-19 00:00:00'
AND post_date <= '2014-03-19 23:59:59'
AND post_status = 'publish'
ORDER BY post_date ASC

Pero también podemos tratar esa columna como si tuviera solamente información de fecha utilizando la función CAST de MySQL:

SELECT * FROM wp_posts
WHERE CAST(post_date AS DATE) = '2014-03-19'
AND post_status = 'publish'
ORDER BY post_date ASC

Además podemos extraer parte de la fecha, por ejemplo:

SELECT  * FROM wp_posts
WHERE YEAR( post_date ) = '2014'
AND MONTH( post_date ) = '03'
AND post_status = 'publish'
ORDER BY post_date ASC

Utilizar periodos de tiempo en consultas

También podemos hacer consultas considerando periodos de tiempo; lo que es especialmente útil cuando queremos saber, por ejemplo, las entradas publicadas en un mes en particular. En lugar de tratar de adivinar cuántos días tiene el mes por el que estamos consultando, podemos definir un rango de forma más sencilla; por ejemplo, podemos formular la misma consulta anterior de este modo:

SELECT * FROM wp_posts WHERE
CAST(post_date AS DATE) >= '2014-03-01'
AND post_date < DATE_ADD( '2014-03-01', INTERVAL 1 MONTH )
AND post_status = 'publish'
ORDER BY post_date ASC

Tags: , , ,

Related posts

The post Trabajar con fechas en MySQL appeared first on yukei.net.

by Felipe Lavín Z. at October 08, 2014 03:56 PM