Resumen Iniciador Granada con Carlos Blanco

Carlos Blanco en Iniciador Granada

Carlos Blanco en Iniciador Granada. Presentando @miguelfc

Ayer acudí a mi primer Iniciador Granada y me quedé gratamente sorprendido.

No era mi primer Iniciador. En mi etapa en Madrid acudí en varias ocasiones a Iniciador y otras veces “asistí” vía streaming.

Lo que vi, y viví, ayer superó todas mis expectativas con creces. El aforo estaba completo… y había una buena cantidad de gente de pie (creo que fácilmente alcanzamos los 100).

Carlos Blanco nos dio “regaló” una charla interactiva sobre los errores de los emprendedores. Casi todos lo errores que se comentaron estaban recogidos en su libro “Los principales errores de los emprendedores“.

Entre todos los errores que se comentaron y discutieron destacar:

  • Reparto de acciones a partes iguales: si nadie trabaja las mismas horas que otro y/o arriesga más que otro, es un error que todos tengan las mismas participaciones de una sociedad. Tarde o temprano pasa factura. Eso no quiere decir que los sueldos puedan ser iguales. Ser socio y ser trabajador son cosas distintas.
  • Pacto de socios: siempre es necesario. Hay que tenerlo hecho por si la empresa va muy mal… o muy bien. No tenerlo bien hecho puede romper amistades y hacer que la cuenta de resultados de tu abogado engorde. Mucho “ojito” con todas las cláusulas. Hay que leerlas con imaginación dañina.
  • “Tengo una buena idea única”: esta afirmación da mucho miedo e indica lo “verde” que esta un emprendedor. Primero porque de “buena idea“s está el cementerio de start-ups hasta arriba. Aquí en España lo que funciona es el copycat. La innovación disruptiva da muuuchooo susto.  Respecto a “única“, primero busca bien en google. Lo normal es que exista alguien… y sino, puede que tu idea haya sido descartada o no la quiera el mercado.
  • Despedir tarde: no despedir a tiempo a un empleado desmotivado o con problemas puede arrastrar  tu compañía a la muerte. Hay que ser objetivo, marcar unas métricas y aplicar el despido cuando no se cumpla. Hay que tener cuidado con el “tonto con ganas” ya que “te la puede liar y mucho” aunque tenga toda la motivación del mundo.
  • Equipo: es principalmente lo que mira un inversor. Que estén a full-time, que arriesguen y que se complementen son las principales cualidades a desear. De nada vale un producto con gran potencial hecho por tres informáticos si ninguno de ellos, ni tiene experiencia ni cartera de clientes para venderlo.

Seguro que me dejo algún error más en el tintero y por supuesto que hay muchísimos más ahí fuera. Si estuviste en este Iniciador y quieres aportar algo, ¡adelante!

Concluir que ha sido uno de los mejores (puede que el mejor) Iniciador al que he asistido y encima es un orgullo que sea en mi ciudad, Granada.

Hay que agradecer el gran esfuerzo que gente como Miguel (@miguelfc, @SpiralStartups), Rául (@hhkaos) y otros tantos han hecho por crear esta gran comunidad.

Queda muy patente que en Granada hay emprendedores con muchas ganas.

Ahora toca ampliar el ecosistema con la celebración de Betabeers Granada. En pocas palabras, Betabeers es el Iniciador para programadores, diseñadores… y emprendedores que necesiten perfiles técnicos para complementar su equipo.
Hay que sacar a la palestra el talento #madeInGranada.

Por último desearle toda la suerte del mundo a Miguel en su nueva etapa. Espero que siga muy vinculado a Iniciador Granada.

¡Nos vemos en el próximo Iniciador Granada!

LiteIDE: mi IDE preferido para Go

Después de probar y estudiar Go (aka Golang) desde el día que nació sobre el 2009, he vuelto a retomarlo para el desarrollo de pequeños proyectos web/API. Me ha empujado a volver a usarlo la constante mención sobre Go en Hacker News. Raro es el día que no aparece una empresa o start-up que ha empezado a usarlo para bajar la factura de servidores y watios.

