Francisco Soto Ramblings about code, life and stuff.



A smarter way of doing many-to-many relationships in Ruby On Rails.

has_many_with_set is equivalent to has_and_belongs_to_many in functionality. It works only when you do not want information about a relationship but the relationship itself, behind the curtains though, they do not work anything alike, has_many_with_set is far more efficient in terms of data size as it reduces the redundancy that occurs in a normal many-to-many relationship when the cardinality is low, that is, the same combination occurs many times. For example, in a blog application, when many posts share the same tags.

View on Github


A library/utility to help you debug and trace javascript code.

Simply put, Tracing.js will allow you to set functions of your own to be called before or after target functions get called. It is like events for function invocations.

If you don't want to run specific code when this happens you can set up a regular trace for those functions and Tracing.js will print useful information when these functions get called, things like the parameters used and the return values if any.

It even works for constructors and functions that have other objects attached to themselves, like jQuery's $.

View on Github

Photo Organizer

photo-organizer is ruby script that sorts your pictures into directories named after the date and names your files after the time they were taken using EXIF metadata.

View on Github


A Common Lisp simple in-memory table.

cl-simple-table is a set of functions to create rows and tables of rows and run some queries in them. Also included are simple functions to create tables from tabular data files, such as CSV (comma separated values) or TSV (tab separated values). This makes this library very useful to work with these files.

View on Github


A Common Lisp implementation of an in-memory B+ tree.

B+ trees main characteristics:

  • All the data is in the leaves, internal nodes hold only keys used for traversal, pointers between the leaves are kept, so range-retrieval is easy and efficient.
  • It is a generalization of a binary tree but instead of having only two pointers per node to other nodes it can have many more (this is called the order of the tree)

Because of this characteristic the tree has typically a large fanout and a small depth.

View on Github


A simple lisp implementation in Javascript.

This has no practical use whatsoever is just a simple artifact out of exploratory programming. I wanted to see how simple was to implement a Lisp and I decided to use Javascript for it because using Lisp to create a Lisp is just too easy and because I happen to enjoy Javascript.

View on Github


Command line interface to the stackoverflow API designed to be run in text environments in combination with other GNU tools to extract useful information.

View on Github