Quan Nguyen //
gistpoint is the product of several months of on and off work with varying degrees of productivity in various parts of the world as I quit my job and travel. The project travels with me from its conception in D.C to the busy streets of East Asia, to the beautiful natural wonders of South East Asia, the historic cobblestoned alleys of Rome and Venice, the fairy tale town of Eastern Europe, the charming Paris springtime, the noisy and active medina of Marrakech, the small quiet village on the Swiss' Alps.
I had the idea back in April 2010 but did not act on it until 6 months later. Even then, each coding session only produced several lines of code and was often interrupted by weeks sometimes months of inactivity due to my travelling. Serious coding only started in March 2011 when I had a long stay in Paris.
As always, I underestimated the complexities of the project and ended up with an unexpectedly huge code base. What initially incubated as a 140-character TL;DR app turn into something much different, and more satisfying so. It's written as a rails project with several custom made gems. First, I created the gistgen gem to verify and standardize URL input and seed description for root address pages. Then, the chomchom gem was created to pull page's html and extract the date, fulltext, and the most relevant passage from the article.
But the most difficult and important component was the scorer, which determines how relevant a summary is compared to the original fulltext. This includes several modules implementing the scoring algorithm and a proper grammar detector built on top of the C link-grammar library. At first, I used ffi to wrap the C library in a gem called grammar_police, but as I deployed the gem on heroku it failed and complained that heroku cannot open shared object (.so) files. So I switched to building a ruby extension gem called grammar_cop, which has the same functionality as grammar_police but deployable on heroku.
I actually ripped out huge chunks of code, especially in the frontend to make the app easier to understand. I will definitely reintroduce them later on as they fit nicely into the gistpoint's goal of 'alleviating the information overload problem'.
So please head over to gistpoint.com, install the bookmarklet, and let me know what you think.
Fine, I'll elaborate. I don't see much authority when players can deceive and manipulate the referees. Authority means nothing if the person in charge keeps screwing things up. Why insist on having imperfect, potentially biased human beings as dictators on the field? Why not use these available tools that will help the ref perform their job better? Basketball and American football have been doing reviews for decades and I don't see them undermining referees' ability to officiate.
2. Tradition argumentSo, what do you say FIFA? Is it time to at least progress to the 20th century?
June 15th - Day 35th (late posting as usual)
Right now sitting on a train to Versailles with 4 more weeks of promising Europe traveling to come, it’s easy to dismiss what happened in Madrid as an exception to EasyJet customer service. After all we should hope for the best in our next 4 flights with them. However, as unpleasant an experience as it was for us, I can’t imagine how bad it must be for people who don’t speak Spanish or English. And waiting 3 to 4 days is an eternity for those who planned their Europe trips for just a week or two.
Obviously, this is the risk you take when flying with a cheap airline. I’m not blaming EasyJet if the problem is caused by non-controllable event such as volcanic activity or abrupt pilot strike. However, if that were the case we would’ve observed the same problem with other airlines. We could and many did fly with other airlines the next day. Moreover, EasyJet never officially discloses the reason for canceling the flight, and the information distribution afterwards is horrible. They should have been more transparent, quicker, and on top of giving us information on possible alternative options.
Instead, they kept us waiting at the gate for 4 hours and then another 2 hours at the customer service kiosk. In the latter case, they could’ve let us know our 2 options, either wait for a rescheduled flight or take 250 euros. That could have saved so much needed time and alleviated some anxiety.
Luckily, we made it, and running between Parisan museums and monuments tend to make your mind move on really quickly. We barely have time to catch our breath and think of what coming up next. However, as we shall discover 4 weeks from now that Madrid was only a beginning, that we shall despise EasyJet so much that it will even inspire me to register for eviljet.net, which will be dedicated to showcasing the other side of EasyJet. We will learn that EasyJet can be economical if everything goes smoothly. Otherwise, if you encounter problems, even if it's entirely EasyJet's own problem, it will be very costly.Because just tomorrow we will find out that they will mistakenly cancel our flights to Berlin and Venice when we called to request the refund to the canceled Madrid flight. It will take several anxious hours of late night scrambling to sort through the mess. When it's all said and done, EasyJet will rebook our tickets at the expensive rate as if we just buy the tickets a day before the travel date. They will also charge us 100.03 euros for the privilege of spending a couple of hours talking to their customer service. Then they will promise they'll refund the differences after the trip although I'm sure it will depend a lot on our will to hold them to their promise.
4 days from now, we will be held by an EasyJet personel for having a bag 2 cm longer than the EasyJet container. If we tilt the bag diagonally and push it down, it will fit perfectly inside the required container. They will accuse us of "cheating", that we have to slide the bag vertically although that requirement is nowhere to be found. It will take several nice German travelers to argue along with us to force them to let us go through.
12 days from now, we will be held at Rome Fuimicino airport for the same bag even after we painstakingly cut a portion of the bag's leg to reduce its length. This time, it will be easier to slide the bag in, but again they will require us to push the bag in vertically, and again it will be impossible to find such requirement in writing anywhere. It will be very clear that EasyJet is profiling Asians because they'll let a bunch of people who carry larger bags and 2-pieces in, then they will force several other Asian tourists in front of us to fit their bags in the container and pay to check them in. May be they have great success ripping off the many Japanese and Chinese tourists, may be we're Asians are notorious for bringing large bags. Either way, this time, we will not be able to let go free.
We will have to pay 22 euros for the one bag that won't fit according to the rule they'll make up on the spot. Then they will realize there won't be time to check the bag in. So they will let us carry the same bag on the plane and put it on the overhead bin just like everybody else. And just like the other 3 times we flew with them, the bag will stay safely there for the duration of the flight.
Part 1: EasyJet almost ruined my Europe trip. May be it will.
Part 2: The train to nowhere
Part 4: EasyJet, not so easy
12:37
I have 3 hours of sleep and plenty of time to ponder our next move. There’s nothing to see in this part of Spain-France border. I’m planning out all orders of actions from finding the ticket office first to searching for a hotel in Bordeaux and flight straight to Berlin in the event there’s no available seat to Paris.
13:45
We arrive at Bordeaux’s Helade station 10 minutes early. The station isn’t as crowded as I expected. As we walk from the platform to the exit, I notice there’re 2 trains to Paris, one at 14:01 and the other at 17:25. I chuckle for briefly thinking about the 14:01 train, with our luck there’s no way my wishful thinking come true. Hopefully, there’re 3 seats for the 17:25 train.
13:50
We’re in the line at the ticket office. There’re 2 staffs, let’s hope they speak English.
13:55
We’re talking to one of the ticket officers, he speaks a little English. I ask for the earliest available train to Paris. He responds “right now, but you have to be quick.” We all say “yes”, then I told my brother and his girlfriend to run to the platform with the luggage first while the computer is processing the credit card payment.
14:00
I run quickly to Platform 1 without even looking at the total on the receipt, EasyJet will have to pay for this anyways. We hop on the first coach and the train instantly leaves the station. I ask several people to confirm we’re on the right train. I can’t believe we’re going to Paris. Our coach is the very last one, that means we have to walk all 10 coaches to the opposite end.
We chat and joke as if there were never a problem. After a couple of hours of on and off sleep and being tired of seeing sheep on French countryside, I call my cousin in Switzerland and friend in Paris to let them know we’re on our way.
19:45
We’re in Paris Montparnasse station. In all, we lost exactly 1 day in Paris. Not bad since we still have 2 full days here. Looking back, it's a lot of lucks involved to make it here this early. We could never plan it this perfectly in advance.
Part 1: EasyJet almost ruined my trip, may be it will
Part 3: Bonjour Paris
Part 4: EasyJet, not so easy
5:30am, May 23
We’re getting ready to go back to the Metro station. Others had left for Terminal 4 to catch their new flight or to get food. Only us three and our wifi hacker snoring away in his bright orange sleeping bag in this corner. Our place is right next to a broken vending machine, every 15 minutes or so a person would come by, put in some coins, make their selection, then realize it doesn’t work, and bang on it violently to ask for their coins back.
There’s a guy who looks exactly like Faraday from Lost with a big ziplock bag walking around and banging on vending machines and pay phones for left over coins. His proficiency indicates this must be his job, yet I doubt he has a license for it.
MAD airport is flooded with Inter Milan and Bayern Munich fans sleeping disorderly everywhere. There’s a couple of drunk Bayern Munich guys harassing a larger group of Inter Milan fans. The drunk guy was singing and surrendering his red and white scarf, looks like Inter Milan won.
It’s tough weaving our way through the airport, we bump into a few people and manage to wake a bunch of others up with the cart noise. Walking pass the EasyJet kiosk, we see another crowd just like us 8 hours ago. It’s a sign of confirmation that flying out of Madrid today is next to impossible.
6:04am
We anxiously board the very first Metro toward Atocha Renfe, Madrid main train station. It takes us about 40 minutes to get to Atocha Renfe. We immediately go to the International Ticket Office and ask for the earliest way to Paris. Of course the only direct train to Paris is full, and of course all the ones connect to Barcelona are also gone. The next available is on Tuesday. All hope’s suddenly gone, my mind drifts toward the only option left which is the night bus. Right now, being lost in Paris and getting yelled at by a Frenchman for asking direction seems like a luxury.
The ticket officer was very patient and helpful, he probably senses our desperation. He’s checking other possible routes, there’s one going to Bordeaux at 8:00am. We have a good 45 minutes to take the local train to get to that station. It gets to Bordeaux at 1:55pm, and we can take the next train to Paris at 7pm. However, he cannot book the Paris train from here, and he warns we may have to wait longer.
We decide to go for it. Actually, I’m more interested in having a proper place to sleep and a way out of Madrid. There’s nothing we can do in Madrid, and we’re not in the mood to explore the city any further. So we settle on Bordeaux, at least it’s closer to Paris.
7:45am
We find ourselves sitting on the train to Bordeaux. The guy sitting next to me, who I later found out is a Romanian journalist attending the championship game, says it's also very crowded in Bordeaux, he was from there and is certain that we'll have to wait for another train later than 7pm. It's too late and pointless to think of another plan. As soon as the train starts moving, my eyes shut.
We should have been sleeping in our Paris hotel at this time. Instead, we’d been struggling with (against?) EasyJet customer service reps and scrambling for alternative options out of Madrid. I haven’t had any sleep and right now sitting in this corner staring at the empty airport brings both excitement and nervousness.
Our flight from Madrid to Paris was supposed to board at 17:05. We waited in the line until 17:30, and they told us it was going to be another 30 minutes. At 18:00 they told us to line up again. At 18:30, nothing happened, we were told to wait until further notice. At 19:00, we lined up again. At 19:30, they said the plane would be ready at 20:05. 20:30 passed, and we were still standing in front of the gate. During this whole time, all the announcements were made in Spanish first and broken English later, so we had to find out from the locals. At 21:45, they made a long announcement, and suddenly everybody growled and started running away from the gate. I didn’t know what the announcer said but I ran after them, unbeknownst that the flight was canceled and there were limited seats in the next flight to Paris at 1am.
We chased after the Spaniards in MAD airport and finally arrived at the EasyJet kiosk. There were 30 or more people in the line in front of us already. Apparently, the next Paris flight was on Monday, May 24. We already booked the hotel for 4 nights; that leaves us with only 2 nights in Paris. I called my friend in Paris to let her know that we won't be there tonight. Then, after 10 minutes the EasyJet people standing outside the kiosk told us the earliest flight to Paris was on Tuesday. We started freaking out, we're to fly early on Wednesday to Berlin. Paris was now an uncertain connection.
I told my brother to run around looking for wifi so that we can search for alternative transportation such as other airlines, train, bus, or car rental. His girlfriend went around getting information from different people in different accents. There was a French lady filming the whole thing including her conversation with the EasyJet reps. There was an American girl crying. A Japanese couple speaking almost no English looked at their rescheduled flight, then bowed and begged them to make it earlier. I took out my camera and snapped a few photos of the crowd.
After we were in the line for a good 30 minutes, they started handing out English instruction. We had 2 options, either wait for the reroute or get a refund of 250 euros. If we go with the first choice they will pay for food and hotel until the next flight. We went with the second choice, which doesn't include food and hotel stay because we want to see Paris, plus we didn’t want to be at the mercy of EasyJet. I'm not sure if the refund is supposed to be in cash or EasyJet credit. The language is vague enough for desperate people to wish for anything
When it was our turn to speak to the rep, the earliest Paris flight was now Wednesday. At this point, my brother had resourcefully found a wifi spot and information for a flight at 8:00am with another airline, the cost was 300 euros each – 50 euros short of what EasyJet will reimburse us. We figured it's worth it. Since we're going to spend the night at the airport while paying for an empty room in Paris, what's an extra 50 euros.
We asked for procedure to get our refund. They told us to go online, and when we went online, we learned that you have to call a number which charges 10p per minute. It will also take up to 7 days to get our money back. No point focusing on this right now, we needed to find a way out. The Inter Milan vs. Bayern Munich championship game was just over, the later we wait the less likely we’d get out, let alone finding transportation to Paris.
The three of us gathered upstairs at the wifi hotspot along with a few other Americans and the Boncans, a very friendly Filipino family. Mr. Boncan’s been doing a lot of business in Saigon, which is where I was born and raised and will be in the next 4-5 months, so we exchanged contact information. Apparently my brother bought the wifi access from a guy whose fate was in worse shape than us. This guy’s money was all stolen while traveling on an island. He then sold his watch to take the train back to Madrid and been stucked at the airport waiting for money from his sister since last week. So he’s been hacking the airport wifi password and selling it for food. He’s a very nice guy. He offered power plugin for our laptop and his laptop to people who didn’t have one. He even canceled his torrent downloads to boost our connection ;-)
By the time we accessed the Vueling airline website, their 8am flight was gone, so was the 2pm. I also learned that it’s not possible to pick up a rental car in Madrid and drop it off in Paris. There was an overnight bus, which started on Sunday10pm to Monday morning. I was also chatting with my cousin in Switzerland at this time, she suggested checking out the trains. It was 1:00am, the train office is closed until 6:30am and so did their online schedule for some bizarre reason.
After trying some other airlines, we finally settled on the trains. My cousin confirmed that there were a few routes going from Madrid to Paris, through Barcelona and Montpellier. We will take the earliest metro to Atocha Renfe to catch the earliest available train to Paris. Others have also overcome the initial shock and are finalizing their plan B. We took pictures and facebooked one another. Mrs. Boncan pulled out a bottle of wine and suggested we have a party in this corner. For a brief moment I kind of enjoy this unexpected experience and believe we will get out of Madrid and make it to Paris.
Part 2: The train to nowhere
Part 3: Bonjour Paris
Part 4: EasyJet, not so easy
It has been a hectic week, we had no free time in our itinerary since free times became sleep times, and sleep times became sleepless nights at airports. I’m mildly disappointed that I didn’t get to do any programming as promised. But in return, I got lots of fun and drama out of this Europe trip.
We were very fortunate to have our cousin in Switzerland planning our Switzerland stay and Spain trip, so I was able to squeeze in 1 to 2 hours of quality programming everyday during the first week in Europe. As soon as my cousin left, things started going downhill. We were plagued with a long chain of unfortunate events that only now can I sit down and retell what happened. The following are taken from my notes written while the events are unfolded. They completely reflect my sentiment about our uncertain future at the time.
Now, this is the story all about how my life got flipped, turned upside down, and I'd like to take a minute just sit right there I'll tell you...
1. However, I realize that a) you cannot achieve happy ends through unhappy means and b) if you don't know what happiness is, how can you be sure what you're chasing will bring you happiness? So I got out of the rat race and observe from the sideline.