Archive for the 'Computers & 570x0FF' Category


September 23rd, 2008 | Category: Computers & 570x0FF

Recently, I started to notice the true impact of the now everywhere-accessed internet. People blogging all the time, posting to twitter, ogling facebook photos, chatting away from their cellphones, giving their opinion on the latest piece of news, reading rss, searching, etc. The web has truly become another dimension, another place, another world (those who have played Mage: The Ascension know what I’m talking about). For those of you who know me, you would think that these changes would make me extremely happy and excited…and a past version of myself would. However, time and experience have changed me. I don’t feel I fit in the model of a person who spends his whole life online. I think social apps like facebook are overrated, a fad, a bubble that is going to burst (see MIT’s Technology Review take on this).

A friend told me recently that she hadn’t seen me code in weeks. She told me, just pull my leg, that if I stopped coding I would stop being computer scientist.The truth is, I love to code. I love to program, in different languages, in different ways. However, contrary to the frenetic activity that is programming, I also like to sit a while and think. I haven’t write much code recently because I have been busy reading some papers in order to write a research proposal for my Phd application. There have been entire days that I have spent thinking about the problems I want to address in my research. I have been generating ideas, algorithms, and methods that will make up my project for the next four to eight years (depending on the program that I get accepted to). In this way, I have been true to my computer scientist nature.

No comments

So, what’s it all about?

May 29th, 2008 | Category: Computers & 570x0FF

Here are the main things that Google is presenting here:

Google Gears

Gears is all about extending the browser by using more client side capabilities. It gives developers an API that let’s them do neat desktop-like things in a web app running on a gears-eneabled browser. Examples of this behaviour would be preserving state asynchronously in the client and showing desktop notifications. Gears is Google’s response to the browser jail problem. However, it is not directly an adobe air competitor since the offline side is not really their goal. They are trying to get gears into the HTML5 standard.

Google App Engine

Some while ago, Amazon decided to share its amazing infrastructure with AWS. Following those steps, Google now shares its computing cloud through the Google App Engine. In simple words, the app engine lets you host your application in Google’s servers, using their incredibly fast load balancing algorithms. They provide a simple API that is based on the concepts of easy-to-deploy and easy-to-scale (as in scaling to millions and millions of table row data). This API si made available via python, and frameworks like Django “kind of” work with it. The problem with most of the frameworks is that they need a relational database to work on, and while app engine does provide an interface that mimics this, it is severely limited in that respect. The reason for this is efficiency. Because you need to locate the data in a server, seek it in the disk, and finally bring it home, app engine has to have a schema-less datastore. This makes the Django admin, Django’s killer feature, totally useless. Perhaps a Django port is in order?

Google Maps

Maps has always been the part of Google that amazes me the most. This time, the Maps team announced a plugin for the browser and a javascript API that allows developers to use client-side map goodies. The plugin works so well that a demo was showed portraying a 3D map in first person perspective and model of a milk delivery car. The car is actually a kml file and it could be controlled just like a car in a videogame. The impressive part is that all this is done via javascript, the matrix transformations (rotations, translations), multipliers, etc. Quite frankly, I have underestimated javascript. A thing that’s also cool is their support for WFS and WMS and remote loading of maps.

Next post I will give you news of their AJAX API and Android.

No comments

Chatoid: a Gtalk application with gps tools

April 17th, 2008 | Category: Computers & 570x0FF

The Rho team (that’s me and two friends) finally finished their Android developer’s challenge app and submitted it last Saturday. The app is based on GTalk and lets you chat with your friends, locate them, send them location-enhanced messages, and share an annotation map session with them. Implementation of the whole thing took us three months of spare time and one week of intense hacking. Let’s hope we get to the second round =) Here are some screenshots:

Chatoid homeChatoid chat Chatoid place notes Chatoid geoconference Chatoid notifications

