Skip to main content


Showing posts from 2011

Project Euler 359 - Hilbert's New Hotel

Problem 359, Hilbert's new Hotel Had no idea where to start at all, the only thing I could was to write a small program to print out first hundred numbers in naive way. [ 1 , 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91] [ 2 , 7, 9, 16, 20, 29, 35, 46, 54, 67, 77, 92] [ 4 , 5, 11, 14, 22, 27, 37, 44, 56, 65, 79, 90] [ 8 , 17, 19, 30, 34, 47, 53, 68, 76, 93] [ 12 , 13, 23, 26, 38, 43, 57, 64, 80, 89] [ 18 , 31, 33, 48, 52, 69, 75, 94] [ 24 , 25, 39, 42, 58, 63, 81, 88] [ 32 , 49, 51, 70, 74, 95] [ 40 , 41, 59, 62, 82, 87] [ 50 , 71, 73, 96, 100] [ 60 , 61, 83, 86] [ 72 , 97, 99] [ 84 , 85] [ 98 ] As you may see, the result is very interesting. The numbers on the first column seems to be ( row + 1 ) / 2 * ( row / 2 ) * 2. Note that row/2*2 != row since all operations are integer operations. If we calculate the delta values between consecutive numbers in each row, we got 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 5 , 2 , 7, 4 , 9, 6 ,11, 8 ,13, 10 , 15,

Pumpkin pie can be mass destructive

From Jiaqi's Blog

Dawn of Black Friday 2011

I don't have desire to join Black Friday shopping in early morning anymore, not in last 7 years, not a little bit. Things I bought from 2004 Black Friday are still in sealed boxes. This Thanksgiving, my biggest hope is to stay at home, completely forget about work, and take a long 4 days break with satisfying sleeps. Really want to do it this time. Reality emerges in unfortunate way. At 3AM, my IPhone jumped up indicating a text message was received. There can be so many reasons for a text message on 3AM, sales promotion,wrong number, payment due, or I'm paged. I kept fingers crossed in dream and hoped it was not the last one. A few seconds later pager beeped. Instead of any of the other reasons, it really was because someone paged me. Finger crossing continue to prove in vain. Walking to computer in pajama,  I opened two red eyes and read, "blah blah blah... to draw someone's attention, I escalated this ticket". No English words I learned could describe my mo

Cyclic numbers - Project Euler problem 358

Cyclic number , 1/7 specifically, is something amazed me while I was a child. However I never really thought about cyclic numbers other than 1/7 until this problem. I decided to spend an evening researching and resolving the latest Project Euler problem, #358 Cyclic Number . To solve this problem, we need an integer number X satisfying following criteria based on my understanding of cyclic number: 1. 1/X starts with 0.00000000137 2. X is dividable by 10^X-1 3. The result of (10^X-1/X) ends with 56789 4. X is a prime number 5. ? I put a question mark for the fifth criterion because I haven't figured out what it is, while only with four others, the problem can almost be solved. The first hint limits candidates between 724637681 and 729927007. Given the second and third hint, the last 5 digits of 56789 * X should be 99999, which means 56789 * (X-1) ends with 43210. X must ends with 09891 to satisfy such requirement. There are 53 numbers within range and ends with 09891,

Night of the living programmer - Facebook login in Java web application

It is a sunny Saturday, not often in autumn of Seattle. For quite a while, I've been waited for such a chance to walk peacefully in Olympic Sculpture Park. On the other side, I also always wanted to add a "Login with Facebook" button to my new website to attract users as the popularity of the website just about to reach all time low. So the plan is, finishing the login button before afternoon, have peaceful walk during sunset, which would be nice, and watch a relaxing DVD before sleep. With this guide , adding a button with popup login window wasn't difficult. Out of box, div element with class fb-login-button is decorated as long as Facebook Javascript SDK is included.  The script snippet in tutorial is mostly to enable Javascript SDK in an asynchronous fashion for performance gain. The only gotcha is that the URL of page with button must be under a registered domain of application. I did local testing by modifying my /etc/hosts and mapping to 12

Weekend projects

What would I do in a weekend when there's tons of work to finish before next Monday, there's tons of things I wanted to do but never had chance during week days, the weather finally turns sunny after numerous raining days, wife and daughter are both out of town so I'm left at home and have some time for myself. I did what I always would do under such situation, spent hours cooking a satisfying meal. And I did that for twice this weekend. From Jiaqi's Blog From Jiaqi's Blog

Birthday again

I just realized it was my birthday recently, a wonderful thing. Some time ago I stopped celebrating birhday. It was fun when I was young, but once passed 30, birthday starts feeling much like project approaching deadline, or payment passing due date. I remember once I asked my wife on her birthday, "did I tell you you are ## years old now", and she said "yeah, I try not to think about it". Now it's my turn. One thing came to my mind as soon as I realized it was birthday is, inevitably, movie Adaptation . In fact it kind of cheers me up. "Today is the first day of the rest of my life" , what an inspiration from an old, fat, bald and repulsive Nicholas Cage.

Family organization chart

Publish Maven site with Amazon S3 and CloudFront

Amazon S3 now supports static website hosting . As a 10 years Maven user, I wonder how easy it is to deploy Maven generated site to Amazon S3 and let the rock-solid storage provider to host my project websites. There are several existing s3 wagon providers , which all seem to have the same problem, not supporting directory copy. This is understandable since before S3 new website hosting feature, I guess people mostly expect to deploy artifacts rather than website to S3. So my first task is to write an AWS S3 wagon that supports directory copy. With AWS Java SDK , task becomes as simple as one single class . I made my S3 wagon available in Maven central repository at org.cyclopsgroup:awss3-maven-wagon:0.1 . The source code is hosted in github:jiaqi/cym2/awss3 . The next thing is to create an S3 bucket in console . To avoid trouble, bucket name is set to the future website domain name according to this discussion . Website feature needs to be explicitly enabled. I also created an

1300ms to 160ms, tune Spring/Hibernate on slow MySQL

I write this article to remember the different behaviour various JDBC connection pool displays when they work with slow JDBC connection(to MySQL database, in this case). It starts with a typical Java application on Spring, Hibernate, Jetty, ApacheCXF and MySQL like following code. Version 1: without correct pooling //... service code @Transactional(isolation=Isolation.READ_COMMITTED) public void foo() { //... do something with database } //... connection pool configuration ... class = "com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"; url = "jdbc:mysql://"; user = ... //... transaction management configuration in spring ... <tx:annotation-driven transaction-manager="transactionManager" order="100" /> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="mySessionFact

Migrate source code from SourceForge subversion repository to GitHub

Since , a successful commercial git hosting provider that hosts over a million repositories, offers reliable free open source git hosting service now, I decided to go ahead and move the source code that I had in last 8 years from sourceforge subversion repository to GitHub. This page documents the steps that I did, which was pretty simple and smooth anyway. Obviously I need to be a user in . It's easy to sign up , no confirmation is required. Create new repository from here , and import from a public subversion URL. The URL is something like http://<projectname><projectname>. Before import starts, you are required to tell more about each user discovered from subversion repository. The user name and email address each sourceforge user maps to doesn't have to be existing user in It takes very very long time for import to finish. Be patient. I already have git on my computer. If you don't, find out how