March 2008


  1. Use recursion to write a function that determines the length of a string
    int strlen(char * str) {
      if (str[0] == 0)
        return 0;
      return 1 + strlen(str + 1);
    }
  2. What’s the number after F in hexadecimal?0×10
  3. Bitwise: what is 7 | 1? 7 & 1? ~7?

    7 (0111). 1 (0001). -8 (1000).

  4. Write a script that prints the numbers from 1 to 100. But for multiples of four print “Four” instead of the number and for the multiples of seven print “Seven”. For numbers which are multiples of both four and seven print “FourSeven”.
    for (int ii = 1; ii <= 100; ii++) {
    	boolean isMultipleOfFour = (ii % 4 == 0);
    	boolean isMultipleOfSeven = (ii % 7 == 0);
    	if (isMultipleOfFour && isMultipleOfSeven)
    		System.out.println("FourSeven");
     	else if (isMultipleOfFour)
    		System.out.println("Four");
     	else if (isMultipleOfSeven)
     		System.out.println("Seven");
    	else
    		System.out.println(ii);
    }

Today I had the most detailed but at same time most interesting ATG consulting interview yet. Here are the questions I was asked with answers when appropriate in italics.

  1. Which versions of ATG have you worked with?
  2. What parts of ATG’s stack have you worked with?
  3. How do you compare ATG with Ruby on Rails?
  4. What is Nucleus?
  5. What is the ATG Repository?
  6. When creating form handlers typically what ATG base class do you extend? GenericFormHandler.java
  7. When creating droplets what ATG base class do you extend? DynamoServlet.java
  8. What form handlers and methods do you use during checkout? ShoppingCartFormHandler, numerous handlers like handleMoveToConfirm, etc.
  9. What does a user typically see during checkout? Add to shopping cart, login, billing and shipping address, payment, confirm, confirmation, email confirmation, shipped email.
  10. How do you compare strings in Java? If String a = “hello” and String b= “hello” what is a == b? True, a and b both reference the same constant string.

In another interview I was asked these questions.

  1. What is HTTP? How does it work?
  2. If HTTP is stateless then how does a web application maintain state.

Today when I started up phpMyAdmin (version 2.10.0.2) by going to http://localhost/phpMyAdmin I saw this error screen.

phpMyAdmin - Error

I googled around but could not find any solutions.

So I went and tried to install the latest version of phpMyAdmin, 2.11.5. When I tried to run setup I saw this error screen.

phpMyAdmin - Error

Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly.

Now that I had an error message to work with I googled around and found this post, Xampp phpMyAdmin Problem, which helped me diagnose the problem.

It turns out during one of my cleaning sessions I wiped out the session directory in, “C:\DOCUME~1\fkim\LOCALS~1\Temp\php\session.” After restoring it I ran into my next problem.

phpMyAdmin - Error

Cannot load mysql extension. Please check your PHP configuration. - Documentation

I upgraded to PHP 5.2.5 from 5.2.1 but that did not help. I installed the mbstring module but that did not help.

Finally I added the PHP extension directory to the path (I had already added the PHP directory to the path) and it finally worked! My path now includes the following two directories, E:\Program Files\PHP and E:\Program Files\PHP\ext.

I have a table of data that tracks the mileage of my beloved 2005 Toyota Prius.

+----+------------+---------+---------+-------+
| id | date       | mileage | gallons | cost  |
+----+------------+---------+---------+-------+
|  1 | 2005-02-14 |     280 |   8.615 | 16.03 |
|  2 | 2005-02-27 |     480 |   4.775 |  8.59 |
|  3 | 2005-03-19 |     713 |   7.213 | 14.27 |
|  4 | 2005-04-09 |     999 |    7.86 | 16.81 |
|  5 | 2005-04-11 |    1172 |   3.174 |  6.63 |
|  6 | 2005-05-05 |    1560 |   8.889 | 18.66 |
|  7 | 2005-06-07 |    1985 |   9.815 | 20.01 |
|  8 | 2005-07-03 |    2444 |   9.868 |  21.7 |
|  9 | 2005-08-13 |    2762 |   7.728 |    20 |
| 10 | 2005-09-11 |    3271 |  10.072 | 30.11 |
| 11 | 2005-10-24 |    3646 |   8.953 | 22.19 |
| 12 | 2005-10-30 |    3959 |   6.583 | 17.11 |
| 13 | 2005-11-04 |    4184 |   4.538 | 11.25 |
| 14 | 2005-11-21 |    4631 |   8.742 |    18 |
| 15 | 2005-12-31 |    4897 |   8.511 | 18.64 |
| 16 | 2006-02-02 |    5609 |    7.83 |    18 |
| 17 | 2006-03-01 |    6064 |    3.38 |  7.16 |
| 18 | 2006-03-13 |    6400 |   7.171 |  16.2 |
| 19 | 2006-03-22 |    6605 |   5.399 | 13.17 |
| 22 | 2006-02-16 |    5944 |   7.957 |  17.5 |
| 20 | 2006-04-06 |    6974 |   7.774 | 19.43 |
| 21 | 2006-04-23 |    7316 |   7.102 | 20.45 |
+----+------------+---------+---------+-------+