One member of the Rho team decided to make and try to submit his own project, which he named TouchMe. TouchMe is a novel way to write on a touch screen; much easier and usually faster than a virtual keyboard. Sadly, TouchMe could not be integrated with Chatoid on time and its creator decided that it was too unpolished to be submitted. Let’s hope that it does see the light sometime in the future.

Final stats (for Chatoid): 32 java classes, 6 packages, 53 files, 51 subversion commits (that’s a bit too low, no?).


Eclipse PermGen Memory Leak

February 15th, 2008 | Category: Computers & 570x0FF

Since updating to eclipse 3.3 in my new Arch linux system I’ve been having trouble with the respected programming IDE. It crashes. Real bad. Frequently. Surfing the web a bit, I have become aware that I am not alone. Many more are reporting the same bug and apparently no one has come with a permanent solution. When eclipse crashes, it writes the following to the .metadata log:

!ENTRY org.eclipse.osgi 4 0 2008-02-15 09:37:14.597
!MESSAGE Shutdown error
java.lang.OutOfMemoryError: PermGen space
!SESSION Fri Feb 15 09:37:15 CST 2008 ------------------------------------------
!ENTRY org.eclipse.equinox.launcher 4 0 2008-02-15 09:37:15.314
!MESSAGE Exception launching the Eclipse Platform:
java.lang.OutOfMemoryError: PermGen space

A memory leak in PermGen space. What’s that? Well, PermGen is short for permanent generation heap space. It is the space where all things that live forever and are not to be garbage-collected reside. These include classes and interned Strings (a better explanation of these entities can be found here). So what’s the deal? Is eclipse loading up to many classes then? Maybe we need more space for our String constants? A temporary solution to these recurrent crashes is to increase our PermGen space (it has 64M size by default) by starting eclipse with the following argument:
-vmargs -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
That gives us 128 megs of Perm space, which ought to ok for almost anything. However, some people are reporting the same error even within a 512M max perm size limit (see the bug report link above). Is this a VM problem? An eclipse problem (which is known for its tendency to hogging memory)? WTF?
I just hope that it is soon fixed and that the temporary solution works (at least temporarily =P).

No comments

@program = ::poem

January 23rd, 2008 | Category: Computers & 570x0FF, Personal (Espa├▒ol)

La poes├şa no es algo. La poes├şa lo es todo.

M├║sica con idea es poes├şa. M├║sica sin idea es simplemente m├║sica.

Hoy vi algo en un blog del PLT que me dej├│ anonadado. Un peque├▒o programita, tan bello y hermoso que tuve que leerlo varias veces para asimilar la experiencia est├ętica. Lo pongo aqu├ş, con cr├ędito a matthias en este post de un blog perdido por ah├ş.

