yet another blog about computer, technology, programming, and internet

Friday, April 23, 2010

Drawing Circle on Google Maps using GWT

Friday, April 23, 2010 Posted by Ismail Habib , , , 50 comments
I was a bit surprised to realize that Google Maps API does not provide us with a circle overlay. Oh well, I believe they will do that someday. As for now, we just have to be satisfied with what we have.

We can do this in two ways. Drawing circle is easy. By using an image of circle and stretch it to the right size, or by using Polygon Overlay and approximate a circle. The most difficult thing is we have to be able to do transformation of points to latitude/longitude coordinate. No need to reinvent the wheel, somebody else have pointed out how to do this kind of things. Check out these two links:
Drawing circle on Google Maps with an image
Drawing circle on Google Maps with an approximation (using Polygon)

However, these two codes are written for JavaScript. I'm using the knowledge provided by both to rewrite it for GWT. I'm using the approximation method, but it should be easy for you if you want to use image instead of Polygon.

public void drawCircleFromRadius(LatLng center, double radius,
   int nbOfPoints) {

 LatLngBounds bounds = LatLngBounds.newInstance();
 LatLng[] circlePoints = new LatLng[nbOfPoints];

 double EARTH_RADIUS = 6371000;
 double d = radius / EARTH_RADIUS;
 double lat1 = Math.toRadians(center.getLatitude());
 double lng1 = Math.toRadians(center.getLongitude());

 double a = 0;
 double step = 360.0 / (double) nbOfPoints;
 for (int i = 0; i < nbOfPoints; i++) {
  double tc = Math.toRadians(a);
  double lat2 = Math.asin(Math.sin(lat1) * Math.cos(d) + Math.cos(lat1)
    * Math.sin(d) * Math.cos(tc));
  double lng2 = lng1
    + Math.atan2(Math.sin(tc) * Math.sin(d) * Math.cos(lat1),
     Math.cos(d) - Math.sin(lat1) * Math.sin(lat2));
  LatLng point = LatLng.newInstance(Math.toDegrees(lat2), Math
   .toDegrees(lng2));
  circlePoints[i] = point;
  bounds.extend(point);
  a += step;
 }

 Polygon circle = new Polygon(circlePoints, "white", 0, 0, "green", 0.5);

 map.addOverlay(circle);
}

Tuesday, March 23, 2010

Forcing a Screen Setting in Windows 7

Tuesday, March 23, 2010 Posted by Ismail Habib , 16 comments
I was trying to install a new screen on my laptop when I realized that it was not as easy as I expected. This screen was huge (compared to my laptop's screen) with a very high resolution (1920x1080) setting suggested. However, with 1920x1080, the only refresh rate available is only 29Hz and 30Hz, which would make my screen looks very flickeringly sharp (I don't even know if it is a word). Updating the driver of my VGA card and the screen doesn't help at all.


The fix was surprisingly easy and funny though. I went to the Screen Resolution adjustment, clicked on the "advanced" link. Open the "Monitor" tab, and unchecked "hide modes that this monitor cannot display". The available modes then changed, and I picked 60Hz as the refresh rate. Things went went from that moment on.

Moral of this story: sometimes you are allowed to force your Windows to do something, especially when it underestimating your expensive hardware :P

Tuesday, November 24, 2009

Changing Screen Resolution in Ubuntu under VirtualBox

Tuesday, November 24, 2009 Posted by Ismail Habib , , , 15 comments
This problem has caused me a relatively severe headache today. I'm doing a project which require me to use a Linux OS. Since I don't have Linux in my office PC, I decided to install one (Ubuntu 9.10) in a VirtualBox instead of creating a double booting configuration. The installation procedure was easy and painless, but then the problem is coming. The installed Ubuntu does not have any option to increase the screen resolution other than 800x600 and 640x480.

I tried to install the suitable driver with no result except destroying my X Window which forces me to reinstall the Ubuntu again (thank God I use virtual machine...). Then I started looking around for a solution and several forums and websites point me to this:

  • Choose Devices -> Install Guest Additions... on the VirtualBox menu
  • It will mount a CD which will appear on the Desktop
  • Go to your terminal (Applications -> Accessories -> Terminal)
  • Go to the CD directory by typing "cd /media/cdrom0" (without the quotes)
  • Type "sudo sh ./VBoxLinuxAdditions-x86.run", again, without the quotes. At the first try I couldn't find this file instead just a directory "OS2". If you experience the same thing, this is probably because you set your VirtualBox OS type as "Ubuntu" instead of "Linux 2.6". In this case, shut down your VirtualBox, change the OS type and redo the whole stuffs from the beginning
  • Restart your VirtualBox


Now, this has successfully gave me another resolution, which is 1024x768. Not bad, but I'm rather greedy and I want something more! (Hey, my PC could do better!). Continue with this:
  • Go to the terminal again
  • Edit the xorg.conf by typing "sudo gedit /etc/X11/xorg.conf" (yes, no quotes)
  • If you can find some already existing screen resolution, then you can add more, otherwise you can include something like this:
Section "Screen"
        Identifier "Screen0"
        Device     "Videocard0"
        DefaultDepth     24
        Subsection "Display"
                Viewport   0 0
                Depth     24
                Modes     "1280x1024" "1024×768"
        EndSubSection
EndSection

  • Be really careful when you're doing this. It is always nice to make a backup beforehand
  • Restart your VirtualBox and enjoy the new screen resolution


Reference:
1. http://www.mikesouthby.co.uk/2009/11/virtualboxubuntu-9-10-changing-screen-resolution/
2. http://www.mjmwired.net/linux/2009/09/15/default-xorg-resolution/

