Archive

Archive for the ‘General’ Category

Status update for GeoGebra.

July 12th, 2010 Serabe No comments

My contributions for the first part of the first part of GSoC 2010 can be divided in two: general improvements and coding.

General improvements

I made a few general improvements on GeoGebra:

  1. Refactored build.dir in ant build file. Previously, build.dir wasn’t in the root directory.
  2. A few ant tasks were added, such compile-grammar, compile-oe (outside Eclipse), run-easyb and run-easyb-outside-eclipse.
  3. SVN properties were set in order to work outside Eclipse. This way, .class files will be kept out of the repo without the intervention of any Eclipse plugin.
  4. Easyb, a BDD groovy-based framework, has been included in order to test GeoGebra. It is not RSpec, but I guess it’ll do.

Coding

First, I started creating a few EquationPoint classes,  currently there are six EquationPoint children classes:

EquationPoint type hierarchy

  • EquationFreePoint represents an independent point.
  • EquationSymbolicPoint represents a dependent point,  EquationSpecialSymbolicPoint standing only for the locus point.
  • EquationNormalPoint and EquationPointVectorPoint are only auxiliar elements.

Then, a few EquationElement classes were added, these stand for the different constructions:

EquationElement type hierarchy

EquationElement is an abstract class containing a few basic methods:

  • forPoint: Given an EquationPoint, returns a String with the equation that means that the point is in the construction.
  • isAlgebraic: returns true if the construction is algebraic, and false otherwise.

Both EquationGenericCircle and EquationGenericLine are abstractions of specific line and circle contructions, all of them algebraic. EquationGenericSegment is to segment what EquationGenericLine is to lines. Obviously, EquationGenericSegment is not algebraic.

All of these classes are used together by EquationScope.

A pause for a screenshot.

Screeenshot

Click for enlarge.

A glimpse into the future.

What to do next?:

  • Maybe Equation should be a proper class, not just a String.
  • More equations.
  • Working out the locus equation.
  • Not using an algorithm twice.
  • Share/Bookmark

About WordPress automatic upgrade.

June 30th, 2010 Serabe No comments

I’m stupid, and here is why:

Long, long time ago,  when WordPress 2.7 was released I got excited about  the automatic upgrade feature. I never got to get it working, but I didn’t care at all. I don’t have that many plug-ins, and sometimes in a while, I just uploaded all the files via FTP. But I moved sergio.arbeo.net to WordPress after 3.0 release and then I realize that it was working there!

Then, wondering why, found out this post with its really easy solution: just add the following two lines to the WordPress .htaccess:

# Ensure PHP5 being used

# For WordPress auto upgrade

AddType x-mapp-php5 .php

AddHandler x-mapp-php5 .php

As I said, I’m stupid.

  • Share/Bookmark
Categories: General Tags:

Writing your own JRuby extension. Part II: Creating your first class.

March 12th, 2010 Serabe 1 comment

More Mormon Matryoshki
What’s the point of coding a JRuby extension if you don’t create classes? Well, I cannot think of any case, but if you find one, please, let me know.

Do you remember Java’s classes hierarchy? If so, you’ll realize  that Java objects inherit from java.lang.Object by default but that is not actually what we need. But how can we tell JRuby that our object inherits from Object, the king of Ruby world? The answer is so simple: just extend RubyObject! (There is a RubyBasicObject too) Taken from Nokogiri::XML::Node:

Of course, you can extend any other class, as long as it is a “Ruby object”. For example, Nokogiri::XML::Document extends from Nokogiri::XML::Node, and we do not need to do anything special to reflect it, just extend XmlNode like XmlDocument does:

After talking a bit about hierarchy, let’s talk about Java constructors. At least two parameters are needed: a org.jruby.Ruby object and a org.jruby.RubyClass object. Being the importance of the former quite obvious, the reason for the latter may not be so clear. Let me show you some real world code: Nokogiri::XML::Node’s dup method. Take a look at the following test:

