March 13th, 2010 by Rodrigo
I have this code I’m working on that is needs to be deployed remotely (Fabric makes this SO easy) and I’m using git as my version control system. Well, I was creating tarballs for this, but I was basically doing them as similar as I could to what git had in the tree (ignoring the same files, etc.), so it was kind of repetitive and, boring. Well, git to the rescue!!!
git archive --format=tar HEAD | gzip > myproject.tar.gz
And you have a nice clean zipped tarball of your code as is on HEAD, without tears
Git is awesome!
March 9th, 2010 by Rodrigo
Don’t you wish you just could type the text of a link and then press enter to follow it on a web page? It would save tons of time! Well, there is a chrome extension that allows you to do that. My favorite extension to date by far.
Chrome type ahead
Enjoy
February 25th, 2010 by Rodrigo
I had this use case where I have to check which elements of a list of words where available in another list of words. So I decided to use the operator in. Just for further reference a tried the following:
# common code for all test
base_list = [...]
query_list = [...]
- Pretty simple method:
for word in query_list:
if word in base_list:
# do something
For a list of 4284 elements against a list of 107 it took 9 seconds. Using simple lists, this method is the most straight forward of all, and also the slowest one.
- Sorting things:
base_list.sort()
for word in query_list:
if word in base_list:
# do something
After sorting the list, guess what? Yeap, nothing changed, same 9 seconds
- What about sets?
bs = set(base_list)
for word in query_list:
if word in bs:
# do something
Using sets this is another history, 0.6 seconds for the same amount of data; but… if this could be achived turning one of lists into a set, what if…
- Using more sets
bs = set(base_list)
qs = set(query_list)
solution = bs.intersection(qs)
0.02 seconds.
Well, as you can see, sets are great.
January 23rd, 2010 by Rodrigo
I’m sure you have noticed the fact that this website has changed (if not, welcome!). Well, there was some issues with the previous one and after fixing the code I was completely unable to make it work again, there was some problems with python + django + mysql, very very weird (process forking, memory issues and alike), so I sadly ended giving up and installing the only blogging system made in php (or in some other language) that I would change for the one made by myself: wordpress. I have to say that it’s really nice in it’s latest incarnation
I’ll try to update my blog a little bit more often, so stay tunned.
October 2nd, 2009 by Rodrigo
I think awesome wm is, well awesome. I tried the last rc but I found that all the tags were set to the floating layout by default, so digging through the internet I found these bug that is exactly what was happening to me:
For the lazy ones, here is the solution:
Change:
tags[s] = awful.tag({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, s)
to:
tags[s] = awful.tag({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, s, layouts[1])
taken shamelessly from the ticket.
July 2nd, 2009 by Rodrigo
I updated my laptop a few days ago and suddenly it failed to shutdown correctly, it powered down but without finishing the shutdown process. Today, while reading the spanish users mailing list I found the solution.
In /etc/conf.d/alsasound, set:
UNLOAD_ON_STOP=”no”
KILLPROC_ON_STOP=”no”
This fixed the problem. Here is the original thread
June 23rd, 2009 by Rodrigo
Well, I’ve been doing an internship at a known internet company and it has been an awesome experience. I’ve learned quite a lot, I had an amazing host and a very supportive team. Now I’m on my way back home, and there’s nothing like a couple of hours in an airport to raise the blogging enthusiasm.
I worked with java, that language that I didn’t like too much because, as on of my friends at work said, there is too much plumbing needed to do anything. But, now I feel more respectful to the java camp, and definitely I’m going to keep writing some code in java, after all, if you consider that skills are based on real production code written, java would be my “main” language. (Although is hard to admit)
I did practice some elisp, and I realized tahat even with cool IDE’s with pretty nice features, nothing beats emacs at manipulating text files. Changing editors is a very hard topic, you have to deal with muscle memory and such, and then you found thos little things you take for granted as… how to move.
Well now is time to go back, to my girlfriend and my family!
May 17th, 2009 by Rodrigo
Take a look at this screencast. Just amazing, I found it while reading the emacs wiki page of cedet.
March 10th, 2009 by Rodrigo
While writing a django app, I faced the tedious task of updating the corresponding admin.py file for the models I was writing. Because I didn’t want to customize any of the admin options just yet all I had to do is insert new register entries on the file (one for model). I grew tired of this pretty soon so I wrote this elisp function to update an admin.py file easily. Hope this helps somebody
(defun rl/django-admin-all-models()
(interactive)
(let ((content " "))
(with-temp-buffer
(insert "from models import *\n")
(insert "from django.contrib import admin\n\n")
(let ((text-start (point)))
(insert-file-contents "models.py")
(keep-lines "^class.*$" text-start (point-max))
(while (re-search-forward "^class \\(\\w+\\).*" nil t)
(replace-match "admin.site.register(\\1)"))
(write-file "admin.py" nil)))))
A word of warning: this will override your current admin.py