Archive | October 2013

5 opciones web saludables de cocina vegetariana

El vegetarianismo y el veganismo es sinónimo de buena salud, estudios afirman que ayuda a la prevención de cáncer y obesidad e inclusive longevidad, debido a la ingestión de mayor cantidad de nutrientes buenos para tu cuerpo. Te comparto 5 sitios de saludables opciones para que experimentes en la cocina:

Post Punk Kitchen

post-punk-kitchen

Post Punk Kitchen es un blog totalmente vegano creado por la chef Isa Chandra Moskowitz, quién desde adolescente inicia su camino en la cocina. Fue fundado en el 2003 y a través de la experiencia ha mejorado sus capacidades culinarias, en el 2005 empieza con la publicación de libros. El blog de Moskowitz ha adquirido muchos espectadores alrededor del mundo que colaboran compartiendo recetas.

En el sitio tienes la opción de filtrar entre las recetas en relación al ingrediente que tengas a tu disposición. Así también puedes optar por recetas libres de gluten o para una comida en particular como postres, desayunos o recetas para Navidad. También obtendrás opciones de diferentes cocinas del mundo: desde Challah hasta Tempeh Chimichurri.

Debido a que el blog es absolutamente vegano, no incluye ningún producto de origen animal. Así que si no te gusta la leche, o eres intolerante a la lactosa, Post Punk Kitchen es una excelente opción. El sitio ofrece también opciones que tradicionalmente obtienen productos lácteos y los transforma a veganos, como estos macarrones con “queso” y chipotle.

Martha Stewart

marta-stewart

La página de Martha Stewart es muy recomendada no solamente por sus excelentes propuestas vegetarianas, sino también por su variada selección de tips de cocina, manualidades y eventos en casa.

En su sección vegetariana encontrarás opciones de sopas, pastas, caserolas, pizzas, ensaladas, postres e inclusive especiales  para niños. Es fácil encontrar recetas debido a la categorización. Además cada plato, tiene etiquetado cada ingrediente para que veas otras opciones.

Otro de los beneficios de esta página es que cada receta, dependiendo de sus procedimientos, te recomendará videos para que aprendas a picar vegetales de una forma más eficiente, cocer pasta, entre otros.

Herbivoracious

herbivoracious

Este blog totalmente vegetariano es el proyecto del ingeniero de software Michael Natkin, quien desde el 2012 se ha dedicado a la cocina. La filosofía del blog es básicamente crear cocina saludable y vegetariana para el amante de la comida.

El sitio tiene una sección de recomendaciones del equipo de cocina que están en venta en la misma página. Encontrarás más de 400 recetas vegetarianas y prueba las más populares, como las “Papas Harissa” para cocinar.

Jamie Oliver

jamie-oliver

Jamie Oliver promueve la cocina saludable y su sitio está lleno de recetas de diferente tipo (no solamente vegetariana y vegana), probablemente has escuchado de él por su reciente enfrentamiento con McDonald’s.

Cuando accedes a las recetas, tienes la opción de buscarlas por medio de ingredientes, país, ocasiones o tipo. La sección vegetariana del sitio la encontrarás en “Dietas especiales”. El formato de esta página es muy parecido al de Pinterest, con atractivas imágenes, a las cuales accedes para ver detalles de lo que deseas cocinar.

Si eres discreto con tu dieta, una buena característica de esta página es que puedes ver la información nutricional de las recetas.

Je suis alimentageuse

je-suis

Un blog totalmente vegetariano creado por una joven amante de la cocina: Lisa, su nombre vietnamés es Mai. Menciona que su comida favorita tiende a llevar limón. Je suis alimentageuse ha recibido bastantes homenajes por ser un excelente blog de comida. Una característica especial del sitio es que es bastante personal. Las observaciones de la chef son bastante informales y comenta sobre su proceso de aprendizaje.

Una de las secciones interesantes del blog se llama: “10 formas de hacer algo con los bananos pasados de maduros”. También encontrarás variadas opciones de comida vegetariana, vegana y libres de gluten.

No olvides revisar


Mabe Fratti para Maestros del Web.
Agrega tu comentario | Enlace permanente al artículo


Síguenos en: @maestros | Fan page

via Maestros del Web http://www.maestrosdelweb.com/editorial/sitios-cocina-vegetariana/

Advertisements

Fotomontaje de Halloween en Photoshop

Que tal amigos! Aquí les comparto este sencillo tutorial de Photoshop con motivo de Halloween, espero que les guste y dejen sus comentarios!

Enviar comentario

via Cristalab http://feeds.cristalab.com/~r/clab/~3/8qvOCsM1P88/

Una mirada a Leap Motion: El control Minority Report

Hoy se realizó el lanzamiento oficial del Leap Motion, uno de los nuevos dispositivos emergentes enfocados en crear experiencias de uso inmersivas, únicas y futuristas. Al igual que Google Glass, el Leap Motion ofrece una interacción que conecta al hombre con la máquina de forma intuitiva y fluida, eliminando las estructuras tangibles de manejo y creando una mayor sensación de control y libertad.