Both new and dup methods in subclass rely on Nokogiri::XML::Node’s. In here, you can see the this snippet of code:

The rb_obj_class method returns the class of an object, in this case, self. This way, the new node will be an instance of the same class as the original node. That’s the reason a RubyClass is needed in the constructor, in order to know which is the actual class being instantiated.

By the way, do not forget to call super with the Ruby and RubyClass objects.

Next step: creating methods.

Creative Commons License photo credit: quinn.anya

  • Share/Bookmark

Do you wanna help us with pure-Java Nokogiri?

December 1st, 2009 Serabe No comments

First things first, if you wanna help, you’ll need to clone the git repo. Just:

git clone git://github.com/tenderlove/nokogiri.git
cd nokogiri
git checkout --track -b java origin/java

Install the dependencies. Just:

rake install:deps

Because it uses some native libraries, you’ll need to do that with MRI. Finally, you’ll need to generate some files, just run jruby -S rake java:spec. For having a hprof file, you’ll need to run this script with the following command:

jr -J-Xmx32m -J-XX:+HeapDumpOnOutOfMemoryError nokogiri_doc_frag.rb

-J-Xmx32m limits the heap space to 32 Mb, and the other options makes the JVM to write a hprof file when a OutOfMemoryError is thrown. After that, you can inspect that file with the profiler you can find in NetBeans.

In next post, I’ll comment where I think the problem is.

  • Share/Bookmark
Categories: General, JRuby, Java, Programming, Ruby Tags: , ,

Status Update: RMagick4J, Nokogiri, ruby2java and a possible MagickWand4J

June 6th, 2009 Serabe No comments

It’s been long time since last status update, but there are some things to tell, so here I am.

Thankfully, this year I’m a GSoC student again (and my mentor is Tom too). The main part of my project would be porting Nokogiri to JRuby, so I haven’t code for RMagick for a while now.

Let’s start with the status update then.

Nokogiri

I’ve been working on Nokogiri for a while. I forked Charles’ repo in Github, and I’ve implemented some cool features. For example, today I got my XML::Reader implementation to pass all tests in test_reader.rb. I hope I’ll be able to make a release this month (cross your fingers).

On the other hand, I got my first patch accepted in Nokogiri’s main repo.

RMagick4J

Not to much work done here, sorry. I haven’t code anything for a while now. Migrating from mercurial to git is already planned, but before that I would like to do a few commits more. Anyway, I’m quite happy with this project. Some people are using it and reporting bugs (in the end, those little things are all that matters). What else can I ask for?

Please, if you find a bug, report it here.

MagickWand

Tim Hunter (creator of RMagick) released MagickWand recently. I’ve been considering porting it to JRuby too. I have to take a deeper look at the C code, but, by now, I think it could be a good way to lead RMagick4J development. If finally I port it, I will split RMagick4J in two projects (Magick4J and RMagick4J). This way, MagickWand4J and RMagick4J would share the same java codebase, as MagickWand and RMagick share ImageMagick.

ruby2java

Take a look here. Awesome, isn’t it? And as soon as I have some time to work on it, siesta will be out too…

P.D. By the way, no more personal stuff in this blog. That stuff is now here, and only in Spanish (sorry about that).

  • Share/Bookmark

It’s all about expectations.

April 25th, 2009 Serabe No comments

Two days ago, I was talking about Susan Boyle with a friend. I do not like her, my friend didn't even know who she is. I told her about Susan, she has a good voice (not a great one) and she can sing pretty well. The only difference is that she is quite ugly (in Spanish I would say that she is uglier than hitting your own father with a sweaty sock). Her answer was pretty simple: It's all about expectations.

She said that by looking at her, my expectations were low, so when she sang even with a good-but-not-extraordinary-as-they-want-us-to-believe voice.