;; [LISTOF X] -> ( -> X u 'you-fell-off-the-end-off-the-list)
(define (generate-one-element-at-a-time a-list)
  ;; (-> X u 'you-fell-off-the-end-off-the-list)
  ;; this is the actual generator, producing one item from a-list at a time
  (define (generator)
     (call/cc control-state))
  ;; hand the next item from a-list to "return" (or an end-of-list marker)'
  (define (control-state return)
        (lambda (an-element-from-a-list)
           (set! return ;; fixed
               (lambda (resume-here)
                 (set! control-state resume-here)
                 (return an-element-from-a-list)))))
     (return 'you-fell-off-the-end-off-the-list))
  ;; time to return the generator
1 comment

Round 1 with rails

November 28th, 2007 | Category: Computers & 570x0FF

So we finally made it past the planning phase in my aggregate demand project…and we decided to use Ruby on Rails. Ruby gave me quite a pleasant surprise. It is fully object oriented, has closures, has a python-like syntax (actually, its syntax is potentially perl-like, java-like, and practically *-like…it’s so strangely lax), and even continuations. On the other side, I’ve heard that it’s quite slow. In any case, some ruby tutorials and articles later I met rails. In case that you haven’t heard, Ruby on Rails is a web application framework made to rapidly create scalable CRUD apps. And it does it well. Sometimes a bit too well.

I was dying to use rails back in my software engineering course but sadly my teacher forced us to use java. Fast forward one year and here I am, building an enterprise-level app in rails. Installing rails was as easy as an “apt-cache search” and an “apt-get install” in my ubuntu system. I also downloaded the eclipse plugin from aptana but decided to build my first rails application using only my CLI and browser. I’m a total vim-head but most of the time when it comes to building web apps I usually go the eclipse way unless I’m using django. With rails I was pleased to see that it excels in the console environment (unlike java frameworks) and you don’t really need anything else but the framework to get started. Heck, you don’t even need apache installed to test your app, rails has its own development server. I decided that my friends and I could need a web comic publishing app, so that the world can see our glorious moments of lucid stupidity. Ok so I generated my project, created the database and tables, generated the controllers, messed a bit with the views, and arrived to the scaffolding part (this is basically what the rails wiki tutorial covers). Scaffolding is what really astounded me. Adding a simple line such as:

scaffold :modelname

in the controller and bam! The views and actions that were needed to CRUD data from the database were generated. Two links away were the even prettier views generated by the ActiveScaffold plugin. After that I decided to make some database changes. For this kind of thing rails has a wonderful migration system. I first assumed that I would need to modify my database and then my app’s configuration to do this, but I was wrong. You can specify incremental changes to your database via a pseudo-version-management system by doing this:

./script/generate migration name_of_migration

This generates a ruby file with the name of your migration in the db/migrate directory and adds a number at the beginning indicating it’s version (each migration counts as a version). In the ruby file generated, you specify the self.up and self.down methods as things to do to the database when upgrading or downgrading from that particular migration (things to do include creating tables, adding or removing columns, etc). Then you simply do:

rake db:migrate VERSION=N

Where N is the version you want to migrate to (omit this parameter if you want to migrate to the incrementally consecutive migration).
So for starteres rails has a good idea of workflow and an impressive way to deliver it. However, all this code generation requires you to follow some basic standards, some of which I’m not to comfortable with. For example, model names are the singular version of the database table they represent (that’s ok if it’s done in english but how about other languages?). Also, although migrations are cool, I really prefer django’s syncdb because it follows database changes AND makes them if you want to.
All in all it’s really a good framework and I would recommend anyone interested in web dev to give it a spin.
Next I’ll be seeing its authentication package.

No comments

To the next level

November 08th, 2007 | Category: Computers & 570x0FF

Open source contribution. It’s been in my head for quite a while. I’ve always wanted to do something meaningful for the community that has given me so much. Ideas have come and go, none of them relevant enough. “Join a project then!”, some may say. And that I shall, but first I want to create something original for the benefit of the community.

Yesterday came and with it the news of Android (you know, the mobile OS) and the Open Handset Alliance. At the time I was “t-w-inkering” with my twitter micro-blog and wondering how to make better use of a network of connected computers and phones. “What do people need?” was the question ricocheting in the (sometimes hallow) caverns of my mind. A mirror image of myself answered: “For starters, more people”. And it’s true. Homo sapiens (sapiens) is a social animal by nature. We get work done mostly thanks to the work done by other people. The open source movement and to more extremes the Free Software Foundation, are examples of how the will of many can achieve complex goals. Connected people, aggregate creation, defero synthesis. Combine the idea of connection of twitter with the project administration vision of sourceforge. “Lame” the critics say. Indeed, a lame idea when it comes to software projects. However, a potent tool for other types of projects. Imagine that you have a great idea but not enough “manpower” to make it happen. So you publish this idea and people who are interested contact you. A micro-community is made around your idea, connected through any type of communication apparatus by the power of micro-blogging (micro-milestoning, how’s that huh?).

“But that isn’t really an open source project”. Granted. True. Admitted. It is not an open source project. It is an open project enabler. A benefactor of sorts. Ubiquitous defero synthesis.

“Umm, you mentioned Android…what about it?” I’ll let you figure out where that piece of technology fits in.

No comments