El Leap Motion es un pequeño dispositivo que se conecta vía USB a cualquier computadora y reconoce los movimientos de las manos y dedos, traduciendo gestos y movimientos en órdenes concretas, lo cual te permite interactuar tridimensionalmente con una máquina usando tus manos. Este curioso gadget es un desarrollo independiente que ha conseguido atraer la atención de muchas empresas y de la comunidad tecnológica en general por su enorme potencial y concepto revolucionario.

El objetivo principal que persiguen los creadores del Leap Motion es que los seres humanos logren interactuar con las máquinas de forma directa como lo hacen con los objetos físicos.

El truco detrás de la magia del Leap Motion

El Leap Motion funciona mediante conexión USB y cuenta con dos cámaras y tres LEDs infrarrojos que detectan el movimiento de las manos y dedos con un alcance máximo de un metro de distancia y una precisión espacial de 0.01 milímetros.

Si bien el Kinect es el antecesor de este mágico truco tecnológico, el mérito de la magia del Leap Motion es la capacidad de sintetizar, abarcar sólo el movimiento de las extremidades superiores, para crear un sistema portable, sencillo y preciso. Cabe destacar que el Leap Motion, además de reconocer el movimiento de tus manos y dedos, puede reconocer tools como: palillos, lápices, entre otros, lo cual brinda una precisión aún mayor.

El Leap Motion tiene soporte para los sistemas operativos: Windows, Mac y Linux.

Mi experiencia desarrollando un videojuego para Leap Motion

Desarrollar un videojuego para el Leap Motion es una tarea bastante laboriosa y en ocasiones compleja. Lo más difícil es pensar en cómo adaptar el game play a la estructura de control y detección de gestos que ofrece el SDK. En un principio, sólo estaban disponibles unos pocos gestos como: movimiento circular del dedo, pulsación de una tecla en el aire, barrido de un dedo en el aire y tap o toque de la pantalla en el aire con un dedo. Posteriormente se agregaron otros.

Como desarrolladora, debo confesar que la precisión era bastante decepcionante. Pronto nos encontramos con dificultades inesperadas no relacionadas con la adaptación del game play. Una tarea cotidiana y simple como pulsar un botón del menú se convirtió en una tarea difícil y frustrante. Llegué a pensar que lo que veía en los videos de Leap Motion eran versiones altamente glorifiacadas por el marketing y los programas de edición. Sin embargo, decidí seguir adelante con el proyecto porque me gustaba la idea de controlar mi videojuego con las manos, esa libertad es imposible de reproducir con ninguno de los periféricos convencionales de la PC. Así, luego de programar varios gestos infructuosamente, decidimos recurrir al ingenio creador. En lugar de utilizar alguno de los gestos del SDK para pulsar un botón, decidimos poner una barra de carga que se activa al poner el cursor sobre el botón y tarda unos poquitos segundos en llenarse. A los niños y a las personas de Leap Motion encargadas de revisar el juego les gustó la idea.

Solventado ese inconveniente seguimos adelante con el desarrollo. Simplificamos muchos elementos de la interfaz de usuario del juego y aplicamos nuevamente nuestro ingenio para hacer muchas cosas en un sólo movimiento. El game play de nuestro videojuego The Rainbow Machine consiste en estirar y posicionar una barra con el objeto de dirigir una bola hacia un cofre. Una vez posicionada la barra hay que pulsar un botón de Play para que la bola empiece a moverse. Para la versión de Leap Motion, esas dos acciones importantes, posicionar y pulsar un botón, las condensamos en un sólo movimiento.

Al comenzar un level la barra aparece muy estirada, fuera los límites permitidos para realizar una jugada, de esta forma nos aseguramos de poder mover la barra con confianza, disminuyendo las probabilidades de que un jugador por error, apenas entre a jugar posicione la barra en un sitio que no desea. Para fijar la barra y al mismo tiempo ejecutar la jugada, es decir, hacer que la bola se mueva como cuando se pulsa el botón Play, sólo es necesario unir los dedos lo suficiente hasta que la barra alcance el nivel permitido, visualmente. En otras palabras, hasta que la barra sea completamente blanca y no se note ningún extremo rojo. En un sola acción se fija la barra y se ejecuta el juego. Se juega con los dos dedos índices y pueden utilizarle tools como palillos.

También agregamos varios de los gestos del SDK: barrido de un dedo en el aire, para pasar entre escenas, y toque de la pantalla en el aire con un dedo para pinchar las burbujas de un jackpot. Cabe resaltar, que luego de varios meses se realizaron mejoras en el SDK y la precisión aumentó.