En su día analicé algún que otro IDE para Go que estaba interesante.

Lo cierto es que hoy en día Go ha evolucionado mucho y lo mismo ha ocurrido con los IDE asociados.

De entre todos lo que he probado (Goclipse, Go-IDE y LiteIDE) me quedo con LiteIDE.

Las razones son:

  • Cross-platform (GNU/Linux, Windows y Mac OS X)
  • LGPL
  • Modular
  • Sencillo
  • Ligero
  • Integra perfectamente el entorno (algo particular) de Go.

 

Ahora queda empezar a hacer Apps Go-fabulosas:)

 

[TIP] Formatea la salida JSON de CURL

Si estas acostumbrado a trabajar con JSON, backends y demás palobrotos seguro que habrás usado cURL para obtener paquetes JSON.

La salida que cURL da no viene formateada, simplemente la muestra tal y cómo el backend lo devuelve.

Si el paquete que esperas tiene un cierto tamaño, esto puede ser un poco lioso.

El módulo de Python json tiene una utilidad para formatear JSON, luego me he creado una función BASH que añado a mi .bashrc y que me ahorra fallos y dolores de cabeza.

function jcurl() { curl $@ | python -m json.tool; }

Para añadir esta función a tu .bashrc

 echo "function jcurl() { curl \$@ | python -m json.tool; }" >> ~/.bashrc

Django, DRY y el client-side

Por sí alguien no lo sabe, Django es un potente framework para el desarrollo de aplicaciones web en Python.
Sigue al pie de la letra la filosofía DRY (Don’t Repeat Yourself).

La verdad es que hace honor al lema, pero como backend que es, entra muy poco en lo relativo al client-side.
Aunque Django se usa como backend de aplicaciones móviles (recomiendo Django REST framework) o incluso como backend para aplicaciones nativas (alguna he hecho con C++/Qt4), la realidad es que el grueso de aplicaciones cliente/servidor hechas con Django son web.

Me he dado cuenta que donde más tiempo invierto a la hora de hacer una webapp es en escribir la lógica JavaScript. A pesar de usar mis propias librerías JS, jQuery, Handlebars y demás herramientas de última tecnología, aun tengo que crear mucho código JS para comunicar vía Ajax. Sin duda no cumple con el principio DRY. Harto de esta situación de ineficiencia me puse a buscar paquetes Django que me ayudarán en esta guerra.

No he encontrado una gran variedad, pero he descubierto un paquete en Github que aunque lleva un año sin recibir actualizaciones cumple con gran parte de lo que quiero.

El paquete se llama Django-puzzledev-jom y es fruto de un estudio universitario de lo que llaman SSMVC (Symmetric Synchronized Model View Controller).

Este paquete crea una serie de ficheros JavaScript para cada uno de los modelos que quieras que sean exportables. Importando estas clases en tu client-side, se hace trivial cualquier tarea CRUD.

Esta es la teoría. En la práctica me he dado cuenta de que aun le falta mucho por pulir. Aún esta lejos de alternativas en otras plataformas como ASP.Net o GWT.

Entre otras cosas. aún esta verde la generación de código JavaScript. Una de sus principales carencias es la inclusión de validadores. Esta tarea es más o menos trivial, ya que conociendo los tipos de datos, añadir una expresión regular para comprobar lo que debe ser un email, un télefono o un dato requerido, no debe ser muy complicado.

Es muy probable que acabe haciendo un fork de esta libreria y mejorarla a mi antojo.
Creo que puede ser una buena inversión de tiempo para agilizar los futuros desarrollos.

 

Mis pasatiempos para vacaciones

Eres un frikazo

Eres un frikazo

Hoy comienzo las anheladas vacaciones:)

Durante este mes quiero hacer muchas cosas para relajarme: piscina, una vuelta por ahí, viajes “conocidos”, ir al cine (no creo que mucho, ni esta la cosa como para ir mucho ni lo que hay en cartelera lo merece).  En resumen, lo típico que hace cualquier “nota” que tiene la suerte de estar empleado.