Other way of making things look better is the Bluetooth-Cooper theorem ("Averything is better with bluetooth"), in this case, with the Jackson-Vader corollary:
YouTube Preview Image

  • Share/Bookmark

RMagick4J: Status Update 15/03/09

March 16th, 2009 Serabe 2 comments

This week I've been fixing some bugs, adding some minor effects and adding wave effect.
In order to add wave effect I've had to read a lot of ImageMagick code. Lucky me, there was an if that made all too much simpler. Unlucky me, I didn't realize until the third reading-code day.
Anyway, after sweating blood, here you are the images:

RMagick RMagick4J
original
JRuby logo JRuby logo
charcoal 0.75
charcoal RMI charcoal JRuby
negate
negate RMI negate JRuby
normalize
normalize RMI normalize JRuby
blur_image 2
blur RMI blur JRuby
wave
wave RMI wave JRuby
  • Share/Bookmark
Categories: General Tags:

RMagick4J: Status Update 09/03/09

March 9th, 2009 Serabe No comments

Finally I figure out the problem with the convolve method. The code I wrote was only prepared to deal with TYPE_INT_ARGB BufferedImages but when reading a image from a file, it doesn't ensure this type. Now this is fixed and working.

Furthermore, I added charcoal, solarize and shade effects. The latter gave some problem while testing, but finally the problem was in test not in code. From now on, the to_threshold method must be used in test when dealing with numbers that depend on the QuantumRange. This problem is due that QuantumRange can differ from one ImageMagick installation to another, but RMagick4J always uses 255.

Here you are some examples (the guy that looks like me is actually my non-existent twin brother):

RMagick RMagick4J (This is what I do)
original
original RMagick4J: Status Update 09/03/09 original RMagick4J: Status Update 09/03/09
charcoal 0.75 (RMagick4J is not normalized)
Charcoal RMagick CharcoalEffect
edge 5
Edge RMagick EdgeEffect
shade true, 50, 50
Shade RMagick ShadeEffect
solarize 27.5/255*QuantumRange
Solarize RMagick SolarizeEffect
  • Share/Bookmark
Categories: General Tags:

Predicción.

March 6th, 2009 Serabe No comments

Escribo esto el miércoles 4 de marzo a las 21:52 y predigo que Alba no habrá escrito nada nuevo para cuando esta entrada vea la luz...
Actualización: Esto de predecir no es tan chungo. ¡He acertado!

  • Share/Bookmark
Categories: General Tags:

Dead Like Me: Life After Death

March 5th, 2009 Serabe No comments

I remember this TV show fondly. It was the last TV show I got up early (I mean, befor 13:00) only to watch it with my family. It was all about a girl who died in the pilot when a toilet crashed into her. Then, Georgia (the only girl I know had died because a toilet crashed into her) became a grim reaper, her work was to reap souls of time-to-go people. Furthermore, she was in the External Influence Division (accidents, nature disasters and others).
Later in the story we knew about the gravelings, a beings that cause deathly accidents. They are suppose to be invincible (spoiler, spoiler, spoiler) in the second season's finale Georgia reaped a graveling, and it turned to dust (you can read now safely).

So, this week I read a film about Dead Like Me was released and few hours ago, I finally saw it. No Rube (Mandy Patinkin, the 'I'm Iñigo Montoya, you killed my father. Prepare to die.' guy), no original Daisy, no Der Waffel Haus (it is even burned to dust!), suddenly the George's other face is not hard to look at. Ok, I can stand it. Maybe I can even enjoy it (no, I'm not kidding). But not graveling reaping? But not (the same spoiler comes again) graveling reaping? OMG! It was the cliffhanger of the second season!(you can read the rest of the post) And lostie Desmond instead of Rube!

Anyway, the film is watchable. It is not like Street Fighter: The Legend of Chun-Li (I'm still considering killing every people involved in that crime against humanity).

  • Share/Bookmark
Categories: General Tags:
Improve the web with Nofollow Reciprocity.