Saturday, November 14, 2009

Improving a Scanned Hand-Drawing

Saturday, November 14, 2009 Posted by Ismail Habib , 17 comments
I did a lot of digital drawing and painting as a hobby. One of the most common problem I faced is the lack of quality of the scanned lines from the scanned drawing. Thus, an improvement on the scanned drawing is required before doing anything else. Before we start, I should warn you that this is the way that I found works, doesn't mean that there is not other way to do it. I'm using Photoshop and Corel Draw to do this, but I suppose any other application with similar features should work fine.

I prefer to trace a scanned hand-drawing before doing anything else. Tracing is nice because with tracing I can have an output in form of vector. Thus, further improvement could be made easily. However, tracing a scanned hand-drawing often caused many detail loss. Increasing trace resolution wouldn't help since the output will not posses simple, clear, and solid lines.

To overcome this situation, I propose to do a preprocessing for the scanned hand-drawing. I'm using a self hand-drawing with a manga-ish style. Forgive the quality, I'm only an amateur :)



Once you scan your hand-drawing, we need to adjust the color intensity. I'm using "Level" feature of Photoshop and adjust accordingly.



The next step is to apply a filter called "Photocopy" from Photoshop. I choose this because it will make the lines bolder and flatten (is this even the correct word?) the color.



The resulting image is good enough for tracing. I import the image and do the tracing with Corel Draw.



The result is clean and artistic. You can always make further adjustment easily since it is in form of vector.

Thursday, December 25, 2008

Game of Imagination

Thursday, December 25, 2008 Posted by Ismail Habib , 28 comments
It has been a while since I wrote my last post and losing my internet connection (followed by losing the enthusiasm of writing). Anyway, here I am trying to write something again and it's going to be something fun, yups: it is about a game, to be precise: games.

A friend of mine posted this video about a game called: Crayon Physics Deluxe. I took a peek on it, and fell in love at the first sight. Crayon Physics Deluxe is a puzzle game where we have to solve a problem (mostly to guide a ball to a star) using physics rules, kind of remind me of the old-nice Incredible Machine which I played a long time ago. However, the difference (and the most interesting part) is that Crayon Physics Deluxe allows the user to create objects freely using a "pen" and transforms them into world objects which automatically follow the physics rule. Take a look at this cool video on their website:




It looks like a very nice game, but I'm not a type of guy who's willing to buy something just because it looks nice :) I tried to get more information and trial version of the game which eventually leads me into an another game called Zany Doodle, which luckily offers a trial version of the game. I tried the game and enjoyed it very much even though I only use a normal mouse instead of a touchscreen (which I believe will increase the game experience heavily). Moreover, I found out that the Crayon Physics Deluxe is actually originated from the free game Crayon Physics which is developed by the same person. However, the free Crayon Physics is nowhere as good as its paid counterpart, not even better than the free trial of Zany Doodle since it cannot create objects like a triangle or just a random line.

Should I say anything more? Just download the Crayon Physics here and the free trial of Zany Doodle here. Enjoy!

Thursday, July 17, 2008

Scour - A Social Search Engine

Thursday, July 17, 2008 Posted by Ismail Habib 17 comments
Scour (currently in beta) is another web 2.0 hype tagged as "social search engine" intended to give user more authority to determine results from searching process. Scour aggregates result from Google, Yahoo, and MSN and combine them with the votes from users to decide the order of the results. Besides voting, Scour also allows users to leave comments for every search results. Sounds like another Digg? Another worth mentioning feature from Scour is the reward system. Users will get a certain number of points for every search or another contribution they make (voting, commenting, inviting friends). After several thousand of points, users are able to convert them into a visa gift card. While this pay-per-search idea is nothing new, I wonder if the social part of Scour will able to keep them surviving in the next few years given the fact that they will probably have to compete with Google (Google is developing their search engine with a similar idea to Scour, I bet without the reward system).

I have tried Scour for around three days now, and I'm sure they want to improve on several things (it's a beta anyway). Currently the results are limited to 3 pages no matter what keyword I use to do the searching. The search results are also lack of highlighting (updated: not anymore!). They have also included a browser-integrated search bar, which is good for me since I want to try it without having to change the way I use Google. However, every time I click on a search result a frame appeared in the bottom of the page which allowed the users to give vote or comment on the result (this frame didn't appear when I tried to open the search result on a new tab instead of clicking it). This might be a good way to encourage users to participate in the voting/commenting activities, but I found it a little bit annoying. Hopefully they will find a better way to do it.

Monday, July 14, 2008

Family Tree Builder

Monday, July 14, 2008 Posted by Ismail Habib , , 36 comments
1. I have a big family which keeps on expanding
2. I live far away from most of them
3. I have terrible memory (being old and things like that... you know)

Those are my top three arguments why I sometime (or often) forget about things related to my family. Some examples: the date of my parent's marriage, my brother in law's birthday, or even the name of my one year old cousin. Now I'd like to say goodbye for all those fake arguments by introducing a geeky way to keep all family-related information in a sophisticated way: Family Tree Builder.


Family Tree Builder is a genealogy software (for Windows only) which can be downloaded for free at http://www.myheritage.com/family-tree-builder. I like this software a lot, especially since it offers some nice features such as: integration with myheritage.com (allows me to share and let others review the information on the web, though without capability of multi-user editing), photograph for every family member (and events), event reminder (birthday, marriage, etc), and also possibility to input unsure information for date (i.e. birthday around January 1982).