Pero… one more thing!

Un mes entero haciendo las cosas típicas de las vacaciones de verano puede ser mucho para mi, luego me llevo conmigo unos “pasatiempos” (por llamarlo de alguna forma) especiales:

  • Actualización de una App (iOS & Android).
  • Dejar casi lista otra App (Android).
  • Pruebas y paso a producción de una WebApp.
  • Montaje de mi impresora 3D, Prusa i3 (si es que me llega en este mes).
  • Diseñar prototipo de enchufe “inteligente”.

Uff! Visto así parece que lo que voy a hacer es un Ironman xD

¿Podré con todo? Lo veremos después de las “vacaciones”.

Quirks del kernel Linux

Lo primero, ¿sabes lo que es un “quirk“?  Según el traductor, tiene varias acepciones como capricho o peculiaridad. Es esta última acepción de la que vamos a hablar.

Linux tiene código “quirk” (peculiaridades) para ciertos dispositivos concretos.

Esto se debe a que hay muchos dispositivos que aunque tienen funcionalidades en común, incorporan “peculiaridades” que deben ser tratadas para explotar al máximo el dispositivo. Un ejemplo claro son los teclados con teclas multimedia o esos joysticks enormes que se emplean en los simuladores de vuelo.

Os voy a poner un ejemplo con un dispositivo de interfaz-humana (HID) al que vamos a intercambiar la funcionalidad de dos de sus teclas.

Como sabéis, cada dispositivo USB tiene asociado un par de códigos que representan un código unívoco de producto (identificador de fabricantes e identificador de producto). Cuando un dispositivo HID USB se conecta al sistema, el kernel busca si tiene asociado algún quirk, y si procede, aplica el “remapeo” de eventos.

Un fragmento de hid-belkin.c para un teclado Belkin.


static int belkin_input_mapping(struct hid_device ∗ hdev, struct hid_input ∗ hi, struct hid_field ∗ field, struct hid_usage ∗ usage,unsigned long ∗ ∗ bit, int  max)
{
unsigned long quirks = (unsigned long)hid_get_drvdata(hdev);

    if ((usage >hid & HID_USAGE_PAGE) != HID_UP_CONSUMER || !(quirks & BELKIN_WKBD))
          return 0;
    switch (usage >hid & HID_USAGE) {
          case 0x03a: belkin_map_key_clear(KEY_SOUND);
          case 0x03b: belkin_map_key_clear(KEY_CAMERA);
          case 0x03c: belkin_map_key_clear(KEY_DOCUMENTS);
          default:
          return 0;
    }
    return 1;
}

¿es fácil de entender no? El código “mapea” tres eventos distintos a los códigos de kernel correspondientes a las teclas KEY_SOUND, KEY_CAMERA y KEY_DOCUMENTS.
Esta función de “mapeo” se ejecuta después de que la función “probe” del driver sea positiva y se haya obtenido la tabla de usos del dispositivo USB HID.
Dicha función de “mapeado” se aplica para cada uno de los códigos que reporte el dispositivo. Si os fijáis, cuando se produce un intercambio el código de retorno es 0.
Se devuelve 1 si no hay alteración (como puede ser el caso de la tecla ‘a’).

Si tenéis curiosidad veréis en que en todo el kernel hay numerosos “quirks” a todos los niveles.

 

WhatsApp deberia de tener notificaciones específicas según mensaje

¿Habéis recibido muchos mensajes de WhatsApp con un simple “ok”? A mi me desespera tener que mirar el móvil cuando escucho la notificación de un nuevo mensaje y saber que es un “ok” o un “vale”.

Creo que una característica nueva sencilla de añadir seria poder seleccionar un sonido para un mensaje específico. Esto puede ser muy útil para escenarios en el que no puedes ver el móvil pero puedes escuchar fácilmente la notificación.

Yendo un poco más lejos, se podría incluso usar el sintetizador de voz o Siri para reproducir esos mensajes.

Me pregunto si la competencia lo tendrá en cuenta.

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 323 seguidores