Al final, logré terminar satisfactoriamente mi videojuego para Leap Motion. El feedback que obtuve del equipo de la compañía fue grandioso y publicaron nuestro videojuego en su tienda Airspace. También fue nominado para el programa Beta recibiendo varios comentarios positivos y una excelente valoración.

Estoy muy feliz y orgullosa de que mi videojuego haya sido aprobado y se encuentre en la tienda de Leap Motion. Espero que más desarrolladores latinoamericanos se animen a trabajar con esta nueva tecnología.

Aspectos positivos del Leap Motion

  • Creación de experiencias únicas: El Leap Motion te permite crear experiencias de interacción diferentes y únicas con una computadora, imposibles de recrear con los periféricos convencionales: teclado, mouse, gamepad, entre otros.
  • Precisión aceptable: La precisión del control del dispositivo mejoró considerablemente con las actualizaciones más recientes del SDK. No obstante, aún tiene un amplio margen para seguir mejorando.
  • Fácil instalación y portabilidad: Se conecta vía USB en cualquier computadora, tiene soporte para los principales sistemas operativos y por su tamaño puede trasladarse fácilmente.
  • Bajo precio: El Leap Motion tiene un precio de $79.99 dólares + costos de envío. Comparado con otros dispositivos de control de movimiento resulta bastante económico.
  • Variedad de Aplicación a tu disposición: Puedes adquirir varias aplicaciones a bajo costo en su tienda Airspace. En total son unas 75 aplicaciones de diversos tipos, desde videojuegos hasta aplicaciones educativas y científicas. Hoy se abre al público la tienda Airspace luego de varios días de acceso privilegiado a los beta tester.
  • Gran profesionalismo y buena atención del equipo de trabajo: Excelente y rápida atención de parte del equipo de revisión de la compañía.

Aspectos negativos del Leap Motion

  • Calentamiento del dispositivo: Luego de varias horas de uso intensivo el dispositivo tiende a calentarse y pueden empezar percibirse algunos lags en el manejo.
  • Fallos en el reconocimiento: Si bien la precisión es aceptable, en ocasiones pueden notarse fallos en el reconocimiento de los dedos cuando pones la mano de forma vertical.

    También puede detectar el movimiento de alguien que esté cerca y a veces es molesto porque pierdes el foco del cursor. No puede haber nadie cerca de ti mientras usas el dispositivo a menos que se quede estático.

  • Produce cansancio muscular: Puedes experimentar cansancio muscular en los brazos luego de varias horas de uso intensivo.

Comentarios finales

Si bien las posibilidades de desarrollar aplicaciones increíbles con el Leap Motion son bastante amplias, el software y el dispositivo aún se encuentran en una fase muy incipiente. La precisión es un punto fundamental a mejorar, sobre todo cuando se pretende incursionar en ámbitos tan importantes como la salud y la ingeniería. El Leap Motion aún está lejos de ser empleado para realizar una cirugía pero como dispositivo de control gestual, en el ámbito tecnológico general, ha hecho importantes avances.

Muchas compañías han demostrado su interés por esta nueva la tecnología y algunas ya la han incorporado en sus productos. Por ejemplo, HP anunció la integración nativa de la tecnología del Leap Motion en sus nuevas laptos y Google incorporó soporte para control gestual en la nueva versión de Google Earth.

En el ámbito de los videojuegos, el Leap Motion constituye una excelente opción para ejecutar ideas más ambiciosas y juegos nunca antes vistos.

No creo que el Leap Motion se convierta en corto plazo en el sustituto del mouse pero sí creo que será adoptado como dispositivo complementario de control y, a medida que sigan desarrollándose aplicaciones, se masificará su uso llegando a ser algo tan cotidiano como un mouse.

Enviar comentario

via Cristalab http://feeds.cristalab.com/~r/clab/~3/qj2TD0biV4Y/

Módulo de usuarios (VI): Editar un registro con Laravel

Falta poco para terminar nuestro módulo. Si es tu primera vez en esta serie de tutoriales, todavía estás a tiempo de aprender a crear un módulo con Laravel, paso a paso. Hoy veremos cómo editar registros con Laravel.

Este tutorial es muy trivial, lo haremos basado en el progreso que hemos hecho hasta ahora, copiando, no, más bien reusando parte del código que ya producimos para crear la acción “create”.

Primero regresemos a la lista de usuarios:

app/views/admin/users/list.blade.php

Allí vamos a agregar una columna adicional para agregar un botón a la acción editar usuarios:

Código :

  <table class="table table-striped" style="width: 900px">
    <tr>
        <th>Nombre completo</th>
        <th>Correo electr&oacute;nico</th>
        <th>Acciones</th>
    </tr>
    @foreach ($users as $user)
    <tr>
        <td>{{ $user->full_name }}</td>
        <td>{{ $user->email }}</td>
        <td>
          <a href="{{ route('admin.users.show', $user->id) }}" class="btn btn-info">
              Ver
          </a>
          <a href="{{ route('admin.users.edit', $user->id) }}" class="btn btn-primary">
            Editar
          </a>
        </td>
    </tr>
    @endforeach
  </table>

