Archivos de la categoría Manual

Git avanzado: Etiquetas, logs y el botón del pánico

Una vez inicializado git, conocidos los primeros comandos y aprendido a hacer ramas con git ahora toca aprender un poco sobre etiquetas (tags), logs y que hacer cuando la lías parda.

Las etiquetas sirven básicamente para etiquetar commits. ¿Y para que quiere uno etiquetar commits? Bien, pues para indicar en que momento se definió una versión de la aplicación. Para crear una etiqueta usaremos:

 git tag NumeroVersion idCommit

El id del Commit son los primeros 10 caracteres del commit al que queremos etiquetar. Te preguntarás, ¿y como se esos 10 caracteres? Pues fácil te vas al log, y para ver el log usarás el comando:

 git log

Si quieres algo más sofisticado y con menos ruido puedes filtrar por autor:

 git log --author=NombreUsuario

Sólo que archivos fueron cambiados:

 git log –name-status

O si aun así quieres ver todo el árbol con todas las ramas y etiquetas puedes usar el comando:

 git log --graph --oneline --decorate --all

En cualquier caso si quieres indagar más profundamente échale una ojeada a:

 git log --help

En el hipotético caso de que la hayas liado parda y no sepas como solucionar el problema eliminando todos los cambios locales y commits hechos trayendo la versión de la rama master más reciente. Ten en cuenta que sobre-escribirás todos tus ficheros, pero si aun así lo deseas deberás usar los siguientes comandos:

 git fetch origin
 git reset --hard origin/master

Para los que hayáis llegado tan lejos decir que git tiene incorporado algo parecido a una interfaz gráfica. Recordar que no hay para linux una GUI que permita hacer push y toda la mandanga, solo está en Mac y WIndows. Pero para acceder a su sucedáneo se puede acceder escribiendo en la consola:

gitk

Pero si aun así preferís seguir usando la linea de comandos quizás os interese colorear un poco el output con el comando

git config color.ui true

o en los logs simplemente mostrar sólo una linea por commit con:

 git config format.pretty oneline

Como crear ramas (branches) con git

Ahora que ya tenemos git inicializado  y hemos aprendido unos primeros pasos tocará empezar con unos conceptos un poco más avanzados. En este post aprenderemos a crear ramas. Normalmente los proyectos usan ramas para mantener la rama master “más limpia”, evitar commits a medias y evitar conflictos.

Para que nos entendamos la rama master es la rama principal y en las otras ramas es dónde hacemos los cambios. Para crear una rama empezaremos con:

 git checkout -b NombreRama

Como ya vimos después de aplicar los cambios en nuestra rama tocará subir los cambios al directorio remoto haciendo un:

 git push

Una vez terminados todos los cambios y dar la rama por acabada realizaremos el merge. Que básicamente es mezclar nuestros cambios con la rama master. Para esto usaremos el comando:

git merge nombreRama

Algunas veces esto ocasionará conflictos que deberemos solventar. Para ver los conflictos podemos usar:

 git diff <source_branch> <target_branch>

Y si hemos intentado hacer un “merge” que ha sido fallido debido a los conflictos deberemos volver a hacer un:

git add nombreArchivo

Una vez terminado del todo lo que podemos hacer es volver a la rama master con:

git checkout master

Y finalmente borrar la rama con el comando:

git branch -d feature_x

Cabe mencionar que la rama “no está disponible para terceros” a menos que se haga un push al repositorio remoto. Esto se puede hacer con el comando:

git push origin

Para los que les haya interesado este post sobre como crear ramas (branches) en git quizás les interese indagar un poco más en este [EN] modelo de creación de ramas con git. Haciendo un resumen rápido, tienen la rama principal, luego la rama developer y a partir de aquí crean ramas de features.

Primeros pasos con git

Como dije ya en su momento, git es un sistema de control de versiones. Ahora que ya tenemos git inicializado tenemos que aprender las posibilidades más básicas que nos ofrece.

Para empezar tendremos que crear un repositorio. Para esto usaremos:

git init

En caso de que algún colega ya tenga un repositorio lo que haremos será:

git clone username@host:/path/to/repository

 En el caso que esté alojado en github, este link lo encontraremos en el lado derecho debajo de “SSH clone URL”.

Ahora que tenemos los ficheros en nuestro ordenador, tocará trabajar con ellos. Una vez hayamos hecho el cambio que queríamos tenemos que proponer un cambio. Para esto usaremos:

git add nombreArchivo

o si simplemente queremos subirlo todo haremos

git add *

Pero para realmente remitir los cambios tendremos que usar:

git commit -m “mensaje que queramos”

 Cabe indicar que cuanto más descriptivos los mensajes mejor, ya que cuando haya conflictos nos servirá para entender mejor como debemos proceder.

Ahora después del commit, tenemos los cambios “guardados” en el fichero HEAD de nuestro ordenador. Ahora tocará enviar nuestros cambios al directorio remoto. Para esto usaremos el siguiente comando:

git push origin master

Espero que os haya servido ya que va a haber algunos más! :)

Inicializar git en Linux

Según wikipedia: Git es un software de control de versiones, pensando en la eficiencia y la fiabilidad del mantenimiento de versiones de aplicaciones cuando estas tienen un gran número de archivos de código fuente.”

1- Instalar Git

$ sudo apt-get install git-core

2- Asignar una identificación

$ git config --global user.name "Paco"
$ git config --global user.email paco@ejemplo.com

Ahora para enlazar nuestro pc con la cuenta en github.

3 – Comprobando los certificados

$ cd ~/.ssh
$ ls -al

Si con los comandos anteriores encontramos alguno de los siguientes ficheros id_rsa.pub o id_dsa.pub puedes saltarte la generación de una nueva clave SSH e ir directamente a añadir tu clave en Github, paso 5.

4- Generar una nueva clave SSH

$ ssh-keygen -t rsa -C "paco@ejemplo.com"
$ ssh-add id_rsa

Te pedirán que entres una frase de contraseña (passphrase) dos veces (guardatela).

5- Añadir tu clave SSH a Github

Puedes printar por consola el texto usando el siguiente comando:

$ cat ~/.ssh/id_rsa.pub

Y luego desde pantalla copiar el texto.

Finalmente en Github iremos a Account settings en el apartado de SSH keys y una vez allí en el campo de la Key pegaremos el output de la consola anteriormente copiado.

Para comprobar que lo hemos hecho todo correctamente podemos usar el siguiente comando:

$ ssh -T git@github.com

Como escribir un “research paper”

Escribir un “research paper” no es tarea sencilla. Ahora a mi me ha tocado escribir uno, y teniendo en cuenta que nunca antes había leído uno he tenido el doble de trabajo que mis compañeros. Primero entender que partes debe tener y luego elaborarlo. Por esto he creado mi guía.

Abstracto:

Debe contener la motivación, el planteamiento del problema, la forma mediante la cual lo intentas resolver, los resultados y las conclusiones, todo esto sin entrar en mucho detalle y ceñido entre 150 y 400 palabras.
Tiene que ser interesante y descriptivo, es el que hará que las personas decidan si continúan leyendo o no. Normalmente es la última parte en ser escrita para tener una mayor perspectiva.

Introducción:

Empieza escribiendo la introducción describiendo un poco porqué este tema es interesante y documenta un poco la historia sobre el campo. Haz un miniresumen de hasta dónde se ha llegado y que se ha conseguido en la industria.
Más info [EN]: http://www.wikihow.com/Write-a-Research-Introduction

Related work:

Este punto lo que pretende es demostrar con pocos papeles que no estas reinventando la rueda. Tienes que demostrar que has leído papeles de actualidad y que no han llegado ni indagado lo que tu vas a buscar. Lo que se recomienda es citar 3 ó 4 papeles y resumirlos en un párrafo cada uno para demostrar que estas al día en el campo.

Roadmap of the paper:

En este apartado lo que se pretende es explicar en menos de 3 ó 4 párrafos los apartados que contiene nuestro paper y que se explica en cada uno de ellos. Todo esto muy cortito.

Methods and procedure:

Finalmente en esta sección lo que haremos será presentar nuestra hipótesis. Para hacerlo lo que haremos será citar otros papeles y coger los puntos que consideremos interesantes. Luego explicaremos como haremos los tests explicando las propiedades de los ordenadores, los datos que usamos, dónde los hemos sacado… De tal modo que pueda generarse un test igual para obtener unos resultados (prácticamente) idénticos.

Results:

Los resultados tienen que ser presentados de una forma científica y cuantificable. “Poco” o “bastante” no significan nada, los porcentajes indican mucho más. Si has proporcionado hipótesis sobre distintos puntos, tendrás que presentar los datos por separado y luego comparándolos entre si para obtener el mejor resultado.

Conclusions and further directions:

La conclusión debe contener una visión mucho más concreta de nuestro paper. No debe repetir lo que ya hemos puesto al abstracto o en la introducción debe contener un punto de vista mucho más focalizados en las pruebas empíricas que hemos encontrado y haciendo referencias a apartados anteriores.
Para el trozo de las direcciones futuras, si tenemos alguna idea sobre como continuar y queremos expresarla aquí es dónde lo vamos a poner. Muchas veces cuando redactamos nuestros papers se nos ocurren muchas cosas que podríamos validar o descartar con otros papers, pero por motivos de tiempo no siempre se puede, por lo que si lo pones aquí quizás otro investigador tomará las riendas y hará investigación en esa dirección.
Si estás trabajando en un grupo de investigación, puedes poner aquí que temas estáis trabajando.

Bibliografia

Quizás a pesar de que pase desapercibido para muchos, esta sea una de las partes más importantes de cualquier trabajo. Las referencias son de gran importancia cuando se trata de validar nuestro paper. Cuando hagas uso de algún otro trabajo referencialo, asegurando así que no te lo has sacado de la manga.

Apéndices

Siempre hay partes que no sabemos dónde ponerlo en un paper, o que no serán de importancia para todos los lectores. Esto si que sería recomendable ponerlo en los apéndices.
En el caso de informática podría ser el pseudo-código anteriormente mencionado.

Bonus:
Link interesante: http://infolab.stanford.edu/~widom/paper-writing.html

Evitar la descarga de la batería teniendo el portege z930 apagado

Hace ya un tiempo me tenía preocupado ya que mi ultrabook, el problema era que estando apagado perdía batería y lo peor es que es relativamente nuevo (con menos de un año).

Buscando por internet en todos los idiomas que conozco y formulando distintas querys a Google y otros buscadores siempre encontraba los comentarios que decían eso es el que tienes el “wake up on lan” activado pero en mi caso no era así, por lo que seguía buscando sin encontrar la solución.

Finalmente opté por algo más a lo bestia para solucionar el problema, cerrar todos los servicios desde la bios que creía que podían consumir energía estando el ordenador apagado.

Para acceder a la bios en portege z930 se tiene que pulsar F2 al inicio. Y luego para evitar la descarga de la batería deshabilité los siguientes servicios:

De la pestaña de power management:

  • Wake up on lan (WOL)

  • Wake up on keyword

  • Intel turbo boost (no he notado que tarde más al iniciarse)

  • Intel display power

De la pestaña advanced:

  • Intel rapid start

  • Sleep and charge (sinceramente creo que esta “feature” era la que me consumia la bateria)

  • System on CPD charge node

  • USB Power in sleep mode

Antes de terminar comentar que tengo Lubuntu instalado (si con L).

Introducción a las expresiones regulares

Según la wikipedia una expresión regular, a menudo llamada también patrón, es una expresión que describe un conjunto de cadenas sin enumerar sus elementos.

Ayuda a encontrar elementos en un texto que coincidan con la descripción de la expresión de un modo más simple y rápido que de cualquier otra forma.

Las expresiones regulares tengo que reconocer que son algo complicadas pero cuando se entiende tiene un enorme potencial. Pero algún día hay que empezar no? Así que mejor que nos pongamos manos a la masa.

Carácteres básicos:

  • \ para mi probablemente sea uno de los caracteres más importantes. Sirve para hacer que el carácter que precede pierda su significado y pase a ser un carácter normal. Por ejemplo \* pasaría a buscar un * o \\ (doble barra invertida) pasaría a ser una sola.

  • . indica que le falta un carácter es decir ‘.asa’ puede devolver ‘casa’, ‘basa’… pero nunca ‘asa’.
  • ? indica que el elemento predecesor puede estar o no, por ejemplo ‘casa?’ Puede devolver ‘casa’ o ‘cas’.
  • * este elemento permite que el elemento anterior pueda estar desde 0 veces a infinitas, por ejemplo, ‘casa*’ puede ser ‘cas’, ‘casa’ o ‘casaaaaaaaaa’
  • + implica que el carácter al que está asociado pueda por lo menos una o más veces. Sigamos con el ejemplo ‘casa+’ puede ser ‘casa’, ‘casaaaa’ pero en ningún caso ‘cas’.
  • ^ indica que está en el principio de la cadena.

  • $ este por el contrario indica que se encuentra en el fin.

  • () sirve para agrupar un conjunto de elementos, por lo que ‘(casa)‘ pararía a ser un solo elemento ocasionando que ‘(casa)+’ pudiera devolver ‘casacasacasa‘ o simplemente ‘casa’.
  • | (barra vertical) sirve para marcar una ‘o’ (para los programadores seria el equivalente a una or). Por ejemplo ‘(casa|hogar)’ puede devolver ‘casa’ o ‘hogar’, en ningún caso ‘casahogar’.
  • [] los corchetes brindan la posibilidad de escoger entre uno de los elementos que están en su interior. Se pueden marcar rangos usando el guión medio. ‘[a-z]‘ nos puede devolver cualquier letra minúscula de la ‘a‘ a la ‘z‘.
  • {} puede contener uno o dos números separados por una coma. Vendría a ser el elemento propio equivalente y de uso idéntico a ?, +, * pero personalizado. Por ejemplo ‘{2, 7}‘ quiere decir que el elemento se puede repetir mínimo dos veces pero con un máximo de 7. Con ‘{7,}‘ indicas que de 7 hasta infinito.