I wanted a way to calculate how many miles were driven for each trip, i.e. between consecutive dates, and what was the miles per gallon (MPG) for that trip.  To do this I modified what I learned in this post, unique ID field, getting next and previous existing ID from table to create a view that does all these calculations.  The advantage of this view is that it does not matter what order I enter the data, it will always calculate correctly.

CREATE VIEW v_prius_mpg AS
  SELECT id, date, mileage, gallons, cost, mileage as trip_mileage,
         mileage / gallons AS mpg, cost / gallons AS price_per_gallon
    FROM prius_mpg
    WHERE id = 1
  UNION
  SELECT New.id AS id, New.date, New.mileage, New.gallons, New.cost,
        (New.mileage - Old.mileage) AS trip_mileage,
        (New.mileage - Old.mileage)/ New.gallons AS mpg,
        (New.cost / New.gallons) AS price_per_gallon
    FROM prius_mpg New, prius_mpg Old
    WHERE New.id > 1
      AND Old.id =
        (SELECT id
           FROM prius_mpg
           WHERE date < New.date
           ORDER BY date DESC
           LIMIT 1);

And here are the results of the view.  Note how row 20 is out of order but it still calculates correctly the trip mileage and MPG.

+----+------------+---------+---------+--------------+------------------+
| id | date       | mileage | gallons | trip_mileage | mpg              |
+----+------------+---------+---------+--------------+------------------+
|  1 | 2005-02-14 |     280 |   8.615 |          280 |  32.501450957632 |
|  2 | 2005-02-27 |     480 |   4.775 |          200 | 41.8848167539267 |
|  3 | 2005-03-19 |     713 |   7.213 |          233 | 32.3027866352419 |
|  4 | 2005-04-09 |     999 |    7.86 |          286 | 36.3867684478371 |
|  5 | 2005-04-11 |    1172 |   3.174 |          173 | 54.5053560176434 |
|  6 | 2005-05-05 |    1560 |   8.889 |          388 | 43.6494543818202 |
|  7 | 2005-06-07 |    1985 |   9.815 |          425 |  43.301069791136 |
|  8 | 2005-07-03 |    2444 |   9.868 |          459 | 46.5139845966761 |
|  9 | 2005-08-13 |    2762 |   7.728 |          318 | 41.1490683229814 |
| 10 | 2005-09-11 |    3271 |  10.072 |          509 | 50.5361397934869 |
| 11 | 2005-10-24 |    3646 |   8.953 |          375 | 41.8854015413828 |
| 12 | 2005-10-30 |    3959 |   6.583 |          313 | 47.5467112258849 |
| 13 | 2005-11-04 |    4184 |   4.538 |          225 | 49.5813133539004 |
| 14 | 2005-11-21 |    4631 |   8.742 |          447 | 51.1324639670556 |
| 15 | 2005-12-31 |    4897 |   8.511 |          266 | 31.2536717189519 |
| 16 | 2006-02-02 |    5609 |    7.83 |          712 | 90.9323116219668 |
| 17 | 2006-03-01 |    6064 |    3.38 |          120 | 35.5029585798817 |
| 18 | 2006-03-13 |    6400 |   7.171 |          336 | 46.8553897643285 |
| 19 | 2006-03-22 |    6605 |   5.399 |          205 | 37.9699944434154 |
| 20 | 2006-02-16 |    5944 |   7.957 |          335 | 42.1012944577102 |
| 21 | 2006-04-06 |    6974 |   7.774 |          369 |  47.465912014407 |
| 22 | 2006-04-23 |    7316 |   7.102 |          342 | 48.1554491692481 |
+----+------------+---------+---------+--------------+------------------+

I always wanted to appear on every row how many gallons of gas had been consumed up to that day and how much had spent on gas up to date but I could not figure out how.  The only thing I could do was determine the sums up until now.

mysql> select sum(gallons) as gallons_to_date,
       sum(cost) as cost_to_date from prius_mpg where date <= current_date;
+-----------------+--------------+
| gallons_to_date | cost_to_date |
+-----------------+--------------+
|         161.949 |       371.91 |
+-----------------+--------------+
1 row in set (0.01 sec)

« Previous Page