26 de marzo de 2014

Create a global GIT hook to check Flake8 before each commit

First, let's install Flake8:




Note It is important to set the right version when installing Flake8, as there there are some versions that are bugged and will prevent the GIT hook to work (like the 2.1.0 version).

Now, let's setup global git commit hooks:

1. Enable git templates:



This tells git to copy everything in ~/.git-templates to your per-project .git/ directory when you run git init

2. Create a directory to hold the global hooks:



3. Write your hooks in ~/.git-templates/hooks.

For example, here's a post-commit hook (located in ~/.git-templates/hooks/post-commit):



4. Make sure the hook is executable.



5. Re-initialize git in each existing repo you'd like to use this in:




NOTE if you already have a hook defined in your local git repo, this will not overwrite it.

Now, let's create a global git pre-commit hook:


Finally, let's take it for a spin!

Go to some of your repos and re-initialize it to take the pre-commit hook:


Now edit some of your Python files, introducing some violation (like a >80 columns line, only one blank line between function/class definitions, etc.) and try to commit it:


Voilà!



8 de enero de 2014

Custom sorting function as parameter to sorted() in Python


So, I am working with Python and I come across a list of image names,  and I'd like to have them sorted. So, I call the sorted function with this list:



HA! It doesn't work as I would have liked it to. So, what can we do to achieve the sorting of the list as we want it?

Python's standard library sorted function, as you can see here, has an optional cmp parameter, through which you can pass a custom comparison function.

Going back to my example, I needed the images to be compared by the number in their name. I made this little function to achieve this goal:



And now let's put altogether:



TA DA!

27 de noviembre de 2013

How to setup you repo GIT and local instance (like for GitLab) and not to fall in despair

How to setup you repo GIT and local instance (like for GitLab) and not to fall in despair

For a while now, while collaborating with several projects, I noticed that having issues to generated and setup the public keys and configuring the access to GIT repositories was giving a bit of a harsh time to lots of people.

And when in comes to recurring problems there’s nothing better suited than a little reference tutorial to blaze the trail. So, let’s get to it!

#1: generate your SSH key-pair and set it up


Step #1: Check if you don’t already have a key pair


Open a terminal and run the following command:

1
2
3
cd ~/.ssh
ls
# Lists the files in your .ssh directory



Check the directory listing to see if you have a file named either id_rsa.pub or id_dsa.pub. If you don't have either of those files go to step 2. Otherwise, you already have an existing keypair, and you can skip to step 3.

Step #2: Generate new SSH keys

To generate a new SSH key, enter the code below in the terminal. We want the default settings so when asked to enter a file in which to save the key, just press enter.

1
2
3
4
5
$ ssh-keygen -t rsa -C "your_email@example.com"
# Creates a new ssh key, using the provided email as a label
# Generating public/private rsa key pair.
# Enter file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]
ssh-add id_rsa





Now you need to enter a passphrase.

1
2
Enter passphrase (empty for no passphrase): [Type a passphrase]# Enter same passphrase again: [Type passphrase again]



Which should give you something like this:

1
2
3
4
Your identification has been saved in /Users/you/.ssh/id_rsa.# Your public key has been saved in /Users/you/.ssh/id_rsa.pub.
# The key fingerprint is:
# 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com



Step #3: Add your SSH key to GitLab

  1. Go to your account settings:
  1. Now go to the SSH keys section:

  1. Click “Add SSH key”
  1. Give it a title you like (in the “Title” field) and paste your public key in the bigger “Key” field:
  1. Click “Add key” and we are done with loading the SSH public key in GitLab!

Step #4: Check everything worked

Now we should have the key pair generated and set up locally and the public key loaded in GitLab. Let’s now make sure this is the case and that everything went fine.

To achieve such a certainty, run the following command:

1
$ ssh -T git@git.santexgroup.com




If everything went well, you should see an output like this:

1
2
$ ssh -T git@git.santexgroup.com
Welcome to GitLab, !




#2: Some extra hints

Now we have the keys and our GitLab repo set up and ready to work. Now you should be able to clone, push/pull and do all sorts of thing with your GIT repos without being prompted for your username and password. If GIT, after making a command, asks you for your username or password, it means something at some point went wrong.

Go back and make sure you didn’t miss any steps or ask someone for help.

Done with this and want to learn some new tricks? Take a look at this link!

Hope this saves you of annoyances and frustrations in the future!

14 de noviembre de 2013

Python Violations Tool: Check

Si bien seguramente cada uno ya tiene sus herramientas para chequear violaciones en código Python, esta puede ser de utilidad, check.

Correr pep8 y pyflakes en tódos los archivos que queramos:
check.py models.py tests/
Lo que tiene de novedoso/útil, es que sirve para verificar los errores introducidos sólo por nosotros basándose en el VCS, sin tener en cuenta las violaciones ya existentes en el código.

Para GIT, se puede agregar un pre-commit hook, para que aborte un commit si introdujimos errores: use-as-a-git-pre-commit-hook

Ejemplo
$ git commit -a -m"Test"
test_module.py:2: redefinition of unused 'logging' from line 1
test_module.py:42:1: E303 too many blank lines (22)
test_module.py:487:1: W391 blank line at end of file
Aborting commit.  Fix above errors or do 'git commit --no-verify'.

Instalación

# Después de crear el archivo pre-commit:
$ chmod 0755 .git/hooks/pre-commit

Saludos!

5 de noviembre de 2013

List merge conflicts with GIT


Made a merge, particularly, a big one and you want to know which where the files that had conflicts?

Then, this command might come handy:



You can also make a GIT alias this way:



and then use it like this:

4 de octubre de 2013

Ding! "El comando está listo"

Buenas!

A pedido de Mati les comparto algo simple pero tal vez útil!


Cansado de fijarme a cada rato si un comando que tarda mucho terminó o no, hice una función "beep" en sh:

$ beep  # Reproduce sonido de "éxito"
$ beep command arg1 arg2 ... # Reproduce sonido de éxito si command termina con éxito, sino sonido de fallo

Para usarlo tienen que poner este código en "./bashrc" o "./bash_profile", y la próxima vez que abran una consola lo van a tener disponible.

Obiamente pueden cambiar los sonidos que se ejecutan en cada caso a gusto, el primero es el de éxito y el segundo el de fallo.

Faltaría mejorarlo para que tome una sequencia de comandos.

UBUNTU




MAC



Saludos!