Mi primera expresión regular pensada íntegramente por mi y que funciona, sirve para encontrar las url de un texto.

(https?\:\/\/)*[0-9a-zA-z\-\_\.]+\.(com|es|net|org|info)\/*[a-zA-z\-\_\.\/]*

 Pero vamos a verla por partes:

 (https?\:\/\/)* => Este trozo indica que tiene que usar el protocolo ‘http’ o ‘https’ (de aquí el interrogante después de la ‘s’ juntamente con \: para indicar que van los dos puntos y \/ dos veces esto para señalar que quiero una barra normal.

[0-9a-zA-z\-\_\.]+ => esto sería el cuerpo de la url antes de la extensión. Puede constar de uno o más elementos en minúsculas, mayúsculas, números guiones o puntos (subdominios).

\.(com|es|net|org|info) => indica que ahora consta de un punto seguido de una de las extensiones com, es, net, org o info.

\/*[a-zA-z\-\_\.\/]* => y finalmente brinda la posibilidad de que sea un subdirectorio

Manual sobre “Open Graph Protocol”

Hasta hace poco Facebook “escaneaba” la página y con ella extraía los elementos que consideraba más interesantes, como el título, un breve resumen del sitio, un vídeo o una imagen si existían, etc. Con “Open Graph Protocol” puedes definir en cualquier página web el valor los elementos del objeto que se muestra en Facebook. Lo que resumiendo sería que si pones esto el usuario al compartir (o darle like) a tu página posiblemente mostrará más información que antes.

En este link podéis encontrar un vídeo (en inglés) sobre Open Graph Protocol, explicado por uno de los ingenieros de Facebook (tiene mucho acento indio, espero que no os cueste entenderle).

Estas “metas” se ponen dentro del head de la página. En los ejemplos lo ponen justo debajo del tag <title> yo lo pondría después de las meta “normales”, aunque cada cual que lo ponga dónde más le guste.

Probablemente las que vayas a necesitar estén dentro de este listado:

<meta property=”og:title” content=”Manual Open Graph Protocol”/>
<meta property=”og:url” content=”http://rocreguant.com/Manual-sobre-Open-Graph-Protocol”/>
<meta property=”og:description”content=”Brebe introducción sobre Open Graph protocol (impulsado Facebook), para implementarlo de forma simple en cualquier sitio web.”/>

Luego también se puede añadir metas como imágenes o vídeos (estos ejemplos han sido sacados de la web oficial)

<meta property=”og:image” content=”http://ia.media-imdb.com/rock.jpg”/>
<meta property=”og:video” content=”http://example.com/bond/trailer.swf” />

Pero esto no termina aquí! Utiliza Open Graph Protocol para que Facebook trate tu URL como una Fanpage! ([EN] fuente)

Esto lo puedes conseguir añadiendo una de las siguientes lineas de código.

<meta property=”fb:admins” value=”USER_ID1,USER_ID2″ /> (dónde USER_ID2 y USER_ID2 serian los administradores)

O bien usando:

<meta property=”fb:app_id” value=”1234567″ /> (dónde value sería el ID de vuestra app en facebook)

Con esto podrás acceder a tu panel de analytics como el de las Fanpages, en el que te muestra los usuarios activos diarios, los likes, los nuevos usuarios…

Para más información podéis consultar la web oficial de Open Graph Protocol.

Bonus: Lo que se comenta en las altas esferas es que puedes usarlo para “engañar” a Facebook. Por ejemplo, tu haces un vídeo relacionado sobre el post que has escrito pero sin ponerlo como embedded. Lo pones como meta, y la gente al darle al like a la página sin vídeo comparte el vídeo. (link black)

10 formas de obtener más feedback de tus clientes

Aprovechando un whiteboard friday de SEOmoz http://www.seomoz.org/blog/top-ten-ways-to-get-more-customer-feedback-whiteboard-friday traduzco lo que dice la chica y así me queda para la posteridad. Me parecieron bastante buenos y algunos no se me habrían ocurrido.

 

  1. Tickets de ayuda (help tickets) es el primer sitio por el que empezar. Que dicen los usuarios? Que te recomiendan? Que no les gusta? No lo desaproveches!

  2. Encuestas. Preguntas directamente a los usuarios lo que quieras. Normalmente suelen tener el mismo estilo, por no decir que siempre puedes preguntar lo mismo.

  3. Reseñas, aprovecha todas las reseñas que hagan tanto de tu empresa como de tu producto. Las puedes encontrar en la blogosfera, en Linkedin, Facebook… Sólo tienes que buscar.

  4. Pregunta en persona. Quizás algo parecido a la de las encuestas. Pueden parecer algo anticuadas pero la cuestión es que sirven. Puedes preguntar en cenas de negocios, eventos o simplemente cogiendo el teléfono y llamando.

  5. En los comentarios del blog de la empresa, puedes preguntar en las entradas o no, aunque esto no evitará que tus clientes quieran comentar y decir lo que piensan. Leelos y dales feedback.

  6. Pide recomendaciones para las características de tus productos. Con esto puede que te comenten algunas cosas a implementar con las que no habías pensado pero muchos quieren. Ya vas sobre seguro, ya sabes que por lo menos a alguien le va a gustar.

  7. Pide el motivo por el cual cancelan el servicio. Seguro que lo has visto alguna vez, servicios web que te piden que indiques el motivo por el que te quieres dar de baja. Es bastante útil porque te ayudará a saber lo que tienes que mejorar. Aunque mucha gente no lo rellenará habrá personas que si.

  8. Preguntas “aleatorias”. Preguntar que describan la marca con una sola palabra o cosas de estas que quizás son algo más abstractas.

  9. Enseñar mejoras a un determinado grupo de gente. Lo que propone en este punto es coger a un grupo de gente representativo, ponerlos en contacto a todos para que puedan mantener una conversación y enseñarles nuevas funcionalidades mientras escuchas lo que dicen.

  10. Pregunta a la empresa. No siempre todo tiene que partir del exterior, puedes preguntar a otros departamentos para mejorar, ellos seguro que ven las cosas de otro modo que te podrán ayudar.

Espero que os haya gustado, si tenéis alguna otra forma se agradece que se diga en los comentarios 😉

Generar frases aleatorias en el header de nuestro WordPress

Hace tiempo vi algunas webs que tenían frases aleatorias en el header del blog. Y la idea me gustó, así que me la anoté. Ahora por fin he tenido algo de ganas y tiempo para llevarla a cabo y escribir su post correspondiente 😛 Empecemos!

Primero por la programación, añadiremos la función al archivo functions.php de nuestro theme de WordPress y luego ejecutaremos la función en el header de nuestro blog. Vamos a ver lo más detallado.

El código que va a functions.php:

function frases() {

$frase[0] = “Hola a todos”;

$frase[1] = “Adios a todos”;

$frase[2] = “me gustan los árboles”;

$cantidad = count($frase)-1;

echo $frase[rand(0,$cantidad)];

}

Como veis es de lo más sencillo. Simplemente tenéis que cambiar las frases ya existentes y si queréis poner más teneis que añadir $frase[3] = “nueva frase”; cambiando el 3 por los números adecuados.

Vamos a cambiar el header ahora. Dentro del hgroup y debajo del <h2> he puesto esto:

<div align = “right”> <?php frases()?> </div>

El frasesm es la clase que he creado para el CSS (explicado más adelante) y el frases() es la función que se ejecuta para obtener las nuevas frases.

La nueva clase CSS, tengo que decir que ha sido lo que me ha costado más ya que no estoy habituado a ello. El código:

.provarara { position: absolute; top: 80%; left: 0; width: 100%; color: white; font: bold 24px/45px Helvetica, Sans-Serif; letter-spacing: -1px; background: rgb(0, 0, 0); background: rgba(0, 0, 0, 0.7); padding: 0px; padding: 0 2px; background: none; }

Decir que todo es cambiable y no lo voy a explicar todo, básicamente he ido probando cosas para adaptarlo. Aun estoy probando así que puede ser que cuando leas esto el código sea otro.

Creo que con esta modificación y algunos plugins que le añadiré doy mi blog por tuneado durante una temporadilla.

Fuentes: http://forobeta.com/wordpress/28315-poner-frases-rotatorias-header.html y http://www.cssblog.es/ejemplos/bloques-texto-imagen/ejemplo_bloque_texto_imagen.html

PD: Finalmente no he modificado demasiado. Aunque espero que os sirva 😉