Esto nos permitirá acceder a la opción de editar fácilmente. Ahora, de vuelta en:

app/controllers/admin/UsersController.php

Código :

   /**
    * Show the form for editing the specified resource.
    *
    * @param  int  $id
    * @return Response
    */
   public function edit($id)
   {
      return 'Aqui editamos el usuario: ' . $id;
   }

Lo vamos a reemplazar por:

Código :

public function edit($id)
{
$user = User::find($id);
if (is_null ($user))
{
App::abort(404);
}

return View::make('admin/users/form')->with('user', $user);
}

Vean lo simple del código:

Código :

$user = User::find($id);

Nos trae el usuario que corresponde a la id numérica almacenada en la variable $id

Noten que antes le pasamos dicha ID a la ruta edit:

Código :

<a href="{{ route('admin.users.edit', $user->id) }}">

En caso de que la ID no corresponda a ningún usuario válido, User::find devolverá NULL, por lo tanto:

Código :

if (is_null ($user))
{
App::abort(404);
}

Si el usuario no existe se aborta la operación con un error 404. Por último se le pasa el usuario a la vista, como ya hemos hecho antes.

Al darle clic a editar en cualquiera de sus usuarios, verán el mismo formulario usado para crear pero con los campos llenos…

A mí me gusta evitar tener 2 vistas con casi el mismo HTML repetido, en este caso se puede hacer que el mismo formulario sirva tanto para create como para edit de esta forma:

Código :

@extends ('admin/layout')

<?php

    if ($user->exists):
        $form_data = array('route' => array('admin.users.update', $user->id), 'method' => 'PATCH');
        $action    = 'Editar';
    else:
        $form_data = array('route' => 'admin.users.store', 'method' => 'POST');
        $action    = 'Crear';        
    endif;

?>

@section ('title') {{ $action }} Usuarios @stop

@section ('content')

  <h1>{{ $action }} Usuarios</h1>

  <p>
    <a href="{{ route('admin.users.index') }}" class="btn btn-info">Lista de usuarios</a>
  </p>

{{ Form::model($user, $form_data, array('role' => 'form')) }}

  @include ('admin/errors', array('errors' => $errors))

  <div class="row">
    <div class="form-group col-md-4">
      {{ Form::label('email', 'Dirección de E-mail') }}
      {{ Form::text('email', null, array('placeholder' => 'Introduce tu E-mail', 'class' => 'form-control')) }}
    </div>
    <div class="form-group col-md-4">
      {{ Form::label('full_name', 'Nombre completo') }}
      {{ Form::text('full_name', null, array('placeholder' => 'Introduce tu nombre y apellido', 'class' => 'form-control')) }}        
    </div>
  </div>
  <div class="row">
    <div class="form-group col-md-4">
      {{ Form::label('password', 'Contraseña') }}
      {{ Form::password('password', array('class' => 'form-control')) }}
    </div>
    <div class="form-group col-md-4">
      {{ Form::label('password_confirmation', 'Confirmar contraseña') }}
      {{ Form::password('password_confirmation', array('class' => 'form-control')) }}
    </div>
  </div>
  {{ Form::button($action . ' usuario', array('type' => 'submit', 'class' => 'btn btn-primary')) }}    
  
{{ Form::close() }}

@stop

En las primeras líneas definimos el título “Crear” o “Editar” y la ruta y método que se le va a pasar al form, dependiendo si el usuario existe o no.

También se puede lograr lo mismo pasando la data desde el controlador a la vista:

Código :

   public function edit($id)
   {
        $user = User::find($id);
        if (is_null ($user))
        {
            App::abort(404);
        }
        
        $form_data = array('route' => array('admin.users.update', $user->id), 'method' => 'PATCH');
        $action    = 'Editar';
        
        return View::make('admin/users/form', compact('user', 'form_data', 'action'));
   }

Lo importante es evitar duplicar código de acuerdo al principio DRY (Don’t repeat yourself), por ejemplo, para el HTML de errores, dado que va a ser muy común a todos los módulos, lo separé en otra vista y ahora sólo hay que incluirlo:

Código :

  @include ('admin/errors', array('errors' => $errors)) 

De esta manera se vuelve más reusable:

app/views/admin/errors.blade.php:

Código :

  @if ($errors->any())
    <div class="alert alert-danger">
      <button type="button" class="close" data-dismiss="alert">&times;</button>
      <strong>Por favor corrige los siguentes errores:</strong>
      <ul>
      @foreach ($errors->all() as $error)
        <li>{{ $error }}</li>
      @endforeach
      </ul>
    </div>
  @endif

Completando la acción “update”

