Publica tu how-to

Dinos como hacer lo que sabes hacer, mándanos un email a wdonet@gmail.com y lo publicamos (dos días máximo) o si te interesa unirte al equipo de redactores, también háznoslo saber por correo.

GIT - Vista Rapida Comandos

Para crear un Branch
git checkout -b newLocalBranch
git push -u origin newLocalBranch

Uso de checkout
branch (cambiar de branch a branch):
     git checkout remoteBranch
Para restaurar al archivo original (olvidar cambios):
     git checkout path/local/file

Watering - traerte los cambios del branch origen a tu branch actual 
git merge origin/master --no-commit
git commit  -m"watering"
git push

Cherry pick - traerte los cambios de un commit a tu branch actual
1. git cherry-pick #hash
2. git push

Hacer un merge de un branch sobre master (o el origen de donde surgio el branch)
git checkout {upstream-branch-name}
git pull
git merge --squash --no-commit origin/{branch-to-merge}
git commit
mvn clean install
ant test.js.all
git push

Borrar un branch
git branch -rd origin/remoteBranchName (forzar a borrarlo cuando no tienes una copia localmente)
or
git branch -D localBranchName
git push origin :remoteBranchName

Esconder cambios con stash
ver lista de cambios escondidos:                         git stash list
ver cambios de un elemento de la lista:              git stash show stash@{#}   
esconder cambios como uno en la lista:              git stash save "Some stash message here”
aplicar cambios al branch sin borrar de la lista:   git stash apply stash@{#}
aplicar cambios y eliminarlos de la lista :            git stash pop stash@{#}
borrar un elemento de la lista :                            git stash drop stash@{#}
borrar todos los elementos de la lista:                 git stash clear

Revertir cambios de un branch remoto (o ya pusheados)
git revert #exactlyTheRemoteHashOfInterest —no-commit

Resetear cambios del branch local (commiteados pero no pusheados)
1. buscar el #hash previo (no el hash que estas interesado en resetear, sino uno antes)
git log
2.1 resetear (todos los commits van a ser devueltos a la bandeja de unstage - antes de comitear)
git reset #localHash
2.2 O tambien puedes deshacer el commit N (con HEAD~N) y perder los cambios (con --hard)
git reset --hard HEAD~1
2.3. Si quieres deshacer cambios pero no perderlos (que por default usa --soft)
git reset HEAD~1

Patron de Diseño Command

El patrón comando permite que solicitudes del cliente sean encapsuladas como objetos, indicar parámetros a diferentes solicitudes, encolarlas, registrarlas y hasta dar soporte para operaciones des-hacer.



Participantes:
  1. invocador (invoker) - el que almacena las ordenes y las manda ejecutar.
  2. cliente (client) - el que proporciona la orden al invocador.
  3. receptor (receiver) - aquél que en verdad realiza la acción que se mandó a ejecutar
  4. comando (command) -la orden que relaciona al invocador con el receptor de manera general
  5. comando concreto (concrete command) - la implementación para la ejecución de la orden (es más específica)

Ejemplo:
  • El consumidor (cliente) da órdenes (comandos) a un mesero (invocador), el cuál las apila para después pasarla al cocinero (ejecutar la acción).  El cocinero (receptor) entonces realiza la acción.
  • El usuario abre su programa favorito (cliente) , da clic sobre el contenedor de comandos llamado "menú Archivo" (invocador) y después sobre abrir archivo (comando), el cual abre una segunda ventana para indicarle de que archivo se trata (receptor). Cada opción del menú archivo ejecuta una acción que es un comando parametrizado.
Consecuencias:
El objeto que invoca el comando y el que lo realiza están des-acoplados. El invocador no tiene por que saber de que forma se ejecuta la acción.
Los objetos comandos se pueden extender usando patrones como Composite y Memento.
Es fácil agregar comandos porque no tienes que modificar las clases ya hechas.

Decisiones de diseño:
  • Cuando quieras parametrizar objetos que realicen una acción determinada
  • Cuando necesites encolar y ejecutar una serie de solicitudes en diferentes momentos
  • Si deseas mantener un historial de ejecuciones para así permitirte des-hacerlas, también es sencillo logear cada proceso de manera que si falla el sistema, se pueda saber en que punto quedó para una restauración manual.

Aceleración del Emulador Android en Linux

Apenas me estoy metiendo a jugar un poco para programar en Android y me topé con el problema de que el emulador va lentísimo en Linux. Cabe notar que el Android SDK Manager tiene un paquete que menciona la aceleración del emulador en Intel, pero explícitamente dice: "NO SOPORTADO EN LINUX". Lo cual no significa que todo esté perdido ;-)

Investigando me topé con este hilo en stackoverflow: http://stackoverflow.com/questions/1554099/slow-android-emulator

Que hace referencia a esta información del sitio de Intel: http://software.intel.com/en-us/blogs/2012/03/12/how-to-start-intel-hardware-assisted-virtualization-hypervisor-on-linux-to-speed-up-intel-android-x86-gingerbread-emulator

En resumen, hay que instalar Qemu (para virtualización en Linux usando KVM), y puesto que el emulador de Android se basa en Qemu, es sólo cuestión de ligarlos.

Hecho eso, se puede crear un AVD que utilice como CPU/ABI un Intel Atom (x86), y que al emular se debe usar el host del GPU. Si emulas vía la consola, debes usar emulator-x86 con las opciones -qemu -m 2047 -enable-kvm

Voilá, tu emulador debería de volar ahora...

Issues con los que me topé:
-Al instalar los módulos del kernel de KVM hay que asegurarse que la virtualización no esté deshabilitada en la BIOS. (Y ya con esto tengo para virtualizar lo que quiera! suelo usar virtualbox, luego jugaré con esto también :D )
- No hay que olvidar que se debe instalar también la imagen Intel X86 en el Android SDK Manager

Hacer Push de un branch local a un repositorio Git remoto

Tan simple como usar git push con el nombre del branch.
Digamos que tenemos un branch plugin que queremos subir al repositorio origin:

git push -u origin plugin

El parámetro -u permite crear un upstream en donde sea que bajemos este branch desde origin, de forma que hacer push/pull sea mucho más sencillo.

Para bajar este branch desde el repositorio, bastaría hacer:

git fetch origin

[Git nos informará que se ha creado un nuevo branch, origin/plugin]

git checkout --track origin/plugin

Con esto cambiamos al nuevo branch, y además le damos seguimiento para hacer actualizaciones de manera rápida y sencilla cuando hagamos push.