Monthly Archives: April 2013

I Just Moved – A Friendly Reminder

moving-wordpress-blog

I am creating this post to let you know that I have started the process of migrating from this wordpress-hosted blog to a self-hosted one which is located at, well, Simple Developer. I am still fixing a few errors like syntax highlighting and things like that.

Besides that, everything should be fine now. I humbly request those who had subscribed to this blog to consider subscribing to my new blog which is still a wordpress platform.

Thank you for your loyalty as readers and I hope we can connect with each other as time as goes by.

Take care and see you at http://www.simpledeveloper.com !

Advertisements

Programming With Google Maps APIs – Part VI

Hello! Nice to see you and thanks for stopping by. In the last two days I took a detour from programming but today I am going to pick up from where I left Google Maps APIs – Part V . Today’s post will be relatively shorter than previous ones because I am completing a section (at the end, I will give an app idea). Let us get to it. We should start with our previous finishing code:

(function () {
    window.onload = function () {
        var mapDiv = document.getElementById('map');

        var options = {
            zoom: 3,
            center: new google.maps.LatLng(37.09, -95.71),
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(mapDiv, options);

        var cities = [];
        cities.push(new google.maps.LatLng(40.756, -73.986));
        cities.push(new google.maps.LatLng(37.775, -122.419));
        cities.push(new google.maps.LatLng(47.620, -122.347));

        var infowindow;
        for (var i = 0; i<cities.length; i++) {
            //create markers for each city
            var marker = new google.maps.Marker({
                position: cities[i],
                map: map,
                title: "City Number " + i
            });

            (function (i, marker) {
                //create even listeners (closures at work)
                google.maps.event.addListener(marker, 'click', function () {
                    if (!infowindow) {
                        infowindow = new google.maps.InfoWindow();
                    }
                    //set content
                    infowindow.setContent('City number ' + i);
                    //open the window
                    infowindow.open(map, marker);
                });
            })(i, marker);
        }
    };
})();

Automatically adjusting the viewport to fit all markers

Every time you are expecting dynamic data to be added to your map (markers), you want to make sure that none of them appears outside the map. The best way to handle this is by making a map that automatically adjusts to the markers added. In order to achieve that, we use LatLngBounds object.

LatLngBounds Object

A bounding box is simply a rectangle defining an area. Its corners consist of geographical coordinates and everything inside it is within its bounds.  You can use it to calculate the viewport of a map and also determine if an object is in a certain area of the map.

The bounding box is of type google.maps.LatLngBounds object. It takes two optional arguments (southwest and northeast corners of the rectangle). Those arguments are of type google.maps.LatLng. 

In order to manually create a LatLngBounds box, we have to determine the coordinates  of its corners(you will see a better solution soon). Adding to our previous code, just below the line where we created our map, we could do this:

.
.
   var map = new google.maps.Map(mapDiv, options);
   var bounds = google.maps.LatLngBounds(
           new google.maps.LatLng(37.775, -122.419),
           new google.maps.LatLng(47.620, -73.986)
   );
.
.
.

Now our three markers will be within the above coordinates: Here is what am trying to allude to.

google-maps-bounds

Using The APIs For The Heavy Work

In order to extend our example to automatically adjust the viewport to fit the markers, we have established that we need a LatLngBounds object. So, we first create an empty LatLngBounds object somewhere outside our for loop. 

.
.
.
        var infowindow;
        //creating our bounds here
        var bounds = google.maps.LatLngBounds();

        for (var i = 0; i < cities.length; i++) {
            //create markers for each city
            var marker = new google.maps.Marker({
                position: cities[i],
                map: map,
                title: "City Number " + i
            });

.
.
.

After creating our empty bounds, we are going to extend it with each marker added to the map. We do this inside the loop like this:

.
.
.
      for (var i = 0; i < cities.length; i++) {
          [...]

          //extend the bounds here
          bounds.extend(cities[i]);
      }
.
.
.

At last, after iterating through the markers, we are going to adjust our map using fitBounds() method of the map object.

[...]
    window.onload = function () {
        [...]
        var map = new google.maps.Map(mapDiv, options);

        [...]

   //Adjusting the map to the bounding box
   map.fitBounds(bounds);
}

That is it for the above case. We now have a map that fits all the markers perfectly inside the viewport. In fact, you can now add more cities and the map will automatically adjust the viewport. Oh wait, we can do this right now by adding my favorite city: Nairobi, Kenya and let us also represent Asia (seoul, South Korea – let there be peace in the peninsula).

[...]
        [...]
        [...]

        var cities = [];
        cities.push(new google.maps.LatLng(40.756, -73.986));
        cities.push(new google.maps.LatLng(37.775, -122.419));
        cities.push(new google.maps.LatLng(47.620, -122.347));
        cities.push(new google.maps.LatLng(1.2833, 36.8167));
        cities.push(new google.maps.LatLng(37.5833, 127.0000));

        [...]
  [...]

[...]

That should do it and now we can take a look at our awesome map with more markers.

google-maps-api-viewport-scale
There you have it! I hope you had some fun playing around with this example. Within a very short time and few lines of code, we have created a map that shows different cities displayed using markers. Now consider having users enter their cities as you watch the markers increase. I like this so much am starting to think of a cool app.

Let me show you the entire code then give you a cooler idea of an app!

(function () {
    window.onload = function () {
        var mapDiv = document.getElementById('map');

        var options = {
            zoom: 3,
            center: new google.maps.LatLng(37.09, -95.71),
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(mapDiv, options);
        var bounds = new google.maps.LatLngBounds();

        var cities = [];
        cities.push(new google.maps.LatLng(40.756, -73.986));
        cities.push(new google.maps.LatLng(37.775, -122.419));
        cities.push(new google.maps.LatLng(47.620, -122.347));
        cities.push(new google.maps.LatLng(1.2833, 36.8167));
        cities.push(new google.maps.LatLng(37.5833, 127.0000));

        var infowindow;

        for (var i = 0; i < cities.length; i++) {
            //create markers for each city
            var marker = new google.maps.Marker({
                position: cities[i],
                map: map,
                title: "City Number " + i
            });

            (function (i, marker) {
                //create even listeners (closures at work)
                google.maps.event.addListener(marker, 'click', function () {
                    if (!infowindow) {
                        infowindow = new google.maps.InfoWindow();
                    }
                    //set content
                    infowindow.setContent('City number ' + i);
                    //open the window
                    infowindow.open(map, marker);
                });
            })(i, marker);
            //extend our bounds here
            bounds.extend(cities[i]);
        }
        map.fitBounds(bounds);
    };
})();

There you go. You can do whatever you want with it. Now here is an app idea (warning: it might sound silly).

Happy Places
The idea is simple. Use Twitter Search and Streaming APIs to track the use of a smiley face ):. It is not hard if you try. The fun part: using the user_ids of those who used the smiley face, fetch their locations (if they have set their location on their profiles) and check them against a local list of your own. If any of them match, put a marker on a map. It should be evident that more markers within a small city might indicate that residents there are friendly or happier but that is up for debate. Either way, it sounds fun. ):

See you soon. If you have questions, please ask. Take care and thanks for stopping by!

What To Do After College and Without a Job

So you just graduated or even lost your job and you are looking for a new one. Everywhere you look, you see bad news. Everybody seems to be smarter than you, more experienced and yet willing to take less pay for the gig. You have spent so much money running around mailing your resume. It is a messy world you say.

job-interviews

The fact is, it doesn’t get any easier. What do we do now, you ask?. I am not an expert but I will give you my 2 cents. Here are some of my favorite tricks that could get you going. NOTE:  A previous study showed that only 2 percent of professionals actually use their degrees. This means that just because you have a degree in business doesn’t necessarily mean you must work in that field.

  1. NETWORKING – I list this as the first thing to do for a reason. You are more likely to get a job through referral than other means. If there is something students in college should be doing besides studying and partying, it is making connections. Save those contacts because you will need them later. If you didn’t do so, you can still catch up by using LinkedIn and other social networks. Attend local events where you will meet new people with similar interests. There is more to networking than this short description but you get the idea.
  2. VOLUNTEER – Volunteering is not easy especially when you have bills to pay. I say this because when I refer to being a volunteer, it simply means you are offering your services for FREE. The benefits sometimes outweigh the effort. How? One thing you can do while applying for a job is mention the fact that you volunteered at company A or B. Good Karma. It is better to volunteer than to sit on your couch watching reality television and eating chips. So, find a local charity or a company that could benefit from your skills. Heck, you might even get hired if they think you are worth it.
  3. JOB-SEARCH – Oh wait a minute, I am already doing this right? I totally agree with you here but I wanted to say something more specific. It is tempting to blame the economy for lack of jobs especially when you have no idea where to look. One advice I was given by someone was that when it comes to job hunting, you should make the search a full time job. The only difference is that you don’t get paid, in fact, you spend your own money running around from office to office. Warning: Do not do this: ‘You do so many interviews, when you reach your 40th interview, you ask your interviewer the name of his company! ‘ Got it? I must mention also that you can do networking and volunteering as you job search.
  4. START A BUSINESS – If you have been trying to find a job for too long without any luck, perhaps you can start your own business in your garage. Of course this move is tricky and sometimes expensive to take. Perhaps you have identified a market gab and you feel like you can help fill it. You might be a software developer and you have a great product that could revolutionize the way people do things. With today’s world, opportunities are vast but you have to work hard and smart for it. Depending on your area of expertise, I promise, there is something out there that you can do to make extra cash. Since starting a business requires some capital, you might consider looking for professional advice on how to get started.
  5. JOIN oDESK – This is just one place where you can keep your skills sharp by doing freelance work. There are thousands of people out there looking for people like you to help them get their jobs done. You might not be paid much but you will get to build connections that could lead to greater opportunities down the road. Did I mention creating a portfolio? That will come in handy when applying for a job. You want to have something to show when your interviewer asks “what projects have you worked on before?” 
  6. JOIN QUORA – This is my favorite website. You might be wondering why I even listed it here. Let me cut it to the chase: if you want professional advice, links to the best resources that you would otherwise pay a lot of hard-earned money for, help others by answering questions in areas of your expertise, and most of all, meet awesome people – Quora is your friend. It is totally FREE of charge. Warning: You might get addicted to it and that could make your girlfriend, boyfriend or spouse really mad at you – in that situation, you can tell them to blame me for it.
  7. START A BLOG – This is obviously not for everyone. Most often, maintaining a blog is a challenging task especially if you don’t have a specific idea or subject to write about. From a horse’s mouth – before I started this blog four months ago, I tried blogging and failed several times. I thought people didn’t really like what I was posting. It is easy to talk about everything and end up talking about nothing. I advise you to find something specific that you are good at and get started. Set a schedule and you will be amazed by the experience. In fact, you might be surprised by your interviewer by asking you whether you have a blog or not!
  8. WRITE A BOOK – One amazing thing about life is that when one door closes, more than one door opens. In this case, ebook publishing is a door that leads to potential success. Let us be honest here, you have a story you would like to tell. There is a book in you. If I was able to write a book and self-publish it, reach more than eleven thousand (11,000) downloads on Amazon Kindle alone, then why can’t you do it?  It is amazing how things work. Give it a shot, starting with a few hundred words every day or weekend. Talk to me if you need help.
  9. EXERCISE + FOOD – I am not a food and fitness expert but we all know that you are better equipped when you are eating healthy and exercising. Just because you don’t have a job doesn’t mean you should let your cholesterol get out of control. Take care of your body. It is easier to get tempted when you don’t have enough money to eat junk food and I totally understand it. That does not mean you should give up the fight. Just do your best to remain healthy.
  10. MORE – The list goes on and on. However, I am going to stop here because I know you have other things to do. Go out there, make a clear plan of what you really want to do. Hire a resume service and get down to work (job searching of course). Prepare to be turned down several times. Never give up. If you have other ideas, please share them through the comments section.

At the end of the day, if you are lucky to be interviewed, be honest because it is not morally upright to lie. It is easier to be caught lying. Do whatever it takes to be ready for that job because you never know when you will be meeting your next employer. With that in mind, happy April Fools Day! I am not fooling you at this point. Good luck and see you soon.