Si se detienen a pensar unos momentos, este método “update” se completa de manera similar a “store”, la diferencia es que acá no crearemos un nuevo usuario, sino que cargaremos uno tal como hicimos en el método “edit” hace un momento, además tenemos que cambiar la redirección en caso de datos no válidos a la ruta admin.users.edit. El código resultante quedaría así:

Código :

public function update($id)
{
        // Creamos un nuevo objeto para nuestro nuevo usuario
        $user = User::find($id);
        
        // Si el usuario no existe entonces lanzamos un error 404 :(
        if (is_null ($user))
        {
            App::abort(404);
        }
        
        // Obtenemos la data enviada por el usuario
        $data = Input::all();
        
        // Revisamos si la data es válido
        if ($user->isValid($data))
        {
            // Si la data es valida se la asignamos al usuario
            $user->fill($data);
            // Guardamos el usuario
            $user->save();
            // Y Devolvemos una redirección a la acción show para mostrar el usuario
            return Redirect::route('admin.users.show', array($user->id));
        }
        else
        {
            // En caso de error regresa a la acción edit con los datos y los errores encontrados
            return Redirect::route('admin.users.edit', $user->id)->withInput()->withErrors($user->errors);
        }
}

Con esto ya debería funcionar “a medias” la función de actualizar, sin embargo, si intento actualizar mi propio usuario recibo un error:

Código :

El email ya ha sido utilizado

Esto es por la regla “unique” definida en app/models/User.php, además que editar la clave debería ser opcional.

Corrijamos el método isValid:

Código :

    public function isValid($data)
    {
        $rules = array(
            'email'     => 'required|email|unique:users',
            'full_name' => 'required|min:4|max:40',
            'password'  => 'min:8|confirmed'
        );
        
        // Si el usuario existe:
        if ($this->exists)
        {
            //Evitamos que la regla “unique” tome en cuenta el email del usuario actual
$rules['email'] .= ',id,' . $this->id;
        }
        else // Si no existe...
        {
            // La clave es obligatoria:
            $rules['password'] .= '|required';
        }
        
        $validator = Validator::make($data, $rules);
        
        if ($validator->passes())
        {
            return true;
        }
        
        $this->errors = $validator->errors();
        
        return false;
    }

Noten el IF extra para configurar algunas reglas dependiendo si el usuario ya existe o no…

De esta forma, gracias a la propiedad $this->exists de los modelos de Laravel y un poco de astucia, podemos reusar tanto el método isValid como nuestro formulario.

Guardar contraseñas con Laravel

Como hemos visto, al actualizar un registro la contraseña queda como campo opcional (para no obligar al usuario a cambiar su contraseña cada vez que quiera editar otro dato), sin embargo tenemos que prevenir que Laravel grabe una contraseña vacía en la base de datos, además, también tenemos que encriptar las contraseñas no vacías. Todo este lío se soluciona muy fácil, dentro del modelo (app/models/User.php) agregando el siguiente método:

Código :

    public function setPasswordAttribute($value)
    {
        if ( ! empty ($value))
        {
            $this->attributes['password'] = Hash::make($value);
        }
    }

Cada vez que se intenta acceder a un atributo, Laravel intenta ver si el modelo tiene un método llamado get[nombre del atributo en camelCase]Attribute, así mismo cada vez que se intenta guardar un atributo dentro del modelo, se intenta llamar set[nombre del atributo en camelCase]Attribute, que permiten modificar el comportamiento por defecto. ¿No me creen? Agreguen lo siguiente al modelo, temporalmente:

Código :

    public function getFullNameAttribute()
    {
        return strtoupper($this->attributes['full_name']);
    }

Ahora todos, todos, TODOS los atributos full_name de todos los usuarios se imprimirán siempre en mayúsculas, al menos que borremos o cambiemos el método getFullNameAttribute.

[nota:a2b602b41b]Eloquent tiene muchos métodos interesantes que se escapan, lamentablemente, del alcance de este tutorial[/nota:a2b602b41b]

El método validAndSave (haciendo que todo se vea aún más limpio y mejor)

Aún:

Código :

        // Revisamos si la data es válido
        if ($user->isValid($data))
        {
            // Si la data es valida se la asignamos al usuario
            $user->fill($data);
            // Guardamos el usuario
            $user->save();
        }

Parece mucho código, además hay el mismo código repetido en store y update, ¿Cierto?

Que tal si en el modelo (app/models/User.php) agregamos un nuevo método:

Código :

    public function validAndSave($data)
    {
        // Revisamos si la data es válida
        if ($this->isValid($data))
        {
            // Si la data es valida se la asignamos al usuario
            $this->fill($data);
            // Guardamos el usuario
            $this->save();
            
            return true;
        }
        
        return false;
    }

Ahora en la acción update podríamos escribir, solamente:

Código :

        // Revisamos si la data es válida y guardamos en ese caso
        if ($user->validAndSave($data))
        {
            // Y Devolvemos una redirección a la acción show para mostrar el usuario
            return Redirect::route('admin.users.show', array($user->id));
        }
        else
        {
            // En caso de error regresa a la acción create con los datos y los errores encontrados
            return Redirect::route('admin.users.edit', $user->id)->withInput()->withErrors($user->errors);
        }

La acción “store” podríamos simplificarla también de la misma manera ¿Cómo quedaría?

Con esto finalizamos la acción de editar, espero les haya gustado.

P.D. ¿Terminaron la acción “show”? Si la respuesta es no, todavía tienen un poco de tiempo antes que se publique el próximo y último tutorial, donde veremos la acción “destroy” y algo de ¡AJAX!

Stay Tuned!

Enviar comentario

via Cristalab http://feeds.cristalab.com/~r/clab/~3/-xZhQ3l4Ebo/

Los “influencers” vende-tweets son una realidad: Maduremos

Existen comunidades secretas y abiertas, casi siempre en Facebook, de "Community Managers" y gente de la industria del marketing online ¿Son para aprender y compartir campañas innovadoras? Nah, son para burlarse de los tweets mal enviados y en especial para "denunciar a los que hacen trampa".

Trampa, ultimamente, se define como "comprar" influenciadores: Pagar a cuentas con muchos followers o likes, famosos en internet, para que twitteen un hashtag, una URL o lo que sea de una marca.

Los denuncian por pecadores, por manipuladores. El último fue este:

¿Cómo se atreven a recibir dinero por tweets? A veces peor ¡Regalos!

¿Cómo mandan tweets no legitimos a nombre de otra marca? ¡Con sus cuentas de twitter y facebook! ¡La deshonra!

Maduremos, esto pasa desde 1960 y no es nada malo, sólo negocios

Todos quisieramos que el 100% de los tweets sean orgánicos, naturales y que internet fuera el jardín mágico donde todos corremos desnudos obteniendo el conocimiento del mundo, pero esto es un negocio y estas cosas son señal de que el mercado maduró.

Ophelia Pastrana, a quien yo respeto absolutamente en Estrategia Digital, me decía que el mundo del marketing online está redescubriendo lo que ya sabía la publicidad en los 50s. Las mismas técnicas que los tipos de Mad Men descubrieron hace años las reinventan los nuevos "genios" que sólo son especiales porque aprendieron a twittear antes que el resto.


Ophelia también registra FAILs de CMs en un pinterest legendario

Yo he sido testigo de múltiples eventos donde una marca invita a "influencers" a un restaurante a darles bebida y comida gratis a cambio de twittear toda la noche un hashtag.

Y saben… Han creado Trending Topics. Contratar influencers funciona. Quizás no para generar conversión, quizás no para crear ventas y leads, pero sí para que la agencia de marketing online pase screenshots de "meta cumplida".

Nadie jode a Messi por salir en cientos de comerciales de productos horribles que el jamás en la vida usó. Pocos se burlan de Lady Gaga por, dizque, ser la jefe de marketing de Polaroid.

Los "influencers" son realidad desde antes que internet existiera, sólo que ahora nos duele el cerebro de aceptar que hay fama y "microfama". Es esa microfama la que las agencias compran en twitteros con diez mil o cien mil followers.

¿Pero están haciendo dinero por solo twittear?
Sí, deja la envidia.

¿Pero no es efectivo para una marca a largo plazo?
De pronto no, o quizás es simple campaña de sostenimiento de marca, es problema de ellos.

Maduremos y dejemos de alarmarnos. La mayoría de hashtags y trending topics y "memes virales" y videos en Youtube son de marcas y artificiales. Ni "Hola soy German", ni "werevertumorro", ni el "chip torres" ni "urapan mexican son" son de verdad. Son memes artificiales creados por marcas gracias a "influencers".

Bienvenidos a internet. Por lo menos ahora no hay monopolio y todos podemos tener microfama. Menos "denuncias", más campañas innovadoras de verdad.

    John Freddy Vega @freddier es el fundador de @Cristalab y cofundador de @Mejorandola, el más grande esfuerzo en educación en tecnología del mundo hispano.

Enviar comentario

via Cristalab http://feeds.cristalab.com/~r/clab/~3/RqIFndxHjHk/

Ideas para implementar el comic digital en la educación

comic

De acuerdo a la Encuesta Anual de Publishers Weekly sobre las ventas de cómics, en  una era amenazada por los desafíos de la recesión económica de la industria editorial, estos lograron recuperarse de una catastrófica espiral descendente. Cuando DC Entertainment, el hogar de Batman, Superman y la Mujer Maravilla relanzó su universo de superhéroes en 2011, un componente clave fue digitalizar todos sus títulos, lo que significa que se venden en línea al mismo tiempo y por el mismo precio que en una librería o tienda de revistas.

