Our son Otávio was born recently. Right in the first few days, we decided to keep tight control on the feeding times for a while, as it is an intense routine pretty unlike anything else, and obviously critical for the health of the baby. I imagined that it wouldn’t be hard to find an Android app that would do that in a reasonable way, and indeed there are quite a few. We went with Baby Care, as it has a polished interface and more features than we’ll ever use. The app also includes some basic statistics, but not enough for our needs. Luckily, though, it is able to export the data as a CSV file, and post-processing that file with the R language is easy, and allows extracting some fun facts about what the routine of a healthy baby can look like in the first month, as shown below.
The underlying concept is very simple: spreadsheets are a way to organize text, numbers and formulas into what might be seen as a natively numeric environment: a matrix. So what would happen if we loosed some of the bolts of the numeric-oriented organization, and tried to reuse the same concepts into a more formatting-oriented environment which is naturally collaborative: a wiki.
While I do encourage you to answer this with some fantastic new online service (please provide me with an account and the best e-book reader device available once you’re rich) I had a try at answering this question myself a while ago by writing the Calc macro for Moin.
Basically, the Calc macro allows extracting values found in a wiki page into lists (think columns or rows), and applying formulas and further formatting as wanted.
I believe there’s a lot of potential on the basic concept, and the prototype, even though functional and useful, surely has a lot to evolve, so I’ve published the project in Launchpad to make contributions easier. I actually apologize for not publishing it earlier. There was hope that more features would be implemented before releasing, but now it’s clear that it won’t get many improvements from me anytime soon. If you do decide to improve it, please try to prepare patches which are mostly ready for integration, including full testing, since I can’t dedicate much time for it myself in the foreseeable future.
python-nicefloat is a Python module implementing an algorithm based on the paper “Printing Floating-Point Numbers Quickly and Accurately”, by Robert G. Burger and R. Kent Dybvig.
The implemented algorithm will find the shortest, correctly rounded output string representing a decimal number that converts to the same internal binary floating-point number when read.
Update: the download link is now fixed.
University of Massachusetts has a very nice Problem of the Week service where they post a new math related problem every monday. At that time they report the percentage of people that correctly answered the question as well. To submit an answer, check the rules page. They’re usually very quick at answering if a given solution is correct or not.
This week’s problem is not specially challenging though. The problem name is Turn the page, and consists of the following question:
A novel has 527 pages (pages 1 â€“ 527). How many digits will it take to number all 527 pages from 1 to 527?
How many people wouldn’t know how to solve that? Solving with eyes closed is kind of fun, but with help from a calculator or from any programming language it’s trivial. In python, that single line does the job:
sum([len(str(i)) for i in range(1,527+1)])
Let’s hope for a more interesting problem next week. There are some good problems from previous weeks available as well.
Here’s a snippet to compute all combinations of N elements over K positions.
Another snippet to compute the permutations of all subsets.
Two snippets to compute permuatations and derangements in Python.
While working with Linear Algebra, I’ve decided to build a toy interpreter in C to play around. This was a quite interesting experiment for myself, since it was the first time I’ve built a complete (with tokenizer, compiler, and interpreter) and auto-suficient (no external dependencies, no additional tools) interpreter from the ground.
The interpreter is currently 1076 lines long, and is based on a tokenizer for the grammar, a compiler which creates a list of trees of expressions, an interpreter for the generated structure, and two modules for symbol maintenance and matrix operations.
Here is a quick example:
a = 2*3+4/2 print(a) b = [1,2,3|4,5,6] c = [1,2,3|4,5,6] print((b+c)/2) print(trans(b)) d = [1,0|-2,3|5,4|0,1] e = [0,6,1|3,8,-2] print(d*e) f = [1,2|3,4] print(det(f)) f = [2,3,4|-5,5,6|7,8,9] print(det(f)) f = [1,-4,2,-2|4,7,-3,5|3,0,8,0|-5,-1,6,9] print(det(f))
And here is the output:
8 [ 1, 2, 3 | 4, 5, 6 ] [ 1, 4 | 2, 5 | 3, 6 ] [ 0, 6, 1 | 9, 12, -8 | 12, 62, -3 | 3, 8, -2 ] -2 -45 2042