Pero también significa que ésta y otras editoriales aprovechan la proliferación de la industria de los dispositivos móviles. Ejemplos sobran, tan sólo este año, la reciente aparición de celulares optimizados con pantallas táctiles más grandes como la gama BlackBerry 10 o el Samsung Galaxy Mega (que con 6.3 pulgadas tiene la pantalla más amplia disponible en el mercado), confirman la tendencia imparable de tornar el celular en herramienta de lectura.

El formato del cómic digital resulta ideal para dichos dispositivos móviles. Los cómics digitales no sólo son un exitoso complemento para las ediciones impresas sino un mercado creciente que permite desarrollar un lenguaje propio adaptado a la lectura en smartphones ya que estos posibilitan el uso de nuevos efectos narrativos como sonidos o vibraciones.   Algunos cómics como la serie Scott Pilgrim del canadiense Brian Lee O’Malley incorporan en su versión móvil funciones como vínculos a redes sociales y  simulaciones del formato de videojuego.

El cómic digital en la educación

A continuación presentamos ejemplos particularmente relevantes, el primero utiliza el formato de los cómics como herramienta de difusión, el segundo hace de los cómics su objeto de estudio y el tercero es una herramienta para convertir fotografías en comic.

PhD Comics

phd-comics

Obra de Jorge Cham, Ingeniero Mecánico egresado de la Universidad de Standford, el nombre de esta tira cómica es un juego de palabras entre las pilas de trabajo acumuladas durante una investigación académica “Piled Higher and Deeper” y el acrónimo “PH.D” que indica el título de Doctorado en inglés. Se trata de una popular publicación que narra, desde la perspectiva de cuatro personajes principales, las situaciones que enfrenta un estudiante de posgrado, las horas en la biblioteca, las discusiones con otros compañeros de batalla, los talleres, conferencias y sesiones con el supervisor.

El resultado no podría ser más exitoso: una película, series de libros impresos, cientos de fans en todo el mundo y, sobre todo, una plataforma en la que investigadores pueden compartir desde cuestiones cruciales cómo ¿cuándo es aconsejable hacer una pregunta durante un seminario? hasta otras incidentales como El descubrimiento de nuevos antibióticos.

The Comics Grid

comic-grid

Esta revista académica digital es una iniciativa única por la calidad de sus contenidos. Se trata de un colectivo multicultural de investigadores expertos en el estudio de los cómics como medio artístico. Cada una de sus entradas propone el análisis formal de una página o viñeta de un cómic. Todos los artículos de investigación presentados en The Comics Grid  son escritos y editados por estudiosos del medio y proporcionan contenidos formativos alentando el diálogo abierto entre colaboradores y lectores.

Su objetivo es el de promover el estudio formal de los cómics dentro y fuera de la academia con contribuciones que presentan un conocimiento especializado en un lenguaje accesible, fomentando la investigación digital a través de la participación pública y la edición colaborativa. De esta manera esta revista se constituye como un referente para profundizar en el conocimiento de obras de autores de cómics de cualquier época así como en el contexto en que héroes, anti-héroes y otros tantos personajes e historietas han tenido su origen y han evolucionado a través de los años.

The Comics Grid es una publicación de Ubiquity Press, editorial de acceso abierto  de revistas académicas, perteneciente a University College London (UCL).

Comics Life

comics-life

Esta popular aplicación que ya ha llegado a su versión numero 3 permite al usuario convertir sus fotos en una historieta. Lo interesante es que sus desarrolladores la proponen como herramienta para crear proyectos escolares incluyendo manuales, reportes de libros, explicaciones de experimentos científicos, análisis de personajes  o narraciones de sucesos históricos. Comic Life es también un buen aliado para crear contenidos para portales de Internet así como para familiarizar a los alumnos en la publicación en medios digitales como blogs o para editar imágenes digitales en general.

Si bien es una aplicación un tanto costosa (30 USD aproximadamente) cuenta con un sinfín de recursos creativos incluyendo plantillas de viñetas, efectos, tipografías, captura de pantalla, así como múltiples posibilidades de interacción en redes sociales y de aprovechamiento de funciones en dispositivos móviles a los que tienen acceso los jóvenes estudiantes como tabletas y smartphones. Revisa cómo funciona y si vale la pena pagar por ella. ¿Qué opinas del tema? ¿Qué otras iniciativas educativas conoces que implementen el cómic?

No olvides revisar:


Gabriela Mejan para Maestros del Web.
Agrega tu comentario | Enlace permanente al artículo


Síguenos en: @maestros | Fan page

via Maestros del Web http://www.maestrosdelweb.com/editorial/comic-digital-educacion/

Javascript orientado a objetos

La programación orientada a objetos o POO (OOP en inglés Object Oriented Programming) es una forma de realizar aplicaciones. Javascript por defecto no es un lenguaje orientado a objetos, pero gracias a Prototype es posible usarlo de esta forma. En este tutorial veremos cómo aplicar Javascript orientado a objetos.

[nota:0c0ec15273]En este tutorial doy por supuesto que se tiene una noción básica de POO, cualquier duda acá hay más info básica: Curso de Programación Orientada a Objetos.[/nota:0c0ec15273]

Objetos en Javascript

En JS un objeto es un tipo de variable que se define de la siguiente manera:

Código :

var objeto = {'Propiedad':'valor','Propiedad2':'valor2'};

Cuando se hace POO con JS se usan funciones (ya que JS es una lenguaje orientado a funciones) de la siguiente manera:

Código :

var miFuncion = function(parametro1, parametro2) {
    this.parametro1 = parametro1;
    this.parametro2 = parametro2;
}

Luego cuando se quiere crear el nuevo objeto basado en la función definida se usa:

Código :

var miObjeto = new miFuncion('valor1', 'valor2');

Y para obtener los valores usados se hace de esta forma:

Código :

return miObjeto.parametro1;
return miObjeto.parametro2;

Eso regresaría ‘valor1′ y ‘valor2′. Hasta ahí es fácil, sin embargo esto solo no es bastante útil, ya que solo definimos propiedades al objeto y no métodos. Para definir un método se realiza con funciones dentro del objeto.

Código :

var miOtraFuncion = function(parametro1) {
    this.parametro1 = parametro1;
    this.miMetodo = function() {
        return this.parametro1;
    }
}

Y se llama al método de la siguiente manera:

Código :

var miOtroObjeto = new miOtraFuncion('Hola mundo');
miOtroObjeto.miMetodo();

Lo que regresaría ‘Hola mundo’. Una función puede tener tantos métodos y parámetros como se quiera. Ahora veamos un ejemplo un poco más útil.

Código :

var persona = function(nombre, edad, altura, peso) {
    this.nombre = nombre;
    this.edad = edad;
    this.altura = altura;
    this.peso = peso;
    this.mostrarDatos = function() {
        alert('Nombre: '+this.nombre+' | Edad: '+this.edad+' | Altura: '+this.altura+'m | Peso: '+this.peso+'kg.');
    }
    this.mayoriaEdad = function() {
        if (this.edad >= 18) {
            alert(this.nombre+' es mayor de edad.');
        } else {
            alert(this.nombre+' es menor de edad.');
        }
    }
}
var johnDoe = new persona('John Doe', 25, 1.7, 72);
var janeDoe = new persona('Jane Doe', 16, 1.63, 59);
johnDoe.mostrarDatos(); //esto muestra un alert con el siguiente contenido: "Nombre: John Doe | Edad: 25 | Altura: 1.7 | Peso: 72kg.".
janeDoe.mayoriaEdad(); //este otro muestra un alert que dice: "Jane Doe es menor de edad.".

Este código permitiría crear tantas personas como se deseen, imprimir sus datos y comprobar si es mayor de edad. La POO como se puede ver es muy útil si se la sabe aprovechar y permite ahorrarse mucho código ya que con definir una vez el tipo de objeto (persona) luego es cuestión de crear tantos objetos de estos como se quiera, con sus parámetros y métodos ya creador.

Ahora para finalizar un último ejemplo de JSOO más avanzado.

Código :

var caja = function(alto, ancho, largo, contenido) {
    this.alto = alto;
    this.ancho = ancho;
    this.largo = largo;
    this.contenido = contenido || '';
    this.meterCosas = function(objeto) {
        if (objeto.alto <= this.alto && objeto.ancho <= this.ancho && objeto.largo <= this.largo && this.contenido === '') {
            this.contenido = objeto;
        }
        else {
            alert('La caja no es suficientemente grande.');
        }
    }
    this.verContenido = function() {
        if (this.contenido === '') {
            alert('La caja esta vacía.');
        } else {
            alert('La caja contiene '+this.contenido.nombre);
        }
    }
    this.vaciarCaja = function() {
        this.contenido = '';
    }
}
var objeto = function(alto, ancho, largo, nombre) {
    this.alto = alto;
    this.ancho = ancho;
    this.largo = largo;
    this.nombre = nombre;
}
var miCaja = new caja(50,50,50);
var miObjeto = new objeto(30,40,10,'libro');
var miOtroObjeto = new objeto(40,15,52,'dvd');
miCaja.meterCosas(miObjeto);
miCaja.verContenido();
miCaja.vaciarCaja();
miCaja.meterCosas(miOtroObjeto);
miCaja.verContenido();

Como se puede ver en este ejemplo más avanzado tenemos una caja de 50x50x50 y dos objetos un libro de 30x40x10 y un dvd de 40x15x52 (tamaños raros, lo se). Lo primero que hacemos es guardar el libro en la caja, luego vemos si esta guardado, vaciamos la caja, tratamos de meter el dvd, no nos deja porque es muy grande y volvemos a ver el contenido y nos dice que está vacía.

Enviar comentario

via Cristalab http://feeds.cristalab.com/~r/clab/~3/lz3Xl_vT6BU/